[613] | 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
|
---|