home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / SWITCH2.ZIP / SW.C < prev    next >
C/C++ Source or Header  |  1990-01-22  |  3KB  |  154 lines

  1. /* switch.c */
  2. /* Copyright Darien Mann 1989 
  3. GENIE D.MANN4  */
  4.  
  5. #include "os2.h"
  6. #include "stdio.h"
  7. #include "stdlib.h" /* for DOS_MODE, OS2_MODE */
  8. #include "string.h"
  9. #include "dos.h"
  10. #include "ctype.h"
  11.  
  12. #define HDIR_CREATE -1
  13. #define HDIR_SYSTEM 1
  14. FILEFINDBUF fbuf;
  15.  
  16. int drvno;
  17. int count = 0;
  18. char sname[256];
  19. char originaldir[256];
  20. FILE *fp;
  21.  
  22. main(argc,argv)
  23. int argc;
  24. char **argv;
  25. {
  26. unsigned long drvmap;
  27. register int i;
  28.     if(argc < 2)
  29.         {
  30.         printf("sw: missing directory\n");
  31.         exit(1);
  32.         }
  33.     DosQCurDisk(&drvno, &drvmap);
  34.     if(((strlen(argv[1])) >=2) && ((argv[1])[1] == ':'))
  35.     {
  36.         drvno = ((argv[1])[0] | 0x20) - ('a'-1);
  37.  
  38.         if(DosSelectDisk(drvno))
  39.         {
  40.             printf("\nsw:bad drive\n");
  41.             exit(1);
  42.         }
  43.         argv[1] += 2;
  44.     }
  45.     strcpy(sname,argv[1]);
  46.     for(i = 0; i<strlen(sname); i++)
  47.         sname[i] = toupper(sname[i]);
  48.     pdir();
  49.     schdir();
  50.     printf("sw: no match found\n");
  51.  
  52. }
  53.  
  54. schdir()
  55. {
  56.  
  57.     int i;
  58.     static char temp[256];
  59.  
  60.     if ((fp = fopen("\\tree.txt","r")) == NULL)
  61.     {
  62.         perror("Can't open tree.txt");
  63.         exit(0);
  64.     }
  65.     while(fgets(temp,sizeof(char)*256,fp))
  66.         switchdir(temp);
  67.     fclose(fp);
  68. }
  69. switchdir(char dbuf[])
  70. {
  71.     register int i,j;
  72.     char temp[256];
  73.     char machinemode;
  74.     i = strlen(dbuf);
  75.     dbuf[i-1] = 0; /* get rid of linefeed */
  76.     if(strcmp(originaldir,dbuf) == 0)
  77.         return(0);
  78.     for(i = 0; i<256; i++)
  79.         temp[i] = 0;
  80.     i = strlen(dbuf);
  81.     i--;/* step past terminating null */
  82.     j = 0;
  83.     while((dbuf[i] != '\\') && (i >= 0))
  84.         temp[j++] = dbuf[i--];
  85.     reverse(temp);
  86. /*    printf("temp = %s: sname = %s: dbuf = %s\n",temp,sname,dbuf);
  87.     getch(); */
  88.     if(compare(temp,sname) == 0)
  89.     {
  90.     fclose(fp);
  91.         if(DosChdir(dbuf, 0L))
  92.             {
  93.             printf("bad directory\n");
  94.             exit(0);
  95.             }
  96.     DosGetMachineMode(&machinemode);
  97.     if(machinemode == OS2_MODE) /* how is parent session changed? */
  98.         exec();
  99.     exit(0);
  100.     }
  101. }
  102. reverse(char s[])
  103. {
  104.     int c,i,j;
  105.     for(i = 0,j=strlen(s)-1; i<j; i++,j--)
  106.     {
  107.         c=s[i];
  108.         s[i]=s[j];
  109.         s[j]=c;
  110.     }
  111. }
  112. exec()
  113. {
  114.     char objname[64];
  115.     long retcode;
  116.     int objname_len = sizeof(objname);
  117.     DosExecPgm(objname,objname_len,EXEC_SYNC,NULL,NULL,&retcode,"cmd.exe");
  118. }
  119. compare(temp,sname)
  120. char temp[];
  121. char sname[];
  122. {
  123.     int i;
  124.     i = 0;
  125.     while((temp[i] == sname[i]) && (temp[i] != 0))
  126.             i++;
  127.     if(i == strlen(sname))
  128.         return(0);
  129.     else
  130.         return(1);
  131. }
  132.  
  133. pdir()
  134. {
  135.     register int i,j;
  136.     char temp[256];
  137.     char temp2[256];
  138.     char dbuf[256];
  139.     int ltemp2 = sizeof(temp2);
  140.     DosQCurDir(0,temp2,<emp2);
  141.     dbuf[0] = drvno+'A'-1;
  142.     dbuf[1] = ':';
  143.     dbuf[2] = '\\';
  144.     strcat(dbuf,temp2);
  145.     i = strlen(dbuf);
  146.     i--;/* step past terminating null */
  147.     j = 0;
  148.     while((dbuf[i] != '\\') && (i >= 0))
  149.         temp[j++] = dbuf[i--];
  150.     reverse(temp);
  151.     strcpy(originaldir,dbuf);
  152. }
  153.  
  154.