home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / mslang / isam / keysrch / addfile.cpp next >
Encoding:
C/C++ Source or Header  |  1994-02-07  |  2.0 KB  |  106 lines

  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. #include "control.h"
  7. #include "fileinfo.h"
  8. #include "keyword.h"
  9. #include "xref.h"
  10.  
  11. dfCONTROL  control;
  12. dfFILEINFO fileinfo;
  13. dfKEYWORD  keyword;
  14. dfXREF     xref;
  15.  
  16. int no_keys = 0;
  17. int no_dups = 0;
  18.  
  19. void read_control(void)
  20.     {
  21.     control.key = 0;
  22.     if (control.find() == -1)
  23.         {
  24.         control.next_keyno = 0;
  25.         control.next_fileno = 0;
  26.         control.insert();
  27.         }
  28.     }
  29.  
  30. #define WHITESPACE "()<>,.{}!\"£$%^&*[]-_=+`¬?/\\|~#'@;: \t"
  31.  
  32. void add_keyword(char *key)
  33.     {
  34.     char *a = key;
  35.     for (int x = 0; x < 10; x++, a++)
  36.         {
  37.         if (!isalpha(*a) || *a < 0)
  38.             break;
  39.         }
  40.     if (x < 4)
  41.         return;
  42.     strncpy(keyword.name, key, x);
  43.     keyword.name[x] = 0;
  44.     strupr(keyword.name);
  45.     if (keyword.find() == -1)
  46.         {
  47.         no_keys++;
  48.         keyword.keyno = control.next_keyno++;
  49.         control.amend();
  50.         keyword.insert();
  51.         }
  52.     else
  53.         no_dups++;
  54.     xref.fileno = fileinfo.fileno;
  55.     xref.keyno = keyword.keyno;
  56.     if (xref.find() == -1)
  57.         xref.insert();
  58.     }
  59.  
  60. void process(const char *fname)
  61.     {
  62.     FILE *fp = fopen(fname, "rt");
  63.     if (fp == NULL)
  64.         return;
  65.     strncpy(fileinfo.path, fname, 65);
  66.     fileinfo.path[65] = 0;
  67.     if (fileinfo.find() != -1)
  68.         return;
  69.     fileinfo.fileno = control.next_fileno++;
  70.     control.amend();
  71.     fileinfo.insert();
  72.     char buffer[200];
  73.     while (fgets(buffer, 199, fp) != NULL)
  74.         {
  75.         buffer[199] = 0;
  76.         char *a = buffer;
  77.         if (isalpha(*a) && *a >= 0)
  78.             add_keyword(a);
  79.         for (; *a != 0 && *a != '\n'; a++)
  80.             {
  81.             if (isalpha(*a) && *a >= 0)
  82.                 continue;
  83.             if (strchr(WHITESPACE, *a) == NULL)
  84.                 continue;
  85.             if (!isalpha(*(a + 1)) || *(a + 1) < 0)
  86.                 continue;
  87.             add_keyword(a + 1);
  88.             }
  89.         }
  90.     fclose(fp);
  91.     }
  92.  
  93. int main(int argc, char *argv[])
  94.     {
  95.     read_control();
  96.     for (int x = 1; x < argc; x++)
  97.         {
  98.         strupr(argv[x]);
  99.         fprintf(stderr, "Adding File: %s\n", argv[x]);
  100.         process(argv[x]);
  101.         }
  102.     fprintf(stderr, "No Keys Added: %d\nNo Dupes Rejected: %d\n", no_keys, no_dups);
  103.     return 0;
  104.     }
  105.  
  106.