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

ZTMS.m

Go to the documentation of this file.
  1. %ZTMS ;SEA/RDS-TaskMan: Submanager, (Entry & Trap) ;09/25/08 16:07
  1. ;;8.0;KERNEL;**2,18,24,36,67,94,118,127,136,162,275,446**;Jul 10, 1995;Build 44
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. START ;Bottom level of submanager
  1. S $ETRAP="D ERROR^%ZTMS HALT"
  1. D NOW^%DTC S ZTQUEUED=0,U="^",DT=X
  1. D KMPR("$STRT ZTMS$")
  1. D PARAMS G:$D(ZTOUT) QUIT
  1. I ZTPFLG("XUSCNT") D COUNT^XUSCNT(1)
  1. D SETNM^%ZOSV("Sub "_$J)
  1. S ^%ZTSCH("SUB",ZTPFLG("HOME"),0)=0
  1. I $D(^%ZTSCH("STOP","SUB",ZTPAIR)) G QUIT
  1. I ZTPFLG("XUSCNT") D SETLOCK^XUSCNT($NA(^%ZTSCH("SUBLK",ZTPFLG("HOME"),$J)))
  1. G SUBMGR^%ZTMS1
  1. ;
  1. KMPR(TAG) ;Call KMPR to log data
  1. N Y
  1. I +$G(^%ZTSCH("LOGRSRC")) S Y="" X $G(^%ZOSF("UCI")) I Y[^%ZOSF("PROD") D LOGRSRC^%ZOSV(TAG)
  1. Q
  1. QUIT ;Submanager exit
  1. D KMPR("$STOP ZTMS$")
  1. I ZTPFLG("XUSCNT") D COUNT^XUSCNT(-1)
  1. Q
  1. PARAMS ;
  1. ;START--lookup parameters
  1. S U="^"
  1. X ^%ZOSF("PRIINQ") S %ZTMS("PRIO")=Y ;Get starting priority
  1. D GETENV^%ZOSV
  1. S ZTCPU=$P(Y,U,2),ZTNODE=$P(Y,U,3),ZTPAIR=$P(Y,U,4),ZTUCI=$P(Y,U)_$S(ZTCPU]"":","_ZTCPU,1:"") S:ZTPAIR[":" ZTNODE=$P(ZTPAIR,":",2)
  1. S ZTPFLG("RT")=0,ZTPFLG("MIN")=1,ZTYPE="",ZTPFLG("ZTREQ")=0
  1. S ZTPN=$O(^%ZIS(14.7,"B",ZTPAIR,0)),ZTPFLG("ZTPN")=ZTPN
  1. I ZTPN>0 S %=$G(^%ZIS(14.7,ZTPN,0)) D
  1. . S ZTPFLG("RT")=+$P(%,U,6),ZTYPE=$P(%,U,9) S:$P(%,U,12)>1 ZTPFLG("MIN")=$P(%,U,12)
  1. . S ZTPFLG("HOME")=$S($P(%,U,13):$P(^%ZIS(14.7,+$P(%,U,13),0),U),1:ZTPAIR)
  1. . S ZTPFLG("ZTREQ")=+$G(^%ZIS(14.7,ZTPN,3))
  1. . Q
  1. S ZTPFLG("XUSCNT")=0 I ^%ZOSF("OS")["GT.M" S ZTPFLG("XUSCNT")=$L($T(^XUSCNT))
  1. S (ZTPFLG("LOCKTM"),ZTLKTM)=+$G(^DD("DILOCKTM"),0) ;p446
  1. S ZTPFLG("BalLimit")=$G(^%ZTSCH("BALLIMIT"),100) ;p446
  1. S X=0 I $L($T(APFIND^XUSAP)) S X=+$$APFIND^XUSAP("TASKMAN,PROXY USER") ;p446
  1. S ZTPFLG("USER")=$S(X>0:X,1:.5) ;p446
  1. K ZTMLOG ;Set to log msg about locks
  1. I "FO"[ZTYPE S ZTOUT=1 Q ;SM only run on C,P,G types
  1. Q
  1. ERROR ;START--trap
  1. I $S(^%ZOSF("OS")["GT.M":$ZS["STACKO",1:$ZE["STKOVR"!($ZE["STACK")) S $ET="Q:$ST>"_($ST-8)_" D ERR2^%ZTMS" Q
  1. ;set backup trap, prepare to handle error.
  1. ERR2 S $ETRAP="D ERROR2^%ZTMS0 HALT"
  1. S %ZTERLGR=$$LGR^%ZOSV
  1. S %ZTME=$$EC^%ZOSV,%ZTMEH=$H
  1. S %ZTMETSK=$S($D(%ZTTV)#2:$P(%ZTTV,"^",4),$G(ZTSK)>0:ZTSK,1:0)
  1. I %ZTMETSK L ^%ZTSK(%ZTMETSK):99 ;Unlock all other locks
  1. I $G(IO)]"" L +^%ZTSCH("DEV",IO):99 ;Keep other tasks from IO device.
  1. ;Check if to record error
  1. I '$$SCREEN^%ZTER(%ZTME) D
  1. . D ^%ZTER ;Kernel error file
  1. . ;log error and context in TaskMan Error file
  1. . L +^%ZTSCH("ER"):99 H 1 S %ZTMEH=$H
  1. . S ^%ZTSCH("ER",+%ZTMEH,$P(%ZTMEH,",",2))=%ZTME
  1. . D XREF^%ZTMS0
  1. . S ^%ZTSCH("ER",+%ZTMEH,$P(%ZTMEH,",",2),1)=ZTERROX1
  1. . L -^%ZTSCH("ER")
  1. . Q
  1. ;
  1. I $D(ZTDEVOK) S $P(^%ZTSCH("IO"),U,2)=ZTDEVOK ;Have others skip dev.
  1. ;Update Task file entry
  1. I $G(ZTQUEUED),%ZTMETSK,$D(^%ZTSK(%ZTMETSK)) D STATUS^%ZTMS0
  1. ;
  1. I ZTPFLG("XUSCNT") D COUNT^XUSCNT(-1)
  1. I ZTQUEUED>.9,%ZTMETSK>0,$G(DUZ)>.9,$D(^DD(8992,.01,0)) D
  1. . S XQA(DUZ)="",XQAMSG="Your task #"_%ZTMETSK_" stopped because of an error",XQADATA=%ZTMETSK,XQAROU="XQA^XUTMUTL"
  1. . D SETUP^XQALERT Q
  1. ;
  1. CLEAN ;clean up global data related to this process
  1. I $G(ZTQUEUED)>.9,'$D(^%ZTSCH("TASK",ZTQUEUED,"P")) K ^%ZTSCH("TASK",ZTQUEUED)
  1. K ^TMP($J),^UTILITY($J),^XUTL("XQ",$J)
  1. I '$G(ZTQUEUED) D SUB^%ZTMS1(-1)
  1. I $D(ZTDEVN)#2,$D(%ZTIO)#2,%ZTIO]"" D DEVLK^%ZTMS1(-1,%ZTIO)
  1. I $D(ZTDEVOK)#2 D DEVBAD^%ZTMS0
  1. I $G(ZTSYNCFL)]"" S X=$$SYNCFLG^%ZTMS2("S",ZTSYNCFL,"","Stopped because of an error")
  1. ;
  1. CLOSE ;close i/o device after error
  1. D ERCLOZ^%ZTMS0
  1. I $G(IO)]"" C IO H 5 ;In case of a port problem give it time to reset.
  1. ;
  1. D KMPR("$STOP ZTMS$")
  1. I ZTQUEUED=.5,%ZTMETSK>0,$P($G(^%ZTSK(%ZTMETSK,.12)),"^")<5 D ;Only try 5 times
  1. . S $P(^(.12),"^")=^%ZTSK(%ZTMETSK,.12)+1
  1. . S ^%ZTSCH($$NEWH^%ZTMS2($H,600),%ZTMETSK)=""
  1. HALT ;Start a new process to continue
  1. ;
  1. GTM ;Special entry point for GT.M
  1. S @("$ZINTERRUPT=""I $$JOBEXAM^ZU($ZPOSITION)""")
  1. G START