#! /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
*/
struct term
{
char *tcname;
int type;
};
union tcu
{
int flg;
int num;
char *str;
};
EOF
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 " 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
*/
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