home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / TCH2AVI.LZH / STR.C < prev    next >
C/C++ Source or Header  |  1996-05-10  |  4KB  |  234 lines

  1. #pragma hdrstop
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. #if 0
  7. void _makepath(char *path, char *drive, char *dir, char *fname, char *ext)
  8. {
  9.     for (; *drive; *path++ = *drive++);
  10.     for (; *dir; *path++ = *dir++);
  11.     for (; *fname; *path++ = *fname++);
  12.     for (; *ext; *path++ = *ext++);
  13.     *path = '\0';
  14. /*
  15.     sprintf(path, "%s%s%s%s", drive, dir, fname, ext);
  16. */
  17. }
  18.  
  19. void _splitpath(char *path, char *drive, char *dir, char *fname, char *ext)
  20. {
  21.     char *p;
  22.     if (isalpha(path[0]) && path[1] == ':') {
  23.         drive[0] = path[0]; drive[1] = ':'; drive[2] = '\0';
  24.         path += 2;
  25.     } else {
  26.         drive[0] = '\0';
  27.     }
  28.     if ((p = strrchr(path, '\\')) != NULL || (p = strrchr(path, '/')) != NULL) {
  29.         strncpy(dir, path, p - path+1);
  30.         dir[p - path+1] = '\0';
  31.         path = p+1;
  32.     } else {
  33.         dir[0] = '\0';
  34.     }
  35.     if ((p = strchr(path, '.')) != NULL) {
  36.         strncpy(fname, path, p - path);
  37.         fname[p - path] = '\0';
  38.         strcpy(ext, p);
  39.     } else {
  40.         strcpy(fname, path);
  41.         ext[0] = '\0';
  42.     }
  43. }
  44. #endif
  45.  
  46. unsigned short getword(FILE *fp)
  47. {
  48.     unsigned short d;
  49.     d = fgetc(fp) << 8;
  50.     d |= fgetc(fp);
  51.     return d;
  52. }
  53.  
  54. int skipspace(FILE *fp)
  55. {
  56.     int c, lc = 0;
  57.     long p;
  58.     p = ftell(fp);
  59.     while ((c = fgetc(fp)) != EOF) {
  60.         if (lc == '/' && c == '*') {
  61.             lc = fgetc(fp);
  62.             while ((c = fgetc(fp)) != EOF) {
  63.                 if (lc == '*' && c == '/') {
  64.                     break;
  65.                 }
  66.                 lc = c;
  67.             }
  68.             if (c == EOF) {
  69.                 return EOF;
  70.             }
  71.             c = 0;
  72.         } else if (lc > 0x20) {
  73.             break;
  74.         } else if (lc != 0 && lc != ' ' && lc != '\t' && lc != '\r' && lc != '\n') {
  75.             break;
  76.         }
  77.         p = ftell(fp);
  78.         lc = c;
  79.     }
  80.     if (c == EOF) {
  81.         return EOF;
  82.     }
  83.     fseek(fp, p-1, SEEK_SET);
  84. #if 0
  85.     ungetc(c, fp);
  86. #endif
  87.     return c;
  88. }
  89.  
  90. int gettoken(char *p, FILE *fp)
  91. {
  92.     int c, lc;
  93.     long ft;
  94.     if (skipspace(fp) == EOF) {
  95.         return EOF;
  96.     }
  97.     *p++ = lc = c = fgetc(fp);
  98.     ft = ftell(fp);
  99.     if (c == 0x1a || strchr("(){}[]", c) != NULL) {
  100.         *p = '\0';
  101.         return c;
  102.     }
  103.     while ((c = *p++ = fgetc(fp)) != EOF) {
  104.         if (lc  == '/' && c == '*') {
  105.             fseek(fp, -1, SEEK_CUR);
  106.             p[-2] = '\0';
  107.             break;
  108.         }
  109.         if (c <= 0x20) {
  110.              break;
  111.          }
  112.         if (strchr("(){}[]", c) != NULL) {
  113.             break;
  114.         }
  115.         lc = c;
  116.         ft = ftell(fp);
  117.     }
  118.     if (c == EOF) {
  119.         return EOF;
  120.     }
  121.     fseek(fp, ft, SEEK_SET);
  122. #if 0
  123.     ungetc(c, fp);
  124. #endif
  125.     *--p = '\0';
  126.     return c;
  127. }
  128. #if 0
  129. int removepic(char *name)
  130. {
  131.     int i;
  132.     i = strlen(name);
  133.     if (i > 4 && name[i-4] == '.'
  134.      && toupper(name[i-3]) == 'P'
  135.      && toupper(name[i-2]) == 'I'
  136.      && toupper(name[i-1]) == 'C') {
  137.         name[i-4] = '\0';
  138.         i -= 4;
  139.     }
  140.     return i;
  141. }
  142. #else
  143. int removepic(char *name)
  144. {
  145.     int i;
  146.     i = strlen(name);
  147.     if (i > 4 && name[i-4] == '.'
  148.      && toupper(name[i-3]) == 'B'
  149.      && toupper(name[i-2]) == 'M'
  150.      && toupper(name[i-1]) == 'P') {
  151.         name[i-4] = '\0';
  152.         i -= 4;
  153.     }
  154.     return i;
  155. }
  156. #endif
  157.  
  158. int removetch(char *name)
  159. {
  160.     int i;
  161.     i = strlen(name);
  162.     if (i > 4 && name[i-4] == '.'
  163.      && toupper(name[i-3]) == 'T'
  164.      && toupper(name[i-2]) == 'C'
  165.      && toupper(name[i-1]) == 'H') {
  166.         name[i-4] = '\0';
  167.         i -= 4;
  168.     }
  169.     return i;
  170. }
  171.  
  172. void addtch(char *name)
  173. {
  174.     int i;
  175.     i = strlen(name);
  176.     if (i > 4 && name[i-4] == '.'
  177.      && toupper(name[i-3]) == 'T'
  178.      && toupper(name[i-2]) == 'C'
  179.      && toupper(name[i-1]) == 'H') {
  180.     } else {
  181.         name[i++] = '.';
  182.         name[i++] = 'T';
  183.         name[i++] = 'C';
  184.         name[i++] = 'H';
  185.         name[i++] = '\0';
  186.     }
  187. }
  188.  
  189.  
  190. int    removenumber(char *name)
  191. {
  192.     int i;
  193.     int frame = 0;
  194.     i = removepic(name);
  195.     if (i > 3 && isdigit(name[i-3]) && isdigit(name[i-2]) && isdigit(name[i-1])) {
  196.         frame = (name[i-3]-'0')*100 + (name[i-2]-'0')*10 + (name[i-1]-'0');
  197.         name[i-3] = '\0';
  198.     }
  199.     return frame;
  200. }
  201. #if 0
  202. int    ismovie(char *name)
  203. {
  204.     int i;
  205.     i = strlen(name);
  206.     if (name[i-4] == '.'
  207.      && toupper(name[i-3]) == 'P'
  208.      && toupper(name[i-2]) == 'I'
  209.      && toupper(name[i-1]) == 'C') {
  210.         i -= 4;
  211.     }
  212.     if (isdigit(name[i-3]) && isdigit(name[i-2]) && isdigit(name[i-1])) {
  213.         return (name[i-3]-'0')*100 + (name[i-2]-'0')*10 + (name[i-1]-'0');
  214.     }
  215.     return 0;
  216. }
  217. #else
  218. int    ismovie(char *name)
  219. {
  220.     int i;
  221.     i = strlen(name);
  222.     if (name[i-4] == '.'
  223.      && toupper(name[i-3]) == 'B'
  224.      && toupper(name[i-2]) == 'M'
  225.      && toupper(name[i-1]) == 'P') {
  226.         i -= 4;
  227.     }
  228.     if (isdigit(name[i-3]) && isdigit(name[i-2]) && isdigit(name[i-1])) {
  229.         return (name[i-3]-'0')*100 + (name[i-2]-'0')*10 + (name[i-1]-'0');
  230.     }
  231.     return 0;
  232. }
  233. #endif
  234.