| [896] | 1 | TMGUSRIF ;TMG/kst/USER INTERFACE API FUNCTIONS ;03/25/06, 5/28/10 | 
|---|
|  | 2 | ;;1.0;TMG-LIB;**1**;07/12/05 | 
|---|
|  | 3 |  | 
|---|
|  | 4 | ;"TMG USER INTERFACE API FUNCTIONS | 
|---|
|  | 5 | ;"Kevin Toppenberg MD | 
|---|
|  | 6 | ;"GNU General Public License (GPL) applies | 
|---|
|  | 7 | ;"7-12-2005 | 
|---|
|  | 8 |  | 
|---|
|  | 9 | ;"======================================================================= | 
|---|
|  | 10 | ;" API -- Public Functions. | 
|---|
|  | 11 | ;"======================================================================= | 
|---|
|  | 12 |  | 
|---|
|  | 13 | ;"PopupArray^TMGUSRIF(IndentW,Width,Array,Modal) | 
|---|
|  | 14 | ;"PopupBox^TMGUSRIF(Header,Text,[Width]) | 
|---|
|  | 15 | ;"ProgressBar^TMGUSRIF(value,label,min,max,width,startTime) | 
|---|
|  | 16 | ;"PRESSTOCONT^TMGUSRIF | 
|---|
|  | 17 | ;"PressToCont^TMGUSRIF | 
|---|
|  | 18 | ;"$$KeyPressed^TMGUSRIF(wantChar,waitTime) | 
|---|
|  | 19 | ;"$$Read^TMGUSRIF(Terminators,timeOut,Num,initialVal) -- custom read function with custom terminators | 
|---|
|  | 20 | ;"$$UserAborted^TMGUSRIF() | 
|---|
|  | 21 | ;"Selector(pArray,pResults,Header)  -- select from an array | 
|---|
|  | 22 | ;"Slctor2(pArray,pResults,Header) -- select from an array (different input) | 
|---|
|  | 23 | ;"IENSelector(pIENArray,pResults,File,Field,Header,Sort) | 
|---|
|  | 24 | ;"MENU(Options,defChoice,.UserRaw) | 
|---|
|  | 25 | ;"Menu(Options,defChoice,.UserRaw) | 
|---|
|  | 26 | ;"Scroller(pArray,Option) -- Provide a scroll box interfact | 
|---|
|  | 27 |  | 
|---|
|  | 28 | ;"======================================================================= | 
|---|
|  | 29 | ;"Private Functions | 
|---|
|  | 30 | ;"======================================================================= | 
|---|
|  | 31 | ;"XPopupArray(Array,Modal) | 
|---|
|  | 32 | ;"ProgTest | 
|---|
|  | 33 |  | 
|---|
|  | 34 | ;"======================================================================= | 
|---|
|  | 35 | ;"======================================================================= | 
|---|
|  | 36 | ;"DEPENDENCIES | 
|---|
|  | 37 | ;"TMGDEBUG,TMGSTUTL,TMGXDLG | 
|---|
|  | 38 | ;"======================================================================= | 
|---|
|  | 39 |  | 
|---|
|  | 40 | PopupArray(IndentW,Width,Array,Modal) | 
|---|
|  | 41 | ;"PUBLIC FUNCTION | 
|---|
|  | 42 | ;"Purpose: To draw a box, of specified Width, and display text | 
|---|
|  | 43 | ;"Input: IndentW = width of indent amount (how far from left margin) | 
|---|
|  | 44 | ;"        Width = desired width of box. | 
|---|
|  | 45 | ;"        Header = one line of text to put in header of popup box | 
|---|
|  | 46 | ;"        Array: an array in following format: | 
|---|
|  | 47 | ;"                Array(0)=Header | 
|---|
|  | 48 | ;"                Array(1)=Text line 1 | 
|---|
|  | 49 | ;"                Array(2)=Text line 2 | 
|---|
|  | 50 | ;"                ... | 
|---|
|  | 51 | ;"                Array(n)=Text line n | 
|---|
|  | 52 | ;"        Modal - really only has meaning for those time when | 
|---|
|  | 53 | ;"                box will be passed to GUI X dialog box. | 
|---|
|  | 54 | ;"                Modal=1 means stays in foreground, | 
|---|
|  | 55 | ;"                      0 means leave box up, continue script execution. | 
|---|
|  | 56 | ;"Note: Text will be clipped to fit in box. | 
|---|
|  | 57 |  | 
|---|
|  | 58 | if $get(TMGDEBUG)>0 do DebugEntry^TMGDEBUG(.DBIndent,"PopupArray") | 
|---|
|  | 59 |  | 
|---|
|  | 60 | set cModal=$get(cModal,"MODAL") | 
|---|
|  | 61 | set cDialog=$get(cModal,"UseDialog") | 
|---|
|  | 62 | set Modal=$get(Modal,cModal) | 
|---|
|  | 63 | new Header | 
|---|
|  | 64 | new Text set Text="" | 
|---|
|  | 65 | new index,i,S | 
|---|
|  | 66 |  | 
|---|
|  | 67 | ;"Scan array for any needed data substitution i.e. {{...}} | 
|---|
|  | 68 | new tempresult | 
|---|
|  | 69 | set index=$order(Array("")) | 
|---|
|  | 70 | for  do  quit:index="" | 
|---|
|  | 71 | . set S=Array(index) | 
|---|
|  | 72 | . ;"set tempresult=$$CheckSubstituteData(.S)  ;"Do any data lookup needed | 
|---|
|  | 73 | . set Array(index)=S | 
|---|
|  | 74 | . set index=$order(Array(index)) | 
|---|
|  | 75 |  | 
|---|
|  | 76 | if $get(DispMode(cDialog)) do  goto PUADone | 
|---|
|  | 77 | . do XPopupArray(.Array,Modal) | 
|---|
|  | 78 |  | 
|---|
|  | 79 | set IndentW=$get(IndentW,1) ;"default indent=1 | 
|---|
|  | 80 | set Header=$get(Array(0)," ") | 
|---|
|  | 81 | set Width=$get(Width,40)   ;"default=40 | 
|---|
|  | 82 |  | 
|---|
|  | 83 | write ! | 
|---|
|  | 84 | ;"Draw top line | 
|---|
|  | 85 | for i=1:1:IndentW write " " | 
|---|
|  | 86 | write "+" | 
|---|
|  | 87 | for i=1:1:(Width-2) write "=" | 
|---|
|  | 88 | write "+",! | 
|---|
|  | 89 |  | 
|---|
|  | 90 | ;"Draw Header line | 
|---|
|  | 91 | do SetStrLen^TMGSTUTL(.Header,Width-4) | 
|---|
|  | 92 | for i=1:1:IndentW write " " | 
|---|
|  | 93 | write "| ",Header," |..",! | 
|---|
|  | 94 |  | 
|---|
|  | 95 | ;"Draw divider line | 
|---|
|  | 96 | for i=1:1:IndentW write " " | 
|---|
|  | 97 | write "+" | 
|---|
|  | 98 | for i=1:1:(Width-2) write "-" | 
|---|
|  | 99 | write "+ :",! | 
|---|
|  | 100 |  | 
|---|
|  | 101 | ;"Put out message | 
|---|
|  | 102 | set index=$order(Array(0)) | 
|---|
|  | 103 | PUBLoop | 
|---|
|  | 104 | if index="" goto BtmLine | 
|---|
|  | 105 | set S=$get(Array(index)," ") | 
|---|
|  | 106 | do SetStrLen^TMGSTUTL(.S,Width-4) | 
|---|
|  | 107 | for i=1:1:IndentW write " " | 
|---|
|  | 108 | write "| ",S," | :",! | 
|---|
|  | 109 | set index=$order(Array(index)) | 
|---|
|  | 110 | goto PUBLoop | 
|---|
|  | 111 |  | 
|---|
|  | 112 | BtmLine | 
|---|
|  | 113 | ;"Draw Bottom line | 
|---|
|  | 114 | for i=1:1:IndentW write " " | 
|---|
|  | 115 | write "+" | 
|---|
|  | 116 | for i=1:1:(Width-2) write "=" | 
|---|
|  | 117 | write "+ :",! | 
|---|
|  | 118 |  | 
|---|
|  | 119 | ;"Draw bottom shaddow | 
|---|
|  | 120 | for i=1:1:IndentW write " " | 
|---|
|  | 121 | write "  " | 
|---|
|  | 122 | write ":" | 
|---|
|  | 123 | for i=1:1:(Width-2) write "." | 
|---|
|  | 124 | write ".",! | 
|---|
|  | 125 |  | 
|---|
|  | 126 | write ! | 
|---|
|  | 127 |  | 
|---|
|  | 128 | PUADone | 
|---|
|  | 129 | if $get(TMGDEBUG)>0 do DebugExit^TMGDEBUG(.DBIndent,"PopupArray") | 
|---|
|  | 130 | quit | 
|---|
|  | 131 |  | 
|---|
|  | 132 |  | 
|---|
|  | 133 |  | 
|---|
|  | 134 | XPopupArray(Array,Modal) | 
|---|
|  | 135 | ;"Purpose -- to pass the older text popup box onto a X GUI box | 
|---|
|  | 136 |  | 
|---|
|  | 137 | new Title | 
|---|
|  | 138 | new Text | 
|---|
|  | 139 | new index | 
|---|
|  | 140 | new S set S="" | 
|---|
|  | 141 | new OneLine | 
|---|
|  | 142 | new result | 
|---|
|  | 143 |  | 
|---|
|  | 144 | set cOKToCont=$get(cOKToCont,1) | 
|---|
|  | 145 | set cAbort=$get(cAbort,0) | 
|---|
|  | 146 | set cModal=$get(cModal,"MODAL") | 
|---|
|  | 147 |  | 
|---|
|  | 148 |  | 
|---|
|  | 149 | if $get(TMGDEBUG)>0 do DebugEntry^TMGDEBUG(.DBIndent,"XPopupArray") | 
|---|
|  | 150 |  | 
|---|
|  | 151 | set Title=$get(Array(0)) | 
|---|
|  | 152 | set index=$order(Array(0)) | 
|---|
|  | 153 | set Modal=$get(Modal,cModalMode) | 
|---|
|  | 154 | XPL1 | 
|---|
|  | 155 | if index="" goto XPL2 | 
|---|
|  | 156 | set OneLine=$get(Array(index)," ") | 
|---|
|  | 157 | set OneLine=$translate(OneLine,"""","'") | 
|---|
|  | 158 | set S=S_OneLine_"\n" | 
|---|
|  | 159 | set index=$order(Array(index)) | 
|---|
|  | 160 | goto XPL1 | 
|---|
|  | 161 | XPL2 | 
|---|
|  | 162 | if $get(TMGDEBUG)>0 do DebugMsg^TMGDEBUG(.DBIndent,"Title=",Title) | 
|---|
|  | 163 | if $get(TMGDEBUG)>0 do DebugMsg^TMGDEBUG(.DBIndent,"Text=",S) | 
|---|
|  | 164 | set result=$$Msg^TMGXDLG(Title,S,0,0,Modal) | 
|---|
|  | 165 | if $get(TMGDEBUG)>0 do DebugExit^TMGDEBUG(.DBIndent,"XPopupArray") | 
|---|
|  | 166 | quit | 
|---|
|  | 167 |  | 
|---|
|  | 168 |  | 
|---|
|  | 169 |  | 
|---|
|  | 170 |  | 
|---|
|  | 171 | PopupBox(Header,Text,Width) | 
|---|
|  | 172 | ;"PUBLIC FUNCTION | 
|---|
|  | 173 | ;"Purpose: To provide easy text output box | 
|---|
|  | 174 | ;"Input: Header -- a short string for header | 
|---|
|  | 175 | ;"       Text - the text to display | 
|---|
|  | 176 | ;"         [Width] -- optional width specifier. Value=0 same as not specified | 
|---|
|  | 177 | ;"        (DBIndent) -- uses a var with global scope (if defined) for indent amount | 
|---|
|  | 178 | ;"Note: If text width not specified, and Text is <= 60, | 
|---|
|  | 179 | ;"        then all will be put on one line. | 
|---|
|  | 180 | ;"        Otherwise, width is set to 60, and text is wrapped. | 
|---|
|  | 181 | ;"        Also, text of the message can contain "\n", which will be interpreted | 
|---|
|  | 182 | ;"        as a new-line character. | 
|---|
|  | 183 | ;"Result: none | 
|---|
|  | 184 |  | 
|---|
|  | 185 |  | 
|---|
|  | 186 | ;"Note: This function can't be exported to a separate package because of dependancies | 
|---|
|  | 187 |  | 
|---|
|  | 188 |  | 
|---|
|  | 189 | if $get(TMGDEBUG)>0 do DebugEntry^TMGDEBUG(.DBIndent,"PopupBox") | 
|---|
|  | 190 |  | 
|---|
|  | 191 | set cNewLn=$get(cNewLn,"\n") | 
|---|
|  | 192 | new TextOut | 
|---|
|  | 193 | new TextI set TextI=0 | 
|---|
|  | 194 | new PartB set PartB="" | 
|---|
|  | 195 | new PartB1 set PartB1="" | 
|---|
|  | 196 | set Width=+$get(Width,0) | 
|---|
|  | 197 |  | 
|---|
|  | 198 | set TextOut(TextI)=Header | 
|---|
|  | 199 | set TextI=TextI+1 | 
|---|
|  | 200 |  | 
|---|
|  | 201 | if Width=0 do | 
|---|
|  | 202 | . new HeaderBased | 
|---|
|  | 203 | . new NumLines | 
|---|
|  | 204 | . new HLen set HLen=$length(Header)+4 | 
|---|
|  | 205 | . new TLen set TLen=$length(Text)+4 | 
|---|
|  | 206 | . if TLen>HLen do | 
|---|
|  | 207 | . . set Width=TLen | 
|---|
|  | 208 | . . set HeaderBased=0 | 
|---|
|  | 209 | . else  do | 
|---|
|  | 210 | . . set Width=HLen | 
|---|
|  | 211 | . . set HeaderBased=1 | 
|---|
|  | 212 | . if Width>75 set Width=75 | 
|---|
|  | 213 | . set NumLines=TLen/Width | 
|---|
|  | 214 | . if TLen#Width>0 set NumLines=NumLines+1 | 
|---|
|  | 215 | . if (NumLines>1)&(HeaderBased=0) do | 
|---|
|  | 216 | . . set Width=(TLen\NumLines)+4 | 
|---|
|  | 217 | . . if Width<HLen set Width=HLen | 
|---|
|  | 218 | . if Width>75 set Width=75 | 
|---|
|  | 219 |  | 
|---|
|  | 220 | PUWBLoop ;"Load string up into Text array, to pass to PopupArray | 
|---|
|  | 221 | if Text[cNewLn do | 
|---|
|  | 222 | . do CleaveStr^TMGSTUTL(.Text,cNewLn,.PartB1) | 
|---|
|  | 223 | do SplitStr^TMGSTUTL(.Text,(Width-4),.PartB) | 
|---|
|  | 224 | set PartB=PartB_PartB1 set PartB1="" | 
|---|
|  | 225 | set TextOut(TextI)=Text | 
|---|
|  | 226 | set TextI=TextI+1 | 
|---|
|  | 227 | if $length(PartB)>0 do  goto PUWBLoop | 
|---|
|  | 228 | . set Text=PartB | 
|---|
|  | 229 | . set PartB="" | 
|---|
|  | 230 |  | 
|---|
|  | 231 | do PopupArray(.DBIndent,Width,.TextOut) | 
|---|
|  | 232 |  | 
|---|
|  | 233 | if $get(TMGDEBUG)>0 do DebugExit^TMGDEBUG(.DBIndent,"PopupBox") | 
|---|
|  | 234 | quit | 
|---|
|  | 235 |  | 
|---|
|  | 236 |  | 
|---|
|  | 237 | ProgressBar(value,label,min,max,width,startTime) | 
|---|
|  | 238 | ;"Purpose: to draw a progress bar on a line of the screen | 
|---|
|  | 239 | ;"Input: | 
|---|
|  | 240 | ;"         value -- the current value to graph out | 
|---|
|  | 241 | ;"         label -- OPTIONAL -- a label to describe progres.  Default="Progress" | 
|---|
|  | 242 | ;"         max -- OPTIONAL -- the max number that value will be. Default is 100 | 
|---|
|  | 243 | ;"                      if max=-1 and min=-1 then turn on spin mode (see below) | 
|---|
|  | 244 | ;"         min -- OPTIONAL -- the minimal number that value will be.  Default is 0 | 
|---|
|  | 245 | ;"                      if max=-1 and min=-1 then turn on spin mode (see below) | 
|---|
|  | 246 | ;"         width -- OPTIONAL -- the number of characters that the progress bar | 
|---|
|  | 247 | ;"                              will be in width.  Default is 70 | 
|---|
|  | 248 | ;"         startTime -- OPTIONAL -- start time of process.  If provided, it will | 
|---|
|  | 249 | ;"              be used to determine remaining time.  Format should be same as $H | 
|---|
|  | 250 | ;"Note: will use global ^TMP("TMG","PROGRESS-BAR",$J) | 
|---|
|  | 251 | ;"Note: bar will look like this: | 
|---|
|  | 252 | ;"              Progress:  27%-------->|-----------------------------------| (Time) | 
|---|
|  | 253 | ;"Note--Spin Mode: To show motion without knowing the max amount, a spin mode is needed. | 
|---|
|  | 254 | ;"              Progress:  |-----<==>--------------------------------------| | 
|---|
|  | 255 | ;"              And the bar will move back and forth. | 
|---|
|  | 256 | ;"              In this mode, value is ignored and is thus optional. | 
|---|
|  | 257 | ;"              To use this mode, set max=-1,min=-1 | 
|---|
|  | 258 | ;"Result: None | 
|---|
|  | 259 |  | 
|---|
|  | 260 | ;"FYI -- The preexisting way to do this, from Dave Whitten | 
|---|
|  | 261 | ;" | 
|---|
|  | 262 | ;"Did you try using the already existing function to do this? | 
|---|
|  | 263 | ;"ie: try out this 'mini program' | 
|---|
|  | 264 | ;">; need to set up vars like DUZ,DTIME, IO, IO(0), etc. | 
|---|
|  | 265 | ;" D INIT^XPDID | 
|---|
|  | 266 | ;" S XPDIDTOT=100 | 
|---|
|  | 267 | ;" D TITLE^XPDID("hello world") | 
|---|
|  | 268 | ;" D UPDATE^XPDID(50) | 
|---|
|  | 269 | ;" F AJJ=90:1:100 D UPDATE^XPDID(I) | 
|---|
|  | 270 | ;" D EXIT^XPDID() | 
|---|
|  | 271 | ;" | 
|---|
|  | 272 | ;"The XPDID routine does modify the scroll region and make the | 
|---|
|  | 273 | ;"application seem a bit more "GUI"-like, by the way... | 
|---|
|  | 274 | ;" | 
|---|
|  | 275 | ;"David | 
|---|
|  | 276 |  | 
|---|
|  | 277 | new NakedRef set NakedRef=$$LGR^TMGIDE ;"save naked reference | 
|---|
|  | 278 | do  ;"Turn off cursor display, to prevent flickering | 
|---|
|  | 279 | . new $etrap set $etrap="" | 
|---|
|  | 280 | . xecute ^%ZOSF("TRMOFF") | 
|---|
|  | 281 |  | 
|---|
|  | 282 | new premark,i,postmark,pct | 
|---|
|  | 283 | new pRefCt set pRefCt=$name(^TMP("TMG","PROGRESS-BAR",$J)) | 
|---|
|  | 284 | set max=+$get(max,100),min=+$get(min,0) | 
|---|
|  | 285 | set width=+$get(width,70) | 
|---|
|  | 286 | set label=$get(label,"Progress") | 
|---|
|  | 287 |  | 
|---|
|  | 288 | new spinMode set spinMode=((max=-1)&(min=-1)) | 
|---|
|  | 289 | if spinMode goto Spin1  ;"<-- skip all this for spin mode | 
|---|
|  | 290 |  | 
|---|
|  | 291 | if (max-min)=0 set pct=0 | 
|---|
|  | 292 | else  set pct=(value-min)/(max-min) | 
|---|
|  | 293 | if pct>1 set pct=1 | 
|---|
|  | 294 | if pct<0 set pct=0 | 
|---|
|  | 295 | if (pct<1)&($get(startTime)="") set startTime=$H | 
|---|
|  | 296 |  | 
|---|
|  | 297 | set startTime=$get(startTime)  ;" +$get 61053,61748 --> 61053 | 
|---|
|  | 298 |  | 
|---|
|  | 299 | new barberPole set barberPole=+$get(@pRefCt@("BARBER POLE")) | 
|---|
|  | 300 | if $get(@pRefCt@("BARBER POLE","LAST INC"))'=$H do | 
|---|
|  | 301 | . set barberPole=(barberPole-1)#4 | 
|---|
|  | 302 | . set @pRefCt@("BARBER POLE")=barberPole ;"should be 0,1,2, or 3) | 
|---|
|  | 303 | . set @pRefCt@("BARBER POLE","LAST INC")=$H | 
|---|
|  | 304 |  | 
|---|
|  | 305 | new curRate set curRate="" | 
|---|
|  | 306 | if $get(@pRefCt@("START-TIME"))=startTime do | 
|---|
|  | 307 | . new interval set interval=$get(@pRefCt@("SAMPLING","INTERVAL"),10) | 
|---|
|  | 308 | . set curRate=$get(@pRefCt@("LATEST-RATE")) | 
|---|
|  | 309 | . new count set count=$get(@pRefCt@("SAMPLING","COUNT"))+1 | 
|---|
|  | 310 | . if count#interval=0 do | 
|---|
|  | 311 | . . new deltaT,deltaV | 
|---|
|  | 312 | . . set deltaT=$$HDIFF^XLFDT($H,$get(@pRefCt@("SAMPLING","REF-TIME")),2) | 
|---|
|  | 313 | . . if deltaT=0 set interval=interval*2 | 
|---|
|  | 314 | . . else  if deltaT>1000 set interval=interval\1.5 | 
|---|
|  | 315 | . . set deltaV=value-$get(@pRefCt@("SAMPLING","VALUE COUNT")) | 
|---|
|  | 316 | . . if deltaV>0 set curRate=deltaT/deltaV  ;"dT/dValue | 
|---|
|  | 317 | . . else  set curRate="" | 
|---|
|  | 318 | . . set @pRefCt@("LATEST-RATE")=curRate | 
|---|
|  | 319 | . . set @pRefCt@("SAMPLING","REF-TIME")=$H | 
|---|
|  | 320 | . . set @pRefCt@("SAMPLING","VALUE COUNT")=value | 
|---|
|  | 321 | . set @pRefCt@("SAMPLING","COUNT")=count#interval | 
|---|
|  | 322 | . set @pRefCt@("SAMPLING","INTERVAL")=interval | 
|---|
|  | 323 | else  do | 
|---|
|  | 324 | . kill @pRefCt | 
|---|
|  | 325 | . set @pRefCt@("START-TIME")=startTime | 
|---|
|  | 326 | . set @pRefCt@("SAMPLING","COUNT")=0 | 
|---|
|  | 327 | . set @pRefCt@("SAMPLING","REF-TIME")=$H | 
|---|
|  | 328 | . set @pRefCt@("SAMPLING","VALUE COUNT")=value | 
|---|
|  | 329 |  | 
|---|
|  | 330 | new timeStr set timeStr="  " | 
|---|
|  | 331 | new remainingT set remainingT="" | 
|---|
|  | 332 | new delta set delta=0 | 
|---|
|  | 333 |  | 
|---|
|  | 334 | if curRate'="" do | 
|---|
|  | 335 | . new remainV set remainV=(max-value) | 
|---|
|  | 336 | . if remainV'<0 do | 
|---|
|  | 337 | . . set remainingT=curRate*remainV | 
|---|
|  | 338 | . else  do | 
|---|
|  | 339 | . . set delta=-1,remainingT=$$HDIFF^XLFDT($H,startTime,2) | 
|---|
|  | 340 | else  if $data(startTime) do | 
|---|
|  | 341 | . if pct=0 quit | 
|---|
|  | 342 | . set timeStr="" | 
|---|
|  | 343 | . set delta=$$HDIFF^XLFDT($H,startTime,2) | 
|---|
|  | 344 | . if delta<0 set remainingT=-delta ;"just report # sec's overrun. | 
|---|
|  | 345 | . set remainingT=delta*((1/pct)-1) | 
|---|
|  | 346 |  | 
|---|
|  | 347 | if remainingT'="" do | 
|---|
|  | 348 | . new days set days=remainingT\86400  ;"86400 sec per day. | 
|---|
|  | 349 | . if days>5 set timeStr="<Stalled>  " quit | 
|---|
|  | 350 | . set remainingT=remainingT#86400 | 
|---|
|  | 351 | . new hours set hours=remainingT\3600  ;"3600 sec per hour | 
|---|
|  | 352 | . set remainingT=remainingT#3600 | 
|---|
|  | 353 | . new mins set mins=remainingT\60  ;"60 sec per min | 
|---|
|  | 354 | . new secs set secs=(remainingT#60)\1 | 
|---|
|  | 355 | . if days>0 set timeStr=timeStr_days_"d, " | 
|---|
|  | 356 | . if hours>0 set timeStr=timeStr_hours_"h:" | 
|---|
|  | 357 | . if (min=0)&(secs=0) do | 
|---|
|  | 358 | . . set timeStr="       " | 
|---|
|  | 359 | . else  do | 
|---|
|  | 360 | . . set timeStr=timeStr_mins_":" | 
|---|
|  | 361 | . . if secs<10 set timeStr=timeStr_"0" | 
|---|
|  | 362 | . . set timeStr=timeStr_secs_"   " | 
|---|
|  | 363 | . if delta<0 set timeStr="+"_timeStr ;"just report # sec's overrun. | 
|---|
|  | 364 | else  set timeStr="?? Time" | 
|---|
|  | 365 |  | 
|---|
|  | 366 | set width=width-$length(label)-($length(timeStr)+1) | 
|---|
|  | 367 | set premark=(width*pct)\1 | 
|---|
|  | 368 | set postmark=width-premark | 
|---|
|  | 369 |  | 
|---|
|  | 370 | if (max-min)=0 set pct=0 | 
|---|
|  | 371 | else  set pct=(value-min)/(max-min) | 
|---|
|  | 372 | if pct>1 set pct=1 | 
|---|
|  | 373 | if pct<0 set pct=0 | 
|---|
|  | 374 | if (pct<1)&($get(startTime)="") set startTime=$H | 
|---|
|  | 375 |  | 
|---|
|  | 376 |  | 
|---|
|  | 377 | write label,":" | 
|---|
|  | 378 | if pct<1 write " " | 
|---|
|  | 379 | if pct<0.1 write " " | 
|---|
|  | 380 | write (pct*100)\1,"% " | 
|---|
|  | 381 | for i=0:1:premark-1 do | 
|---|
|  | 382 | . if (barberPole+i)#4=0 write "~" | 
|---|
|  | 383 | . else  write "-" | 
|---|
|  | 384 | write ">|" | 
|---|
|  | 385 | for i=1:1:(postmark-1) write "-" | 
|---|
|  | 386 | if postmark>0 write "| " | 
|---|
|  | 387 | write timeStr | 
|---|
|  | 388 |  | 
|---|
|  | 389 | goto PBD1 | 
|---|
|  | 390 |  | 
|---|
|  | 391 | Spin1 | 
|---|
|  | 392 | new spinBar set spinBar=+$get(@pRefCt@("SPIN BAR")) | 
|---|
|  | 393 | new spinDir set spinDir=+$get(@pRefCt@("SPIN BAR","DIR")) ;"1=forward, -1=backwards | 
|---|
|  | 394 | if spinDir=0 set spinDir=1 | 
|---|
|  | 395 | set spinBar=spinBar+spinDir | 
|---|
|  | 396 | if spinBar>100 do | 
|---|
|  | 397 | . set spinDir=-1 | 
|---|
|  | 398 | . set spinBar=100 | 
|---|
|  | 399 | if spinBar<0 do | 
|---|
|  | 400 | . set spinDir=1 | 
|---|
|  | 401 | . set spinBar=0 | 
|---|
|  | 402 | set @pRefCt@("SPIN BAR")=spinBar | 
|---|
|  | 403 | set @pRefCt@("SPIN BAR","DIR")=spinDir | 
|---|
|  | 404 | set @pRefCt@("SPIN BAR","LAST INC")=$H | 
|---|
|  | 405 |  | 
|---|
|  | 406 | new marker set marker="<=>" | 
|---|
|  | 407 | set width=width-$length(label)-$length(marker) | 
|---|
|  | 408 | set pct=spinBar/100 | 
|---|
|  | 409 | set premark=(width*pct)\1 | 
|---|
|  | 410 | set postmark=width-premark | 
|---|
|  | 411 |  | 
|---|
|  | 412 | write label," |" | 
|---|
|  | 413 | for i=0:1:premark-1 write "-" | 
|---|
|  | 414 | write marker | 
|---|
|  | 415 | for i=1:1:(postmark-1) write "-" | 
|---|
|  | 416 | if pct<1 write "-" | 
|---|
|  | 417 | write "|" | 
|---|
|  | 418 |  | 
|---|
|  | 419 | PBD1 | 
|---|
|  | 420 | ;"write $char(13) set $X=0 | 
|---|
|  | 421 | write ! | 
|---|
|  | 422 | do CUU^TMGTERM(1) | 
|---|
|  | 423 |  | 
|---|
|  | 424 | PBDone | 
|---|
|  | 425 | do  ;"Turn cursor display back on. | 
|---|
|  | 426 | . ;"new $etrap set $etrap="" | 
|---|
|  | 427 | . ;"xecute ^%ZOSF("TRMON") | 
|---|
|  | 428 | . ;"U $I:(TERMINATOR=$C(13,127)) | 
|---|
|  | 429 |  | 
|---|
|  | 430 | ;"new discard set discard=$get(@NakedRef) ;"reset naked reference. | 
|---|
|  | 431 | quit | 
|---|
|  | 432 |  | 
|---|
|  | 433 | PRESSTOCONT ;" Alternative entry point | 
|---|
|  | 434 | PressToCont ; | 
|---|
|  | 435 | ;"Purpose: to provide a 'press key to continue' action | 
|---|
|  | 436 | ;"result: none | 
|---|
|  | 437 | ;"Output: will set TMGPTCABORT=1 if user entered ^ | 
|---|
|  | 438 |  | 
|---|
|  | 439 | write "----- Press Key To Continue -----" | 
|---|
|  | 440 | new ch set ch=$$KeyPressed^TMGUSRIF(0,240) | 
|---|
|  | 441 | if (ch=94) set TMGPTCABORT=1  ;"set abort user entered ^ | 
|---|
|  | 442 | else  kill TMGPTCABORT | 
|---|
|  | 443 | write ! | 
|---|
|  | 444 | quit | 
|---|
|  | 445 |  | 
|---|
|  | 446 |  | 
|---|
|  | 447 | UserAborted(AbortLabel) | 
|---|
|  | 448 | ;"Purpose: Checks if user pressed ESC key.  If so, then ask if abort wanted | 
|---|
|  | 449 | ;"Note: return is immediate. | 
|---|
|  | 450 | ;"Returns: 1 if user aborted, 0 if not. | 
|---|
|  | 451 |  | 
|---|
|  | 452 | new result set result=0 | 
|---|
|  | 453 | if $$KeyPressed=27 do | 
|---|
|  | 454 | . new % set %=2 | 
|---|
|  | 455 | . write !,"Abort" | 
|---|
|  | 456 | . if $get(AbortLabel)'="" do | 
|---|
|  | 457 | . . write " "_AbortLabel | 
|---|
|  | 458 | . do YN^DICN write ! | 
|---|
|  | 459 | . set result=(%=1) | 
|---|
|  | 460 |  | 
|---|
|  | 461 | quit result | 
|---|
|  | 462 |  | 
|---|
|  | 463 |  | 
|---|
|  | 464 | KeyPressed(wantChar,waitTime) | 
|---|
|  | 465 | ;"Purpose: to check for a keypress | 
|---|
|  | 466 | ;"Input: wantChar -- OPTIONAL, if 1, then Character is returned, not ASCII value | 
|---|
|  | 467 | ;"       waitTime -- OPTIONAL, default is 0 (immediate return) | 
|---|
|  | 468 | ;"Result: ASCII value of key, if pressed, -1 otherwise ("" if wantChar=1) | 
|---|
|  | 469 | ;"Note: this does NOT wait for user to press key | 
|---|
|  | 470 |  | 
|---|
|  | 471 | new temp | 
|---|
|  | 472 | set waitTime=$get(waitTime,0) | 
|---|
|  | 473 | read *temp:waitTime | 
|---|
|  | 474 | if $get(wantChar)=1 set temp=$char(temp) | 
|---|
|  | 475 | quit temp | 
|---|
|  | 476 |  | 
|---|
|  | 477 |  | 
|---|
|  | 478 | Read(Terminators,timeOut,Num,initialVal,EscKey) | 
|---|
|  | 479 | ;"Purpose: a custom read function with custom terminators | 
|---|
|  | 480 | ;"Input: Terminators -- OPTIONAL Flags to specify characters that will signal that | 
|---|
|  | 481 | ;"                      the user is done with input.  Flags as follows: | 
|---|
|  | 482 | ;"                      r = return/enter | 
|---|
|  | 483 | ;"                      t = tab | 
|---|
|  | 484 | ;"                      s = space | 
|---|
|  | 485 | ;"                      e = escape | 
|---|
|  | 486 | ;"                      b = backspace | 
|---|
|  | 487 | ;"                      NONE = no terminators | 
|---|
|  | 488 | ;"                    e.g. 'rte' means that if user enters a return, tab, or escape | 
|---|
|  | 489 | ;"                         then input it ended, and characters (up to, but not including | 
|---|
|  | 490 | ;"                         terminator) entered are returned. | 
|---|
|  | 491 | ;"                    e.g. 'NONE' --> NO terminators.  NOTE: MUST supply a number | 
|---|
|  | 492 | ;"                         characters to read, or endless loop will result. | 
|---|
|  | 493 | ;"                         If Terminator="", then default value of 'r' is used | 
|---|
|  | 494 | ;"       timeOut --   Optional -- the allowed lengh of time to wait before timeout. | 
|---|
|  | 495 | ;"                      default value is 999,999 seconds (~11 days) | 
|---|
|  | 496 | ;"       Num --       OPTIONAL -- a number of characters to read, e.g. 5 to read just | 
|---|
|  | 497 | ;"                      5 characters (or less than 5 if terminator encountered) | 
|---|
|  | 498 | ;"       initialVal-- OPTIONAL -- This can be a value that presents the output | 
|---|
|  | 499 | ;"                      It also allows editing of former inputs.  Note: this function | 
|---|
|  | 500 | ;"                      assumes that initialValue has been printed to the screen before | 
|---|
|  | 501 | ;"                      calling this function. | 
|---|
|  | 502 | ;"        EscKey--    OPTIONAL -- PASS BY REFERENCE, an OUT PARAMETER | 
|---|
|  | 503 | ;"                      if Terminator includes "e", then EscKey will be filled | 
|---|
|  | 504 | ;"                      with a translated value for esc sequence, e.g. UP | 
|---|
|  | 505 | ;"                      (as found in ^XUTL("XGKB",*)) | 
|---|
|  | 506 | ;" | 
|---|
|  | 507 | ;"Result: returns characters read. | 
|---|
|  | 508 |  | 
|---|
|  | 509 | new result set result=$get(initialVal) | 
|---|
|  | 510 | new tmgZB | 
|---|
|  | 511 | set timeOut=+$get(timeOut,999999) | 
|---|
|  | 512 | new len set len=0 | 
|---|
|  | 513 | set Num=$get(Num) | 
|---|
|  | 514 | set Terminators=$get(Terminators) | 
|---|
|  | 515 | if Terminators="" set Terminators="r" | 
|---|
|  | 516 | else  if Terminators="NONE" set Terminators="" | 
|---|
|  | 517 | new temp | 
|---|
|  | 518 | new done set done=0 | 
|---|
|  | 519 | set EscKey="" | 
|---|
|  | 520 |  | 
|---|
|  | 521 | ;"NOTE, I could rewrite this to use built in terminators functions... | 
|---|
|  | 522 | ;"e.g. U $I:(TERMINATOR=$C(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127))" | 
|---|
|  | 523 |  | 
|---|
|  | 524 | RLoop   xecute ^%ZOSF("EOFF") ;"echo off | 
|---|
|  | 525 | if Terminators["e" use $I:ESCAPE | 
|---|
|  | 526 | read *temp:timeOut  ;"reads the ascii number of key (92, instead of 'a') | 
|---|
|  | 527 | set tmgZB=$ZB | 
|---|
|  | 528 | ;"write "  $l(tmgZB)=",$l(tmgZB)," tmgZB=" f i=1:1:$l(tmgZB) w $ascii($E(tmgZB,i)),"," | 
|---|
|  | 529 | if Terminators["e" use $I:NOESCAPE | 
|---|
|  | 530 | xecute ^%ZOSF("EON") | 
|---|
|  | 531 | if (temp=13)&(Terminators["r") do | 
|---|
|  | 532 | . set done=1 | 
|---|
|  | 533 | else  if (temp=9)&(Terminators["t") do | 
|---|
|  | 534 | . set done=1 | 
|---|
|  | 535 | else  if (temp=32)&(Terminators["s") do | 
|---|
|  | 536 | . set done=1 | 
|---|
|  | 537 | else  if (temp=27)&(Terminators["e") do | 
|---|
|  | 538 | . set EscKey=$get(^XUTL("XGKB",tmgZB)) | 
|---|
|  | 539 | . if EscKey="" do | 
|---|
|  | 540 | . . do FixEscTable | 
|---|
|  | 541 | . . set EscKey=$get(^XUTL("XGKB",tmgZB)) | 
|---|
|  | 542 | . set done=1 | 
|---|
|  | 543 | else  if (temp=127)&(Terminators["b") do | 
|---|
|  | 544 | . set done=1 | 
|---|
|  | 545 | else  if (temp'=-1) do | 
|---|
|  | 546 | . if temp=127 do  quit | 
|---|
|  | 547 | . . if result="" quit | 
|---|
|  | 548 | . . set result=$extract(result,1,$length(result)-1) | 
|---|
|  | 549 | . . write $char(8)," ",$char(8) | 
|---|
|  | 550 | . set result=result_$char(temp) | 
|---|
|  | 551 | . write $char(temp) | 
|---|
|  | 552 | . if Num="" quit | 
|---|
|  | 553 | . if $length(result)'<+Num set done=1 | 
|---|
|  | 554 |  | 
|---|
|  | 555 | if 'done goto RLoop | 
|---|
|  | 556 |  | 
|---|
|  | 557 | quit result | 
|---|
|  | 558 |  | 
|---|
|  | 559 | FixEscTable | 
|---|
|  | 560 | ;"Purpose: There is a difference between my old system and the new.  I | 
|---|
|  | 561 | ;"         don't know why, but this will fix it for me, and anyone else. | 
|---|
|  | 562 | T1      ;;$C(1))="^A" | 
|---|
|  | 563 | ;;$C(2))="^B" | 
|---|
|  | 564 | ;;$C(3))="^C" | 
|---|
|  | 565 | ;;$C(4))="^D" | 
|---|
|  | 566 | ;;$C(5))="^E" | 
|---|
|  | 567 | ;;$C(6))="^F" | 
|---|
|  | 568 | ;;$C(7))="^G" | 
|---|
|  | 569 | ;;$C(8))="^H" | 
|---|
|  | 570 | ;;$C(9))="TAB" | 
|---|
|  | 571 | ;;$C(10))="^J" | 
|---|
|  | 572 | ;;$C(11))="^K" | 
|---|
|  | 573 | ;;$C(12))="^L" | 
|---|
|  | 574 | ;;$C(13))="CR" | 
|---|
|  | 575 | ;;$C(14))="^N" | 
|---|
|  | 576 | ;;$C(15))="^O" | 
|---|
|  | 577 | ;;$C(16))="^P" | 
|---|
|  | 578 | ;;$C(17))="^Q" | 
|---|
|  | 579 | ;;$C(18))="^R" | 
|---|
|  | 580 | ;;$C(19))="^S" | 
|---|
|  | 581 | ;;$C(20))="^T" | 
|---|
|  | 582 | ;;$C(21))="^U" | 
|---|
|  | 583 | ;;$C(22))="^V" | 
|---|
|  | 584 | ;;$C(23))="^W" | 
|---|
|  | 585 | ;;$C(24))="^X" | 
|---|
|  | 586 | ;;$C(25))="^Y" | 
|---|
|  | 587 | ;;$C(26))="^Z" | 
|---|
|  | 588 | ;;$C(27)_"OM")="KPENTER" | 
|---|
|  | 589 | ;;$C(27)_"OP")="PF1" | 
|---|
|  | 590 | ;;$C(27)_"OQ")="PF2" | 
|---|
|  | 591 | ;;$C(27)_"OR")="PF3" | 
|---|
|  | 592 | ;;$C(27)_"OS")="PF4" | 
|---|
|  | 593 | ;;$C(27)_"Ol")="KP+" | 
|---|
|  | 594 | ;;$C(27)_"Om")="KP-" | 
|---|
|  | 595 | ;;$C(27)_"On")="KP." | 
|---|
|  | 596 | ;;$C(27)_"Op")="KP0" | 
|---|
|  | 597 | ;;$C(27)_"Oq")="KP1" | 
|---|
|  | 598 | ;;$C(27)_"Or")="KP2" | 
|---|
|  | 599 | ;;$C(27)_"Os")="KP3" | 
|---|
|  | 600 | ;;$C(27)_"Ot")="KP4" | 
|---|
|  | 601 | ;;$C(27)_"Ou")="KP5" | 
|---|
|  | 602 | ;;$C(27)_"Ov")="KP6" | 
|---|
|  | 603 | ;;$C(27)_"Ow")="KP7" | 
|---|
|  | 604 | ;;$C(27)_"Ox")="KP8" | 
|---|
|  | 605 | ;;$C(27)_"Oy")="KP9" | 
|---|
|  | 606 | ;;$C(27)_"[15~")="F5" | 
|---|
|  | 607 | ;;$C(27)_"[17~")="F6" | 
|---|
|  | 608 | ;;$C(27)_"[18~")="F7" | 
|---|
|  | 609 | ;;$C(27)_"[19~")="F8" | 
|---|
|  | 610 | ;;$C(27)_"[1~")="FIND" | 
|---|
|  | 611 | ;;$C(27)_"[20~")="F9" | 
|---|
|  | 612 | ;;$C(27)_"[21~")="F10" | 
|---|
|  | 613 | ;;$C(27)_"[23~")="F11" | 
|---|
|  | 614 | ;;$C(27)_"[24~")="F12" | 
|---|
|  | 615 | ;;$C(27)_"[25~")="F13" | 
|---|
|  | 616 | ;;$C(27)_"[26~")="F14" | 
|---|
|  | 617 | ;;$C(27)_"[28~")="HELP" | 
|---|
|  | 618 | ;;$C(27)_"[29~")="DO" | 
|---|
|  | 619 | ;;$C(27)_"[2~")="INSERT" | 
|---|
|  | 620 | ;;$C(27)_"[31~")="F17" | 
|---|
|  | 621 | ;;$C(27)_"[32~")="F18" | 
|---|
|  | 622 | ;;$C(27)_"[33~")="F19" | 
|---|
|  | 623 | ;;$C(27)_"[34~")="F20" | 
|---|
|  | 624 | ;;$C(27)_"[3~")="REMOVE" | 
|---|
|  | 625 | ;;$C(27)_"[4~")="SELECT" | 
|---|
|  | 626 | ;;$C(27)_"[5~")="PREV" | 
|---|
|  | 627 | ;;$C(27)_"[6~")="NEXT" | 
|---|
|  | 628 | ;;$C(27)_"[A")="UP" | 
|---|
|  | 629 | ;;$C(27)_"[B")="DOWN" | 
|---|
|  | 630 | ;;$C(27)_"[C")="RIGHT" | 
|---|
|  | 631 | ;;$C(27)_"[D")="LEFT" | 
|---|
|  | 632 | ;;$C(28))="^\" | 
|---|
|  | 633 | ;;$C(29))="^]" | 
|---|
|  | 634 | ;;$C(30))="^6" | 
|---|
|  | 635 | ;;$C(31))="^_" | 
|---|
|  | 636 | ;;#DONE# | 
|---|
|  | 637 | ; | 
|---|
|  | 638 | new i,s | 
|---|
|  | 639 | for i=0:1 do  quit:(s["#DONE#") | 
|---|
|  | 640 | . set s=$TEXT(T1+i^TMGUSRIF) | 
|---|
|  | 641 | . quit:(s["#DONE#") | 
|---|
|  | 642 | . set s=$piece(s,";;",2) | 
|---|
|  | 643 | . new x set x="s ^XUTL(""XGKB"","_s | 
|---|
|  | 644 | . write x,! | 
|---|
|  | 645 | . xecute x | 
|---|
|  | 646 | quit | 
|---|
|  | 647 |  | 
|---|
|  | 648 | IENSelector(pIENArray,pResults,File,Fields,Widths,Header,SortFlds,SaveArray) | 
|---|
|  | 649 | ;"Purpose: to allow selecting records from an IEN array | 
|---|
|  | 650 | ;"Input: pIENArray, PASS BY NAME.  An array of IENS to select from | 
|---|
|  | 651 | ;"       format: | 
|---|
|  | 652 | ;"              @pIENArray@(IEN)="" | 
|---|
|  | 653 | ;"              @pIENArray@(IEN)="" | 
|---|
|  | 654 | ;"              @pIENArray@(IEN,"SEL")="" ;"<-- Optional marker to have this preselected | 
|---|
|  | 655 | ;"       pResults -- NAME OF array to have results returned in | 
|---|
|  | 656 | ;"              ** Note: Prior contents of array WILL be KILLED first | 
|---|
|  | 657 | ;"              Format of returned array:  Only those valuse that user selected will | 
|---|
|  | 658 | ;"              be aded to list | 
|---|
|  | 659 | ;"              @pResults@(IEN)=DisplayLineNumber | 
|---|
|  | 660 | ;"              @pResults@(IEN)=DisplayLineNumber | 
|---|
|  | 661 | ;"       File: The file number that IEN's are from. | 
|---|
|  | 662 | ;"       Fields: OPTIONAL. The Field(s) that should be shown for record. .01 is Default | 
|---|
|  | 663 | ;"              Fields may also be a ';' delimited list of Fields, e.g. ".01;.02;1". | 
|---|
|  | 664 | ;"       Widths: Optional.  The widths of the columns to display Fields in. | 
|---|
|  | 665 | ;"              Format: e.g. "10;12;24" for three colums of widths: | 
|---|
|  | 666 | ;"                 Sequence must match sequence given in Fields | 
|---|
|  | 667 | ;"              Default is to evenly space colums | 
|---|
|  | 668 | ;"       Header -- OPTIONAL -- A header text to show. | 
|---|
|  | 669 | ;"       SortFlds -- OPTIONAL -- Provide sorting fields | 
|---|
|  | 670 | ;"              Format: 'FldNum1;FldNum2;FldNum3...' | 
|---|
|  | 671 | ;"       SaveArray -- OPTIONAL -- PASS BY REFERENCE, | 
|---|
|  | 672 | ;"                      This variable will be filled with the NAME of the array | 
|---|
|  | 673 | ;"                      used for displaying the array.  The FIRST time this function | 
|---|
|  | 674 | ;"                      is called, this variable should = "".  On SUBSEQUENT calls, | 
|---|
|  | 675 | ;"                      if this variable holds the name of a variable (a reference), then | 
|---|
|  | 676 | ;"                      that array will be used, rather than taking the time to create | 
|---|
|  | 677 | ;"                      the display array again. Format of array: | 
|---|
|  | 678 | ;"                      @SaveArray(LineNumber)=IEN_$C(9)_Field1_"|"_Field2... | 
|---|
|  | 679 | ;"                      @SaveArray(LineNumber)=IEN_$C(9)_Field1_"|"_Field2... | 
|---|
|  | 680 | ;"                      Note: The LineNumber is the same number as the DisplayLineNumber | 
|---|
|  | 681 | ;"                              returned in @pResults@(IEN)=DisplayLineNUmber | 
|---|
|  | 682 | ;"Results: none | 
|---|
|  | 683 |  | 
|---|
|  | 684 | if $get(pResults)'="" kill @pResults | 
|---|
|  | 685 | new PreSelArray | 
|---|
|  | 686 | new ref | 
|---|
|  | 687 | if $get(SaveArray)="" do | 
|---|
|  | 688 | . set ref=$name(^TMP("VEE",$J)) | 
|---|
|  | 689 | . kill @ref | 
|---|
|  | 690 | . set SaveArray=ref | 
|---|
|  | 691 | else  do  goto IS1  ;"Skip recreating array if SaveArray holds reference | 
|---|
|  | 692 | . set ref=SaveArray | 
|---|
|  | 693 |  | 
|---|
|  | 694 | new ref2 set ref2=$name(^TMG("TMP",$J,"IEN-SELECT")) | 
|---|
|  | 695 | kill @ref2 | 
|---|
|  | 696 | if $get(Header)'="" set @ref@("HD")=Header | 
|---|
|  | 697 | set Sort=$get(Sort,0) | 
|---|
|  | 698 | set IOM=$get(IOM,80) | 
|---|
|  | 699 | set Fields=$get(Fields,".01") | 
|---|
|  | 700 | set Widths=$get(Widths) | 
|---|
|  | 701 | new Sort set Sort=($data(SortFlds)'=0) | 
|---|
|  | 702 | set File=$get(File) | 
|---|
|  | 703 | ;"Setup FldArray.  Format: | 
|---|
|  | 704 | ;"      FldArray=number of colums | 
|---|
|  | 705 | ;"      FldArray(Sequence#)=field;fieldWidth | 
|---|
|  | 706 | ;"      FldArray(Sequence#)=field;fieldWidth | 
|---|
|  | 707 | ;"      FldArray(Sequence#)=field;fieldWidth | 
|---|
|  | 708 | new FldArray,i | 
|---|
|  | 709 | set FldArray=0 | 
|---|
|  | 710 | new WRemain set WRemain=IOM | 
|---|
|  | 711 | for i=1:1:$length(Fields,";") do | 
|---|
|  | 712 | . new Fld,W | 
|---|
|  | 713 | . set Fld=$piece(Fields,";",i) | 
|---|
|  | 714 | . if Fld="" quit | 
|---|
|  | 715 | . set W=+$piece(Widths,";",i) | 
|---|
|  | 716 | . if W=0 do | 
|---|
|  | 717 | . . if FldArray>0 set W=IOM/FldArray | 
|---|
|  | 718 | . . else  set W=20 ;"some arbitrary number | 
|---|
|  | 719 | . if W>WRemain set W=WRemain  ;"this isn't perfect | 
|---|
|  | 720 | . set WRemain=WRemain-W | 
|---|
|  | 721 | . if WRemain<1 set WRemain=1 | 
|---|
|  | 722 | . set FldArray(i)=Fld_";"_W | 
|---|
|  | 723 | . set FldArray=FldArray+1 | 
|---|
|  | 724 |  | 
|---|
|  | 725 | new Itr,IEN,name,PriorErrorFound | 
|---|
|  | 726 | new abort set abort=0 | 
|---|
|  | 727 | new order set order=1 | 
|---|
|  | 728 | new IENPreSelected | 
|---|
|  | 729 | write "Prepairing list to display..." | 
|---|
|  | 730 | set IEN=$$ItrAInit^TMGITR(pIENArray,.Itr) | 
|---|
|  | 731 | do PrepProgress^TMGITR(.Itr,100,0,"IEN") | 
|---|
|  | 732 | write ! | 
|---|
|  | 733 | if IEN'="" for  do  quit:($$ItrANext^TMGITR(.Itr,.IEN)="")!(abort=1) | 
|---|
|  | 734 | . new TMGOUT,TMGMSG,IENS,showS,i | 
|---|
|  | 735 | . set showS="" | 
|---|
|  | 736 | . set IENS=IEN_"," | 
|---|
|  | 737 | . new tempFields | 
|---|
|  | 738 | . set IENPreSelected=($data(@pIENArray@(IEN,"SEL"))>0) | 
|---|
|  | 739 | . new i for i=1:1:FldArray do | 
|---|
|  | 740 | . . if showS'="" set showS=showS_"|" | 
|---|
|  | 741 | . . new Fld,tempS | 
|---|
|  | 742 | . . set Fld=$piece(FldArray(i),";",1) | 
|---|
|  | 743 | . . set tempS=$$GET1^DIQ(File,IENS,Fld,,"TMGOUT","TMGMSG") | 
|---|
|  | 744 | . . if $piece($get(^DD(File,Fld,0)),"^",2)["D" do  ;"format dates for sorting if in column 1 | 
|---|
|  | 745 | . . . new %DT,X,Y | 
|---|
|  | 746 | . . . set X=tempS | 
|---|
|  | 747 | . . . do ^%DT ;"X in, Y out | 
|---|
|  | 748 | . . . set tempS=$$DTFormat^TMGMISC(Y,"yyyy mm/dd")  ;"make dates sort numerically | 
|---|
|  | 749 | . . if $data(TMGMSG("DIERR")) do  set abort=1 quit | 
|---|
|  | 750 | . . . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound) | 
|---|
|  | 751 | . . new W set W=$piece(FldArray(i),";",2) | 
|---|
|  | 752 | . . set tempS=$extract(tempS,1,W) | 
|---|
|  | 753 | . . if Sort set tempFields(Fld)=tempS | 
|---|
|  | 754 | . . set showS=showS_$$LJ^XLFSTR(tempS,W," ") | 
|---|
|  | 755 | . if Sort=0 do | 
|---|
|  | 756 | . . set @ref@(order)=IEN_$char(9)_showS | 
|---|
|  | 757 | . . if IENPreSelected set PreSelArray(order)="" | 
|---|
|  | 758 | . . set order=order+1 | 
|---|
|  | 759 | . else  do | 
|---|
|  | 760 | . . new tempRef set tempRef=ref2 | 
|---|
|  | 761 | . . for i=1:1:$length(SortFlds,";") do | 
|---|
|  | 762 | . . . new oneFld set oneFld=$piece(SortFlds,";",i) | 
|---|
|  | 763 | . . . new F set F=$get(tempFields(oneFld)) | 
|---|
|  | 764 | . . . if F="" quit | 
|---|
|  | 765 | . . . set tempRef=$name(@tempRef@(F)) | 
|---|
|  | 766 | . . set @tempRef@(IEN)=IEN_$char(9)_showS | 
|---|
|  | 767 | . . if IENPreSelected set @tempRef@(IEN,"SEL")="" | 
|---|
|  | 768 | . . ;"Sets up sorted variable as follows: | 
|---|
|  | 769 | . . ;"  @tempRef@(sortFld1,sortFld2,sortFld3,IEN)='IEN_$char(9)_showS' | 
|---|
|  | 770 | . . ;"  @tempRef@(sortFld1,sortFld2,sortFld3,IEN)='IEN_$char(9)_showS' | 
|---|
|  | 771 | . . ;"  @tempRef@(sortFld1,sortFld2,sortFld3,IEN)='IEN_$char(9)_showS' | 
|---|
|  | 772 | do ProgressDone^TMGITR(.Itr) | 
|---|
|  | 773 | write ! | 
|---|
|  | 774 |  | 
|---|
|  | 775 | if abort=1 goto ISDone | 
|---|
|  | 776 |  | 
|---|
|  | 777 | IES1    if Sort=1 do | 
|---|
|  | 778 | . write "Sorting... " | 
|---|
|  | 779 | . set order=1 | 
|---|
|  | 780 | . new tempRef2 set tempRef2=ref2 | 
|---|
|  | 781 | . new showS,NumNodes,Done | 
|---|
|  | 782 | . set Done=0 | 
|---|
|  | 783 | . for  do  quit:(tempRef2="")!(Done=1) | 
|---|
|  | 784 | . . set tempRef2=$query(@tempRef2) | 
|---|
|  | 785 | . . if (tempRef2="") quit | 
|---|
|  | 786 | . . if $qsubscript(tempRef2,$qlength(tempRef2))="SEL" do  quit | 
|---|
|  | 787 | . . . set PreSelArray(order-1)="" | 
|---|
|  | 788 | . . if (tempRef2'[$$OREF^DILF(ref2)) set Done=1 quit | 
|---|
|  | 789 | . . set showS=$get(@tempRef2) | 
|---|
|  | 790 | . . set @ref@(order)=showS | 
|---|
|  | 791 | . . set order=order+1 | 
|---|
|  | 792 |  | 
|---|
|  | 793 | ;"Note: Rules of use: | 
|---|
|  | 794 | ;"  ref must=^TMP("VEE",$J) | 
|---|
|  | 795 | ;"  Each line should be in this format: | 
|---|
|  | 796 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 797 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 798 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 799 | ;"      Note: if DisplayValue is to be divided into colums, then | 
|---|
|  | 800 | ;"            use | character to separate | 
|---|
|  | 801 | ;"      @ref@("HD")=Header to display | 
|---|
|  | 802 | ;"  Results come back in: | 
|---|
|  | 803 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 804 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 805 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 806 | ;"  To preselect entries, provide an array like this: | 
|---|
|  | 807 | ;"      array(number)=""  <-- number is same number as above, shows selected | 
|---|
|  | 808 | ;"      array(number)="" | 
|---|
|  | 809 | ;"      array(number)="" | 
|---|
|  | 810 | ;"      pass array by name:  SELECT^%ZVEMKT(ref,,"array") | 
|---|
|  | 811 | IS1 | 
|---|
|  | 812 | new NumberLines set NumberLines=0  ;"1--> number each line | 
|---|
|  | 813 | new AddNew set AddNew=0 ;"1-> Allow adding new entry | 
|---|
|  | 814 |  | 
|---|
|  | 815 | write "Passing off to selector..." | 
|---|
|  | 816 | D SELECT^%ZVEMKT(ref,NumberLines,AddNew,"PreSelArray") | 
|---|
|  | 817 |  | 
|---|
|  | 818 | ;"Format results | 
|---|
|  | 819 | new Itr2,index | 
|---|
|  | 820 | set index=$$ItrAInit^TMGITR($name(^TMP("VPE","SELECT",$J)),.Itr2) | 
|---|
|  | 821 | if index'="" for  do  quit:($$ItrANext^TMGITR(.Itr2,.index)="") | 
|---|
|  | 822 | . new s set s=$piece($get(^TMP("VPE","SELECT",$J,index)),$char(9),1) | 
|---|
|  | 823 | . set @pResults@(s)=index | 
|---|
|  | 824 |  | 
|---|
|  | 825 | kill ^TMP("VPE","SELECT",$J) | 
|---|
|  | 826 | if $get(ref2) kill @ref2  ;"i.e. ^TMG("TMP",$J,"IEN-SELECT") | 
|---|
|  | 827 |  | 
|---|
|  | 828 | ISDone | 
|---|
|  | 829 | quit | 
|---|
|  | 830 |  | 
|---|
|  | 831 |  | 
|---|
|  | 832 | Selector(pArray,pResults,Header) | 
|---|
|  | 833 | ;"Purpose: Interface with VPE Selector code to select from an array | 
|---|
|  | 834 | ;"Input: pArray -- NAME OF array holding items to be selected from | 
|---|
|  | 835 | ;"            Expected format: | 
|---|
|  | 836 | ;"              @pArray@("Display Choice Words")=ReturnValue  <-- ReturnValue is optional | 
|---|
|  | 837 | ;"              @pArray@("Display Choice Words")=ReturnValue | 
|---|
|  | 838 | ;"              @pArray@("Display Choice Words")=ReturnValue | 
|---|
|  | 839 | ;"              @pArray@("Display Choice Words","SEL")="" <-- optional preselection indicator | 
|---|
|  | 840 | ;"       pResults -- NAME OF array to have results returned in | 
|---|
|  | 841 | ;"              ** Note: Prior contents of array will NOT be KILLED first | 
|---|
|  | 842 | ;"              Format of returned array:  Only those valuse that user selected will be returned | 
|---|
|  | 843 | ;"              @pResults@("Display Choice Words")=ReturnValue  <-- ReturnValue is optional | 
|---|
|  | 844 | ;"              @pResults@("Display Choice Words")=ReturnValue | 
|---|
|  | 845 | ;"              @pResults@("Display Choice Words")=ReturnValue | 
|---|
|  | 846 | ;"       Header -- OPTIONAL -- A header text to show. | 
|---|
|  | 847 | ;"Results: None | 
|---|
|  | 848 | new ref set ref=$name(^TMP("VEE",$J)) | 
|---|
|  | 849 | kill @ref | 
|---|
|  | 850 | if $get(pArray)="" goto SelDone | 
|---|
|  | 851 | if $get(pResults)="" goto SelDone | 
|---|
|  | 852 |  | 
|---|
|  | 853 | new PreSelArray | 
|---|
|  | 854 |  | 
|---|
|  | 855 | ;"First set up array of options | 
|---|
|  | 856 | new DispWords,RtnValue | 
|---|
|  | 857 | new order set order=1 | 
|---|
|  | 858 | set DispWords=$order(@pArray@("")) | 
|---|
|  | 859 | if DispWords'="" for  do  quit:(DispWords="") | 
|---|
|  | 860 | . set RtnValue=$get(@pArray@(DispWords),"<NONE>") | 
|---|
|  | 861 | . set @ref@(order)=RtnValue_$char(9)_$extract(DispWords,1,$get(IOM,80)) | 
|---|
|  | 862 | . if $data(@pArray@(DispWords,"SEL")) set PreSelArray(order)="" ;"mark as preselected | 
|---|
|  | 863 | . set order=order+1 | 
|---|
|  | 864 | . set DispWords=$order(@pArray@(DispWords)) | 
|---|
|  | 865 |  | 
|---|
|  | 866 | if $get(Header)'="" set @ref@("HD")=Header | 
|---|
|  | 867 |  | 
|---|
|  | 868 | ;"Note: Rules of use: | 
|---|
|  | 869 | ;"  ref must=^TMP("VEE",$J) | 
|---|
|  | 870 | ;"  Each line should be in this format: | 
|---|
|  | 871 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 872 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 873 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 874 | ;"      Note: if DisplayValue is to be divided into colums, then | 
|---|
|  | 875 | ;"            use | character to separate | 
|---|
|  | 876 | ;"  Results come back in: | 
|---|
|  | 877 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 878 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 879 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 880 | ;"  To preselect entries, provide an array like this: | 
|---|
|  | 881 | ;"      array(number)=""  <-- number is same number as above, shows selected | 
|---|
|  | 882 | ;"      array(number)="" | 
|---|
|  | 883 | ;"      array(number)="" | 
|---|
|  | 884 | ;"      pass array by name:  SELECT^%ZVEMKT(ref,,"array") | 
|---|
|  | 885 |  | 
|---|
|  | 886 | new NumberLines set NumberLines=0  ;"1--> number each line | 
|---|
|  | 887 | new AddNew set AddNew=0 ;"1-> Allow adding new entry | 
|---|
|  | 888 |  | 
|---|
|  | 889 | D SELECT^%ZVEMKT(ref,NumberLines,AddNew,"PreSelArray") | 
|---|
|  | 890 |  | 
|---|
|  | 891 | ;"Format selected options. | 
|---|
|  | 892 | new index set index=$order(^TMP("VPE","SELECT",$J,"")) | 
|---|
|  | 893 | if index'="" for  do  quit:(index="") | 
|---|
|  | 894 | . new s,s1,s2 | 
|---|
|  | 895 | . set s=$get(^TMP("VPE","SELECT",$J,index)) | 
|---|
|  | 896 | . set s1=$piece(s,$char(9),1) | 
|---|
|  | 897 | . set s2=$piece(s,$char(9),2) | 
|---|
|  | 898 | . set @pResults@(s2)=s1 | 
|---|
|  | 899 | . set index=$order(^TMP("VPE","SELECT",$J,index)) | 
|---|
|  | 900 |  | 
|---|
|  | 901 | kill ^TMP("VPE","SELECT",$J) | 
|---|
|  | 902 | kill @ref | 
|---|
|  | 903 |  | 
|---|
|  | 904 | SelDone | 
|---|
|  | 905 | quit | 
|---|
|  | 906 |  | 
|---|
|  | 907 |  | 
|---|
|  | 908 | Slctor2(pArray,pResults,Header) | 
|---|
|  | 909 | ;"Purpose: Interface with VPE Selector code to select from an array | 
|---|
|  | 910 | ;"      Note: This allows a different format of input.  In Selector() above, | 
|---|
|  | 911 | ;"            it is NOT possible to have two similar Display Words with | 
|---|
|  | 912 | ;"            different return values.  E.g. two drugs with LISINOPRIL, but | 
|---|
|  | 913 | ;"            different IEN return values.  This fn allows this | 
|---|
|  | 914 | ;"Input: pArray -- NAME OF array holding items to be selected from | 
|---|
|  | 915 | ;"            Expected format: | 
|---|
|  | 916 | ;"              @pArray@("Display Choice Words",ReturnValue)="" <-- return value IS required | 
|---|
|  | 917 | ;"              @pArray@("Display Choice Words",ReturnValue)="" | 
|---|
|  | 918 | ;"              @pArray@("Display Choice Words",ReturnValue)="" | 
|---|
|  | 919 | ;"              @pArray@("Display Choice Words",ReturnValue,"SEL")="" <-- optional preselection indicator | 
|---|
|  | 920 | ;"       pResults -- NAME OF array to have results returned in | 
|---|
|  | 921 | ;"              ** Note: Prior contents of array will NOT be KILLED first | 
|---|
|  | 922 | ;"              Format of returned array:  Only those values that user selected will be returned | 
|---|
|  | 923 | ;"              @pResults@("Display Choice Words",ReturnValue)="" | 
|---|
|  | 924 | ;"              @pResults@("Display Choice Words",ReturnValue)="" | 
|---|
|  | 925 | ;"              @pResults@("Display Choice Words",ReturnValue)="" | 
|---|
|  | 926 | ;"       Header -- OPTIONAL -- A header text to show. | 
|---|
|  | 927 |  | 
|---|
|  | 928 | new ref set ref=$name(^TMP("VEE",$J)) | 
|---|
|  | 929 | kill @ref | 
|---|
|  | 930 | if $get(pArray)="" goto Sl2Done | 
|---|
|  | 931 | if $get(pResults)="" goto Sl2Done | 
|---|
|  | 932 |  | 
|---|
|  | 933 | new PreSelArray | 
|---|
|  | 934 |  | 
|---|
|  | 935 | ;"First set up array of options | 
|---|
|  | 936 | new DispWords,RtnValue | 
|---|
|  | 937 | new order set order=1 | 
|---|
|  | 938 | set DispWords="" | 
|---|
|  | 939 | for  set DispWords=$order(@pArray@(DispWords)) quit:(DispWords="")  do | 
|---|
|  | 940 | . set RtnValue="" | 
|---|
|  | 941 | . for  set RtnValue=$order(@pArray@(DispWords,RtnValue)) quit:(RtnValue="")  do | 
|---|
|  | 942 | . . set @ref@(order)=RtnValue_$char(9)_$extract(DispWords,1,$get(IOM,80)) | 
|---|
|  | 943 | . . if $data(@pArray@(DispWords,RtnValue,"SEL")) set PreSelArray(order)="" ;"mark as preselected | 
|---|
|  | 944 | . . set order=order+1 | 
|---|
|  | 945 |  | 
|---|
|  | 946 | if $get(Header)'="" set @ref@("HD")=Header | 
|---|
|  | 947 |  | 
|---|
|  | 948 | ;"Note: Rules of use: | 
|---|
|  | 949 | ;"  ref must=^TMP("VEE",$J) | 
|---|
|  | 950 | ;"  Each line should be in this format: | 
|---|
|  | 951 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 952 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 953 | ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 954 | ;"      Note: if DisplayValue is to be divided into colums, then | 
|---|
|  | 955 | ;"            use | character to separate | 
|---|
|  | 956 | ;"  Results come back in: | 
|---|
|  | 957 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 958 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 959 | ;"      ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue | 
|---|
|  | 960 | ;"  To preselect entries, provide an array like this: | 
|---|
|  | 961 | ;"      array(number)=""  <-- number is same number as above, shows selected | 
|---|
|  | 962 | ;"      array(number)="" | 
|---|
|  | 963 | ;"      array(number)="" | 
|---|
|  | 964 | ;"      pass array by name:  SELECT^%ZVEMKT(ref,,"array") | 
|---|
|  | 965 |  | 
|---|
|  | 966 | new NumberLines set NumberLines=0  ;"1--> number each line | 
|---|
|  | 967 | new AddNew set AddNew=0 ;"1-> Allow adding new entry | 
|---|
|  | 968 |  | 
|---|
|  | 969 | D SELECT^%ZVEMKT(ref,NumberLines,AddNew,"PreSelArray") | 
|---|
|  | 970 |  | 
|---|
|  | 971 | ;"Format selected options. | 
|---|
|  | 972 | new index set index=$order(^TMP("VPE","SELECT",$J,"")) | 
|---|
|  | 973 | if index'="" for  do  quit:(index="") | 
|---|
|  | 974 | . new s,s1,s2 | 
|---|
|  | 975 | . set s=$get(^TMP("VPE","SELECT",$J,index)) | 
|---|
|  | 976 | . set s1=$piece(s,$char(9),1) | 
|---|
|  | 977 | . set s2=$piece(s,$char(9),2) | 
|---|
|  | 978 | . set @pResults@(s2,s1)="" | 
|---|
|  | 979 | . set index=$order(^TMP("VPE","SELECT",$J,index)) | 
|---|
|  | 980 |  | 
|---|
|  | 981 | kill ^TMP("VPE","SELECT",$J) | 
|---|
|  | 982 | kill @ref | 
|---|
|  | 983 |  | 
|---|
|  | 984 | Sl2Done | 
|---|
|  | 985 | quit | 
|---|
|  | 986 |  | 
|---|
|  | 987 |  | 
|---|
|  | 988 |  | 
|---|
|  | 989 | MENU(Options,defChoice,UserRaw) | 
|---|
|  | 990 | QUIT $$Menu(.Options,.defChoice,.UserRaw) | 
|---|
|  | 991 |  | 
|---|
|  | 992 | Menu(Options,defChoice,UserRaw) | 
|---|
|  | 993 | ;"Purpose: to provide a simple menuing system | 
|---|
|  | 994 | ;"Input:  Options -- PASS BY REFERENCE | 
|---|
|  | 995 | ;"        Format: | 
|---|
|  | 996 | ;"              Options(0)=Header Text   <--- optional, default is MENU | 
|---|
|  | 997 | ;"              Options(DispNumber)=MenuText_$C(9)_ReturnValue <-- _$C(9)_ReturnValue OPTIONAL, default is DispNumber | 
|---|
|  | 998 | ;"              Options(DispNumber)=MenuText_$C(9)_ReturnValue | 
|---|
|  | 999 | ;"              Options(DispNumber)=MenuText_$C(9)_ReturnValue | 
|---|
|  | 1000 | ;"        defChoice: OPTIONAL, the default menu value | 
|---|
|  | 1001 | ;"        UserRaw : OPTIONAL, PASS BY REFERENCE, an OUT PARAMETER.  Returns users raw input | 
|---|
|  | 1002 | ;"Results: The selected ReturnValue (or DispNumber if no ReturnValue provided), or ^ for abort | 
|---|
|  | 1003 |  | 
|---|
|  | 1004 | new result set result="^" | 
|---|
|  | 1005 | new s,fg,bg | 
|---|
|  | 1006 | new width set width=50 | 
|---|
|  | 1007 | new line set $piece(line,"=",width+1)="" | 
|---|
|  | 1008 | MNU1 | 
|---|
|  | 1009 | if $data(Options(-1,"COLOR")) do | 
|---|
|  | 1010 | . set fg=$get(Options(-1,"COLOR","fg"),0) | 
|---|
|  | 1011 | . set bg=$get(Options(-1,"COLOR","bg"),1) | 
|---|
|  | 1012 | . do VCOLORS^TMGTERM(fg,bg) | 
|---|
|  | 1013 | write line,! | 
|---|
|  | 1014 | write $get(Options(0),"MENU"),$$Pad2Pos^TMGSTUTL(width),! | 
|---|
|  | 1015 | write line,! | 
|---|
|  | 1016 | write "Options:",$$Pad2Pos^TMGSTUTL(width),! | 
|---|
|  | 1017 |  | 
|---|
|  | 1018 | new DispNumber set DispNumber=$order(Options(0)) | 
|---|
|  | 1019 | if DispNumber'="" for  do  quit:(DispNumber="") | 
|---|
|  | 1020 | . set s=$get(Options(DispNumber)) | 
|---|
|  | 1021 | . write $$RJ^XLFSTR(DispNumber,4),".",$$Pad2Pos^TMGSTUTL(6) | 
|---|
|  | 1022 | . if $data(Options(DispNumber,"COLOR")) do | 
|---|
|  | 1023 | . . set fg=$get(Options(DispNumber,"COLOR","fg"),0) | 
|---|
|  | 1024 | . . set bg=$get(Options(DispNumber,"COLOR","bg"),1) | 
|---|
|  | 1025 | . . do VCOLORS^TMGTERM(fg,bg) | 
|---|
|  | 1026 | . write $piece(s,$char(9),1),$$Pad2Pos^TMGSTUTL(width-1) | 
|---|
|  | 1027 | . if $data(Options(DispNumber,"COLOR")) do | 
|---|
|  | 1028 | . . do VTATRIB^TMGTERM(0) ;"Reset colors | 
|---|
|  | 1029 | . write " ",! | 
|---|
|  | 1030 | . set DispNumber=$order(Options(DispNumber)) | 
|---|
|  | 1031 |  | 
|---|
|  | 1032 | write line,! | 
|---|
|  | 1033 |  | 
|---|
|  | 1034 | set defChoice=$get(defChoice,"^") | 
|---|
|  | 1035 | new input | 
|---|
|  | 1036 | write "Enter selection (^ to abort): ",defChoice,"// " | 
|---|
|  | 1037 | read input:$get(DTIME,3600),! | 
|---|
|  | 1038 | if input="" set input=defChoice | 
|---|
|  | 1039 | set UserRaw=input | 
|---|
|  | 1040 | if input="^" goto MNUDone | 
|---|
|  | 1041 |  | 
|---|
|  | 1042 | set s=$get(Options(input)) | 
|---|
|  | 1043 | if s="" set s=$get(Options($$UP^XLFSTR(input))) | 
|---|
|  | 1044 | ;"if s="" write "??",!! goto MNU1 | 
|---|
|  | 1045 | set result=$piece(s,$char(9),2) | 
|---|
|  | 1046 | if result="" set result=input | 
|---|
|  | 1047 |  | 
|---|
|  | 1048 | MNUDone | 
|---|
|  | 1049 | if $data(Options(-1,"COLOR")) do VTATRIB^TMGTERM(0) ;"Reset colors | 
|---|
|  | 1050 | quit result | 
|---|
|  | 1051 |  | 
|---|
|  | 1052 |  | 
|---|
|  | 1053 | ProgTest | 
|---|
|  | 1054 | ;"Purpose: test progress bar. | 
|---|
|  | 1055 | new i,u,max | 
|---|
|  | 1056 | set max=100 | 
|---|
|  | 1057 | for i=0:1:max do | 
|---|
|  | 1058 | . do ProgressBar(i,"%",1,max) | 
|---|
|  | 1059 | . hang 0.25 | 
|---|
|  | 1060 | quit | 
|---|
|  | 1061 |  | 
|---|
|  | 1062 |  | 
|---|
|  | 1063 | SpinTest | 
|---|
|  | 1064 | ;"Purpose: test progress bar. | 
|---|
|  | 1065 | new i,u,max | 
|---|
|  | 1066 | set max=3000 | 
|---|
|  | 1067 | for i=0:10:max do | 
|---|
|  | 1068 | . do ProgressBar(i,"<A Label> "_i,-1,-1) | 
|---|
|  | 1069 | . hang 0.1 | 
|---|
|  | 1070 | quit | 
|---|
|  | 1071 |  | 
|---|
|  | 1072 |  | 
|---|
|  | 1073 | Scroller(pArray,Option) | 
|---|
|  | 1074 | ;"Purpose: Provide a scroll box | 
|---|
|  | 1075 | ;"Input: pArray -- PASS BY NAME.  format: | 
|---|
|  | 1076 | ;"         @pArray@(1,DisplayText)=Return Text <-- note: must be numbered 1,2,3 etc. | 
|---|
|  | 1077 | ;"         @pArray@(2,DisplayText)=Return Text | 
|---|
|  | 1078 | ;"         @pArray@(3,DisplayText)=Return Text | 
|---|
|  | 1079 | ;"              NOTE: if Display text contains {{name}} then name is taken as color directive | 
|---|
|  | 1080 | ;"              Example: 'Here is {{BOLD}}something{{NORM}} to see.' | 
|---|
|  | 1081 | ;"              if NAME is not defined in Option("COLORS",NAME), it is ignored | 
|---|
|  | 1082 | ;"       Option -- PASS BY REFERENCE.  format: | 
|---|
|  | 1083 | ;"          Option("HEADER",1)=Header line text | 
|---|
|  | 1084 | ;"          Option("HEADER",2)=More Header line text (any number of lines) | 
|---|
|  | 1085 | ;"          Option("FOOTER",1)=Footer line text  <--- Option 1 | 
|---|
|  | 1086 | ;"          Option("FOOTER",1,1)=linePart <--- Option 2  (these will be all strung together to make one footer line. | 
|---|
|  | 1087 | ;"          Option("FOOTER",1,2)=linePart                (can be used to display switches etc) | 
|---|
|  | 1088 | ;"          Option("FOOTER",2)=More footer line text (any number of lines) | 
|---|
|  | 1089 | ;"          Option("SHOW INDEX")=1 Optional.  If 1, then index is shown. | 
|---|
|  | 1090 | ;"          Option("SCRN WIDTH")= Optional screen width. (default is terminal width) | 
|---|
|  | 1091 | ;"          ---- Colors (optional) ------ | 
|---|
|  | 1092 | ;"          Option("COLORS","NORM")=FG^BG  -- default foreground (FG) and background(colors) | 
|---|
|  | 1093 | ;"                 If not provided, White on Blue used. | 
|---|
|  | 1094 | ;"          Option("COLORS","HIGH")=FG^BG  -- Highlight colors. If not provided, White on Cyan used. | 
|---|
|  | 1095 | ;"          Option("COLORS","HEADER")=FG^BG  Header color.  NORM used if not provided | 
|---|
|  | 1096 | ;"          Option("COLORS","FOOTER")=FG^BG  Footer color.  NORM used if not provided | 
|---|
|  | 1097 | ;"          Option("COLORS","TOP LINE")=FG^BG  Top line color.  NORM used if not provided | 
|---|
|  | 1098 | ;"          Option("COLORS","BOTTOM LINE")=FG^BG  Bottom line color.  NORM used if not provided | 
|---|
|  | 1099 | ;"          Option("COLORS","INDEX")=FG^BG  Index color.  NORM used if not provided | 
|---|
|  | 1100 | ;"          Option("COLORS",SomeName)=FG^BG  e.g. : | 
|---|
|  | 1101 | ;"                 Option("COLORS","BOLD")=15^0  (Any arbitrary name OK, matched to {{name}} in text) | 
|---|
|  | 1102 | ;"                 Option("COLORS","HIGH")=10^@ | 
|---|
|  | 1103 | ;"                 If BG="@", then default BG used. This may be used anywhere except for defining NORM | 
|---|
|  | 1104 | ;"          ---- events ---- | 
|---|
|  | 1105 | ;"          Option("ON SELECT")="FnName^Module" -- code to call based on user input | 
|---|
|  | 1106 | ;"                  Info("CURRENT LINE","NUMBER")=number currently highlighted line | 
|---|
|  | 1107 | ;"                  Info("CURRENT LINE","TEXT")=Text of currently highlighted line | 
|---|
|  | 1108 | ;"                  Info("CURRENT LINE","RETURN")=return value of currently highlighted line | 
|---|
|  | 1109 | ;"          Option("ON CHANGING")="FnName^Module" -- code to execute for number entry | 
|---|
|  | 1110 | ;"                  Info("CURRENT LINE","NUMBER")=number currently highlighted line | 
|---|
|  | 1111 | ;"                  Info("CURRENT LINE","TEXT")=Text of currently highlighted line | 
|---|
|  | 1112 | ;"                  Info("CURRENT LINE","RETURN")=return value of currently highlighted line | 
|---|
|  | 1113 | ;"                  Info("NEXT LINE","NUMBER")=next line number. Used for ON CHANGING to show the line about to be selected | 
|---|
|  | 1114 | ;"                  Info("ALLOW CHANGE")=1, <--- RETURN RESULT.  Change to 0 to disallow move. | 
|---|
|  | 1115 | ;"          Option("ON CMD")="FnName^Module" -- code to execute for number entry | 
|---|
|  | 1116 | ;"                  Info("USER INPUT")=UserTypedInput | 
|---|
|  | 1117 | ;"          NOTES about events.  Functions will be called as follows: | 
|---|
|  | 1118 | ;"              do FnName^Module(pArray,.Option,.Info) | 
|---|
|  | 1119 | ;"                pArray and Option are the same data received by this function | 
|---|
|  | 1120 | ;"                  -- thus Option can be used to can other custom information. | 
|---|
|  | 1121 | ;"                Info has extra info as outlined above. | 
|---|
|  | 1122 | ;"              If functions may set a globally-scoped var named TMGSCLRMSG to communicate back | 
|---|
|  | 1123 | ;"                      if TMGSCLRMSG="^" then Scroller will exit | 
|---|
|  | 1124 | ;"Result: none | 
|---|
|  | 1125 |  | 
|---|
|  | 1126 | new scrnW,scrnH,scrnLine,spaceLine,topLine,sizeHdr,sizeFtr | 
|---|
|  | 1127 | new entryCt,lineCt,EscKey,dispHt,highLine,showIdx | 
|---|
|  | 1128 | new needRefresh,Info | 
|---|
|  | 1129 | set topLine=1 | 
|---|
|  | 1130 | set highLine=5 | 
|---|
|  | 1131 | new TMGSCLRMSG set TMGSCLRMSG="" | 
|---|
|  | 1132 |  | 
|---|
|  | 1133 | set scrnW=+$get(Option("SCRN WIDTH")) | 
|---|
|  | 1134 | if scrnW'>0 do | 
|---|
|  | 1135 | . if $$GetScrnSize^TMGKERNL(,.scrnW) | 
|---|
|  | 1136 | . set scrnW=+scrnW-4 | 
|---|
|  | 1137 | if scrnW'>0 set scrnW=$get(IOM,66)-2 | 
|---|
|  | 1138 | ;"set scrnW=$get(IOM,60)-2 | 
|---|
|  | 1139 | set scrnH=$get(IOSL,25)-2 | 
|---|
|  | 1140 |  | 
|---|
|  | 1141 | if $get(Option("COLORS","NORM"))="" set Option("COLORS","NORM")="14^4" ;"white on blue | 
|---|
|  | 1142 | if $get(Option("COLORS","HIGH"))="" set Option("COLORS","HIGH")="14^6" ;"white on cyan | 
|---|
|  | 1143 | if $get(Option("COLORS","HEADER"))="" set Option("COLORS","HEADER")=Option("COLORS","NORM") | 
|---|
|  | 1144 | if $get(Option("COLORS","FOOTER"))="" set Option("COLORS","FOOTER")=Option("COLORS","NORM") | 
|---|
|  | 1145 | if $get(Option("COLORS","TOP LINE"))="" set Option("COLORS","TOP LINE")=Option("COLORS","NORM") | 
|---|
|  | 1146 | if $get(Option("COLORS","BOTTOM LINE"))="" set Option("COLORS","BOTTOM LINE")=Option("COLORS","NORM") | 
|---|
|  | 1147 | if $get(Option("COLORS","INDEX"))="" set Option("COLORS","INDEX")=Option("COLORS","NORM") | 
|---|
|  | 1148 |  | 
|---|
|  | 1149 | new i set i="" | 
|---|
|  | 1150 | for  set i=$order(Option("COLORS",i)) quit:(i="")  do | 
|---|
|  | 1151 | . new colors set colors=$get(Option("COLORS",i)) | 
|---|
|  | 1152 | . new FG set FG=$piece(colors,"^",1) if FG="" set FG=0 | 
|---|
|  | 1153 | . new BG set BG=$piece(colors,"^",2) if BG="" set BG=1 | 
|---|
|  | 1154 | . set Option("COLORS",i,"FG")=FG | 
|---|
|  | 1155 | . set Option("COLORS",i,"BG")=BG | 
|---|
|  | 1156 |  | 
|---|
|  | 1157 | Full    set scrnLine="" set $piece(scrnLine,"-",scrnW)="-" | 
|---|
|  | 1158 | set spaceLine="" set $piece(spaceLine," ",scrnW)=" " | 
|---|
|  | 1159 | set sizeHdr=$$ListCt^TMGMISC($name(Option("HEADER")))+1 | 
|---|
|  | 1160 | set sizeFtr=$$ListCt^TMGMISC($name(Option("FOOTER")))+1 | 
|---|
|  | 1161 | set entryCt=$$ListCt^TMGMISC(pArray) | 
|---|
|  | 1162 | set EscKey="" | 
|---|
|  | 1163 | set dispHt=scrnH-sizeHdr-sizeFtr | 
|---|
|  | 1164 | if topLine>entryCt set topLine=entryCt | 
|---|
|  | 1165 | if highLine>entryCt set highLine=entryCt | 
|---|
|  | 1166 | set showIdx=($get(Option("SHOW INDEX"))=1) | 
|---|
|  | 1167 |  | 
|---|
|  | 1168 | Draw    do HOME^TMGTERM | 
|---|
|  | 1169 | if $data(Option("HEADER")) do | 
|---|
|  | 1170 | . do SetColor("HEADER",.Option) | 
|---|
|  | 1171 | . new i set i="" | 
|---|
|  | 1172 | . for  set i=$order(Option("HEADER",i)) quit:(i="")  do | 
|---|
|  | 1173 | . . write $$CJ^XLFSTR($get(Option("HEADER",i)),scrnW),! | 
|---|
|  | 1174 | set lineCt=topLine | 
|---|
|  | 1175 |  | 
|---|
|  | 1176 | ;"do VCOLORS^TMGTERM(14,4)  ;"bright white on blue background | 
|---|
|  | 1177 | do SetColor("TOP LINE",.Option) | 
|---|
|  | 1178 | write scrnLine,! | 
|---|
|  | 1179 | do SetColor("NORM",.Option) | 
|---|
|  | 1180 | for  quit:(lineCt=(dispHt+topLine-1))  do | 
|---|
|  | 1181 | . ;"if lineCt=highLine do VCOLORS^TMGTERM(14,6)  ;"bright white on cyan background | 
|---|
|  | 1182 | . ;"else  do VCOLORS^TMGTERM(14,4)  ;"bright white on blue background | 
|---|
|  | 1183 | . if lineCt=highLine do SetColor("HIGH",.Option) | 
|---|
|  | 1184 | . else  do SetColor("NORM",.Option) | 
|---|
|  | 1185 | . new s set s="" | 
|---|
|  | 1186 | . if showIdx do | 
|---|
|  | 1187 | . . do SetColor("INDEX",.Option) | 
|---|
|  | 1188 | . . write $$RJ^XLFSTR(lineCt,3)_"." | 
|---|
|  | 1189 | . . if lineCt=highLine do SetColor("HIGH",.Option) | 
|---|
|  | 1190 | . . else  do SetColor("NORM",.Option) | 
|---|
|  | 1191 | . . write " " | 
|---|
|  | 1192 | . new text,textA,textB,textColor | 
|---|
|  | 1193 | . set text=$order(@pArray@(lineCt,"")) | 
|---|
|  | 1194 | . for  quit:(text'["{{")!($X'<scrnW)  do | 
|---|
|  | 1195 | . . set textColor=$$ParseColor(.text,.textA)  ;" Text --> TextA{{Color}}Text | 
|---|
|  | 1196 | . . if $X+$length(textA)>scrnW do | 
|---|
|  | 1197 | . . . write $extract(textA,1,(scrnW-$X-3))_"..." | 
|---|
|  | 1198 | . . else  write textA | 
|---|
|  | 1199 | . . do SetColor(textColor,.Option) | 
|---|
|  | 1200 | . write text | 
|---|
|  | 1201 | . write $extract(spaceLine,1,(scrnW-$X)) | 
|---|
|  | 1202 | . do SetColor("RESET") write ! | 
|---|
|  | 1203 | . ;"if showIdx set s=$$RJ^XLFSTR(lineCt,3)_". " | 
|---|
|  | 1204 | . ;"set s=$$LJ^XLFSTR(s_$order(@pArray@(lineCt,"")),scrnW) | 
|---|
|  | 1205 | . ;"if $length(s)>scrnW set s=$extract(s,1,scrnW-3)_"..." | 
|---|
|  | 1206 | . ;"write s,! | 
|---|
|  | 1207 | . set lineCt=lineCt+1 | 
|---|
|  | 1208 | ;"do VCOLORS^TMGTERM(14,4)  ;"bright white on blue background | 
|---|
|  | 1209 | do SetColor("BOTTOM LINE",.Option) | 
|---|
|  | 1210 | write scrnLine,! | 
|---|
|  | 1211 | do SetColor("FOOTER",.Option) | 
|---|
|  | 1212 | ;"do VTATRIB^TMGTERM(0)  ;"reset colors | 
|---|
|  | 1213 | if $data(Option("FOOTER")) do | 
|---|
|  | 1214 | . new i set i="" | 
|---|
|  | 1215 | . for  set i=$order(Option("FOOTER",i)) quit:(i="")  do | 
|---|
|  | 1216 | . . new j set j=$order(Option("FOOTER",i,"")) | 
|---|
|  | 1217 | . . if j'="" do | 
|---|
|  | 1218 | . . . new oneLine set oneLine="",j="" | 
|---|
|  | 1219 | . . . for  set j=$order(Option("FOOTER",i,j)) quit:(j="")  do | 
|---|
|  | 1220 | . . . . set oneLine=oneLine_$get(Option("FOOTER",i,j))_" | " | 
|---|
|  | 1221 | . . . write $$LJ^XLFSTR(oneLine,scrnW),! | 
|---|
|  | 1222 | . . else  write $$LJ^XLFSTR($get(Option("FOOTER",i)),scrnW),! | 
|---|
|  | 1223 |  | 
|---|
|  | 1224 | set Info("CURRENT LINE","NUMBER")=highLine | 
|---|
|  | 1225 | set Info("CURRENT LINE","TEXT")=$order(@pArray@(highLine,"")) | 
|---|
|  | 1226 | set Info("CURRENT LINE","RETURN")=$get(@pArray@(highLine,Info("CURRENT LINE","TEXT"))) | 
|---|
|  | 1227 |  | 
|---|
|  | 1228 | do SetColor("RESET") | 
|---|
|  | 1229 | write $$LJ^XLFSTR(": ",scrnW),! | 
|---|
|  | 1230 | do CUU^TMGTERM(1) write ": " | 
|---|
|  | 1231 | set needRefresh=0 | 
|---|
|  | 1232 | UsrIn   set input=$$Read("re",,,,.EscKey) | 
|---|
|  | 1233 | if (input="")&(EscKey="") set EscKey="CR" | 
|---|
|  | 1234 | if EscKey="UP" set input="UP^1" | 
|---|
|  | 1235 | if EscKey="PREV" set input="UP^15" | 
|---|
|  | 1236 | if EscKey="DOWN" set input="DOWN^1" | 
|---|
|  | 1237 | if EscKey="NEXT" set input="DOWN^15" | 
|---|
|  | 1238 | if EscKey="CR" do  goto Lp2 | 
|---|
|  | 1239 | . new codeFn set codeFn=$get(Option("ON SELECT")) quit:(codeFn="") | 
|---|
|  | 1240 | . set codeFn="do "_codeFn_"(pArray,.Option,.Info)" | 
|---|
|  | 1241 | . new $etrap set $etrap="write ""(Invalid M Code!.  Error Trapped.)"",! set $etrap="""",$ecode=""""" | 
|---|
|  | 1242 | . xecute codeFn | 
|---|
|  | 1243 | . set needRefresh=2 | 
|---|
|  | 1244 | if input="^" goto ScrlDone | 
|---|
|  | 1245 | if (input["^") do  goto Lp2 | 
|---|
|  | 1246 | . if $piece(input,"^",1)="UP" do | 
|---|
|  | 1247 | . . new $etrap set $etrap="write ""(Invalid M Code!.  Error Trapped.)"",! set $etrap="""",$ecode=""""" | 
|---|
|  | 1248 | . . new codeFn set codeFn=$get(Option("ON CHANGING")) | 
|---|
|  | 1249 | . . if codeFn'="" set codeFn="do "_codeFn_"(pArray,.Option,.Info)" | 
|---|
|  | 1250 | . . set Info("ALLOW CHANGE")=1 | 
|---|
|  | 1251 | . . set needRefresh=1 | 
|---|
|  | 1252 | . . new j for j=1:1:+$piece(input,"^",2) do | 
|---|
|  | 1253 | . . . if highLine>topLine do | 
|---|
|  | 1254 | . . . . set Info("NEXT LINE","NUMBER")=(highLine-1) | 
|---|
|  | 1255 | . . . . if codeFn'="" xecute codeFn quit:'$get(Info("ALLOW CHANGE"))  set needRefresh=2 | 
|---|
|  | 1256 | . . . . set highLine=highLine-1 | 
|---|
|  | 1257 | . . . else  if topLine>1 do | 
|---|
|  | 1258 | . . . . set Info("NEXT LINE","NUMBER")=(topLine-1) | 
|---|
|  | 1259 | . . . . if codeFn'="" xecute codeFn quit:'$get(Info("ALLOW CHANGE"))  set needRefresh=2 | 
|---|
|  | 1260 | . . . . set topLine=topLine-1,highLine=topLine | 
|---|
|  | 1261 | . else  if $piece(input,"^",1)="DOWN" do | 
|---|
|  | 1262 | . . new $etrap set $etrap="write ""(Invalid M Code!.  Error Trapped.)"",! set $etrap="""",$ecode=""""" | 
|---|
|  | 1263 | . . new codeFn set codeFn=$get(Option("ON CHANGING")) | 
|---|
|  | 1264 | . . if codeFn'="" set codeFn="do "_codeFn_"(pArray,.Option,.Info)" | 
|---|
|  | 1265 | . . set Info("ALLOW CHANGE")=1 | 
|---|
|  | 1266 | . . set needRefresh=1 | 
|---|
|  | 1267 | . . new j for j=1:1:+$piece(input,"^",2) do | 
|---|
|  | 1268 | . . . if highLine<(topLine+dispHt-2) do | 
|---|
|  | 1269 | . . . . set Info("NEXT LINE","NUMBER")=(highLine-1) | 
|---|
|  | 1270 | . . . . if codeFn'="" xecute codeFn quit:'$get(Info("ALLOW CHANGE"))  set needRefresh=2 | 
|---|
|  | 1271 | . . . . set highLine=highLine+1 | 
|---|
|  | 1272 | . . . else  if (topLine+dispHt-2)<entryCt do | 
|---|
|  | 1273 | . . . . set Info("NEXT LINE","NUMBER")=(highLine+1) | 
|---|
|  | 1274 | . . . . if codeFn'="" xecute codeFn quit:'$get(Info("ALLOW CHANGE"))  set needRefresh=2 | 
|---|
|  | 1275 | . . . . set topLine=topLine+1,highLine=highLine+1 | 
|---|
|  | 1276 | else  if input="=" do | 
|---|
|  | 1277 | . set needRefresh=2 | 
|---|
|  | 1278 | . new DIR set DIR(0)="N^10:"_IOM | 
|---|
|  | 1279 | . set DIR("B")=scrnW | 
|---|
|  | 1280 | . write "Enter Screen Width (# of columns): " do ^DIR write ! | 
|---|
|  | 1281 | . if $data(DIRUT) write # quit | 
|---|
|  | 1282 | . set scrnW=Y | 
|---|
|  | 1283 | . set DIR(0)="N^5:"_(IOSL-2) | 
|---|
|  | 1284 | . set DIR("B")=scrnH | 
|---|
|  | 1285 | . write "Enter Screen Height (# of rows): " do ^DIR write ! | 
|---|
|  | 1286 | . if $data(DIRUT) write # quit | 
|---|
|  | 1287 | . set scrnH=Y | 
|---|
|  | 1288 | . write # | 
|---|
|  | 1289 | else  do | 
|---|
|  | 1290 | . set needRefresh=1 | 
|---|
|  | 1291 | . if (input="")&(EscKey'="") set input="{"_EscKey_"}" | 
|---|
|  | 1292 | . new codeFn set codeFn=$get(Option("ON CMD")) quit:(codeFn="") | 
|---|
|  | 1293 | . new $etrap set $etrap="write ""(Invalid M Code!.  Error Trapped.)"",! set $etrap="""",$ecode=""""" | 
|---|
|  | 1294 | . if codeFn'="" set codeFn="do "_codeFn_"(pArray,.Option,.Info)" | 
|---|
|  | 1295 | . set Info("USER INPUT")=input | 
|---|
|  | 1296 | . xecute codeFn | 
|---|
|  | 1297 | . set needRefresh=2 | 
|---|
|  | 1298 |  | 
|---|
|  | 1299 | Lp2     if TMGSCLRMSG="^" goto ScrlDone | 
|---|
|  | 1300 | if needRefresh=2 goto Full | 
|---|
|  | 1301 | if needRefresh=1 goto Draw | 
|---|
|  | 1302 | goto UsrIn | 
|---|
|  | 1303 |  | 
|---|
|  | 1304 | ScrlDone | 
|---|
|  | 1305 | quit | 
|---|
|  | 1306 |  | 
|---|
|  | 1307 | SetColor(Label,Option) | 
|---|
|  | 1308 | ;"Purpose: to set color, based on Label name. (A utility function for Scroller) | 
|---|
|  | 1309 | ;"Input: Label -- the name of the color, i.e. NORM, HIGH, etc. | 
|---|
|  | 1310 | ;"              If Label=REST, then special ResetTerminal function called. | 
|---|
|  | 1311 | ;"       Option -- PASS BY REFERENCE.  The same option array passed to Scroller, with color info | 
|---|
|  | 1312 | ;"              Specifically used: Option('COLORS',SomeName,'FG')=foregroundColor | 
|---|
|  | 1313 | ;"                                 Option('COLORS',SomeName,'BG')=backgroundColor | 
|---|
|  | 1314 | ;"Note: if color label not found, then no color change is made. | 
|---|
|  | 1315 | ; | 
|---|
|  | 1316 | if Label="RESET" do VTATRIB^TMGTERM(0) quit  ;"reset colors | 
|---|
|  | 1317 | if $data(Option("COLORS",Label))=0 quit | 
|---|
|  | 1318 | new FG set FG=$get(Option("COLORS",Label,"FG"),1) ;"default to black | 
|---|
|  | 1319 | new BG set BG=$get(Option("COLORS",Label,"BG"),0) ;"default to white | 
|---|
|  | 1320 | if BG="@" set BG=$get(Option("COLORS","NORM","BG"),0) ;"default to white | 
|---|
|  | 1321 | do VCOLORS^TMGTERM(FG,BG) | 
|---|
|  | 1322 | quit | 
|---|
|  | 1323 |  | 
|---|
|  | 1324 | ParseColor(text,textA) | 
|---|
|  | 1325 | ;"Purpose: To extract a color code from text | 
|---|
|  | 1326 | ;"Example:  Input text  = 'This is {{HIGH}}something{{NORM}} to see.' | 
|---|
|  | 1327 | ;"          Output text = 'something{{NORM}} to see.' | 
|---|
|  | 1328 | ;"          Output textA = 'This is ' | 
|---|
|  | 1329 | ;"          function result = 'NORM' | 
|---|
|  | 1330 | ;"Input: text -- PASS BY REFERENCE | 
|---|
|  | 1331 | ;"       textA -- PASS BY REFERENCE, and OUT PARAMETER | 
|---|
|  | 1332 | ;"Result: the color name inside brackets. | 
|---|
|  | 1333 | new s,result | 
|---|
|  | 1334 | set s=text | 
|---|
|  | 1335 | set textA=$piece(s,"{{",1) | 
|---|
|  | 1336 | set result=$piece(s,"{{",2) | 
|---|
|  | 1337 | set result=$piece(result,"}}",1) | 
|---|
|  | 1338 | set text=$piece(s,"}}",2,99) | 
|---|
|  | 1339 | quit result | 
|---|
|  | 1340 |  | 
|---|
|  | 1341 | TestScrl | 
|---|
|  | 1342 | new Array,Option | 
|---|
|  | 1343 | new i for i=1:1:136 do | 
|---|
|  | 1344 | . set Array(i,"Line "_i)="Result for "_i | 
|---|
|  | 1345 | set Option("HEADER",1)=" - < Here is a header line > -" | 
|---|
|  | 1346 | set Option("FOOTER",1)="Enter ^ to exit" | 
|---|
|  | 1347 | set Option("ON SELECT")="HndOnSel^TMGUSRIF" | 
|---|
|  | 1348 | set Option("ON CMD")="HandOnCmd^TMGUSRIF" | 
|---|
|  | 1349 |  | 
|---|
|  | 1350 | set Option("COLORS","NORM")="14^4" ;"white on blue | 
|---|
|  | 1351 | set Option("COLORS","HIGH")="14^6" ;"white on cyan | 
|---|
|  | 1352 | set Option("COLORS","HEADER")="14^5" | 
|---|
|  | 1353 | set Option("COLORS","FOOTER")="14^5" | 
|---|
|  | 1354 | set Option("COLORS","TOP LINE")="5^1" | 
|---|
|  | 1355 | set Option("COLORS","BOTTOM LINE")="5^1" | 
|---|
|  | 1356 | set Option("COLORS","INDEX")="0^1" | 
|---|
|  | 1357 | set Option("SHOW INDEX")=1 | 
|---|
|  | 1358 |  | 
|---|
|  | 1359 | do Scroller("Array",.Option) | 
|---|
|  | 1360 | quit | 
|---|
|  | 1361 |  | 
|---|
|  | 1362 | HndOnSel(pArray,Option,Info)  ;"Part of TestScrl | 
|---|
|  | 1363 | ;"Purpose: handle ON SELECT event from Scroller | 
|---|
|  | 1364 | ;"Input: pArray,Option,Info -- see documentation in Scroller | 
|---|
|  | 1365 | ;"       Info has this: | 
|---|
|  | 1366 | ;"          Info("CURRENT LINE","NUMBER")=number currently highlighted line | 
|---|
|  | 1367 | ;"          Info("CURRENT LINE","TEXT")=Text of currently highlighted line | 
|---|
|  | 1368 | ;"          Info("CURRENT LINE","RETURN")=return value of currently highlighted line | 
|---|
|  | 1369 |  | 
|---|
|  | 1370 | write $get(Info("CURRENT LINE","TEXT")),! | 
|---|
|  | 1371 | do PressToCont | 
|---|
|  | 1372 | quit | 
|---|
|  | 1373 |  | 
|---|
|  | 1374 |  | 
|---|
|  | 1375 | HandOnCmd(pArray,Option,Info)  ;"Part of TestScrl | 
|---|
|  | 1376 | ;"Purpose: handle ON SELECT event from Scroller | 
|---|
|  | 1377 | ;"Input: pArray,Option,Info -- see documentation in Scroller | 
|---|
|  | 1378 | ;"       Info has this: | 
|---|
|  | 1379 | ;"          Info("USER INPUT")=input | 
|---|
|  | 1380 | ;"          Info("CURRENT LINE","NUMBER")=number currently highlighted line | 
|---|
|  | 1381 | ;"          Info("CURRENT LINE","TEXT")=Text of currently highlighted line | 
|---|
|  | 1382 | ;"          Info("CURRENT LINE","RETURN")=return value of currently highlighted line | 
|---|
|  | 1383 |  | 
|---|
|  | 1384 |  | 
|---|
|  | 1385 | write $get(Info("USER INPUT")),! | 
|---|
|  | 1386 | do PressToCont | 
|---|
|  | 1387 | quit | 
|---|