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