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

  1. /*
  2.  * mktermhead.c
  3.  *
  4.  * By Ross Ridge
  5.  * Public Domain 
  6.  * 92/06/04 11:38:57
  7.  *
  8.  * mktermhead [-n caps] file
  9.  *
  10.  * generates term.head
  11.  *
  12.  */
  13.  
  14. #define NOTLIB
  15. #include "defs.h"
  16.  
  17. static const char SCCSid[] = "@(#) mytinfo mktermhead.c 3.3 92/06/04 public domain, By Ross Ridge";
  18.  
  19. #define DEFAULT_CAPS    1000
  20.  
  21.  
  22. int
  23. main(argc, argv)
  24. int argc;
  25. char **argv; {
  26.     FILE *f;
  27.     int caps = DEFAULT_CAPS;
  28.     int n;
  29.     register int i;
  30.     int nb, ns, nn;
  31.     struct caplist *list;
  32.  
  33.     if (argc > 2 && argv[1][0] == '-' && argv[1][1] == 'n') {
  34.         caps = atoi(argv[2]);
  35.         argv += 2;
  36.         argc -= 2;
  37.     }
  38.  
  39.     if (argc == 1) {
  40.         f = stdin;
  41.     } else if (argc == 2) {
  42.         f = fopen(argv[1], "r");
  43.         if (f == NULL) {
  44.             fprintf(stderr, "%s: can't open '%s'\n", argv[0],
  45.                 argv[1]);
  46.             return 1;
  47.         }
  48.     } else {
  49.         fprintf(stderr, "%s: too many arguments\n", argv[0]);
  50.         fprintf(stderr, "usage: %s [-n caps] [file]\n", argv[0]);
  51.         return 1;
  52.     }
  53.  
  54.     list = (struct caplist *) malloc(caps * sizeof(struct caplist));
  55.     if (list == NULL) {
  56.         fprintf(stderr, "%s: malloc failed.\n", argv[0]);
  57.         return 1;
  58.     }
  59.  
  60.     n = readcaps(f, list, caps);
  61.     if (n > caps) {
  62.         fprintf(stderr, "%s: too many caps, use -n.\n", argv[0]);
  63.         return 1;
  64.     }
  65.     switch(n) {
  66.     case 0:
  67.         fprintf(stderr, "%s: no caps in file.\n", argv[0]);
  68.         return 1;
  69.     case -1:
  70.         fprintf(stderr, "%s: bad caps line.\n", argv[0]);
  71.         return 1;
  72.     case -2:
  73.         fprintf(stderr, "%s: unexpected EOF.\n", argv[0]);
  74.         return 1;
  75.     }
  76.  
  77.     puts("/*");
  78.     puts(" * term.h ");
  79.     puts(" *");
  80.     puts(" * This file was generated automatically.");
  81.     puts(" *");
  82.     puts(" */");
  83.     putchar('\n');
  84.     puts("#ifndef _TERM_H_");
  85.     puts("#define _TERM_H_");
  86.     putchar('\n');
  87.     nb = 0;
  88.     for (i = 0; i < n; i++) {
  89.         if (list[i].type == '!') {
  90.             printf("#define %-*s (_CUR_TERM.bools[%d])\n",
  91.                    MAX_VARNAME, list[i].var, nb);
  92.             nb++;
  93.         }
  94.     }
  95.  
  96.     nn = 0;
  97.     for (i = 0; i < n; i++) {
  98.         if (list[i].type == '#') {
  99.             printf("#define %-*s (_CUR_TERM.nums[%d])\n",
  100.                    MAX_VARNAME, list[i].var, nn);
  101.             nn++;
  102.         }
  103.     }
  104.  
  105.     ns = 0;
  106.     for (i = 0; i < n; i++) {
  107.         if (list[i].type == '$') {
  108.             printf("#define %-*s (_CUR_TERM.strs[%d])\n",
  109.                    MAX_VARNAME, list[i].var, ns);
  110.             ns++;
  111.         }
  112.     }
  113.  
  114.     putchar('\n');
  115.  
  116.     printf ("#define NUM_OF_BOOLS\t%d\n", nb);
  117.     printf ("#define NUM_OF_NUMS\t%d\n", nn);
  118.     printf ("#define NUM_OF_STRS\t%d\n", ns);
  119.  
  120.     putchar('\n');
  121.     puts("#ifndef OVERRIDE");
  122.     puts("#undef _USE_SGTTY");
  123. #ifdef USE_SGTTY
  124.     puts("#define _USE_SGTTY");
  125. #endif
  126.     puts("#undef _USE_TERMIO");
  127. #ifdef USE_TERMIO
  128.     puts("#define _USE_TERMIO");
  129. #endif
  130.     puts("#undef _USE_SMALLMEM");
  131. #ifdef USE_SMALLMEM
  132.     puts("#define _USE_SMALLMEM");
  133. #endif
  134. #if 0
  135.     puts("#undef _USE_PROTOTYPES");
  136. #ifdef USE_PROTOTYPES
  137.     puts("#define _USE_PROTOTYPES");
  138. #endif
  139. #endif
  140.     puts("#undef _USE_WINSZ");
  141. #ifdef USE_WINSZ
  142.     puts("#define _USE_WINSZ");
  143. #endif
  144.     puts("#undef _MAX_CHUNK");
  145.     printf("#define _MAX_CHUNK %d\n", MAX_CHUNK);
  146.     puts("#endif /* OVERRIDE */");
  147.     putchar('\n');
  148.  
  149.     return 0;
  150. }
  151.