aboutsummaryrefslogtreecommitdiff
path: root/ncurses/tinfo/MKcaptab.sh
diff options
context:
space:
mode:
authorEd Schouten <ed@FreeBSD.org>2011-04-30 10:55:14 +0000
committerEd Schouten <ed@FreeBSD.org>2011-04-30 10:55:14 +0000
commit0294a182a1629b1d854b84906e73487d6cb75fba (patch)
treee563e21bcc0164ba11452983316bda26eebb1d3c /ncurses/tinfo/MKcaptab.sh
parent22b11c4db16996bf8d4878fab98762c348676df3 (diff)
downloadsrc-0294a182a1629b1d854b84906e73487d6cb75fba.tar.gz
src-0294a182a1629b1d854b84906e73487d6cb75fba.zip
Import a stock copy of ncurses 5.8 into the vendor space.vendor/ncurses/5.8-20110226
It seems both local changes we made to 5.7 have already been fixed upstream properly, so there is no need to preserve the changes. Also, with SVN we import full source trees. Unlike CVS, where we removed unneeded cruft.
Notes
Notes: svn path=/vendor/ncurses/dist/; revision=221243 svn path=/vendor/ncurses/5.8-20110226/; revision=221244; tag=vendor/ncurses/5.8-20110226
Diffstat (limited to 'ncurses/tinfo/MKcaptab.sh')
-rw-r--r--ncurses/tinfo/MKcaptab.sh136
1 files changed, 99 insertions, 37 deletions
diff --git a/ncurses/tinfo/MKcaptab.sh b/ncurses/tinfo/MKcaptab.sh
index 98c04e884309..4d1b53a5bd9a 100644
--- a/ncurses/tinfo/MKcaptab.sh
+++ b/ncurses/tinfo/MKcaptab.sh
@@ -1,6 +1,6 @@
#!/bin/sh
##############################################################################
-# Copyright (c) 2007 Free Software Foundation, Inc. #
+# Copyright (c) 2007-2009,2010 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"), #
@@ -26,12 +26,19 @@
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
-# $Id: MKcaptab.sh,v 1.8 2007/08/12 13:13:51 tom Exp $
+# $Id: MKcaptab.sh,v 1.13 2010/12/25 23:43:58 tom Exp $
AWK=${1-awk}
OPT1=${2-0}
OPT2=${3-tinfo/MKcaptab.awk}
DATA=${4-../include/Caps}
+cat <<EOF
+/*
+ * generated by $0
+ */
+
+EOF
+
cat <<'EOF'
/*
* comp_captab.c -- The names of the capabilities indexed via a hash
@@ -48,7 +55,7 @@ EOF
./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=capalias <$DATA
$AWK -f $OPT2 bigstrings=$OPT1 tablename=infoalias <$DATA
@@ -58,7 +65,7 @@ cat <<EOF
static void
next_string(const char *strings, unsigned *offset)
{
- *offset += strlen(strings + *offset) + 1;
+ *offset += (unsigned) strlen(strings + *offset) + 1;
}
static const struct name_table_entry *
@@ -66,21 +73,21 @@ _nc_build_names(struct name_table_entry **actual,
const name_table_data *source,
const char *strings)
{
- if (*actual == 0) {
- *actual = typeCalloc(struct name_table_entry, CAPTABSIZE);
- if (*actual != 0) {
- unsigned n;
- unsigned len = 0;
- for (n = 0; n < CAPTABSIZE; ++n) {
- (*actual)[n].nte_name = strings + len;
- (*actual)[n].nte_type = source[n].nte_type;
- (*actual)[n].nte_index = source[n].nte_index;
- (*actual)[n].nte_link = source[n].nte_link;
- next_string(strings, &len);
- }
- }
+ if (*actual == 0) {
+ *actual = typeCalloc(struct name_table_entry, CAPTABSIZE);
+ if (*actual != 0) {
+ unsigned n;
+ unsigned len = 0;
+ for (n = 0; n < CAPTABSIZE; ++n) {
+ (*actual)[n].nte_name = strings + len;
+ (*actual)[n].nte_type = source[n].nte_type;
+ (*actual)[n].nte_index = source[n].nte_index;
+ (*actual)[n].nte_link = source[n].nte_link;
+ next_string(strings, &len);
+ }
}
- return *actual;
+ }
+ return *actual;
}
#define add_alias(field) \\
@@ -94,18 +101,18 @@ _nc_build_alias(struct alias **actual,
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);
- }
- }
+ 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;
+ }
+ return *actual;
}
#define build_names(root) _nc_build_names(&_nc_##root##_table, \\
@@ -122,27 +129,82 @@ _nc_build_alias(struct alias **actual,
NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool termcap)
{
- return termcap ? build_names(cap) : build_names(info) ;
+ return termcap ? build_names(cap) : build_names(info) ;
}
-NCURSES_EXPORT(const short *) _nc_get_hash_table (bool termcap)
+/* entrypoint used by tack (do not alter) */
+NCURSES_EXPORT(const HashValue *) _nc_get_hash_table (bool termcap)
{
- return termcap ? _nc_cap_hash_table: _nc_info_hash_table ;
+ return termcap ? _nc_cap_hash_table: _nc_info_hash_table ;
}
NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool termcap)
{
- return termcap ? build_alias(cap) : build_alias(info) ;
+ return termcap ? build_alias(cap) : build_alias(info) ;
+}
+
+static HashValue
+info_hash(const char *string)
+{
+ long sum = 0;
+
+ DEBUG(9, ("hashing %s", string));
+ while (*string) {
+ sum += (long) (*string + (*(string + 1) << 8));
+ string++;
+ }
+
+ DEBUG(9, ("sum is %ld", sum));
+ return (HashValue) (sum % HASHTABSIZE);
+}
+
+#define TCAP_LEN 2 /* only 1- or 2-character names are used */
+
+static HashValue
+tcap_hash(const char *string)
+{
+ char temp[TCAP_LEN + 1];
+ int limit = 0;
+
+ while (*string) {
+ temp[limit++] = *string++;
+ if (limit >= TCAP_LEN)
+ break;
+ }
+ temp[limit] = '\0';
+ return info_hash(temp);
+}
+
+static int
+compare_tcap_names(const char *a, const char *b)
+{
+ return !strncmp(a, b, TCAP_LEN);
+}
+
+static int
+compare_info_names(const char *a, const char *b)
+{
+ return !strcmp(a, b);
+}
+
+static const HashData hash_data[2] = {
+ { HASHTABSIZE, _nc_info_hash_table, info_hash, compare_info_names },
+ { HASHTABSIZE, _nc_cap_hash_table, tcap_hash, compare_tcap_names }
+};
+
+NCURSES_EXPORT(const HashData *) _nc_get_hash_info (bool termcap)
+{
+ return &hash_data[(termcap != FALSE)];
}
#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);
+ FreeIfNeeded(_nc_cap_table);
+ FreeIfNeeded(_nc_info_table);
+ FreeIfNeeded(_nc_capalias_table);
+ FreeIfNeeded(_nc_infoalias_table);
#endif
}
#endif /* NO_LEAKS */