.TITLE DBKOF4 .IDENT /VS01.0/ ; ; THIS ROUTINE IS CALLED FROM DBKOF (THE USER INTERFACE). SEE ; DBKOF.FTN FOR COMMENTS. ; ; CALL DBKOF4 (LUN, MODE, NER) ; ; LUN = LOGICAL UNIT NUMBER TO OPEN ; MODE = 0-3 (SEE DBKOF) ; NER = 0 IF OK, FCS ERROR CODE IF NOT ; ; **NOTE** ; DBKOF4 IS CALLED FROM DBKOF.FTN - DBKOF.FTN FILLS IN ; THE FILE DESCRIPTOR BLOCKS BY CALLING FPARS. DBKOF4 SHOULD ; NOT BE CALLED IN ANY OTHER CONTEXT OR RESULTS WILL BE UNKNOWN. ; .NLIST ME .MCALL FDAT$R, FDRC$R, FDOP$R .MCALL OPEN$R, OPEN$U, OPEN$W, OPNT$D ; .GLOBL $FCHNL ; FDBOF = 14 RECSZ = 512. ; RECORD SIZE TO FILL IN ; SO WILL WORK FOR FILE-11 TAPE. INISZ = 22. ; INITIAL FILE CREATION SIZE EXTSZ = 22. ; DEFAULT EXTEND SIZE ; ; DBKOFN: .RAD50 /DBKOF4/ ; TRACE-BACK NAME ; DSPTCH: .WORD IF00 ; READONLY .WORD IF01 ; OPEN EXISTING FOR WRITE .WORD IF02 ; NEW FILE .WORD IF03 ; TEMP & MARKED FOR DELETE ; ; DBKOF4:: CALL $SAVAL MOV #DBKOFN,R0 MOV (R0)+,R4 MOV (R0)+,-(SP) JSR R4,NAM$ ; TRACE-BACK CHAIN ; CLR @6(R5) ; CLEAR ERROR CODE MOV @2(R5),R2 ; LUN TO OPEN MOV @#$OTSV,R3 ; OTS IMPURE AREA POINTER CALL $FCHNL ; POINT R0 TO FFDB ADD #FDBOF,R0 ; AND TO FDB ; ; INIT THE FDB WITH THE DEFAULTS ; ; FDAT$R R0,#R.FIX,,#RECSZ,#INISZ,#EXTSZ FDAT$R R0,#R.FIX,,#RECSZ,,#EXTSZ FDRC$R R0,#FD.RWM ; BLOCK (READ$/WRITE$) OPS FDOP$R R0,@2(R5) ; LUN ; ; DISPATCH TO APPROPRIATE OPEN MACRO ; MOV @4(R5),R1 ; CHECKED FROM DBKOF.FTN ASL R1 ; BYTE OFFSET JMP @DSPTCH(R1) ; IF00: OPEN$R R0 BR I200 ; IF01: OPEN$U R0 BR I200 ; IF02: OPEN$W R0 BR I200 ; IF03: OPNT$D R0 ; ; CHECK FOR ERRORS DURING OPEN ; I200: BCC I400 ; NO ERRORS - RETURN MOVB F.ERR(R0),R1 ; GET FCS ERROR CODE - EXT SIGN MOV R1,@6(R5) ; BACK TO ARG LIST ; I400: RETURN .END