| [613] | 1 | HLCSFMN ;ALB/JRP - INCOMING/OUTGOING FILER MONITOR;19-MAY-95 ;06/25/97  15:03
 | 
|---|
 | 2 |  ;;1.6;HEALTH LEVEL SEVEN;**15,30**;Oct 13, 1995
 | 
|---|
 | 3 | MONITOR ;Main entry point
 | 
|---|
 | 4 |  ;Declare variables
 | 
|---|
 | 5 |  N INFILER,OUTFILER,INCOUNT,OUTCOUNT,INTOP,OUTTOP,STOP
 | 
|---|
 | 6 |  N X S X=0 X ^%ZOSF("RM")
 | 
|---|
 | 7 |  ; Turn off terminal line wrap
 | 
|---|
 | 8 |  S (INTOP,OUTTOP)=0
 | 
|---|
 | 9 |  ;Get screen attributes used
 | 
|---|
 | 10 |  D GETATTR^HLCSFMN1
 | 
|---|
 | 11 |  ;Initial clear screen
 | 
|---|
 | 12 |  W @IOF
 | 
|---|
 | 13 |  ;Continually display updated information until user chooses to quit
 | 
|---|
 | 14 |  F  S STOP=0 D  Q:(STOP)
 | 
|---|
 | 15 |  .;Get incoming filer information
 | 
|---|
 | 16 |  .S INCOUNT=$$GETINFO^HLCSFMN1("IN","INFILER")
 | 
|---|
 | 17 |  .;Set pointer to top of filer lists - if needed
 | 
|---|
 | 18 |  .S:('INTOP) INTOP=+$O(INFILER(""))
 | 
|---|
 | 19 |  .;Get outgoing filer information
 | 
|---|
 | 20 |  .S OUTCOUNT=$$GETINFO^HLCSFMN1("OUT","OUTFILER")
 | 
|---|
 | 21 |  .;Set pointer to top of filer lists - if needed
 | 
|---|
 | 22 |  .S:('OUTTOP) OUTTOP=+$O(OUTFILER(""))
 | 
|---|
 | 23 |  .;Display incoming filer information
 | 
|---|
 | 24 |  .D DISPLAY("IN","INFILER",INCOUNT,INTOP)
 | 
|---|
 | 25 |  .;Display outgoing filer information
 | 
|---|
 | 26 |  .D DISPLAY("OUT","OUTFILER",OUTCOUNT,OUTTOP)
 | 
|---|
 | 27 |  .;Prompt/execute action
 | 
|---|
 | 28 |  .S STOP=$$PROMPT^HLCSFMN0()
 | 
|---|
 | 29 |  ;Delete screen attributes
 | 
|---|
 | 30 |  S X=IOM X ^%ZOSF("RM")
 | 
|---|
 | 31 |  ; Turn terminal line wrap back on
 | 
|---|
 | 32 |  D KILL^%ZISS
 | 
|---|
 | 33 |  Q
 | 
|---|
 | 34 | DISPLAY(FLRTYPE,ARRAY,COUNT,PTRTOP) ;Display filer information
 | 
|---|
 | 35 |  ;INPUT  : FLRTYPE - Flag indicating type of filer header is for
 | 
|---|
 | 36 |  ;                   IN = Incoming filer (default)
 | 
|---|
 | 37 |  ;                   OUT = Outgoing filer
 | 
|---|
 | 38 |  ;         ARRAY - Array containing filer information (full global ref)
 | 
|---|
 | 39 |  ;           ARRAY(PtrSubEntry) = TaskNumber ^ Last$H ^ StopFlag ^
 | 
|---|
 | 40 |  ;                                Printable$H ^ ErrorMessage
 | 
|---|
 | 41 |  ;             PtrSubEntry = Pointer to subentry in file 869.3
 | 
|---|
 | 42 |  ;             TaskNumber = Task number of filer
 | 
|---|
 | 43 |  ;             Last$H = Last known $H (field #.03 of subentry)
 | 
|---|
 | 44 |  ;             StopFlag = Whether or not filer has been asked to stop
 | 
|---|
 | 45 |  ;                        (field #.02 of subentry)
 | 
|---|
 | 46 |  ;                          Yes - Filer has been asked to stop
 | 
|---|
 | 47 |  ;                          No - Filer has not been asked to stop
 | 
|---|
 | 48 |  ;                          Error - Task stopped due to error
 | 
|---|
 | 49 |  ;             Printable$H = Last$H in printable format
 | 
|---|
 | 50 |  ;             ErrorMessage = Printable error message - only used when
 | 
|---|
 | 51 |  ;                            task stopped due to error
 | 
|---|
 | 52 |  ;         COUNT - Number of filers running
 | 
|---|
 | 53 |  ;                 Defaults to 0
 | 
|---|
 | 54 |  ;         PTRTOP - Pointer to first filer in list to display
 | 
|---|
 | 55 |  ;                  Defaults to 0
 | 
|---|
 | 56 |  ;         The following screen attributes
 | 
|---|
 | 57 |  ;            IOINORM, IOINHI, IOUON, IOUOFF, IOBON, IOBOFF
 | 
|---|
 | 58 |  ;            IORVON, IORVOFF, IOF, IOHOME, IOELEOL
 | 
|---|
 | 59 |  ;OUTPUT : None
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 |  ;Check input
 | 
|---|
 | 62 |  S FLRTYPE=$G(FLRTYPE)
 | 
|---|
 | 63 |  S:(FLRTYPE'="OUT") FLRTYPE="IN"
 | 
|---|
 | 64 |  Q:($G(ARRAY)="")
 | 
|---|
 | 65 |  S COUNT=+$G(COUNT)
 | 
|---|
 | 66 |  S PTRTOP=+$G(PTRTOP)
 | 
|---|
 | 67 |  ;Declare variables
 | 
|---|
 | 68 |  N PTRSUB,LOOP,FLRINFO,LASTDH,ASK2STOP,TASKNUM,ERRMSG
 | 
|---|
 | 69 |  N DAY,TIME,HOUR,MIN,SEC,PASTTOL,BLANKS,FLRDH,TMP
 | 
|---|
 | 70 |  S BLANKS=$J(" ",20)
 | 
|---|
 | 71 |  ;Incoming filer is at top of screen
 | 
|---|
 | 72 |  I (FLRTYPE="IN") D
 | 
|---|
 | 73 |  .;Check for IOHOME & IOELEOL - used to keep from clearing screen
 | 
|---|
 | 74 |  .W:((IOHOME'="")&(IOELEOL'="")) IOHOME
 | 
|---|
 | 75 |  .;IOHOME & IOELEOL can't be used - clear screen
 | 
|---|
 | 76 |  .W:((IOHOME="")!(IOELEOL="")) @IOF
 | 
|---|
 | 77 |  .W IOELEOL,!
 | 
|---|
 | 78 |  ;Display filer information
 | 
|---|
 | 79 |  D HEADER^HLCSFMN0(FLRTYPE)
 | 
|---|
 | 80 |  I ('COUNT) D  Q
 | 
|---|
 | 81 |  .;No filers running
 | 
|---|
 | 82 |  .W IOBON,IOINHI,"** No "
 | 
|---|
 | 83 |  .W $S(FLRTYPE="OUT":"outgoing",1:"incoming")
 | 
|---|
 | 84 |  .W " filers are running **",IOBOFF,IOINORM
 | 
|---|
 | 85 |  .W IOELEOL,!,IOELEOL,!,IOELEOL,!,IOELEOL,!
 | 
|---|
 | 86 |  .;Whitespace between display areas - use less if dashes where used
 | 
|---|
 | 87 |  .; in header
 | 
|---|
 | 88 |  .W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,!
 | 
|---|
 | 89 |  .W:((IOUON="")!(IOUOFF="")) IOELEOL,!
 | 
|---|
 | 90 |  ;Loop through filers (print no more than 4)
 | 
|---|
 | 91 |  ;  Back up one entry in list so that pointer to top entry is
 | 
|---|
 | 92 |  ;  first entry displayed
 | 
|---|
 | 93 |  S PTRSUB=+$O(@ARRAY@(PTRTOP),-1)
 | 
|---|
 | 94 |  F LOOP=1:1:4 S PTRSUB=+$O(@ARRAY@(PTRSUB)) Q:('PTRSUB)  D
 | 
|---|
 | 95 |  .;Get info from array
 | 
|---|
 | 96 |  .S FLRINFO=@ARRAY@(PTRSUB)
 | 
|---|
 | 97 |  .;Get task number
 | 
|---|
 | 98 |  .S TASKNUM=$P(FLRINFO,"^",1)
 | 
|---|
 | 99 |  .;Get last known $H
 | 
|---|
 | 100 |  .S FLRDH=$P(FLRINFO,"^",2)
 | 
|---|
 | 101 |  .;Get asked to stop flag
 | 
|---|
 | 102 |  .S ASK2STOP=$P(FLRINFO,"^",3)
 | 
|---|
 | 103 |  .;Get printable last known $H
 | 
|---|
 | 104 |  .S LASTDH=$P(FLRINFO,"^",4)
 | 
|---|
 | 105 |  .;Get error message
 | 
|---|
 | 106 |  .S ERRMSG=$P(FLRINFO,"^",5)
 | 
|---|
 | 107 |  .;Calculate time difference
 | 
|---|
 | 108 |  .S TMP=$$DIFFDH^HLCSFMN1(FLRDH,$H)
 | 
|---|
 | 109 |  .S DAY=+TMP
 | 
|---|
 | 110 |  .S TIME=$P(TMP,"^",2)
 | 
|---|
 | 111 |  .S HOUR=$P(TIME,":",1)
 | 
|---|
 | 112 |  .S MIN=$P(TIME,":",2)
 | 
|---|
 | 113 |  .S SEC=$P(TIME,":",3)
 | 
|---|
 | 114 |  .;Last known $H not set yet
 | 
|---|
 | 115 |  .I (FLRDH="") D
 | 
|---|
 | 116 |  ..S LASTDH="--------- @ --:--:--"
 | 
|---|
 | 117 |  ..S DAY="-"
 | 
|---|
 | 118 |  ..S (HOUR,MIN,SEC)="--"
 | 
|---|
 | 119 |  .;Print information
 | 
|---|
 | 120 |  .; Print task number
 | 
|---|
 | 121 |  .W TASKNUM,$E(BLANKS,1,(15-$L(TASKNUM)+3))
 | 
|---|
 | 122 |  .;Print stop flag
 | 
|---|
 | 123 |  .W ASK2STOP,$E(BLANKS,1,(7-$L(ASK2STOP)+3))
 | 
|---|
 | 124 |  .;Problem with task - error message defined
 | 
|---|
 | 125 |  .I (ERRMSG'="") D  Q
 | 
|---|
 | 126 |  ..;Not an error with task - don't use special attributes
 | 
|---|
 | 127 |  ..I (ASK2STOP'="Error") W ERRMSG,IOELEOL,! Q
 | 
|---|
 | 128 |  ..W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W IOINHI,IOBON,ERRMSG,IOBOFF,IOINORM,!
 | 
|---|
 | 129 |  .;Task still running - determine if time difference is within
 | 
|---|
 | 130 |  .; tolerance level
 | 
|---|
 | 131 |  .S PASTTOL=0
 | 
|---|
 | 132 |  .S:((DAY)!(HOUR)!(MIN>9)) PASTTOL=1
 | 
|---|
 | 133 |  .;Bold on (if outside tolerance level)
 | 
|---|
 | 134 |  .W:(PASTTOL) IOINHI
 | 
|---|
 | 135 |  .;Print last known $H
 | 
|---|
 | 136 |  .W LASTDH,$E(BLANKS,1,3)
 | 
|---|
 | 137 |  .;Print time lapse
 | 
|---|
 | 138 |  .W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W DAY," Day  ",HOUR," Hr  ",MIN," Min  ",SEC," Sec",!
 | 
|---|
 | 139 |  .;Bold off (if outside tolerance level)
 | 
|---|
 | 140 |  .W:(PASTTOL) IOINORM
 | 
|---|
 | 141 |  ;End of list reached
 | 
|---|
 | 142 |  I ((LOOP'=4)!('PTRSUB)) D
 | 
|---|
 | 143 |  .W IORVON,"[End of list - total of ",COUNT,"]",IORVOFF,IOELEOL,!
 | 
|---|
 | 144 |  .F TMP=1:1:(4-LOOP) W IOELEOL,!
 | 
|---|
 | 145 |  ;Whitespace between display areas - use less if dashes where used
 | 
|---|
 | 146 |  ; in header
 | 
|---|
 | 147 |  W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,!
 | 
|---|
 | 148 |  W:((IOUON="")!(IOUOFF="")) IOELEOL,!
 | 
|---|
 | 149 |  Q
 | 
|---|