1 #!/bin/sh 2 3 hxtoh() 4 { 5 flag=1 6 while read -r str; do 7 case $str in 8 HXCOMM*) 9 ;; 10 STEXI*|ETEXI*|SQMP*|EQMP*) flag=$(($flag^1)) 11 ;; 12 *) 13 test $flag -eq 1 && printf "%s\n" "$str" 14 ;; 15 esac 16 done 17 } 18 19 hxtotexi() 20 { 21 flag=0 22 line=1 23 while read -r str; do 24 case "$str" in 25 HXCOMM*) 26 ;; 27 STEXI*) 28 if test $flag -eq 1 ; then 29 echo "line $line: syntax error: expected ETEXI, found $str" >&2 30 exit 1 31 fi 32 flag=1 33 ;; 34 ETEXI*) 35 if test $flag -ne 1 ; then 36 echo "line $line: syntax error: expected STEXI, found $str" >&2 37 exit 1 38 fi 39 flag=0 40 ;; 41 SQMP*|EQMP*) 42 if test $flag -eq 1 ; then 43 echo "line $line: syntax error: expected ETEXI, found $str" >&2 44 exit 1 45 fi 46 ;; 47 DEFHEADING*) 48 echo "$(expr "$str" : "DEFHEADING(\(.*\))")" 49 ;; 50 *) 51 test $flag -eq 1 && echo "$str" 52 ;; 53 esac 54 line=$((line+1)) 55 done 56 } 57 58 hxtoqmp() 59 { 60 IFS= 61 flag=0 62 line=1 63 while read -r str; do 64 case "$str" in 65 HXCOMM*) 66 ;; 67 SQMP*) 68 if test $flag -eq 1 ; then 69 echo "line $line: syntax error: expected EQMP, found $str" >&2 70 exit 1 71 fi 72 flag=1 73 ;; 74 EQMP*) 75 if test $flag -ne 1 ; then 76 echo "line $line: syntax error: expected SQMP, found $str" >&2 77 exit 1 78 fi 79 flag=0 80 ;; 81 STEXI*|ETEXI*) 82 if test $flag -eq 1 ; then 83 echo "line $line: syntax error: expected EQMP, found $str" >&2 84 exit 1 85 fi 86 ;; 87 *) 88 test $flag -eq 1 && echo "$str" 89 ;; 90 esac 91 line=$((line+1)) 92 done 93 } 94 95 case "$1" in 96 "-h") hxtoh ;; 97 "-t") hxtotexi ;; 98 "-q") hxtoqmp ;; 99 *) exit 1 ;; 100 esac 101 102 exit 0 103