| #!/bin/sh |
| |
| hxtoh() |
| { |
| flag=1 |
| while read -r str; do |
| case $str in |
| HXCOMM*) |
| ;; |
| STEXI*|ETEXI*|SQMP*|EQMP*) flag=$(($flag^1)) |
| ;; |
| *) |
| test $flag -eq 1 && printf "%s\n" "$str" |
| ;; |
| esac |
| done |
| } |
| |
| hxtotexi() |
| { |
| flag=0 |
| line=1 |
| while read -r str; do |
| case "$str" in |
| HXCOMM*) |
| ;; |
| STEXI*) |
| if test $flag -eq 1 ; then |
| printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2 |
| exit 1 |
| fi |
| flag=1 |
| ;; |
| ETEXI*) |
| if test $flag -ne 1 ; then |
| printf "line %d: syntax error: expected STEXI, found '%s'\n" "$line" "$str" >&2 |
| exit 1 |
| fi |
| flag=0 |
| ;; |
| SQMP*|EQMP*) |
| if test $flag -eq 1 ; then |
| printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2 |
| exit 1 |
| fi |
| ;; |
| DEFHEADING*) |
| printf '%s\n' "$(expr "$str" : "DEFHEADING(\(.*\))")" |
| ;; |
| ARCHHEADING*) |
| printf '%s\n' "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")" |
| ;; |
| *) |
| test $flag -eq 1 && printf '%s\n' "$str" |
| ;; |
| esac |
| line=$((line+1)) |
| done |
| } |
| |
| hxtoqmp() |
| { |
| IFS= |
| flag=0 |
| line=1 |
| while read -r str; do |
| case "$str" in |
| HXCOMM*) |
| ;; |
| SQMP*) |
| if test $flag -eq 1 ; then |
| printf "line %d: syntax error: expected EQMP, found '%s'\n" "$line" "$str" >&2 |
| exit 1 |
| fi |
| flag=1 |
| ;; |
| EQMP*) |
| if test $flag -ne 1 ; then |
| printf "line %d: syntax error: expected SQMP, found '%s'\n" "$line" "$str" >&2 |
| exit 1 |
| fi |
| flag=0 |
| ;; |
| STEXI*|ETEXI*) |
| if test $flag -eq 1 ; then |
| printf "line %d: syntax error: expected EQMP, found '%s'\n" "$line" "$str" >&2 |
| exit 1 |
| fi |
| ;; |
| *) |
| test $flag -eq 1 && printf '%s\n' "$str" |
| ;; |
| esac |
| line=$((line+1)) |
| done |
| } |
| |
| case "$1" in |
| "-h") hxtoh ;; |
| "-t") hxtotexi ;; |
| "-q") hxtoqmp ;; |
| *) exit 1 ;; |
| esac |
| |
| exit 0 |