#!/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 echo "line $line: syntax error: expected ETEXI, found $str" >&2 exit 1 fi flag=1 ;; ETEXI*) if test $flag -ne 1 ; then echo "line $line: syntax error: expected STEXI, found $str" >&2 exit 1 fi flag=0 ;; SQMP*|EQMP*) if test $flag -eq 1 ; then echo "line $line: syntax error: expected ETEXI, found $str" >&2 exit 1 fi ;; DEFHEADING*) echo "$(expr "$str" : "DEFHEADING(\(.*\))")" ;; *) test $flag -eq 1 && echo "$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 echo "line $line: syntax error: expected EQMP, found $str" >&2 exit 1 fi flag=1 ;; EQMP*) if test $flag -ne 1 ; then echo "line $line: syntax error: expected SQMP, found $str" >&2 exit 1 fi flag=0 ;; STEXI*|ETEXI*) if test $flag -eq 1 ; then echo "line $line: syntax error: expected EQMP, found $str" >&2 exit 1 fi ;; *) test $flag -eq 1 && echo "$str" ;; esac line=$((line+1)) done } case "$1" in "-h") hxtoh ;; "-t") hxtotexi ;; "-q") hxtoqmp ;; *) exit 1 ;; esac exit 0