home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 125.img / PRO-C4.ZIP / BENCH1.ZIP / BENCH / PUSH.C < prev    next >
C/C++ Source or Header  |  1990-05-28  |  1KB  |  84 lines

  1. #include <stdio.h>
  2. #include <bench.h>
  3. #include <tree.h>
  4. #include <dllist.h>
  5.  
  6. #define MAXPATHLEN 128
  7.  
  8. static int dir_hd = -1;
  9.  
  10. /* RT does not define this so here's the hack ...  */
  11. static int my_strcmp(a, b)
  12. char *a, *b;
  13. {
  14.     return(strcmp(a, b));
  15. }
  16.  
  17. int pushd(dirnam)
  18. register char *dirnam;
  19. {
  20.     char dirbuf[MAXPATHLEN + 1];
  21.  
  22.     if (dir_hd == -1)
  23.         dir_hd = dll_open(my_strcmp, MAXPATHLEN + 1);
  24.  
  25.     getcwd(dirbuf, MAXPATHLEN);
  26.  
  27.     if (dll_add(dir_hd, dirbuf, ADD_NOSORT) == -1)
  28.     {
  29.         errmsg("Stack overflow in pushd()");
  30.         return(-1);
  31.     }
  32.  
  33. #ifdef MSDOS
  34.     if (*dirnam != dirbuf[0] && *(dirnam + 1) == ':')
  35.         chdrive(*dirnam);
  36. #endif
  37.     return(chdir(dirnam));
  38. }
  39.  
  40. int popd()
  41. {
  42.     register char *dirp;
  43.     char dirbuf[MAXPATHLEN + 1];
  44.  
  45.     getcwd(dirbuf, MAXPATHLEN);
  46.  
  47.     dirp = (char *)dll_seek(dir_hd, 0, SEEK_END);
  48.     if (dirp == NULL)
  49.     {
  50.         errmsg("Stack underflow in popd()");
  51.         return(-1);
  52.     }
  53.  
  54. #ifdef MSDOS
  55.     if (dirbuf[0] != *dirp)
  56.         chdrive(*dirp);
  57. #endif
  58.  
  59.     chdir(dirp);
  60.     return(dll_del(dir_hd));
  61. }
  62.  
  63. #ifdef MSDOS
  64. int chdrive(drive)
  65. char drive;
  66. {
  67.     char cmd[3];
  68.  
  69.     cmd[0] = drive;
  70.     cmd[1] = ':';
  71.     cmd[2] = '\0';
  72.     return(system(cmd));
  73. }
  74.  
  75. char curdrive()
  76. {
  77.     union REGS r;
  78.  
  79.     r.h.ah = 0x19;
  80.     intdos(&r, &r);
  81.     return(r.h.al + 'A');
  82. }
  83. #endif
  84.