.TITLE PARSE .IDENT /120978/ ; SUBROUTINE TO PARSE FILE DESCRIPTOR LINE ; 1ST ARGUMENT = ADDRESS OF FDB ; 2CND ARGUMENT = ADDRESS OF ASCII FILE DESCRIPTOR STRING. ; I.E. DK2:[120,121]NAME.INF;1 ; 3RD ARGUMENT = ADDRESS OF THE LOGICAL UNIT NUMBER ; 4TH OPTIONAL ARGUMENT = ADDRESS TO RETURN ERROR CODE >0=NO ERROR .MCALL NMBLK$ PARSE:: MOV R0,-(SP) ;SAVE REGISTERS MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV 4(R5),R1 ;STORE INITIAL ADDRESS OF ASCII FILE LINE. MOV #DSPT,R3 ;ADDRESS OF FILE DESCRIPTOR BLOCK MOV #':,R2 ;STORE END OF DEVICE SEPARATOR. JSR PC,FIND ;IS DEVICE DESRIPTOR IN STRING? MOV R0,(R3)+ BEQ 1$ ;NO DEVICE DESCRIPTOR MOV R1,(R3)+ ;STORE DEVICE DESCRIPTOR ADD R0,R1 BR 2$ 1$: CLR (R3)+ ;ZERO ADDRESS OF UIC 2$: MOV #'],R2 ;STORE END OF UIC DESCRIPTOR = ] JSR PC,FIND MOV R0,(R3)+ ;STORE UIC DESCRIPTOR BEQ 3$ ;NO UIC DESCRIPTOR MOV R1,(R3)+ ADD R0,R1 ;SKIP PAST UIC IN ASCII STRING BR 4$ 3$: CLR (R3)+ 4$: CLR R2 ;STORE END OF FILE NAME DESCRIPTOR=0 JSR PC,FIND DEC R0 MOV R0,(R3)+ BLE ERR MOV R1,(R3)+ ;STORE FILE NAME DESCRIPTOR MOV 2(R5),R0 ;FETCH ADDRESS OF FDB IN R0 MOV R0,R1 MOV #DSPT,F.DSPT(R0) MOV @6(R5),F.LUN(R0) ;STORE LOGICAL UNIT NUMBER IN FDB ADD #F.FNB,R1 ;FETCH ADDRESS OF NAME BLOCK IN FDB IN R1 MOV #DSPT,R2 ;FETCH ADDRESS OF DATASET DESCRIPTOR IN R2 MOV #DFNB,R3 ;FETCH ADDRESS OF DEFAULT FILE NAME BLOCK IN R3 CALL .PARSE ;PARSE THE DATASET DESCRIPTOR BCS RET ;OK ERR: MOV #1,ABORT ;NO = SET ABORT FLAG RET: CMP (R5),#4 ;FOUR ARGUMENTS? BLT 1$ MOVB F.ERR(R0),R0 ;FETCH ERROR CODE DOING A SIGN EXTEND ON BYTE MOV R0,@10(R5) ;STORE ERROR CODE 1$: MOV (SP)+,R4 ;RESTORE REGISTERS MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC ; SUROUTINE TO FIND CHARACTERS IN A STRING ; R0=IS RETURNED AS THE NUMBER OF CHARACTERS IN SUBSTRING ; IF R0=ZERO THEN CHARACTER WAS NOT FOUND IN STRING ; R1=ADDRESS OF STRING TO BE SEARCHED ; R2=CHARACTER TO BE SEARCHED FOR FIND: MOV R1,R0 1$: CMPB (R0),R2 ;CHARACTER IN STRING? BEQ 2$ ;YES TSTB (R0)+ ;END OF STRING? BNE 1$ ;NO CLR R0 BR 3$ 2$: SUB R1,R0 INC R0 3$: RTS PC ; DEFAULT FILE NAME BLOCK ; NMBLK$ NAME,TYPE,VERSION,DEVICE,UNIT DFNB: NMBLK$ TEXT,,,SY,0 ;NULL VERSION MEANS CURRENT VERSION ; DATASET DESCRIPTOR BLOCK DSPT: .WORD 0 ;NBR. BYTES IN DEVICE NAME .WORD 0 ;ADDRESS OF STRING CONTAINING DEVICE NAME. .WORD 0 ;NBR. BYTES IN UIC .WORD 0 ;ADDRESS OF STRING CONTAINING UIC .WORD 0 ;NBR. BYTES IN FILE NAME. .WORD 0 ;ADDRESS OF STRING CONTAINING FILE NAME. .PSECT VABORT RW,D,GBL,REL,OVR ABORT: .BLKW 1 .END