eh, make ’em volatile, this is not time-critical code anyway
[alioth/magicpoint.git] / ctlwords.sh
index 4573845..7fe68b2 100644 (file)
@@ -1,4 +1,5 @@
 #!/bin/sh
+#-
 # Copyright © 2019
 #      mirabilos <t.glaser@tarent.de>
 # Copyright (C) 1997 and 1998 WIDE Project.  All rights reserved.
@@ -30,6 +31,8 @@
 LC_ALL=C; LANGUAGE=C
 export LC_ALL; unset LANGUAGE
 
+set -e
+
 allu=QWERTYUIOPASDFGHJKLZXCVBNM
 alll=qwertyuiopasdfghjklzxcvbnm
 
@@ -37,6 +40,24 @@ upper() {
        echo :"$@" | sed 's/^://' | tr $alll $allu
 }
 
+rm -f ctlwords.c ctlwords.h ctlwords.pl
+
+cat >ctlwords.c~ <<\EOF
+/* this was generated by ctlwords.sh, do not edit */
+#include "mgp.h"
+const struct ctl_words ctl_words[] = {
+EOF
+
+cat >ctlwords.h~ <<\EOF
+/* this was generated by ctlwords.sh, do not edit */
+EOF
+
+cat >ctlwords.pl~ <<\EOF
+
+# this keyword list was generated by ctlwords.sh, do not edit
+@keywords = (
+EOF
+
 lfd=0
 while read control ctype clabel; do
        ctlup=`upper CTL_$control`
@@ -45,8 +66,11 @@ while read control ctype clabel; do
                clabel=$control
        elif test x"$clabel" = x"*"; then
                clabel='*'$control'*'
+       else
+               :
        fi
-       clbsz=${#clabel}
+       clbsz=`expr "X$clabel" : '.*'`
+       clbsz=`expr $clbsz - 1` # the X
        cat >&4 <<EOF
        { "$clabel", $clbsz, $ctlup, $ctyup },
 EOF
@@ -57,7 +81,7 @@ EOF
 "$control",
 EOF
        lfd=`expr $lfd + 1`
-done 4>ctlwords.c 5>ctlwords.h 6>ctlwords.pl <<\EOF
+done 4>>ctlwords.c~ 5>>ctlwords.h~ 6>>ctlwords.pl~ <<\EOF
 noop           void
 default                int
 tab            sp
@@ -116,3 +140,23 @@ sub                void
 setsup         int
 title          str
 EOF
+
+cat >>ctlwords.pl~ <<\EOF
+);
+# end of generated keyword list
+
+EOF
+
+cat >>ctlwords.h~ <<\EOF
+/* end of generated file */
+EOF
+
+cat >>ctlwords.c~ <<\EOF
+       { NULL, 0, 0, 0 }
+};
+/* end of generated list */
+EOF
+
+mv ctlwords.pl~ ctlwords.pl
+mv ctlwords.h~ ctlwords.h
+mv ctlwords.c~ ctlwords.c