#!/bin/sh
#
# generate printable module code (for Microsoft Visual Basic 5.0 (SP3))
#
# Copyright (C) 2001 SystemInfinity Corp.

trap "exit 1" 1 2 3 15

# echo usage
#

USAGE="Usage: `basename $0` [-m markchar][--] file"

Usage() {
	echo "$USAGE" 1>&2
	exit 1
}

# analyze options
#

MARKER='x'

while [ $# -gt 0 ]; do
	case $1 in
		-m)
			MARKER=`echo $2 | sed -e 's/\(.\).*/\1/'`
			shift; shift;;
		-m*)
			MARKER=`echo $1 | sed -e 's/-m\(.\).*/\1/'`
			shift;;
		--)
			shift; break;;
		-*)
			Usage;;
		*)
			break;;
	esac
done

if [ $# -ne 1 ]; then
	Usage
fi

ret=`expr "$MARKER" : '[0-9a-zA-Z]'`
if [ $ret = 0 ]; then
	Usage
fi

# generate Print_xxx()
#

echo 'Public Sub Print_xxx()'
echo
echo '    Dim sData As String: sData = ""'
echo '    Dim sVal As String * 200: sVal = ""'
echo

O_IFS="$IFS"
IFS='	
'

exec < "$1"
while read LINE; do

	LINE=`echo "$LINE" |
		  sed -e "s/\([^$MARKER]\+\)/\"\1\" \& /g" \
	 		  -e 's/^/sData = sData \& /' \
			  -e 's/$/vbCrLf/'`

	for elm in `echo "$LINE" | sed -e "s/\([^$MARKER]\+\)/	/g"`; do

		elm_size=`expr $elm : '.*'`
		LINE=`echo "$LINE" |
			  sed -e "s/\($MARKER\+\)/ALB(sVal, $elm_size) \& /"`

	done

	echo "$LINE"

done

IFS="$O_IFS"

echo
echo '    With Printer'
echo '        .FontName = "‚l‚r ƒSƒVƒbƒN": .FontSize = 9'
echo '    End With'
echo '    Printer.Print sData'
echo '    Printer.EndDoc'
echo
echo 'End Sub'

# generate ALB()
#
echo
echo 'Public Function ALB(ByVal StrArg As String, ByVal arg1 As Long) As String'
echo
echo '    ALB = StrConv(LeftB(StrConv(StrArg, vbFromUnicode), arg1), vbUnicode)'
echo
echo 'End Function'

exit 0
