summaryrefslogtreecommitdiffstats
path: root/term.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:28:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:28:28 +0000
commit5a5e2352c9a01f9076994915188c26c6b9036202 (patch)
tree1e1474b8b914d161946c01ba26a56db68b1fd5d3 /term.sh
parentInitial commit. (diff)
downloadscreen-5a5e2352c9a01f9076994915188c26c6b9036202.tar.xz
screen-5a5e2352c9a01f9076994915188c26c6b9036202.zip
Adding upstream version 4.9.0.upstream/4.9.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'term.sh')
-rw-r--r--term.sh169
1 files changed, 169 insertions, 0 deletions
diff --git a/term.sh b/term.sh
new file mode 100644
index 0000000..f5dfc4a
--- /dev/null
+++ b/term.sh
@@ -0,0 +1,169 @@
+#! /bin/sh
+
+if test -z "$AWK"; then
+ AWK=awk
+fi
+if test -z "$srcdir"; then
+ srcdir=.
+fi
+
+LC_ALL=C
+export LC_ALL
+
+rm -f term.h
+cat << EOF > term.h
+/*
+ * This file is automagically created from term.c -- DO NOT EDIT
+ */
+
+#define T_FLG 0
+#define T_NUM 1
+#define T_STR 2
+
+struct term
+{
+ char *tcname;
+ int type;
+};
+
+union tcu
+{
+ int flg;
+ int num;
+ char *str;
+};
+
+EOF
+
+#
+# SCO-Unix sufferers may need to use the following lines:
+# perl -p < ${srcdir}/term.c \
+# -e 's/"/"C/ if /"[A-Z]."/;' \
+# -e 'y/[a-z]/[A-Z]/ if /"/;' \
+#
+sed < ${srcdir}/term.c \
+ -e '/"[A-Z]."/s/"/"C/' \
+ -e '/"/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
+| $AWK '
+/^ [{] ".*KMAPDEF[(].*$/{
+ if (min == 0) min = s
+ max = s;
+}
+/^ [{] ".*KMAPADEF[(].*$/{
+ if (amin == 0) amin = s
+ amax = s;
+}
+/^ [{] ".*KMAPMDEF[(].*$/{
+ if (mmin == 0) mmin = s
+ mmax = s;
+}
+/^ [{] ".*$/{
+a=substr($2,2,length($2)-3);
+b=substr($3,3,3);
+if (nolist == 0) {
+ printf "#define d_%s d_tcs[%d].%s\n",a,s,b
+ printf "#define D_%s (D_tcs[%d].%s)\n",a,s,b
+ }
+s++;
+}
+/\/* define/{
+printf "#define %s %d\n",$3,s
+}
+/\/* nolist/{
+nolist = 1;
+}
+/\/* list/{
+nolist = 0;
+}
+END {
+ printf "\n#ifdef MAPKEYS\n"
+ printf "# define KMAPDEFSTART %d\n", min
+ printf "# define NKMAPDEF %d\n", max-min+1
+ printf "# define KMAPADEFSTART %d\n", amin
+ printf "# define NKMAPADEF %d\n", amax-amin+1
+ printf "# define KMAPMDEFSTART %d\n", mmin
+ printf "# define NKMAPMDEF %d\n", mmax-mmin+1
+ printf "#endif\n"
+}
+' | sed -e s/NUM/num/ -e s/STR/str/ -e s/FLG/flg/ \
+>> term.h
+
+rm -f kmapdef.c
+cat << EOF > kmapdef.c
+/*
+ * This file is automagically created from term.c -- DO NOT EDIT
+ */
+
+#include "config.h"
+
+#ifdef MAPKEYS
+
+EOF
+
+$AWK < ${srcdir}/term.c '
+/^ [{] ".*KMAP.*$/{
+ for (i = 0; i < 3; i++) {
+ q = $(5+i)
+ if (substr(q, 1, 5) == "KMAPD") {
+ if (min == 0) min = s
+ max = s
+ arr[s] = substr(q, 9, length(q)-9)
+ }
+ if (substr(q, 1, 5) == "KMAPA") {
+ if (amin == 0) amin = s
+ amax = s
+ anarr[s] = substr(q, 10, length(q)-10)
+ }
+ if (substr(q, 1, 5) == "KMAPM") {
+ if (mmin == 0) mmin = s
+ mmax = s
+ mnarr[s] = substr(q, 10, length(q)-10)
+ }
+ }
+}
+/^ [{] ".*$/{
+ s++;
+}
+END {
+ printf "char *kmapdef[] = {\n"
+ for (s = min; s <= max; s++) {
+ if (arr[s])
+ printf "%s", arr[s]
+ else
+ printf "0"
+ if (s < max)
+ printf ",\n"
+ else
+ printf "\n"
+ }
+ printf "};\n\n"
+ printf "char *kmapadef[] = {\n"
+ for (s = amin; s <= amax; s++) {
+ if (anarr[s])
+ printf "%s", anarr[s]
+ else
+ printf "0"
+ if (s < amax)
+ printf ",\n"
+ else
+ printf "\n"
+ }
+ printf "};\n\n"
+ printf "char *kmapmdef[] = {\n"
+ for (s = mmin; s <= mmax; s++) {
+ if (mnarr[s])
+ printf "%s", mnarr[s]
+ else
+ printf "0"
+ if (s < mmax)
+ printf ",\n"
+ else
+ printf "\n"
+ }
+ printf "};\n\n#endif\n"
+}
+' >> kmapdef.c
+
+chmod a-w kmapdef.c
+chmod a-w term.h
+