home *** CD-ROM | disk | FTP | other *** search
/ Dream 48 / Amiga_Dream_48.iso / Atari / c / sozobon-v2 / dlibsrc.lha / FULLPATH.C < prev    next >
C/C++ Source or Header  |  1988-10-04  |  1KB  |  72 lines

  1. #include <stdio.h>
  2. #include <osbind.h>
  3. #include <limits.h>
  4. #include <string.h>
  5.  
  6. char *fullpath(full, part)
  7.     register char *full;
  8.     register char *part;
  9.     {
  10.     static char buf[PATHSIZE];
  11.     register char *bp = buf;
  12.     register int drv;
  13.  
  14.     if (*part && (part[1] == ':'))
  15.         {
  16.         drv = *bp++ = *part++;
  17.         drv = ((drv - 1) & 0xF);
  18.         *bp++ = *part++;
  19.         }
  20.     else
  21.         {
  22.         *bp++ = (drv = Dgetdrv()) + 'a';
  23.         *bp++ = ':';
  24.         }
  25.     if (*part == '\\')
  26.         ++part;
  27.     else
  28.         {
  29.         Dgetpath(bp, drv+1);    /* 1 BASED drive number here */
  30.         while(*bp++)
  31.             ;
  32.         --bp;
  33.         }
  34.     *bp++ = '\\';
  35.     *bp = '\0';
  36.     while(*part)            /* handle dots and copy path & file */
  37.         {
  38.         if (*part == '.')
  39.             {
  40.             if (*++part == '.')
  41.                 {
  42.                 if ((*++part) && (*part != '\\'))
  43.                     return(NULL);    /* illegal pathname */
  44.                 else
  45.                     {
  46.                     --bp;
  47.                     while(*--bp != '\\')
  48.                         if(*bp == ':')
  49.                             {
  50.                             ++bp;
  51.                             break;
  52.                             }
  53.                     ++bp;
  54.                     if(*part)
  55.                         ++part;
  56.                     }
  57.                 }
  58.             else if ((*part) && (*part != '\\'))
  59.                 return(NULL);        /* illegal pathname */
  60.             else
  61.                 ++part;
  62.             }
  63.         else
  64.             while(*part && ((*bp++ = *part++) != '\\'))
  65.                 ;
  66.         }
  67.     *bp = '\0';
  68.     if (full == NULL)    /* special case to use local buffer */
  69.         full = buf;
  70.     return(strlwr(strcpy(full, buf)));    /* lowercase and return */
  71.     }
  72.