.TITLE LBNINX .IDENT /V1.0/ .IF EQ DEBUG .PSECT LBNINX,RO .IFF .PSECT LBNINX,RW .ENDC ;+ ; MACHINE/SYSTEM - PDP-11/70 / IAS V3.0 ; AUTHOR - JOHN GUIDI ; DATE - 22-SEPTEMBER-80 ; RESIDENCE - LB:[?,?]LBNINX.MAC ; LANGUAGE - MACRO-11 D1113 ; ; ROUTINE FUNCTION ; ---------- ------------------------------------------------------ ; OPNINX OPENS APPROPRIATE FCS INDEX FILE ; RDINX READS VBN FROM FCS INDEX FILE ;- .MCALL OPEN$R .MCALL READ$,WAIT$ .MCALL FDOF$L,HMBOF$ .MCALL GET$S FDOF$L ; DEFINE FILE DESCRIPTOR BLOCK (FDB) OFFSETS HMBOF$ ; DEFINE FCS INDEX FILE HOME BLOCK OFFSETS .EVEN .SBTTL OPNINX -> OPENS APPROPRIATE FCS INDEX FILE OPNINX:: ;+ ; ROUTINE: OPNINX ; ; EFFECT: USES INXFDB TO OPEN THE FCS INDEX FILE. ; ; INPUTS: 1. INXFDB (INXFDB SET TO OPEN THE FCS INDEX FILE) ; 2. EXMDSP (FIRST 2 WORDS CONTAIN DEVICE STRING ADDRESS ; AND SIZE FOR WHICH THE INDEX FILE SHOULD BE OPENED) ; ; OUTPUTS: 1. INXFDB (OPENED TO FCS INDEX FILE) ; 2. INXSTB (STATISTICS BLOCK FOR INXFDB) ; 3. C-BIT CLEAR IF FCS INDEX FILE OPENED ; C-BIT SET IF FILE IS NOT OPENED ; 4. ALL REGISTERS PRESERVED (ONLY R0 AND R1 USED) ; 5. IBITSZ (FCS INDEX FILE BITMAP SIZE) ; ; ROUTINES ; CALLED: 1. LBNTRP (THROUGH ERROR MACRO) ; 2. RDINX ; ;- ; ; 1. FILL INXDSP DATASET WITH DEVICE INFO CORRESPONDING TO EXMDSP. THEN LINK ; A STATISTICS BLOCK TO THE FDB, THEN OPEN THE DESIRED FCS INDEX FILE. ; PUSH ; SAVE R0,R1 ON STACK MOV #EXMDSP,R0 ; R0 -> EXMDSP MOV #INXDSP,R1 ; R1 -> INXDSP MOV (R0)+,(R1)+ ; COPY SIZE OF DEVICE STRING MOV (R0)+,(R1)+ ; COPY ADDRESS OF DEVICE STRING MOV #INXSTB, ; LINK IN STAT BLOCK OPEN$R #INXFDB ; OPEN FCS INDEX FILE BCC 30$ ; OPEN$R OK? YES. ERROR XOPNXX ; REPORT INDEX FILE OPEN FAILED SEC ; INDICATE FAILURE JMP 999$ ; AND EXIT ; ; 2. IT IS THEN NECESSARY TO UPDATE INFO IN THE OPENED FDB, AS SYSTEM ; FILE INDEX FILE HEADERS CONTAIN NO INFO IN THE USER ATTRIBUTE AREA. ; THE FILE SIZE LEFT IN THE STATISTICS BLOCK IS USED TO UPDATE THE ; F.HIBK AND F.EFBK LOCATIONS IN INXFDB. ; ; R0 -> INXFDB (FROM OPEN$R) 30$: MOV #INXSTB,R1 ; R1 -> STAT BLOCK FOR SYSTEM FILE MOV 4(R1),F.HIBK(R0) ; SET HIGH VBN MOV 6(R1),(R0) ; (DOUBLE WORD) MOV 4(R1),F.EFBK(R0) ; SET EOF VBN MOV 6(R1),(R0) ; (DOUBLE WORD) ADD #1,(R0) ; DOUBLE PRECISION INCREMENT OF EOF ADC F.EFBK(R0) ; ; ; 3. INXFDB IS OPENED TO THE FCS INDEX FILE. FETCH THE INDEX FILE BITMAP ; SIZE AND STORE IT IN THE VARIABLE IBITSZ. ; 40$: CLR INXVBN ; SET INXVBN TO 2 MOV #2, ; (DOUBLE WORD) CALL RDINX ; READ VBN 1 OF BITMAP FILE BCS 999$ ; EXIT IF ERROR MOV ,IBITSZ ; SAVE INDEX FILE BITMAP SIZE 50$: CLC ; INDICATE SUCCESS 999$: ; LABEL FOR ERROR POP ; RESTORE R1,R0 FROM STACK RETURN .SBTTL RDINX -> READS VBN FROM FCS INDEX FILE RDINX:: ;+ ; ROUTINE: RDINX ; ; EFFECT: READS THE VBN SPECIFIED IN INXVBN INTO THE BUFFER INXBUF ; ; INPUTS: 1. INXFDB (OPENED TO INDEX FILE) ; 2. INXVBN (VBN DESIRED TO BE READ) ; ; OUTPUTS: 1. INXBUF (CONTAINS THE VBN READ) ; 2. C-BIT CLEAR INDICATES THAT INXVBN BLOCK WAS READ OK ; C-BIT SET INDICATES ERROR DURING READ ; 3. ALL REGISTERS PRESERVED (ONLY R0 IS USED) ; ; ROUTINES ; CALLED: 1. LBNTRP (THROUGH ERROR MACRO) ;- PUSH R0 ; SAVE R0 ON STACK READ$ #INXFDB,#INXBUF,#INXSIZ,#INXVBN ; READ VBN SPECIFIED IN INXVBN BCS 10$ ; READ$ OK? NO. GO REPORT ERROR WAIT$ #INXFDB ; YES. WAIT FOR READ$ TO COMPLETE BCC 999$ ; ERROR DURING READ? NO. GO EXIT 10$: ERROR XREDXX ; YES. REPORT INDEX FILE READ ERROR SEC ; INDICATE FAILURE ; THEN EXIT 999$: ; LABEL TO EXIT ROUTINE POP R0 ; RESTORE R0 RETURN .END