| 1 | HLCSFMN1 ;ALB/JRP - UTILITIES FOR FILER MONITOR;18-MAY-95
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;;Oct 13, 1995
 | 
|---|
| 3 | GETINFO(FLRTYPE,OUTARR) ;Get filer information
 | 
|---|
| 4 |  ;INPUT  : FLRTYPE - Flag indicating type of filer to get info on
 | 
|---|
| 5 |  ;                   IN = Incoming filer (default)
 | 
|---|
| 6 |  ;                   OUT = Outgoing filer
 | 
|---|
| 7 |  ;         OUTARR - Array to put filer information into (full global ref)
 | 
|---|
| 8 |  ;OUTPUT : X - Number of outgoing filers running
 | 
|---|
| 9 |  ;         OUTARR(PtrSubEntry) = TaskNumber ^ Last$H ^ StopFlag ^
 | 
|---|
| 10 |  ;                               Printable$H ^ ErrorMessage
 | 
|---|
| 11 |  ;           PtrSubEntry = Pointer to subentry in file 869.3
 | 
|---|
| 12 |  ;           TaskNumber = Task number of filer
 | 
|---|
| 13 |  ;           Last$H = Last known $H (field #.03 of subentry)
 | 
|---|
| 14 |  ;           StopFlag = Whether or not filer has been asked to stop
 | 
|---|
| 15 |  ;                      (field #.02 of subentry)
 | 
|---|
| 16 |  ;                      Yes - Filer has been asked to stop
 | 
|---|
| 17 |  ;                      No - Filer has not been asked to stop
 | 
|---|
| 18 |  ;                      Error - Task stopped due to error
 | 
|---|
| 19 |  ;           Printable$H = Last$H in printable format
 | 
|---|
| 20 |  ;           ErrorMessage = Printable error message - only used when
 | 
|---|
| 21 |  ;                          task stopped due to error
 | 
|---|
| 22 |  ;NOTES  : OUTARR() will be initialized (KILLed) on entry
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ;Check input
 | 
|---|
| 25 |  Q:($G(OUTARR)="") 0
 | 
|---|
| 26 |  S FLRTYPE=$G(FLRTYPE)
 | 
|---|
| 27 |  S:(FLRTYPE'="OUT") FLRTYPE="IN"
 | 
|---|
| 28 |  ;Declare variables
 | 
|---|
| 29 |  N PTRSUB,FLRINFO,FLRDH,PRTDH,STOPFLAG,COUNT,ZTSK,TMP
 | 
|---|
| 30 |  ;Get filer data
 | 
|---|
| 31 |  K @OUTARR
 | 
|---|
| 32 |  D GETFLRS^HLCSUTL2(FLRTYPE,OUTARR)
 | 
|---|
| 33 |  ;Count number of filers
 | 
|---|
| 34 |  S PTRSUB=""
 | 
|---|
| 35 |  F COUNT=0:1 S PTRSUB=+$O(@OUTARR@(PTRSUB)) Q:('PTRSUB)  D
 | 
|---|
| 36 |  .;Convert data
 | 
|---|
| 37 |  .S FLRINFO=@OUTARR@(PTRSUB)
 | 
|---|
| 38 |  .;Convert stop flag to printable format
 | 
|---|
| 39 |  .S STOPFLAG=+$P(FLRINFO,"^",3)
 | 
|---|
| 40 |  .S $P(FLRINFO,"^",3)=$S(STOPFLAG:"Yes",1:"No")
 | 
|---|
| 41 |  .;Convert $H to printable format
 | 
|---|
| 42 |  .S FLRDH=$P(FLRINFO,"^",2)
 | 
|---|
| 43 |  .S PRTDH=""
 | 
|---|
| 44 |  .S:(FLRDH'="") PRTDH=$$DH4PRT(FLRDH)
 | 
|---|
| 45 |  .S $P(FLRINFO,"^",4)=PRTDH
 | 
|---|
| 46 |  .;Get task's status
 | 
|---|
| 47 |  .K ZTSK
 | 
|---|
| 48 |  .S ZTSK=+FLRINFO
 | 
|---|
| 49 |  .D STAT^%ZTLOAD
 | 
|---|
| 50 |  .;Problem with task
 | 
|---|
| 51 |  .I (ZTSK(1)'=2) D
 | 
|---|
| 52 |  ..;Determine error message
 | 
|---|
| 53 |  ..S TMP=$S(FLRTYPE="OUT":"Outgoing ",1:"Incoming ")
 | 
|---|
| 54 |  ..;Task no longer defined
 | 
|---|
| 55 |  ..S:(ZTSK(1)=0) TMP="** "_TMP_"filer is no longer defined **"
 | 
|---|
| 56 |  ..;Task hasn't started yet
 | 
|---|
| 57 |  ..S:(ZTSK(1)=1) TMP=TMP_"filer has not started yet"
 | 
|---|
| 58 |  ..;Task finished
 | 
|---|
| 59 |  ..S:(ZTSK(1)=3) TMP=TMP_"filer stopped but didn't delete itself"
 | 
|---|
| 60 |  ..;Task not scheduled
 | 
|---|
| 61 |  ..S:(ZTSK(1)=4) TMP="** "_TMP_"filer has not been [re]scheduled **"
 | 
|---|
| 62 |  ..;Task errored out
 | 
|---|
| 63 |  ..S:(ZTSK(1)=5) TMP="** "_TMP_"filer has stopped due to error **"
 | 
|---|
| 64 |  ..;Store error message
 | 
|---|
| 65 |  ..S $P(FLRINFO,"^",5)=TMP
 | 
|---|
| 66 |  ..;Use 'Error' for stop flag - don't change if filer hasn't started yet
 | 
|---|
| 67 |  ..S:(ZTSK(1)'=1) $P(FLRINFO,"^",3)="Error"
 | 
|---|
| 68 |  .;Store converted data
 | 
|---|
| 69 |  .S @OUTARR@(PTRSUB)=FLRINFO
 | 
|---|
| 70 |  ;Return info
 | 
|---|
| 71 |  Q COUNT
 | 
|---|
| 72 | DIFFDH(DH1,DH2) ;DETERMINE DIFFERENCES BETWEEN TWO VALUES OF $H
 | 
|---|
| 73 |  ;INPUT  : DH1 - Beginning $H (defaults to current $H)
 | 
|---|
| 74 |  ;         DH2 - Ending $H (defaults to current $H)
 | 
|---|
| 75 |  ;OUTPUT : Days ^ Time
 | 
|---|
| 76 |  ;           Days = Number of days between DH1 & DH2
 | 
|---|
| 77 |  ;           Time = Rest of time between DH1 & DH2 => HH:MM:SS
 | 
|---|
| 78 |  ;NOTES  : Difference calculated by subtracting DH1 from DH2
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ;Check input
 | 
|---|
| 81 |  S DH1=$G(DH1)
 | 
|---|
| 82 |  S:(DH1="") DH1=$H
 | 
|---|
| 83 |  S DH2=$G(DH2)
 | 
|---|
| 84 |  S:(DH2="") DH2=$H
 | 
|---|
| 85 |  ;Declare variables
 | 
|---|
| 86 |  N DAY1,DAY2,DAYDIF,TIME1,TIME2,TIMEDIF,NEGATE,%
 | 
|---|
| 87 |  ;Break out day & seconds from $H
 | 
|---|
| 88 |  S DAY1=+$P(DH1,",",1)
 | 
|---|
| 89 |  S DAY2=+$P(DH2,",",1)
 | 
|---|
| 90 |  S TIME1=+$P(DH1,",",2)
 | 
|---|
| 91 |  S TIME2=+$P(DH2,",",2)
 | 
|---|
| 92 |  ;Make sure DH2 is after DH1
 | 
|---|
| 93 |  S NEGATE=0
 | 
|---|
| 94 |  I ((DAY1>DAY2)!((DAY1=DAY2)&(TIME1>TIME2))) D
 | 
|---|
| 95 |  .;Switch date/time
 | 
|---|
| 96 |  .S NEGATE=DAY2
 | 
|---|
| 97 |  .S DAY2=DAY1
 | 
|---|
| 98 |  .S DAY1=NEGATE
 | 
|---|
| 99 |  .S NEGATE=TIME2
 | 
|---|
| 100 |  .S TIME2=TIME1
 | 
|---|
| 101 |  .S TIME1=NEGATE
 | 
|---|
| 102 |  .;Negate answer when done
 | 
|---|
| 103 |  .S NEGATE=1
 | 
|---|
| 104 |  ;Determine day difference
 | 
|---|
| 105 |  S DAYDIF=DAY2-DAY1
 | 
|---|
| 106 |  ;Determine time difference
 | 
|---|
| 107 |  ;Same day - just subtract time
 | 
|---|
| 108 |  S:('DAYDIF) TIMEDIF=TIME2-TIME1
 | 
|---|
| 109 |  ;Different day - special case exists
 | 
|---|
| 110 |  I (DAYDIF) D
 | 
|---|
| 111 |  .;Seconds not different by 24 hours
 | 
|---|
| 112 |  .I (TIME2<TIME1) D  Q
 | 
|---|
| 113 |  ..;Convert one day from difference to seconds
 | 
|---|
| 114 |  ..S DAYDIF=DAYDIF-1
 | 
|---|
| 115 |  ..;Add to ending time
 | 
|---|
| 116 |  ..S TIME2=TIME2+86400
 | 
|---|
| 117 |  ..;Subtract times
 | 
|---|
| 118 |  ..S TIMEDIF=TIME2-TIME1
 | 
|---|
| 119 |  .;Seconds different by 24 hours
 | 
|---|
| 120 |  .S TIMEDIF=TIME2-TIME1
 | 
|---|
| 121 |  ;Convert seconds to time
 | 
|---|
| 122 |  S %=TIMEDIF
 | 
|---|
| 123 |  D S^%DTC
 | 
|---|
| 124 |  S %=%_"000000"
 | 
|---|
| 125 |  S TIMEDIF=$E(%,2,3)_":"_$E(%,4,5)_":"_$E(%,6,7)
 | 
|---|
| 126 |  ;Negate results (if needed)
 | 
|---|
| 127 |  I (NEGATE) D
 | 
|---|
| 128 |  .S DAYDIF=0-DAYDIF
 | 
|---|
| 129 |  .;Don't negate 00:00:00
 | 
|---|
| 130 |  .F %=1:1:4 Q:($P(TIMEDIF,":",%))
 | 
|---|
| 131 |  .S:(%'=4) TIMEDIF="-"_TIMEDIF
 | 
|---|
| 132 |  Q DAYDIF_"^"_TIMEDIF
 | 
|---|
| 133 | DH4PRT(DH) ;CONVERT $H TO PRINTABLE FORMAT
 | 
|---|
| 134 |  ;INPUT  : DH - $H (defaults to current $H)
 | 
|---|
| 135 |  ;OUTPUT : Printable format of $H => DD-MMM-YY @ HH:MM:SS
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  ;Check input
 | 
|---|
| 138 |  S DH=$G(DH)
 | 
|---|
| 139 |  S:(DH="") DH=$H
 | 
|---|
| 140 |  ;Declare variables
 | 
|---|
| 141 |  N %H,Y,X,%,CNVDATE,CNVTIME
 | 
|---|
| 142 |  ;Convert $H to external format
 | 
|---|
| 143 |  S %H=DH
 | 
|---|
| 144 |  D YX^%DTC
 | 
|---|
| 145 |  ;Convert to print format
 | 
|---|
| 146 |  S CNVDATE=$P(Y,"@",1)
 | 
|---|
| 147 |  S %=%_"000000"
 | 
|---|
| 148 |  S CNVTIME=$E(%,2,3)_":"_$E(%,4,5)_":"_$E(%,6,7)
 | 
|---|
| 149 |  S Y=$E(X,6,7)_"-"_$P(CNVDATE," ",1)_"-"_$E(X,2,3)_" @ "_CNVTIME
 | 
|---|
| 150 |  Q Y
 | 
|---|
| 151 | GETATTR ;GET SCREEN ATTRIBUTES USED BY MONITOR
 | 
|---|
| 152 |  ;INPUT  : IOST(0) - Terminal type [as set by entry into DHCP]
 | 
|---|
| 153 |  ;OUTPUT : The following screen attributes will be defined
 | 
|---|
| 154 |  ;           IOINORM - Normal intensity
 | 
|---|
| 155 |  ;           IOINHI  - High Intensity (bold)
 | 
|---|
| 156 |  ;           IOUON   - Underline on
 | 
|---|
| 157 |  ;           IOUOFF  - Underline off
 | 
|---|
| 158 |  ;           IOBON   - Blink on
 | 
|---|
| 159 |  ;           IOBOFF  - Blink off
 | 
|---|
| 160 |  ;           IORVON  - Reverse video on
 | 
|---|
| 161 |  ;           IORVOFF - Reverse video off
 | 
|---|
| 162 |  ;           IOHOME - Move cursor to home
 | 
|---|
| 163 |  ;           IOELEOL - Erase from cursor to end of line
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  ;NOTES  : If IOST(0) is not defined, a call to HOME^%ZIS will be made
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  ;Check for IOST(0)
 | 
|---|
| 168 |  D:('$D(IOST(0))) HOME^%ZIS
 | 
|---|
| 169 |  ;Declare variables
 | 
|---|
| 170 |  N X
 | 
|---|
| 171 |  ;Get screen attributes
 | 
|---|
| 172 |  S X="IOINORM;IOINHI;IOUON;IOUOFF;IOBON;IOBOFF;IORVON;IORVOFF;IOHOME;IOELEOL"
 | 
|---|
| 173 |  D ENDR^%ZISS
 | 
|---|
| 174 |  Q
 | 
|---|