VistA-WorldVistAEHR/r/HEALTH_LEVEL_SEVEN-HL/HLCSFMN1.m

175 lines
5.6 KiB
Mathematica

HLCSFMN1 ;ALB/JRP - UTILITIES FOR FILER MONITOR;18-MAY-95
;;1.6;HEALTH LEVEL SEVEN;;Oct 13, 1995
GETINFO(FLRTYPE,OUTARR) ;Get filer information
;INPUT : FLRTYPE - Flag indicating type of filer to get info on
; IN = Incoming filer (default)
; OUT = Outgoing filer
; OUTARR - Array to put filer information into (full global ref)
;OUTPUT : X - Number of outgoing filers running
; OUTARR(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
;NOTES : OUTARR() will be initialized (KILLed) on entry
;
;Check input
Q:($G(OUTARR)="") 0
S FLRTYPE=$G(FLRTYPE)
S:(FLRTYPE'="OUT") FLRTYPE="IN"
;Declare variables
N PTRSUB,FLRINFO,FLRDH,PRTDH,STOPFLAG,COUNT,ZTSK,TMP
;Get filer data
K @OUTARR
D GETFLRS^HLCSUTL2(FLRTYPE,OUTARR)
;Count number of filers
S PTRSUB=""
F COUNT=0:1 S PTRSUB=+$O(@OUTARR@(PTRSUB)) Q:('PTRSUB) D
.;Convert data
.S FLRINFO=@OUTARR@(PTRSUB)
.;Convert stop flag to printable format
.S STOPFLAG=+$P(FLRINFO,"^",3)
.S $P(FLRINFO,"^",3)=$S(STOPFLAG:"Yes",1:"No")
.;Convert $H to printable format
.S FLRDH=$P(FLRINFO,"^",2)
.S PRTDH=""
.S:(FLRDH'="") PRTDH=$$DH4PRT(FLRDH)
.S $P(FLRINFO,"^",4)=PRTDH
.;Get task's status
.K ZTSK
.S ZTSK=+FLRINFO
.D STAT^%ZTLOAD
.;Problem with task
.I (ZTSK(1)'=2) D
..;Determine error message
..S TMP=$S(FLRTYPE="OUT":"Outgoing ",1:"Incoming ")
..;Task no longer defined
..S:(ZTSK(1)=0) TMP="** "_TMP_"filer is no longer defined **"
..;Task hasn't started yet
..S:(ZTSK(1)=1) TMP=TMP_"filer has not started yet"
..;Task finished
..S:(ZTSK(1)=3) TMP=TMP_"filer stopped but didn't delete itself"
..;Task not scheduled
..S:(ZTSK(1)=4) TMP="** "_TMP_"filer has not been [re]scheduled **"
..;Task errored out
..S:(ZTSK(1)=5) TMP="** "_TMP_"filer has stopped due to error **"
..;Store error message
..S $P(FLRINFO,"^",5)=TMP
..;Use 'Error' for stop flag - don't change if filer hasn't started yet
..S:(ZTSK(1)'=1) $P(FLRINFO,"^",3)="Error"
.;Store converted data
.S @OUTARR@(PTRSUB)=FLRINFO
;Return info
Q COUNT
DIFFDH(DH1,DH2) ;DETERMINE DIFFERENCES BETWEEN TWO VALUES OF $H
;INPUT : DH1 - Beginning $H (defaults to current $H)
; DH2 - Ending $H (defaults to current $H)
;OUTPUT : Days ^ Time
; Days = Number of days between DH1 & DH2
; Time = Rest of time between DH1 & DH2 => HH:MM:SS
;NOTES : Difference calculated by subtracting DH1 from DH2
;
;Check input
S DH1=$G(DH1)
S:(DH1="") DH1=$H
S DH2=$G(DH2)
S:(DH2="") DH2=$H
;Declare variables
N DAY1,DAY2,DAYDIF,TIME1,TIME2,TIMEDIF,NEGATE,%
;Break out day & seconds from $H
S DAY1=+$P(DH1,",",1)
S DAY2=+$P(DH2,",",1)
S TIME1=+$P(DH1,",",2)
S TIME2=+$P(DH2,",",2)
;Make sure DH2 is after DH1
S NEGATE=0
I ((DAY1>DAY2)!((DAY1=DAY2)&(TIME1>TIME2))) D
.;Switch date/time
.S NEGATE=DAY2
.S DAY2=DAY1
.S DAY1=NEGATE
.S NEGATE=TIME2
.S TIME2=TIME1
.S TIME1=NEGATE
.;Negate answer when done
.S NEGATE=1
;Determine day difference
S DAYDIF=DAY2-DAY1
;Determine time difference
;Same day - just subtract time
S:('DAYDIF) TIMEDIF=TIME2-TIME1
;Different day - special case exists
I (DAYDIF) D
.;Seconds not different by 24 hours
.I (TIME2<TIME1) D Q
..;Convert one day from difference to seconds
..S DAYDIF=DAYDIF-1
..;Add to ending time
..S TIME2=TIME2+86400
..;Subtract times
..S TIMEDIF=TIME2-TIME1
.;Seconds different by 24 hours
.S TIMEDIF=TIME2-TIME1
;Convert seconds to time
S %=TIMEDIF
D S^%DTC
S %=%_"000000"
S TIMEDIF=$E(%,2,3)_":"_$E(%,4,5)_":"_$E(%,6,7)
;Negate results (if needed)
I (NEGATE) D
.S DAYDIF=0-DAYDIF
.;Don't negate 00:00:00
.F %=1:1:4 Q:($P(TIMEDIF,":",%))
.S:(%'=4) TIMEDIF="-"_TIMEDIF
Q DAYDIF_"^"_TIMEDIF
DH4PRT(DH) ;CONVERT $H TO PRINTABLE FORMAT
;INPUT : DH - $H (defaults to current $H)
;OUTPUT : Printable format of $H => DD-MMM-YY @ HH:MM:SS
;
;Check input
S DH=$G(DH)
S:(DH="") DH=$H
;Declare variables
N %H,Y,X,%,CNVDATE,CNVTIME
;Convert $H to external format
S %H=DH
D YX^%DTC
;Convert to print format
S CNVDATE=$P(Y,"@",1)
S %=%_"000000"
S CNVTIME=$E(%,2,3)_":"_$E(%,4,5)_":"_$E(%,6,7)
S Y=$E(X,6,7)_"-"_$P(CNVDATE," ",1)_"-"_$E(X,2,3)_" @ "_CNVTIME
Q Y
GETATTR ;GET SCREEN ATTRIBUTES USED BY MONITOR
;INPUT : IOST(0) - Terminal type [as set by entry into DHCP]
;OUTPUT : The following screen attributes will be defined
; IOINORM - Normal intensity
; IOINHI - High Intensity (bold)
; IOUON - Underline on
; IOUOFF - Underline off
; IOBON - Blink on
; IOBOFF - Blink off
; IORVON - Reverse video on
; IORVOFF - Reverse video off
; IOHOME - Move cursor to home
; IOELEOL - Erase from cursor to end of line
;
;NOTES : If IOST(0) is not defined, a call to HOME^%ZIS will be made
;
;Check for IOST(0)
D:('$D(IOST(0))) HOME^%ZIS
;Declare variables
N X
;Get screen attributes
S X="IOINORM;IOINHI;IOUON;IOUOFF;IOBON;IOBOFF;IORVON;IORVOFF;IOHOME;IOELEOL"
D ENDR^%ZISS
Q