| 1 | DICLIX0 ;SEA/TOAD,SF/TKW-FileMan: Continuation of DICLIX ;7/31/98  09:03
 | 
|---|
| 2 |  ;;22.0;VA FileMan;;Mar 30, 1999;
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | FINDMORE(DISUB,DIVAL,DIPART,DINDEX,DIMORE) ; Look across the numeric/string collation boundary
 | 
|---|
| 6 |  ; Searching forwards
 | 
|---|
| 7 |  N S,DIOUT S DIOUT=0
 | 
|---|
| 8 |  I DINDEX(DISUB,"WAY")=1 D  Q
 | 
|---|
| 9 |  . I +$P(DIVAL,"E")=DIVAL,DIPART'=0 F  D  Q:DIOUT!(+$P(DIVAL,"E")'=DIVAL)
 | 
|---|
| 10 |  . . I DIPART<DIVAL,((DIPART[".")!(DIPART<0)) S DIVAL=" " Q
 | 
|---|
| 11 |  . . D NXT(.DIVAL,DIPART,1,DINDEX(DISUB,"ROOT"),.DIOUT) Q
 | 
|---|
| 12 |  . Q:DIOUT
 | 
|---|
| 13 |  . S DIMORE=0
 | 
|---|
| 14 |  . S S=$O(@DINDEX(DISUB,"ROOT")@(DIPART_" "),-1)
 | 
|---|
| 15 |  . S S=$O(@DINDEX(DISUB,"ROOT")@(S))
 | 
|---|
| 16 |  . Q:S'=""&(DIVAL]]S)  S DIVAL=S Q
 | 
|---|
| 17 |  ; Searching backwards
 | 
|---|
| 18 |  I +$P(DIVAL,"E")'=DIVAL S DIVAL=$O(@DINDEX(DISUB,"ROOT")@(" "),-1) Q:DIVAL=""
 | 
|---|
| 19 |  I DIPART=0 S DIVAL=$S($D(@DINDEX(DISUB,"ROOT")@(0)):0,1:"") Q
 | 
|---|
| 20 |  I DIPART>DIVAL,((DIPART[".")!(DIPART>0)) S DIVAL="" Q
 | 
|---|
| 21 |  I DIPART<0,DIVAL>DIPART D
 | 
|---|
| 22 |  . I $D(@DINDEX(DISUB,"ROOT")@(DIPART)) S DIVAL=DIPART Q
 | 
|---|
| 23 |  . S DIVAL=$O(@DINDEX(DISUB,"ROOT")@(DIPART),-1) Q
 | 
|---|
| 24 |  Q:$E(DIVAL,1,$L(DIPART))=DIPART!(DIVAL="")
 | 
|---|
| 25 |  F  D  Q:DIOUT!(DIVAL="")
 | 
|---|
| 26 |  . I DIPART>DIVAL,((DIPART[".")!(DIPART>0)) S DIVAL="" Q
 | 
|---|
| 27 |  . D NXT(.DIVAL,DIPART,-1,DINDEX(DISUB,"ROOT"),.DIOUT) Q
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 | NXT(DIVAL,DIPART,DIWAY,DIROOT,DIOUT) ; Skip values we don't need to look at within numeric entries
 | 
|---|
| 30 |  N DIPART2,DIVAL2,I,P,V
 | 
|---|
| 31 |  S DIPART2=$P(DIPART,"."),DIVAL2=$P(DIVAL,".")
 | 
|---|
| 32 |  S P=$S(DIPART<0:-DIPART2,1:DIPART2)
 | 
|---|
| 33 |  S V=$S(DIVAL<0:$E(DIVAL2,2,($L(P)+1)),1:$E(DIVAL2,1,$L(P)))
 | 
|---|
| 34 |  S I=$L(DIVAL2)
 | 
|---|
| 35 |  I DIWAY=1&(DIPART>0)!(DIWAY=-1&(DIPART<0)) D
 | 
|---|
| 36 |  . S:V>P I=I+1 Q
 | 
|---|
| 37 |  E  D
 | 
|---|
| 38 |  . S DIPART2=DIPART2+$S(DIPART>0:1,1:-1)
 | 
|---|
| 39 |  . I P>V,$L(DIPART2)=$L($P(DIPART,".")) S I=I-1
 | 
|---|
| 40 |  S V="",I=I-$L(DIPART2)+1 S:I>1 $P(V,"0",I)=""
 | 
|---|
| 41 |  S DIVAL=DIPART2_V
 | 
|---|
| 42 |  I $E(DIVAL,1,$L(DIPART))=DIPART,$D(@DINDEX(DISUB,"ROOT")@(DIVAL)) S DIOUT=1 Q
 | 
|---|
| 43 |  S DIVAL=$O(@DIROOT@(DIVAL),DIWAY)
 | 
|---|
| 44 |  S:$E(DIVAL,1,$L(DIPART))=DIPART DIOUT=1
 | 
|---|
| 45 |  Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ;
 | 
|---|