home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 311_01 / fname.c < prev    next >
C/C++ Source or Header  |  1990-04-22  |  3KB  |  118 lines

  1. #include <stdio.h>
  2.  
  3. /*
  4.  *      fname_dflts - Merge defaults into a file spec
  5.  */
  6.  
  7. char *fname_dflts(fname, dflt)
  8.  char *fname, *dflt;
  9. {
  10.         static char new_name[256];
  11.         char node1[10], dev1[50], dir1[100], file1[50], ext1[50], ver1[10];
  12.         char node2[10], dev2[50], dir2[100], file2[50], ext2[50], ver2[10];
  13.  
  14.         fparse(fname, node1, dev1, dir1, file1, ext1, ver1);
  15.         fparse(dflt , node2, dev2, dir2, file2, ext2, ver2);
  16.  
  17.  
  18.         if (*node1) strcpy(new_name, node1); else strcpy(new_name, node2);
  19.         if (*dev1)  strcat(new_name, dev1);  else strcat(new_name, dev2);
  20.         if (*dir1)  strcat(new_name, dir1);  else strcat(new_name, dir2);
  21.         if (*file1) strcat(new_name, file1); else strcat(new_name, file2);
  22.  
  23.         if (*ext1)
  24.         {       strcat(new_name,".");
  25.                 strcat(new_name, ext1);
  26.         }
  27.         else
  28.         if (*ext2)
  29.         {       strcat(new_name,".");
  30.                 strcat(new_name, ext2);
  31.         }
  32.  
  33.         if (*ver1)
  34.         {       strcat(new_name,";");
  35.                 strcat(new_name, ver1);
  36.         }
  37.         else
  38.         if (*ver2)
  39.         {       strcat(new_name,";");
  40.                 strcat(new_name, ver2);
  41.         }
  42.  
  43.         return(new_name);
  44. }
  45.  
  46. /*
  47.  *      fparse - parse a file spec
  48.  */
  49.  
  50. fparse(fstr, o_node, o_dev, o_dir, o_file, o_ext, o_ver)
  51.  char *fstr, *o_node, *o_dev, *o_dir, *o_file, *o_ext, *o_ver;
  52. {
  53.         char *node, *dev, *dir, *file, *ext, *ver;
  54.         char *s, *d, hold[256], *file_dflt();
  55.  
  56.         d = node = dev = dir = file = hold;
  57.         ext = ver = NULL;
  58.         s = fstr;
  59.  
  60.         while (*s)
  61.         {       switch (*d++ = *s++)
  62.                 {       case ':':   if (*s == ':')
  63.                                     {       *d++ = *s++;
  64.                                             dev = dir = file = d;
  65.                                             break;
  66.                                     }
  67.  
  68.                                     dir = file = d;
  69.                                     break;
  70.  
  71.                         case ']':   ext  = NULL;
  72.                                     file = d;
  73.                                     break;
  74.  
  75.                         case '/':
  76.                         case '\\':  file = d;
  77.                                     break;
  78.  
  79.                         case '.':   ext  = d;
  80.                                     break;
  81.  
  82.                         case ';':   ver = --d;
  83.                                     break;
  84.  
  85.                         default:    break;
  86.                 }
  87.         }         
  88.     *d = 0;
  89.  
  90.         if (o_ver)
  91.                 if (ver) strcpy(o_ver,ver); else strcpy(o_ver,"");
  92.  
  93.     if (ver) *ver = 0;
  94.  
  95.         if (o_ext)
  96.                 if (ext) strcpy(o_ext,ext); else strcpy(o_ext,"");
  97.  
  98.     if (ext) *(ext-1) = 0;
  99.  
  100.         if (o_file)
  101.                 if (file) strcpy(o_file,file); else strcpy(o_file,"");
  102.                    
  103.     if (file) *file = 0;
  104.  
  105.         if (o_dir)
  106.                 if (dir) strcpy(o_dir,dir); else strcpy(o_dir,"");
  107.                   
  108.     if (dir) *dir = 0;
  109.  
  110.         if (o_dev)
  111.                 if (dev) strcpy(o_dev,dev); else strcpy(o_dev,"");
  112.                   
  113.     if (dev) *dev = 0;
  114.  
  115.         if (o_node)
  116.                 if (node) strcpy(o_node,node); else strcpy(o_node,"");
  117. }
  118.