XPDCPU ;SFISC/RWF,RSD - Code that update each cpu ;09/09/96 08:01 [ 04/02/2003 8:29 AM ]
;;8.0;KERNEL;**1002,1003,1004,1005,1007**;APR 1, 2003
;;8.0;KERNEL;**41,44**;JUL 03, 1995
N DIC,X,XPDA
S DIC("S")="I $P(^(0),U,9)=2,$D(^XPD(9.7,""ASP"",Y,1,Y)),$D(^XTMP(""XPDI"",Y))"
D EN1 Q:'XPDA
S X=$O(^XPD(9.7,XPDA,"VOL","B",^%ZOSF("VOL"),0)) Q:'X
D EN(XPDA,X)
Q
;
MOVE ;move routines to other CPU
N DIC,DIR,DIRUT,X,XPDA,XPDJ,Y
S DIC("S")="I $P(^(0),U,9)=3"
D EN1 Q:'XPDA
S DIR(0)="Y",DIR("A")="Want to move the Routine for this Package to another CPU",DIR("B")="YES",DIR("?")="YES means you want to update the routines on another CPU"
D ^DIR Q:'Y!$D(DIRUT)
K ^XTMP("XPDR",XPDA)
S ^XTMP("XPDR",0)=DT_U_DT,XPDJ=""
F S XPDJ=$O(^XPD(9.7,XPDA,"RTN","B",XPDJ)) Q:XPDJ="" D
.Q:XPDJ="XPDCPU"
.N DIF,XCNP,%N
.S DIF="^XTMP(""XPDR"",XPDA,""RTN"",XPDJ,",XCNP=0,X=XPDJ
.X ^%ZOSF("LOAD")
I $D(^XTMP("XPDR",XPDA)) W !!,"Run INSTALL^XPDCPU on the other CPU to install the Routines.",!
Q
INSTALL ;install routines
N DIC,DIR,DIRUT,X,XPDA,XPDJ,Y
S DIC("S")="I $P(^(0),U,9)=3,$D(^XTMP(""XPDR"",Y))"
D EN1 Q:'XPDA
S DIR(0)="Y",DIR("A")="Want to install the Routine for this Package",DIR("B")="YES",DIR("?")="YES means you want to install the routines on this CPU"
D ^DIR Q:'Y!$D(DIRUT)
S XPDJ=""
F S XPDJ=$O(^XTMP("XPDR",XPDA,"RTN",XPDJ)) Q:XPDJ="" D
.N %,DIE,XCM,XCN,XCS
.S DIE="^XTMP(""XPDR"",XPDA,""RTN"",XPDJ,",XCN=0,X=XPDJ
.X ^%ZOSF("SAVE")
W !!,"Done",!!
Q
;
EN(XPDA,XPDVDA) ;XPDA=ien of INSTALL file, XPDVDA=VOLUME SET ien
L +^XPD(9.7,XPDA,"VOL",XPDVDA):2 E W:IO]"" !,"Can't Lock global, another XPDCPU must be running",! Q
N Y,%,XPDNM
S Y=0,ZTREQ="@"
F S Y=$O(^XPD(9.7,"ASP",XPDA,Y)) Q:'Y S %=$O(^(Y,0)) D:% Q:$D(XPDABORT)
.N XPDA,Y
.S XPDA=%,XPDNM=$P($G(^XPD(9.7,XPDA,0)),U) D EN2
Q
EN1 ;ask for Install
N Y S XPDA=0
I $D(DUZ)_$D(DUZ(0))_$D(U)[0 D DT^DICRW
S DIC(0)="QEAMZ",DIC="^XPD(9.7,"
D ^DIC K DIC Q:Y'>0
S XPDA=+Y
Q
EN2 N X,XPD,XPDBLD,XPDI,ZTUCI,ZTCPU,ZTRTN,ZTDTH,ZTIO,ZTDESC
;must have XTMP & entry in file 9.7
Q:'$D(^XTMP("XPDI",XPDA))!'$D(^XPD(9.7,XPDA,0))
;hang 1 hr or until VOLUME multiple is set, XPDIJ sets VOL multiple
F X=0:1:60 Q:$D(^XPD(9.7,XPDA,"VOL",+$G(XPDVDA),0)) H 60 W:IO]"" "."
I X=60 W:IO]"" !!,"Package ",$P(^XPD(9.7,XPDA,0),U)," never installed",! Q
S XPDBLD=$O(^XTMP("XPDI",XPDA,"BLD",0))
D FILE(2),UPDT
W:IO]"" !,"Loading Routines"
I $D(^XTMP("XPDI",XPDA,"RTN","XPDCPU")) S X=$$RTNUP^XPDUTL("XPDCPU",2)
;make sure routines have been loaded
F X=0:1:240 Q:$P($G(^XPD(9.7,XPDA,1)),U,2) H 15 W:IO]"" "." D UPDT
D UPDT,RTN^XPDIJ(XPDA),UPDT
W:IO]"" !!,"Recompiling Template routines"
F XPD="DIKZ","DIEZ","DIPZ" D
.S XPDI="" Q:'$$CHCK
.F S XPDI=$O(^XTMP("XPDI",XPDA,XPD,XPDI)) Q:'XPDI S X=^(XPDI) D:X]"" @("EN2^"_XPD_"("""_XPDI_""","""","""_X_""")"),UPDT
D UPDT,FILE(1)
Q
CHCK() ;check if the component is installed, return 1 if installed, 0 to abort
N XPDC,Y
I XPD="DIKZ" S XPDC="S Y=$G(^(+$O(^XPD(9.7,XPDA,4,""A""),-1),0))"
E S Y=$S(XPD="DIPZ":.4,1:.402),XPDC="S Y=$G(^XPD(9.7,XPDA,""KRN"","_Y_",0))"
F X XPDC Q:'Y!$P(Y,U,2) H 60 D UPDT W:IO]"" "." I $D(ZTMQUE),$$STOP^%ZTLOAD S Y=0 Q
Q ''Y
FILE(XPDF) ;set NOW into the VOLUME SET multiple, XPDF=field number
N XPD
S XPD(9.703,XPDVDA_","_XPDA_",",XPDF)=$$NOW^XLFDT
D FILE^DIE("","XPD")
Q
UPDT ;update $H into VOLUME SET multiple, field 4
S ^XPD(9.7,XPDA,"VOL",XPDVDA,1)=$H
Q
XPDCPU ;SFISC/RWF,RSD - Code that update each cpu ;09/09/96 08:01 [ 04/02/2003 8:29 AM ]
+1 ;;8.0;KERNEL;**1002,1003,1004,1005,1007**;APR 1, 2003
+2 ;;8.0;KERNEL;**41,44**;JUL 03, 1995
+3 NEW DIC,X,XPDA
+4 SET DIC("S")="I $P(^(0),U,9)=2,$D(^XPD(9.7,""ASP"",Y,1,Y)),$D(^XTMP(""XPDI"",Y))"
+5 DO EN1
IF 'XPDA
QUIT
+6 SET X=$ORDER(^XPD(9.7,XPDA,"VOL","B",^%ZOSF("VOL"),0))
IF 'X
QUIT
+7 DO EN(XPDA,X)
+8 QUIT
+9 ;
MOVE ;move routines to other CPU
+1 NEW DIC,DIR,DIRUT,X,XPDA,XPDJ,Y
+2 SET DIC("S")="I $P(^(0),U,9)=3"
+3 DO EN1
IF 'XPDA
QUIT
+4 SET DIR(0)="Y"
SET DIR("A")="Want to move the Routine for this Package to another CPU"
SET DIR("B")="YES"
SET DIR("?")="YES means you want to update the routines on another CPU"
+5 DO ^DIR
IF 'Y!$DATA(DIRUT)
QUIT
+6 KILL ^XTMP("XPDR",XPDA)
+7 SET ^XTMP("XPDR",0)=DT_U_DT
SET XPDJ=""
+8 FOR
SET XPDJ=$ORDER(^XPD(9.7,XPDA,"RTN","B",XPDJ))
IF XPDJ=""
QUIT
Begin DoDot:1
+9 IF XPDJ="XPDCPU"
QUIT
+10 NEW DIF,XCNP,%N
+11 SET DIF="^XTMP(""XPDR"",XPDA,""RTN"",XPDJ,"
SET XCNP=0
SET X=XPDJ
+12 XECUTE ^%ZOSF("LOAD")
End DoDot:1
+13 IF $DATA(^XTMP("XPDR",XPDA))
WRITE !!,"Run INSTALL^XPDCPU on the other CPU to install the Routines.",!
+14 QUIT
INSTALL ;install routines
+1 NEW DIC,DIR,DIRUT,X,XPDA,XPDJ,Y
+2 SET DIC("S")="I $P(^(0),U,9)=3,$D(^XTMP(""XPDR"",Y))"
+3 DO EN1
IF 'XPDA
QUIT
+4 SET DIR(0)="Y"
SET DIR("A")="Want to install the Routine for this Package"
SET DIR("B")="YES"
SET DIR("?")="YES means you want to install the routines on this CPU"
+5 DO ^DIR
IF 'Y!$DATA(DIRUT)
QUIT
+6 SET XPDJ=""
+7 FOR
SET XPDJ=$ORDER(^XTMP("XPDR",XPDA,"RTN",XPDJ))
IF XPDJ=""
QUIT
Begin DoDot:1
+8 NEW %,DIE,XCM,XCN,XCS
+9 SET DIE="^XTMP(""XPDR"",XPDA,""RTN"",XPDJ,"
SET XCN=0
SET X=XPDJ
+10 XECUTE ^%ZOSF("SAVE")
End DoDot:1
+11 WRITE !!,"Done",!!
+12 QUIT
+13 ;
EN(XPDA,XPDVDA) ;XPDA=ien of INSTALL file, XPDVDA=VOLUME SET ien
+1 LOCK +^XPD(9.7,XPDA,"VOL",XPDVDA):2
IF '$TEST
IF IO]""
WRITE !,"Can't Lock global, another XPDCPU must be running",!
QUIT
+2 NEW Y,%,XPDNM
+3 SET Y=0
SET ZTREQ="@"
+4 FOR
SET Y=$ORDER(^XPD(9.7,"ASP",XPDA,Y))
IF 'Y
QUIT
SET %=$ORDER(^(Y,0))
IF %
Begin DoDot:1
+5 NEW XPDA,Y
+6 SET XPDA=%
SET XPDNM=$PIECE($GET(^XPD(9.7,XPDA,0)),U)
DO EN2
End DoDot:1
IF $DATA(XPDABORT)
QUIT
+7 QUIT
EN1 ;ask for Install
+1 NEW Y
SET XPDA=0
+2 IF $DATA(DUZ)_$DATA(DUZ(0))_$DATA(U)[0
DO DT^DICRW
+3 SET DIC(0)="QEAMZ"
SET DIC="^XPD(9.7,"
+4 DO ^DIC
KILL DIC
IF Y'>0
QUIT
+5 SET XPDA=+Y
+6 QUIT
EN2 NEW X,XPD,XPDBLD,XPDI,ZTUCI,ZTCPU,ZTRTN,ZTDTH,ZTIO,ZTDESC
+1 ;must have XTMP & entry in file 9.7
+2 IF '$DATA(^XTMP("XPDI",XPDA))!'$DATA(^XPD(9.7,XPDA,0))
QUIT
+3 ;hang 1 hr or until VOLUME multiple is set, XPDIJ sets VOL multiple
+4 FOR X=0:1:60
IF $DATA(^XPD(9.7,XPDA,"VOL",+$GET(XPDVDA),0))
QUIT
HANG 60
IF IO]""
WRITE "."
+5 IF X=60
IF IO]""
WRITE !!,"Package ",$PIECE(^XPD(9.7,XPDA,0),U)," never installed",!
QUIT
+6 SET XPDBLD=$ORDER(^XTMP("XPDI",XPDA,"BLD",0))
+7 DO FILE(2)
DO UPDT
+8 IF IO]""
WRITE !,"Loading Routines"
+9 IF $DATA(^XTMP("XPDI",XPDA,"RTN","XPDCPU"))
SET X=$$RTNUP^XPDUTL("XPDCPU",2)
+10 ;make sure routines have been loaded
+11 FOR X=0:1:240
IF $PIECE($GET(^XPD(9.7,XPDA,1)),U,2)
QUIT
HANG 15
IF IO]""
WRITE "."
DO UPDT
+12 DO UPDT
DO RTN^XPDIJ(XPDA)
DO UPDT
+13 IF IO]""
WRITE !!,"Recompiling Template routines"
+14 FOR XPD="DIKZ","DIEZ","DIPZ"
Begin DoDot:1
+15 SET XPDI=""
IF '$$CHCK
QUIT
+16 FOR
SET XPDI=$ORDER(^XTMP("XPDI",XPDA,XPD,XPDI))
IF 'XPDI
QUIT
SET X=^(XPDI)
IF X]""
DO @("EN2^"_XPD_"("""_XPDI_""","""","""_X_""")")
DO UPDT
End DoDot:1
+17 DO UPDT
DO FILE(1)
+18 QUIT
CHCK() ;check if the component is installed, return 1 if installed, 0 to abort
+1 NEW XPDC,Y
+2 IF XPD="DIKZ"
SET XPDC="S Y=$G(^(+$O(^XPD(9.7,XPDA,4,""A""),-1),0))"
+3 IF '$TEST
SET Y=$SELECT(XPD="DIPZ":.4,1:.402)
SET XPDC="S Y=$G(^XPD(9.7,XPDA,""KRN"","_Y_",0))"
+4 FOR
XECUTE XPDC
IF 'Y!$PIECE(Y,U,2)
QUIT
HANG 60
DO UPDT
IF IO]""
WRITE "."
IF $DATA(ZTMQUE)
IF $$STOP^%ZTLOAD
SET Y=0
QUIT
+5 QUIT ''Y
FILE(XPDF) ;set NOW into the VOLUME SET multiple, XPDF=field number
+1 NEW XPD
+2 SET XPD(9.703,XPDVDA_","_XPDA_",",XPDF)=$$NOW^XLFDT
+3 DO FILE^DIE("","XPD")
+4 QUIT
UPDT ;update $H into VOLUME SET multiple, field 4
+1 SET ^XPD(9.7,XPDA,"VOL",XPDVDA,1)=$HOROLOG
+2 QUIT