home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / OLS / Os2 / LHA2P205 / LHA2P205.LZH / lha2-2.05pre / source.lzh / src / path.c < prev    next >
C/C++ Source or Header  |  1996-02-25  |  2KB  |  103 lines

  1. /*
  2.  * path.c --- convert to MS-DOS's and OS/2's(HPFS) pathname
  3.  *   Copyright (C) 1988-1992, Haruyasu YOSHIZAKI
  4.  *   Copyright (C) 1991-1995, Satoshi HIRAMATSU (OS/2 HPFS version)
  5.  *
  6.  * $Log$
  7.  */
  8.  
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <time.h>
  13. #include "port2.h"
  14. #include "typedef.h"
  15. #include "lh.h"
  16.  
  17.  
  18. char *
  19. form_name(unsigned char *p, int i)
  20. {
  21.   int j, kflg;
  22.  
  23.   kflg = 0;
  24.   for(j = 0; j < i; j++)
  25.     {
  26.       if(*p == 0)
  27.     break;
  28.       else if(kflg)
  29.     kflg = 0;
  30.       else if(iskanji(*p))
  31.     kflg = 1;
  32.       else if(ifs == FAT &&
  33.           (strchr("\"*+,./:;<=>?[\\]|\xff", *p) || *p <= ' '))
  34.     *p = '_';
  35.       else if(ifs == HPFS && (strchr("\"*/:<>?\\|\xff", *p) || *p <= ' '))
  36.     *p = '_';
  37.       p++;
  38.     }
  39.   if(kflg)
  40.     p--;
  41.   *p = '\0';
  42.  
  43.   return p;
  44. }
  45.  
  46.  
  47. void
  48. form_identifier(char *p)
  49. {
  50.   char *q, *r;
  51.  
  52.   q = strrchr(p, '.');
  53.   if(ifs == HPFS)
  54.     form_name(p, MAXPATHLEN);
  55.   else
  56.     {
  57.       if(q)
  58.     {
  59.       *q = '\0';
  60.       r = form_name(p, 8);
  61.       *r++ = '.';
  62.       q++;
  63.       form_name(q, 3);
  64.       strcpy(r, q);
  65.     }
  66.       else
  67.     form_name(p, 8);
  68.     }
  69. }
  70.  
  71.  
  72. void
  73. form_path(char *p)
  74. {
  75.   char *q, *r;
  76.  
  77.   if(*p == DELIM)
  78.     p++;
  79.   r = p;
  80.   q = strchr(p, DELIM);
  81.   while(q)
  82.     {
  83.       *q = '\0';
  84.       form_identifier(p);
  85.       r = stpcpy(r, p);
  86.       *r++ = DELIM;
  87.       p = q + 1;
  88.       q = strchr(p, DELIM);
  89.     }
  90.   form_identifier(p);
  91.   strcpy(r, p);
  92. }
  93.  
  94.  
  95. #ifdef __DEBUG_PATH_C__
  96. void
  97. main(int argc, char *argv[])
  98. {
  99.   form_path(argv[1]);
  100.   printf("%s\n", argv[1]);
  101. }
  102. #endif
  103.