| 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
 | 
|---|