- 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
- HLCSFMN1 ;ALB/JRP - UTILITIES FOR FILER MONITOR;18-MAY-95
- +1 ;;1.6;HEALTH LEVEL SEVEN;;Oct 13, 1995
- GETINFO(FLRTYPE,OUTARR) ;Get filer information
- +1 ;INPUT : FLRTYPE - Flag indicating type of filer to get info on
- +2 ; IN = Incoming filer (default)
- +3 ; OUT = Outgoing filer
- +4 ; OUTARR - Array to put filer information into (full global ref)
- +5 ;OUTPUT : X - Number of outgoing filers running
- +6 ; OUTARR(PtrSubEntry) = TaskNumber ^ Last$H ^ StopFlag ^
- +7 ; Printable$H ^ ErrorMessage
- +8 ; PtrSubEntry = Pointer to subentry in file 869.3
- +9 ; TaskNumber = Task number of filer
- +10 ; Last$H = Last known $H (field #.03 of subentry)
- +11 ; StopFlag = Whether or not filer has been asked to stop
- +12 ; (field #.02 of subentry)
- +13 ; Yes - Filer has been asked to stop
- +14 ; No - Filer has not been asked to stop
- +15 ; Error - Task stopped due to error
- +16 ; Printable$H = Last$H in printable format
- +17 ; ErrorMessage = Printable error message - only used when
- +18 ; task stopped due to error
- +19 ;NOTES : OUTARR() will be initialized (KILLed) on entry
- +20 ;
- +21 ;Check input
- +22 IF ($GET(OUTARR)="")
- QUIT 0
- +23 SET FLRTYPE=$GET(FLRTYPE)
- +24 IF (FLRTYPE'="OUT")
- SET FLRTYPE="IN"
- +25 ;Declare variables
- +26 NEW PTRSUB,FLRINFO,FLRDH,PRTDH,STOPFLAG,COUNT,ZTSK,TMP
- +27 ;Get filer data
- +28 KILL @OUTARR
- +29 DO GETFLRS^HLCSUTL2(FLRTYPE,OUTARR)
- +30 ;Count number of filers
- +31 SET PTRSUB=""
- +32 FOR COUNT=0:1
- SET PTRSUB=+$ORDER(@OUTARR@(PTRSUB))
- IF ('PTRSUB)
- QUIT
- Begin DoDot:1
- +33 ;Convert data
- +34 SET FLRINFO=@OUTARR@(PTRSUB)
- +35 ;Convert stop flag to printable format
- +36 SET STOPFLAG=+$PIECE(FLRINFO,"^",3)
- +37 SET $PIECE(FLRINFO,"^",3)=$SELECT(STOPFLAG:"Yes",1:"No")
- +38 ;Convert $H to printable format
- +39 SET FLRDH=$PIECE(FLRINFO,"^",2)
- +40 SET PRTDH=""
- +41 IF (FLRDH'="")
- SET PRTDH=$$DH4PRT(FLRDH)
- +42 SET $PIECE(FLRINFO,"^",4)=PRTDH
- +43 ;Get task's status
- +44 KILL ZTSK
- +45 SET ZTSK=+FLRINFO
- +46 DO STAT^%ZTLOAD
- +47 ;Problem with task
- +48 IF (ZTSK(1)'=2)
- Begin DoDot:2
- +49 ;Determine error message
- +50 SET TMP=$SELECT(FLRTYPE="OUT":"Outgoing ",1:"Incoming ")
- +51 ;Task no longer defined
- +52 IF (ZTSK(1)=0)
- SET TMP="** "_TMP_"filer is no longer defined **"
- +53 ;Task hasn't started yet
- +54 IF (ZTSK(1)=1)
- SET TMP=TMP_"filer has not started yet"
- +55 ;Task finished
- +56 IF (ZTSK(1)=3)
- SET TMP=TMP_"filer stopped but didn't delete itself"
- +57 ;Task not scheduled
- +58 IF (ZTSK(1)=4)
- SET TMP="** "_TMP_"filer has not been [re]scheduled **"
- +59 ;Task errored out
- +60 IF (ZTSK(1)=5)
- SET TMP="** "_TMP_"filer has stopped due to error **"
- +61 ;Store error message
- +62 SET $PIECE(FLRINFO,"^",5)=TMP
- +63 ;Use 'Error' for stop flag - don't change if filer hasn't started yet
- +64 IF (ZTSK(1)'=1)
- SET $PIECE(FLRINFO,"^",3)="Error"
- End DoDot:2
- +65 ;Store converted data
- +66 SET @OUTARR@(PTRSUB)=FLRINFO
- End DoDot:1
- +67 ;Return info
- +68 QUIT COUNT
- DIFFDH(DH1,DH2) ;DETERMINE DIFFERENCES BETWEEN TWO VALUES OF $H
- +1 ;INPUT : DH1 - Beginning $H (defaults to current $H)
- +2 ; DH2 - Ending $H (defaults to current $H)
- +3 ;OUTPUT : Days ^ Time
- +4 ; Days = Number of days between DH1 & DH2
- +5 ; Time = Rest of time between DH1 & DH2 => HH:MM:SS
- +6 ;NOTES : Difference calculated by subtracting DH1 from DH2
- +7 ;
- +8 ;Check input
- +9 SET DH1=$GET(DH1)
- +10 IF (DH1="")
- SET DH1=$HOROLOG
- +11 SET DH2=$GET(DH2)
- +12 IF (DH2="")
- SET DH2=$HOROLOG
- +13 ;Declare variables
- +14 NEW DAY1,DAY2,DAYDIF,TIME1,TIME2,TIMEDIF,NEGATE,%
- +15 ;Break out day & seconds from $H
- +16 SET DAY1=+$PIECE(DH1,",",1)
- +17 SET DAY2=+$PIECE(DH2,",",1)
- +18 SET TIME1=+$PIECE(DH1,",",2)
- +19 SET TIME2=+$PIECE(DH2,",",2)
- +20 ;Make sure DH2 is after DH1
- +21 SET NEGATE=0
- +22 IF ((DAY1>DAY2)!((DAY1=DAY2)&(TIME1>TIME2)))
- Begin DoDot:1
- +23 ;Switch date/time
- +24 SET NEGATE=DAY2
- +25 SET DAY2=DAY1
- +26 SET DAY1=NEGATE
- +27 SET NEGATE=TIME2
- +28 SET TIME2=TIME1
- +29 SET TIME1=NEGATE
- +30 ;Negate answer when done
- +31 SET NEGATE=1
- End DoDot:1
- +32 ;Determine day difference
- +33 SET DAYDIF=DAY2-DAY1
- +34 ;Determine time difference
- +35 ;Same day - just subtract time
- +36 IF ('DAYDIF)
- SET TIMEDIF=TIME2-TIME1
- +37 ;Different day - special case exists
- +38 IF (DAYDIF)
- Begin DoDot:1
- +39 ;Seconds not different by 24 hours
- +40 IF (TIME2<TIME1)
- Begin DoDot:2
- +41 ;Convert one day from difference to seconds
- +42 SET DAYDIF=DAYDIF-1
- +43 ;Add to ending time
- +44 SET TIME2=TIME2+86400
- +45 ;Subtract times
- +46 SET TIMEDIF=TIME2-TIME1
- End DoDot:2
- QUIT
- +47 ;Seconds different by 24 hours
- +48 SET TIMEDIF=TIME2-TIME1
- End DoDot:1
- +49 ;Convert seconds to time
- +50 SET %=TIMEDIF
- +51 DO S^%DTC
- +52 SET %=%_"000000"
- +53 SET TIMEDIF=$EXTRACT(%,2,3)_":"_$EXTRACT(%,4,5)_":"_$EXTRACT(%,6,7)
- +54 ;Negate results (if needed)
- +55 IF (NEGATE)
- Begin DoDot:1
- +56 SET DAYDIF=0-DAYDIF
- +57 ;Don't negate 00:00:00
- +58 FOR %=1:1:4
- IF ($PIECE(TIMEDIF,"
- QUIT
- +59 IF (%'=4)
- SET TIMEDIF="-"_TIMEDIF
- End DoDot:1
- +60 QUIT DAYDIF_"^"_TIMEDIF
- DH4PRT(DH) ;CONVERT $H TO PRINTABLE FORMAT
- +1 ;INPUT : DH - $H (defaults to current $H)
- +2 ;OUTPUT : Printable format of $H => DD-MMM-YY @ HH:MM:SS
- +3 ;
- +4 ;Check input
- +5 SET DH=$GET(DH)
- +6 IF (DH="")
- SET DH=$HOROLOG
- +7 ;Declare variables
- +8 NEW %H,Y,X,%,CNVDATE,CNVTIME
- +9 ;Convert $H to external format
- +10 SET %H=DH
- +11 DO YX^%DTC
- +12 ;Convert to print format
- +13 SET CNVDATE=$PIECE(Y,"@",1)
- +14 SET %=%_"000000"
- +15 SET CNVTIME=$EXTRACT(%,2,3)_":"_$EXTRACT(%,4,5)_":"_$EXTRACT(%,6,7)
- +16 SET Y=$EXTRACT(X,6,7)_"-"_$PIECE(CNVDATE," ",1)_"-"_$EXTRACT(X,2,3)_" @ "_CNVTIME
- +17 QUIT Y
- GETATTR ;GET SCREEN ATTRIBUTES USED BY MONITOR
- +1 ;INPUT : IOST(0) - Terminal type [as set by entry into DHCP]
- +2 ;OUTPUT : The following screen attributes will be defined
- +3 ; IOINORM - Normal intensity
- +4 ; IOINHI - High Intensity (bold)
- +5 ; IOUON - Underline on
- +6 ; IOUOFF - Underline off
- +7 ; IOBON - Blink on
- +8 ; IOBOFF - Blink off
- +9 ; IORVON - Reverse video on
- +10 ; IORVOFF - Reverse video off
- +11 ; IOHOME - Move cursor to home
- +12 ; IOELEOL - Erase from cursor to end of line
- +13 ;
- +14 ;NOTES : If IOST(0) is not defined, a call to HOME^%ZIS will be made
- +15 ;
- +16 ;Check for IOST(0)
- +17 IF ('$DATA(IOST(0)))
- DO HOME^%ZIS
- +18 ;Declare variables
- +19 NEW X
- +20 ;Get screen attributes
- +21 SET X="IOINORM;IOINHI;IOUON;IOUOFF;IOBON;IOBOFF;IORVON;IORVOFF;IOHOME;IOELEOL"
- +22 DO ENDR^%ZISS
- +23 QUIT