	.TITLE GETCMD - REREADS THE COMMAND LINE
	.IDENT	/1.00/
;
;	THIS PROGRAM PARSES THE INPUT LINE FOR PCHIST
;
; WRITTEN BY: ROGER LIPSETT	04-MAR-79
;
;
	.MACRO	BITS	NAME,NO
NAME'_V=NO
NAME=1@NO
	.ENDM


	$TPADEF
	$RMSDEF
	$CLISERVDEF
	$CLIVERBDEF

	.LIST	ME
	BITS	GRAN_PRES,1
	BITS	OUTPUT_PRES,2
	BITS	SHORT_PRES,5
	BITS	LONG_PRES,6
	BITS	IMAGE_PRES,7
	.NLIST	ME
;
;
	.PSECT	GETCMD_CODE,QUAD,RD,NOWRT,EXE,SHR
	.ENABL	LSB
	.ENTRY	GETCMD,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
	MOVAB	CLI_REQBLK,R8		;POINT TO COMMAND REQUEST DESCRIPTOR
	PUSHAB	CLI_REQBLK		;STORE ARGUMENT FOR CALL
	CALLS	#1,G^SYS$CLI		;CALL CLI TO GET A COMMAND LINE
	MOVZWL	CLI$W_RQSIZE(R8),R9	;NUMBER OF BYTES READ IN
	BNEQ	1$			;IF ZERO, PROMPT FROM FORTRAN.
2$:	CLRL	R0
	RET

	; INIT TPARSE DATA BASE
1$:	MOVL	CLI$A_RQADDR(R8),R7	;START OF STRING TO R7
	MOVC3	R9,(R7),IN_BUF		;MOVE STRING TO INPUT BUFFER
	MOVAB	IMAGE_FILE,R0		;START ADDRESS OF TPARSE TABLE AREA
	MOVAB	END_TAB,R1		;ADDRESS OF END TO TPARSE TABLE
	SUBL2	R0,R1			;NUMBER OF BYTES IN TABLE
	MOVC5	#0,(R0),#0,R1,(R0)	;CLEAR THE STORAGE
	MOVL	#1,FILE_TRIES		;INIT FILE_TRIES
	MOVAB	TPAR_DATA,R0		;ADDRESS NEEDED FOR TPARSE
	MOVZWL	R9,TPA$L_STRINGCNT(R0)	;LENGTH OF STRING 
	MOVAB	IN_BUF,TPA$L_STRINGPTR(R0) ;POINT TO STRING
	PUSHAL	TABLE_KEY		;ARGUMENT FOR TPARSE
	PUSHAL	TABLE_STATE		;ARGUMENT FOR TPARSE
	PUSHL	R0			;ARGUMENT FOR TPARSE
	CALLS	#3,LIB$TPARSE		;INVOKE TPARSE
	BLBS	R0,4$			;IF LBS, SUCCESS
	BRW	2$
;
;  NOW SET UP THE INFORMATION FOR PCHIST
;
4$:	BBC	#SHORT_PRES_V,COMMAND,5$ ;BRANCH IF /SHORT NOT SPECIFIED.
	 MNEGL	#1,SUMMARY_ONLY		; /SHORT GIVEN, SO SET SUMMARY FLAG.
5$:	BBC	#LONG_PRES_V,COMMAND,11$ ;BRANCH IF /LONG NOT SPECIFIED.
	 CLRL	SUMMARY_ONLY		; /LONG GIVEN, SO CLEAR SUMMARY FLAG.
11$:
	BBC	#IMAGE_PRES,COMMAND,12$ ;IF NO IMAGE FILE GIVEN, ERROR.
	 BRW	2$
12$:	MOVAL	IMAGE_FILE,R7
	MOVW	(R7),R9
	MOVC3	R9,@4(R7),IMAGE_NAME	; TRANSFER FILE NAME STRING
	MOVL	R9,IMAGE_LENGTH		; SAVE LENGTH
	CLRL	OUTPUT_LENGTH		; ZERO OUTPUT FILE LENGTH
	BBC	#OUTPUT_PRES_V,COMMAND,15$ ; BRANCH IF NO OUTPUT FILE SPEC.
	MOVAL	OUTPUT_FILE,R7
	MOVW	(R7),R9
	MOVC3	R9,@4(R7),OUTPUT_NAME	; TRANSFER FILE NAME STRING
	MOVL	R9,OUTPUT_LENGTH
15$:	MOVL	#1,R0			; RETURN WITH SUCCESS.
	RET
;
;  THESE ARE THE STATE TABLES.
;
	.PSECT	GETCMD_FSM,QUAD,RD,NOWRT,NOEXE,SHR
	COMMA=^A/,/
	SEMI=^A/;/

	$INIT_STATE	TABLE_STATE,TABLE_KEY	;INITALIZE TPARSE
	$STATE	LOOK				;INITIAL STATE
	$TRAN	'/',SWITCH			;DO WE HAVE A SWITCH
	$TRAN	!IMAGE_SPEC,TRYMORE,,IMAGE_PRES,COMMAND		;IF NO SWITCH 
				;THEN IT MUST BE A DESCRIPTION OF IMAGE SPEC
	$STATE SWITCH
	$TRAN	'OUTPUT',OUTPUT,,OUTPUT_PRES,COMMAND
	$TRAN	'SHORT',,,SHORT_PRES,COMMAND
	$TRAN	'LONG',,,LONG_PRES,COMMAND
	$TRAN	'GRANULARITY',GRAN,,GRAN_PRES,COMMAND
	$STATE	TRYMORE		;DUMMY STATE *********************
	$TRAN	TPA$_EOS,TPA$_EXIT	;ALL DONE
	$TRAN	TPA$_LAMBDA,LOOK
;
; THE /OUTPUT SWITCH
;
	$STATE	OUTPUT
	$TRAN	':'
	$TRAN	'='
	$STATE
	$TRAN	!FILE_SPEC,TRYMORE,,,OUTPUT_FILE
;
; THE /GRANULARITY SWITCH
;
	$STATE	GRAN
	$TRAN	':'
	$TRAN	'='
	$STATE
	$TRAN	TPA$_DECIMAL,TRYMORE,,,GRANULE
;
; THE IMAGE SPEC
;
	$STATE	IMAGE_SPEC
	$TRAN	TPA$_LAMBDA,,COUNT_IT		;CAN ONLY COME THROUGH HERE
						; ONE TIME - ELSE ERROR
	$STATE
	$TRAN	!FILE_SPEC,TRYMORE,,,IMAGE_FILE

;
; PARSE A FILE SPEC
;
	$STATE	FILE_SPEC		;COME HERE FOR /OUTPUT AND FOR IMAGE.
	$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
	$END_STATE
;
; END OF PARSE TABLES
;

;
; ACTION ROUTINES
;
	.PSECT	GETCMD_CODE,QUAD,RD,NOWRT,EXE,SHR
COUNT_IT:
	.WORD	0
	DECL	FILE_TRIES
	BGEQ	10$
	CLRL	R0		;FAILURE - TRIED TO DO THIS MORE THAN ONCE
10$:	RET


	.PSECT	GETCMD_DATA,QUAD,RD,WRT,NOEXE,NOSHR

	.ALIGN	BYTE
IN_BUF:	.BLKB	100
	.ALIGN	LONG
CLI_REQBLK:
	$CLIREQDESC	RQTYPE=CLI$K_GETCMD	;REQUEST DESC FOR GETTING THE
						;COMMAND LINE FROM THE CLI
;
; DATA AREA FOR TPARSE
;
TPAR_DATA::
	.LONG	TPA$K_COUNT0
	.LONG	TPA$M_ABBREV
	.BLKL	TPA$K_LENGTH0-8
FILE_TRIES::	.LONG   1
IMAGE_FILE::	.LONG	0,0		;DESCRIPTOR FOR IMAGE FILE NAME
OUTPUT_FILE::	.LONG	0,0		;DESCRIPTOR FOR OUTPUT FILE NAME
COMMAND::	.LONG	0
END_TAB::

	.PSECT	PCHIST,PIC,OVR,REL,GBL,SHR,NOEXE,RD,WRT,LONG
TOTAL_HITS:
	.BLKD	1
SUMMARY_ONLY:
	.BLKL	1
GRANULE:
	.BLKL	1
IMAGE_LENGTH:
	.BLKL	1
OUTPUT_LENGTH:
	.BLKL	1

	.PSECT	FILE_NAMES,PIC,OVR,REL,GBL,SHR,NOEXE,RD,WRT,LONG
IMAGE_NAME:
	.BLKB	80
OUTPUT_NAME:
	.BLKB	80
	.END
