Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: RGUTLKP

RGUTLKP.m

Go to the documentation of this file.
  1. RGUTLKP ;CAIRO/DKM - File lookup utility;04-Sep-1998 11:26;DKM
  1. ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
  1. ;=================================================================
  1. ; Inputs:
  1. ; %RGDIC = Global root or file #
  1. ; %RGOPT = Options
  1. ; A allow automatic selection of exact match
  1. ; B sound bell with selection prompt
  1. ; C use roll & scroll mode
  1. ; D index is in date/time format
  1. ; E use line editor
  1. ; F forget the entry (i.e., ^DISV not updated)
  1. ; G start with prior entry
  1. ; H HTML-formatted output
  1. ; I show only lookup identifiers
  1. ; J show only secondary identifiers
  1. ; K null entry at select prompt exits
  1. ; L like X, but allows lookup at select prompt
  1. ; M allow multiple selection
  1. ; O show entry only once
  1. ; P partial lookup
  1. ; Q silent lookup
  1. ; R reverse search through indices
  1. ; S start selection list at last selection
  1. ; T forget trapped inputs
  1. ; U force uppercase translation
  1. ; V extended DISV recall (prompt-specific)
  1. ; W use multi-term lookup algorithm
  1. ; X do not prompt for input
  1. ; Y right justify secondary identifiers
  1. ; Z perform special formatting of output
  1. ; 1 automatic selection if one match only
  1. ; 2-9 # of columns for selection display (default=1)
  1. ; * force all indices to be searched
  1. ; ^ allow search to be aborted
  1. ; %RGPRMPT = Prompt (optional)
  1. ; %RGXRFS = Cross-references to examine (all "B"'s by default)
  1. ; %RGDATA = Data to lookup (optional)
  1. ; %RGSCN = Screening criteria (optional)
  1. ; %RGMUL = Local variable or global reference to
  1. ; store multiple hits
  1. ; %RGX = Column position for prompt (optional)
  1. ; %RGY = Row position for prompt (optional)
  1. ; %RGSID = Piece # of secondary identifier (optional)
  1. ; or executable M code to display same
  1. ; %RGTRP = Special inputs to trap (optional)
  1. ; %RGHLP = Entry point to invoke help
  1. ; Outputs:
  1. ; Return value = index of selected entry or:
  1. ; -1 for forced exit by ^
  1. ; -2 for forced exit by ^^
  1. ; 0 for null entry
  1. ;=================================================================
  1. ENTRY(%RGDIC,%RGOPT,%RGPRMPT,%RGXRFS,%RGDATA,%RGSCN,%RGMUL,%RGX,%RGY,%RGSID,%RGTRP,%RGHLP) ;
  1. 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
  1. I $$NEWERR^%ZTER N $ET S $ET=""
  1. 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"
  1. S:%RGRS (%RGEOL,%RGEOS)=""
  1. S:%RGQUIET %RGOPT=%RGOPT_"XHM"
  1. S:%RGOPT["H" (%RGBEL,%RGEOL,%RGEOS)="",%RGOPT=%RGOPT_"X",%RGHTML=1
  1. S:%RGOPT["L" %RGOPT=%RGOPT_"X"
  1. 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'="")
  1. F %=2:1:9 S:%RGOPT[% %RGCOL=%
  1. S:%RGOPT'["M" %RGMUL=""
  1. K:%RGMUL'="" @%RGMUL
  1. S:%RGDIC=+%RGDIC %RGDIC=$$ROOT^DILFD(%RGDIC)
  1. S:$E(%RGDIC,$L(%RGDIC))="(" %RGDIC=$E(%RGDIC,1,$L(%RGDIC)-1)
  1. S:$E(%RGDIC,$L(%RGDIC))="," %RGDIC=$E(%RGDIC,1,$L(%RGDIC)-1)
  1. I %RGDIC["(",$E(%RGDIC,$L(%RGDIC))'=")" S %RGDIC=%RGDIC_")"
  1. S %RGPRMPT=$G(%RGPRMPT,$S(%RGOPT["X":"",1:"Enter identifier: "))
  1. S %RGDISV=$S(%RGDIC[")":$TR(%RGDIC,")",","),1:%RGDIC_"(")_$S(%RGOPT["V":";"_%RGPRMPT,1:"")
  1. S %RGSID=$G(%RGSID),%RGXRFS=$G(%RGXRFS),%RGDATA=$G(%RGDATA)
  1. S:%RGSID=+%RGSID %RGSID=$S(%RGSID<0:%RGSID,1:"$P(%Z,U,"_%RGSID_")")
  1. S %RGX=$G(%RGX,0),%RGY=$G(%RGY,3),DTIME=$G(DTIME,999999999)
  1. W:'%RGHTML $$XY(%RGX,%RGY),%RGEOS,!
  1. I %RGOPT["G",$G(^DISV(DUZ,%RGDISV))'="" D
  1. .S %RGDATA=^(%RGDISV)
  1. .S:+%RGDATA=%RGDATA %RGDATA=$P($G(@%RGDIC@(%RGDATA,0)),U)
  1. I %RGXRFS="" D
  1. .S (%,%RGXRFS)="B"
  1. .F S %=$O(@%RGDIC@(%)) Q:$E(%)'="B" S %RGXRFS=%RGXRFS_U_%
  1. F %=1:1:$L(%RGXRFS,U) S %1=$P(%RGXRFS,U,%) S:%1'="" %RGXRFS($P(%1,":"))=$P(%1,":",2),$P(%RGXRFS,U,%)=$P(%1,":")
  1. S (%RGD1,%RGD2)=""
  1. D RM(0)
  1. S %RGIEN=$$INPUT
  1. W:'%RGHTML $$XY(%RGX+$L(%RGPRMPT),%RGY),$$TRUNC^RGUT(%RGD2,IOM-$X),%RGEOS
  1. D RM(IOM)
  1. K ^TMP(%RGPID)
  1. Q %RGIEN
  1. INPUT() ;
  1. INP K ^TMP(%RGPID)
  1. D READ
  1. S:%RGOPT["U" %RGD=$$UP^XLFSTR(%RGD)
  1. S @$$TRAP^RGUTOS("ERROR^RGUTLKP")
  1. I %RGD="",%RGTRP'="" S %RGD=$G(@%RGTRP@(" "))
  1. Q:"^^"[%RGD -$L(%RGD)
  1. I "?"[%RGD D HELP1^RGUTLK2 G INP
  1. I %RGD=" " D SAME G:%RGD="" INP2
  1. I %RGTRP'="",$D(@%RGTRP@(%RGD)) D Q %RGD
  1. .S %RGSAME=1
  1. .D:%RGOPT'["T" DISV^RGUTLK2(%RGD)
  1. .S %RGD2=$G(@%RGTRP@(%RGD))
  1. .S:%RGD2="" %RGD2=%RGD
  1. S:%RGD="??" %RGD=""
  1. I $E(%RGD,$L(%RGD))="*" S %RGXRALL=1,%RGD=$E(%RGD,1,$L(%RGD)-1)
  1. E S %RGXRALL=%RGOPT["*"
  1. S %RGIEN=$$LKP^RGUTLK2(%RGD)
  1. INP2 G INP:%RGIEN=""!$L(%RGD1)
  1. Q %RGIEN
  1. READ S %RGD=""
  1. F Q:%RGD'=""!(%RGD1="") S %RGD=$P(%RGD1,";"),%RGD1=$P(%RGD1,";",2,999)
  1. Q:$L(%RGD)
  1. S %RGD=%RGDATA,%RGDATA=""
  1. W:'%RGHTML $$XY(0,%RGY+2),%RGEOS,$$XY(%RGX,%RGY),%RGPRMPT_%RGEOL
  1. I %RGOPT["X" S:%RGOPT["E" %RGOPT=$TR(%RGOPT,"X"),%RGDATA=%RGD Q
  1. I %RGOPT["E" D
  1. .N %,%1
  1. .S:%RGD?1"`"1.N %RGD=+$E(%RGD,2,99),%RGD=$$FMT^RGUTLK2(%RGD,$P($G(@%RGDIC@(%RGD,0)),U))
  1. .S %1=0,%=%RGX+$L(%RGPRMPT),%=$$ENTRY^RGUTEDT(%RGD,IOM-%-1,%,%RGY,"","RHV",,,,,.%1)
  1. .S:%1=3 %=U
  1. .S:%="?" %RGDATA=%RGD
  1. .S %RGD=%
  1. E I '$L(%RGD) R %RGD:DTIME S:'$T %RGD=U
  1. I %RGOPT["M",%RGD[";" S %RGD1=%RGD G READ
  1. Q
  1. SAME S %RGSAME=0,%RGIEN="",%RGD="",%RGSCT=0
  1. I %RGMUL'="" D
  1. .S %=""
  1. .F S %=$O(^DISV(DUZ,%RGDISV,%)) Q:%="" D SM1
  1. E S %=$G(^DISV(DUZ,%RGDISV)) D:%'="" SM1
  1. S:%RGHTML %RGIEN=%RGSCT
  1. Q
  1. SM1 I %RGTRP'="",$D(@%RGTRP@(%)) S %RGIEN=%,%RGD=%
  1. E I $$VALD^RGUTLK2(%) S %RGIEN=%
  1. I D DISV^RGUTLK2(%RGIEN) S %RGSCT=%RGSCT+1
  1. Q
  1. XY(X,Y) Q $S(%RGRS:"",1:$$XY^RGUT(X,Y))
  1. RM(X) X ^%ZOSF("RM")
  1. Q
  1. ERROR W:'%RGHTML $$XY(0,%RGY+1),*7,%RGEOL,$$EC^%ZOSV
  1. S (%RGDATA,%RGD1,%RGD2)=""
  1. G INP