	.TITLE	CLIMACROS 	FTCOPY COMMAND LINE MACROS
	.SUBTITLE MACRO TO GET A COMMAND LINE VALUE.
;
	.IDENT	/21-JAN-1983/
;	Foreign Tape copy
;
;
;	Use of registers in these macros is;
;		R0 - Status from teh CLI interface routines.
;		R1 - Pointer to space character returned from CLI routines.
;		R2-R5 - Not used.
;		R6 - Temporary save location for the status returned from the
;		     CLI interface routines.
;		R7 - Number of bytes obtained by the CLI$GET_VALUE routine.
;		R8 - Pointer into the input string from the CLI interfaces.
;		R9 - Not used.
;		R10 - Pointer to the FTCB.
;		R11 - Pointer to the FTIO block.
;
;
	.MACRO	GETVAL	CLEN,PNAME,TRUE,?L1
;		CLEN = THE MAX. LENGTH OF BYTES TO COPY FROM THE COMMAND LINE
;		PNAME = THE PARAMETER NAME TO GET FROM THE CLI ROUTINE
;		TRUE = THE BRANCH ADDRESS FOR A TRUE RESPONSE.
;		RETURNS - THE GET_VALUE STATUS IN R6.
;			- THE NUMBER OF BYTES COPIED BY GET_VALUE IN R7
;
	CLRL	R7		; CLEAR THE # BYTES COPIED.
	MOVZBL	#CLEN,FTCB_L_INSLEN(R10)	; SET THE LENGTH OF THE INPUT
;
	PUSHAL	FTCB+FTCB_L_INSLEN   ; PUSH THE GENERIC INPUT CHARACTER STRING.
	PUSHAL	PNAME		; PUSH THE NAME OF THE PARAMETER DESIRED.
	CALLS	#2,G^CLI$GET_VALUE	; GET THE VALUE.
	MOVL	R0,R6		; SAVE RETURN VALUE.
	BLBC	R6,L1 		; BRANCH IF "GET WAS FALSE"
;			GET WAS "TRUE"
	MOVL	FTCB_L_INSPTR(R10),R8	; PUT POINTER INTO R8.
	LOCC	#^X20,FTCB_L_INSLEN(R10),(R8)	; LOCATE THE FIRST <SP> AND
	SUBL3	R8,R1,R7			; SUBTRACT TO GET # BYTES
	JMP	TRUE				; COPIED. JUMP TO "TRUE".
L1:	.ENDM	GETVAL
;
	.PAGE
	.SUBTITLE MACRO TO CHECK THE PRESENCE OF COMMAND LINE QUALIFIERS.
;
;		MACRO TO CHECK FOR PRESENCE OF A QUALIFIER AND OPTIONALLY
;		CHECK TO SEE IF THE RETURN IS
;			CLI$_PRESENT - QUALIFIER PRESENT
;			CLI$_DEFAULTED - QUALIFIER HAS THE DEFAULT VALUE.
;			CLI$_ABSENT - QUALIFIER WAS ABSENT
;			CLI$_NEGATED - QUALIFIER WAS NEGATED.
;			CLI$_LOCPRES - QUALIFIER WAS LOCALY PRESENT
;			CLI$_LOGNEG - QUALIFIER WAS LOCALY NEGATED.
;
	.MACRO	GETPRES	PNAME,?TRUE,DEF,NEG,LPRES,LNEG,ABS,PRES,?FALSE,?L3
;		PNAME	- THE NAME OF THE QUALIFIER TO LOOK FOR
;		TRUE	- THE TRANSFER ADDRESS FOR A TRUE RETURN
;		DEF	- TRANSF. ADDR. FOR DEFAULTED
;		NEG	- TRANSF. ADDR. FOR NEGATED
;		LPRES	- TRANSF. ADDR. FOR LOCALY PRESENT
;		LNEG	- TRANSF. ADDR. FOR LOCALY NEGATED
;		ABS	- TRANSF. ADDR. FOR ABSENT
;		PRES	- TRANSF. ADDR. FOR PRESENT
;		FALSE	- TRANSF. ADDR. FOR FALSE
;		L3	- DUMMY LOCAL LABEL
;
;		RETURNED - R6 CONTAINS THE RETURN STATUS FROM CLI$PRESENT
;
	PUSHAL	PNAME		; PUSH THE QUALIFIER NAME DESCRIPTOR ON STACK
	CALLS	#1,G^CLI$PRESENT	; CALL PRESENT ROUTINE.
;
	MOVL	R0,R6		; SAVE R0 - RETURN STATUS - IN R6
	BLBS	R0,L3		; BRANCH IF TRUE
;
;		FALSE RETURN - FIND OUT IF WE SHOULD CHECK IT OUT.
	.IF NOT_BLANK NEG
	CMPL	#CLI$_NEGATED,R0	; CHECK FOR NEGATED.
	BEQL	NEG
	.ENDC
;
	.IF NOT_BLANK LNEG
	CMPL	#CLI$_LOCNEG,R0		; CHECK FOR LOCALY NEGATED.
	BEQL	LNEG
	.ENDC
;
	.IF NOT_BLANK ABS
	CMPL	#CLI$_ABSENT,R0		; CHECK FOR ABSENT
	BEQL	ABS
	.ENDC
;
	JMP	FALSE		; JUMP TO THE FALSE RETURN.
;
;		CHECK FOR VARIOUS TRUE VALUES.
;
L3:	.IF NOT_BLANK DEF
	CMPL	#CLI$_DEFAULTED,R0	; CHECK FOR DEFAULTED.
	BEQL	DEF
	.ENDC
;
	.IF NOT_BLANK LPRES
	CMPL	#CLI$_LOCPRES,R0	; CHECK FOR LOCALY PRESENT
	BEQL	LPRES
	.ENDC
;
	.IF NOT_BLANK PRES
	CMPL	#CLI$_PRESENT,R0	; CHECK FOR VALUE PRESENT
	BEQL	PRES
	.ENDC
;
	JMP	TRUE
;
FALSE:	.ENDM	GETPRES
	.END
