home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 3 / freshfish3_9403.bin / a-kwic / pi2loaddb.c < prev    next >
C/C++ Source or Header  |  1994-02-26  |  5KB  |  231 lines

  1. /*
  2.  * prodinfo - Create LoadDB input file from a KingFisher .Product-Info
  3.  *            file.
  4.  *
  5.  *
  6.  * Note that this program assumes that all of the field names are in lower
  7.  * case.
  8.  */
  9.  
  10. /*
  11.  * Written by: David W. Lowrey
  12.  *             Starbound Enterprises
  13.  */
  14.  
  15. static char RCS_ID[] =
  16. {" $Id: prodinfo.c,v 1.3 1994/01/30 16:00:01 D_Lowrey Exp $ "};
  17.  
  18. #include <stdio.h>
  19. #include <string.h>
  20.  
  21. void clean_string(char *, char *);
  22.  
  23. __far char storage[1000][100];
  24. char volume[100];
  25. unsigned int name, version, path, type, short_desc,desc_start,desc_end;
  26. unsigned int req_start, req_end, ref_start, ref_end, dist_start, dist_end;
  27. unsigned int auth_start, auth_end;
  28.  
  29. int main()
  30. {
  31.     char line[100];
  32.     char *ptr;
  33.     unsigned int *end_ptr = NULL;
  34.     char fields[10][13] = {"name","version","path","type","short","description",
  35.                          "requirements","reference","distribution","author"};
  36.     unsigned int lens[10] = {4, 7, 4, 4, 5, 11, 12, 9, 12, 6};
  37.     unsigned int field_num = 0;
  38.     unsigned int storage_line;
  39.     int i, len;
  40.     int processed_field;
  41.     unsigned started = 0;
  42.     
  43.     void print_record(void);
  44.  
  45.     
  46.     while (gets(line)) {
  47.         if(line[0] == '.') {
  48.         
  49.             if(started && (!strncmp(line,".name",5))) {
  50.                 print_record();
  51.                 started = 0;
  52.             }
  53.  
  54.             if (!started) {
  55.                 version=path=type=short_desc=desc_start=desc_end=0;
  56.                 req_start=req_end=ref_start=ref_end=dist_start=dist_end=0;
  57.                 name=auth_start=auth_end=0;
  58.                 volume[0] = '\0';
  59.                 storage_line = 1;
  60.                 started = 1;
  61.             }
  62.             processed_field = 0;
  63.             
  64.             if (end_ptr)
  65.                 *end_ptr = storage_line - 1;
  66.                 
  67.             field_num = 0;
  68.             for(i=0; i<10; i++)
  69.                 if (!strncmp(&line[1], fields[i], lens[i])) {
  70.                     field_num = i+1;
  71.                     break;
  72.                 }
  73.         }
  74.         else
  75.             if (started)
  76.                 if(processed_field)
  77.                     clean_string(line, storage[storage_line++]);
  78.                 else {
  79.                     ++processed_field;
  80.                     switch(field_num)
  81.                     {
  82.                     case 0:            /* Non-used field */
  83.                         processed_field = 0;
  84.                         break;
  85.                     case 1:            /* .name */
  86.                         clean_string(line, storage[storage_line]);
  87.                         name=storage_line++;
  88.                         end_ptr = NULL;
  89.                         break;
  90.                     case 2:            /* .version */
  91.                         clean_string(line, storage[storage_line]);
  92.                         version=storage_line++;
  93.                         end_ptr = NULL;
  94.                         break;
  95.                     case 3:            /* .path */
  96.                         clean_string(line, storage[storage_line]);
  97.                         path=storage_line++;
  98.                         ptr = (char *)strchr(storage[path], (int)':');
  99.                         if(ptr) {
  100.                             len = ptr-storage[path];
  101.                             strncpy(volume,storage[path],(size_t)len);
  102.                             volume[len] = '\0';
  103.                         }
  104.                         end_ptr = NULL;
  105.                         break;
  106.                     case 4:            /* .type */
  107.                         clean_string(line, storage[storage_line]);
  108.                         type=storage_line++;
  109.                         end_ptr = NULL;
  110.                         break;
  111.                     case 5:            /* .short */
  112.                         clean_string(line, storage[storage_line]);
  113.                         short_desc=storage_line++;
  114.                         end_ptr = NULL;
  115.                         break;
  116.                     case 6:            /* .description */
  117.                         clean_string(line, storage[storage_line]);
  118.                         desc_start=storage_line++;
  119.                         end_ptr = &desc_end;
  120.                         break;
  121.                     case 7:            /* .requirements */
  122.                         clean_string(line, storage[storage_line]);
  123.                         req_start=storage_line++;
  124.                         end_ptr = &req_end;
  125.                         break;
  126.                     case 8:            /* .reference */
  127.                         clean_string(line, storage[storage_line]);
  128.                         ref_start=storage_line++;
  129.                         end_ptr = &ref_end;
  130.                         break;
  131.                     case 9:            /* .distribution */
  132.                         clean_string(line, storage[storage_line]);
  133.                         dist_start=storage_line++;
  134.                         end_ptr = &dist_end;
  135.                         break;
  136.                     case 10:        /* .author */
  137.                         clean_string(line, storage[storage_line]);
  138.                         auth_start=storage_line++;
  139.                         end_ptr = &auth_end;
  140.                         break;
  141.                     }
  142.                 }
  143.     }
  144.     if (end_ptr)
  145.     *end_ptr = storage_line - 1;
  146.     
  147.     print_record();
  148.  
  149.     
  150.     return(0);
  151. }
  152.  
  153. void clean_string(char *src, char *dest)
  154. {
  155.     char *ptr;
  156.     
  157.     for (ptr=src; *ptr == ' '; ptr++);   /* Find first non blank */
  158.     
  159.     strcpy(dest, ptr);
  160.     
  161.     ptr = (char *)(dest + strlen(dest) - 1);
  162.     
  163.     for (; *ptr == ' '; ptr--);   /* Find last non blank */
  164.     
  165.     *(++ptr) = '\0';
  166. }
  167.  
  168. void print_record()
  169. {
  170.  
  171.     int i;
  172.     storage[0][0] = '\0';
  173.     
  174.     printf("#R\n");
  175.     
  176.     printf("#H %s ", storage[name]);
  177.     if (version)
  178.         printf("%s ", storage[version]);
  179.     printf("%s\n", volume);
  180.         
  181.     printf("#K %s %s\n", storage[name], volume);
  182.     
  183.     if (type)
  184.         printf("#K %s\n", storage[type]);
  185.         
  186.     if (short_desc)
  187.         printf("%s\n\n", storage[short_desc]);
  188.         
  189.     if (desc_start) {
  190.         for(i=desc_start; i<= desc_end; i++)
  191.             printf("%s\n", storage[i]);
  192.         printf("\n");
  193.     }
  194.     
  195.     if (req_start) {
  196.         for(i=req_start; i<= req_end; i++)
  197.             printf("%s\n", storage[i]);
  198.         printf("\n");
  199.     }
  200.     
  201.     if (path) {
  202.         printf("#TTHIS VERSION:\n");
  203.         if (version)
  204.             printf("%s\t%s\n\n", storage[version], storage[path]);
  205.         else
  206.             printf("?.?\t%s\n\n", storage[path]);
  207.     }
  208.     
  209.     if(ref_start) {
  210.         printf("#TOTHER VERSIONS:\n");
  211.         for(i=ref_start; i<ref_end; i+=2) {
  212.             if (storage[i][strlen(storage[i])-1] == '/')
  213.                 storage[i][strlen(storage[i])-1] = '\0';
  214.             printf("%s\t%s\n", storage[i+1], storage[i]);
  215.         }
  216.     printf("\n");
  217.     }
  218.     
  219.     if(dist_start) {
  220.         printf("#TDISTRIBUTION:\n");
  221.         for(i=dist_start; i<= dist_end; i++)
  222.             printf("%s\n", storage[i]);
  223.         printf("\n");
  224.     }
  225.     
  226.     if(auth_start) {
  227.         printf("#TAUTHOR:\n");
  228.         for(i=auth_start; i<= auth_end; i++)
  229.             printf("%s\n", storage[i]);
  230.     }
  231. }