X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2FMKcaptab.sh;h=98c04e884309d240376988506f6d14d64a8ac2d3;hp=0444335a19c58732e152b3d38fd5121a9b3ac35b;hb=ed530db2c5b10aa19d06104dfe82cf248a813860;hpb=03a795bde58b3280a4e9d80029a3b7fec13c79ad diff --git a/ncurses/tinfo/MKcaptab.sh b/ncurses/tinfo/MKcaptab.sh index 0444335a..98c04e88 100644 --- a/ncurses/tinfo/MKcaptab.sh +++ b/ncurses/tinfo/MKcaptab.sh @@ -26,7 +26,7 @@ # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# $Id: MKcaptab.sh,v 1.3 2007/07/28 22:14:57 tom Exp $ +# $Id: MKcaptab.sh,v 1.8 2007/08/12 13:13:51 tom Exp $ AWK=${1-awk} OPT1=${2-0} OPT2=${3-tinfo/MKcaptab.awk} @@ -39,25 +39,90 @@ cat <<'EOF' * */ -#include #include #include -#include +#include EOF -./make_hash 1 info <$DATA -./make_hash 3 cap <$DATA +./make_hash 1 info $OPT1 <$DATA +./make_hash 3 cap $OPT1 <$DATA $AWK -f $OPT2 bigstrings=$OPT1 tablename=capalias <$DATA $AWK -f $OPT2 bigstrings=$OPT1 tablename=infoalias <$DATA -cat <<'EOF' +cat <= 0) { \\ + (*actual)[n].field = strings + source[n].field; \\ + } + +static const struct alias * +_nc_build_alias(struct alias **actual, + const alias_table_data *source, + const char *strings, + unsigned tablesize) +{ + if (*actual == 0) { + *actual = typeCalloc(struct alias, tablesize + 1); + if (*actual != 0) { + unsigned n; + for (n = 0; n < tablesize; ++n) { + add_alias(from); + add_alias(to); + add_alias(source); + } + } + } + return *actual; +} + +#define build_names(root) _nc_build_names(&_nc_##root##_table, \\ + root##_names_data, \\ + root##_names_text) +#define build_alias(root) _nc_build_alias(&_nc_##root##alias_table, \\ + root##alias_data, \\ + root##alias_text, \\ + SIZEOF(root##alias_data)) +#else +#define build_names(root) _nc_ ## root ## _table +#define build_alias(root) _nc_ ## root ## alias_table +#endif NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool termcap) { - return termcap ? _nc_cap_table: _nc_info_table ; + return termcap ? build_names(cap) : build_names(info) ; } NCURSES_EXPORT(const short *) _nc_get_hash_table (bool termcap) @@ -67,6 +132,18 @@ NCURSES_EXPORT(const short *) _nc_get_hash_table (bool termcap) NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool termcap) { - return termcap ? _nc_capalias_table: _nc_infoalias_table ; + return termcap ? build_alias(cap) : build_alias(info) ; +} + +#if NO_LEAKS +NCURSES_EXPORT(void) _nc_comp_captab_leaks(void) +{ +#if $OPT1 + FreeIfNeeded(_nc_cap_table); + FreeIfNeeded(_nc_info_table); + FreeIfNeeded(_nc_capalias_table); + FreeIfNeeded(_nc_infoalias_table); +#endif } +#endif /* NO_LEAKS */ EOF