	.TITLE	PARSING STATE TABLES FOR FIND
;
;  THIS IS THE PARSER FOR THE COMMAND LINE FOR FIND
;
; WRITTEN BY:  LOU PERAZZOLI   10-JUN-1978
;
;
	.MACRO BITS	NAME,NO
NAME'_V=NO
NAME=1@NO
	.ENDM
	$TPADEF
	COMMA=^A/,/
	SEMI=^A/;/
	.LIST	ME
	BITS	DEV_PRES,23
	BITS	WILD_UIC,4
	BITS	WILD_GROUP,6
	BITS	WILD_MEM,5
	BITS	WILD_NAME,7
	BITS	WILD_EXT,8
	BITS	WILD_VER,9
	BITS	VER_PRES,10
	BITS	MEM_EXISTS,13
	BITS	HIGH_PRES,31
	BITS	NOT_PRES,30
	BITS	BEFORE_PRES,24
	BITS	AFTER_PRES,25
	BITS	SPEC_PRES,16
	BITS	OUTPUT_PRES,21
	.NLIST	ME
	$INIT_STATE	TABLE_STATE,TABLE_KEY	;INITALIZE TPARSE
	$STATE	LOOK				;INITIAL STATE
	$TRAN	'/',SWITCH			;DO WE HAVE A SWITCH
	$TRAN	!INPUT_SPEC,TRYMORE,,SPEC_PRES,COMMAND		;IF NO SWITCH 
				;THEN IT MUST BE A DESCRIPTION OF INPUT SPEC
	$STATE SWITCH
	$TRAN	'OUTPUT',OUTPUT,,OUTPUT_PRES,COMMAND
	$TRAN	'BEFORE',BEFORE,,BEFORE_PRES,COMMAND
	$TRAN	'AFTER',AFTER,,AFTER_PRES,COMMAND
	$TRAN	'NOT',,,NOT_PRES,COMMAND
	$TRAN	'HIGHVERSION',HIGH,,HIGH_PRES,COMMAND
	$STATE	TRYMORE		;DUMMY STATE *********************
	$TRAN	TPA$_EOS,TPA$_EXIT	;ALL DONE
	$TRAN	TPA$_LAMBDA,LOOK
;
; PARSE THE SWITCH
;
	$STATE	OUTPUT
	$TRAN	':'
	$TRAN	'='
	$TRAN	TPA$_LAMBDA,TRYMORE
	$STATE
	$TRAN	!OUT_FILE,TRYMORE,,,OUTPUT_NAME
;
	$STATE	HIGH
	$TRAN	':'
	$TRAN	'='
	$TRAN	TPA$_LAMBDA,TRYMORE
	$STATE
	$TRAN	TPA$_DECIMAL,TRYMORE,,,HIGH_COUNT
;
	$STATE	BEFORE
	$TRAN	'='
	$TRAN	':'
	$TRAN	TPA$_LAMBDA,TRYMORE		;IF NO TIME USE DEFAULT
	$STATE
	$TRAN	!TIME,TRYMORE,,,BEFORE_TIME
;
	$STATE	AFTER
	$TRAN	':'
	$TRAN	'='
	$TRAN	TPA$_LAMBDA,TRYMORE
	$STATE
	$TRAN	!TIME,TRYMORE,,,AFTER_TIME
;
; PARSE THE INPUT SPEC
;
	$STATE	INPUT_SPEC
	$TRAN	TPA$_LAMBDA,,COUNT_IT		;CAN ONLY COME THROUGH HERE ONE
						;TIME - ELSE ERROR
	$STATE	FAKE_FILE
	$TRAN	!DEV_NAME,,,,DEVICE_NAME
	$TRAN	TPA$_LAMBDA			;GO TO NEXT STATE EVEN IF FAILED
	$STATE
	$TRAN	!UIC_SPEC,,,,UIC_NAME		;SEE IF UIC TYPE EXITS
	$TRAN	TPA$_LAMBDA		;GO TO NEXT STATE ANYWAY
	$STATE
	$TRAN	!FILES,TPA$_EXIT	;RETURN SUCCESS
;
; TRANSLATE THE FILE NAME FOR OUTPUT
;
	$STATE	OUT_FILE		;COME HERE IF /OUTPUT: EXISTS
	$TRAN	!DEVICE			;SEE IF DEVICE NAME HERE
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	'['			;START OF UIC
	$TRAN	TPA$_LAMBDA,NO_UIC
	$STATE	UIC_HERE
	$TRAN	TPA$_STRING		;UIC NAME
	$STATE
	$TRAN	']'
	$TRAN	COMMA,UIC_HERE		;MORE TO UIC
	$STATE	NO_UIC
	$TRAN	TPA$_STRING
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	'.'
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
	$STATE
	$TRAN	TPA$_STRING
	$STATE
	$TRAN	SEMI			;VERSION
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
	$STATE
	$TRAN	TPA$_DECIMAL
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
;
	$STATE	DEVICE
	$TRAN	TPA$_STRING
	$STATE
	$TRAN	':',TPA$_EXIT
;
; DEVICE NAME STATE
;
	$STATE	DEV_NAME
	$TRAN	TPA$_STRING
	$STATE
	$TRAN	':',TPA$_EXIT,,DEV_PRES,COMMAND	;NOTE DEVICE SPEC IS PRESENT
;
; LOOK FOR UIC SYMBOL
;
	$STATE  UIC_SPEC
	$TRAN	'['		;DO WE HAVE A UIC IF NOT FAIL
	$STATE
	$TRAN	'.'
	$TRAN	TPA$_LAMBDA
	$STATE	ANOTHER
	$TRAN	!MATCH_IN		;CHECK TO SEE IF ALLOWABLE STRING
	$TRAN	'*'			;IS THE GROUP WILD
	$STATE
	$TRAN	'.',ANOTHER			;MORE TO UIC THAN MEETS THE EYE
	$TRAN	']',TPA$_EXIT			;END OF UIC
;
;
; PLAY WITH INPUT CHECK NAME
;
	$STATE	FILES
	$TRAN	!MATCH_IN,,,,INPUT_NAME
	$TRAN	'*',,,WILD_NAME,COMMAND
	$TRAN	TPA$_LAMBDA,,,WILD_NAME,COMMAND
	$STATE
	$TRAN	'.'
	$TRAN	TPA$_LAMBDA,VERSION,,WILD_EXT,COMMAND
	$STATE		;GET EXTIONSION
	$TRAN	!MATCH_IN,,,,INPUT_EXT
	$TRAN	'*',,,WILD_EXT,COMMAND
	$TRAN	TPA$_LAMBDA,,,WILD_EXT,COMMAND
	$STATE	VERSION
	$TRAN	SEMI,,,VER_PRES,COMMAND
	$TRAN	'.',,,VER_PRES,COMMAND
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
	$STATE
	$TRAN	TPA$_DECIMAL,,,,INPUT_VER
	$TRAN	'*',,,WILD_VER,COMMAND
	$STATE
	$TRAN	TPA$_LAMBDA,TPA$_EXIT	;FOUND VERSION - DONE
;
	$STATE	MATCH_IN
	$TRAN	TPA$_STRING
	$TRAN	'#'
	$TRAN	'?'
	$STATE	MATCH_IN1
	$TRAN	TPA$_STRING,MATCH_IN1
	$TRAN	'#',MATCH_IN1
	$TRAN	'?',MATCH_IN1
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
;
;   GET THE TIME
;
	$STATE	TIME
	$TRAN	TPA$_DECIMAL			;DAY
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	'-'
	$STATE
	$TRAN	TPA$_STRING			;MONTH
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	'-'
	$STATE
	$TRAN	TPA$_DECIMAL			;YEAR
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN 	TPA$_LAMBDA		;SEPARATOR FOR DATE AND TIME IS A BLANK
	$STATE
	$TRAN	TPA$_DECIMAL		;HOUR
	$TRAN	TPA$_LAMBDA
	$STATE
	$TRAN	':'
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
	$STATE
	$TRAN	TPA$_DECIMAL		;MINUTE
	$TRAN 	TPA$_LAMBDA
	$STATE
	$TRAN	':'
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
	$STATE
	$TRAN	TPA$_DECIMAL,TPA$_EXIT	;SECONDS
	$TRAN	TPA$_LAMBDA,TPA$_EXIT
	$END_STATE
;
; END OF FILE INPUT TRANSLATION
;
; ACTION ROUTINES
;
	.PSECT CODE,LONG
COUNT_IT:	.WORD	0
	DECL	FILE_TRIES
	BGEQ	10$
	CLRL	R0			;FAILURE - TRIED TO DO THIS MORE THAN 1
10$:	RET
	.PSECT	DATA,QUAD
;
; DATA AREA FOR TPARSE
;
TPAR_DATA::
	.LONG	TPA$K_COUNT0
	.LONG	TPA$M_ABBREV
	.BLKL	TPA$K_LENGTH0-8
FILE_TRIES::	.LONG   1
DEVICE_NAME::	.LONG	0,0		;DESCRIPTOR FOR DEVICE NAME
UIC_GROUP::	.LONG	0,0		;DESCRIPTOR FOR UIC (GROUP PART)
UIC_MEM::	.LONG	0,0		;DESCRIPTOR FOR UIC (MEMBER)
UIC_NAME::	.LONG	0,0		;DESCRIPTOR FOR COMPLETE UIC (WITH [+])
INPUT_NAME::	.LONG	0,0		;DESCRIPTOR FOR INPUT NAME
INPUT_EXT::	.LONG	0,0		;INPUT EXTIONSION
INPUT_VER::	.LONG	0,0		;JUST A NUMBER HERE (I HOPE)
AFTER_TIME::	.LONG	0,0
BEFORE_TIME::	.LONG	0,0
OUTPUT_NAME::	.LONG	0,0
HIGH_COUNT::	.LONG	0,0
COMMAND::	.LONG	0
END_TAB::
;
; RAB AND FAB FOR INPUT
;
	.END
