Using BTPFIND and BTPSEQ

Once a multivalued B-tree has been created, you must remember than every B-TREE-P subroutine call for that B-tree will be using an item ID number concatenated with a multivalue position number. For example, here is a program similar to LIST.NAMES from BTP/Branches #1:

    LIST.DATES
001 OPEN "B-TREE" TO BFILE ELSE STOP
002 OPEN "NAMES" TO NFILE ELSE STOP
003 ID = "" ; ITEM = ""
004 CALL BTPFIND("DATES",BFILE,NFILE,ID,ITEM,NODE,POS)
005 LOOP
006   REAL.ID = FIELD(ID,"*",1)
007   VALUE = FIELD(ID,"*",2)
008   READ NAMES FROM NFILE, REAL.ID ELSE NAMES = ""
009   PRINT ; PRINT ID
010   PRINT OCONV(NAMES<7,VALUE>,"D2-")
011   CALL BTPSEQ(BFILE, NODE, POS, "NEXT", ID)
012 UNTIL ID = "" DO REPEAT
013 STOP
014 END

In the above example, BTPFIND is used by LIST.DATES to find the first entry in the B-tree, just like LIST.NAMES did, but the ID argument returned by BTPFIND is an identifier concatenated with a multivalue number, since the B-tree being searched is DATES. That's why FIELD statements are used to separate the identifier and multivalue number before the record is retrieved from the data file and the proper multivalue date is extracted and printed.

BTPSEQ is used to find the next B-tree entry, so that the whole file can be listed in exploded multivalue order. Just like BTPFIND, the ID argument returned by BTPSEQ is a concatenated identifier*multivalue pair, since the B-tree is DATES.