Module Name: src Committed By: roy Date: Thu Feb 11 13:09:57 UTC 2010
Modified Files: src/usr.bin/tic: tic.1 tic.c Log Message: Change -S to output C structures to make life easier. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/usr.bin/tic/tic.1 cvs rdiff -u -r1.5 -r1.6 src/usr.bin/tic/tic.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/tic/tic.1 diff -u src/usr.bin/tic/tic.1:1.6 src/usr.bin/tic/tic.1:1.7 --- src/usr.bin/tic/tic.1:1.6 Thu Feb 11 07:00:46 2010 +++ src/usr.bin/tic/tic.1 Thu Feb 11 13:09:57 2010 @@ -1,4 +1,4 @@ -.\" $NetBSD: tic.1,v 1.6 2010/02/11 07:00:46 wiz Exp $ +.\" $NetBSD: tic.1,v 1.7 2010/02/11 13:09:57 roy Exp $ .\" .\" Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 10, 2010 +.Dd February 11, 2010 .Dt TIC 1 .Os .Sh NAME @@ -61,8 +61,8 @@ .It Fl S For .Ar term1 , term2 , ... -output the terminal name followed by the compiled -description as strings. +output a C structure containing name, compiled description and compiled size. +This can be used to embed terminal descriptons into a program. .It Fl s Display the number of terminal descritions written to the database. .It Fl x Index: src/usr.bin/tic/tic.c diff -u src/usr.bin/tic/tic.c:1.5 src/usr.bin/tic/tic.c:1.6 --- src/usr.bin/tic/tic.c:1.5 Thu Feb 11 00:24:46 2010 +++ src/usr.bin/tic/tic.c Thu Feb 11 13:09:57 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: tic.c,v 1.5 2010/02/11 00:24:46 roy Exp $ */ +/* $NetBSD: tic.c,v 1.6 2010/02/11 13:09:57 roy Exp $ */ /* * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: tic.c,v 1.5 2010/02/11 00:24:46 roy Exp $"); +__RCSID("$NetBSD: tic.c,v 1.6 2010/02/11 13:09:57 roy Exp $"); #include <sys/types.h> @@ -81,7 +81,7 @@ static TERM *terms; static int error_exit; -static int aflag, xflag; +static int Sflag, aflag, xflag; static char *dbname; static TBUF scratch; @@ -198,7 +198,7 @@ if (strcmp(id, "use") != 0) { if (find_extra(&tic->extras, id) != NULL) return 0; - if (xflag == 0) { + if (!xflag) { if (wrn != 0) dowarn("%s: %s: unknown capability", tic->name, id); @@ -247,11 +247,11 @@ scratch.bufpos = 0; tic = &term->tic; len = strlen(tic->name) + 1; - if (tic->alias == NULL) + if (tic->alias == NULL || Sflag) alen = 0; else alen = strlen(tic->alias) + 1; - if (tic->desc == NULL) + if (tic->desc == NULL || Sflag) dlen = 0; else dlen = strlen(tic->desc) + 1; @@ -276,13 +276,13 @@ if (term->type != 'a') { le16enc(cap, alen); cap += sizeof(uint16_t); - if (tic->alias != NULL) { + if (tic->alias != NULL && !Sflag) { memcpy(cap, tic->alias, alen); cap += alen; } le16enc(cap, dlen); cap += sizeof(uint16_t); - if (tic->desc != NULL) { + if (tic->desc != NULL && !Sflag) { memcpy(cap, tic->desc, dlen); cap += dlen; } @@ -563,12 +563,12 @@ *cap++ = '\0'; /* Skip commented caps */ - if (aflag == 0 && capstart[0] == '.') + if (!aflag && capstart[0] == '.') continue; /* Obsolete entries */ if (capstart[0] == 'O' && capstart[1] == 'T') { - if (xflag == 0) + if (!xflag) continue; capstart += 2; } @@ -891,8 +891,15 @@ int i, n; size_t j, col; - n = 0; + printf("struct compiled_term {\n"); + printf("\tconst char *name;\n"); + printf("\tconst char *cap;\n"); + printf("\tsize_t caplen;\n"); + printf("};\n\n"); + + printf("const struct compiled_term compiled_terms[] = {\n"); + n = 0; for (i = 0; i < argc; i++) { term = find_term(argv[i]); if (term == NULL) { @@ -907,12 +914,13 @@ if (buf == NULL) continue; - printf("\t\"%s\",\n", argv[i]); + printf("\t{\n"); + printf("\t\t\"%s\",\n", argv[i]); n++; for (j = 0, col = 0; j < buf->bufpos; j++) { if (col == 0) { - printf("\t\""); - col = 8; + printf("\t\t\""); + col = 16; } col += printf("\\%03o", (uint8_t)buf->buf[j]); @@ -923,8 +931,14 @@ } } if (col != 0) - printf("\",\n"); + printf("\",\n"); + printf("\t\t%zu\n", buf->bufpos); + printf("\t}"); + if (i + 1 < argc) + printf(","); + printf("\n"); } + printf("};\n"); return n; } @@ -932,7 +946,7 @@ int main(int argc, char **argv) { - int ch, Sflag, cflag, sflag; + int ch, cflag, sflag; char *source, *p, *buf, *ofile; FILE *f; DBM *db; @@ -964,7 +978,7 @@ break; case '?': /* FALLTHROUGH */ default: - fprintf(stderr, "usage: %s [-Sacsx] [-o file] source\n", + fprintf(stderr, "usage: %s [-acSsx] [-o file] source\n", getprogname()); return EXIT_FAILURE; } @@ -975,7 +989,7 @@ f = fopen(source, "r"); if (f == NULL) err(1, "fopen: %s", source); - if (cflag == 0 && Sflag == 0) { + if (!cflag && !Sflag) { if (ofile == NULL) ofile = source; len = strlen(ofile) + 9; @@ -1026,12 +1040,12 @@ while (merge_use() != 0) ; - if (Sflag != 0) { + if (Sflag) { print_dump(argc - optind, argv + optind); return error_exit; } - if (cflag != 0) + if (cflag) return error_exit; /* Save the terms */