| 1 | RGUTLK2 ;CAIRO/DKM - Continuation of RGUTLKP;04-Sep-1998 11:26;DKM | 
|---|
| 2 | ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999 | 
|---|
| 3 | LKP(%RGDX) ; | 
|---|
| 4 | N %RGD,%RGZ,%RGN | 
|---|
| 5 | S %RGXRN=0,%RGTRUNC=0,%RGIEN="",%RGSCT=0,%RGD=%RGDX | 
|---|
| 6 | W:'%RGHTML $$XY(%RGX+$L(%RGPRMPT),%RGY),$S(%RGOPT["X":"",1:%RGD),%RGEOS,!,"Searching"_$S(%RGOPT[U:" (press ^ to abort)",1:"")_"...",*13 | 
|---|
| 7 | I $E(%RGD)="`" S %RGSLCT=%RGD G:'%RGHTML NR5 D SHOW($E(%RGD,2,999)) Q 1 | 
|---|
| 8 | NXTREF S %RGXRN=%RGXRN+1,%RGXRF=$P(%RGXRFS,U,%RGXRN),%RGD=%RGDX | 
|---|
| 9 | I %RGXRF="" G:%RGSCT NR3 W:'%RGHTML *7,*13,%RGEOL,"Not found"_$S(%RGD="":".",1:": ")_$S(%RGD'=+%RGD:%RGD,%RGOPT["D":$$ENTRY^RGUTDT(%RGD),1:%RGD) S %RGD1=$S(%RGOPT["X":U,1:"") Q "" | 
|---|
| 10 | S %RGOPT(0)=%RGOPT_%RGXRFS(%RGXRF) | 
|---|
| 11 | I %RGOPT(0)["D",$L(%RGDX) D  G:%RGD<1 NXTREF | 
|---|
| 12 | .S %RGD=$$%DT^RGUT(%RGDX) | 
|---|
| 13 | I %RGOPT(0)["W" D MTL G NXTREF | 
|---|
| 14 | S %RGKEY=$S(%RGOPT(0)["P":$P(%RGD," "),1:%RGD)_$S(%RGDIR<0:$C(255),1:""),%RGNUM=$S(%RGKEY=+%RGKEY:%RGKEY,1:"") | 
|---|
| 15 | I %RGD'="",$D(@%RGDIC@(%RGXRF,%RGD)) S %=%RGSCT+1 D ADD(%RGD) I %RGSCT=%,%RGOPT(0)["A" D SLCT(%RGSCT) Q %RGIEN | 
|---|
| 16 | NR2 I %RGOPT(0)[U R %#1:0 I %=U S %RGTRUNC=1 G NR3:%RGSCT Q "" | 
|---|
| 17 | S %RGKEY=$O(@%RGDIC@(%RGXRF,%RGKEY),%RGDIR) | 
|---|
| 18 | I (%RGNUM="")=(%RGKEY=+%RGKEY),%RGD'="" S %RGKEY="" | 
|---|
| 19 | I %RGKEY'="",%RGOPT(0)["P",%RGKEY'=%RGD S %=$$PARTIAL(%RGD,%RGKEY) D ADD(%RGKEY):%>0 G:%'<0 NR2:%RGSCT<100 | 
|---|
| 20 | I %RGKEY'="",%RGOPT(0)'["P",$E(%RGKEY,1,$L(%RGD))=%RGD D ADD(%RGKEY) G:%RGSCT<100 NR2 | 
|---|
| 21 | I %RGNUM'="" S %RGKEY=%RGNUM_$C($S(%RGDIR<0:255,1:1)),%RGNUM="" G NR2 | 
|---|
| 22 | I %RGSCT'<100 W:'%RGHTML *7 S %RGXRALL=0,%RGTRUNC=1 | 
|---|
| 23 | G:'%RGSCT!%RGXRALL NXTREF | 
|---|
| 24 | NR3 I %RGSCT=1,%RGOPT(0)[1,'%RGTRUNC D SLCT(1) Q %RGIEN | 
|---|
| 25 | S %RGKEY=%RGSLT,%RGSLT=1,%RGSMAX=$S(%RGHTML:99999,1:17-%RGY) | 
|---|
| 26 | NR4 W:'%RGHTML $$XY(0,%RGY+1),%RGEOS,! | 
|---|
| 27 | F %RGN=%RGKEY:1:%RGKEY+%RGSMAX-1 D  Q:%RGN=%RGSCT | 
|---|
| 28 | .F %RGZ=0:1:%RGCOL-1 D | 
|---|
| 29 | ..S %1=IOM/%RGCOL*%RGZ\1,%RGLAST=%RGZ*%RGSMAX+%RGN | 
|---|
| 30 | ..Q:%RGLAST>%RGSCT | 
|---|
| 31 | ..W:'%RGHTML $$XY(%1,$Y),%RGEOL,%RGLAST,?5 | 
|---|
| 32 | ..D SHOW(^TMP(%RGPID,%RGLAST),%1+4) | 
|---|
| 33 | .W:'%RGQUIET ! | 
|---|
| 34 | Q:%RGHTML $S(%RGTRUNC:-%RGSCT,1:%RGSCT) | 
|---|
| 35 | W:%RGLAST<%RGSCT !,%RGSCT-%RGLAST," more choice(s)..." | 
|---|
| 36 | W:%RGTRUNC "  (list was truncated)",! | 
|---|
| 37 | W %RGEOS_%RGBEL,!! | 
|---|
| 38 | R "Enter selection: ",%RGSLCT:DTIME | 
|---|
| 39 | S:'$T %RGSLCT=U | 
|---|
| 40 | W *13 | 
|---|
| 41 | I %RGOPT["K",%RGSLCT="" Q -1 | 
|---|
| 42 | I "Nn"[%RGSLCT S %RGKEY=$S(%RGLAST<%RGSCT:%RGLAST+1,1:1) G NR4 | 
|---|
| 43 | I "Bb"[%RGSLCT S %RGKEY=$S(%RGKEY=1:%RGSCT-%RGSMAX+1,%RGKEY'>%RGSMAX:1,1:%RGKEY-%RGSMAX) S:%RGKEY<1 %RGKEY=1 G NR4 | 
|---|
| 44 | I "?"[%RGSLCT D HELP2 G NR4 | 
|---|
| 45 | I "^^"[%RGSLCT S %RGD2="",%RGD1=$S(%RGOPT(0)["X":%RGSLCT,%RGSLCT="^^":%RGSLCT,1:"") Q "" | 
|---|
| 46 | NR5 F  D  Q:%RGSLCT="" | 
|---|
| 47 | .I %RGOPT(0)["M" S %RGD=$P(%RGSLCT,";"),%RGSLCT=$P(%RGSLCT,";",2,999) | 
|---|
| 48 | .E  S %RGD=%RGSLCT,%RGSLCT="" | 
|---|
| 49 | .Q:'$L(%RGD) | 
|---|
| 50 | .I %RGD?1.N D SLCT(%RGD) Q | 
|---|
| 51 | .I %RGOPT(0)["M",%RGD?1.N1"-".N D  Q | 
|---|
| 52 | ..N %1,%2 | 
|---|
| 53 | ..S %1=+%RGD,%2=+$P(%RGD,"-",2) | 
|---|
| 54 | ..S:'%2 %2=%RGSCT | 
|---|
| 55 | ..S:%1>%2 %RGD=%1,%1=%2,%2=%RGD | 
|---|
| 56 | ..S:%2>%RGSCT %2=%RGSCT | 
|---|
| 57 | ..F %=%1:1:%2 D SLCT(%) | 
|---|
| 58 | .I %RGOPT["X",%RGOPT'["L" S (%RGSLCT,%RGD1,%RGIEN)="" Q | 
|---|
| 59 | .I $E(%RGD)="`" D  Q | 
|---|
| 60 | ..S %RGD=+$E(%RGD,2,999) | 
|---|
| 61 | ..I $$VALD(%RGD) D DISV(%RGD) S %RGIEN=%RGD | 
|---|
| 62 | .S %RGD1=%RGD1_";"_%RGD | 
|---|
| 63 | W $$XY(0,%RGY+1),%RGEOS,! | 
|---|
| 64 | Q %RGIEN | 
|---|
| 65 | ; Add list selection to output | 
|---|
| 66 | SLCT(%RGSLCT) ; | 
|---|
| 67 | I %RGSLCT>0,%RGSLCT'>%RGSCT D | 
|---|
| 68 | .S %RGIEN=+^TMP(%RGPID,+%RGSLCT) | 
|---|
| 69 | .D DISV(%RGIEN) | 
|---|
| 70 | Q | 
|---|
| 71 | ; Add IEN to output | 
|---|
| 72 | DISV(%RGIEN) ; | 
|---|
| 73 | Q:%RGIEN="" | 
|---|
| 74 | I %RGMUL'="",'$D(@%RGMUL@(%RGIEN)) S @%RGMUL@(%RGIEN)="" D:'%RGQUIET APP(%RGIEN) | 
|---|
| 75 | D:%RGMUL="" APP(%RGIEN) | 
|---|
| 76 | Q:%RGOPT(0)["F" | 
|---|
| 77 | K:%RGSAME ^DISV(DUZ,%RGDISV) | 
|---|
| 78 | S %RGSAME=0,^DISV(DUZ,%RGDISV)=%RGIEN,^(%RGDISV,%RGIEN)="" | 
|---|
| 79 | Q | 
|---|
| 80 | ; Append primary key to key list | 
|---|
| 81 | APP(%RGIEN) ; | 
|---|
| 82 | N %RGKEY | 
|---|
| 83 | S %RGKEY=$S(%RGIEN=+%RGIEN:$P($G(@%RGDIC@(%RGIEN,0)),U),1:%RGIEN) | 
|---|
| 84 | S %RGKEY=$$FMT(%RGIEN,%RGKEY) | 
|---|
| 85 | Q:'$L(%RGKEY)!($L(%RGKEY)+$L(%RGD2)'<250) | 
|---|
| 86 | S %RGD2=%RGD2_$S($L(%RGD2):";",1:"")_%RGKEY | 
|---|
| 87 | I %RGOPT(0)'["J",%RGOPT(0)'["M" S %RGD2=%RGD2_"  "_$$SID(%RGIEN) | 
|---|
| 88 | Q | 
|---|
| 89 | ; Multi-term lookup | 
|---|
| 90 | MTL N % | 
|---|
| 91 | S %=$S(%RGDIC[")":$TR(%RGDIC,")",","),1:%RGDIC_"(")_"%RGXRF)" | 
|---|
| 92 | S %=$$LKP^RGUTMTL(%,%RGD,"^TMP(""MTL"",%RGPID)",%RGOPT(0)[U) | 
|---|
| 93 | S:%<0 %RGTRUNC=1 | 
|---|
| 94 | D:% ADD(%RGPID,"^TMP","MTL") | 
|---|
| 95 | K ^TMP("MTL",%RGPID) | 
|---|
| 96 | Q | 
|---|
| 97 | ; Add key to selection list | 
|---|
| 98 | ADD(%RGKEY,%RGIDX,%RGSUB) ; | 
|---|
| 99 | N %S | 
|---|
| 100 | S:'$D(%RGIDX) %RGIDX=%RGDIC,%RGSUB=%RGXRF | 
|---|
| 101 | F %S=0:0 S %S=$O(@%RGIDX@(%RGSUB,%RGKEY,%S)) Q:'%S  D | 
|---|
| 102 | .I %RGOPT(0)["O",$D(^TMP(%RGPID,0,%S)) Q | 
|---|
| 103 | .I $$VALD(%S) D | 
|---|
| 104 | ..S %RGSCT=%RGSCT+1,^TMP(%RGPID,%RGSCT)=%S_U_$S(%RGOPT(0)["W":"",1:%RGKEY),^(0,%S)="" | 
|---|
| 105 | ..I %RGOPT(0)["S",$G(^DISV(DUZ,%RGDISV))=%S S %RGSLT=%RGSCT | 
|---|
| 106 | Q | 
|---|
| 107 | ; Check entry against screening criteria | 
|---|
| 108 | VALD(%S) Q:'$D(@%RGDIC@(%S))!'%S 0 | 
|---|
| 109 | Q:%RGSCN="" 1 | 
|---|
| 110 | N %,%1 | 
|---|
| 111 | S %1=1,@$$TRAP^RGUTOS("V3^RGUTLK2") | 
|---|
| 112 | F %=0:0 S %=$O(@%RGSCN@(%)) Q:'%  D  Q:%1 | 
|---|
| 113 | .S %1=0,@$$TRAP^RGUTOS("V2^RGUTLK2") | 
|---|
| 114 | .X "S %1="_@%RGSCN@(%) | 
|---|
| 115 | V2 .Q | 
|---|
| 116 | Q %1 | 
|---|
| 117 | V3 Q 0 | 
|---|
| 118 | ; Show the specified selection | 
|---|
| 119 | SHOW(%RGSLCT,%RGCOL1,%RGCOL2) ; | 
|---|
| 120 | N %S,%Z,%P,%I | 
|---|
| 121 | S %S=+%RGSLCT,%Z=$G(@%RGDIC@(%S,0)),%P=$$FMT(%S,$S(%RGOPT["I":$P(%RGSLCT,U,2),1:$P(%Z,U))) | 
|---|
| 122 | ;S %I=$$SID(%S,$P(%RGSLCT,U,2)),%I=$S(%I="":%P,1:%I) | 
|---|
| 123 | S %I=$$SID(%S,%P),%I=$S(%I="":%P,1:%I) | 
|---|
| 124 | I %RGHTML D  Q | 
|---|
| 125 | .I '%RGQUIET W $$MSG^RGUT(%RGPRMPT,"|"),! | 
|---|
| 126 | .E  D DISV(%S) | 
|---|
| 127 | S %RGCOL1=+$G(%RGCOL1,$X) | 
|---|
| 128 | I %RGOPT(0)["Y" S %RGCOL2=+$G(%RGCOL2,IOM\%RGCOL+%RGCOL1-8-$L(%I)) | 
|---|
| 129 | E  S %RGCOL2=+$G(%RGCOL2,IOM\%RGCOL\$S(%RGOPT(0)["D":3,1:2)-3+%RGCOL1) | 
|---|
| 130 | W $$XY(%RGCOL1,$Y) | 
|---|
| 131 | I %RGOPT(0)'["J",%I'=%P W $$TRUNC^RGUT(%P,IOM\%RGCOL-6),?%RGCOL2," "_$$TRUNC^RGUT(%I,IOM-%RGCOL2-2) | 
|---|
| 132 | E  W $$TRUNC^RGUT(%I,IOM\%RGCOL-6) | 
|---|
| 133 | Q | 
|---|
| 134 | ; Return external form of result | 
|---|
| 135 | FMT(%S,%RGKEY) ; | 
|---|
| 136 | Q:%RGKEY="" %RGKEY | 
|---|
| 137 | I %RGTRP'="",$D(@%RGTRP@(%RGKEY)) Q @%RGTRP@(%RGKEY) | 
|---|
| 138 | S:%RGOPT(0)["D" %RGKEY=$$ENTRY^RGUTDT(%RGKEY) | 
|---|
| 139 | I %RGOPT(0)["Z",%RGSCN'="",$G(@%RGSCN)'="" S @("%RGKEY="_@%RGSCN) | 
|---|
| 140 | S:%RGOPT["J" %RGKEY=$$SID(%S,%RGKEY) | 
|---|
| 141 | Q %RGKEY | 
|---|
| 142 | ; Return secondary identifier | 
|---|
| 143 | SID(%S,%RGKEY) ; | 
|---|
| 144 | S %RGKEY=$G(%RGKEY) | 
|---|
| 145 | N %Z | 
|---|
| 146 | S %Z=$G(@%RGDIC@(%S,0)),@("%Z="_$S(%RGSID<0:$S(%RGKEY=$$UP^XLFSTR($P(%Z,U)):"""""",1:"%RGKEY"),%RGSID="":"%RGSID",1:%RGSID)) | 
|---|
| 147 | Q %Z | 
|---|
| 148 | ; Partial key lookup | 
|---|
| 149 | PARTIAL(%RGD,%RGKEY) ; | 
|---|
| 150 | N %,%1,%2 | 
|---|
| 151 | S (%(1),%(2))=0,%1(1)=%RGD,%1(2)=%RGKEY | 
|---|
| 152 | F %=1,2 S %1(%)=$TR(%1(%),".,;:?/!-","        ") | 
|---|
| 153 | P1 S (%2(1),%2(2))="" | 
|---|
| 154 | F %=1,2 D | 
|---|
| 155 | .F %(%)=%(%)+1:1:$L(%1(%)," ") S %2(%)=$P(%1(%)," ",%(%)) Q:%2(%)'="" | 
|---|
| 156 | Q:%2(1)="" 1 | 
|---|
| 157 | Q:%2(1)'=$E(%2(2),1,$L(%2(1))) -(%(1)=1) | 
|---|
| 158 | G P1 | 
|---|
| 159 | HELP(X) ; Application-specific help | 
|---|
| 160 | N % | 
|---|
| 161 | S %="" | 
|---|
| 162 | F  S %=$O(X(%)) Q:%=""  D:$Y>20 PAUSE W $G(X(%)),! | 
|---|
| 163 | Q | 
|---|
| 164 | ; Generic help | 
|---|
| 165 | HELP1 N % | 
|---|
| 166 | W !! | 
|---|
| 167 | D:%RGHLP'="" @%RGHLP | 
|---|
| 168 | W !,"Enter a blank line for default action.",! | 
|---|
| 169 | D:$Y>20 PAUSE | 
|---|
| 170 | W:%RGOPT'["W" "Enter ?? to see all possible selections.",! | 
|---|
| 171 | D:$Y>20 PAUSE | 
|---|
| 172 | W "Enter a space to retrieve previous selection.",! | 
|---|
| 173 | D:$Y>20 PAUSE | 
|---|
| 174 | W "Enter a valid identifier for lookup." | 
|---|
| 175 | W:(%RGOPT'["*")&(%RGXRFS[U) "  Append a * to include all indices." | 
|---|
| 176 | W ! | 
|---|
| 177 | I %RGOPT["M" D | 
|---|
| 178 | .D:$Y>20 PAUSE | 
|---|
| 179 | .W "Separate multiple selections by semicolons." | 
|---|
| 180 | R !!,"Press any key to continue...",*%:DTIME | 
|---|
| 181 | Q | 
|---|
| 182 | ; Help at choice prompt | 
|---|
| 183 | HELP2 N % | 
|---|
| 184 | W $$XY(0,16),%RGEOS,! | 
|---|
| 185 | W $S(%RGOPT(0)["K":"Enter N for next choices.",1:"Press RETURN for more choices.") | 
|---|
| 186 | W ?35,"Enter B for previous choices.",! | 
|---|
| 187 | W "Enter ^ to abort lookup.",?35,"Enter choice number to select.",! | 
|---|
| 188 | W "Any other entry = new lookup." | 
|---|
| 189 | W:%RGOPT(0)["M" ?35,"Separate multiple selections by semicolons." | 
|---|
| 190 | R !!,"Press any key to continue...",*%:DTIME | 
|---|
| 191 | Q | 
|---|
| 192 | PAUSE N % | 
|---|
| 193 | R !,"Press any key for more...",*%:DTIME | 
|---|
| 194 | W $$XY(0,%RGY+2),%RGEOS | 
|---|
| 195 | Q | 
|---|
| 196 | XY(X,Y) Q $S(%RGRS:"",1:$$XY^RGUT(X,Y)) | 
|---|