home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume11 / mtools / part02 / unixname.c < prev   
C/C++ Source or Header  |  1987-08-27  |  2KB  |  119 lines

  1. /*
  2.  * unixname(), getname(), getpath()
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <ctype.h>
  7.  
  8. /*
  9.  * Get rid of spaces in a MSDOS 'raw' name (one that has come from the
  10.  * directory structure) so that it can be used for regular expression
  11.  * matching with a unix file name.  Also used to 'unfix' a name that has
  12.  * been altered by fixname().  Returns a pointer to the unix style name.
  13.  */
  14.  
  15. char *
  16. unixname(name, ext)
  17. char *name;
  18. char *ext;
  19. {
  20.     static char *ans;
  21.     char *s, tname[9], text[4], *strcpy(), *strcat(), *malloc();
  22.     char *strchr(), *strncpy();
  23.  
  24.     strncpy(tname, name, 8);
  25.     s = strchr(tname, ' ');
  26.     if (s != NULL)
  27.         *s = NULL;
  28.     tname[8] = NULL;
  29.  
  30.     strncpy(text, ext, 3);
  31.     s = strchr(text, ' ');
  32.     if (s != NULL)
  33.         *s = NULL;
  34.     text[3] = NULL;
  35.  
  36.     if (*text != NULL) {
  37.         ans = malloc(strlen(tname)+1+strlen(text)+1);
  38.         strcpy(ans, tname);
  39.         strcat(ans, ".");
  40.         strcat(ans, text);
  41.     }
  42.     else {
  43.         ans = malloc(strlen(tname)+1);
  44.         strcpy(ans, tname);
  45.     }
  46.     return(ans);
  47. }
  48.  
  49. /*
  50.  * Get name component of filename.  Translates name to upper case.  Returns
  51.  * pointer to new name.  Could be NULL.
  52.  */
  53.  
  54. char *
  55. getname(name)
  56. char *name;
  57. {
  58.     char *s, *malloc(), *strcpy(), *strrchr();
  59.     static char *temp;
  60.  
  61.     if (*name == NULL)
  62.         return(NULL);
  63.  
  64.     temp = malloc(strlen(name)+1);
  65.     strcpy(temp, name);
  66.                 
  67.     if (s = strrchr(temp, '/'))
  68.         temp = s+1;
  69.     if (s = strrchr(temp, '\\'))
  70.         temp = s+1;
  71.  
  72.     for (s = temp; *s; ++s) {
  73.         if (islower(*s))
  74.             *s = toupper(*s);
  75.     }
  76.     return(temp);
  77. }
  78.  
  79. /*
  80.  * Get the path component of the filename.  Translates to upper case.
  81.  * Returns pointer to path or NULL if no path exist.  Doesn't alter
  82.  * leading separator, always strips trailing separator (unless it is the
  83.  * path itself).
  84.  */
  85.  
  86. char *
  87. getpath(name)
  88. char *name;
  89. {
  90.     char *s, *s1, *malloc(), *strcpy(), *strrchr();
  91.     static char *temp;
  92.  
  93.     if (*name == NULL)
  94.         return(NULL);
  95.  
  96.     temp = malloc(strlen(name)+1);
  97.     strcpy(temp, name);
  98.  
  99.     s = strrchr(temp, '/');
  100.     s1 = strrchr(temp, '\\');
  101.                     /* if both are NULL , no path */
  102.     if (s1 == s)
  103.         return(NULL);
  104.                     /* zap which ever is last separator */
  105.     if (s1 > s)
  106.         *s1 = NULL;
  107.     if (s > s1)
  108.         *s = NULL;
  109.                     /* translate to upper case */
  110.     for (s = temp; *s; ++s) {
  111.         if (islower(*s))
  112.             *s = toupper(*s);
  113.     }
  114.                     /* if null, put separator back */
  115.     if (!strlen(temp))
  116.         temp = "/";
  117.     return(temp);
  118. }
  119.