home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_08_02 / 8n02119a < prev    next >
Text File  |  1990-03-01  |  2KB  |  96 lines

  1. *****Listing 4*****
  2.  
  3. /*
  4.  * UTIL.C:    Utility functions for CDE/RET package
  5.  *
  6.  *        These function rely on the "bdos" library function
  7.  *        from your compiler's library. Prototype:
  8.  *
  9.  *        int bdos(int dosfn, unsigned dosdx, unsigned dosal);
  10.  */
  11.  
  12. #include     <stdio.h>
  13. #include    <dos.h>
  14. #include    <ctype.h>
  15. #include    "util.h"
  16.  
  17. /*
  18.  *    Print error msg and abort:
  19.  */
  20.  
  21. void error(char *msg)
  22. {
  23.     cputs("cde: ");
  24.     cputs(msg);
  25.     putch('\n');
  26.     exit(-1);
  27. }
  28.  
  29. /*
  30.  *    Change to specified drive/path, terminate program on error:
  31.  */
  32.  
  33. void change_dir(char *new_path)
  34. {
  35.     int old_drive;
  36.     
  37.     old_drive = getdrive();
  38.  
  39.     while (*new_path && isspace(*new_path))    /* skip whitespace            */
  40.         new_path++;
  41.  
  42.     if (new_path[1] == ':')                    /* if drive designator        */
  43.     {                                        /* given, then set drive    */
  44.         if (setdrive(tolower(*new_path) - 'a'))
  45.             error("Can't select given drive\n");
  46.         new_path += 2;
  47.     }
  48.     
  49.     if (*new_path && chdir(new_path))    /* If path given, set new path.    */
  50.     {
  51.         setdrive(old_drive);            /* If error, restore drive        */
  52.         error("Can't change to given path");
  53.     }
  54. }
  55.  
  56.  
  57. /*
  58.  *    DOS functions, written in terms of the "bdos" function:
  59.  */
  60.  
  61. int cputs(char *txt)        /* display msg, console I/O only */
  62. {
  63.     char c;
  64.     
  65.     while (c = *txt++)
  66.     {
  67.         if (c == '\n')
  68.             putch('\r');
  69.         putch(c);
  70.     }
  71.     return 0;
  72. }
  73.  
  74. int putch(char c)                /* display a char on console */
  75. {
  76.     return bdos(2, c, 0);
  77. }
  78.  
  79. int setdrive(int drive_no)        /* set logical drive. Return */
  80. {                                /* non-zero on error.        */
  81.     int after;
  82.  
  83.     bdos(0x0E, drive_no, 0);
  84.     after = bdos(0x19, 0, 0);
  85.     if ((after & 0xff) == drive_no)    /* low 8 bits are new drive no. */
  86.         return 0;            /* set correctly */
  87.     else
  88.         return -1;            /* error. */
  89. }
  90.  
  91. int getdrive()                    /* return current logical drive */
  92. {
  93.     return bdos(0x19, 0, 0);
  94. }
  95.  
  96.