=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/infocmp/infocmp.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- src/usr.bin/infocmp/infocmp.c 2000/03/26 16:45:04 1.10 +++ src/usr.bin/infocmp/infocmp.c 2000/10/08 22:47:12 1.11 @@ -1,4 +1,4 @@ -/* $OpenBSD: infocmp.c,v 1.10 2000/03/26 16:45:04 millert Exp $ */ +/* $OpenBSD: infocmp.c,v 1.11 2000/10/08 22:47:12 millert Exp $ */ /**************************************************************************** * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. * @@ -43,7 +43,7 @@ #include #include -MODULE_ID("$From: infocmp.c,v 1.54 2000/03/19 02:56:14 tom Exp $") +MODULE_ID("$From: infocmp.c,v 1.57 2000/10/01 01:26:25 tom Exp $") #define L_CURL "{" #define R_CURL "}" @@ -75,7 +75,7 @@ static int itrace; /* trace flag for debugging */ static int mwidth = 60; static int numbers = 0; /* format "%'char'" to/from "%{number}" */ -static int outform = F_TERMINFO;/* output format */ +static int outform = F_TERMINFO; /* output format */ static int sortmode; /* sort_mode */ /* main comparison mode */ @@ -92,8 +92,8 @@ static void ExitProgram(int code) GCC_NORETURN; /* prototype is to get gcc to accept the noreturn attribute */ -static void -ExitProgram(int code) + static void + ExitProgram(int code) { while (termcount-- > 0) _nc_free_termtype(&entries[termcount].tterm); @@ -352,10 +352,10 @@ case C_DIFFERENCE: if (!(b1 == ABSENT_BOOLEAN && b2 == ABSENT_BOOLEAN) && b1 != b2) (void) printf("\t%s: %s%s%s.\n", - name, - dump_boolean(b1), - bool_sep, - dump_boolean(b2)); + name, + dump_boolean(b1), + bool_sep, + dump_boolean(b2)); break; case C_COMMON: @@ -734,8 +734,8 @@ /* maybe do use resolution */ if (!_nc_resolve_uses(!limited)) { (void) fprintf(stderr, - "There are unresolved use entries in %s:\n", - argv[n]); + "There are unresolved use entries in %s:\n", + argv[n]); for_entry_list(qp) { if (qp->nuses) { (void) fputs(qp->tterm.term_names, stderr); @@ -775,30 +775,30 @@ for (qp = heads[0]; qp; qp = qp->next) { if (qp->ncrosslinks > 1) { (void) fprintf(stderr, - "%s in file 1 (%s) has %d matches in file 2 (%s):\n", - _nc_first_name(qp->tterm.term_names), - argv[0], - qp->ncrosslinks, - argv[1]); + "%s in file 1 (%s) has %d matches in file 2 (%s):\n", + _nc_first_name(qp->tterm.term_names), + argv[0], + qp->ncrosslinks, + argv[1]); for (i = 0; i < qp->ncrosslinks; i++) (void) fprintf(stderr, - "\t%s\n", - _nc_first_name((qp->crosslinks[i])->tterm.term_names)); + "\t%s\n", + _nc_first_name((qp->crosslinks[i])->tterm.term_names)); } } for (rp = heads[1]; rp; rp = rp->next) { if (rp->ncrosslinks > 1) { (void) fprintf(stderr, - "%s in file 2 (%s) has %d matches in file 1 (%s):\n", - _nc_first_name(rp->tterm.term_names), - argv[1], - rp->ncrosslinks, - argv[0]); + "%s in file 2 (%s) has %d matches in file 1 (%s):\n", + _nc_first_name(rp->tterm.term_names), + argv[1], + rp->ncrosslinks, + argv[0]); for (i = 0; i < rp->ncrosslinks; i++) (void) fprintf(stderr, - "\t%s\n", - _nc_first_name((rp->crosslinks[i])->tterm.term_names)); + "\t%s\n", + _nc_first_name((rp->crosslinks[i])->tterm.term_names)); } } @@ -806,13 +806,13 @@ for (qp = heads[0]; qp; qp = qp->next) if (qp->ncrosslinks == 0) (void) printf("\t%s\n", - _nc_first_name(qp->tterm.term_names)); + _nc_first_name(qp->tterm.term_names)); (void) printf("In file 2 (%s) only:\n", argv[1]); for (rp = heads[1]; rp; rp = rp->next) if (rp->ncrosslinks == 0) (void) printf("\t%s\n", - _nc_first_name(rp->tterm.term_names)); + _nc_first_name(rp->tterm.term_names)); (void) printf("The following entries are equivalent:\n"); for (qp = heads[0]; qp; qp = qp->next) { @@ -860,7 +860,7 @@ case C_DIFFERENCE: if (itrace) (void) fprintf(stderr, - "infocmp: dumping differences\n"); + "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; @@ -868,7 +868,7 @@ case C_COMMON: if (itrace) (void) fprintf(stderr, - "infocmp: dumping common capabilities\n"); + "infocmp: dumping common capabilities\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; @@ -876,7 +876,7 @@ case C_NAND: if (itrace) (void) fprintf(stderr, - "infocmp: dumping differences\n"); + "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; @@ -926,7 +926,7 @@ ," -w number (width)" }; const size_t first = 3; - const size_t last = sizeof(tbl) / sizeof(tbl[0]); + const size_t last = SIZEOF(tbl); const size_t left = (last - first + 1) / 2 + first; size_t n; @@ -987,7 +987,7 @@ break; } (void) printf("\t/* %3d: %-8s */\t%s,\n", - n, ExtBoolname(term, n, boolnames), str); + n, ExtBoolname(term, n, boolnames), str); } (void) printf("%s;\n", R_CURL); @@ -1007,8 +1007,8 @@ str = buf; break; } - (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ExtNumname(term, n, - numnames), str); + (void) printf("\t/* %3d: %-8s */\t%s,\n", n, + ExtNumname(term, n, numnames), str); } (void) printf("%s;\n", R_CURL); @@ -1029,8 +1029,8 @@ tp = buf; *tp++ = '"'; for (sp = term->Strings[n]; - *sp != 0 && (tp - buf) < MAX_STRING - 6; - sp++) { + *sp != 0 && (tp - buf) < MAX_STRING - 6; + sp++) { if (isascii(*sp) && isprint(*sp) && *sp != '\\' && *sp != '"') *tp++ = *sp; else { @@ -1048,11 +1048,11 @@ (void) printf("%s;\n", R_CURL); (void) printf("static char * %s[] = %s\n", - name_initializer("string_ext"), L_CURL); + name_initializer("string_ext"), L_CURL); } #endif - (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ExtStrname(term, n, - strnames), str); + (void) printf("\t/* %3d: %-8s */\t%s,\n", n, + ExtStrname(term, n, strnames), str); } (void) printf("%s;\n", R_CURL); } @@ -1073,26 +1073,39 @@ (void) printf("#if NCURSES_XNAMES\n"); (void) printf("\t\t(char *)0,\t/* pointer to extended string table */\n"); (void) printf("\t\t%s,\t/* ...corresponding names */\n", - (NUM_STRINGS(term) != STRCOUNT) - ? name_initializer("string_ext") - : "(char **)0"); + (NUM_STRINGS(term) != STRCOUNT) + ? name_initializer("string_ext") + : "(char **)0"); (void) printf("\t\t%d,\t\t/* count total Booleans */\n", NUM_BOOLEANS(term)); (void) printf("\t\t%d,\t\t/* count total Numbers */\n", NUM_NUMBERS(term)); (void) printf("\t\t%d,\t\t/* count total Strings */\n", NUM_STRINGS(term)); (void) printf("\t\t%d,\t\t/* count extensions to Booleans */\n", - NUM_BOOLEANS(term) - BOOLCOUNT); + NUM_BOOLEANS(term) - BOOLCOUNT); (void) printf("\t\t%d,\t\t/* count extensions to Numbers */\n", - NUM_NUMBERS(term) - NUMCOUNT); + NUM_NUMBERS(term) - NUMCOUNT); (void) printf("\t\t%d,\t\t/* count extensions to Strings */\n", - NUM_STRINGS(term) - STRCOUNT); + NUM_STRINGS(term) - STRCOUNT); (void) printf("#endif /* NCURSES_XNAMES */\n"); #endif /* NCURSES_XNAMES */ (void) printf("\t%s\n", R_CURL); } +static int +optarg_to_number(void) +{ + char *temp = 0; + long value = strtol(optarg, &temp, 0); + + if (temp == 0 || temp == optarg || *temp != 0) { + fprintf(stderr, "Expected a number, not \"%s\"\n", optarg); + exit(EXIT_FAILURE); + } + return (int) value; +} + /*************************************************************************** * * Main sequence @@ -1114,7 +1127,7 @@ if ((terminal = getenv("TERM")) == 0) { (void) fprintf(stderr, - "infocmp: environment variable TERM not set\n"); + "infocmp: environment variable TERM not set\n"); return EXIT_FAILURE; } @@ -1224,7 +1237,7 @@ sortmode = S_TERMCAP; else { (void) fprintf(stderr, - "infocmp: unknown sort mode\n"); + "infocmp: unknown sort mode\n"); return EXIT_FAILURE; } break; @@ -1234,17 +1247,16 @@ break; case 'v': - itrace = atoi(optarg); + itrace = optarg_to_number(); set_trace_level(itrace); break; case 'V': - (void) fputs(NCURSES_VERSION, stdout); - putchar('\n'); + puts(curses_version()); ExitProgram(EXIT_SUCCESS); case 'w': - mwidth = atoi(optarg); + mwidth = optarg_to_number(); break; case 'A': @@ -1291,7 +1303,7 @@ for (; optind < argc; optind++) { if (termcount >= MAXTERMS) { (void) fprintf(stderr, - "infocmp: too many terminal type arguments\n"); + "infocmp: too many terminal type arguments\n"); return EXIT_FAILURE; } else { const char *directory = termcount ? restdir : firstdir; @@ -1301,31 +1313,31 @@ if (directory) { (void) sprintf(tfile[termcount], "%s/%c/%s", - directory, - *argv[optind], argv[optind]); + directory, + *argv[optind], argv[optind]); if (itrace) (void) fprintf(stderr, - "infocmp: reading entry %s from file %s\n", - argv[optind], tfile[termcount]); + "infocmp: reading entry %s from file %s\n", + argv[optind], tfile[termcount]); status = _nc_read_file_entry(tfile[termcount], - &entries[termcount].tterm); + &entries[termcount].tterm); } else { if (itrace) (void) fprintf(stderr, - "infocmp: reading entry %s from system directories %s\n", - argv[optind], tname[termcount]); + "infocmp: reading entry %s from system directories %s\n", + argv[optind], tname[termcount]); status = _nc_read_entry(tname[termcount], - tfile[termcount], - &entries[termcount].tterm); + tfile[termcount], + &entries[termcount].tterm); directory = TERMINFO; /* for error message */ } if (status <= 0) { (void) fprintf(stderr, - "infocmp: couldn't open terminfo file %s.\n", - tfile[termcount]); + "infocmp: couldn't open terminfo file %s.\n", + tfile[termcount]); return EXIT_FAILURE; } repair_acsc(&entries[termcount].tterm); @@ -1370,10 +1382,10 @@ case C_DEFAULT: if (itrace) (void) fprintf(stderr, - "infocmp: about to dump %s\n", - tname[0]); + "infocmp: about to dump %s\n", + tname[0]); (void) printf("#\tReconstructed via infocmp from file: %s\n", - tfile[0]); + tfile[0]); len = dump_entry(&entries[0].tterm, limited, numbers, NULL); putchar('\n'); if (itrace) @@ -1390,7 +1402,7 @@ case C_COMMON: if (itrace) (void) fprintf(stderr, - "infocmp: dumping common capabilities\n"); + "infocmp: dumping common capabilities\n"); (void) printf("comparing %s to %s.\n", tname[0], tname[1]); compare_entry(compare_predicate, &entries->tterm, quiet); break; @@ -1398,7 +1410,7 @@ case C_NAND: if (itrace) (void) fprintf(stderr, - "infocmp: dumping differences\n"); + "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", tname[0], tname[1]); compare_entry(compare_predicate, &entries->tterm, quiet); break; @@ -1409,7 +1421,7 @@ len = dump_entry(&entries[0].tterm, limited, numbers, use_predicate); for (i = 1; i < termcount; i++) len += dump_uses(tname[i], !(outform == F_TERMCAP || outform - == F_TCONVERR)); + == F_TCONVERR)); putchar('\n'); if (itrace) (void) fprintf(stderr, "infocmp: length %d\n", len); @@ -1421,7 +1433,7 @@ (void) fprintf(stderr, "Use `tic -[CI] ' for this.\n"); else if (argc - optind != 2) (void) fprintf(stderr, - "File comparison needs exactly two file arguments.\n"); + "File comparison needs exactly two file arguments.\n"); else file_comparison(argc - optind, argv + optind);