home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / mytinfo / part01 / mkcaplist.c < prev    next >
C/C++ Source or Header  |  1992-12-26  |  3KB  |  167 lines

  1. /*
  2.  * mkcaplist.c
  3.  *
  4.  * By Ross Ridge
  5.  * Public Domain
  6.  * 92/02/01 07:30:05
  7.  *
  8.  * mkcaplist [-n caps] [file]
  9.  *
  10.  * makes caplist.c from the cap_list file
  11.  *
  12.  */
  13.  
  14. #define NOTLIB
  15. #include "defs.h"
  16.  
  17. static const char SCCSid[] = "@(#) mytinfo mkcaplist.c 3.2 92/02/01 public domain, By Ross Ridge";
  18.  
  19. #define DEFAULT_CAPS    1000
  20.  
  21. struct caplist *list;
  22.  
  23. int
  24. main(argc, argv)
  25. int argc;
  26. char **argv; {
  27.     FILE *f;
  28.     int caps = DEFAULT_CAPS;
  29.     int n;
  30.     register int i;
  31.  
  32.     if (argc > 2 && argv[1][0] == '-' && argv[1][1] == 'n') {
  33.         caps = atoi(argv[2]);
  34.         argv += 2;
  35.         argc -= 2;
  36.     }
  37.  
  38.     if (argc == 1) {
  39.         f = stdin;
  40.     } else if (argc == 2) {
  41.         f = fopen(argv[1], "r");
  42.         if (f == NULL) {
  43.             fprintf(stderr, "%s: can't open '%s'\n", argv[0],
  44.                 argv[1]);
  45.             return 1;
  46.         }
  47.     } else {
  48.         fprintf(stderr, "%s: too many arguments\n", argv[0]);
  49.         fprintf(stderr, "usage: %s [-n caps] [file]\n", argv[0]);
  50.         return 1;
  51.     }
  52.  
  53.     list = (struct caplist *) malloc(caps * sizeof(struct caplist));
  54.     if (list == NULL) {
  55.         fprintf(stderr, "%s: malloc failed.\n", argv[0]);
  56.         return 1;
  57.     }
  58.  
  59.     n = readcaps(f, list, caps);
  60.     if (n > caps) {
  61.         fprintf(stderr, "%s: too many caps, use -n.\n", argv[0]);
  62.         return 1;
  63.     }
  64.     if (n == 0) {
  65.         fprintf(stderr, "%s: no caps in file.\n", argv[0]);
  66.         return 1;
  67.     }
  68.     if (n == -1) {
  69.         fprintf(stderr, "%s: bad caps line.\n", argv[0]);
  70.         return 1;
  71.     }
  72.     if (n == -2) {
  73.         fprintf(stderr, "%s: unexpected EOF.\n", argv[0]);
  74.         return 1;
  75.     }
  76.  
  77.     puts("/*");
  78.     puts(" * caplist.c ");
  79.     puts(" *");
  80.     puts(" * This file was generated automatically.");
  81.     puts(" *");
  82.     puts(" */");
  83.     putchar('\n');
  84.  
  85.     puts("char *boolnames[] = {");
  86.     for (i = 0; i < n; i++)
  87.         if (list[i].type == '!')
  88.             printf("\t\"%s\",\n", list[i].tinfo);
  89.     puts("\t(char *)0");
  90.     puts("};");
  91.     putchar('\n');
  92.  
  93.     puts("char *boolcodes[] = {");
  94.     for (i = 0; i < n; i++)
  95.         if (list[i].type == '!')
  96.             printf("\t\"%s\",\n", list[i].tcap);
  97.     puts("\t(char *)0");
  98.     puts("};");
  99.     putchar('\n');
  100.  
  101.     puts("char *boolfnames[] = {");
  102.     for (i = 0; i < n; i++)
  103.         if (list[i].type == '!')
  104.             printf("\t\"%s\",\n", list[i].var);
  105.     puts("\t(char *)0");
  106.     puts("};");
  107.     putchar('\n');
  108.  
  109.     puts("char *numnames[] = {");
  110.     for (i = 0; i < n; i++)
  111.         if (list[i].type == '#')
  112.             printf("\t\"%s\",\n", list[i].tinfo);
  113.     puts("\t(char *)0");
  114.     puts("};");
  115.     putchar('\n');
  116.  
  117.     puts("char *numcodes[] = {");
  118.     for (i = 0; i < n; i++)
  119.         if (list[i].type == '#')
  120.             printf("\t\"%s\",\n", list[i].tcap);
  121.     puts("\t(char *)0");
  122.     puts("};");
  123.     putchar('\n');
  124.  
  125.     puts("char *numfnames[] = {");
  126.     for (i = 0; i < n; i++)
  127.         if (list[i].type == '#')
  128.             printf("\t\"%s\",\n", list[i].var);
  129.     puts("\t(char *)0");
  130.     puts("};");
  131.     putchar('\n');
  132.  
  133.     puts("char *strnames[] = {");
  134.     for (i = 0; i < n; i++)
  135.         if (list[i].type == '$')
  136.             printf("\t\"%s\",\n", list[i].tinfo);
  137.     puts("\t(char *)0");
  138.     puts("};");
  139.     putchar('\n');
  140.  
  141.     puts("char *strcodes[] = {");
  142.     for (i = 0; i < n; i++)
  143.         if (list[i].type == '$')
  144.             printf("\t\"%s\",\n", list[i].tcap);
  145.     puts("\t(char *)0");
  146.     puts("};");
  147.     putchar('\n');
  148.  
  149.     puts("char *strfnames[] = {");
  150.     for (i = 0; i < n; i++)
  151.         if (list[i].type == '$')
  152.             printf("\t\"%s\",\n", list[i].var);
  153.     puts("\t(char *)0");
  154.     puts("};");
  155.     putchar('\n');
  156.  
  157.     puts("char _strflags[] = {");
  158.     for (i = 0; i < n; i++)
  159.         if (list[i].type == '$')
  160.             printf("\t'%c',\n", list[i].flag);
  161.     puts("\t'\\0'");
  162.     puts("};");
  163.     putchar('\n');
  164.  
  165.     return 0;
  166. }
  167.