| 1 | DICF2 ;SEA/TOAD,SF/TKW-VA FileMan: Finder, Part 3 (All Indexes) ;12/17/99  08:24
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**4,20**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | CHKALL(DIFILE,DIEN,DIFIEN,DIFLAGS,DIVALUE,DISCREEN,DINUMBER,DIFORCE,DINDEX,DIDENT,DILIST,DIC,DIY,DIYX) ;
 | 
|---|
| 6 |  ; Loop through all indexes to be searched, perform data type
 | 
|---|
| 7 |  ; transforms on lookup values.
 | 
|---|
| 8 |  N DIOUT
 | 
|---|
| 9 |  I DIFLAGS["O",DIFLAGS'["p" S DIOUT=DIFLAGS N DIFLAGS S DIFLAGS=DIOUT_"X"
 | 
|---|
| 10 |  S DIOUT=0 N DISKIP
 | 
|---|
| 11 | 41 F  D  Q:$G(DIERR)!($G(DINDEX("DONE")))!DIOUT
 | 
|---|
| 12 |  . S DISKIP=0
 | 
|---|
| 13 |  . N DILINK S DILINK=DIFILE_U_DINDEX
 | 
|---|
| 14 |  . I DINDEX="#" D
 | 
|---|
| 15 |  . . S DIFILE("CHAIN",DILINK)=""
 | 
|---|
| 16 |  . . Q:+$P(DIVALUE,"E")'=DIVALUE  Q:'$D(@DIFILE(DIFILE)@(DIVALUE))
 | 
|---|
| 17 |  . . N DIEN S DIEN=DIVALUE D ENTRY^DICF1 Q
 | 
|---|
| 18 |  . I '$D(DIFILE("CHAIN",DILINK)) D  K DIFILE("CHAIN",DILINK)
 | 
|---|
| 19 |  . . S DIFILE("CHAIN",DILINK)=""
 | 
|---|
| 20 |  . . D:DIFLAGS'["Q" PREPIX(.DIFILE,DIFLAGS,.DINDEX,.DIVALUE,.DISKIP)
 | 
|---|
| 21 |  . . I 'DISKIP D CHKONE^DICF3(.DIFLAGS,.DIVALUE,.DINDEX,.DIDENT,.DIFILE,.DIEN,DIFIEN,.DISCREEN,.DILIST,.DIC,.DIY,.DIYX)
 | 
|---|
| 22 |  . . D CLEANIX(.DINDEX,.DIVALUE) Q
 | 
|---|
| 23 | 43 . I $G(DIERR)!($G(DINDEX("DONE"))) Q
 | 
|---|
| 24 |  . I DIFLAGS["l" S (DIOUT,DINDEX("DONE"))=1 Q
 | 
|---|
| 25 |  . D NXTINDX(.DINDEX,.DIFORCE,.DIFILE,.DIFLAGS,.DIVALUE,DINUMBER)
 | 
|---|
| 26 |  . I DINDEX="" D  Q:DINDEX=""
 | 
|---|
| 27 |  . . S DIOUT=1
 | 
|---|
| 28 |  . . Q:DIFLAGS'["O"  Q:DIFLAGS'["X"  Q:DIFLAGS["p"  Q:DIDENT(-1)
 | 
|---|
| 29 |  . . S DIFLAGS=$TR(DIFLAGS,"X"),DIOUT=0,DIFORCE(1)=1
 | 
|---|
| 30 |  . . S DINDEX=$S(DIFLAGS["l":DINDEX("START"),DIFORCE:$P(DIFORCE(0),U),1:$$DINDEX^DICL(DIFILE,DIFLAGS))
 | 
|---|
| 31 |  . . I DINDEX="" S DIOUT=1 Q
 | 
|---|
| 32 |  . . D FIRSTIDX(.DINDEX,.DIFORCE,.DIFILE,DIFLAGS,.DIVALUE,DINUMBER)
 | 
|---|
| 33 |  . . Q
 | 
|---|
| 34 |  . D
 | 
|---|
| 35 |  . . N DICRSR S DICRSR=0
 | 
|---|
| 36 |  . . I DIFLAGS["P" D  Q:'DICRSR
 | 
|---|
| 37 |  . . . F  S DICRSR=$O(DIDENT(DICRSR)) Q:'DICRSR  Q:$D(DIDENT(DICRSR,0,1,"E"))
 | 
|---|
| 38 |  . . . Q
 | 
|---|
| 39 |  . . Q:'$D(DIDENT(DICRSR,0,1,"E"))
 | 
|---|
| 40 |  . . N DISAVNO,DISAVENT S DISAVNO=DINDEX("#"),DINDEX("#")=1,DISAVENT=$G(DIDENT),DIDENT="IXE"
 | 
|---|
| 41 |  . . D THROW^DICU11(DIFLAGS,.DIDENT,"IXE",DICRSR,1,"E",.DINDEX,1)
 | 
|---|
| 42 |  . . S DINDEX("#")=DISAVNO,DIDENT=DISAVENT Q
 | 
|---|
| 43 |  . Q
 | 
|---|
| 44 |  Q
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | PREPIX(DIFILE,DIFLAGS,DINDEX,DIVALUE,DISKIP) ;
 | 
|---|
| 47 |  ; CHKALL--lookup index data type, add transform values to list
 | 
|---|
| 48 |  N DISUB,DITYPE
 | 
|---|
| 49 |  F DISUB=1:1:DINDEX("#") D:DIVALUE(DISUB)]""  Q:$G(DIERR)
 | 
|---|
| 50 |  . I $G(DINDEX("IXTYPE"))="S" D  Q
 | 
|---|
| 51 |  . . N X S X=$$SOUNDEX^DICF5(DINDEX(DISUB)) Q:'X
 | 
|---|
| 52 |  . . S DIVALUE(DISUB,5)=X Q
 | 
|---|
| 53 |  . S DITYPE=DINDEX(DISUB,"TYPE")
 | 
|---|
| 54 |  . I DITYPE["F"!(DITYPE["N") D
 | 
|---|
| 55 |  . . Q:$G(DINDEX(DISUB,"TRANCODE"))=""
 | 
|---|
| 56 |  . . N X S X=DIVALUE(DISUB) X DINDEX(DISUB,"TRANCODE") Q:X=""
 | 
|---|
| 57 |  . . S DIVALUE(DISUB,5)=X
 | 
|---|
| 58 |  . . Q
 | 
|---|
| 59 |  . N DINODE S DINODE=$G(^DD(+DINDEX(DISUB,"FILE"),+DINDEX(DISUB,"FIELD"),0))
 | 
|---|
| 60 |  . I DITYPE["D" D PREPD^DICF5(DISUB,.DINDEX,DINODE,.DIVALUE) Q
 | 
|---|
| 61 |  . I DITYPE["S" D PREPS^DICF5(DIFLAGS,DISUB,.DINDEX,DINODE,.DIVALUE) Q
 | 
|---|
| 62 |  . I DITYPE'["P",DITYPE'["V" Q
 | 
|---|
| 63 |  . I DISUB'=1 D POINT^DICF5(DISUB,DIFLAGS,.DIFILE,.DINDEX,.DIVALUE,.DISCREEN) Q
 | 
|---|
| 64 |  . D POINT^DICF4(.DIFILE,.DIFLAGS,.DINDEX,.DIDENT,.DIEN,DIFIEN,.DISCREEN,.DIVALUE,.DIC,.DIFORCE)
 | 
|---|
| 65 |  . I '$D(DINDEX(1,"IXROOT"))!($G(DIERR)) S DISKIP=1
 | 
|---|
| 66 |  . I $G(DTOUT)!($G(DIROUT)) S (DISKIP,DINDEX("DONE"))=1
 | 
|---|
| 67 |  . Q:DISKIP
 | 
|---|
| 68 |  . Q:$G(DINDEX(1,"TRANCODE"))=""
 | 
|---|
| 69 |  . N DII,X
 | 
|---|
| 70 |  . S DII="" F  S DII=$O(@DINDEX(1,"ROOT")@(DII)) Q:DII=""  D
 | 
|---|
| 71 |  . . K @DINDEX(1,"ROOT")@(DII)
 | 
|---|
| 72 |  . . S X=$P(DII,"^",2) X DINDEX(1,"TRANCODE") Q:X=""
 | 
|---|
| 73 |  . . S X=$P(DII,"^")_"^"_X,@DINDEX(1,"ROOT")@(X)="" Q
 | 
|---|
| 74 |  . Q
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | CLEANIX(DINDEX,DIVALUE) ;
 | 
|---|
| 78 |  ; CHKALL--clear transform values for this index from DIVALUE arrays
 | 
|---|
| 79 |  ; clear temporary list of pointed-to entries.
 | 
|---|
| 80 |  N I,DISUB
 | 
|---|
| 81 |  F DISUB=1:1:DINDEX("#") D
 | 
|---|
| 82 |  . I $G(DINDEX(DISUB,"IXROOT"))]"" D
 | 
|---|
| 83 |  . . I DISUB=1,DIFLAGS["l" S I=$O(@DINDEX(DISUB,"ROOT")@("")),DS("INT")=$P(I,U,2)
 | 
|---|
| 84 |  . . S I=$P(DINDEX(DISUB,"ROOT"),",""B"")",1) Q:I=""
 | 
|---|
| 85 |  . . K @(I_")") Q
 | 
|---|
| 86 |  . S I=4
 | 
|---|
| 87 |  . F  S I=$O(DIVALUE(DISUB,I)) Q:'I  K DIVALUE(DISUB,I)
 | 
|---|
| 88 |  . Q
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 | FIRSTIDX(DINDEX,DIFORCE,DIFILE,DIFLAGS,DIVALUE,DINUMBER) ;
 | 
|---|
| 92 |  ; Return data for starting index before second loop when flags["O"
 | 
|---|
| 93 |  D N3 Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 | NXTINDX(DINDEX,DIFORCE,DIFILE,DIFLAGS,DIVALUE,DINUMBER) ;
 | 
|---|
| 96 |  ; Return next index
 | 
|---|
| 97 |  N D,DIGO,I,J,K,DIX1,DIX2,DIOK,DIOLDL
 | 
|---|
| 98 |  S D=DINDEX,I=$G(DINDEX("START")),K=$G(DINDEX("MAXSUB"))
 | 
|---|
| 99 |  D:DIFLAGS'["h"
 | 
|---|
| 100 |  . F J=1:1:DINDEX("#") S DIOLDL(J)=DINDEX(J,"LENGTH")
 | 
|---|
| 101 |  K DINDEX S DINDEX=D,DINDEX("WAY")=1
 | 
|---|
| 102 |  S:I]"" DINDEX("START")=I S:K]"" DINDEX("MAXSUB")=K
 | 
|---|
| 103 |  S (DIGO,DIOK)=0
 | 
|---|
| 104 | N1 I DIFORCE F  D  Q:DIOK!(DIGO)
 | 
|---|
| 105 |  . I DIFLAGS["M",DIFORCE(1)=1,$P(DIFORCE(0),U,2)="" S DIGO=1 Q
 | 
|---|
| 106 |  . S DIFORCE(1)=DIFORCE(1)+1,DINDEX=$P(DIFORCE(0),U,DIFORCE(1))
 | 
|---|
| 107 |  . I DINDEX="#",DIFLAGS'["l",DIFLAGS'["h" S DIOK=1 Q
 | 
|---|
| 108 |  . S:DINDEX=-1 DINDEX="" I DINDEX="" S DIOK=1 Q
 | 
|---|
| 109 |  . I $O(^DD(DIFILE,0,"IX",DINDEX,0)),$$IDXOK(DIFILE,DINDEX) S DIOK=1 Q
 | 
|---|
| 110 |  . S I=$O(^DD("IX","BB",DIFILE,DINDEX,0)) Q:'I
 | 
|---|
| 111 |  . S DIOK=1 Q
 | 
|---|
| 112 | N2 I ('DIFORCE)!DIGO D
 | 
|---|
| 113 |  . S (DIX1,DIX2)=DINDEX
 | 
|---|
| 114 |  . F  S DIX1=$O(^DD(DIFILE,0,"IX",DIX1)) Q:DIX1=""  Q:$$IDXOK(DIFILE,DIX1)
 | 
|---|
| 115 |  . S DIOK=0 F  S DIX2=$O(^DD("IX","BB",DIFILE,DIX2)) Q:DIX2=""  D  Q:DIOK
 | 
|---|
| 116 |  . . S I=$O(^DD("IX","BB",DIFILE,DIX2,0)) Q:'I
 | 
|---|
| 117 |  . . Q:$P($G(^DD("IX",I,0)),U,14)'["L"
 | 
|---|
| 118 |  . . S J=$O(^DD("IX",I,11.1,"AC",1,0)) Q:'J  Q:$G(^DD("IX",I,11.1,J,0))=""
 | 
|---|
| 119 |  . . S DIOK=1 Q
 | 
|---|
| 120 |  . I DIX1'="",DIX2=""!(DIX2]DIX1) S DINDEX=DIX1 Q
 | 
|---|
| 121 |  . S DINDEX=DIX2 Q
 | 
|---|
| 122 |  . Q
 | 
|---|
| 123 | N3 Q:DINDEX=""  Q:DIFLAGS["h"
 | 
|---|
| 124 |  D INDEX^DICUIX(.DIFILE,DIFLAGS,.DINDEX,"",.DIVALUE,DINUMBER,.DISCREEN)
 | 
|---|
| 125 |  I DINDEX("#")>1 F D=1:1:DINDEX("#") S DIVALUE(D)=$G(DIVALUE(D))
 | 
|---|
| 126 |  N DINEWVAL S DINEWVAL=0 D
 | 
|---|
| 127 |  . N J F J=1:1:DINDEX("#") I DIVALUE(J)]"",DINDEX(J,"LENGTH")'=$G(DIOLDL(J)) S DINEWVAL=1 Q
 | 
|---|
| 128 |  . I DINEWVAL D XFORM^DICF1(DIFLAGS,.DIVALUE,.DISCREEN,.DINDEX)
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | IDXOK(DIFILE,%) ; See whether selected index exists in 1 nodes of DD
 | 
|---|
| 132 |  N DIX,%Y,DD,X Q:%="" 0
 | 
|---|
| 133 |  S DIX=$O(^DD(DIFILE,0,"IX",%,0)) Q:'DIX 0
 | 
|---|
| 134 |  S %Y=$O(^DD(DIFILE,0,"IX",%,DIX,0)) Q:'%Y 0
 | 
|---|
| 135 |  F DD=0:0 S DD=$O(^DD(DIX,%Y,1,DD)) Q:'DD  S X=$P($G(^(DD,0)),U,2) Q:X=%
 | 
|---|
| 136 |  Q:'DD 0
 | 
|---|
| 137 |  Q 1
 | 
|---|
| 138 |  ;
 | 
|---|