cQZSTOP ; User Shutdown routine ;%ZSTOP; [ 08/22/01 12:08 PM ] G YZ ; SYSTEM ;Any code here is run just once when Cache stops. S QUIET=1 D Message("Data-M defined Shutdown Started") S $ZT="SYSTEME^"_$T(+0) S %nspc=$zu(5) ; remember current namespace D SWNS S NSPC=$ZU(5) ; switch to default Namespace ;Add entry to ^cLOG(boot,"STUSSD") S boot=$ZU(110) D DATE,TIME S ^|NSPC|cLOG(boot,"STUSSD",$P($H,","),$P($H,",",2))="SSD\"_DD_"."_DM_"."_DJ_"\"_TD_"\"_$H ; save variables of application jobs S PID="" F S PID=$O(^cJOB(PID)) Q:PID="" I PID'=$J,$ZU(67,0,PID)=2 D . ; If not your own job and Process is active . S NSPACE=$ZU(67,6,PID) Q:'$L(NSPACE) ; Namespace ? . ZN NSPACE ; switch to Namespace of process . ; Save variables of Job in global ^ERROR . S E=$G(^ERROR(0),1),^ERROR(0)=E+1 . S ^ERROR(E,0)=DT_"\"_TD_"\Job "_PID_" Dev "_$ZU(67,7,PID)_"\Stopped in "_$ZU(67,5,PID)_" by "_$T(+0)_" \"_$G(Q)_"\"_$G(%time)_";"_$H . S ^ERROR(E,.997)=$ZU(67,7,PID) Q:$ZU(67,0,PID)'=2 . S V=$ZU(88,0,PID),VN=0,VZ="\%time\GREF\IO\Q\" . F S V=$ZU(88,1,PID,V) Q:V="" D Q:$ZU(67,0,PID)'=2 .. S VN=VN+1,^ERROR(E,VN)=V,^(VN+.01)=$ZU(88,2,PID,V) I VZ[("\"_V_"\") S @V=$ZU(88,2,PID,V) . S $P(^ERROR(E,0),"\",5)=$G(Q),$P(^(0),"\",6)=$G(%time)_";"_$H . S ^ERROR(E,.998)=$G(GREF),^(.997)=^(.997)_"="_$G(IO) . F I=1:1:$L(VZ) S V=$P(VZ,"\",I) I $L(V) K @V . ZN NSPC ; switch back to 'default' namespace ; ZN %nspc ; switch back to where you came from S QUIET=1 D Message("Data-M defined Shutdown Ended") SYSTEMZ Q ; SYSTEME S QUIET=1 D Message("Data-M defined Shutdown Error"_$ZE) Q ; LOGIN ; Any code here is run when a user logs out of Cache. D MASTER:'$D(boot),KILL,SWNS,KILL LOGINZ Q ; JOB ; Any code here is run when a JOBbed process ends JOBZ Q ; CALLIN ; Any code here is run when a CALLIN process is ended CALLINZ ; YZ Q ; Message(Msg) ; n (QUIET,Msg) s $ZT="MessageE" i QUIET=0 w !,$ztime($p($h,",",2))_" "_Msg i $zu(9,"",Msg) MessageE q ; KILL K ^cJOB($J),^cPRINT(boot,$J),^cIPRINT(boot,$J),^DAMBA("%1",$I),^EABA("%1",$I),^cLOG(0,"MEMO",$I) Q ; MASTER S (boot,bootrvg)=$ZU(110),cs=$ZU(5) S master=$G(^cLOG(0,"SYSTEM","MASTER"),cs) S slave=$G(^cLOG(0,"SYSTEM","SLAVE"),cs) S workst=$D(^cLOG(0,"WORKSTATION",boot)) S client=$D(^cLOG(cs,"CLIENT",boot)) Q ; SWNS N I,NSPC ZN "%SYS" S NSPC=$G(^cLOG(0,"NAMESPACE",0)) I $ZU(90,10,NSPC) ZN NSPC D MASTER S io=$G(io,$$IOS) F I=io,0 S NSPC=$G(^cLOG(boot,"NAMESPACE",I)) Q:$L(NSPC) I $L(NSPC),$ZU(90,10,NSPC) ZN NSPC D MASTER S io=$G(io,$$IOS) SWNSZ Q ; IOS(I) N CFG,JOB,K,L,SW,SWP,ZDEV S SWP=0 IOSA S $ZT="ER^"_$T(+0) D MASTER S CFG=$$CONFIG,K="?" S I=$G(I,$I) S:I="" I=$I S JOB=$$ZJOB(I) K ^cJOB(JOB,boot,"job","TYPE"),^("IP"),^("NBN"),^("MAC"),^("IO"),^("UN") S SW=0,ZDEV=$I I $$BGJOB(JOB) D Q 1 . S ^cJOB(JOB,boot,"job","TYPE")="Backgr." . S ^cJOB(JOB,boot,"job","IP")="?" . S ^cJOB(JOB,boot,"job","NBN")="?" . S ^cJOB(JOB,boot,"job","MAC")="?" . S ^cJOB(JOB,boot,"job","IO")=1 . S ^cJOB(JOB,boot,"job","UN")="Backgr." S ^cJOB(JOB,boot,"job","TYPE")=$S(ZDEV["@":"LAT",ZDEV["~":"Telnet",1:"Direct") S (NBN,^cJOB(JOB,boot,"job","NBN"))="??" S (MAC,^cJOB(JOB,boot,"job","MAC"))="??" S (IP,^cJOB(JOB,boot,"job","IP"))=$$IP(I) I $L(IP),IP'="?",$D(^cQSYS(CFG,"FIXED","IP",IP)) S K=^(IP),(NBN,^cJOB(JOB,boot,"job","NBN"),MAC,^cJOB(JOB,boot,"job","MAC"))="?" G IOSY S (NBN,^cJOB(JOB,boot,"job","NBN"))=$$NBN(I) I $L(NBN),NBN'="?",$D(^cQSYS(CFG,"FIXED","NBN",NBN)) S K=^(NBN),(MAC,^cJOB(JOB,boot,"job","MAC"))="?" G IOSY S (MAC,^cJOB(JOB,boot,"job","MAC"))=$$MAC(I) I $L(MAC),MAC'="?",$D(^cQSYS(CFG,"FIXED","MAC",MAC)) S K=^(MAC) G IOSY I I=1 S K=1 G IOSY I I?1.N S K=I G IOSY IOSY S:K="" K=0 S ^cJOB(JOB,boot,"job","IO")=K I 'SWP,K="?" D S SWP=1 G IOSA . S NBN=$$NBN I NBN'="?",'$D(^cQSYS(0,"FIXED","NBN",NBN)) D .. S P=1000,O=P F S O=$O(^cQSYS(0,"DDB",O)) Q:O=""!(O-P>1) S P=O .. S P=P+1,^cQSYS(0,"DDB",P)="TELN,,"_NBN_",",^cQSYS(0,"FIXED","NBN",NBN)=P . I NBN="?" D .. S IP=$$IP I IP'="?",'$D(^cQSYS(0,"FIXED","IP",IP)) D ... S P=1000,O=P F S O=$O(^cQSYS(0,"DDB",O)) Q:O=""!(O-P>1) S P=O ... S P=P+1,^cQSYS(0,"DDB",P)="TELN,"_IP_",,",^cQSYS(0,"FIXED","IP",IP)=P IOSZ Q K ; IP(I) N DDB,JOB,K,R,%v D MASTER S I=$G(I,$I) S:I="" I=$I S JOB=$$ZJOB(I) I JOB,$D(^cJOB(JOB,boot,"job","IP")),^("IP")'="??" Q ^("IP") S K=$P($P($I,":"),"|",3) I $L(K),K?3(1.3N1".")1.3N Q K Q "?" ; NBN(I) N DDB,JOB,K,R,%v D MASTER S I=$G(I,$I) S:I="" I=$I S JOB=$$ZJOB(I) I JOB,$D(^cJOB(JOB,boot,"job","NBN")),^("NBN")'="??" Q ^("NBN") S K=$P($P($I,":"),"|",3) I $L(K),K'?3(1.3N1".")1.3N Q $$TOUPPER($P(K,".")) Q "?" ; MAC(I) N NBN,IP,JOB,K,R,%v D MASTER S I=$G(I,$I) S:I="" I=$I S JOB=$$ZJOB(I) I JOB,$D(^cJOB(JOB,boot,"job","MAC")),^("MAC")'="??" Q ^("MAC") Q "?" ; QT S QT=$G(QT,""),QTU=$S($L(QT):$F("FDE",QT),1:1) D MASTER Q ; ER S %=$ZE I $ZV'["MSM" S %ZTRAP="ER^"_$T(+0) I $D(^$R("cA400")) D ^cA400 I $ZV["MSM" ZQ I $ZV'["MSM" ZQ 1 I $ZT'="" G @$ZT Q ; ;Some modules from cQ9 ; CONFIG() ; Q 0 ; TOUPPER(X) ;Convert string to uppercase Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") ; ;Some modules from cQ14 ; ZJOB(I) N J S J=$J ZJOBZ Q J ; BGJOB(J) ;Background job ?? Q 0 ; ; DATE S %H=1+$H,%J=%H\1461,%R=%H#1461,DJ=%J*4+1841+(%R\365),DD=%R#365,DM=1 I %R=1460 S DD=365,DJ=DJ-1 F %J=31,(%R>1154)+28,31,30,31,30,31,31,30,31,30 Q:%J'