	.PREL
	.IDENT	EXEC
	.INSERT	MACRO.LIB
	.INSERT	BBEQU.ASM
; TABLE GIVING JUMP TO ADDRESS FOR COMMANDS
TOKJT:	.WORD	LIST#
	.WORD	CLRSCR#
	.WORD	RUN
	.WORD	NEXT#
	.WORD	LINEDR#
	.WORD	IFF#
	.WORD	GOTO#
	.WORD	GOSUB#
	.WORD	RETURN#
	.WORD	BOXDRW#
	.WORD	FOR#
	.WORD	INPUT#
	.WORD	PRINT#
	.WORD	QWHAT#	; STEP
	.WORD	QWHAT#	; RND
	.WORD	QWHAT#	; TO
	.WORD	INIDAT#	; DATA
	.WORD	CIRCLE#
	.WORD	POINT#
	.WORD	RSETDV#	; DEFAULT
	.WORD	SHOW#
	.WORD	SNAP#
	.WORD	VARZRO#	; ZERO
	.WORD	SCROLC#	; SCROLL
; DIRECT AND EXEC
EXC0LA:: RSTIGN	; GET FIRST	NONBLANK
	PUSH	D
	CPI	68H	; IS SHE A TOKEN?
	JRC	EXEC0A	; NO
	CPI	80H
	JRNC	EXEC0A	; NO
; WE FOUND A TOKEN - LOOKUP IN TABLE AND JUMP TO IT
	RLC	
	MOV	E,A
	MVI	D,0
	LXI	H,TOKJT-208
	DAD	D
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG	
	POP	D
	INX	D
	PCHL	
; NOT A TOKEN - A VARIABLE PERHAPS?
EXEC0A:	CALL	TSTV#
	JRC	EXEC0B	; NO - SEARCH	1
	TSTC    '=',EXEC0B	; MAYBE
	POP	B	; THROW OUT OLD PTR
	CALL	SETV1#	; ASSIGNMENT	1
;	RSTFIN
	JMP	FINISH
EXEC0B:	POP	D
	LXI	H,TAB2
EXEC::	RSTIGN
EX0:	PUSH	D
EX1:	LDAX	D
	CPI	'.'	; CHECK FOR ABBREVIATION
	JRZ	GOTDOT
	BIT	7,M
	JRNZ	ATEND
	CMP	M
	JRNZ	MISMAT
	INX	H
	INX	D
	JMPR	EX1
MISMAT:	INX	H
	BIT	7,M
	JRZ	MISMAT
SKPBAD:	INX	H
	INX	H
	INX	H
	MOV	A,M
	POP	D
	INR	A
	JRZ	EOL
	JMPR	EX0
ATEND:	INX	D
	ORI	80H
	CMP	M
	JRNZ	SKPBAD
ABRLNK:	POP	PSW	; MATCH STACK CLEANUP
EOL:	INX	H
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A
	PCHL
GOTDOT:	INX	D	; SKIP PAST DOT
..SKD1:	BIT	7,M
	JRNZ	ABRLNK	; TILL WE HIT JUMP ADDR
	INX	H
	JMPR	..SKD1
RUN:	LDED	HVTEXT#
RUNNXL:: LXI	H,0
	CALL	FNDLP#
	JC	RSTART#
RUNTSL:: SDED	CURRNT#
	CALL	WHATSU#	; CHECK FOR HALT
	JRNZ	..OK	; AND FOR TRACE KEY
	PUSH	D	; TRACE IS WANTED
	CALL	PRTLN#
	CALL	PRTSTG#
	POP	D
..OK:
	INX	D
	INX	D
RUNSML:: CALL	WHATSU#	; CHECK FOR INTERRUPT KEY
	JMP	EXEC0#
; END A LINE ROUTINE
FINISH:: CALL	FIN#
	JMP	QWHAT#
FINLA::	TSTCC	3BH,FI1
	POP	PSW
	JMPR	RUNSML
FI1:	TSTCC	CR,FI2
	POP	PSW
	JMPR	RUNNXL
FI2:	RET
TAB2:	ITEM	'.',REM#
	ITEM    'TV',PUTCD#
	ITEM    'MU',PUTMU#
	ITEM    '&',PUTIO#
	ITEM	'BYTE',BYTEVAR#
	ITEM	'LIST',LIST#
	ITEM	'CLEAR',CLRSCR#
	ITEM	'RUN',RUN
	ITEM	'NEXT',NEXT#
	ITEM	'LINE',LINEDR#
	ITEM	'IF',IFF#
	ITEM	'GOTO',GOTO#
	ITEM	'GOSUB',GOSUB#
	ITEM	'RETURN',RETURN#
	ITEM	'BOX',BOXDRW#
	ITEM	'FOR',FOR#
	ITEM	'INPUT',INPUT#
	ITEM	'PRINT',PRINT#
	ITEM    'CALL',DOCALL#
	ITEM	'CIRCLE',CIRCLE#
	ITEM	'POINT',POINT#
	ITEM	'SNAP',SNAP#
	ITEM	'SHOW',SHOW#
	ITEM	'SCROLL',SCROLC#
	ITEM	'DATA',INIDAT#
	ITEM    '$',BCDMAT#
	.BYTE	':'
	TOKEN   68H,TLIST#
	ITEM	':LIST',TLIST#
	.BYTE	':'
	TOKEN   74H,TOUTPU#
	ITEM	':PRINT',TOUTPU#
	.BYTE	':'
	TOKEN   73H,TINPUT#
	ITEM	':INPUT',TINPUT#
	.BYTE	':'
	TOKEN   70H,TRETUR#
	ITEM	':RETURN',TRETUR#
	.BYTE	':'
	TOKEN	6AH,TLOAD#
	ITEM	':RUN',TLOAD#
	.BYTE	'*'
	TOKEN   74H,TPRINT#
	ITEM	'*PRINT',TPRINT#
	ITEM    'STOP',STOP#
	ITEM	'ZERO',VARZRO#
	ITEM	'DEFAULT',RSETDV#
	ITEM	'NEW',ZAPALL#
	TOKEN	07FH,HKUCMD#
	.END
                       