home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / mntlib16.lzh / MNTLIB16 / UNX2DOS.C < prev    next >
C/C++ Source or Header  |  1993-07-29  |  2KB  |  97 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <osbind.h>
  5. #include <types.h>
  6.  
  7. extern int __mint;
  8. extern char _rootdir;    /* in main.c: user's preferred root directory */
  9.  
  10. int _unixmode;        /* not used right now */
  11.  
  12. /*
  13.  * returns 0 for ordinary files, 1 for special files (like /dev/tty)
  14.  */
  15.  
  16. int
  17. _unx2dos(unx, dos)
  18.     const char *unx;
  19.     char *dos;
  20. {
  21.     const char *u;
  22.     char *d, c;
  23.  
  24.     dos[0] = 0;
  25.     u = unx; d = dos;
  26.     if (!strncmp(u, "/dev/", 5)) {
  27.         u += 5;
  28.     /* make /dev/A/foo the same as A:/foo */
  29.  
  30.         if (*u && (u[1] == 0 || (u[1] == '/' || u[1] == '\\'))) {
  31.             d[0] = *u++;
  32.             d[1] = ':';
  33.             d += 2;
  34.         }
  35.     /* check for a unix device name */
  36.         else if (__mint) {
  37.             if (__mint >= 8) {
  38.                 strcpy(d, "U:\\dev\\"); d += 7;
  39.             } else {
  40.                 strcpy(d, "V:\\");
  41.                 d += 3;
  42.             }
  43.         }
  44.         else {
  45.             strcpy(d, u);
  46.             strcat(d, ":");
  47.             if (!strcmp(d, "tty:"))
  48.                 strcpy(d, "con:");
  49.             return 1;
  50.         }
  51.     } else if (__mint && !strncmp(u, "/pipe/", 6)) {
  52.         u += 6;
  53.         if (__mint >= 9) {
  54.             strcpy(d, "U:\\pipe\\"); d += 8;
  55.         } else {
  56.             strcpy(d, "Q:\\"); d += 3;
  57.         }
  58.     } else if (*u == '/' && _rootdir) {
  59.         *d++ = _rootdir;
  60.         *d++ = ':';
  61.     }
  62.  
  63.     while( (c = *u++) != 0 ) {
  64.         if (c == '/')
  65.             c = '\\';
  66. /* translate "c:/foo/d:/bar" into "d:\bar" */
  67.         else if (c == ':') {
  68.             if (   (d > &dos[1] && d[-2] == '\\')
  69.                 || (d == &dos[1]) ) {
  70.                 *dos = d[-1];
  71.                 d = dos+1;
  72.             }
  73.         }
  74.         *d++ = c;
  75.     }
  76.     *d++ = 0;
  77.     return 0;
  78. }
  79.  
  80. int
  81. _dos2unx(dos, unx)
  82.     const char *dos;
  83.     char *unx;
  84. {
  85.     char c;
  86.  
  87.     while ( (c = *dos++) != 0) {
  88.         if (c == '\\')
  89.             c = '/';
  90.         else if (__mint < 7)
  91.             c = tolower(c);
  92.         *unx++ = c;
  93.     }
  94.     *unx++ = 0;
  95.     return 0;
  96. }
  97.