.TITLE LBNDSP .IDENT /V1.0/ .IF EQ DEBUG .PSECT LBNDSP,RO .IFF .PSECT LBNDSP,RW .ENDC ;+ ; MACHINE/SYSTEM - PDP-11/70 /IAS V3.0 ; AUTHOR - JOHN GUIDI ; DATE - 22-SEPTEMBER-80 ; RESIDENCE - LB:[?,?]LBNDSP.MAC ; LANGUAGE - MACRO-11 D1113 ; ; FILE CONTENTS: ; ROUTINE FUNCTION ; ------- ------------------------------------------------------ ; EXMHD FETCHS THE FIRST FILE HEADER FOR FILE IN EXMFDB. ; ; DSPMAP DISPLAYS ALL VBN -> LBN MAPPING RELATIONSHIPS FOR ; THE FILE IN EXMFDB. ; ;- .MCALL C$C,QIOW$,DIR$,PUT$S,READ$,WAIT$,CLOSE$ .MCALL OFID$R,FHDOF$,HMBOF$ ;** ;** DO NOT REORDER THESE. THE SYMBOL H.FPRO IS DEFINED IN BOTH MACRO'S ;** BUT FOR OUR PURPOSE'S WE WISH THE MEANING TO BE THE FILE PROTECTION ;** CODE IN FHDOF$ ;** HMBOF$ ; DEFINE FCS INDEX FILE HOME BLOCK FHDOF$ ; DEFINE FCS INDEX FILE HEADER OFFSETS .NLIST BEX HDSTR: .ASCII /%N%VA%N%4SVBN(S) ALLOCATED%8SLBN(S) ALLOCATED/ .ASCIZ /%N%4S----------------%8S----------------/ MAPSTR: .ASCIZ /%11<%T%11>%11J-%11<%T%11>%S%11<%T%11>%11J-%T/ .LIST BEX .EVEN .SBTTL EXMHD -> FETCHS THE FIRST FILE HEADER FOR FILE IN EXMFDB. EXMHD:: ;+ ; ROUTINE: EXMHD ; ; EFFECT: FETCHS THE FIRST (POSSIBLY) ONLY FILE HEADER FOR THE ; FILE IN EXMFDB. AFTER ENSURING THAT WE HAVE THE CORRECT ; FILE HEADER, THE FILE DESCRIPTION IS OUTPUT TO THE LIST ; DEVICE IN LSTFDB. ; ; INPUTS: 1. INXFDB (OPENDED TO THE FCS INDEX FILE) ; 2. IBITSZ (SIZE OF THE BITMAP AREA IN THE FCS INDEX FILE) ; 3. EXMFDB (DESCRIBES FILE CURRENTLY UNDER INVESTIGATION) ; 4. LSTFDB (OPENED TO DESIRED LIST FILE) ; 5. EXMFIL (NAME OF FILE DESCRIBED BY EXMFDB) ; 6. EXMFSZ (SIZE OF EXMFIL) ; ; OUTPUTS: 1. INXVBN (SET TO VBN OF APPROPRIATE FILE HEADER) ; 2. INXBUF (FILLED WITH FIRST FILE HEADER OF EXMFDB) ; 3. LSTBUF (FILLED WITH FILE DESCRIPTION AND BANNER MESSAGE) ; 4. C-BIT SET IF ANY ERRORS ; ; ROUTINES ; CALLED: 1. RDINX ; 2. LBNTRP (THROUGH ERROR MACRO) ; 3. $EDMSG ;- ; ; 1. FETCH THE FIRST (POSSIBLY ONLY) FILE HEADER FOR THE FILE IN EXMFDB ; FROM THE FCS INDEX FILE ; CLR INXVBN ; CLEAR HIGH ORDER VBN MOV IBITSZ, ; FCS INDEX FILE BITMAP SIZE ADD #2, ; + 2 ADC INXVBN ; (OVERFLOW) ADD , ; + FILE ID ADC INXVBN ; (OVERFLOW) CALL RDINX ; READ FILE HEADER FROM INDEX FILE BCC 10$ ; READ$ OK? YES. BR 999$ ; NO - THEN EXIT ; ; 2. VERIFY THAT THE FILE HEADER JUST READ CORRESPONDS TO THE FILE-ID ; OF THE EXMFDB FILE. ; 10$: MOV #,R2 ; R2 -> FILE ID IN EXMFIL NAME BLOCK CMP (R2)+, ; FILE NUMBER MATCH? BNE 20$ ; NO. GO REPORT ERROR CMP (R2), ; FILE SEQUENCE NUMBER MATCH BEQ 30$ ; YES - GO DISPLAY FILE DESCRIPTION 20$: ERROR XCMPXX ; NO. REPORT ERROR PRINT #EXMFIL,EXMFSZ ; ILLUSTRATE PROBLEM FILE, SEC ; INDICATE FAILURE, BR 999$ ; AND RETURN ; ; 3. ON THE LIST DEVICE, DISPLAY THE FILE DESCRIPTION FOR THE EXMFDB FILE, ; AND THEN ADD THE COLUMN HEADINGS FOR THE LBN,VBN MAPPINGS. ; 30$: MOV EXMFSZ,ARGBLK ; NUMBER OF BYTES IN FILE DESCRIPTION MOV #EXMFIL, ; ADDRESS OF FILE DESCRIPTION MOV #LSTBUF,R0 ; R0 -> DESTINATION MOV #HDSTR,R1 ; R1 -> STRING MOV #ARGBLK,R2 ; R2 -> ARGUMENT BLOCK CALL $EDMSG ; CONVERT MESSAGE PUT$S #LSTFDB,#LSTBUF,R1 ; SEND MESSAGE TO LIST DEVICE 999$: ; TARGET FOR ERRORS RETURN .SBTTL DSPMAP-> DISPLAYS ALL VBN -> LBN MAPPING RELATIONSHIPS FOR .SBTTL DSPMAP THE FILE IN EXMFDB. DSPMAP:: ;+ ; ROUTINE: DSPMAP ; ; EFFECT: INXBUF CONTAINS THE FIRST FILE HEADER FOR THIS FILE. ALL ; THE MAP RETRIEVAL POINTERS IN THIS AND ANY ADDITIONAL FILE ; HEADERS ARE EXAMINED AND THE VBN,LBN MAPPINGS ARE DISPLAYED. ; ; INPUTS: 1. INXBUF (CONTAINS FIRST (POSSIBLY ONLY) FILE HEADER) ; 2. IBITSZ (SIZE OF BITMAP IN FCS INDEX FILE) ; 3. LSTFDB (OPENED TO DESIRED LIST FILE) ; 4. EXMFIL (NAME OF FILE DESCRIBED BY EXMFDB) ; 5. EXMFSZ (SIZE OF EXMFIL) ; ; OUTPUTS: 1. LSTBUF (USED TO DISPLAY VBN,LBN RELATIONSHIPS) ; 2. INXVBN (SET TO VBN OF LAST FILE HEADER FOR THIS FILE) ; 3. INXBUF (CONTAINS LAST FILE HEADER FOR THIS FILE) ; 4. COUNT (NUMBER OF LBNS REPRESENTED BY A MAP RETRIEVAL POINTER) ; 5. BOTVBN (LOW VBN REPRESENTED BY POINTER) ; 6. TOPVBN (HIGH VBN REPRESENTED BY POINTER) ; 7. BOTLBN (LOW LBN REPRESENTED BY POINTER) ; 8. TOPLBN (HIGH LBN REPRESENTED BY POINTER) ; 9. C-BIT SET IF ANY ERRORS) ; ; ROUTINES ; CALLED: 1. LBNTRP (VIA ERROR MACRO) ; 2. $EDMSG ; 3. RDINX ; ;- ; ; 1. INITIALIZE BOTVBN (BOTTOM VBN) TO 1 ; CLR BOTVBN ; SET BOTTOM VBN TO 1 MOV #1, ; (DOUBLE WORD) ; ; 2. FOR EACH FILE HEADER, INITIALIZE THE REGISTERS BELOW AS DOCUMENTED. ALSO, ; ENSURE THAT THE PROPER COUNT AND LBN FIELD SIZES ARE BEING USED FOR THE ; MAP RETRIEVAL POINTERS IN THIS FILE HEADER. ; REGISTERS INITIALIZED: ; R0 -> INXBUF (START OF THIS FILE HEADER) ; R1 -> START OF MAP AREA ; R2 = NUMBER OF RETRIEVAL POINTER BYTES IN USE ; 1$: MOV #INXBUF,R0 ; R0 -> INXBUF MOVB H.MPOF(R0),R1 ; R1 = WORDS TO MAP AREA BIC #^B1111111100000000,R1 ; CLEAR OFF HIGH ORDER BYTE ASL R1 ; R1 = BYTE OFFSET TO MAP AREA ADD R1,R0 ; R0 -> MAP AREA MOV R0,R1 ; R1 -> MAP AREA ADD #S.MPHD,R1 ; R1 -> FIRST RETRIEVAL POINTER MOVB M.USE(R0),R2 ; R2 = RETRIEVAL POINTER WORDS USED BIC #^B1111111100000000,R2 ; CLEAR OFF HIGH BYTE ASL R2 ; R2 = RETRIEVAL POINTER BYTES USED CMPB #1,M.CTSZ(R0) ; IS COUNT FIELD SIZE =1 ? BEQ 10$ ; YES. BR 15$ ; NO. GO REPORT ERROR. 10$: CMPB #3,M.LBSZ(R0) ; IS LBN FIELD =3 ? BEQ 20$ ; YES. 15$: ERROR MRETXX ; NO. REPORT ERROR. PRINT #EXMFIL,EXMFSZ ; ILLUSTRATE FILE WITH PROBLEM SEC ; INDICATE FAILURE, JMP 999$ ; THEN EXIT ; ; 3. USING THE MAP RETRIEVAL POINTER POINTED TO BY R1, FILL IN AND ; CALCULATE THE VARIABLES: ; BOTVBN ; TOPVBN ; BOTLBN ; TOPLBN ; 20$: CLR COUNT ; INITIALIZE COUNT VARIABLE MOV #BOTLBN,R3 ; R3 -> 0 BYTE OF BOTLBN MOVB (R1)+,(R3)+ ; TRANSFER HIGH ORDER BYTE OF LBN CLRB (R3)+ ; R3 -> BYTE 2 OF BOTLBN MOVB (R1)+,COUNT ; TRANSFER COUNT MOVB (R1)+,(R3)+ ; TRANSFER REST OF LBN MOVB (R1)+,(R3) ; (R1 -> NEXT RETRIEVAL POINTER) MOV BOTVBN,TOPVBN ; SETUP TOPVBN MOV , ; (DOUBLE WORD) ADD COUNT, ; ADD COUNT ADC TOPVBN MOV BOTLBN,TOPLBN ; SETUP TOPLBN MOV , ; (DOUBLE WORD) ADD COUNT, ; ADD COUNT ADC TOPLBN ; ; 4. DISPLAY THE VBN,LBN MAPPINGS ON THE LIST FILE ; PUSH ; COVER R0,R1,R2 MOV #LSTBUF,R0 ; R0 -> LIST BUFFER MOV #MAPSTR,R1 ; R1 -> EDIT MESSAGE STRING MOV #BOTVBN,ARGBLK ; #BOTVBN MOV #TOPVBN, ; #TOPVBN MOV #BOTLBN, ; #BOTLBN MOV #TOPLBN, ; #TOPLBN IN ARGUMENT BLOCK MOV #ARGBLK,R2 ; R2 -> ARGUMENT BLOCK CALL $EDMSG ; FORMAT MESSAGE PUT$S #LSTFDB,#LSTBUF,R1 ; DISPLAY MESSAGE ON LIST FILE POP ; RESTORE R2,R1,R0 ; ; 5. SET NEW BOTVBN TO OLD TOPVBN PLUS 1. THIS SETS BOTVBN UP FOR THE ; NEXT MAP RETREIVAL POINTER. ; MOV TOPVBN,BOTVBN ; BOTVBN BECOMES TOPVBN MOV , ; (DOUBLE WORD) INC ; BOTVBN = TOPVBN + 1 ADC BOTVBN ; (DOUBLE WORD) ; ; 6. IF THERE ARE MORE MAP RETRIEVAL POINTERS LEFT IN THIS FILE HEADER, GO ; PROCESS THEM. ; SUB #4,R2 ; R2 = NUMBER OF RETRIEVAL BYTES LEFT BLE 30$ ; NONE LEFT.GO CHECK EXTENSION HEADERS JMP 20$ ; MORE POINTERS LEFT. GO PROCESS NEXT ; ; 7. DETERMINE IF THERE ARE EXTENSION FILE HEADERS FOR THIS FILE. IF THERE ; ARE ANY, GO OBTAIN THE FILE HEADER AND, AFTER ENSURING THAT WE HAVE THE ; CORRECT FILE HEADER, GO PROCCESS ITS MAP RETRIEVAL POINTERS. IF AN ; EXTENSION FILE HEADER IS NOT PRESENT, THEN WE ARE DONE. ; 30$: TST M.EFNU(R0) ; IS THERE AN EXTENSION FILE NUMBER? BNE 40$ ; YES. GO PROCESS IT CLC ; NO. DONE FOR FILE. INDICATE SUCCESS, BR 999$ ; AND THEN EXIT. 40$: MOV M.EFSQ(R0),-(SP) ; YES. SAVE THE SEQUENCE NUMBER MOV M.EFNU(R0),-(SP) ; AS WELL AS THE EXTENSION FILE NUMBER CLR INXVBN ; CLEAR HIGH ORDER VBN MOV IBITSZ, ; FCS INDEX FILE BITMAP SIZE ADD #2, ; + 2 ADC INXVBN ; (OVERFLOW) ADD M.EFNU(R0), ; + FILE ID ADC INXVBN ; (OVERFLOW) CALL RDINX ; READ EXTENSION FILE HEADER BCS 999$ ; EXIT IF ERROR ; ENSURE THAT WE HAVE THE PROPER ; EXTENSION HEADER. ; THE STACK IS: ; ------------------ ; : FILE ID NUMBER : ; ------------------ ; : FILE SEQUENCE : ; ------------------ ;------------------------------------- 50$: CMP (SP)+, ; FILE NUMBER MATCH? BNE 60$ ; NO. GO REPORT ERROR CMP (SP)+, ; FILE SEQUENCE NUMBER MATCH BEQ 70$ ; YES. 60$: ERROR XCMPXX ; NO. REPORT ERROR PRINT #EXMFIL,EXMFSZ ; ILLUSTRATE FILE WITH PROBLEM, SEC ; INDICATE FAILURE, JMP 999$ ; AND RETURN 70$: JMP 1$ ; GOT EXTENSION HEADER. GO PROCESS IT. 999$: RETURN .END