.TITLE LBNDRV .IDENT /V1.0/ .IF EQ DEBUG .PSECT LBNDRV,RO .IFF .PSECT LBNDRV,RW .ENDC ;+ ; MACHINE/SYSTEM - PDP-11/70 / IAS V3.0 ; AUTHOR - JOHN GUIDI ; DATE - 22-SEPTEMBER-80 ; RESIDENCE - LB:[?,?]LBNDRV.MAC ; LANGUAGE - MACRO-11 D1113 ; ; FILE CONTENTS: ; ROUTINE FUNCTION ; ------- ------------------------------------------------- ; LBNDRV THIS IS THE DRIVER FOR THE $$$LBN MAPPING DISPLAY ; UTILITY. ; ;- .MCALL EXIT$S,CLOSE$,CSI$ CSI$ ; DEFINE CSI OFFSETS LBNDRV:: ;+ ; ROUTINE: LBNDRV ; ; EFFECT: THIS ROUTINE IS THE DRIVER FOR THE $$$LBN UTILITY. ; ; ROUTINES ; CALLED: 1. GETCML ; 2. OPNLST ; 3. SYNSRC ; 4. OPNIND ; 5. RDIND ; 6. PAREXM ; 7. OPNINX ; 8. FNDEXM ; 9. GETFIL ; 10. EXMHD ; 11. DSPMAP ; 12. LBNTRP (THROUGH ERROR MACRO) ;- ; ; 1. OBTAIN THE COMMAND LINE, THEN OPEN THE UTILITY OUTPUT FILE. ; 1$: CALL GETCML ; OBTAIN THE COMMAND LINE BCS 999$ ; ON ERROR, OR EOF, EXIT CALL OPNLST ; OPEN THE LIST FILE BCS 1$ ; IF ERROR, TRY AGAIN ; ; 2. PARSE THE (NEXT) SOURCE FILE. ; 2$: CALL SYNSRC ; SYNTACTICALLY PARSE SOURCE FILE BCS 1$ ; IF ERROR, TRY AGAIN ; ; 3. IF THE SOURCE FILE IS AN INDIRECT FILE (/IN SWITCH SPECIFIED), OPEN ; THE INDIRECT FILE. ; BIT #INMSK,SWMASK ; HAS /IN BEEN SPECIFIED? BEQ 40$ ; NO. THEN EXPLICIT SOURCE. GO PARSE CALL OPNIND ; YES. OPEN INDIRECT FILE BCS 1$ ; IF ERROR, THEN TRY AGAIN ; ; 4A. IF THE SOURCE FILE IS AN INDIRECT FILE, COME HERE AND READ THE NEXT ; RECORD IN THE INDIRECT FILE TO OBTAIN THE UTILITY INPUT FILE. IF /IN ; IS NOT PRESENT, THEN UTILTY INPUT FILE IS THE SOURCE FILE. ; 10$: CALL RDIND ; READ NEXT RECORD FROM INDIRECT FILE BCS 90$ ; ALL DONE (EOF OR ERROR) ; ; 5. INITALIZE THE NUMBER OF FILES FOUND VARIABLE NUMFIL. THEN PARSE THE ; UTILITY INPUT FILE INTO EXMFDB. THEN OPEN THE APPROPRIATE FCS INDEX FILE. ; 40$: CLR NUMFIL ; INITIALIZE FLAG TO NO FILES FOUND CALL PAREXM ; FILL IN EXMFDB WITH UTILITY INPUT BCS 999$ ; EXIT IF ERROR. CLOSE$ #INXFDB ; ENSURE THAT INXFDB IS CLOSED CALL OPNINX ; OPEN APPROPRIATE FCS INDEX FILE BCS 999$ ; EXIT IF ERROR ; ; 6. FIND (NEXT) FILE MATCHING (POSSIBLY WILD) UTILITY INPUT FILE ; SPECIFICATION. FOR EACH FILE FOUND, OBTAIN THE COMPLETE ASCII ; FILE SPECIFICATION AND PLACE IN EXMFIL. THEN DISPLAY THE VBN -> LBN ; MAPPING RELATIONSHIPS IN ALL FILE HEADERS ASSOCIATED WITH THIS FILE. ; 45$: CALL FNDEXM ; FIND (NEXT) FILE BCS 80$ ; C-BIT SET IF LAST FILE FOUND MOV #1,NUMFIL ; SET FLAG TO INDICATE AT LEAST ; ONE FILE FOUND. CALL GETFIL ; OBTAIN ASCII FILE DESCRIPTION CALL EXMHD ; GET THE FIRST FILE HEADER FOR FILE BCS 999$ ; EXIT IF ERROR CALL DSPMAP ; DISPLAY VBN-> LBN MAPPINGS FOR FIRST ; AND ALL SUCCEEDING FILE HEADERS. BCS 999$ ; EXIT IF ERROR ; ; 7. IF THERE WERE ANY WILDCARDS IN THE INPUT FILE, THEN GO TRY TO ; FIND THE NEXT FILE. IF NO WILDCARDS, FALL THROUGH. ; MOV CSIPTR,R2 ; R2 -> CSIBLK ! CSIIND BITB #CS.WLD,C.STAT(R2) ; WERE THERE ANY WILDCARDS PRESENT? BNE 45$ ; YES. GO GET NEXT FILE ; NO. THEN FOUND ONLY FILE ; ; 8. IF NO FILES WERE FOUND MATCHING THE INPUT FILE SPECIFICATION, THEN ; REPORT THE ERROR AND ILLUSTRATE THE SPECIFICATION. ; 80$: TST NUMFIL ; ANY FILES FOUND? BNE 85$ ; YES. CONTINUE ERROR NFILXX ; REPORT ERROR CMP #CSIIND,CSIPTR ; WAS THIS FROM AN INDIRECT FILE REC? BNE 83$ ; NO. PRINT , ; YES. FETCH RECORD BR 85$ 83$: PRINT SRCFIL,SRCSIZ ; PRINT FILE PARSED AS SOURCE ; ; 9. IF AN INDIRECT FILE IS IN USE, /IN SWITCH USED, THEN GO OBTAIN THE ; NEXT INDIRECT FILE RECORD. ; 85$: BIT #INMSK,SWMASK ; WAS /IN USED? BNE 10$ ; YES. GO GET NEXT RECORD ; ; 10. IF THERE ARE MORE SOURCE FILES TO BE PROCESSED, GO GET THE NEXT ONE. ; OTHERWISE, CLOSE THE LIST FILE AND REPROMPT LBN>. ; 90$: CLOSE$ #INDFDB ; CLOSE INDIRECT FILE (IF OPENED) BITB #CS.MOR, ; ARE THERE MULTIPLE INPUT FILES? BNE 2$ ; YES. GO OPEN NEXT UTILITY INPUT FILE CLOSE$ #LSTFDB ; CLOSE UTILITY OUTPUT FILE BR 1$ ; GO OBTAIN NEXT COMMAND LINE. 999$: ; TARGET FOR UTILITY TERMINATION CLOSE$ #LSTFDB ; CLOSE UTILITY OUTPUT FILE EXIT$S ; EXIT .END LBNDRV