| 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 | 
|---|