cdc:nos2.source:nam5871:findri
Table of Contents
FINDRI
Table Of Contents
- [00002] PROC FINDRI ( (INDXPTR),(RECID), INDXORD , SUCCESS )
Source Code
- FINDRI.txt
- *DECK FINDRI
- PROC FINDRI ( (INDXPTR),(RECID), INDXORD , SUCCESS );
- BEGIN # FINDRI #
- *IF DEF,IMS
- #
- **
- *
- * 1. PROC NAME AUTHOR DATE
- * FINDRI M. D. PICKARD 77/01/28
- *
- * 2. FUNCTIONAL DESCRIPTION
- * FINDRI WILL SEARCH A SUPIO RANDOM FILE INDEX TO FIND AN
- * ENTRY ASSOCIATED TO A RECORD IDENT AND PASS BACK IT"S ORDINAL
- * TO THE CALLER.
- *
- * 3. METHOD USED
- * IF THERE IS ANY THING IN THE LIST, RECID IS CHECK AGAINST
- * THE FIRST AND LAST ENTRY TO SEE IF IT MIGHT BE IN THE
- * INDEX. IF IT IS OUTSIDE THE INDEX THEN SUCCESS IS SET FALSE
- * AND THE ORDINAL IS SET TO 1 OR LINDX + 1, DEPENDING ON
- * WHICH END IT IS OUTSICE OF. OTHERWISE THE INDEX IS SEARCHED
- * UNTIL IT IS FOUND OR IT CANT BE FOUND. THE ORDINAL IS SET
- * TO THE "HIT" ORDINAL OR THE PLACE WHERE THIS RECID WOULD
- * BELONG IN THE INDEX IF IT IS NOT FOUND. SUCCESS IS SET
- * APPROPRIATELY.
- *
- * 4. ENTRY PARAMETERS
- * INDXPTR POINTER TO INDEX
- * RECID RECORD IDENT TO FIND
- *
- * 5. EXIT PARAMETERS
- * INDEXORD "HIT" ORDINAL, OR WHERE RECID BELONGS
- * SUCCESS FOUND/NOT FOUND FLAG
- *
- * 6. COMDECKS CALLED
- * SIOBASE SUPIO BASED ARRAY DEFINITIONS
- * SIODEFS SUPIO SYMPL DEFS
- *
- * 7. ROUTINES CALLED
- * NONE.
- *
- * 8. DAYFILE MESSAGES
- * NONE.
- #
- *ENDIF
- CONTROL NOLIST; # STOPS LIST OF SIODEFS AND SIOBASE #
- *CALL SIODEFS
- *CALL SIOBASE
- CONTROL LIST;
- ITEM
- INDXPTR U, # ADDRESS OF SUPIO INDEX #
- RECID U, # RECORD IDENT #
- INDXORD U, # INDEX ORDINAL #
- SUCCESS B; # FOUND RI SUCCESS FLAG #
- ITEM
- I U;
- P<SIOINDX> = INDXPTR; # FORMAT SUPIO INDEX #
- SUCCESS = FALSE; # INITIALIZE SUCCESS INDICATOR #
- IF LINDX[0] EQ 0
- THEN # THERE ARE NO ENTRIES, THIS RI BELONGS #
- INDXORD = 1; # SET RETURN ORDINAL AT ONE#
- ELSE
- BEGIN # SEE IF IT IS AFTER LAST OR BEFORE FIRST #
- IF ( RECID LS RI[1] ) OR ( RECID GR RI[LINDX[0]] )
- THEN # TREAT RECID"S BEFORE FIRST AND AFTER #
- BEGIN # LAST DIFFERENTLY #
- IF RECID LS RI[1]
- THEN # IT BELONGS BEFORE ENTRY ONE #
- INDXORD = 1; # IT SHOULD BE ENTRY ONE #
- ELSE # IT BELONGS AFTER LAST #
- INDXORD = LINDX[0] + 1; # GIVE IT LAST INDEX PLUS ONE #
- END
- ELSE # FIND IT"S PLACE #
- BEGIN
- INDXORD = 0; # CLEAR INDEX ORDINAL #
- FOR I = 1 WHILE ( I LQ LINDX[0] ) AND NOT SUCCESS DO
- BEGIN
- IF RECID EQ RI[I]
- THEN # PLACE IS HERE, FOUND RI #
- BEGIN
- SUCCESS = TRUE; # FOUND RI INDICATOR #
- INDXORD = I; # SET RETURN ORDINAL #
- END
- ELSE # SHOULD WE GO ANY FURTHER #
- BEGIN
- IF RECID LS RI[I]
- THEN # RI NOT FOUND, BUT IT BELONGS HERE #
- BEGIN
- INDXORD = I; # SET RETURN ORDINAL #
- I = LINDX[0] + 1; # FORCE END OF LOOP #
- END
- ELSE # BUMP THE INDEX ORDINAL #
- I = I + 1;
- END
- END
- END
- END
- RETURN;
- END
- TERM # FINDRI #
cdc/nos2.source/nam5871/findri.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator