Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: HLCSFMN

HLCSFMN.m

Go to the documentation of this file.
  1. HLCSFMN ;ALB/JRP - INCOMING/OUTGOING FILER MONITOR;19-MAY-95 ;06/25/97 15:03
  1. ;;1.6;HEALTH LEVEL SEVEN;**15,30**;Oct 13, 1995
  1. MONITOR ;Main entry point
  1. ;Declare variables
  1. N INFILER,OUTFILER,INCOUNT,OUTCOUNT,INTOP,OUTTOP,STOP
  1. N X S X=0 X ^%ZOSF("RM")
  1. ; Turn off terminal line wrap
  1. S (INTOP,OUTTOP)=0
  1. ;Get screen attributes used
  1. D GETATTR^HLCSFMN1
  1. ;Initial clear screen
  1. W @IOF
  1. ;Continually display updated information until user chooses to quit
  1. F S STOP=0 D Q:(STOP)
  1. .;Get incoming filer information
  1. .S INCOUNT=$$GETINFO^HLCSFMN1("IN","INFILER")
  1. .;Set pointer to top of filer lists - if needed
  1. .S:('INTOP) INTOP=+$O(INFILER(""))
  1. .;Get outgoing filer information
  1. .S OUTCOUNT=$$GETINFO^HLCSFMN1("OUT","OUTFILER")
  1. .;Set pointer to top of filer lists - if needed
  1. .S:('OUTTOP) OUTTOP=+$O(OUTFILER(""))
  1. .;Display incoming filer information
  1. .D DISPLAY("IN","INFILER",INCOUNT,INTOP)
  1. .;Display outgoing filer information
  1. .D DISPLAY("OUT","OUTFILER",OUTCOUNT,OUTTOP)
  1. .;Prompt/execute action
  1. .S STOP=$$PROMPT^HLCSFMN0()
  1. ;Delete screen attributes
  1. S X=IOM X ^%ZOSF("RM")
  1. ; Turn terminal line wrap back on
  1. D KILL^%ZISS
  1. Q
  1. DISPLAY(FLRTYPE,ARRAY,COUNT,PTRTOP) ;Display filer information
  1. ;INPUT : FLRTYPE - Flag indicating type of filer header is for
  1. ; IN = Incoming filer (default)
  1. ; OUT = Outgoing filer
  1. ; ARRAY - Array containing filer information (full global ref)
  1. ; ARRAY(PtrSubEntry) = TaskNumber ^ Last$H ^ StopFlag ^
  1. ; Printable$H ^ ErrorMessage
  1. ; PtrSubEntry = Pointer to subentry in file 869.3
  1. ; TaskNumber = Task number of filer
  1. ; Last$H = Last known $H (field #.03 of subentry)
  1. ; StopFlag = Whether or not filer has been asked to stop
  1. ; (field #.02 of subentry)
  1. ; Yes - Filer has been asked to stop
  1. ; No - Filer has not been asked to stop
  1. ; Error - Task stopped due to error
  1. ; Printable$H = Last$H in printable format
  1. ; ErrorMessage = Printable error message - only used when
  1. ; task stopped due to error
  1. ; COUNT - Number of filers running
  1. ; Defaults to 0
  1. ; PTRTOP - Pointer to first filer in list to display
  1. ; Defaults to 0
  1. ; The following screen attributes
  1. ; IOINORM, IOINHI, IOUON, IOUOFF, IOBON, IOBOFF
  1. ; IORVON, IORVOFF, IOF, IOHOME, IOELEOL
  1. ;OUTPUT : None
  1. ;
  1. ;Check input
  1. S FLRTYPE=$G(FLRTYPE)
  1. S:(FLRTYPE'="OUT") FLRTYPE="IN"
  1. Q:($G(ARRAY)="")
  1. S COUNT=+$G(COUNT)
  1. S PTRTOP=+$G(PTRTOP)
  1. ;Declare variables
  1. N PTRSUB,LOOP,FLRINFO,LASTDH,ASK2STOP,TASKNUM,ERRMSG
  1. N DAY,TIME,HOUR,MIN,SEC,PASTTOL,BLANKS,FLRDH,TMP
  1. S BLANKS=$J(" ",20)
  1. ;Incoming filer is at top of screen
  1. I (FLRTYPE="IN") D
  1. .;Check for IOHOME & IOELEOL - used to keep from clearing screen
  1. .W:((IOHOME'="")&(IOELEOL'="")) IOHOME
  1. .;IOHOME & IOELEOL can't be used - clear screen
  1. .W:((IOHOME="")!(IOELEOL="")) @IOF
  1. .W IOELEOL,!
  1. ;Display filer information
  1. D HEADER^HLCSFMN0(FLRTYPE)
  1. I ('COUNT) D Q
  1. .;No filers running
  1. .W IOBON,IOINHI,"** No "
  1. .W $S(FLRTYPE="OUT":"outgoing",1:"incoming")
  1. .W " filers are running **",IOBOFF,IOINORM
  1. .W IOELEOL,!,IOELEOL,!,IOELEOL,!,IOELEOL,!
  1. .;Whitespace between display areas - use less if dashes where used
  1. .; in header
  1. .W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,!
  1. .W:((IOUON="")!(IOUOFF="")) IOELEOL,!
  1. ;Loop through filers (print no more than 4)
  1. ; Back up one entry in list so that pointer to top entry is
  1. ; first entry displayed
  1. S PTRSUB=+$O(@ARRAY@(PTRTOP),-1)
  1. F LOOP=1:1:4 S PTRSUB=+$O(@ARRAY@(PTRSUB)) Q:('PTRSUB) D
  1. .;Get info from array
  1. .S FLRINFO=@ARRAY@(PTRSUB)
  1. .;Get task number
  1. .S TASKNUM=$P(FLRINFO,"^",1)
  1. .;Get last known $H
  1. .S FLRDH=$P(FLRINFO,"^",2)
  1. .;Get asked to stop flag
  1. .S ASK2STOP=$P(FLRINFO,"^",3)
  1. .;Get printable last known $H
  1. .S LASTDH=$P(FLRINFO,"^",4)
  1. .;Get error message
  1. .S ERRMSG=$P(FLRINFO,"^",5)
  1. .;Calculate time difference
  1. .S TMP=$$DIFFDH^HLCSFMN1(FLRDH,$H)
  1. .S DAY=+TMP
  1. .S TIME=$P(TMP,"^",2)
  1. .S HOUR=$P(TIME,":",1)
  1. .S MIN=$P(TIME,":",2)
  1. .S SEC=$P(TIME,":",3)
  1. .;Last known $H not set yet
  1. .I (FLRDH="") D
  1. ..S LASTDH="--------- @ --:--:--"
  1. ..S DAY="-"
  1. ..S (HOUR,MIN,SEC)="--"
  1. .;Print information
  1. .; Print task number
  1. .W TASKNUM,$E(BLANKS,1,(15-$L(TASKNUM)+3))
  1. .;Print stop flag
  1. .W ASK2STOP,$E(BLANKS,1,(7-$L(ASK2STOP)+3))
  1. .;Problem with task - error message defined
  1. .I (ERRMSG'="") D Q
  1. ..;Not an error with task - don't use special attributes
  1. ..I (ASK2STOP'="Error") W ERRMSG,IOELEOL,! Q
  1. ..W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W IOINHI,IOBON,ERRMSG,IOBOFF,IOINORM,!
  1. .;Task still running - determine if time difference is within
  1. .; tolerance level
  1. .S PASTTOL=0
  1. .S:((DAY)!(HOUR)!(MIN>9)) PASTTOL=1
  1. .;Bold on (if outside tolerance level)
  1. .W:(PASTTOL) IOINHI
  1. .;Print last known $H
  1. .W LASTDH,$E(BLANKS,1,3)
  1. .;Print time lapse
  1. .W IOELEOL S DX=0,DY=$Y X ^%ZOSF("XY") W DAY," Day ",HOUR," Hr ",MIN," Min ",SEC," Sec",!
  1. .;Bold off (if outside tolerance level)
  1. .W:(PASTTOL) IOINORM
  1. ;End of list reached
  1. I ((LOOP'=4)!('PTRSUB)) D
  1. .W IORVON,"[End of list - total of ",COUNT,"]",IORVOFF,IOELEOL,!
  1. .F TMP=1:1:(4-LOOP) W IOELEOL,!
  1. ;Whitespace between display areas - use less if dashes where used
  1. ; in header
  1. W:((IOUON'="")&(IOUOFF'="")) IOELEOL,!,IOELEOL,!
  1. W:((IOUON="")!(IOUOFF="")) IOELEOL,!
  1. Q