- XPDIJ ;SFISC/RSD - Install Job ;08/14/2008
- ;;8.0;KERNEL;**2,21,28,41,44,68,81,95,108,124,229,275,506,672,796**;Jul 10, 1995;Build 4
- ;Per VHA Directive 2004-038, this routine should not be modified.
- EN ;install all packages
- ;XPDA=ien of first package
- ;this is needed to restore XPDIJ1
- D LNRF("XPDUTL") ;p275 SAVE calls RTNLOG^XPDUTL
- D LNRF("XPDIJ1") ;See that XPDIJ1 is loaded befor it is called
- N IEN,XPDI,XPD0,XPDSET,XPDABORT,XPDMENU,XPDQUIT,XPDVOL,X,Y,ZTRTN,ZTDTH,ZTIO,ZTDESC,ZTSK
- M X=DUZ N DUZ M DUZ=X S DUZ(0)="@" ;See that install has full FM priv.
- I $$NEWERR^%ZTER N $ETRAP,$ESTACK S $ETRAP="D ERR^XPDIJ"
- E S X="ERR^XPDIJ",@^%ZOSF("TRAP")
- ;check that Install entry exists, set status to "Start of Install"
- Q:'$D(^XPD(9.7,+$G(XPDA),0)) S XPD0=^(0),$P(^(0),U,9)=2
- D INIT^XPDID
- ;See if need to Inhibit Logons
- I $$ANSWER^XPDIQ("XPI1") D INHIBIT^XPDIJ1("Y")
- ;disable options & protocols for setname, XPDSET=1/0^setname^out of order msg.
- S Y=$P(XPD0,U,8),XPDSET=+Y_U_$E(Y,2,99)_U_$S($L(Y):$P($G(^XTMP("XQOO",$E(Y,2,99),0)),U),1:"")
- ;hang the number of seconds given in 0;10
- I XPDSET D OFF^XQOO1($P(XPDSET,U,2)) I $P(XPD0,U,10) H ($P(XPD0,U,10)*60)
- ;check that Install still exists, wasn't unloaded p672
- I '$D(^XPD(9.7,XPDA,0))!'$D(^XTMP("XPDI",XPDA)) D EXIT^XPDID(" Build NOT installed, Transport Global missing!!!!") Q
- S Y=0
- ;XPDABORT can be set in pre or post install to abort install
- F S Y=$O(^XPD(9.7,"ASP",XPDA,Y)) Q:'Y S %=$O(^(Y,0)) D:% Q:$D(XPDABORT)
- .N XPD,XPDA,XPDNM,XPDV,XPDV0,XPDVOL,XPDX,XPDY,Y
- .;Now do the Install
- .S XPDA=%,XPDNM=$P($G(^XPD(9.7,XPDA,0)),U) D IN^XPDIJ1 Q:$D(XPDABORT)
- ;
- ;Now do Master Build Post INIT.
- I '$D(XPDABORT),$D(XPDT("MASTER")) D
- .N XPDBLD,XPDGREF
- .S XPDBLD=$O(^XTMP("XPDI",XPDA,"BLD",0)),XPDGREF="^XTMP(""XPDI"","_XPDA_",""TEMP"")"
- .D POST^XPDIJ1
- ;ZTREQ tells taskman to delete task
- I $G(ZTSK) S ZTREQ="@" D
- .;remove task # from Install File
- .N XPD S XPD(9.7,XPDA_",",5)="@"
- .D FILE^DIE("","XPD")
- ;quit if install was aborted
- I $D(XPDABORT) D EXIT^XPDID("Install Aborted!!"),^%ZISC Q
- ;put option back in order
- I $P(XPDSET,U,2)]"" D ON^XQOO1($P(XPDSET,U,2)) K ^XTMP("XQOO",$P(XPDSET,U,2))
- ;check if menu rebuild is wanted (only if option has been added to any installs)
- ;XPDMENU is used to check that it is only done once
- S (Y,XPDMENU)=0
- F S Y=$O(^XPD(9.7,"ASP",XPDA,Y)) Q:'Y S %=$O(^(Y,0)) D:% Q:XPDMENU
- .N XPDA,Y
- .S XPDA=%
- .I $$ANSWER^XPDIQ("XPO1") D BMES^XPDUTL(" Call MENU rebuild"),KIDS^XQ81 S XPDMENU=1
- .;There should be no reason to check other CPUs anymore, patch 496
- .Q
- .;check if need to queue menu rebuild on other CPUs
- .D:$O(^XPD(9.7,XPDA,"VOL",0))
- ..N XPDU,XPDY,XPDV,XPDV0,ZTUCI,ZTCPU
- ..X ^%ZOSF("UCI") S XPDU=$P(Y,","),XPDY=$P(Y,",",2),XPDV=0
- ..;loop thru VOLUMES SET and don't do current volume set
- ..F S XPDV=$O(^XPD(9.7,XPDA,"VOL",XPDV)) Q:'XPDV S XPDV0=$P(^(XPDV,0),U) D:XPDV0'=XPDY
- ...S ZTUCI=XPDU,ZTDTH=$H,ZTIO="",ZTDESC="Install Menu Rebuild",ZTCPU=XPDV0,ZTRTN="KIDS^XQ81" D ^%ZTLOAD
- ;
- ;See if need to reset inhibit logons
- I $$ANSWER^XPDIQ("XPI1") D INHIBIT^XPDIJ1("N")
- ;
- ;clean up globals
- S Y=0
- F S Y=$O(^XPD(9.7,"ASP",XPDA,Y)) Q:'Y S XPDI=$O(^(Y,0)) D:XPDI
- . N %,Y,XPD,X
- . ;See if need to delete Env,Pre,Post routines.
- . S %=$O(^XTMP("XPDI",XPDI,"BLD",0)),XPD=$G(^XTMP("XPDI",XPDI,"BLD",%,"INID"))
- . I '$$GET^XUPARAM("XPD NO_EPP_DELETE") F %=1:1:3 I $P(XPD,U,%)="y" D
- . . S X=^XTMP("XPDI",XPDI,$P("PRE^INIT^INI",U,%)) S:X[U X=$P(X,U,2) X:X]"" ^%ZOSF("DEL")
- . ;kill transport global
- . K ^XTMP("XPDI",XPDI)
- . ;update the status field
- . S XPD(9.7,XPDI_",",.02)=3
- . D FILE^DIE("","XPD")
- D EXIT^XPDID("Install Completed"),^%ZISC
- Q
- ;
- SAVE(X) ;restore routine X
- N %,DIE,XCM,XCN,XCS
- S DIE="^XTMP(""XPDI"",XPDA,""RTN"",X,",XCN=0
- X ^%ZOSF("SAVE") D RTNLOG^XPDUTL(X)
- Q
- RTN(XPDA) ;restore all routines for package XPDA
- ;^XPD("XPDI",XPDA,"RTN",routine name)=0-install, 1-delete, 2-skip^checksum
- Q:$G(XPDA)=""
- N X,XPDI,XPDJ S XPDI=""
- F S XPDI=$O(^XTMP("XPDI",XPDA,"RTN",XPDI)) Q:XPDI="" S XPDJ=^(XPDI) D
- .;if we are doing VT graphic display, set counter
- .I $D(XPDIDVT) S XPDIDCNT=XPDIDCNT+1 D:'(XPDIDCNT#XPDIDMOD) UPDATE^XPDID(XPDIDCNT)
- .I 'XPDJ D SAVE(XPDI) Q
- .;set checksum to null, since routine wasn't loaded
- .I $P(XPDJ,U,2) S $P(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"KRN",9.8,"NM",$P(XPDJ,U,2),0),U,4)=""
- .I $P(XPDJ,U)=1 S X=XPDI X ^%ZOSF("DEL")
- ;if graphic display, update full count
- I $D(XPDIDVT) D UPDATE^XPDID(XPDIDCNT)
- Q
- ;
- VOLERR(V,F) ;volume set not updated,V=volume set, F=flag
- N XQA,XQAMSG,XPDMES
- S XPDMES(1)=" ",XPDMES(2)=" ** Job on VOLUME SET "_V_$S(F:" never started **",1:" has been idle for an hour.")
- S XPDMES(3)=" ** "_V_" has NOT been updated! **"
- S XQA(DUZ)="",XQAMSG="VOLUME SET "_V_" NOT updated for Install "_$E($P($G(^XPD(9.7,+$G(XPDA),0)),"^"),1,30)
- D MES^XPDUTL(.XPDMES),SETUP^XQALERT
- Q
- ;come here on error, record error in Install file and cleanup var.
- ERR N XPDERROR,XQA,XQAMSG
- S XPDERROR=$$EC^%ZOSV
- ;record error
- D ^%ZTER
- ;reset primary device back to home device
- I $G(IO(0))]"" U IO(0) ;p796
- ;write message, reset terminal
- D BMES^XPDUTL(XPDERROR),EXIT^XPDID()
- S XQA(DUZ)="",XQAMSG="Install "_$E($P($G(^XPD(9.7,+$G(XPDA),0)),"^"),1,30)_" has encountered an Error."
- D SETUP^XQALERT G UNWIND^%ZTER
- ;
- LNRF(RN) ;Load needed routines first
- I $D(^XTMP("XPDI",XPDA,"RTN",RN)) D
- .N X
- .D SAVE(RN)
- .S XCN=$$RTNUP^XPDUTL(RN,2)
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXPDIJ 5549 printed Feb 18, 2025@23:30:03 Page 2
- XPDIJ ;SFISC/RSD - Install Job ;08/14/2008
- +1 ;;8.0;KERNEL;**2,21,28,41,44,68,81,95,108,124,229,275,506,672,796**;Jul 10, 1995;Build 4
- +2 ;Per VHA Directive 2004-038, this routine should not be modified.
- EN ;install all packages
- +1 ;XPDA=ien of first package
- +2 ;this is needed to restore XPDIJ1
- +3 ;p275 SAVE calls RTNLOG^XPDUTL
- DO LNRF("XPDUTL")
- +4 ;See that XPDIJ1 is loaded befor it is called
- DO LNRF("XPDIJ1")
- +5 NEW IEN,XPDI,XPD0,XPDSET,XPDABORT,XPDMENU,XPDQUIT,XPDVOL,X,Y,ZTRTN,ZTDTH,ZTIO,ZTDESC,ZTSK
- +6 ;See that install has full FM priv.
- MERGE X=DUZ
- NEW DUZ
- MERGE DUZ=X
- SET DUZ(0)="@"
- +7 IF $$NEWERR^%ZTER
- NEW $ETRAP,$ESTACK
- SET $ETRAP="D ERR^XPDIJ"
- +8 IF '$TEST
- SET X="ERR^XPDIJ"
- SET @^%ZOSF("TRAP")
- +9 ;check that Install entry exists, set status to "Start of Install"
- +10 if '$DATA(^XPD(9.7,+$GET(XPDA),0))
- QUIT
- SET XPD0=^(0)
- SET $PIECE(^(0),U,9)=2
- +11 DO INIT^XPDID
- +12 ;See if need to Inhibit Logons
- +13 IF $$ANSWER^XPDIQ("XPI1")
- DO INHIBIT^XPDIJ1("Y")
- +14 ;disable options & protocols for setname, XPDSET=1/0^setname^out of order msg.
- +15 SET Y=$PIECE(XPD0,U,8)
- SET XPDSET=+Y_U_$EXTRACT(Y,2,99)_U_$SELECT($LENGTH(Y):$PIECE($GET(^XTMP("XQOO",$EXTRACT(Y,2,99),0)),U),1:"")
- +16 ;hang the number of seconds given in 0;10
- +17 IF XPDSET
- DO OFF^XQOO1($PIECE(XPDSET,U,2))
- IF $PIECE(XPD0,U,10)
- HANG ($PIECE(XPD0,U,10)*60)
- +18 ;check that Install still exists, wasn't unloaded p672
- +19 IF '$DATA(^XPD(9.7,XPDA,0))!'$DATA(^XTMP("XPDI",XPDA))
- DO EXIT^XPDID(" Build NOT installed, Transport Global missing!!!!")
- QUIT
- +20 SET Y=0
- +21 ;XPDABORT can be set in pre or post install to abort install
- +22 FOR
- SET Y=$ORDER(^XPD(9.7,"ASP",XPDA,Y))
- if 'Y
- QUIT
- SET %=$ORDER(^(Y,0))
- if %
- Begin DoDot:1
- +23 NEW XPD,XPDA,XPDNM,XPDV,XPDV0,XPDVOL,XPDX,XPDY,Y
- +24 ;Now do the Install
- +25 SET XPDA=%
- SET XPDNM=$PIECE($GET(^XPD(9.7,XPDA,0)),U)
- DO IN^XPDIJ1
- if $DATA(XPDABORT)
- QUIT
- End DoDot:1
- if $DATA(XPDABORT)
- QUIT
- +26 ;
- +27 ;Now do Master Build Post INIT.
- +28 IF '$DATA(XPDABORT)
- IF $DATA(XPDT("MASTER"))
- Begin DoDot:1
- +29 NEW XPDBLD,XPDGREF
- +30 SET XPDBLD=$ORDER(^XTMP("XPDI",XPDA,"BLD",0))
- SET XPDGREF="^XTMP(""XPDI"","_XPDA_",""TEMP"")"
- +31 DO POST^XPDIJ1
- End DoDot:1
- +32 ;ZTREQ tells taskman to delete task
- +33 IF $GET(ZTSK)
- SET ZTREQ="@"
- Begin DoDot:1
- +34 ;remove task # from Install File
- +35 NEW XPD
- SET XPD(9.7,XPDA_",",5)="@"
- +36 DO FILE^DIE("","XPD")
- End DoDot:1
- +37 ;quit if install was aborted
- +38 IF $DATA(XPDABORT)
- DO EXIT^XPDID("Install Aborted!!")
- DO ^%ZISC
- QUIT
- +39 ;put option back in order
- +40 IF $PIECE(XPDSET,U,2)]""
- DO ON^XQOO1($PIECE(XPDSET,U,2))
- KILL ^XTMP("XQOO",$PIECE(XPDSET,U,2))
- +41 ;check if menu rebuild is wanted (only if option has been added to any installs)
- +42 ;XPDMENU is used to check that it is only done once
- +43 SET (Y,XPDMENU)=0
- +44 FOR
- SET Y=$ORDER(^XPD(9.7,"ASP",XPDA,Y))
- if 'Y
- QUIT
- SET %=$ORDER(^(Y,0))
- if %
- Begin DoDot:1
- +45 NEW XPDA,Y
- +46 SET XPDA=%
- +47 IF $$ANSWER^XPDIQ("XPO1")
- DO BMES^XPDUTL(" Call MENU rebuild")
- DO KIDS^XQ81
- SET XPDMENU=1
- +48 ;There should be no reason to check other CPUs anymore, patch 496
- +49 QUIT
- +50 ;check if need to queue menu rebuild on other CPUs
- +51 if $ORDER(^XPD(9.7,XPDA,"VOL",0))
- Begin DoDot:2
- +52 NEW XPDU,XPDY,XPDV,XPDV0,ZTUCI,ZTCPU
- +53 XECUTE ^%ZOSF("UCI")
- SET XPDU=$PIECE(Y,",")
- SET XPDY=$PIECE(Y,",",2)
- SET XPDV=0
- +54 ;loop thru VOLUMES SET and don't do current volume set
- +55 FOR
- SET XPDV=$ORDER(^XPD(9.7,XPDA,"VOL",XPDV))
- if 'XPDV
- QUIT
- SET XPDV0=$PIECE(^(XPDV,0),U)
- if XPDV0'=XPDY
- Begin DoDot:3
- +56 SET ZTUCI=XPDU
- SET ZTDTH=$HOROLOG
- SET ZTIO=""
- SET ZTDESC="Install Menu Rebuild"
- SET ZTCPU=XPDV0
- SET ZTRTN="KIDS^XQ81"
- DO ^%ZTLOAD
- End DoDot:3
- End DoDot:2
- End DoDot:1
- if XPDMENU
- QUIT
- +57 ;
- +58 ;See if need to reset inhibit logons
- +59 IF $$ANSWER^XPDIQ("XPI1")
- DO INHIBIT^XPDIJ1("N")
- +60 ;
- +61 ;clean up globals
- +62 SET Y=0
- +63 FOR
- SET Y=$ORDER(^XPD(9.7,"ASP",XPDA,Y))
- if 'Y
- QUIT
- SET XPDI=$ORDER(^(Y,0))
- if XPDI
- Begin DoDot:1
- +64 NEW %,Y,XPD,X
- +65 ;See if need to delete Env,Pre,Post routines.
- +66 SET %=$ORDER(^XTMP("XPDI",XPDI,"BLD",0))
- SET XPD=$GET(^XTMP("XPDI",XPDI,"BLD",%,"INID"))
- +67 IF '$$GET^XUPARAM("XPD NO_EPP_DELETE")
- FOR %=1:1:3
- IF $PIECE(XPD,U,%)="y"
- Begin DoDot:2
- +68 SET X=^XTMP("XPDI",XPDI,$PIECE("PRE^INIT^INI",U,%))
- if X[U
- SET X=$PIECE(X,U,2)
- if X]""
- XECUTE ^%ZOSF("DEL")
- End DoDot:2
- +69 ;kill transport global
- +70 KILL ^XTMP("XPDI",XPDI)
- +71 ;update the status field
- +72 SET XPD(9.7,XPDI_",",.02)=3
- +73 DO FILE^DIE("","XPD")
- End DoDot:1
- +74 DO EXIT^XPDID("Install Completed")
- DO ^%ZISC
- +75 QUIT
- +76 ;
- SAVE(X) ;restore routine X
- +1 NEW %,DIE,XCM,XCN,XCS
- +2 SET DIE="^XTMP(""XPDI"",XPDA,""RTN"",X,"
- SET XCN=0
- +3 XECUTE ^%ZOSF("SAVE")
- DO RTNLOG^XPDUTL(X)
- +4 QUIT
- RTN(XPDA) ;restore all routines for package XPDA
- +1 ;^XPD("XPDI",XPDA,"RTN",routine name)=0-install, 1-delete, 2-skip^checksum
- +2 if $GET(XPDA)=""
- QUIT
- +3 NEW X,XPDI,XPDJ
- SET XPDI=""
- +4 FOR
- SET XPDI=$ORDER(^XTMP("XPDI",XPDA,"RTN",XPDI))
- if XPDI=""
- QUIT
- SET XPDJ=^(XPDI)
- Begin DoDot:1
- +5 ;if we are doing VT graphic display, set counter
- +6 IF $DATA(XPDIDVT)
- SET XPDIDCNT=XPDIDCNT+1
- if '(XPDIDCNT#XPDIDMOD)
- DO UPDATE^XPDID(XPDIDCNT)
- +7 IF 'XPDJ
- DO SAVE(XPDI)
- QUIT
- +8 ;set checksum to null, since routine wasn't loaded
- +9 IF $PIECE(XPDJ,U,2)
- SET $PIECE(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"KRN",9.8,"NM",$PIECE(XPDJ,U,2),0),U,4)=""
- +10 IF $PIECE(XPDJ,U)=1
- SET X=XPDI
- XECUTE ^%ZOSF("DEL")
- End DoDot:1
- +11 ;if graphic display, update full count
- +12 IF $DATA(XPDIDVT)
- DO UPDATE^XPDID(XPDIDCNT)
- +13 QUIT
- +14 ;
- VOLERR(V,F) ;volume set not updated,V=volume set, F=flag
- +1 NEW XQA,XQAMSG,XPDMES
- +2 SET XPDMES(1)=" "
- SET XPDMES(2)=" ** Job on VOLUME SET "_V_$SELECT(F:" never started **",1:" has been idle for an hour.")
- +3 SET XPDMES(3)=" ** "_V_" has NOT been updated! **"
- +4 SET XQA(DUZ)=""
- SET XQAMSG="VOLUME SET "_V_" NOT updated for Install "_$EXTRACT($PIECE($GET(^XPD(9.7,+$GET(XPDA),0)),"^"),1,30)
- +5 DO MES^XPDUTL(.XPDMES)
- DO SETUP^XQALERT
- +6 QUIT
- +7 ;come here on error, record error in Install file and cleanup var.
- ERR NEW XPDERROR,XQA,XQAMSG
- +1 SET XPDERROR=$$EC^%ZOSV
- +2 ;record error
- +3 DO ^%ZTER
- +4 ;reset primary device back to home device
- +5 ;p796
- IF $GET(IO(0))]""
- USE IO(0)
- +6 ;write message, reset terminal
- +7 DO BMES^XPDUTL(XPDERROR)
- DO EXIT^XPDID()
- +8 SET XQA(DUZ)=""
- SET XQAMSG="Install "_$EXTRACT($PIECE($GET(^XPD(9.7,+$GET(XPDA),0)),"^"),1,30)_" has encountered an Error."
- +9 DO SETUP^XQALERT
- GOTO UNWIND^%ZTER
- +10 ;
- LNRF(RN) ;Load needed routines first
- +1 IF $DATA(^XTMP("XPDI",XPDA,"RTN",RN))
- Begin DoDot:1
- +2 NEW X
- +3 DO SAVE(RN)
- +4 SET XCN=$$RTNUP^XPDUTL(RN,2)
- End DoDot:1
- +5 QUIT