| 1 | HLCSFMN ;ALB/JRP - INCOMING/OUTGOING FILER MONITOR;19-MAY-95 ;06/25/97  15:03 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**15,30**;Oct 13, 1995 | 
|---|
| 3 | MONITOR ;Main entry point | 
|---|
| 4 | ;Declare variables | 
|---|
| 5 | N INFILER,OUTFILER,INCOUNT,OUTCOUNT,INTOP,OUTTOP,STOP | 
|---|
| 6 | N X S X=0 X ^%ZOSF("RM") | 
|---|
| 7 | ; Turn off terminal line wrap | 
|---|
| 8 | S (INTOP,OUTTOP)=0 | 
|---|
| 9 | ;Get screen attributes used | 
|---|
| 10 | D GETATTR^HLCSFMN1 | 
|---|
| 11 | ;Initial clear screen | 
|---|
| 12 | W @IOF | 
|---|
| 13 | ;Continually display updated information until user chooses to quit | 
|---|
| 14 | F  S STOP=0 D  Q:(STOP) | 
|---|
| 15 | .;Get incoming filer information | 
|---|
| 16 | .S INCOUNT=$$GETINFO^HLCSFMN1("IN","INFILER") | 
|---|
| 17 | .;Set pointer to top of filer lists - if needed | 
|---|
| 18 | .S:('INTOP) INTOP=+$O(INFILER("")) | 
|---|
| 19 | .;Get outgoing filer information | 
|---|
| 20 | .S OUTCOUNT=$$GETINFO^HLCSFMN1("OUT","OUTFILER") | 
|---|
| 21 | .;Set pointer to top of filer lists - if needed | 
|---|
| 22 | .S:('OUTTOP) OUTTOP=+$O(OUTFILER("")) | 
|---|
| 23 | .;Display incoming filer information | 
|---|
| 24 | .D DISPLAY("IN","INFILER",INCOUNT,INTOP) | 
|---|
| 25 | .;Display outgoing filer information | 
|---|
| 26 | .D DISPLAY("OUT","OUTFILER",OUTCOUNT,OUTTOP) | 
|---|
| 27 | .;Prompt/execute action | 
|---|
| 28 | .S STOP=$$PROMPT^HLCSFMN0() | 
|---|
| 29 | ;Delete screen attributes | 
|---|
| 30 | S X=IOM X ^%ZOSF("RM") | 
|---|
| 31 | ; Turn terminal line wrap back on | 
|---|
| 32 | D KILL^%ZISS | 
|---|
| 33 | Q | 
|---|
| 34 | DISPLAY(FLRTYPE,ARRAY,COUNT,PTRTOP) ;Display filer information | 
|---|
| 35 | ;INPUT  : FLRTYPE - Flag indicating type of filer header is for | 
|---|
| 36 | ;                   IN = Incoming filer (default) | 
|---|
| 37 | ;                   OUT = Outgoing filer | 
|---|
| 38 | ;         ARRAY - Array containing filer information (full global ref) | 
|---|
| 39 | ;           ARRAY(PtrSubEntry) = TaskNumber ^ Last$H ^ StopFlag ^ | 
|---|
| 40 | ;                                Printable$H ^ ErrorMessage | 
|---|
| 41 | ;             PtrSubEntry = Pointer to subentry in file 869.3 | 
|---|
| 42 | ;             TaskNumber = Task number of filer | 
|---|
| 43 | ;             Last$H = Last known $H (field #.03 of subentry) | 
|---|
| 44 | ;             StopFlag = Whether or not filer has been asked to stop | 
|---|
| 45 | ;                        (field #.02 of subentry) | 
|---|
| 46 | ;                          Yes - Filer has been asked to stop | 
|---|
| 47 | ;                          No - Filer has not been asked to stop | 
|---|
| 48 | ;                          Error - Task stopped due to error | 
|---|
| 49 | ;             Printable$H = Last$H in printable format | 
|---|
| 50 | ;             ErrorMessage = Printable error message - only used when | 
|---|
| 51 | ;                            task stopped due to error | 
|---|
| 52 | ;         COUNT - Number of filers running | 
|---|
| 53 | ;                 Defaults to 0 | 
|---|
| 54 | ;         PTRTOP - Pointer to first filer in list to display | 
|---|
| 55 | ;                  Defaults to 0 | 
|---|
| 56 | ;         The following screen attributes | 
|---|
| 57 | ;            IOINORM, IOINHI, IOUON, IOUOFF, IOBON, IOBOFF | 
|---|
| 58 | ;            IORVON, IORVOFF, IOF, IOHOME, IOELEOL | 
|---|
| 59 | ;OUTPUT : None | 
|---|
| 60 | ; | 
|---|
| 61 | ;Check input | 
|---|
| 62 | S FLRTYPE=$G(FLRTYPE) | 
|---|
| 63 | S:(FLRTYPE'="OUT") FLRTYPE="IN" | 
|---|
| 64 | Q:($G(ARRAY)="") | 
|---|
| 65 | S COUNT=+$G(COUNT) | 
|---|
| 66 | S PTRTOP=+$G(PTRTOP) | 
|---|
| 67 | ;Declare variables | 
|---|
| 68 | N PTRSUB,LOOP,FLRINFO,LASTDH,ASK2STOP,TASKNUM,ERRMSG | 
|---|
| 69 | N DAY,TIME,HOUR,MIN,SEC,PASTTOL,BLANKS,FLRDH,TMP | 
|---|
| 70 | S BLANKS=$J(" ",20) | 
|---|
| 71 | ;Incoming filer is at top of screen | 
|---|
| 72 | I (FLRTYPE="IN") D | 
|---|
| 73 | .;Check for IOHOME & IOELEOL - used to keep from clearing screen | 
|---|
| 74 | .W:((IOHOME'="")&(IOELEOL'="")) IOHOME | 
|---|
| 75 | .;IOHOME & IOELEOL can't be used - clear screen | 
|---|
| 76 | .W:((IOHOME="")!(IOELEOL="")) @IOF | 
|---|
| 77 | .W IOELEOL,! | 
|---|
| 78 | ;Display filer information | 
|---|
| 79 | D HEADER^HLCSFMN0(FLRTYPE) | 
|---|
| 80 | I ('COUNT) D  Q | 
|---|
| 81 | .;No filers running | 
|---|
| 82 | .W IOBON,IOINHI,"** No " | 
|---|
| 83 | .W $S(FLRTYPE="OUT":"outgoing",1:"incoming") | 
|---|
| 84 | .W " filers are running **",IOBOFF,IOINORM | 
|---|
| 85 | .W IOELEOL,!,IOELEOL,!,IOELEOL,!,IOELEOL,! | 
|---|
| 86 | .;Whitespace between display areas - use less if dashes where used | 
|---|
| 87 | .; in header | 
|---|
| 88 | .W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,! | 
|---|
| 89 | .W:((IOUON="")!(IOUOFF="")) IOELEOL,! | 
|---|
| 90 | ;Loop through filers (print no more than 4) | 
|---|
| 91 | ;  Back up one entry in list so that pointer to top entry is | 
|---|
| 92 | ;  first entry displayed | 
|---|
| 93 | S PTRSUB=+$O(@ARRAY@(PTRTOP),-1) | 
|---|
| 94 | F LOOP=1:1:4 S PTRSUB=+$O(@ARRAY@(PTRSUB)) Q:('PTRSUB)  D | 
|---|
| 95 | .;Get info from array | 
|---|
| 96 | .S FLRINFO=@ARRAY@(PTRSUB) | 
|---|
| 97 | .;Get task number | 
|---|
| 98 | .S TASKNUM=$P(FLRINFO,"^",1) | 
|---|
| 99 | .;Get last known $H | 
|---|
| 100 | .S FLRDH=$P(FLRINFO,"^",2) | 
|---|
| 101 | .;Get asked to stop flag | 
|---|
| 102 | .S ASK2STOP=$P(FLRINFO,"^",3) | 
|---|
| 103 | .;Get printable last known $H | 
|---|
| 104 | .S LASTDH=$P(FLRINFO,"^",4) | 
|---|
| 105 | .;Get error message | 
|---|
| 106 | .S ERRMSG=$P(FLRINFO,"^",5) | 
|---|
| 107 | .;Calculate time difference | 
|---|
| 108 | .S TMP=$$DIFFDH^HLCSFMN1(FLRDH,$H) | 
|---|
| 109 | .S DAY=+TMP | 
|---|
| 110 | .S TIME=$P(TMP,"^",2) | 
|---|
| 111 | .S HOUR=$P(TIME,":",1) | 
|---|
| 112 | .S MIN=$P(TIME,":",2) | 
|---|
| 113 | .S SEC=$P(TIME,":",3) | 
|---|
| 114 | .;Last known $H not set yet | 
|---|
| 115 | .I (FLRDH="") D | 
|---|
| 116 | ..S LASTDH="--------- @ --:--:--" | 
|---|
| 117 | ..S DAY="-" | 
|---|
| 118 | ..S (HOUR,MIN,SEC)="--" | 
|---|
| 119 | .;Print information | 
|---|
| 120 | .; Print task number | 
|---|
| 121 | .W TASKNUM,$E(BLANKS,1,(15-$L(TASKNUM)+3)) | 
|---|
| 122 | .;Print stop flag | 
|---|
| 123 | .W ASK2STOP,$E(BLANKS,1,(7-$L(ASK2STOP)+3)) | 
|---|
| 124 | .;Problem with task - error message defined | 
|---|
| 125 | .I (ERRMSG'="") D  Q | 
|---|
| 126 | ..;Not an error with task - don't use special attributes | 
|---|
| 127 | ..I (ASK2STOP'="Error") W ERRMSG,IOELEOL,! Q | 
|---|
| 128 | ..W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W IOINHI,IOBON,ERRMSG,IOBOFF,IOINORM,! | 
|---|
| 129 | .;Task still running - determine if time difference is within | 
|---|
| 130 | .; tolerance level | 
|---|
| 131 | .S PASTTOL=0 | 
|---|
| 132 | .S:((DAY)!(HOUR)!(MIN>9)) PASTTOL=1 | 
|---|
| 133 | .;Bold on (if outside tolerance level) | 
|---|
| 134 | .W:(PASTTOL) IOINHI | 
|---|
| 135 | .;Print last known $H | 
|---|
| 136 | .W LASTDH,$E(BLANKS,1,3) | 
|---|
| 137 | .;Print time lapse | 
|---|
| 138 | .W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W DAY," Day  ",HOUR," Hr  ",MIN," Min  ",SEC," Sec",! | 
|---|
| 139 | .;Bold off (if outside tolerance level) | 
|---|
| 140 | .W:(PASTTOL) IOINORM | 
|---|
| 141 | ;End of list reached | 
|---|
| 142 | I ((LOOP'=4)!('PTRSUB)) D | 
|---|
| 143 | .W IORVON,"[End of list - total of ",COUNT,"]",IORVOFF,IOELEOL,! | 
|---|
| 144 | .F TMP=1:1:(4-LOOP) W IOELEOL,! | 
|---|
| 145 | ;Whitespace between display areas - use less if dashes where used | 
|---|
| 146 | ; in header | 
|---|
| 147 | W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,! | 
|---|
| 148 | W:((IOUON="")!(IOUOFF="")) IOELEOL,! | 
|---|
| 149 | Q | 
|---|