.TITLE ROLGCM GET COMMAND LINE .SBTTL RSX11M ROLLIN .PSECT IMPURE,D,LCL,OVR ; ; ; THIS SUBROUTINE INPUTS THE COMMAND LINE AND CHECKS FOR ; SYNTAX ERRORS. ; ; SYSTEM MACROS ; .MCALL CSI$1 , CSI$2 , GCML$ ; .PSECT ; CODE SECTION ;***************************************************************************** ; ; PROGRAM PROPER ; ;***************************************************************************** ; ROLGCM:: ; PROGRAM ENTRY CALL $SAVAL ; SAVE ALL REGISTERS ; ; GET THE COMMAND LINE ; GCML$ #CMLBLK ; BCC 1$ ; JMP GCMEXT ; BRANCH IF ERROR 1$: ; ; COMMAND SYNTAX ANALYZER ; CSI$1 #CSIBLK,CMLBLK+G.CMLD+2,CMLBLK+G.CMLD ; ; ; COMMAND LINE PARSER ; MOV #CSIBLK,R4 ; POINT TO CSI CONTROL BLOCK BITB #CS.EQU,C.STAT(R4) ; WAS AN OUTPUT FILE SPECIFIED BEQ ERROR ; BRANCH IF NO - ERROR ; ; GET THE OUTPUT FILE SPECIFICATION ; GETOUT: ; BICB #,C.STAT(R4) ; RESET FILE BITS CSI$2 R4,OUTPUT,#OUTSW ; SEMANTIC PARSER BCS ERROR ; BRANCH IF NO ERROR BITB #,C.STAT(R4) ; ANYTHING SPECIFIED BEQ ERROR ; BRANCH IF NO ; ; PARSE THE OUTPUT FILE ; MOV #OUTFDB,R0 ; FILE DESCRIPTOR BLOCK CALL PARSIT ; GO PARSE FILE ; ; SET THE OUTPUT FILE FILETYPE ; 2$: BITB #CS.MOR,C.STAT(R4) ; WAS A DEFINITION FILE SPECIF. BNE ERROR ; IF YES - ERROR .PAGE ; ; ; GET THE INPUT FILE SPECIFICATION ; GETINP: ; BICB #,C.STAT(R4) ; RESET FILE BITS CSI$2 R4,INPUT,#INPSW ; SEMANTIC PARSER BCS ERROR ; BITB #,C.STAT(R4);ANYTHING SPECIFIED BEQ ERROR ;BRANCH IF NO ; ; PARSE THE INPUT FILE ; MOV #INPFDB,R0 ; FILE DESCRIPTOR BLOCK CALL PARSIT ; GO PARSE FILE ; ; SET THE INPUT FILE FILETYPE ; 1$: BITB #CS.MOR,C.STAT(R4) ; WAS A DEFINITION FILE SPECIF. BNE ERROR ; IF YES - ERROR MOV #OUTFDB+F.FNB,R0 ; FILE DESCRIPTOR BLOCK MOV #INPFDB+F.FNB,R1 ; INPUT FILE DESCRIPTOR BLOCK MOV N.DVNM(R0),R4 ; OUTPUT DEVICE NAME TO R4 SUB N.DVNM(R1),R4 ; SUBTRACT INPUT DEVICE 3$: MOV #2,R2 ; SET UP COUNTER 4$: MOV #^C,R3 ; DEVICE NAME TO R3 CMP N.DVNM(R0),#"MT ; IS DEVICE MAG TAPE BNE 5$ ; NO BRANCH TST R4 BEQ 5$ BIS #NB.TYP,N.STAT(R0) MOV #^RROL,N.FTYP(R0) MOV #^C,R3;DEVICE AND FILENAME 5$: BIT R3,N.STAT(R0) BNE ERROR MOV R1,R0 DEC R2 BGT 4$ 6$: CLC BR GCMEXT .PAGE ; ; ; PARSER ROUTINE ; PARSIT: MOV R0,R1 ; COPY ADD #F.FNB,R1 ; FILENAME BLOCK MOV F.DFNB(R0),R3 ; DEFAULT FILENAME BLOCK CLR F.DFNB(R0) ; RESET DEFAULT FILENAME BLOCK MOV #C.DSDS,R2 ; DATASET DESCRIPTOR POINTER ADD R4,R2 ; BEGINNING ADDRESS OF CSI BLOCK CALL .PARSE ; FORM FILENAME BIT #NB.DEV,N.STAT(R1) ; DEVICE SPECIFIED BEQ ERROR ; NO ERROR BIT #,N.STAT(R1);ANY WILD CARDS BNE ERROR ; YES, BRANCH ERROR BR GCMEXT ; BRANCH ERROR: JMP RSTART ; GO TRY AGAIN ; ; PARSIT OR PROGRAM EXIT ; GCMEXT: RETURN ; EXIT BACK TO CALLER .END