.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 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