freebsd-src/lib/libmytinfo/mkcaplist.c
1994-10-06 23:38:41 +00:00

167 lines
3.2 KiB
C

/*
* mkcaplist.c
*
* By Ross Ridge
* Public Domain
* 92/02/01 07:30:05
*
* mkcaplist [-n caps] [file]
*
* makes caplist.c from the cap_list file
*
*/
#define NOTLIB
#include "defs.h"
const char SCCSid[] = "@(#) mytinfo mkcaplist.c 3.2 92/02/01 public domain, By Ross Ridge";
#define DEFAULT_CAPS 1000
struct caplist *list;
int
main(argc, argv)
int argc;
char **argv; {
FILE *f;
int caps = DEFAULT_CAPS;
int n;
register int i;
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;
}
if (n == 0) {
fprintf(stderr, "%s: no caps in file.\n", argv[0]);
return 1;
}
if (n == -1) {
fprintf(stderr, "%s: bad caps line.\n", argv[0]);
return 1;
}
if (n == -2) {
fprintf(stderr, "%s: unexpected EOF.\n", argv[0]);
return 1;
}
puts("/*");
puts(" * caplist.c ");
puts(" *");
puts(" * This file was generated automatically.");
puts(" *");
puts(" */");
putchar('\n');
puts("char *boolnames[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '!')
printf("\t\"%s\",\n", list[i].tinfo);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *boolcodes[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '!')
printf("\t\"%s\",\n", list[i].tcap);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *boolfnames[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '!')
printf("\t\"%s\",\n", list[i].var);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *numnames[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '#')
printf("\t\"%s\",\n", list[i].tinfo);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *numcodes[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '#')
printf("\t\"%s\",\n", list[i].tcap);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *numfnames[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '#')
printf("\t\"%s\",\n", list[i].var);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *strnames[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '$')
printf("\t\"%s\",\n", list[i].tinfo);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *strcodes[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '$')
printf("\t\"%s\",\n", list[i].tcap);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char *strfnames[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '$')
printf("\t\"%s\",\n", list[i].var);
puts("\t(char *)0");
puts("};");
putchar('\n');
puts("char _strflags[] = {");
for (i = 0; i < n; i++)
if (list[i].type == '$')
printf("\t'%c',\n", list[i].flag);
puts("\t'\\0'");
puts("};");
putchar('\n');
return 0;
}