|
Merry Christmas again... May your Christmas joy last longer than a GO SAVE
21.
I have finally written a program tha uses bsearch. I am seeing a variance
between how it is supposed to work (in the Sorcerer's Guide), and how it is
working for me anyways.
It states that (p 130), if no match was found, a NULL pointer is returned.
In the program I have written, if no match is found, it instead returns a
poiter to another element, that doesn't match the first element (perhaps the
last element it inspected?).
I have debugged it, and I see where it continually calls my finder
subprocedure, and when it finds that there is no match, it doesn't return a
null pointer. It returns a pointer to another element that is unequal. I
can get around this, by "pointing" a field at the argument that it returns,
and testing for equality, but before I hard-code a work-around, I wanted to
get your collective opinions. Here is the code:
The subproc that bsearch calls back:
P ElemFind B
D ElemFind PI 10I 0
D ElemCheckFor * Value
D ElemCandidate * Value
D Element1 S 12A Based(ElemCheckFor)
D Element2 S 12A Based(ElemCandidate)
D ElemStatus S 10I 0 Inz
/Free
Select;
When Element1 < Element2;
ElemStatus = -1;
When Element2 > Element2;
ElemStatus = 1;
Other;
ElemStatus = 0;
EndSl;
Return ElemStatus;
/End-Free
P ElemFind E
The subprocedure that calls bsearch:
P CheckUpdate B
D CheckUpdate PI N
D Acronym 3A Const
D Family 9P 0 Const
D ElemSig DS Qualified Inz
D Acro 3A
D Fam 9A
D pElemSig S * Inz(%Addr(ElemSig))
D WasItFound S N Inz
D pShowMe S * Inz
D ShowMe S 12A Based(pShowMe)
/Free
ElemSig.Acro = Acronym;
ElemSig.Fam = %EditC(Family : 'X');
pShowMe = FindIt( pElemSig :
pUserSpace :
cUpdatedFam :
12 :
%PAddr(ElemFind));
If pShowMe = *Null;
WasItFound = *Off;
Else;
WasItFound = *On;
EndIf;
Return WasItFound;
/End-Free
P CheckUpdate E
In the above code, I only mapped the ShowMe variables to see what element it
was returning a pointer to.
So basically, I just need to know if an element exists in the user space. I
call the CheckUpdate proc, with the two parms, which in turn calls FindIt
(which is the bsearch Prototype), and I always get a *On indicator from
CheckUpdate -- whether the element exists or not.
--
"Enter any 11-digit prime number to continue..."
"In Hebrew SQL, how do you use right() and left()?..." - Random Thought
"If all you have is a hammer, all your problems begin to look like nails"
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.