X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2FMKcaptab.awk;h=56d3d17754d15f263840227bb550b96eb2ee0b4b;hp=801567cf8e464d632939fe6073e4663713407698;hb=a20e6eb464be80b9cd8cae7ce925d27fe9c209ed;hpb=03a795bde58b3280a4e9d80029a3b7fec13c79ad diff --git a/ncurses/tinfo/MKcaptab.awk b/ncurses/tinfo/MKcaptab.awk index 801567cf..56d3d177 100644 --- a/ncurses/tinfo/MKcaptab.awk +++ b/ncurses/tinfo/MKcaptab.awk @@ -1,5 +1,5 @@ ############################################################################## -# Copyright (c) 1998-2000,2006 Free Software Foundation, Inc. # +# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # @@ -25,27 +25,70 @@ # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# $Id: MKcaptab.awk,v 1.17 2007/07/28 20:43:37 tom Exp $ +# $Id: MKcaptab.awk,v 1.20 2007/08/12 00:26:15 tom Exp $ +function add_string(text) { + if (text != "IGNORE") { + offsets[num_strings] = offset; + offset = offset + length(text) + 1; + printf "%s\\0", text; + } else { + offsets[num_strings] = -1; + } + num_strings = num_strings + 1; + if ((num_strings % 3) == 0) { + printf "\\\n"; + } + return offsets[num_strings - 1]; +} BEGIN { first = 1; + num_aliases = 0; + num_strings = 0; + offset = 0; } /^[^#]/ { if (first) { printf "/* generated by MKcaptab.awk %s(%d) */\n", tablename, bigstrings; - printf "const struct alias _nc_%s_table[] =\n", tablename; - printf "{\n"; + print "" + if (bigstrings) { + printf "static struct alias *_nc_%s_table = 0;\n", tablename; + print ""; + printf "static const char %s_text[] = \"\\\n", tablename; + } else { + printf "static const struct alias _nc_%s_table[] =\n", tablename; + printf "{\n"; + } first = 0; } if ($1 == tablename) { - if ($3 == "IGNORE") + if ($3 == "IGNORE") { to = "(char *)NULL"; - else + } else { to = "\"" $3 "\""; - printf "\t{\"%s\", %s, \"%s\"},\t /* %s */\n", $2, to, $4, $5; + } + if (bigstrings) { + c1 = add_string($2); + c2 = add_string($3); + c3 = add_string($4); + aliases[num_aliases] = sprintf("\t{%5d, %5d, %5d},\t /* %s */", c1, c2, c3, $5); + num_aliases = num_aliases + 1; + } else { + printf "\t{\"%s\", %s, \"%s\"},\t /* %s */\n", $2, to, $4, $5; + } } } END { - printf "\t{(char *)NULL, (char *)NULL, (char *)NULL}\n"; - printf "};\n\n"; + if (bigstrings) { + printf "\";\n\n"; + printf "static const alias_table_data %s_data[] = {\n", tablename; + for (n = 0; n < num_aliases; ++n) { + printf "%s\n", aliases[n]; + } + printf "};\n\n"; + } else { + printf "\t{(char *)NULL, (char *)NULL, (char *)NULL}\n"; + printf "};\n\n"; + } } +# vile:sw=4: