1 | DICU2 ;SEA/TOAD,SF/TKW-VA FileMan: Lookup Tools, Return IDs ;7/24/98 12:19
|
---|
2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | IDS(DIFILE,DIEN,DIFLAGS,DINDEX,DICOUNT,DIDENT,DILIST,DI0NODE) ;
|
---|
6 | ;
|
---|
7 | ; ENTRY POINT--add an entry's identifiers to output
|
---|
8 | ;
|
---|
9 | I1 ; setup 0-node and ID array interface, and output IEN
|
---|
10 | ;
|
---|
11 | I DIFLAGS["h" N F,N,I M F=DIFILE S N=$G(DI0NODE),I=+$G(DIEN) N DIFILE,DI0NODE,DIEN M DIFILE=F S DIEN=I S:N]"" DI0NODE=N K F,N,I
|
---|
12 | I '$D(DI0NODE) S DI0NODE=$G(@DIFILE(DIFILE)@(+DIEN,0))
|
---|
13 | N DID,DIDVAL
|
---|
14 | I DIFLAGS["P" N DINODE S DINODE=+DIEN
|
---|
15 | E S @DILIST@(2,DICOUNT)=+DIEN
|
---|
16 | ;
|
---|
17 | I1A ; output primary value (index for Lister, .01 for Finder)
|
---|
18 | ;
|
---|
19 | I DIFLAGS'["P",$D(DIDENT(-2)) D
|
---|
20 | . N DIOUT S DIOUT=$NA(@DILIST@(1,DICOUNT))
|
---|
21 | . I DIFLAGS[3 N DISUB D Q
|
---|
22 | . . F DISUB=0:0 S DISUB=$O(DIDENT(0,-2,DISUB)) Q:'DISUB D
|
---|
23 | . . . I DINDEX("#")'>1 D SET(0,-2,DISUB,DIOUT,.DINDEX) Q
|
---|
24 | . . . N I S I=$NA(@DIOUT@(DISUB)) D SET(0,-2,DISUB,I,.DINDEX)
|
---|
25 | . I $D(DIDENT(0,-2,.01)) D SET(0,-2,.01,DIOUT,"",.DIFILE)
|
---|
26 | . Q
|
---|
27 | ;
|
---|
28 | I2 ; start loop: loop through output values
|
---|
29 | ;
|
---|
30 | I DIFLAGS["P" N DILENGTH S DILENGTH=$L(DINODE)
|
---|
31 | N DICODE,DICRSR,DIOUT,DISUB S DICRSR=-1
|
---|
32 | F S DICRSR=$O(DIDENT(DICRSR)) Q:DICRSR=""!($G(DIERR)) S DID="" F S DID=$O(DIDENT(DICRSR,DID)) Q:DID=""!($G(DIERR)) S DISUB="" F D Q:DISUB=""!$G(DIERR)
|
---|
33 | . I DIFLAGS'["P",DID=-2 Q
|
---|
34 | . S DISUB=$O(DIDENT(DICRSR,DID,DISUB)) Q:DISUB=""
|
---|
35 | . K DIDVAL
|
---|
36 | I20 . ; output indexed field if "IX" was in FIELDS parameter
|
---|
37 | . I DID=0 D Q
|
---|
38 | . . D SET(DICRSR,DID,DISUB,"DIDVAL",.DINDEX,.DIFILE)
|
---|
39 | . . I DIFLAGS["P" D ADD(.DIFLAGS,.DINODE,.DILENGTH,DIDVAL,DIEN,DILIST) Q
|
---|
40 | . . M @DILIST@("ID",DICOUNT,0,DISUB)=DIDVAL Q
|
---|
41 | .
|
---|
42 | I3 . ; output field
|
---|
43 | . ; distinguish between computed and value fields
|
---|
44 | .
|
---|
45 | . I DID D Q:$G(DIERR)
|
---|
46 | . . ; process fields that are not computed.
|
---|
47 | . . I $G(DIDENT(DICRSR,DID,0,"TYPE"))'="C" D
|
---|
48 | . . . D SET(DICRSR,DID,DISUB,"DIDVAL",.DINDEX,.DIFILE) Q
|
---|
49 | . .
|
---|
50 | I4 . . ; computed fields
|
---|
51 | . . E D
|
---|
52 | . . . N %,%H,%T,A,B,C,D,DFN,I,X,X1,X2,Y,Z,Z0,Z1
|
---|
53 | . . . N DA M DA=DIEN S DA=$P(DIEN,",")
|
---|
54 | . . . N DIARG S DIARG="D0"
|
---|
55 | . . . N DIMAX S DIMAX=+$O(DA(""),-1)
|
---|
56 | . . . N DIDVAR F DIDVAR=1:1:DIMAX S DIARG=DIARG_",D"_DIDVAR
|
---|
57 | . . . N @DIARG F DIDVAR=0:1:DIMAX-1 S @("D"_DIDVAR)=DA(DIMAX-DIDVAR)
|
---|
58 | . . . S @("D"_DIMAX)=DA
|
---|
59 | . . . X DIDENT(DICRSR,DID,0) S DIDVAL=$G(X)
|
---|
60 | . .
|
---|
61 | I5 . . ; set field into array or pack node
|
---|
62 | . .
|
---|
63 | . . I DIFLAGS'["P" M @DILIST@("ID",DICOUNT,DID)=DIDVAL
|
---|
64 | . . E D ADD(.DIFLAGS,.DINODE,.DILENGTH,DIDVAL,DIEN,DILIST)
|
---|
65 | .
|
---|
66 | I6 . ; output display-only identifier
|
---|
67 | .
|
---|
68 | . E D
|
---|
69 | . . N %,D,DIC,X,Y,Y1
|
---|
70 | . . S D=DINDEX
|
---|
71 | . . S DIC=DIFILE(DIFILE,"O")
|
---|
72 | . . S DIC(0)=$TR(DIFLAGS,"2^fglpqtuv104")
|
---|
73 | . . M Y=DIEN S Y=$P(DIEN,",")
|
---|
74 | . . S Y1=$G(@DIFILE(DIFILE)@(+DIEN,0)),Y1=DIEN
|
---|
75 | . .
|
---|
76 | I7 . . ; execute the identifier's code
|
---|
77 | . .
|
---|
78 | . . N DIX S DIX=DIDENT(DICRSR,DID,0)
|
---|
79 | . . X DIX
|
---|
80 | . . I $G(DIERR) D Q
|
---|
81 | . . . N DICONTXT I DID="ZZZ ID" S DICONTXT="Identifier parameter"
|
---|
82 | . . . E S DICONTXT="MUMPS Identifier"
|
---|
83 | . . . D ERR^DICF4(120,DIFILE,DIEN,"",DICONTXT)
|
---|
84 | . .
|
---|
85 | I8 . . ; set output from identifier into output array or pack node
|
---|
86 | . .
|
---|
87 | . . N DI,DILINE,DIEND S DI="" S:DIFLAGS'["P" DIEND=$O(@DILIST@("ID","WRITE",DICOUNT,"z"),-1)
|
---|
88 | . . I $O(^TMP("DIMSG",$J,""))="" S ^TMP("DIMSG",$J,1)=""
|
---|
89 | . . F D Q:DI=""!$G(DIERR)
|
---|
90 | . . . S DI=$O(^TMP("DIMSG",$J,DI)) Q:DI=""
|
---|
91 | . . . S DILINE=$G(^TMP("DIMSG",$J,DI))
|
---|
92 | . . . I DIFLAGS["P" D ADD(.DIFLAGS,.DINODE,.DILENGTH,DILINE,DIEN,DILIST,DI) Q
|
---|
93 | . . . S DIEND=DIEND+1,@DILIST@("ID","WRITE",DICOUNT,DIEND)=DILINE
|
---|
94 | . . . Q
|
---|
95 | . . K DIMSG,^TMP("DIMSG",$J)
|
---|
96 | ;
|
---|
97 | I9 ; for packed output, set pack node into output array
|
---|
98 | ;
|
---|
99 | I '$G(DIERR),DIFLAGS["P" S @DILIST@(DICOUNT,0)=DINODE
|
---|
100 | Q
|
---|
101 | ;
|
---|
102 | ;
|
---|
103 | SET(DICRSR,DIFID,DISUB,DIOUT,DINDEX,DIFILE) ; Move data to DIOUT.
|
---|
104 | N F1,F2
|
---|
105 | S F1=$O(DIDENT(DICRSR,DIFID,DISUB,"")),F2=$O(DIDENT(DICRSR,DIFID,DISUB,F1))
|
---|
106 | F F1=F1,F2 D:F1]""
|
---|
107 | . I DIDENT(DICRSR,DIFID,DISUB,F1)["DIVAL" N DIVAL S @DINDEX(DISUB,"GET")
|
---|
108 | . N X S @("X="_DIDENT(DICRSR,DIFID,DISUB,F1))
|
---|
109 | . I $G(DIERR),DIFLAGS["h" K DIERR,^TMP("DIERR",$J) S X=DINDEX(DISUB)
|
---|
110 | . I X["""" S X=$$CONVQQ^DILIBF(X)
|
---|
111 | . I +$P(X,"E")'=X S X=""""_X_""""
|
---|
112 | . I F2="" S @(DIOUT_"="_X) Q
|
---|
113 | . S O=$NA(@DIOUT@(F1)),@(O_"="_X) Q
|
---|
114 | Q
|
---|
115 | ;
|
---|
116 | TRANOUT(DISUB,DIVL) ; Execute TRANSFORM FOR DISPLAY on index value
|
---|
117 | N X S X=DIVL
|
---|
118 | N DICODE S DICODE=$G(DINDEX(DISUB,"TRANOUT"))
|
---|
119 | I DICODE]"" X DICODE
|
---|
120 | Q X
|
---|
121 | ;
|
---|
122 | ADD(DIFLAGS,DINODE,DILENGTH,DINEW,DIEN,DILIST,DILCNT) ;
|
---|
123 | ;
|
---|
124 | ; for Packed output, add DINEW to DINODE, erroring if overflow
|
---|
125 | ; xform if it contains ^
|
---|
126 | ;
|
---|
127 | A1 N DINEWLEN,DELIM S DINEWLEN=$L(DINEW),DELIM=$S($G(DILCNT)'>1:"^",1:"~")
|
---|
128 | S DILENGTH=DILENGTH+1+DINEWLEN
|
---|
129 | I DILENGTH>255 D ERR^DICF4(206,"","","",+DIEN) Q
|
---|
130 | I DIFLAGS'[2,DINEW[U S DIFLAGS="2^"_DIFLAGS D ENCODE(DILIST,.DINODE)
|
---|
131 | I DIFLAGS[2,DINEW[U!(DINEW["&") S DINEW=$$HTML^DILF(DINEW) Q:$G(DIERR)
|
---|
132 | S DINODE=DINODE_DELIM_DINEW
|
---|
133 | Q
|
---|
134 | ;
|
---|
135 | ENCODE(DILIST,DINODE) ;
|
---|
136 | ;
|
---|
137 | ; ADD: HTML encode records already output (we found an embedded ^)
|
---|
138 | ; procedure: loop through list encoding &s
|
---|
139 | ;
|
---|
140 | E1 N DILINE,DIRULE S DIRULE(1,"&")="&"
|
---|
141 | N DIREC S DIREC=0 F S DIREC=$O(@DILIST@(DIREC)) Q:'DIREC D
|
---|
142 | . S DILINE=@DILIST@(DIREC,0) Q:DILINE'["&"
|
---|
143 | . S @DILIST@(DIREC,0)=$$TRANSL8^DILF(DILINE,.DIRULE)
|
---|
144 | I DINODE["&" S DINODE=$$TRANSL8^DILF(DINODE,.DIRULE)
|
---|
145 | Q
|
---|
146 | ;
|
---|