=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/infocmp/infocmp.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -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 **** ! /* $OpenBSD: infocmp.c,v 1.10 2000/03/26 16:45:04 millert Exp $ */ /**************************************************************************** * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. * --- 1,4 ---- ! /* $OpenBSD: infocmp.c,v 1.11 2000/10/08 22:47:12 millert Exp $ */ /**************************************************************************** * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. * *************** *** 43,49 **** #include #include ! MODULE_ID("$From: infocmp.c,v 1.54 2000/03/19 02:56:14 tom Exp $") #define L_CURL "{" #define R_CURL "}" --- 43,49 ---- #include #include ! MODULE_ID("$From: infocmp.c,v 1.57 2000/10/01 01:26:25 tom Exp $") #define L_CURL "{" #define R_CURL "}" *************** *** 75,81 **** 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 sortmode; /* sort_mode */ /* main comparison mode */ --- 75,81 ---- 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 sortmode; /* sort_mode */ /* main comparison mode */ *************** *** 92,99 **** static void ExitProgram(int code) GCC_NORETURN; /* prototype is to get gcc to accept the noreturn attribute */ ! static void ! ExitProgram(int code) { while (termcount-- > 0) _nc_free_termtype(&entries[termcount].tterm); --- 92,99 ---- static void ExitProgram(int code) GCC_NORETURN; /* prototype is to get gcc to accept the noreturn attribute */ ! static void ! ExitProgram(int code) { while (termcount-- > 0) _nc_free_termtype(&entries[termcount].tterm); *************** *** 352,361 **** 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)); break; case C_COMMON: --- 352,361 ---- 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)); break; case C_COMMON: *************** *** 734,741 **** /* maybe do use resolution */ if (!_nc_resolve_uses(!limited)) { (void) fprintf(stderr, ! "There are unresolved use entries in %s:\n", ! argv[n]); for_entry_list(qp) { if (qp->nuses) { (void) fputs(qp->tterm.term_names, stderr); --- 734,741 ---- /* maybe do use resolution */ if (!_nc_resolve_uses(!limited)) { (void) fprintf(stderr, ! "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,804 **** 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]); for (i = 0; i < qp->ncrosslinks; i++) (void) fprintf(stderr, ! "\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]); for (i = 0; i < rp->ncrosslinks; i++) (void) fprintf(stderr, ! "\t%s\n", ! _nc_first_name((rp->crosslinks[i])->tterm.term_names)); } } --- 775,804 ---- 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]); for (i = 0; i < qp->ncrosslinks; i++) (void) fprintf(stderr, ! "\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]); for (i = 0; i < rp->ncrosslinks; i++) (void) fprintf(stderr, ! "\t%s\n", ! _nc_first_name((rp->crosslinks[i])->tterm.term_names)); } } *************** *** 806,818 **** for (qp = heads[0]; qp; qp = qp->next) if (qp->ncrosslinks == 0) (void) printf("\t%s\n", ! _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)); (void) printf("The following entries are equivalent:\n"); for (qp = heads[0]; qp; qp = qp->next) { --- 806,818 ---- for (qp = heads[0]; qp; qp = qp->next) if (qp->ncrosslinks == 0) (void) printf("\t%s\n", ! _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)); (void) printf("The following entries are equivalent:\n"); for (qp = heads[0]; qp; qp = qp->next) { *************** *** 860,866 **** case C_DIFFERENCE: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; --- 860,866 ---- case C_DIFFERENCE: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; *************** *** 868,874 **** case C_COMMON: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping common capabilities\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; --- 868,874 ---- case C_COMMON: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping common capabilities\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; *************** *** 876,882 **** case C_NAND: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; --- 876,882 ---- case C_NAND: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", name1, name2); compare_entry(compare_predicate, &entries->tterm, quiet); break; *************** *** 926,932 **** ," -w number (width)" }; const size_t first = 3; ! const size_t last = sizeof(tbl) / sizeof(tbl[0]); const size_t left = (last - first + 1) / 2 + first; size_t n; --- 926,932 ---- ," -w number (width)" }; const size_t first = 3; ! const size_t last = SIZEOF(tbl); const size_t left = (last - first + 1) / 2 + first; size_t n; *************** *** 987,993 **** break; } (void) printf("\t/* %3d: %-8s */\t%s,\n", ! n, ExtBoolname(term, n, boolnames), str); } (void) printf("%s;\n", R_CURL); --- 987,993 ---- break; } (void) printf("\t/* %3d: %-8s */\t%s,\n", ! n, ExtBoolname(term, n, boolnames), str); } (void) printf("%s;\n", R_CURL); *************** *** 1007,1014 **** str = buf; break; } ! (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ExtNumname(term, n, ! numnames), str); } (void) printf("%s;\n", R_CURL); --- 1007,1014 ---- str = buf; break; } ! (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ! ExtNumname(term, n, numnames), str); } (void) printf("%s;\n", R_CURL); *************** *** 1029,1036 **** tp = buf; *tp++ = '"'; for (sp = term->Strings[n]; ! *sp != 0 && (tp - buf) < MAX_STRING - 6; ! sp++) { if (isascii(*sp) && isprint(*sp) && *sp != '\\' && *sp != '"') *tp++ = *sp; else { --- 1029,1036 ---- tp = buf; *tp++ = '"'; for (sp = term->Strings[n]; ! *sp != 0 && (tp - buf) < MAX_STRING - 6; ! sp++) { if (isascii(*sp) && isprint(*sp) && *sp != '\\' && *sp != '"') *tp++ = *sp; else { *************** *** 1048,1058 **** (void) printf("%s;\n", R_CURL); (void) printf("static char * %s[] = %s\n", ! name_initializer("string_ext"), L_CURL); } #endif ! (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ExtStrname(term, n, ! strnames), str); } (void) printf("%s;\n", R_CURL); } --- 1048,1058 ---- (void) printf("%s;\n", R_CURL); (void) printf("static char * %s[] = %s\n", ! name_initializer("string_ext"), L_CURL); } #endif ! (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ! ExtStrname(term, n, strnames), str); } (void) printf("%s;\n", R_CURL); } *************** *** 1073,1098 **** (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"); (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); (void) printf("\t\t%d,\t\t/* count extensions to Numbers */\n", ! NUM_NUMBERS(term) - NUMCOUNT); (void) printf("\t\t%d,\t\t/* count extensions to Strings */\n", ! NUM_STRINGS(term) - STRCOUNT); (void) printf("#endif /* NCURSES_XNAMES */\n"); #endif /* NCURSES_XNAMES */ (void) printf("\t%s\n", R_CURL); } /*************************************************************************** * * Main sequence --- 1073,1111 ---- (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"); (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); (void) printf("\t\t%d,\t\t/* count extensions to Numbers */\n", ! NUM_NUMBERS(term) - NUMCOUNT); (void) printf("\t\t%d,\t\t/* count extensions to Strings */\n", ! 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,1120 **** if ((terminal = getenv("TERM")) == 0) { (void) fprintf(stderr, ! "infocmp: environment variable TERM not set\n"); return EXIT_FAILURE; } --- 1127,1133 ---- if ((terminal = getenv("TERM")) == 0) { (void) fprintf(stderr, ! "infocmp: environment variable TERM not set\n"); return EXIT_FAILURE; } *************** *** 1224,1230 **** sortmode = S_TERMCAP; else { (void) fprintf(stderr, ! "infocmp: unknown sort mode\n"); return EXIT_FAILURE; } break; --- 1237,1243 ---- sortmode = S_TERMCAP; else { (void) fprintf(stderr, ! "infocmp: unknown sort mode\n"); return EXIT_FAILURE; } break; *************** *** 1234,1250 **** break; case 'v': ! itrace = atoi(optarg); set_trace_level(itrace); break; case 'V': ! (void) fputs(NCURSES_VERSION, stdout); ! putchar('\n'); ExitProgram(EXIT_SUCCESS); case 'w': ! mwidth = atoi(optarg); break; case 'A': --- 1247,1262 ---- break; case 'v': ! itrace = optarg_to_number(); set_trace_level(itrace); break; case 'V': ! puts(curses_version()); ExitProgram(EXIT_SUCCESS); case 'w': ! mwidth = optarg_to_number(); break; case 'A': *************** *** 1291,1297 **** for (; optind < argc; optind++) { if (termcount >= MAXTERMS) { (void) fprintf(stderr, ! "infocmp: too many terminal type arguments\n"); return EXIT_FAILURE; } else { const char *directory = termcount ? restdir : firstdir; --- 1303,1309 ---- for (; optind < argc; optind++) { if (termcount >= MAXTERMS) { (void) fprintf(stderr, ! "infocmp: too many terminal type arguments\n"); return EXIT_FAILURE; } else { const char *directory = termcount ? restdir : firstdir; *************** *** 1301,1331 **** if (directory) { (void) sprintf(tfile[termcount], "%s/%c/%s", ! directory, ! *argv[optind], argv[optind]); if (itrace) (void) fprintf(stderr, ! "infocmp: reading entry %s from file %s\n", ! argv[optind], tfile[termcount]); status = _nc_read_file_entry(tfile[termcount], ! &entries[termcount].tterm); } else { if (itrace) (void) fprintf(stderr, ! "infocmp: reading entry %s from system directories %s\n", ! argv[optind], tname[termcount]); status = _nc_read_entry(tname[termcount], ! 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]); return EXIT_FAILURE; } repair_acsc(&entries[termcount].tterm); --- 1313,1343 ---- if (directory) { (void) sprintf(tfile[termcount], "%s/%c/%s", ! directory, ! *argv[optind], argv[optind]); if (itrace) (void) fprintf(stderr, ! "infocmp: reading entry %s from file %s\n", ! argv[optind], tfile[termcount]); status = _nc_read_file_entry(tfile[termcount], ! &entries[termcount].tterm); } else { if (itrace) (void) fprintf(stderr, ! "infocmp: reading entry %s from system directories %s\n", ! argv[optind], tname[termcount]); status = _nc_read_entry(tname[termcount], ! 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]); return EXIT_FAILURE; } repair_acsc(&entries[termcount].tterm); *************** *** 1370,1379 **** case C_DEFAULT: if (itrace) (void) fprintf(stderr, ! "infocmp: about to dump %s\n", ! tname[0]); (void) printf("#\tReconstructed via infocmp from file: %s\n", ! tfile[0]); len = dump_entry(&entries[0].tterm, limited, numbers, NULL); putchar('\n'); if (itrace) --- 1382,1391 ---- case C_DEFAULT: if (itrace) (void) fprintf(stderr, ! "infocmp: about to dump %s\n", ! tname[0]); (void) printf("#\tReconstructed via infocmp from file: %s\n", ! tfile[0]); len = dump_entry(&entries[0].tterm, limited, numbers, NULL); putchar('\n'); if (itrace) *************** *** 1390,1396 **** case C_COMMON: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping common capabilities\n"); (void) printf("comparing %s to %s.\n", tname[0], tname[1]); compare_entry(compare_predicate, &entries->tterm, quiet); break; --- 1402,1408 ---- case C_COMMON: if (itrace) (void) fprintf(stderr, ! "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,1404 **** case C_NAND: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", tname[0], tname[1]); compare_entry(compare_predicate, &entries->tterm, quiet); break; --- 1410,1416 ---- case C_NAND: if (itrace) (void) fprintf(stderr, ! "infocmp: dumping differences\n"); (void) printf("comparing %s to %s.\n", tname[0], tname[1]); compare_entry(compare_predicate, &entries->tterm, quiet); break; *************** *** 1409,1415 **** 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)); putchar('\n'); if (itrace) (void) fprintf(stderr, "infocmp: length %d\n", len); --- 1421,1427 ---- 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)); putchar('\n'); if (itrace) (void) fprintf(stderr, "infocmp: length %d\n", len); *************** *** 1421,1427 **** (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"); else file_comparison(argc - optind, argv + optind); --- 1433,1439 ---- (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"); else file_comparison(argc - optind, argv + optind);