VistA-FOIAVistA/r/HEALTH_LEVEL_SEVEN-HL/HLCSFMN.m

150 lines
5.4 KiB
Mathematica

HLCSFMN ;ALB/JRP - INCOMING/OUTGOING FILER MONITOR;19-MAY-95 ;06/25/97 15:03
;;1.6;HEALTH LEVEL SEVEN;**15,30**;Oct 13, 1995
MONITOR ;Main entry point
;Declare variables
N INFILER,OUTFILER,INCOUNT,OUTCOUNT,INTOP,OUTTOP,STOP
N X S X=0 X ^%ZOSF("RM")
; Turn off terminal line wrap
S (INTOP,OUTTOP)=0
;Get screen attributes used
D GETATTR^HLCSFMN1
;Initial clear screen
W @IOF
;Continually display updated information until user chooses to quit
F S STOP=0 D Q:(STOP)
.;Get incoming filer information
.S INCOUNT=$$GETINFO^HLCSFMN1("IN","INFILER")
.;Set pointer to top of filer lists - if needed
.S:('INTOP) INTOP=+$O(INFILER(""))
.;Get outgoing filer information
.S OUTCOUNT=$$GETINFO^HLCSFMN1("OUT","OUTFILER")
.;Set pointer to top of filer lists - if needed
.S:('OUTTOP) OUTTOP=+$O(OUTFILER(""))
.;Display incoming filer information
.D DISPLAY("IN","INFILER",INCOUNT,INTOP)
.;Display outgoing filer information
.D DISPLAY("OUT","OUTFILER",OUTCOUNT,OUTTOP)
.;Prompt/execute action
.S STOP=$$PROMPT^HLCSFMN0()
;Delete screen attributes
S X=IOM X ^%ZOSF("RM")
; Turn terminal line wrap back on
D KILL^%ZISS
Q
DISPLAY(FLRTYPE,ARRAY,COUNT,PTRTOP) ;Display filer information
;INPUT : FLRTYPE - Flag indicating type of filer header is for
; IN = Incoming filer (default)
; OUT = Outgoing filer
; ARRAY - Array containing filer information (full global ref)
; ARRAY(PtrSubEntry) = TaskNumber ^ Last$H ^ StopFlag ^
; Printable$H ^ ErrorMessage
; PtrSubEntry = Pointer to subentry in file 869.3
; TaskNumber = Task number of filer
; Last$H = Last known $H (field #.03 of subentry)
; StopFlag = Whether or not filer has been asked to stop
; (field #.02 of subentry)
; Yes - Filer has been asked to stop
; No - Filer has not been asked to stop
; Error - Task stopped due to error
; Printable$H = Last$H in printable format
; ErrorMessage = Printable error message - only used when
; task stopped due to error
; COUNT - Number of filers running
; Defaults to 0
; PTRTOP - Pointer to first filer in list to display
; Defaults to 0
; The following screen attributes
; IOINORM, IOINHI, IOUON, IOUOFF, IOBON, IOBOFF
; IORVON, IORVOFF, IOF, IOHOME, IOELEOL
;OUTPUT : None
;
;Check input
S FLRTYPE=$G(FLRTYPE)
S:(FLRTYPE'="OUT") FLRTYPE="IN"
Q:($G(ARRAY)="")
S COUNT=+$G(COUNT)
S PTRTOP=+$G(PTRTOP)
;Declare variables
N PTRSUB,LOOP,FLRINFO,LASTDH,ASK2STOP,TASKNUM,ERRMSG
N DAY,TIME,HOUR,MIN,SEC,PASTTOL,BLANKS,FLRDH,TMP
S BLANKS=$J(" ",20)
;Incoming filer is at top of screen
I (FLRTYPE="IN") D
.;Check for IOHOME & IOELEOL - used to keep from clearing screen
.W:((IOHOME'="")&(IOELEOL'="")) IOHOME
.;IOHOME & IOELEOL can't be used - clear screen
.W:((IOHOME="")!(IOELEOL="")) @IOF
.W IOELEOL,!
;Display filer information
D HEADER^HLCSFMN0(FLRTYPE)
I ('COUNT) D Q
.;No filers running
.W IOBON,IOINHI,"** No "
.W $S(FLRTYPE="OUT":"outgoing",1:"incoming")
.W " filers are running **",IOBOFF,IOINORM
.W IOELEOL,!,IOELEOL,!,IOELEOL,!,IOELEOL,!
.;Whitespace between display areas - use less if dashes where used
.; in header
.W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,!
.W:((IOUON="")!(IOUOFF="")) IOELEOL,!
;Loop through filers (print no more than 4)
; Back up one entry in list so that pointer to top entry is
; first entry displayed
S PTRSUB=+$O(@ARRAY@(PTRTOP),-1)
F LOOP=1:1:4 S PTRSUB=+$O(@ARRAY@(PTRSUB)) Q:('PTRSUB) D
.;Get info from array
.S FLRINFO=@ARRAY@(PTRSUB)
.;Get task number
.S TASKNUM=$P(FLRINFO,"^",1)
.;Get last known $H
.S FLRDH=$P(FLRINFO,"^",2)
.;Get asked to stop flag
.S ASK2STOP=$P(FLRINFO,"^",3)
.;Get printable last known $H
.S LASTDH=$P(FLRINFO,"^",4)
.;Get error message
.S ERRMSG=$P(FLRINFO,"^",5)
.;Calculate time difference
.S TMP=$$DIFFDH^HLCSFMN1(FLRDH,$H)
.S DAY=+TMP
.S TIME=$P(TMP,"^",2)
.S HOUR=$P(TIME,":",1)
.S MIN=$P(TIME,":",2)
.S SEC=$P(TIME,":",3)
.;Last known $H not set yet
.I (FLRDH="") D
..S LASTDH="--------- @ --:--:--"
..S DAY="-"
..S (HOUR,MIN,SEC)="--"
.;Print information
.; Print task number
.W TASKNUM,$E(BLANKS,1,(15-$L(TASKNUM)+3))
.;Print stop flag
.W ASK2STOP,$E(BLANKS,1,(7-$L(ASK2STOP)+3))
.;Problem with task - error message defined
.I (ERRMSG'="") D Q
..;Not an error with task - don't use special attributes
..I (ASK2STOP'="Error") W ERRMSG,IOELEOL,! Q
..W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W IOINHI,IOBON,ERRMSG,IOBOFF,IOINORM,!
.;Task still running - determine if time difference is within
.; tolerance level
.S PASTTOL=0
.S:((DAY)!(HOUR)!(MIN>9)) PASTTOL=1
.;Bold on (if outside tolerance level)
.W:(PASTTOL) IOINHI
.;Print last known $H
.W LASTDH,$E(BLANKS,1,3)
.;Print time lapse
.W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W DAY," Day ",HOUR," Hr ",MIN," Min ",SEC," Sec",!
.;Bold off (if outside tolerance level)
.W:(PASTTOL) IOINORM
;End of list reached
I ((LOOP'=4)!('PTRSUB)) D
.W IORVON,"[End of list - total of ",COUNT,"]",IORVOFF,IOELEOL,!
.F TMP=1:1:(4-LOOP) W IOELEOL,!
;Whitespace between display areas - use less if dashes where used
; in header
W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,!
W:((IOUON="")!(IOUOFF="")) IOELEOL,!
Q