X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftic.c;h=cd1efb2bd6b1f02ffe52845c108858792f1c07f5;hp=8182e2eea7aa9d8a0f2c1d4682bfac67c5d1dbe0;hb=5817afea017464ac3b89170fb205f21d99bec47c;hpb=fe7c48d7d5115212f09b4ec0d84b189a76953f0d diff --git a/progs/tic.c b/progs/tic.c index 8182e2ee..cd1efb2b 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -48,7 +48,7 @@ #include #include -MODULE_ID("$Id: tic.c,v 1.210 2015/05/27 00:58:18 tom Exp $") +MODULE_ID("$Id: tic.c,v 1.216 2015/09/05 19:22:49 tom Exp $") #define STDIN_NAME "" @@ -142,6 +142,7 @@ usage(void) static const char options_string[] = { DATA("Options:") + DATA(" -0 format translation output all capabilities on one line") DATA(" -1 format translation output one capability per line") #if NCURSES_XNAMES DATA(" -a retain commented-out capabilities (sets -x also)") @@ -158,6 +159,8 @@ usage(void) DATA(" -L translate entries to full terminfo source form") DATA(" -N disable smart defaults for source translation") DATA(" -o set output directory for compiled entry writes") + DATA(" -Q[n] dump compiled description") + DATA(" -q brief listing, removes headers") DATA(" -R restrict translation to given terminfo/termcap version") DATA(" -r force resolution of all use entries in source translation") DATA(" -s print summary statistics") @@ -659,6 +662,12 @@ show_databases(const char *outdir) } } +static void +add_digit(int *target, int source) +{ + *target = (*target * 10) + (source - '0'); +} + #define VtoTrace(opt) (unsigned) ((opt > 0) ? opt : (opt == 0)) int @@ -689,6 +698,8 @@ main(int argc, char *argv[]) char *outdir = (char *) NULL; bool check_only = FALSE; bool suppress_untranslatable = FALSE; + int quickdump = 0; + bool quiet = FALSE; log_fp = stderr; @@ -714,14 +725,17 @@ main(int argc, char *argv[]) * be optional. */ while ((this_opt = getopt(argc, argv, - "0123456789CDIKLNR:TUVace:fGgo:rstvwx")) != -1) { + "0123456789CDIKLNQR:TUVace:fGgo:qrstvwx")) != -1) { if (isdigit(this_opt)) { switch (last_opt) { + case 'Q': + add_digit(&quickdump, this_opt); + break; case 'v': - v_opt = (v_opt * 10) + (this_opt - '0'); + add_digit(&v_opt, this_opt); break; case 'w': - width = (width * 10) + (this_opt - '0'); + add_digit(&width, this_opt); break; default: switch (this_opt) { @@ -772,6 +786,9 @@ main(int argc, char *argv[]) smart_defaults = FALSE; literal = TRUE; break; + case 'Q': + quickdump = 0; + break; case 'R': tversion = optarg; break; @@ -802,6 +819,9 @@ main(int argc, char *argv[]) case 'o': outdir = optarg; break; + case 'q': + quiet = TRUE; + break; case 'r': forceresolve = TRUE; break; @@ -913,11 +933,11 @@ main(int argc, char *argv[]) ? outform : F_LITERAL, sortmode, width, height, debug_level, formatted || - check_only, check_only); + check_only, check_only, quickdump); } else if (capdump) { dump_init(tversion, outform, - sortmode, width, height, debug_level, FALSE, FALSE); + sortmode, width, height, debug_level, FALSE, FALSE, FALSE); } /* parse entries out of the source file */ @@ -988,12 +1008,14 @@ main(int argc, char *argv[]) /* this is in case infotocap() generates warnings */ _nc_set_type(_nc_first_name(qp->tterm.term_names)); - (void) fseek(tmp_fp, qp->cstart, SEEK_SET); - while (j-- > 0) { - if (infodump) - (void) putchar(fgetc(tmp_fp)); - else - put_translate(fgetc(tmp_fp)); + if (!quiet) { + (void) fseek(tmp_fp, qp->cstart, SEEK_SET); + while (j-- > 0) { + if (infodump) + (void) putchar(fgetc(tmp_fp)); + else + put_translate(fgetc(tmp_fp)); + } } repair_acsc(&qp->tterm); @@ -1006,7 +1028,7 @@ main(int argc, char *argv[]) printf("# length=%d\n", len); } } - if (!namelst && _nc_tail) { + if (!namelst && _nc_tail && !quiet) { int c, oldc = '\0'; bool in_comment = FALSE; bool trailing_comment = FALSE; @@ -2149,7 +2171,7 @@ get_fkey_list(TERMTYPE *tp) NAME_VALUE *result = typeMalloc(NAME_VALUE, NUM_STRINGS(tp) + 1); const struct tinfo_fkeys *all_fkeys = _nc_tinfo_fkeys; int used = 0; - int j; + unsigned j; if (result == 0) failed("get_fkey_list"); @@ -2165,7 +2187,7 @@ get_fkey_list(TERMTYPE *tp) } #if NCURSES_XNAMES for (j = STRCOUNT; j < NUM_STRINGS(tp); ++j) { - const char *name = ExtStrname(tp, j, strnames); + const char *name = ExtStrname(tp, (int) j, strnames); if (*name == 'k') { result[used].keycode = -1; result[used].name = name; @@ -2337,13 +2359,15 @@ check_termtype(TERMTYPE *tp, bool literal) ("will trim sgr0\n\toriginal sgr0=%s\n\ttrimmed sgr0=%s", _nc_visbuf2(1, exit_attribute_mode), _nc_visbuf2(2, check_sgr0))); - free(check_sgr0); } else { DEBUG(2, ("will not trim sgr0\n\toriginal sgr0=%s", _nc_visbuf(exit_attribute_mode))); } } + if (check_sgr0 != exit_attribute_mode) { + free(check_sgr0); + } } #ifdef TRACE show_where(2);