;$IO OPEN OPEN FILE FOR INPUT/OUTPUT ;. 26-SEPT-76 P. CANNON ;. ;. THIS MODULE OPENS A FILE FOR INPUT/OUTPUT ;. OPERATIONS. ;. ;. CALL OPEN(FDB,HOC,LUN,/DEV/,/UIC/,/FN/,/IER/) ;. ;. FDB FILE DESCRIPTOR BLOCK ARRAY INTO WHICH FDB IS BUILT. ;. HOC HOW OPEN CODE (RACC,FACC) ;. 1 IMPLIES INPUT ;. 16 IMPLIES OUTPUT ;. LUN LOGICAL UNIT NUMBER ;. DEV DEVICE MNEMONIC CHARACTER STRING E.G. 'SY0:' ;. UIC UIC MNEMONIC CHARACTER STRING E.G. '[200,200]' ;. FN FILE NAME E.G. 'MYFILE.FTN;3' ;. IER ERROR FLAG ;. POSITIVE IMPLIES NO ERROR ;. ZERO IMPLIES AN ERROR ;. NEGATIVE IMPLIES AN ERROR ; ; ; THE GENERAL FORM OF THE OPEN$ MACRO IS : ; ; OPEN$ FDB,FACC,LUN,DSPT,DFNB,RACC,URBA,URBS,ERR ; ; FDB FILE DESCRIPTOR BLOCK ; FACC FILE ACCESS SPECIFICATION (E.G. READ ONLY, ; READ/WRITE, ETC. ) ; LUN LOGICAL UNIT NUMBER ; DSPT ADDRESS OF DATASET DESCRIPTOR BLOCK ; DFNB ADDRESS OF THE DEFAULT FILE NAME BLOCK ; RACC RECORD ACCESS SPECIFICATION (E.G. BLOCK I/O, ; RANDOM ACCESS,ETC. ) ; URBA ADDRESS OF THE USER RECORD BUFFER ; ; ; URBS THE SIZE OF THE USER RECORD BUFFER ; ; ERR THE SYMBOLIC ADDRESS OF AN OPTIONAL USER-CODED ; ERROR-HANDLING ROUTINE. ; .TITLE OPEN - OPEN A FILE FOR INPUT/OUTPUT .IDENT /V01/ .PSECT .GLOBL OPEN .GLOBL PARM,IOFERR .MCALL OPEN$,NMBLK$ ; EF: .WORD 0 ;ADDRESS OF PARAMETER LIST .WORD 0 ;NBR OF TIMES CALLED OPEN: MOV R5,EF ;SAVE ADDRESS OF PARAMETER LIST INC EF+2 ;ADD ONE TO THE NBR OF TIMES CALLED JSR PC,PARM ;LOAD PARAMETERS ;R4= NBR OF PARAMETERS ;R0= ADDRESS OF FDB ;R1= ADDRESS OF HOC CODE ;R2= LOGICAL UNIT NUMBER SUB #3,R4 ;REMOVE 3 FROM THE PARAMETER COUNT ;IS THAT ALL THE PARAMETERS THAT ;WERE SPECIFIED ? BLE XIT ;YES-THEN EXIT MOV R1,-(SP) ;SAVE ADDRESS OF HOC CODE ;RACC UPPER BYTE ;FACC LOWER BYTE MOV R2,-(SP) ;SAVE LOGICAL UNIT NUMBER MOV #DSPT,R3 ;LOAD START ADDRESS OF DATASET ;DESCRIPTOR BLOCK MOV #5.,R2 ;LOAD MAXIMUM NBR OF CHARACTERS ;THAT CAN BE IN A DEVICE NAME. JSR PC,DSPTST ;SCAN 'DEV' PARAMETER AND ENTER ;IT IN THE DATASET DESCRIPTOR BLOCK MOV #9.,R2 ;LOAD MAXIMUM NBR OF CHARACTERS ;THAT CAN BE IN A UIC JSR PC,DSPTST ;SCAN 'UIC' PARAMETER AND ENTER ;IT IN THE DATASET DESCRIPTOR BLOCK MOV #16.,R2 ;LOAD MAXIMUM NBR OF CHARACTERS ;THAT CAN BE IN A FILENAME. JSR PC,DSPTST ;SCAN 'FN' (FILE NAME) AND ENTER ;IT IN THE DATASET DESCRIPTOR BLOCK MOV (SP)+,R2 ;RECALL THE LOGICAL UNIT NUMBER MOV (SP)+,R3 ;RECALL ADDRESS OF HOC CODE MOVB (R3)+,R1 ;LOAD THE FACC MOVB (R3)+,R3 ;LOAD THE RACC ; OPEN$ FDB,FACC,LUN,DSPT,DFNB,RACC OPEN$ R0,R1,R2,#DSPT,#DFNB,R3 JSR PC,IOFERR ;TEST THE F.ERR OFFSET IN ;THE FDB AND RETURN THE STATUS ;TO THE CALLING FORTRAN PROGRAM. XIT: RTS PC ;EXIT .PAGE .SBTTL DSPSTP - BUILD THE DATA SET DESCRIPTOR BLOCK ;ENTER ; R3 POINTS TO THE DOUBLE WORD FIELD IN THE DATASET DESCRIPTOR ; BLOCK WHICH IS TO BE FILLED IN. ; R5 POINTS TO THE ADDRESS OF THE STRING (ARGUMENT) TO BE ; PLACED IN THE DATASET DESCRIPTOR BLOCK. ; R2 CONTAINS THE MAXIMUM NUMBER OF CHARACTERS ALLOWED IN THE ; STRING ; R4 CONTAINS THE NUMBER OF PARAMETERS THAT REMAIN IN THE LIST. ;EXIT ; R3 IS ADVANCED BY 4 TO POINT TO THE NEXT DOUBLE WORD FIELD ; R5 POINTS TO THE NEXT ARGUMENT IN THE LIST ; ; THE FIRST WORD OF THE DOUBLE WORD FIELD CONTAINS THE NUMBER ; OF BYTES IN THE STRING. ; ; THE SECOND WORD CONTAINS THE ADDRESS OF THE STRING. ; ; BOTH WORDS ARE SET TO ZERO IF NO STRING (ARGUMENT) IS ; PRESENT. ; R4 IS DECREMENTED ; DSPTST: CLR (R3) ;SET STRING LENGTH TO ZERO. DEC R4 ;DECREMENT NBR OF PARAMETERS ;ARE THERE ANY PARAMETERS LEFT ? BLT DSPXT ;YES-THEN EXIT MOV (R5),R1 ;LOAD ADDRESS OF THE STRING CMP R1,#-1 ;IS IT EQUAL TO -1 ? BEQ DSPXT ;YES- THEN EXIT BECAUSE THE PARAMETER ;WAS NOT SPECIFIED. 1$: TSTB (R1)+ ;IS THE BYTE NULL ? BEQ DSPXT ;YES- THEN EXIT INC (R3) ;NO -ADVANCE BYTE COUNT SOB R2,1$ ;AND LOOK AT NEXT CHARACTER ; ; ; DSPXT: MOV (R5)+,R1 ;LOAD THE STRING ADDRESS AN ADVANCE ;TO THE NEXT ARGUMENT. TST (R3)+ ;ADVANCE POINTER TO ADDR OF STRING ;IN DATA SET DESCRIPTOR BLOCK ;IS THE BYTE COUNT ZERO ? BNE 1$ ;NO-THEN GO STORE THE STRING ADDRESS CLR R1 ;YES-CLEAR THE STRING ADDRESS 1$: MOV R1,(R3)+ ;STORE THE STRING ADDRESS AND ADVANCE ;POINTER TO THE NEXT DOUBLE WORD ;FIELD IN THE DATASET DESCRIPTOR ;BLOCK. RTS PC ;EXIT ; ; ; THE DATASET DESCRIPTOR BLOCK ; DSPT: .WORD 0 ;NBR OF BYTES IN DEVICE NAME .WORD 0 ;ADDRESS OF STRING THAT CONTAINS ;THE DEVICE NAME .WORD 0 ;NBR OF BYTES IN THE UIC .WORD 0 ;ADDRESS OF STRING THAT CONTAINS ;THE UIC .WORD 0 ;NBR OF BYTES IN THE FILE NAME .WORD 0 ;ADDRESS OF STRING THAT CONTAINS ;THE FILE NAME. ; ; ; THE DEFAULT FILE NAME BLOCK ; ; NMBLK$ FILE NAME,FILE TYPE,VERSION NUMBER,DEVICE,UNIT DFNB: NMBLK$ FTN0,DAT,,SY,0 ;NULL VERSION NBR MEANS CURRENT VERSION .END