diff options
Diffstat (limited to 'lib/libmytinfo/mktermhead.c')
-rw-r--r-- | lib/libmytinfo/mktermhead.c | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/lib/libmytinfo/mktermhead.c b/lib/libmytinfo/mktermhead.c new file mode 100644 index 0000000..f70079b --- /dev/null +++ b/lib/libmytinfo/mktermhead.c @@ -0,0 +1,160 @@ +/* + * mktermhead.c + * + * By Ross Ridge + * Public Domain + * 92/06/04 11:38:57 + * + * mktermhead [-n caps] file + * + * generates term.head + * + */ + +#define NOTLIB +#include "defs.h" + +const char SCCSid[] = "@(#) mytinfo mktermhead.c 3.3 92/06/04 public domain, By Ross Ridge"; + +#define DEFAULT_CAPS 1000 + + +int +main(argc, argv) +int argc; +char **argv; { + FILE *f; + int caps = DEFAULT_CAPS; + int n; + register int i; + int nb, ns, nn; + struct caplist *list; + + if (argc > 2 && argv[1][0] == '-' && argv[1][1] == 'n') { + caps = atoi(argv[2]); + argv += 2; + argc -= 2; + } + + if (argc == 1) { + f = stdin; + } else if (argc == 2) { + f = fopen(argv[1], "r"); + if (f == NULL) { + fprintf(stderr, "%s: can't open '%s'\n", argv[0], + argv[1]); + return 1; + } + } else { + fprintf(stderr, "%s: too many arguments\n", argv[0]); + fprintf(stderr, "usage: %s [-n caps] [file]\n", argv[0]); + return 1; + } + + list = (struct caplist *) malloc(caps * sizeof(struct caplist)); + if (list == NULL) { + fprintf(stderr, "%s: malloc failed.\n", argv[0]); + return 1; + } + + n = readcaps(f, list, caps); + if (n > caps) { + fprintf(stderr, "%s: too many caps, use -n.\n", argv[0]); + return 1; + } + switch(n) { + case 0: + fprintf(stderr, "%s: no caps in file.\n", argv[0]); + return 1; + case -1: + fprintf(stderr, "%s: bad caps line.\n", argv[0]); + return 1; + case -2: + fprintf(stderr, "%s: unexpected EOF.\n", argv[0]); + return 1; + } + + puts("/*"); + puts(" * term.h "); + puts(" *"); + puts(" * This file was generated automatically."); + puts(" *"); + puts(" */"); + putchar('\n'); + puts("#ifndef _TERM_H_"); + puts("#define _TERM_H_"); + putchar('\n'); + nb = 0; + for (i = 0; i < n; i++) { + if (list[i].type == '!') { + printf("#define %-*s (_CUR_TERM.bools[%d])\n", + MAX_VARNAME, list[i].var, nb); + nb++; + } + } + + nn = 0; + for (i = 0; i < n; i++) { + if (list[i].type == '#') { + printf("#define %-*s (_CUR_TERM.nums[%d])\n", + MAX_VARNAME, list[i].var, nn); + nn++; + } + } + + ns = 0; + for (i = 0; i < n; i++) { + if (list[i].type == '$') { + printf("#define %-*s (_CUR_TERM.strs[%d])\n", + MAX_VARNAME, list[i].var, ns); + ns++; + } + } + + putchar('\n'); + + printf ("#define NUM_OF_BOOLS\t%d\n", nb); + printf ("#define NUM_OF_NUMS\t%d\n", nn); + printf ("#define NUM_OF_STRS\t%d\n", ns); + + putchar('\n'); + puts("#ifndef OVERRIDE"); + puts("#undef _USE_SGTTY"); +#ifdef USE_SGTTY + puts("#define _USE_SGTTY"); +#endif + puts("#undef _USE_TERMIO"); +#ifdef USE_TERMIO + puts("#define _USE_TERMIO"); +#endif + puts("#undef _USE_TERMIOS"); +#ifdef USE_TERMIOS + puts("#define _USE_TERMIOS"); +#endif + puts("#undef _USE_SMALLMEM"); +#ifdef USE_SMALLMEM + puts("#define _USE_SMALLMEM"); +#endif + puts("#undef _USE_PROTOTYPES"); +#ifdef USE_PROTOTYPES + puts("#define _USE_PROTOTYPES"); +#endif + puts("#undef _USE_WINSZ"); +#ifdef USE_WINSZ + puts("#define _USE_WINSZ"); +#endif + puts("#undef _USE_TERMINFO"); +#ifdef USE_TERMINFO + puts("#define _USE_TERMINFO"); +#endif + puts("#undef _USE_TERMCAP"); +#ifdef USE_TERMCAP + puts("#define _USE_TERMCAP"); +#endif + puts("#undef _MAX_CHUNK"); + printf("#define _MAX_CHUNK %d\n", MAX_CHUNK); + puts("#endif /* OVERRIDE */"); + putchar('\n'); + + return 0; +} |