.TITLE INIT .SBTTL INITIALIZATION AND COMMAND DECODING ;************************************************************************** ; ; START OF MAIN PROGRAM (CILUS) ; ;************************************************************************** START:: FINIT$ ;INIT FCS RESTRT::MOV #SPL,FLAG ;ASSUME SPOOL LISTING FILE PROMPT 'C,'I,'L ;INIT PROMPT SEQUENCE CLR LCLFLG ;CLEAR LCL FLAG CLR SECFLG ;CLEAR SEC FLAG CLR PRIFLG ;CLEAR PRIMARY FLAG MOV #MAXSIZ,MODSIZ ;ASSUME NORMAL 10000 BYTE MAX MOV #OUTDST,OUTLST+F.DFNB ;REINIT LISTING FDB GCML$ #CMDL ;GET A COMMAND LINE BCC .+6 ;OKAY JMP CMDCHK ;CHECK FOR CNTRL Z OR ERROR CSI$1 #CSIBLK,CMDL+G.CMLD+2,CMDL+G.CMLD ;CHECK THE SYNTAX BCC .+6 ;OKAY JMP CMDERR ;OTHERWISE COMMAND SYNTAX ERROR BITB CSIBLK+C.STAT,#CS.EQU ;MUST HAVE AN EQUAL SIGN BNE .+6 ;OKAY JMP CMDERR ;OTHERWISE COMMAND SYNTAX ERROR CSI$2 #CSIBLK,OUTPUT,#SWTAB ;GET AN OUTPUT FILE SPEC BCC .+6 ;OKAY JMP CMDERR ;OTHERWISE COMMAND SYNTAX ERROR PARSE OUTCIL,OUTDST,CSIBLK+C.DSDS,CILNAM ;PARSE THE FILENAME SPEC BITB CSIBLK+C.STAT,#CS.MOR ;IS THERE ANOTHER OUTPUT SPEC? BNE .+6 ;YES JMP INPSPC ;GO PROCESS INPUT SPECS CSI$2 #CSIBLK,OUTPUT,#SWTAB ;GET AN LICIL OUTPUT FILE SPEC BCC .+6 ;OKAY JMP CMDERR ;OTHERWISE COMMAND SYNTAX ERROR COM LCLFLG ;FLAG THAT WE GOT AN LCL PARSE OUTLIL,LILDST,CSIBLK+C.DSDS,LILNAM ;PARSE THE LICIL SPEC INPSPC: CSI$2 #CSIBLK,INPUT,#SWTAB ;GET PRIMARY INPUT SPEC BCC .+6 ;OKAY JMP CMDERR ;OTHERWISE COMMAND SYNTAX ERROR PARSE PRIINP,PRIDST,CSIBLK+C.DSDS,LDANAM ;PARSE PRIMARY FILENAME BITB CSIBLK+C.STAT,#CS.MOR ;IS THERE ANOTHER INPUT SPEC? BNE .+4 ;YES BR 1$ ;CHECK LEGALITY OF SWITCHES CSI$2 #CSIBLK,INPUT,#SWTAB ;GET SECONDARY INPUT SPEC BCC .+6 ;OKAY JMP CMDERR ;OTHERWISE COMMAND SYNTAX ERROR COM SECFLG ;FLAG IT PARSE SECINP,SECDST,CSIBLK+C.DSDS,LDANAM ;PARSE SECONDARY FILENAME 1$: BIT #NB.NAM,OUTDST+N.STAT ;WAS A FILENAME SPECIFIED? BNE 2$ ;YES, SKIP COP3 OUTDST,PRIDST ;IF NOT USE PRIMARY INPUT NAME 2$: TST LCLFLG ;GOT AN LICIL? BEQ SWCHK ;NO BIT #NB.NAM,LILDST+N.STAT ;IF SO, WAS A NAME SPECIFIED? BNE SWCHK ;YES COP3 LILDST,PRIDST ;USE PRIMARY INPUT NAME IF NOT .PAGE SWCHK: BIT #SI,FLAG ;GOT A SIZE FLAG BEQ 2$ ;NO ADD #10000,MODSIZ ;USER DIDN'T LEAVE ROOM FOR INDEX 2$: BIT #BO!HO,FLAG ;GOT A BOOT OR HOOK SWITCH? BEQ .+6 ;NO JMP NOBOOT ;YES, NOT ALLOWED BIT #CT!MT!TA,FLAG ;GOT CASSETTE, MAGTAPE, OR TAPE? BEQ .+6 ;NO JMP NOTIMP ;IF YES, REPORT NOT IMPLEMENTED BIT #LI!DI!DU!LO!PA,FLAG ;SINGLE INPUT/OUTPUT ALLOWED? BEQ 1$ ;NO TST LCLFLG ;2ND OUTPUT FILE SPECIFIED? BEQ .+6 ;NO JMP NUMFLE ;YES, ERROR TST SECFLG ;2ND INPUT FILE SPECIFIED? BEQ .+6 ;NO JMP NUMFLE ;YES, ERROR BIT #LI!DI!DU,FLAG ;ANY KIND OF LISTING? BEQ 1$ ;NO BIT #NB.TYP,OUTDST+N.STAT ;SIGNAL EXPLICIT EXTENSION BNE 3$ ;YES MOV #^RLST,OUTDST+N.FTYP ;MAKE THE DEFAULT LST, NOT CIL 3$: BIT #LI!DI,FLAG ;LIST DIRECTORY? BEQ .+6 ;NO JMP LSTDIR ;YES, PROCESS IT BIT #DU,FLAG ;DUMP MODULE? BEQ .+6 ;NO JMP DMPMOD ;YES, PROCESS IT 1$: MOV #TINAM,OUTLST+F.DFNB ;USE TI: AS OUTPUT LISTING DEVICE OPEN$W #OUTLST ;OPEN IT BIC #SPL,FLAG ;CLEAR THE SPOOL FLAG BIT #LO,FLAG ;LOAD CIL? BEQ .+6 ;NO JMP LOD ;YES, PROCESS IT BIT #PA,FLAG ;PATCH? BEQ .+6 ;NO JMP PAT ;YES, PROCESS IT BIT #E,FLAG ;END OF INPUT? BNE .+6 ;YES JMP NOEND ;NO, ERROR BIT #ED,FLAG ;EDIT? BEQ .+6 ;NO JMP EDT ;YES, PROCESS IT BIT #BU,FLAG ;BUILD? BEQ .+6 ;NO JMP BLD ;YES, PROCESS IT JMP NOEND ;ERROR OTHERWISE .PAGE CMDCHK: CMPB CMDL+G.ERR,#GE.EOF ;CONTROL Z? BNE CMDERR ;NO EXIT$S CMDERR: MOV #CMDER,R1 ;POINT TO MESSAGE BLOCK CALL PRINT ;PRINT IT JMP RESTRT ;AND RESTART CMDER: .WORD CMDERL ;COMMAND SYNTAX ERROR MESSAGE .ASCII /CIL> *** ILLEGAL SYNTAX ***/ CMDERL = .-CMDER-2 ;LENGTH OF MESSAGE .EVEN NOHOOK: ;HOOK COMMAND NOT ALLOWED IN RSX NOBOOT: MOV #BOTMG,R1 ;BOOT COMMAND NOT ALLOWED IN RSX CALL PRINT ;PRINT IT JMP RESTRT ;RESTART BOTMG: .WORD BOTMGL ;MESSAGE .ASCII ?CIL> *** BOOT/HOOK WILL NOT FUNCTION UNDER RSX-11M ***? BOTMGL = .-BOTMG-2 .EVEN NUMFLE: MOV #NUMFL,R1 ;ILLEGAL NUMBER OF I/O SPECS CALL PRINT ;PRINT IT JMP RESTRT ;RESTART NUMFL: .WORD NUMFLL ;MESSAGE .ASCII ?CIL> *** TOO MANY INPUT/OUTPUT DATASETS ***? NUMFLL = .-NUMFL-2 .EVEN NOEND: MOV #NEND,R1 ;NO END TO INPUT COMMAND CALL PRINT ;PRINT IT JMP RESTRT ;RESTART NEND: .WORD NENDL ;MESSAGE .ASCII /CIL> *** UNEXPECTED END OF COMMAND LINE ***/ NENDL = .-NEND-2 .EVEN NOTIMP: MOV #NOTM,R1 ;NOT IMPLEMENTED COMMAND CALL PRINT ;PRINT IT JMP RESTRT ;RESTART NOTM: .WORD NOTML ;MESSAGE .ASCII /CIL> *** (CT, MT, & TA) ARE UNIMPLEMENTED SWITCHES ***/ NOTML = .-NOTM-2 .EVEN .END