*DECK OPENSIO PROC OPENSIO( (FET),(OPTION), STATIS ); BEGIN # OPENSIO # CONTROL NOLIST; # EXECUSRS # CONTROL LIST; *IF DEF,IMS # ** * * 1. PROC NAME AUTHOR DATE * OPENSIO M. D. PICKARD 77/01/10 * * 2. FUNCTIONAL DESCRIPTION * OPENSIO WILL OPEN AN EXISTING SUPIO RANDOM FILE OR CREATE * A NEW SUPIO RANDOM FILE. * * 3. METHOD USED * IF THE FET IS RANDOM, THE FILE IS OPENED W/ ALTER IF THE * OPTION IS NEW OR W/ THE OPTION IF OPTION IS NOT NEW. IF THE * OPEN IS SUCCESSFUL AND THE OPTION WAS NEW, THE INITIAL SUPIO * INDEX IS BUILT. IF THE OPTION WAS NOT NEW THE INDEX IS * CHECKED TO SEE IF IT IS A SUPIO INDEX AND THAT THE INDEX * AREA LENGTH IS LARGE ENOUGH. IF THE AREA IS NOT LARGE * ENOUGH, THE NEEDED LENGTH IS PLACE IN THE FIRST WORD OF THE * INDEX AREA * * 4. ENTRY PARAMETERS * FET ADDRESS OF THE FET * THE FET MUST CONTAIN THE INDEX BUFFER * FWA AND LENGTH IN WORD FET+7 * OPTION OPEN OPTION * 0 - READ/WRITE WITH REWIND * "NEW" - OPEN W/ ALTER AS NEW FILE * "ALTER" - READ/WRITE, REWIND * "ALTERNR" - READ/WRITE, NO REWIND * "NR" - NO REWIND * "READ" - READ, REWIND * "READNR" - READ, NO REWIND * "WRITE" - WRITE, REWIND * "WRITENR" - WRITE, NO REWIND * * 5. EXIT PARAMETERS * STATIS RETURN STATUS * 0 = OPEN SUCCESSFUL * NOTSIOF - NOT A SUPIO FILE * INDXSML - INDEX AREA TO SMALL * INDXERR - INDEX POINTER IN ERROR * RANRSEQ - RANDOM REQ. ON SEQ. FILE * * 6. COMDECKS CALLED * SIODEFS SUPIO SYMPL DEFS * SIOBASE SUPIO BASED ARRAY DEFINITIONS * * 7. ROUTINES CALLED * OPEN MACREL OPEN SYMPL INTERFACE * RECALL MACREL CPU RECALL SYMPL INTERFACE * * 8. DAYFILE MESSAGES * NONE. * # *ENDIF *CALL SIODEFS *CALL SIOBASE ITEM FET U, # FET ADDRESS # OPTION C(10), # OPEN OPTION # STATIS U, # RETURN STATUS # TEMP C(10); # FOR INTEGER TO CHARACTER CONVERSION # XREF BEGIN PROC ABORT; PROC MESSAGE; PROC OPEN; PROC RECALL; FUNC XCOD C(10); END DEF INDXAT # O"23" #; # INDEX BUFFER TOO SMALL ABN. TERM. CODE # ARRAY ABNTMSG [0:0] S(4); BEGIN ITEM ABNTMSG1 C(0,0,33) = ["OPEN ERROR, ABN. TERM. CODE = XX."]; ITEM ABNTMSG2 C(3,0,2); ITEM ABNTMSGZ U(3,18,42) = [ 0 ]; END P = FET; # FORMAT FET # IF FETRAN[0] THEN # FET IS A RANDOM FET # BEGIN # SEE IF INDEX POINTERS ARE OK # IF ( FETINDX[0] GQ 2 ) AND ( FETINDL GQ MINSIOI ) THEN # INDEX POINTERS OK # BEGIN # SEE IF OPTION IS NEW # P = FETINDX[0]; # FORMAT INDEX AREA # FETFST[0] = FETINDX[0]; # SET CIRCULAR BUFFER PARAMS FOR # # EXISTING FILES # FETIN[0] = FETINDX[0]; FETOUT[0] = FETINDX[0]; FETLMT[0] = FETINDX[0] + FETINDL[0] + 1; FETEP[0] = TRUE; IF OPTION EQ "NEW" THEN OPEN(SIOFET,"ALTER"); # OPEN W/ ALTER # ELSE OPEN(SIOFET,OPTION); # OPEN W/ SPECIFIED OPTION # RECALL(SIOFET); # WAIT TIL COMPLETE BIT SET # FETEP[0] = FALSE; IF FETABNT[0] EQ INDXAT THEN # INDEX BUFFER TOO SMALL # BEGIN FETABNT[0] = 0; # CLEAR FOR NEXT USER OF FET # STATIS = INDXSML; # INDEX AREA TOO SMALL # RETINDL[0] = (LINDX[0] + 1) * 2; # NEEDED SIZE # RETURN; # ***** EXIT ***** # END IF FETABNT[0] NQ 0 THEN # OPEN ERROR # BEGIN TEMP = XCOD(FETABNT[0]); ABNTMSG2[0] = C<8,2>TEMP; MESSAGE(ABNTMSG,3); ABORT; END IF FETRAN[0] THEN # OPEN WAS SUCCESSFUL # BEGIN # SEE IF OPTION WAS NEW # IF OPTION EQ "NEW" THEN # OPTION IS NEW # BEGIN # OPTION IS NEW, INITIALIZE SUPIO INDEX # SIONAME[0] = "SUPIOINDEX"; # SUPIO INDEX NAME IN HEADER # CINDX[0] = 0; # INITIALIZE CURRENT POSITION # LINDX[0] = 0; # INITIALIZE LAST INDEX ORDINAL USED # HDRRSV[0] = 0; # CLEAR HEADER RESERVED # STATIS = 0; # SUCCESSFUL COMPLETE # END ELSE # OPTION WAS NOT NEW # BEGIN # SEE IF FILE WAS A SUPIO FILE # IF SIONAME[0] NQ "SUPIOINDEX" THEN # NOT A SUPIO INDEX # BEGIN STATIS = NOTSIOF; # NOT A SUPIO FILE # END ELSE # FILE IS SUPIO FILE # BEGIN # SEE IF INDEX BUFFER WAS BIG ENOUGH # IF ( ( LINDX[0] + 1 ) * SIOINDL ) GR FETINDL[0] THEN # INDEX TOO SMALL # BEGIN STATIS = INDXSML; # INDEX AREA TOO SMALL # RETINDL[0] = ( LINDX[0] + 1 ) * 2; # NEEDED SIZE # END ELSE STATIS = 0; # EVERYTHING IS OK. # END END END ELSE # FILE NOT SUPIO FILE, RANDOM BIT CLEARED # STATIS = RANRSEQ; # RANDOM REQUEST ON SEQUENTIAL FILE # END ELSE # INDEX POINTERS NOT GOOD # STATIS = INDXERR; # INDEX POINTER ERROR ON OPEN # END ELSE # FET IS NOT A RANDOM FET # STATIS = RANRSEQ; # RANDOM REQUEST ON SEQUENTIAL FILE # RETURN; END TERM # OPENSIO #