1#!/bin/sh 2 3hxtoh() 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 19hxtotexi() 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 printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2 30 exit 1 31 fi 32 flag=1 33 ;; 34 ETEXI*) 35 if test $flag -ne 1 ; then 36 printf "line %d: syntax error: expected STEXI, found '%s'\n" "$line" "$str" >&2 37 exit 1 38 fi 39 flag=0 40 ;; 41 SQMP*|EQMP*) 42 if test $flag -eq 1 ; then 43 printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2 44 exit 1 45 fi 46 ;; 47 DEFHEADING*) 48 printf '%s\n' "$(expr "$str" : "DEFHEADING(\(.*\))")" 49 ;; 50 ARCHHEADING*) 51 printf '%s\n' "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")" 52 ;; 53 *) 54 test $flag -eq 1 && printf '%s\n' "$str" 55 ;; 56 esac 57 line=$((line+1)) 58 done 59} 60 61hxtoqmp() 62{ 63 IFS= 64 flag=0 65 line=1 66 while read -r str; do 67 case "$str" in 68 HXCOMM*) 69 ;; 70 SQMP*) 71 if test $flag -eq 1 ; then 72 printf "line %d: syntax error: expected EQMP, found '%s'\n" "$line" "$str" >&2 73 exit 1 74 fi 75 flag=1 76 ;; 77 EQMP*) 78 if test $flag -ne 1 ; then 79 printf "line %d: syntax error: expected SQMP, found '%s'\n" "$line" "$str" >&2 80 exit 1 81 fi 82 flag=0 83 ;; 84 STEXI*|ETEXI*) 85 if test $flag -eq 1 ; then 86 printf "line %d: syntax error: expected EQMP, found '%s'\n" "$line" "$str" >&2 87 exit 1 88 fi 89 ;; 90 *) 91 test $flag -eq 1 && printf '%s\n' "$str" 92 ;; 93 esac 94 line=$((line+1)) 95 done 96} 97 98case "$1" in 99"-h") hxtoh ;; 100"-t") hxtotexi ;; 101"-q") hxtoqmp ;; 102*) exit 1 ;; 103esac 104 105exit 0 106