.TITLE RMSCON .IDENT /01.00/ .PSECT RMSFTN ; ; ; ;BRIDGEPORT-TEXTRON BRIDGEPORT-TEXTRON BRIDGEPORT-TEXTRON BRIDGEPORT-TEXTRON ;B B ;R PURPOSE: A FORTRAN COMPATIBLE RMS INTERFACE R ;I I ;D D ;G AUTHOR: ARTHUR P. GAUGHAN, JR. G ;E E ;P DATE: 5/31/78 P ;O O ;R GLOBAL SYMBOLS DEFINED IN THIS MODULE: RMSCON R ;T T ;! GLOBAL SYMBOLS REFERENCED IN THIS MODULE: $RQCB, $RLCB, $ZECB ! ;T T ;E E ;X X ;T T ;R R ;O INPUTS: CALL RMSCON (LUN,KEYNUM,MODE,RECBUF,RECSIZ,ISTAT) O ;N CALLG RMSCON <#LUN,#KEYNUM,#MODE,#RECBUF,#RECSIZ,#ISTAT> N ;! OUTPUTS: ISTAT ! ;! ! ;H HOUSEKEEPING: H ;O O ;R R ;S NOTES: S ;H H ;A A ;M M ;BRIDGEPORT-TEXTRON BRIDGEPORT-TEXTRON BRIDGEPORT-TEXTRON BRIDGEPORT-TEXTRON ; ; ; .MCALL $CONNECT .MCALL RABOF$,RAB$BT .MCALL SMACIT ; ; ; RABOF$ RMS$L ;DEFINE OFFSETS LOCALLY RAB$BT DFIN$L ;DEFINE RAB BIT PATTERNS LOCALLY SMACIT ;DEFINE SUPERMAC ; ; ; ;DEFINE FORTRAN COMPATIBLE PARAMETER BLOCK ; ; ; LUN=2 KEYNUM=4 MODE=6 RECBUF=10 RECSIZ=12 ISTAT=14 NULARG=-1 ; ; ; PROCEDURE RMSCON,GLOBAL ; ; ; IFB (R5) NE #6 ;SIX ARGUMENTS??? TRAP ;IF NOT, QUIT HERE END IF ISTAT(R5) EQ #NULARG ;STATUS BLOCK SPECIFIED? EMT ;IF NOT, QUIT HERE END ; ; ; IF LUN(R5) EQ #NULARG ;LUN SPECIFIED? LET @ISTAT(R5) := #XX$LUN ;SAY LUN NOT SPECIFIED $RETURN ;RETURN TO CALLER END LET R2 := @LUN(R5) ;PICK UP LUN LET R2 := R2 L.SHIFT 1 ;CONVERT TO WORD INDEX IF $$$FAB(R2) EQ #0 ;FILE ALREADY OPEN??? LET @ISTAT(R5) := #XX$OPN ;SAY FILE NOT OPEN $RETURN ;RETURN TO CALLER END IF $$$RAB(R2) NE #0 ;RECORD STREAM ALREADY CONNECTED? LET @ISTAT(R5) := #XX$STM ;SAY STREAM ALREADY CONNECTED $RETURN ;RETURN TO CALLER END IF RECBUF(R5) EQ #NULARG OR RECSIZ(R5) EQ #NULARG;NULL BUFFER ARGUMENTS? LET @ISTAT(R5) := #XX$NOP ;SAY NO OPERATION POSSSIBLE $RETURN ;RETURN TO CALLER END IF KEYNUM(R5) NE #NULARG ;KEY OF REFERENCE SPECIFIED? LET R0 := $$$FAB(R2) ;YES, GET FAB POINTER IFB @KEYNUM(R5) HIS O$CTX(R0) ;LEGAL KEY NUMBER? LET @ISTAT(R5) := #XX$KEY ;NOPE, SAY ILLEGAL KEY NUMBER $RETURN ;RETURN TO CALLER END END IF MODE(R5) NE #NULARG AND @MODE(R5) HI #RB$RFA ;ILLEGAL ACCESS MODE? LET @ISTAT(R5) := #XX$RAC ;YES, SET ILLEGAL ACCESS MODE $RETURN ;RETURN TO CALLER END PUSH R2 ;SAVE LUN INDEX ; ; ; $CALL $RQCB <#$$$RMS,#RB$BLN> ;ALLOCATE A RAB ON.ERROR ;ALLOCATION ERROR - LET @ISTAT(R5) := #XX$ALL ;SAY ALLLOCATION ERROR POP R2 ;RESTORE STACK $RETURN ;RETURN TO CALLER END $CALL $ZECB ;ZERO RAB BLOCK LET O$BID(R0) :B= #RB$BID ;SET RAB IDENTIFIER LET O$BLN(R0) :B= #RB$BLN ;SET SIZE OF RAB IF MODE(R5) EQ #NULARG ;ACCESS MODE SPECIFIED? LET O$RAC(R0) :B= #RB$KEY ;NOPE, SET KEYED ACCESS BY DEFAULT ELSE LET O$RAC(R0) :B= @MODE(R5) ;YES, SET ACCESS MODE END IF KEYNUM(R5) NE #NULARG ;KEY OF REFERENCE SPECIFIED? LET O$KRF(R0) :B= @KEYNUM(R5) ;YES, OVERRIDE PRIMARY KEY DEFAULT END LET O$USZ(R0) := @RECSIZ(R5) ;SET USER RECORD AREA SIZE LET O$UBF(R0) := RECBUF(R5) ;SET USER RECORD AREA ADDR LET O$RSZ(R0) := @RECSIZ(R5) ;SET RECORD BUFFER SIZE LET O$RBF(R0) := RECBUF(R5) ;SET RECORD AREA ADDR LET O$MBF(R0) :B= #2 ;SET MULTI-BUFFER COUNT POP R2 ;RESTORE LUN INDEX LET O$FAB(R0) := $$$FAB(R2) ;SET FAB ADDRESS $CONNECT R0 ;CONNECT A RECORD ACCESS STREAM IF O$STS(R0) NE #SU$SUC ;CONNECT SUCCESSFUL? LET @ISTAT(R5) := O$STS(R0) ;SET FAILURE CODE $CALL $RLCB <#$$$RMS,#RB$BLN,R0> ;RELEASE THE RAB $RETURN ;RETURN TO CALLER END LET $$$RAB(R2) := R0 ;INSERT RAB ADDRESS INTO TABLE LET @ISTAT(R5) := #SU$SUC ;SET SUCCESS $RETURN ;RETURN TO CALLER ; ; ; ;/////////////////////////////////////////////////////////////////////// .END