1 | RGUTLKP ;CAIRO/DKM - File lookup utility;04-Sep-1998 11:26;DKM
|
---|
2 | ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
|
---|
3 | ;=================================================================
|
---|
4 | ; Inputs:
|
---|
5 | ; %RGDIC = Global root or file #
|
---|
6 | ; %RGOPT = Options
|
---|
7 | ; A allow automatic selection of exact match
|
---|
8 | ; B sound bell with selection prompt
|
---|
9 | ; C use roll & scroll mode
|
---|
10 | ; D index is in date/time format
|
---|
11 | ; E use line editor
|
---|
12 | ; F forget the entry (i.e., ^DISV not updated)
|
---|
13 | ; G start with prior entry
|
---|
14 | ; H HTML-formatted output
|
---|
15 | ; I show only lookup identifiers
|
---|
16 | ; J show only secondary identifiers
|
---|
17 | ; K null entry at select prompt exits
|
---|
18 | ; L like X, but allows lookup at select prompt
|
---|
19 | ; M allow multiple selection
|
---|
20 | ; O show entry only once
|
---|
21 | ; P partial lookup
|
---|
22 | ; Q silent lookup
|
---|
23 | ; R reverse search through indices
|
---|
24 | ; S start selection list at last selection
|
---|
25 | ; T forget trapped inputs
|
---|
26 | ; U force uppercase translation
|
---|
27 | ; V extended DISV recall (prompt-specific)
|
---|
28 | ; W use multi-term lookup algorithm
|
---|
29 | ; X do not prompt for input
|
---|
30 | ; Y right justify secondary identifiers
|
---|
31 | ; Z perform special formatting of output
|
---|
32 | ; 1 automatic selection if one match only
|
---|
33 | ; 2-9 # of columns for selection display (default=1)
|
---|
34 | ; * force all indices to be searched
|
---|
35 | ; ^ allow search to be aborted
|
---|
36 | ; %RGPRMPT = Prompt (optional)
|
---|
37 | ; %RGXRFS = Cross-references to examine (all "B"'s by default)
|
---|
38 | ; %RGDATA = Data to lookup (optional)
|
---|
39 | ; %RGSCN = Screening criteria (optional)
|
---|
40 | ; %RGMUL = Local variable or global reference to
|
---|
41 | ; store multiple hits
|
---|
42 | ; %RGX = Column position for prompt (optional)
|
---|
43 | ; %RGY = Row position for prompt (optional)
|
---|
44 | ; %RGSID = Piece # of secondary identifier (optional)
|
---|
45 | ; or executable M code to display same
|
---|
46 | ; %RGTRP = Special inputs to trap (optional)
|
---|
47 | ; %RGHLP = Entry point to invoke help
|
---|
48 | ; Outputs:
|
---|
49 | ; Return value = index of selected entry or:
|
---|
50 | ; -1 for forced exit by ^
|
---|
51 | ; -2 for forced exit by ^^
|
---|
52 | ; 0 for null entry
|
---|
53 | ;=================================================================
|
---|
54 | ENTRY(%RGDIC,%RGOPT,%RGPRMPT,%RGXRFS,%RGDATA,%RGSCN,%RGMUL,%RGX,%RGY,%RGSID,%RGTRP,%RGHLP) ;
|
---|
55 | N %,%1,%N,%S,%Z,%RGPID,%RGXRF,%RGSCT,%RGKEY,%RGKEY1,%RGDISV,%RGSLCT,%RGXRALL,%RGXRN,%RGSMAX,%RGTRUNC,%RGD,%RGD1,%RGD2,%RGBEL,%RGNUM,%RGDIR,%RGSLT,%RGCOL,%RGLAST,%RGSAME,%RGEOS,%RGEOL,%RGHTML,%RGRS,%RGQUIET
|
---|
56 | I $$NEWERR^%ZTER N $ET S $ET=""
|
---|
57 | S (%RGOPT,%RGOPT(0))=$$UP^XLFSTR($G(%RGOPT)),%RGPID="%RGLKP"_$J,%RGBEL=$S(%RGOPT["B":$C(7),1:""),%RGDIR=$S(%RGOPT["R":-1,1:1),%RGSLT=1,%RGCOL=1,%RGEOS=$C(27,91,74),%RGEOL=$C(27,91,75),%RGHTML=0,%RGLAST=0,%RGRS=%RGOPT["C",%RGQUIET=%RGOPT["Q"
|
---|
58 | S:%RGRS (%RGEOL,%RGEOS)=""
|
---|
59 | S:%RGQUIET %RGOPT=%RGOPT_"XHM"
|
---|
60 | S:%RGOPT["H" (%RGBEL,%RGEOL,%RGEOS)="",%RGOPT=%RGOPT_"X",%RGHTML=1
|
---|
61 | S:%RGOPT["L" %RGOPT=%RGOPT_"X"
|
---|
62 | S U="^",DUZ=$G(DUZ,0),IO=$G(IO,$I),IOM=$G(IOM,80),%RGMUL=$G(%RGMUL),%RGHLP=$G(%RGHLP),%RGTRP=$G(%RGTRP),%RGSCN=$G(%RGSCN),%RGSAME=%RGOPT["M"&(%RGMUL'="")
|
---|
63 | F %=2:1:9 S:%RGOPT[% %RGCOL=%
|
---|
64 | S:%RGOPT'["M" %RGMUL=""
|
---|
65 | K:%RGMUL'="" @%RGMUL
|
---|
66 | S:%RGDIC=+%RGDIC %RGDIC=$$ROOT^DILFD(%RGDIC)
|
---|
67 | S:$E(%RGDIC,$L(%RGDIC))="(" %RGDIC=$E(%RGDIC,1,$L(%RGDIC)-1)
|
---|
68 | S:$E(%RGDIC,$L(%RGDIC))="," %RGDIC=$E(%RGDIC,1,$L(%RGDIC)-1)
|
---|
69 | I %RGDIC["(",$E(%RGDIC,$L(%RGDIC))'=")" S %RGDIC=%RGDIC_")"
|
---|
70 | S %RGPRMPT=$G(%RGPRMPT,$S(%RGOPT["X":"",1:"Enter identifier: "))
|
---|
71 | S %RGDISV=$S(%RGDIC[")":$TR(%RGDIC,")",","),1:%RGDIC_"(")_$S(%RGOPT["V":";"_%RGPRMPT,1:"")
|
---|
72 | S %RGSID=$G(%RGSID),%RGXRFS=$G(%RGXRFS),%RGDATA=$G(%RGDATA)
|
---|
73 | S:%RGSID=+%RGSID %RGSID=$S(%RGSID<0:%RGSID,1:"$P(%Z,U,"_%RGSID_")")
|
---|
74 | S %RGX=$G(%RGX,0),%RGY=$G(%RGY,3),DTIME=$G(DTIME,999999999)
|
---|
75 | W:'%RGHTML $$XY(%RGX,%RGY),%RGEOS,!
|
---|
76 | I %RGOPT["G",$G(^DISV(DUZ,%RGDISV))'="" D
|
---|
77 | .S %RGDATA=^(%RGDISV)
|
---|
78 | .S:+%RGDATA=%RGDATA %RGDATA=$P($G(@%RGDIC@(%RGDATA,0)),U)
|
---|
79 | I %RGXRFS="" D
|
---|
80 | .S (%,%RGXRFS)="B"
|
---|
81 | .F S %=$O(@%RGDIC@(%)) Q:$E(%)'="B" S %RGXRFS=%RGXRFS_U_%
|
---|
82 | F %=1:1:$L(%RGXRFS,U) S %1=$P(%RGXRFS,U,%) S:%1'="" %RGXRFS($P(%1,":"))=$P(%1,":",2),$P(%RGXRFS,U,%)=$P(%1,":")
|
---|
83 | S (%RGD1,%RGD2)=""
|
---|
84 | D RM(0)
|
---|
85 | S %RGIEN=$$INPUT
|
---|
86 | W:'%RGHTML $$XY(%RGX+$L(%RGPRMPT),%RGY),$$TRUNC^RGUT(%RGD2,IOM-$X),%RGEOS
|
---|
87 | D RM(IOM)
|
---|
88 | K ^TMP(%RGPID)
|
---|
89 | Q %RGIEN
|
---|
90 | INPUT() ;
|
---|
91 | INP K ^TMP(%RGPID)
|
---|
92 | D READ
|
---|
93 | S:%RGOPT["U" %RGD=$$UP^XLFSTR(%RGD)
|
---|
94 | S @$$TRAP^RGUTOS("ERROR^RGUTLKP")
|
---|
95 | I %RGD="",%RGTRP'="" S %RGD=$G(@%RGTRP@(" "))
|
---|
96 | Q:"^^"[%RGD -$L(%RGD)
|
---|
97 | I "?"[%RGD D HELP1^RGUTLK2 G INP
|
---|
98 | I %RGD=" " D SAME G:%RGD="" INP2
|
---|
99 | I %RGTRP'="",$D(@%RGTRP@(%RGD)) D Q %RGD
|
---|
100 | .S %RGSAME=1
|
---|
101 | .D:%RGOPT'["T" DISV^RGUTLK2(%RGD)
|
---|
102 | .S %RGD2=$G(@%RGTRP@(%RGD))
|
---|
103 | .S:%RGD2="" %RGD2=%RGD
|
---|
104 | S:%RGD="??" %RGD=""
|
---|
105 | I $E(%RGD,$L(%RGD))="*" S %RGXRALL=1,%RGD=$E(%RGD,1,$L(%RGD)-1)
|
---|
106 | E S %RGXRALL=%RGOPT["*"
|
---|
107 | S %RGIEN=$$LKP^RGUTLK2(%RGD)
|
---|
108 | INP2 G INP:%RGIEN=""!$L(%RGD1)
|
---|
109 | Q %RGIEN
|
---|
110 | READ S %RGD=""
|
---|
111 | F Q:%RGD'=""!(%RGD1="") S %RGD=$P(%RGD1,";"),%RGD1=$P(%RGD1,";",2,999)
|
---|
112 | Q:$L(%RGD)
|
---|
113 | S %RGD=%RGDATA,%RGDATA=""
|
---|
114 | W:'%RGHTML $$XY(0,%RGY+2),%RGEOS,$$XY(%RGX,%RGY),%RGPRMPT_%RGEOL
|
---|
115 | I %RGOPT["X" S:%RGOPT["E" %RGOPT=$TR(%RGOPT,"X"),%RGDATA=%RGD Q
|
---|
116 | I %RGOPT["E" D
|
---|
117 | .N %,%1
|
---|
118 | .S:%RGD?1"`"1.N %RGD=+$E(%RGD,2,99),%RGD=$$FMT^RGUTLK2(%RGD,$P($G(@%RGDIC@(%RGD,0)),U))
|
---|
119 | .S %1=0,%=%RGX+$L(%RGPRMPT),%=$$ENTRY^RGUTEDT(%RGD,IOM-%-1,%,%RGY,"","RHV",,,,,.%1)
|
---|
120 | .S:%1=3 %=U
|
---|
121 | .S:%="?" %RGDATA=%RGD
|
---|
122 | .S %RGD=%
|
---|
123 | E I '$L(%RGD) R %RGD:DTIME S:'$T %RGD=U
|
---|
124 | I %RGOPT["M",%RGD[";" S %RGD1=%RGD G READ
|
---|
125 | Q
|
---|
126 | SAME S %RGSAME=0,%RGIEN="",%RGD="",%RGSCT=0
|
---|
127 | I %RGMUL'="" D
|
---|
128 | .S %=""
|
---|
129 | .F S %=$O(^DISV(DUZ,%RGDISV,%)) Q:%="" D SM1
|
---|
130 | E S %=$G(^DISV(DUZ,%RGDISV)) D:%'="" SM1
|
---|
131 | S:%RGHTML %RGIEN=%RGSCT
|
---|
132 | Q
|
---|
133 | SM1 I %RGTRP'="",$D(@%RGTRP@(%)) S %RGIEN=%,%RGD=%
|
---|
134 | E I $$VALD^RGUTLK2(%) S %RGIEN=%
|
---|
135 | I D DISV^RGUTLK2(%RGIEN) S %RGSCT=%RGSCT+1
|
---|
136 | Q
|
---|
137 | XY(X,Y) Q $S(%RGRS:"",1:$$XY^RGUT(X,Y))
|
---|
138 | RM(X) X ^%ZOSF("RM")
|
---|
139 | Q
|
---|
140 | ERROR W:'%RGHTML $$XY(0,%RGY+1),*7,%RGEOL,$$EC^%ZOSV
|
---|
141 | S (%RGDATA,%RGD1,%RGD2)=""
|
---|
142 | G INP
|
---|