.TITLE LBNFND .IDENT /V1.0/ .IF EQ DEBUG .PSECT LBNFND,RO .IFF .PSECT LBNFND,RW .ENDC ;+ ; MACHINE/SYSTEM - PDP-11/70 / IAS V3.0 ; AUTHOR - JOHN GUIDI ; DATE - 22-SEPTEMBER-80 ; RESIDENCE - LB:[?,?]LBNFND.MAC ; LANGUAGE - MACRO-11 D1113 ; ; FILE CONTENTS: ; ROUTINE FUNCTION ; ------- ---------------------------------------------------- ; PAREXM THIS ROUTINE FILLS IN THE FDB FOR THE SPECIFIED ; SOURCE FILE. WILDCARDS [*,*]*.*;* ARE ALLOWED. ; ; FNDEXM FINDS THE NEXT, IF ANY, FILE MATCHING THE ; WILD DESCRIPTION ORIGINALLY GIVEN. ; ; ; GETFIL OBTAINS THE ASCII FILE DESCRIPTION FOR THE FILE ; FOUND BY ROUTINE FNDEXM. ;- .MCALL CSI$ .MCALL NBOF$L CSI$ ; DEFINE CSI OFFSETS NBOF$L ; DEFINE NAME BLOCK OFFSETS .EVEN .SBTTL PAREXM-> THIS ROUTINE FILLS IN THE FDB FOR THE SPECIFIED .SBTTL PAREXM SOURCE FILE. WILDCARDS [*,*]*.*;* ARE ALLOWED. PAREXM:: ;+ ; ROUTINE: PAREXM ; ; EFFECT: FILLS IN THE EXMFDB FOR THE DESIRED SOURCE FILE. ; ; INPUTS: 1. CSIPTR (POINTS TO EITHER CSIBLK OR CSIIND. CSIPTR POINTS ; TO THE CSI BLOCK WHICH CONTAINS THE EXAMINATION FILE ; (POSSIBLY WILD) DESCRIPTION) ; 2. SRCFIL (NAME OF SOURCE FILE LAST PARSED IN COMMAND LINE) ; 3. SRCSIZ (SIZE OF SOURCE FILE) ; 4. EXMNMB (DEFAULT FILE NAME BLOCK) ; ; OUTPUTS: 1. EXMDSP (DATA SET FILLED FROM APPROPRIATE CSI DATASET) ; 2. EXMVER (STORAGE FOR ORIGINAL VERSION OF FILE IN EXMDSP) ; 3. C-BIT SET IF ERROR DURING .WPARS ; 4. EXMFDB (FILLED IN BY .WPARS) ; 5. WLDBLK (USED IN CASE WILDCARD UIC SPECIFIED IN EXMDSP) ; ; ROUTINES ; CALLED: 1. .WPARS ; 2. BLKTRP (THROUGH ERROR MACRO) ; ;- ; ; 0. COPY THE APPROPRIATE CSI DATASET INTO EXMDSP ; MOV CSIPTR,R4 ; R4 = CSIBLK ! CSIIND ADDRESS ADD #C.DSDS,R4 ; R4 -> APPROPRIATE DATASET MOV #6,R0 ; R0 = NUMBER OF WORDS IN A DATASET MOV #EXMDSP,R1 ; R1 -> EXMDSP 5$: MOV (R4)+,(R1)+ ; TRANSFER DATASET INTO EXMDSP SOB R0,5$ ; ; 1. SET UP THE DIRECTORY STRING STORAGE AREA IN WLDBLK. ; MOV #EXMDSP,R4 ; R4 -> EXMDSP MOV N.DIRD(R4),R0 ; R0 = LENGTH OF DIRECTORY STRING BEQ 20$ ; SKIP THIS IF NO DIR STRING MOV (R4),R1 ; R1 -> DIRECTORY STRING MOV #,R2 ; R2 -> DIR STRING STORAGE IN WLDBLK MOV R2,(R4) ; DATASET DIR ADDRESS IS RESET TO ; POINT TO WLDBLK STRING STORAGE AREA 10$: MOVB (R1)+,(R2)+ ; COPY DIR STRING INTO WLDBLK STORAGE SOB R0,10$ ; ; 2. PARSE THE INFO IN THE APPROPRIATE CSI BLOCK INTO THE EXMFDB. ; 20$: MOV #EXMFDB,R0 ; R0 -> EXAMINATION FILE FDB MOV #,R1 ; R1 -> EXMFDB FILE NAME BLOCK MOV #EXMDSP,R2 ; R2 -> DATA SET DESCRIPTOR MOV #EXMNMB,R3 ; R3 -> DEFAULT NAME BLOCK MOV #WLDBLK,R4 ; R4 -> WILDCARD UIC BLOCK CALL .WPARS ; PARSE THIS FILE SPECIFICATION BCC 90$ ; .PARSE OK? YES. TRAP WLPRXX ; NO. REPORT ERROR CMP #CSIIND,CSIPTR ; ERROR FROM AN INDIRECT FILE RECORD? BNE 80$ ; NO. GO DISPLAY SOURCE FILE NAME PRINT , ; YES. DISPLAY OFFENDING REC BR 85$ ; THEN GO EXIT 80$: PRINT SRCFIL,SRCSIZ ; SOURCE ERROR. DISPLAY SOURCE NAME. 85$: SEC ; INDICATE FAILURE, BR 999$ ; THEN EXIT ; ; 3. SAVE THE ORIGINAL VERSION NUMBER, IF ANY, IN EXMVER. ; 90$: MOV N.FVER(R1),EXMVER ; SAVE ORIGINAL VERSION CLC ; SET INDICATOR TO SUCCESS 999$: ; TARGET FOR ERROR RETURN .SBTTL FNDEXM-> FINDS THE NEXT, IF ANY, FILE MATCHING THE .SBTTL FNDEXM WILD DESCRIPTION ORIGINALLY GIVEN. FNDEXM:: ;+ ; ROUTINE: FNDEXM ; ; EFFECT: FINDS THE (NEXT) FILE MATCHING WILD FILE DESCRIPTION. ; ; INPUTS: 1. EXMFDB (FILLED BY .WPARS) ; 2. WLDBLK (CONTAINS INFO PERTAINING TO WILDCARD UICS) ; ; OUTPUTS: 1. EXMFDB (FILLED WITH INFO ABOUT NEXT FILE FOUND BY .FNDNX) ; 2. C-BIT SET IF NO MORE FILES TO BE FOUND. ; C-BIT CLEAR IF NEXT FILE FOUND ; ; ROUTINES ; CALLED: 1. .FNDNX ; ;- ; ; 1. SET UP REGISTERS AND FILE NAME BLOCK FOR .FNDNX ROUTINE ; MOV #,R1 ; R1 -> EXMFDB FILE NAME BLOCK ; MOV N.FVER(R1),EXMVER ; SAVE ORIGINAL VERSION NUMBER MOV #EXMFDB,R0 ; R0 -> EXAMINATION FILE FDB MOV #WLDBLK,R2 ; R2 -> WILDCARD UIC BLOCK MOV N.FVER(R1),N.FID+4(R1) ; COPY OLD VERSION TO UNUSED FID SLOT BIS #NB.WLV,N.STAT(R1) ; SET WILD VERSION INPUT FLAG MOV EXMVER,N.FVER(R1) ; RESTORE ORIGINAL VERSION ; .FNDNX REQUIRES THAT: ; R0 -> FDB ; R1 -> FILE NAME BLOCK ; R2 -> SCRATCH WILDCARD BLOCK ;------------------------------------- CALL .FNDNX ; FIND NEXT MATCHING FILE ; C-BIT SET IF .FNDNX ERROR, OTHERWISE ; C-BIT IS CLEAR. RETURN .SBTTL GETFIL-> OBTAINS THE ASCII FILE DESCRIPTION FOR THE FILE .SBTTL GETFIL FOUND BY ROUTINE FNDEXM, GETFIL:: ;+ ; ROUTINE: GETFIL ; ; EFFECTS: OBTAINS THE ASCII FILE NAME DESCRIPTION FOR THE FILE IN EXMFDB ; AND PLACES THE STRING IN EXMFIL AND THE SIZE OF THE STRING ; IN EXMFSZ. ; ; INPUTS: 1. EXMFDB (CONTAINS INFO VIA .FNDNX FROM FNDEXM) ; ; OUTPUTS: 1. EXMFIL (CONTAINS THE FILENAME DESCRIPTION STRING) ; 2. EXMFSZ (CONTAINS SIZE OF STRING IN EXMFIL) ; 3. REGISTERS R0-R3 PRESERVED ; ; ROUTINES ; CALLED: 1. $CBTA ; 2. .RDFDR ; 3. $C5TA ;- ; ; 1. OBTAIN THE DEVICE NAME ; PUSH ; SAVE R0-R3 ON THE STACK MOV #EXMFIL,R0 ; R0 -> EXAMINATION FILE DESCRIPTION MOV ,(R0)+ ; DEVICE NAME MOV ,R1 ; NEXT THE UNIT NUMBER MOV #^B1111100000001000,R2 ; SUPPRESS LEADING 0'S, OCTAL CALL $CBTA MOVB #':,(R0)+ ; INTERJECTING : ; ; 2. OBTAIN THE DIRECTORY NAME (UIC) ; BIT #NB.DIR, ; WAS AN EXPLICIT UIC GIVEN BEQ 50$ ; NO. GO FETCH DEFAULT UIC MOV ,R3 ; R3 -> DATA SET DESCRIPTOR MOV (R3),R1 ; R1 -> UIC STRING MOV N.DIRD(R3),R2 ; R2 = UIC STRING LENGTH 25$: MOVB (R1)+,(R0)+ ; TRANSFER DATA SET UIC TO FILE DESC. SOB R2,25$ ; CONTINUE TILL DONE BR 80$ ; GO GET FILE NAME. 50$: CALL .RDFDR ; FETCH DEFAULT UIC 55$: MOVB (R2)+,(R0)+ ; THEN TRANSFER SOB R1,55$ ; DONE? ; ; 3. OBTAIN THE FILE NAME ; 80$: MOV ,R1 ; NOW THE FILE NAME CALL $C5TA MOV ,R1 CALL $C5TA MOV ,R1 CALL $C5TA MOV #9.,R2 ; R2 = 9. = FILE NAME SIZE 85$: CMPB #40,-(R0) ; IS THIS A SPACE? BNE 90$ ; NO. SOB R2,85$ ; YES. TRY PRECEDING BYTE 90$: INC R0 ; R0 -> BYTE AFTER COMPRESSED NAME MOVB #'.,(R0)+ ; INTERJECTING PERIOD ; ; 4. OBTAIN THE FILE TYPE ; MOV ,R1 ; THEN THE FILE TYPE CALL $C5TA MOV #3.,R2 ; R2 = 3. = FILE TYPE SIZE 185$: CMPB #40,-(R0) ; IS THIS A SPACE? BNE 190$ ; NO. SOB R2,185$ ; YES. TRY PRECEDING BYTE 190$: INC R0 ; R0 -> BYTE AFTER COMPRESSED NAME MOVB #';,(R0)+ ; THEN ';' ; ; 5. OBTAIN THE FILE VERSION NUMBER ; MOV ,R1 ; FINALLY THE VERSION MOV #^B1111100000001000,R2 ; SUPRESS LEADING 0'S, OCTAL CALL $CBTA ; CONVERT BINARY TO ASCII ; ; 6. CALCULATE THE FILE DESCRIPTION SIZE AND PLACE IN EXMFSZ ; SUB #EXMFIL,R0 ; R0 = SIZE OF EXAMINATION FILE DESC. MOV R0,EXMFSZ ; SAVE FILE DESCRIPTION SIZE POP ; RESTORE R3-R0 FROM THE STACK RETURN .END