VistA-FOIAVistA/r/HEALTH_LEVEL_SEVEN-HL/HLCSUTL2.m

136 lines
5.2 KiB
Mathematica

HLCSUTL2 ;ALB/JRP - COMMUNICATION SERVER UTILITIES;15-MAY-95 ;11/06/2000 06:39
;;1.6;HEALTH LEVEL SEVEN;**18,28,62**;Oct 13, 1995
CHK4STOP(PTRSUB,FLRTYPE,HLEXIT) ;DETERMINE IF FILER SHOULD STOP
;INPUT : PTRSUB - Pointer to incoming or outgoing filer subentry
; FLRTYPE - Indicates type of filer
; IN = Incoming (default)
; OUT = Outgoing
; HLEXIT - =0 (must be set by calling routine)
; HLEXIT("LASTCHK") - The last time the check was done. (Set by
; this routine for input to the next call to this routine
;OUTPUT : HLEXIT - Indicates whether Filer/task has been asked to stop
; 0 = no; 1 = yes
; HLEXIT("LASTCHK") - The last time the check was done.
;NOTES : This checks the STOP FILER field (#.02) of the INCOMING
; FILER TASK NUMBER and OUTGOING FILER TASK NUMBER multiples
; (fields 20 & 30) of the HL COMMUNICATION SERVER PARAMETER
; file (#869.3). If this field is set to YES, the filer
; has been asked to stop. After checking this, TaskMan
; will be asked if the task has been asked to stop [by
; calling $$S^%ZTLOAD].
; : FileMan is not used when determining if the STOP FILER field
; has been set to YES
Q:$$HDIFF^XLFDT($H,$G(HLEXIT("LASTCHK")),2)<60
;Check input
S PTRSUB=+$G(PTRSUB)
S FLRTYPE=$G(FLRTYPE)
;Declare variables
N PTRMAIN,NODE
S NODE=$S(FLRTYPE="OUT":3,1:2)
;Get entry in parameter file
S PTRMAIN=+$O(^HLCS(869.3,0))
I PTRMAIN D Q:HLEXIT
.;Lock/unlock zero node of multiple - force buffer update
.L +^HLCS(869.3,PTRMAIN,NODE,0):1
.L -^HLCS(869.3,PTRMAIN,NODE,0)
.;If subentry doesn't exist, filer won't die off
.I '$D(^HLCS(869.3,PTRMAIN,NODE,PTRSUB)) S HLEXIT=1 Q
.N NODE1
.;Get subentry zero node
.S NODE1=$G(^HLCS(869.3,PTRMAIN,NODE,PTRSUB,0))
.I NODE1="" S HLEXIT=1 Q
.;no record of task
.I $P(NODE1,"^")="" S HLEXIT=1 Q
.;STOP FILER field is piece 2
.I +$P(NODE1,"^",2) S HLEXIT=1
;Filer asked to stop
;Check if filer asked to stop via TaskMan
I +$$S^%ZTLOAD S HLEXIT=1
S HLEXIT("LASTCHK")=$H
Q
CNTFLR(FLRTYPE) ;RETURN NUMBER OF INCOMING/OUTGOING FILERS CURRENTLY RUNNING
;INPUT : FLRTYPE - Indicates type of filer
; IN = Incoming (default)
; OUT = Outgoing
;OUTPUT : X - Number of incoming/outgoing filers that are currently
; running. This will typically be the number of entries
; in the INCOMING FILER TASK NUMBER or OUTGOING FILER
; TASK NUMBER multiples (fields 20 & 30) of the HL
; COMMUNICATION SERVER PARAMETER file (#869.3). The
; tasks associated with the entries will be checked to
; determine if they have errored out - if so, they will
; not be included in the count.
; -1 - Error
;
;Check input
S FLRTYPE=$G(FLRTYPE)
;Declare variables
N PTRMAIN,NODE,COUNT,PTRSUB,ZTSK
S NODE=$S(FLRTYPE="OUT":3,1:2)
;Get entry in parameter file
S PTRMAIN=+$O(^HLCS(869.3,0))
Q:('PTRMAIN) -1
;Lock/unlock zero node of multiple - force buffer update
L +^HLCS(869.3,PTRMAIN,NODE,0):1
L -^HLCS(869.3,PTRMAIN,NODE,0)
;Count number of subentries
S PTRSUB=0
S COUNT=0
F S PTRSUB=+$O(^HLCS(869.3,PTRMAIN,NODE,PTRSUB)) Q:('PTRSUB) D
.;Get task number
.K ZTSK
.S ZTSK=+$G(^HLCS(869.3,PTRMAIN,NODE,PTRSUB,0))
.Q:('ZTSK)
.;Check status of task
.D STAT^%ZTLOAD
.;Task not defined, is inactive, or errored out
.Q:("12"'[ZTSK(1))
.;Increment count
.S COUNT=COUNT+1
Q COUNT
GETFLRS(FLRTYPE,ARRAY) ;RETURN LIST OF FILERS
;INPUT : FLRTYPE - Indicates type of filer
; IN = Incoming (default)
; OUT = Outgoing
; ARRAY - Array to return list of filers in (full global ref)
;OUTPUT : ARRAY will have the following format
; ARRAY(PtrSubEntry)=TaskNumber ^ LastKnown$H ^ Stop
; PtrSubEntry - Pointer to subentry in HL COMMUNICATION
; SERVER PARAMETER file (#869.3)
; TaskNumber - Task number of filer
; LastKnown$H - Value of LAST KNOWN $H (field #.03) for
; subentry
; Stop - Flag indicating if filer was asked to stop
; (field #.02 for subentry)
; 1 = YES
; 0 = NO
;NOTES : ARRAY will be initialized (KILLed) upon entry. If no
; entries are found in ARRAY() then no filers are running.
; : ARRAY() will not be defined on bad input
;
;Check input
Q:($G(ARRAY)="")
S FLRTYPE=$G(FLRTYPE)
;Declare variables
N PTRMAIN,NODE,PTRSUB,ZERONODE,TASKNUM,LASTDH,STOP
S NODE=$S(FLRTYPE="OUT":3,1:2)
;Initialize output array
K @ARRAY
;Get entry in parameter file
S PTRMAIN=+$O(^HLCS(869.3,0))
Q:('PTRMAIN)
;Lock/unlock zero node of multiple - force buffer update
L +^HLCS(869.3,PTRMAIN,NODE,0):1
L -^HLCS(869.3,PTRMAIN,NODE,0)
;Get list of filers
S PTRSUB=0
F S PTRSUB=+$O(^HLCS(869.3,PTRMAIN,NODE,PTRSUB)) Q:('PTRSUB) D
.;Get filer information
.S ZERONODE=$G(^HLCS(869.3,PTRMAIN,NODE,PTRSUB,0))
.S TASKNUM=+ZERONODE
.S STOP=+$P(ZERONODE,"^",2)
.S LASTDH=$P(ZERONODE,"^",3)
.;Put info into output array
.S @ARRAY@(PTRSUB)=TASKNUM_"^"_LASTDH_"^"_STOP
Q