	.TITLE	COMMAND Read and interpret command lines

	.ENABLE	SUPPRESSION

	.LIBRARY	'VFELIB'

	$TPADEF

	.PSECT	CODE,EXE,NOWRT
	.PAGE
	.SBTTL	GETCMD - Get command
GETCMD::
100$:
	CLRB	HLPON
	MOVL	#25,OUTDSC
	TSTB	TAPFLG
	BEQL	110$
	BRW	200$
110$:
	MOVAL	SOLDSK1,R5
	TSTB	RMSFLG
	BNEQ	130$
	CMPL	BUFFCT,#1
	BNEQ	150$
	$FAO_S	CTRSTR=SOLDSK0,OUTLEN=OUTDSC,OUTBUF=OUTDSC,-
		P1=CURBLK
	BRW	300$
130$:
	TSTB	NRFLAG
	BEQL	140$
	$FAO_S	CTRSTR=SOLNEW,OUTLEN=OUTDSC,OUTBUF=OUTDSC,-
		P1=CURBCT
	BRW	300$
140$:
	TSTB	KEYFLG
	BEQL	150$
	MOVAL	SOLDSK2,R5
150$:
	$FAO_S	CTRSTR=(R5),OUTLEN=OUTDSC,OUTBUF=OUTDSC,-
		P1=CURBLK,P2=CURBCT
	BRB	300$
200$:
	TSTL	CURBCT
	BGTR	250$
	$FAO_S	CTRSTR=SOLTP0,OUTLEN=OUTDSC,OUTBUF=OUTDSC,-
		P1=CURFIL,P2=CURBLK
	BRB	300$
250$:
	$FAO_S	CTRSTR=SOLTP1,OUTLEN=OUTDSC,OUTBUF=OUTDSC,-
		P1=CURFIL,P2=CURBLK,P3=CURBCT
300$:
	INPUT	OUTDSC,OUT_BUFF,#80,FUNC
	CMPB	TSTATUS+2,#0
	BGTR	450$
	MOVL	#1,PARA1
	MOVAL	NEXT,JMPADR
	BRW	800$
450$:
	MOVZWL	TSTATUS+2,R3
	MOVAL	FUNC,R4
500$:
	CMPB	(R4),#^A/ /
	BNEQ	550$
	INCL	R4
	SOBGTR	R3,500$
	BRB	650$
550$:
	CMPB	(R4),#^A/a/
	BLSSU	600$
	CMPB	(R4),#^A/z/
	BGTRU	650$
	SUBB2	#^X20,(R4)
600$:
	CMPB	(R4),#^A/A/
	BLSS	650$
	CMPB	(R4),#^A/Z/
	BGTR	650$
	INCL	R4
	SOBGTR	R3,550$
650$:
	CLRL	JMPADR
	CLRL	MFLAG
	CLRL	SETMASK
	CLRL	SHOMASK
	CLRB	DPBFLG
	CLRB	RFLAG
	CLRB	LGFLAG
	CLRB	SBFLAG
	CLRB	POSFLG
	MOVL	#TPA$K_COUNT0,TPBLK+TPA$L_COUNT
	MOVL	#TPA$M_ABBRFM,TPBLK+TPA$L_OPTIONS
	MOVZWL	TSTATUS+2,TPBLK+TPA$L_STRINGCNT
	MOVAL	FUNC,TPBLK+TPA$L_STRINGPTR
	PUSHAL	VFE_KEY
	PUSHAL	VFE_STATE
	PUSHAL	TPBLK
	CALLS	#3,G^LIB$TPARSE
	BLBS	R0,700$
	BSBW	ERROUT
	BRW	100$
700$:
	CMPL	#0,JMPADR
	BNEQ	800$
	BRW	100$
800$:
	RSB
	.PAGE
	.SBTTL	FPARSE - Parse file spec w/qualifiers
FPARSE::
	MOVL	#TPA$K_COUNT0,TPBLK+TPA$L_COUNT
	MOVL	#TPA$M_ABBRFM,TPBLK+TPA$L_OPTIONS
	MOVZWL	DESC,TPBLK+TPA$L_STRINGCNT
	MOVL	DESC+4,TPBLK+TPA$L_STRINGPTR
	CLRW	FDESC
	CLRL	SETMASK
	PUSHAL	VFE_KEY
	PUSHAL	FP1
	PUSHAL	TPBLK
	CALLS	#3,G^LIB$TPARSE
	BLBS	R0,200$
	BSBW	ERROUT
	BRB	600$
200$:
	TSTB	OVRFLG
	BEQL	800$
	TSTB	WRTFLG
	BEQL	800$
	OUTMSG	#NWOL,NWOMSG
	CLRW	OVRWRT
600$:
	CLRL	R0
800$:
	RSB
	.PAGE
	.SBTTL	Parser state table

COMMA=^A/,/
DQUOTE=^A/"/
SQUOTE=^A/'/
QUEST=^A/?/

	$INIT_STATE  VFE_STATE,VFE_KEY

	$STATE	BEGIN
	$TRAN	TPA$_DECIMAL,DEFGET,,,PARA1
	$TRAN	SQUOTE,DEFGET2,SPACON,,QCHAR
	$TRAN	DQUOTE,DEFGET2,SPACON,,QCHAR
	$TRAN	'ALPHA',PARAM2P,ALPHINIT
	$TRAN	'ASCII',PARAM2P,AINIT,ASCII,JMPADR
	$TRAN	'ADD',ADDPAR,ADDINI,ADD,JMPADR
	$TRAN	'BINARY',PARAM2P,AINIT,BINARY,JMPADR
	$TRAN	'CHANGE',CPARA,,CHANGE,JMPADR
	$TRAN	'CUT',PARAM2,CINIT,CUT,JMPADR
	$TRAN	'CREATE',CRPARA,CRINIT,CREATE,JMPADR
	$TRAN	'DIFFERENCES',PARAM2,DPINIT,DIFF,JMPADR
	$TRAN	'DATE',PARAM2P,DTINIT,DATE,JMPADR
	$TRAN	'DELETE',TSTEOS,,DELETE,JMPADR
	$TRAN	'EXIT',TSTEOS,,EXIT,JMPADR
	$TRAN	'EBCDIC',PARAM2P,AINIT,EBCDIC,JMPADR
	$TRAN	'EOF',TSTEOS,,EOF,JMPADR
	$TRAN	'FILE',FPARM
	$TRAN	'GET',GPARA
	$TRAN	'HEX',PARAM2P,AINIT,HEX,JMPADR
	$TRAN	'HELP',HLPPAR,,HELP,JMPADR
	$TRAN	'IBYTE',PARAM2P,AINIT,IBYTE,JMPADR
	$TRAN	'IWORD',PARAM2P,IWINIT,IWLDSP,JMPADR
	$TRAN	'ILONG',PARAM2P,ILINIT,IWLDSP,JMPADR
	$TRAN	'LOCATE',LPARA,,LOCATE,JMPADR
	$TRAN	'LGLOBAL',LPARA,LGINIT,LOCATE,JMPADR
	$TRAN	'LAST',TSTEOS,,LAST,JMPADR
	$TRAN	'LOCK',TSTEOS,,LOCK,JMPADR
	$TRAN	'MULTI',PARAM2P,AINIT,MULTI,JMPADR
	$TRAN	'MOVE',NPARA,NINIT,MOVE,JMPADR
	$TRAN	'NEXT',NPARA,NINIT,NEXT,JMPADR
	$TRAN	'PASTE',PARAM2,DPINIT,PASTE,JMPADR
	$TRAN	'PUT',TSTEOS,,PUTRMS,JMPADR
	$TRAN	'RECORD',PARAM2,RINIT,RECORD,JMPADR
	$TRAN	'REWIND',TSTEOS,,REWIND,JMPADR
	$TRAN	'SUBSTITUTE',SBPARA,,SUBSTITUTE,JMPADR
	$TRAN	'SET',SETPAR,UCASE
	$TRAN	'SHOW',SHOPAR,UCASE,SHOCMD,JMPADR
	$TRAN	'TOP',TSTEOS,,TOP,JMPADR
	$TRAN	'UPDATE',TSTEOS,,UPDRMS,JMPADR
	$TRAN	'WRITE',TSTEOS,,WRITEDISK,JMPADR
	$TRAN	'+',NPARA2,NINIT,NEXT,JMPADR
	$TRAN	'-',NPARA2,NINITM,NEXT,JMPADR
	$TRAN	TPA$_EOS,TPA$_EXIT,NINIT,NEXT,JMPADR
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,BDCOMM

	$STATE	DEFGET
	$TRAN	TPA$_EOS,TPA$_EXIT,,READ,JMPADR

	$STATE	DEFGET2
	$TRAN	TPA$_LAMBDA,QP2,UCASE,KEYREAD,JMPADR

	$STATE	PARAM2P
	$TRAN	'/',,UCASE
	$TRAN	TPA$_LAMBDA,PARAM2
	$STATE
	$TRAN	'PASTE',,PASTON
	$STATE	PARAM2
	$TRAN	TPA$_DECIMAL,,HEXTST,,PARA1
	$TRAN	TPA$_HEX,,,,PARA1
	$TRAN	COMMA,P2S2
	$TRAN	':',P2S3,RECCHK
	$TRAN	TPA$_EOS,TPA$_EXIT
	$STATE
	$TRAN	COMMA,P2S2
	$TRAN	':',P2S3,RECCHK
	$TRAN	TPA$_EOS,TPA$_EXIT,SINGLE
	$STATE	P2S2
	$TRAN	TPA$_DECIMAL,TSTEOS,,,PARA2
	$STATE	P2S3
	$TRAN	TPA$_DECIMAL,,HEXTST,,PARA2
	$TRAN	TPA$_HEX,,,,PARA2
	$STATE
	$TRAN	TPA$_EOS,TPA$_EXIT,OFFSET

	$STATE	GPARA
	$TRAN	'/',GP2
	$TRAN	TPA$_LAMBDA,,GINIT,READ,JMPADR
	$STATE
	$TRAN	TPA$_DECIMAL,TSTEOS,,,PARA1
	$TRAN	TPA$_EOS,TPA$_EXIT
	$STATE	GP2
	$TRAN	'KEY',,,KEYREAD,JMPADR
	$TRAN	'key',,,KEYREAD,JMPADR
	$TRAN	'RFA',GP3,,RFAREAD,JMPADR
	$TRAN	'rfa',GP3,,RFAREAD,JMPADR
	$STATE
	$TRAN	'=',QPARSE
	$TRAN	TPA$_LAMBDA,QPARSE
	$STATE	GP3
	$TRAN	'='
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	TPA$_DECIMAL,,,,PARA1
	$STATE
	$TRAN	':'
	$TRAN	COMMA
	$STATE
	$TRAN	TPA$_DECIMAL,TSTEOS,,,PARA2

	$STATE	NPARA
	$TRAN	'-',,NINITM
	$TRAN	'+'
	$TRAN	TPA$_LAMBDA
	$STATE	NPARA2
	$TRAN	TPA$_DECIMAL,,,,PARA1
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	TPA$_EOS,TPA$_EXIT,NEGATE

	$STATE	ADDPAR
	$TRAN	'-',,,1,MFLAG
	$TRAN	'+'
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	'H',HEXX
	$TRAN	'h',HEXX
	$TRAN	'0',OCT
	$TRAN	TPA$_DECIMAL,ADDP2,ACCUML
	$STATE	HEXX
	$TRAN	TPA$_HEX,ADDP2,ACCUML
	$STATE	OCT
	$TRAN	TPA$_OCTAL,ADDP2,ACCUML
	$STATE	ADDP2
	$TRAN	COMMA,ADDPAR
	$TRAN	TPA$_EOS,TPA$_EXIT
	
	$STATE	CRPARA
	$TRAN	'/',,UCASE
	$TRAN	TPA$_LAMBDA,CR2
	$STATE
	$TRAN	'PASTE',,CRPASTE
	$TRAN	'NULL',,,2,CRTYPE
	$STATE	CR2
	$TRAN	TPA$_DECIMAL,TSTEOS,HEXTST,,PARA1
	$TRAN	TPA$_HEX,TSTEOS,,,PARA1
	$TRAN	TPA$_EOS,TPA$_EXIT

	$STATE	CPARA
	$TRAN	TPA$_DECIMAL,,HEXTST,,PARA1
	$TRAN	TPA$_HEX,,,,PARA1
	$TRAN	'*',,CHGLOC
	$TRAN	TPA$_EOS,,CHGLOC
	$STATE
	$TRAN	TPA$_EOS,TPA$_EXIT,CNULL
	$TRAN	COMMA,QPARSE

	$STATE	SBPARA
	$TRAN	TPA$_EOS,TPA$_EXIT,SBNULL
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,GENDESC

	$STATE	LPARA
	$TRAN	TPA$_EOS,TPA$_EXIT,LNULL
	$TRAN	TPA$_LAMBDA,QPARSE

	$STATE	QPARSE
	$TRAN	TPA$_HEX,TSTEOS,CNUM
	$TRAN	'+',DECCL
	$TRAN	'-',DECCL,,1,MFLAG
	$TRAN	SQUOTE,,SPACON,,QCHAR
	$TRAN	DQUOTE,,SPACON,,QCHAR
	$STATE	QP2
	$TRAN	!QSTRING,,,,QDESC
	$STATE
	$TRAN	TPA$_EOS,TPA$_EXIT,CHKSTR
	$TRAN	TPA$_ANY,TSTEOS,CHKSTR

	$STATE	QSTRING
	$TRAN	TPA$_ANY,QSTRING,TESTQ
	$TRAN	TPA$_LAMBDA,TPA$_EXIT

	$STATE	DECCL
	$TRAN	TPA$_DECIMAL,TSTEOS,CDEC

	$STATE	FPARM
	$TRAN	QUEST,TSTEOS,,SHOFILE,JMPADR
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,GENDESC,GETFILE,JMPADR

	$STATE	HLPPAR
	$TRAN	TPA$_BLANK
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,GENDESC

	$STATE	SETPAR
	$TRAN	!SETSUB,SP1
	$TRAN	'LENGTH',SP2
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,BDCOMM

	$STATE	SP1
	$TRAN	TPA$_EOS,TPA$_EXIT,,SETCMD,JMPADR

	$STATE	SP2
	$TRAN	'=',,,SETLEN,JMPADR
	$STATE
	$TRAN	TPA$_DECIMAL,TSTEOS,,,PARA1

	$STATE	SHOPAR
	$TRAN	'MODES',TSTEOS,,<^X1>,SHOMASK
	$TRAN	'CHANGE',TSTEOS,,<^X2>,SHOMASK
	$TRAN	'LOCATE',TSTEOS,,<^X4>,SHOMASK
	$TRAN	'PASTE',TSTEOS,,<^X8>,SHOMASK
	$TRAN	'FILE',TSTEOS,,<^X10>,SHOMASK
	$TRAN	'DEVICE',TSTEOS,,<^X10>,SHOMASK
	$TRAN	'ALL',TSTEOS,,<^X1F>,SHOMASK
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,BDCOMM

	$STATE	FP1
	$TRAN	TPA$_LAMBDA,,UCASE

	$STATE	FP2
	$TRAN	'/',FP3
	$TRAN	TPA$_EOS,TPA$_EXIT
	$TRAN	TPA$_LAMBDA,FP4

	$STATE	FP3
	$TRAN	'OVERRIDE',FP2,SETOVR
	$TRAN	'WRITE',FP2,SETWRT
	$TRAN	'BLOCK',FP2,CLRREC
	$TRAN	'RECORD',FP2,SETREC
	$TRAN	'NOREWIND',FP3A,CHAR3
	$TRAN	'REWIND',FP2
	$TRAN	'POSITION',FP3B
	$TRAN	'KEY',FP3C
	$TRAN	TPA$_LAMBDA,,TSTINIT
	$STATE
	$TRAN	!SETSUB,FP2
	$STATE	FP3A
	$TRAN	TPA$_LAMBDA,FP2,CLRREW
	$STATE	FP3B
	$TRAN	!POSSUB,FP2
	$STATE	FP3C
	$TRAN	!KEYSUB,FP2

	$STATE	FP4
	$TRAN	TPA$_LAMBDA,,TESTF
	$STATE
	$TRAN	!FSTRING,FP2,,,FDESC

	$STATE	SETSUB
	$TRAN	'LOG',LOGPAR,,<^X1>,SETMASK
	$TRAN	'NOLOG',TPA$_EXIT,CHAR3,<^X1000>,SETMASK
	$TRAN	'DISPLAY',TPA$_EXIT,,<^X2>,SETMASK
	$TRAN	'NODISPLAY',TPA$_EXIT,CHAR3,<^X2000>,SETMASK
	$TRAN	'SIGN',TPA$_EXIT,,<^X4>,SETMASK
	$TRAN	'NOSIGN',TPA$_EXIT,CHAR3,<^X4000>,SETMASK
	$TRAN	'HEADER',TPA$_EXIT,,<^X8>,SETMASK
	$TRAN	'NOHEADER',TPA$_EXIT,CHAR3,<^X8000>,SETMASK
	$TRAN	'CASE',TPA$_EXIT,,<^X10>,SETMASK
	$TRAN	'NOCASE',TPA$_EXIT,CHAR3,<^X10000>,SETMASK
	$TRAN	'RADIX',RADPAR
	$TRAN	'BUFF',BUFPAR
	$TRAN	'SKIP',SKIPPAR
	$TRAN	'WIDTH',WIDPAR
	$TRAN	'CHARSET',CHARPAR
	$TRAN	'POSITION',POSPAR
	$TRAN	'KEY',KEYPAR

	$STATE	LOGPAR
	$TRAN	'='
	$TRAN	TPA$_LAMBDA,TPA$_EXIT,LOGDEF
	$STATE
	$TRAN	!FSTRING,TPA$_EXIT,,,DESC

	$STATE	RADPAR
	$TRAN	'='
	$STATE
	$TRAN	'HEX',TPA$_EXIT,,<^X20>,SETMASK
	$TRAN	'DECIMAL',TPA$_EXIT,,<^X20000>,SETMASK

	$STATE	BUFPAR
	$TRAN	'=',,,<^X100000>,SETMASK
	$STATE
	$TRAN	TPA$_DECIMAL,TPA$_EXIT,,,NBUFCT

	$STATE	SKIPPAR
	$TRAN	'='
	$STATE
	$TRAN	'FAST',TPA$_EXIT,,<^X100>,SETMASK
	$TRAN	'SLOW',TPA$_EXIT,,<^X200>,SETMASK
	$TRAN	'NORMAL',TPA$_EXIT,,<^X400>,SETMASK

	$STATE	WIDPAR
	$TRAN	'=',,,<^X800>,SETMASK
	$STATE
	$TRAN	TPA$_DECIMAL,TPA$_EXIT,,,NEWWID

	$STATE	CHARPAR
	$TRAN	'='
	$STATE
	$TRAN	'EBCDIC',TPA$_EXIT,,<^X40>,SETMASK
	$TRAN	'ASCII',TPA$_EXIT,,<^X40000>,SETMASK

	$STATE	POSPAR
	$TRAN	!POSSUB,TPA$_EXIT

	$STATE	POSSUB
	$TRAN	'=',,POSINIT
	$STATE
	$TRAN	'('
	$TRAN	TPA$_DECIMAL,TPA$_EXIT,,,POSBLK
	$STATE
	$TRAN	TPA$_DECIMAL,,,,POSFIL
	$STATE
	$TRAN	':'
	$STATE
	$TRAN	TPA$_DECIMAL,,,,POSBLK
	$STATE
	$TRAN	')',TPA$_EXIT

	$STATE	KEYPAR
	$TRAN	!KEYSUB,TPA$_EXIT

	$STATE	KEYSUB
	$TRAN	'=',,,<^X80>,SETMASK
	$STATE
	$TRAN	TPA$_DECIMAL,TPA$_EXIT,,,NEWKRF

	$STATE	FSTRING
	$TRAN	TPA$_ANY,,FSSL

	$STATE	FS1
	$TRAN	TPA$_ANY,FS1,FSSL
	$TRAN	TPA$_LAMBDA,TPA$_EXIT

	$STATE	TSTEOS
	$TRAN	TPA$_EOS,TPA$_EXIT

	$END_STATE
	.PAGE
	.SBTTL	Action routines

ALPHINIT:
	.WORD	0
	MOVAL	ASCII,JMPADR
	TSTB	EBCFLG
	BEQL	100$
	MOVAL	EBCDIC,JMPADR
100$:
	MOVL	#1,DSPCNT
	CLRL	PARA1
	MNEGL	#1,PARA2
	RET

AINIT:
	.WORD	0
	MOVL	#1,DSPCNT
	CLRL	PARA1
	MNEGL	#1,PARA2
	RET

CINIT:
	.WORD	0
	MOVL	#1,DSPCNT
	CLRL	PARA1
	MOVL	CURBCT,PARA2
	INCL	MFLAG
	RET

CRINIT:
	.WORD	0
	MOVL	CURBCT,PARA1
	CLRL	CRTYPE
	RET

CRPASTE:
	.WORD	0
	MOVL	#1,CRTYPE
	MOVL	PBBCT,PARA1
	RET

DPINIT:
	.WORD	0
	MOVL	#1,DSPCNT
	MOVL	PBOFF,PARA1
	SUBL3	PBOFF,CURBCT,PARA2
	CMPL	PARA2,PBBCT
	BLEQ	100$
	MOVL	PBBCT,PARA2
100$:
	DECL	MFLAG
	RET

DTINIT:
	.WORD	0
	MOVL	#8,DSPCNT
	MNEGL	#1,PARA1
	RET

IWINIT:
	.WORD	0
	MOVL	#2,DSPCNT
	CLRL	PARA1
	MNEGL	#1,PARA2
	MOVL	#8,WLPARM
	MOVL	#6,WLPOSN
	RET

ILINIT:
	.WORD	0
	MOVL	#4,DSPCNT
	CLRL	PARA1
	MNEGL	#1,PARA2
	MOVL	#4,WLPARM
	MOVL	#11,WLPOSN
	RET

LGINIT:
	.WORD	0
	MOVB	#1,LGFLAG
	RET

RINIT:
	.WORD	0
	MNEGL	#1,PARA1
	MNEGL	#1,PARA2
	MOVB	#1,RFLAG
	RET

PASTON:
	.WORD	0
	INCB	DPBFLG
	DIVL3	DSPCNT,PBBCT,PARA2
	RET

HEXTST:
	.WORD	0
	TSTB	HEXFLG
	BEQL	100$
	CLRL	R0
100$:
	RET

RECCHK:
	.WORD	0
	TSTB	RFLAG
	BEQL	100$
	CLRL	R0
100$:
	RET

SINGLE:
	.WORD	0
	TSTL	MFLAG
	BNEQ	100$
	MOVL	#1,PARA2
	BRB	200$
100$:
	SUBL3	PARA1,CURBCT,PARA2
	TSTL	MFLAG
	BGTR	200$
	CMPL	PARA2,PBBCT
	BLEQ	200$
	MOVL	PBBCT,PARA2
200$:
	RET

OFFSET:
	.WORD	0
	SUBL2	PARA1,PARA2
	ADDL2	DSPCNT,PARA2
	BGTR	100$
	CLRL	PARA2
100$:
	DIVL2	DSPCNT,PARA2
	RET

ADDINI:
	.WORD	0
	CLRL	ACCUM
	CLRL	MFLAG
	RET

ACCUML:
	.WORD	0
	CMPL	MFLAG,#0
	BEQL	100$
	SUBL2	TPA$L_NUMBER(AP),ACCUM
	BRB	200$
100$:
	ADDL2	TPA$L_NUMBER(AP),ACCUM
200$:
	CLRL	MFLAG
	RET

GINIT:
	.WORD	0
	MOVL	CURBLK,PARA1
	RET

NINIT:
	.WORD	0
	CLRL	MFLAG
	MOVL	#1,PARA1
	RET

NINITM:
	.WORD	0
	MOVL	#1,MFLAG
	MOVL	#1,PARA1
	RET

NEGATE:
	.WORD	0
	TSTL	MFLAG
	BEQL	100$
	MNEGL	PARA1,PARA1
100$:
	RET

CHGLOC:
	.WORD	0
	MOVL	LPTR,PARA1
	DECL	PARA1
	RET

CNULL:
	.WORD	0
	TSTW	CSTRL
	BGTR	100$
	CLRL	R0
	BRB	200$
100$:
	MOVW	CSTRL,QDESC
	MOVAL	CSTR,QDESC+4
	MOVB	CSTRT,QTYPE
200$:
	RET

SBNULL:
	.WORD	0
	TSTL	SBSTRL
	BGTR	100$
	CLRL	R0
	BRB	200$
100$:
	MOVW	SBSTRL,DESC
	MOVAL	SUBSTR,DESC+4
200$:
	RET

LNULL:
	.WORD	0
	CMPW	LSTRL,#0
	BGTR	100$
	CLRL	R0
	BRB	200$
100$:
	MOVW	LSTRL,QDESC
	MOVAL	LSTR,QDESC+4
	MOVB	LSTRT,QTYPE
200$:
	RET

CNUM:
	.WORD	^M<R2,R3,R4,R5,R6,R7,R8>
	MOVAL	QSTR,R6
	MOVL	R6,QDESC+4
	ADDL3	#1,TPA$L_TOKENCNT(AP),R7
	DIVL2	#2,R7
	MOVW	R7,QDESC
	CMPL	R7,#4
	BLEQ	100$
	SUBL3	#4,R7,R8
	MOVC5	#0,BUFF,#0,R8,(R6)
	ADDL2	R8,R6
	MOVL	#4,R7
100$:
	MOVAL	TPA$L_NUMBER(AP),R8
	ADDL2	R7,R8
200$:
	MOVB	-(R8),(R6)+
	SOBGTR	R7,200$
	MOVB	#3,QTYPE
	MOVL	#1,R0
	RET

CDEC:
	.WORD	0
	MOVL	TPA$L_NUMBER(AP),R1
	CMPL	TPA$L_TOKENCNT(AP),#5
	BGTR	600$
	CMPL	TPA$L_TOKENCNT(AP),#3
	BGTR	400$
	CMPL	R1,#255
	BGTR	400$
	TSTL	MFLAG
	BEQL	300$
	CMPL	R1,#128
	BGTR	400$
	MNEGL	R1,R1
300$:
	MOVB	R1,QSTR
	MOVW	#1,QDESC
	BRB	850$
400$:
	CMPL	R1,#65535
	BGTR	600$
	TSTL	MFLAG
	BEQL	500$
	CMPL	R1,#32768
	BGTR	600$
	MNEGL	R1,R1
500$:
	MOVW	R1,QSTR
	MOVW	#2,QDESC
	BRB	850$
600$:
	TSTL	MFLAG
	BEQL	800$
	TSTL	R1
	BGEQ	700$
	CLRL	R0
	BRB	900$
700$:
	MNEGL	R1,R1
800$:
	MOVL	R1,QSTR
	MOVW	#4,QDESC
850$:
	MOVAL	QSTR,QDESC+4
	MOVB	#1,QTYPE
	TSTL	MFLAG
	BEQL	900$
	MOVB	#2,QTYPE
900$:
	RET

SPACON:
	.WORD	0
	MOVL	#TPA$M_ABBRFM!TPA$M_BLANKS,TPA$L_OPTIONS(AP)
	RET

CHKSTR:
	.WORD	0
	CLRB	QTYPE
	MOVL	#TPA$M_ABBRFM,TPA$L_OPTIONS(AP)
	CMPW	QDESC,#0
	BGTR	100$
	CLRL	R0
100$:
	RET

TESTQ:
	.WORD	0
	CMPB	TPA$B_CHAR(AP),QCHAR
	BNEQ	100$
	CLRL	R0
100$:
	RET

UCASE:
	.WORD	^M<R2,R3>
	MOVL	TPA$L_STRINGCNT(AP),R2
	BLEQ	900$
	MOVL	TPA$L_STRINGPTR(AP),R3
100$:
	CMPB	(R3),#^A/a/
	BLSS	200$
	CMPB	(R3),#^A/z/
	BGTR	200$
	SUBB2	#^X20,(R3)
200$:
	INCL	R3
	SOBGTR	R2,100$
900$:
	RET

CHAR3:
	.WORD	0
	CMPL	TPA$L_TOKENCNT(AP),#3
	BGEQ	100$
	CLRL	R0
100$:
	RET

GENDESC:
	.WORD	0
	MOVW	TPA$L_STRINGCNT(AP),DESC
	MOVL	TPA$L_STRINGPTR(AP),DESC+4
	RET

LOGDEF:
	.WORD	0
	MOVQ	DEFLOG,DESC
	RET

BDCOMM:
	.WORD	0
	OUTMSG	#BDCL,BDC
	CLRL	JMPADR
	RET

SETOVR:
	.WORD	0
	MOVB	#1,OVRFLG
	RET

SETWRT:
	.WORD	0
	MOVB	#1,WRTFLG
	RET

CLRREC:
	.WORD	0
	CLRB	RECMOD
	RET

SETREC:
	.WORD	0
	MOVB	#1,RECMOD
	RET

CLRREW:
	.WORD	0
	MOVB	#1,NOREW
	RET

TSTINIT:
	.WORD	0
	TSTB	INITFLG
	BNEQ	100$
	CLRL	R0
100$:
	RET

TESTF:
	.WORD	0
	TSTW	FDESC
	BEQL	100$
	CLRL	R0
100$:
	RET

POSINIT:
	.WORD	0
	MOVB	#1,POSFLG
	MOVL	CURFIL,POSFIL
	RET

FSSL:
	.WORD	0
	CMPB	TPA$B_CHAR(AP),#^A./.
	BNEQ	100$
	CLRL	R0
100$:
	RET
	.PAGE
	.SBTTL	Data definitions

	.PSECT	DATA,WRT,NOEXE

SOLDSK0: .ASCID	/!UL> /
SOLDSK1: .ASCID	/!UL(!UL)> /
SOLDSK2: .ASCID	/!UL* (!UL)> /
SOLNEW:	.ASCID	/*NR* (!UL)> /
SOLTP0:	.ASCID	/!SL:!SL> /
SOLTP1:	.ASCID	/!SL:!SL(!UL)> /
FUNC:	.BLKB	80

DEFLOG: .ASCID	/VFE.LOG/

BDC:	.ASCII	/Invalid command./
BDCL=.-BDC

NWOMSG:	.ASCII	"/OVERRIDE and /WRITE may not be used together."
NWOL=.-NWOMSG

TPBLK:	.BLKB	TPA$K_LENGTH0

INITFLG:: .BYTE	1
JMPADR:: .LONG	0
SETMASK:: .LONG	0
SHOMASK:: .LONG	0
PARA1::	.LONG	0
	.LONG	0
PARA2::	.LONG	0

MFLAG:	.LONG	0
CRTYPE:: .LONG	0
DPBFLG:: .BYTE	0
RFLAG:	.BYTE	0

QCHAR:	.BYTE	0
QDESC::	.QUAD	0
QTYPE::	.BYTE	0
QSTR:	.BLKB	100

	.END
