.TITLE LBNIND .IDENT /V1.0/ .IF EQ DEBUG .PSECT LBNIND,RO .IFF .PSECT LBNIND,RW .ENDC ;+ ; MACHINE/SYSTEM - PDP-11/70 / IAS V3.0 ; AUTHOR - JOHN GUIDI ; DATE - 22-SEPTEMBER-80 ; RESIDENCE - LB:[?,?]LBNIND.MAC ; LANGUAGE - MACRO-11 D1113 ; ; FILE CONTENTS: ; ROUTINE FUNCTION ; ------- ---------------------------------------------------- ; OPNIND OPENS THE INDIRECT FILE ; RDIND READS A RECORD(INPUT FILE NAME) FROM INDIRECT FILE, ; AND PARSES THE RECORD WITH CSI$1,2 ;- .MCALL CSI$,CSI$1,CSI$2 .MCALL CLOSE$ .MCALL GET$S,OPEN$R CSI$ ; DEFINE CSI OFFSETS .SBTTL OPNIND-> OPENS THE INDIRECT FILE OPNIND:: ;+ ; ROUTINE: OPNIND ; ; EFFECT: ; ; INPUTS: 1. CSIBLK (POINTS TO NEXT SOURCE FILE) ; 2. SWMASK (BIT INMSK IS SET TO INDICATE INDIRECT FILE USED. ; 3. CSIPTR (CSIPTR -> CSIIND. CSIIND WILL BE USED TO ; PARSE EACH RECORD IN THE INDIRECT FILE) ; 4. (NO REGISTERS INPUT) ; 5. SRCFIL (ADDRESS OF SOURCE FILE NAME) ; 6. SRCSIZ (SIZE OF SOURCE FILE NAME) ; ; OUTPUTS: 1. CSIBLK (UNCHANGED) ; 2. INDFLG (UNCHANGED) ; 3. CSIPTR (UNCHANGED) ; 4. INDFDB (INDIRECT FILE IF SUCCESSFULLY OPENED) ; 3. C-BIT CLEAR IF INDIRECT FILE SUCCESSFULLY OPENED ; C-BIT SET IF INDIRECT FILE HAS NOT BEEN OPENED ; 4. LSTFDB (CLOSED IF ERROR DURING INDIRECT FILE OPEN) ; ; ;- ; ; 1. ENSURE THAT THERE ARE NO WILDCARDS IN THE INDIRECT FILE DESCRIPTION ; MOV #CSIIND,CSIPTR ; CSIPTR -> CSIIND (SET FOR SUCCESS) BITB #CS.WLD, ; ANY WILDCARDS IN INDIRECT FILE? BEQ 10$ ; NO. ERROR IWLDXX ; YES. REPORT ERROR PRINT SRCFIL,SRCSIZ ; DISPLAY SOURCE FILE NAME BR 20$ ; GO CLOSE LIST FILE ; ; 2. OPEN THE INDIRECT FILE ; 10$: OPEN$R #INDFDB ; OPEN INDIRECT FILE BCC 30$ ; OPEN$R OK? YES. EXIT ERROR IOPNXX ; NO. REPORT ERROR PRINT SRCFIL,SRCSIZ ; DISPLAY SOURCE FILE NAME 20$: CLOSE$ #LSTFDB ; CLOSE THE LIST FILE SEC ; SET FAILURE INDICATOR 30$: ; LABEL FOR EXIT RETURN .SBTTL RDIND -> READS A RECORD(INPUT FILE NAME) FROM INDIRECT FILE, .SBTTL RDIND AND PARSES THE RECORD WITH CSI$1,2. RDIND:: ;+ ; ROUTINE: RDIND ; ; EFFECT: ; ; INPUTS: 1. CSIBLK (POINTS TO NEXT SOURCE FILE) ; 2. CSIIND (FILLED WITH LAST RECORD READ) ; 3. SWMASK (BIT INMSK SET TO INDICATE INDIRECT FILE USED) ; 4. CSIPTR (CSIPTR -> CSIIND. CSIIND WILL BE USED TO ; 5. (NO REGISTERS INPUT) ; 6. INDFDB (OPENED TO INDIRECT FILE) ; ; OUTPUTS: 1. CSIBLK (UNCHANGED) ; 2. INDFLG (UNCHANGED) ; 3. CSIPTR (UNCHANGED) ; 4. CSIIND (FILLED VIA CSI$1,2 WITH NEXT RECORD IN FILE) ; 5. INDICATES IF THERE ARE MORE SOURCE FILES. ; IF THERE ARE, THEN BIT #CS.MOR WILL BE SET. ; 6. C-BIT CLEAR IF SOURCE FILE SUCCESSFULLY PARSED ; C-BIT SET IF SOURCE FILE HAS NOT BEEN PARSED ; C-BIT ALSO SET WHEN END OF FILE READ ; ;- ; ; 1. READ THE NEXT RECORD IN THE INDIRECT FILE. ; 1$: GET$S #INDFDB ; READ INDIRECT FILE RECORD BCC 10$ ; GET$S OK? YES. MOVB ,-(SP) ; NO. PUSH ERROR BYTE ONTO STACK CMPB #IE.EOF,(SP)+ ; WERE WE AT END OF FILE? BEQ 2$ ; YES. THEN ALL IS OK. SKIP MESSAGE ERROR GETSXX ; NO. OBVIOUS ERROR. REPORT 2$: SEC ; INDICATE FAILURE BR 99$ ; ; 2. SYNTAX CHECK OF RECORD READ ; 10$: MOV CSIPTR,R0 ; R0 = CSIPTR -> CSIIND CSI$1 R0,, ; ANALYZE COMMAND LINE ; FROM INDIRECT FILE BCC 20$ ; SYNTAX OK. GO CHECK SEMANTICS ERROR INSYXX ; SYNTAX ERROR. REPORT ERROR PRINT , ; DISPLAY LINE BR 1$ ; GO GET NEXT RECORD ; ; 3. SEMANTIC PARSE OF RECORD ; 20$: CSI$2 R0,OUTPUT ; SEMANTIC PARSE BCS 30$ ; CSI$2 ERROR. GO REPORT ERROR BITB #CS.EQU!CS.MOR,C.STAT(R0) ; CHECK RECORD FOR INVALID CASES ; (ONLY ONE FILE DESCRIPTION/RECORD) BEQ 90$ ; SEMANTIC PARSE OK. GO EXIT 30$: ERROR INSMXX ; REPORT ERROR, PRINT , ; DISPLAY LINE, BR 1$ ; GO GET NEXT RECORD 90$: CLC ; INDICATE SUCCESS 99$: ; LABEL FOR ERROR RETURN ; EXIT .END