]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/MKcaptab.sh
ncurses 6.1 - patch 20190623
[ncurses.git] / ncurses / tinfo / MKcaptab.sh
index d333301a0b377eeded747bb76f80f8c3fcec4b92..f1e989c637f0caff5cad8f9c0d94804787d9940f 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 ##############################################################################
-# Copyright (c) 2007,2009 Free Software Foundation, Inc.                     #
+# Copyright (c) 2007-2011,2019 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"), #
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: MKcaptab.sh,v 1.10 2009/08/08 17:19:25 tom Exp $
-AWK=${1-awk}
-OPT1=${2-0}
-OPT2=${3-tinfo/MKcaptab.awk}
-DATA=${4-../include/Caps}
+# $Id: MKcaptab.sh,v 1.15 2019/04/06 21:53:49 tom Exp $
+
+if test $# != 0
+then
+       AWK="$1"; shift 1
+else
+       AWK=awk
+fi
+
+if test $# != 0
+then
+       OPT1="$1"; shift 1
+else
+       OPT1="-0"
+fi
+
+if test $# != 0
+then
+       OPT2="$1"; shift 1
+else
+       OPT2="tinfo/MKcaptab.awk"
+fi
 
 cat <<EOF
 /*
@@ -52,12 +69,12 @@ cat <<'EOF'
 
 EOF
 
-./make_hash 1 info $OPT1 <$DATA
-./make_hash 3 cap  $OPT1 <$DATA
+cat "$@" |./make_hash 1 info $OPT1
+cat "$@" |./make_hash 3 cap  $OPT1
 
-$AWK -f $OPT2 bigstrings=$OPT1 tablename=capalias <$DATA 
+cat "$@" |$AWK -f $OPT2 bigstrings=$OPT1 tablename=capalias
 
-$AWK -f $OPT2 bigstrings=$OPT1 tablename=infoalias <$DATA
+cat "$@" |$AWK -f $OPT2 bigstrings=$OPT1 tablename=infoalias
 
 cat <<EOF
 
@@ -65,7 +82,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 *
@@ -99,12 +116,12 @@ static const struct alias *
 _nc_build_alias(struct alias **actual,
                const alias_table_data *source,
                const char *strings,
-               unsigned tablesize)
+               size_t tablesize)
 {
     if (*actual == 0) {
        *actual = typeCalloc(struct alias, tablesize + 1);
        if (*actual != 0) {
-           unsigned n;
+           size_t n;
            for (n = 0; n < tablesize; ++n) {
                add_alias(from);
                add_alias(to);
@@ -144,7 +161,7 @@ NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool termcap)
 }
 
 static HashValue
-hash_function(const char *string)
+info_hash(const char *string)
 {
     long sum = 0;
 
@@ -158,10 +175,27 @@ hash_function(const char *string)
     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_cap_names(const char *a, const char *b)
+compare_tcap_names(const char *a, const char *b)
 {
-    return !strncmp(a, b, 2);
+    return !strncmp(a, b, (size_t) TCAP_LEN);
 }
 
 static int
@@ -171,8 +205,8 @@ compare_info_names(const char *a, const char *b)
 }
 
 static const HashData hash_data[2] = {
-    { HASHTABSIZE, _nc_info_hash_table, hash_function, compare_info_names },
-    { HASHTABSIZE, _nc_cap_hash_table, hash_function, compare_cap_names }
+    { 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)