/* Map a drive letter to the next free drive, & set and env variable * */ #include #include #include #include int i; int iVerbose=0; #ifdef DEBUG int iDebug=0; #endif int iIgnore=0; int iSearch=0; NWCONN_HANDLE ConnectionHandle; NWDIR_HANDLE DirectoryHandle; char SetName[128]; char SetVal[256]; char UserPath[256]; char DirPathName[256]; char ServerName[48]; char VectorBuffer[16]; int ccode; int iFirstDrive,iDriveLetter; int status; static char *PATH="PATH"; int GetEnvironmentVariable(char *,char *); int PutEnvironmentVariable(char *,char *); void Usage(void) { #ifdef DEBUG fprintf(stderr,"Usage:\n\tmapnext [-d] [-v] [-s] \n"); fprintf(stderr,"\t\t-d : Debug program\n"); #else fprintf(stderr,"Usage:\n\tmapnext [-v] [-s] \n"); #endif fprintf(stderr,"\t\t-v : verbose output\n"); fprintf(stderr,"\t\t-s : create a search mapping\n"); exit(4); }; void main(int argc,char *argv[]) { int i; int iVerbose=0; #ifdef DEBUG int iDebug=0; #endif int iIgnore=0; int iSearch=0; NWCONN_HANDLE ConnectionHandle; NWDIR_HANDLE DirectoryHandle; char SetName[128]; char SetVal[256]; char UserPath[256]; char DirPathName[256]; char VectorBuffer[16]; int ccode; int iFirstDrive,iDriveLetter; int status; printf("[MAPNEXT Version 1.23 Copyright (C) 1994 University of Salford]\n"); ccode=NWCallsInit(NULL,NULL); if (ccode) { fprintf(stderr,"NWCALLS Initialisation failed (0x%04x)\n",ccode); exit(1); }; for (i=1;i=iFirstDrive;iDriveLetter--) { ccode=NWGetDriveStatus(iDriveLetter,NW_FORMAT_UNC,&status,NULL,NULL,NULL,NULL); if (ccode) { if (iVerbose) fprintf(stderr,"Could not locate any free drive letters\n"); exit(2); }; if (status==NW_FREE_DRIVE) break; }; if (status != NW_FREE_DRIVE) { if (iVerbose) fprintf(stderr,"Could not locate any free drive letters\n"); exit(2); }; if (iVerbose) printf("map root %c:=%s/%s\n",iDriveLetter+'@',ServerName,strupr(DirPathName)); /* set environment variable */ SetVal[0]=iDriveLetter+'@'; SetVal[1]=':'; SetVal[2]=0; ccode=PutEnvironmentVariable(SetName,SetVal); if (ccode) { if (iVerbose) printf("Out of environment space\n"); exit(1); }; GetEnvironmentVariable(SetName,SetVal); ccode=NWSetDriveBase(iDriveLetter,ConnectionHandle,0,DirPathName,0); if (ccode) { fprintf(stderr,"error (0x%04x) returned by NWSetDriveBase()\n",ccode); exit(3); }; if (!iSearch) exit(0); ccode=NWGetSearchDriveVector( VectorBuffer); if (ccode) { fprintf(stderr,"Unexpected error from NWGetSearchDriveVector (0x%04x)\n",ccode); exit(3); }; for (i=0;i<16;i++) { #ifdef DEBUG if (iDebug) printf("Vector[%d] : %d [%c]\n",i,VectorBuffer[i],VectorBuffer[i]+'A'); #endif if (VectorBuffer[i]==-1) break; }; if (VectorBuffer[i]!=-1) { fprintf(stderr,"Could not create a search drive mapping\n"); exit(3); }; /* create space at the start of the list */ while (i>0) { VectorBuffer[i]=VectorBuffer[i-1]; i--; }; /* insert new drive letter */ VectorBuffer[0]=iDriveLetter-1; for (i=0;i<16;i++) { #ifdef DEBUG if (iDebug) printf("Vector[%d] : %d [%c]\n",i,VectorBuffer[i],VectorBuffer[i]+'A'); #endif }; ccode=NWSetSearchDriveVector(VectorBuffer); if (ccode) { fprintf(stderr,"Unexpected error from NWSetSearchDriveVector (0x%04x)\n",ccode); exit(2); }; strcat(SetVal,".;"); ccode=GetEnvironmentVariable(PATH,&SetVal[strlen(SetVal)]); if (ccode) { fprintf(stderr,"Failed to read environment"); exit(1); }; ccode=PutEnvironmentVariable(PATH,SetVal); if (ccode) { fprintf(stderr,"Failed to write environment"); exit(1); }; exit(0); };