#!/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
}

print_texi_heading()
{
    if test "$*" != ""; then
        printf "@subsection %s\n" "$*"
    fi
}

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*)
            print_texi_heading "$(expr "$str" : "DEFHEADING(\(.*\))")"
            ;;
            ARCHHEADING*)
            print_texi_heading "$(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
