1 | DICLIX1 ;SEA/TOAD,SF/TKW-FileMan: Lister, Search Compound Indexes (cont.) ;11/5/99 15:13
|
---|
2 | ;;22.0;VA FileMan;**17**;Mar 30, 1999;
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | BLDTMP(DINDEX,DISCREEN,DIFLAGS,DIDENT) ; Build temporary index of external values when pointer/vp subscript is encountered.
|
---|
6 | N DISUB,DIXSAV,DIX,DIDOUT S DIDOUT=0
|
---|
7 | S DIX("AT")=DINDEX("AT") K @DINDEX(DIX("AT"),"ROOT")
|
---|
8 | N I S I=$S(DIX("AT")=1:1,1:DIX("AT")-1)
|
---|
9 | F DISUB=I:1:DINDEX("#")+1 D
|
---|
10 | . S (DIXSAV(DISUB),DIX(DISUB))=DINDEX(DISUB)
|
---|
11 | . I "VP"[$G(DINDEX(DISUB,"TYPE")) S DIX(DISUB)=""
|
---|
12 | D BT1
|
---|
13 | F DISUB=DINDEX("AT"):1:DINDEX("#")+1 S DINDEX(DISUB)=DIXSAV(DISUB)
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | BT1 N DISUB S DISUB=DIX("AT")
|
---|
17 | N DIVAL,DISINT,DIDONE,DIPART,DIMORE S DISINT=DIX(DISUB),DIDONE=0
|
---|
18 | F D Q:DIDONE
|
---|
19 | . S DISINT=$O(@DINDEX(DISUB,"IXROOT")@(DISINT),DINDEX(DISUB,"WAY"))
|
---|
20 | . S:DISINT="" DIDONE=1 Q:DIDONE
|
---|
21 | . I DISUB'>DINDEX("#") D Q
|
---|
22 | . . S DIVAL=DISINT,DIPART=$G(DINDEX(DISUB,"PART")),DIMORE=$G(DINDEX(DISUB,"MORE?"))
|
---|
23 | . . I DINDEX(DISUB,"TYPE")="V",$G(DISCREEN("V",DISUB))]"" D Q:DIVAL=""
|
---|
24 | . . . N G S G="^"_$P(DISINT,";",2) Q:G="^"
|
---|
25 | . . . S:'$D(DINDEX(DISUB,"VP",G)) DIVAL="" Q
|
---|
26 | . . I "VP"[DINDEX(DISUB,"TYPE") D I DIVAL="" S DIDONE=1 Q
|
---|
27 | . . . S DIVAL=$$EXTERNAL^DIDU(DINDEX(DISUB,"FILE"),DINDEX(DISUB,"FIELD"),"i",DIVAL)
|
---|
28 | . . . Q:'$G(DIERR)
|
---|
29 | . . . I DIFLAGS["h" K DIERR,^TMP("DIERR",$J) Q
|
---|
30 | . . . S DIVAL="",DINDEX("DONE")=1 Q
|
---|
31 | . . D CHK^DICLIX I DIDONE D Q
|
---|
32 | . . . I $G(DINDEX("DONE")) S DIDOUT=1 Q
|
---|
33 | . . . S:DIVAL]"" DIDONE=0 Q
|
---|
34 | . . I DISUB=1,"VP"[DINDEX(1,"TYPE") S @DINDEX(1,"ROOT")@(DIVAL)=DISINT
|
---|
35 | . . S DINDEX(DISUB)=DIVAL,DIX(DISUB)=DISINT,DIX("AT")=DISUB+1
|
---|
36 | . . D BT1
|
---|
37 | . . S DIX("AT")=DISUB
|
---|
38 | . . I $G(DIDOUT) S DIDONE=1
|
---|
39 | . . Q
|
---|
40 | . Q:DIDONE
|
---|
41 | . I $G(DINDEX(DISUB,"TO")) D Q:DIDONE
|
---|
42 | . . D BACKPAST(DIFLAGS,.DINDEX,DISUB,DISINT,.DIDONE)
|
---|
43 | . . S:DIDONE DIDOUT=1 Q
|
---|
44 | . S @DINDEX(DISUB,"ROOT")@(DISINT)=""
|
---|
45 | S DIX(DISUB)="" Q
|
---|
46 | ;
|
---|
47 | BACKPAST(DIFLAGS,DINDEX,DISUB,DIVAL,DIDONE) ; Have we gone past TO value? Lister only.
|
---|
48 | N I,DIOUT S DIOUT=0
|
---|
49 | F I=1:1:DISUB D Q:DIOUT
|
---|
50 | . N V S V=$S(I=DISUB:DIVAL,1:DINDEX(I))
|
---|
51 | . I I=1,DIFLAGS'["p","PV"[DINDEX(1,"TYPE") S V=DINDEX(I,"EXT")
|
---|
52 | . Q:V=DINDEX(I,"TO")
|
---|
53 | . I DINDEX(I,"WAY")=1,DINDEX(I,"TO")]]V S DIOUT=1 Q
|
---|
54 | . I DINDEX(I,"WAY")=-1,V]]DINDEX(I,"TO") S DIOUT=1 Q
|
---|
55 | . S DIVAL="",(DIOUT,DIDONE,DINDEX("DONE"))=1 Q
|
---|
56 | . Q
|
---|
57 | Q:DIOUT
|
---|
58 | S DIVAL="",(DIDONE,DINDEX("DONE"))=1 Q
|
---|
59 | ;
|
---|
60 | ;
|
---|