1 | XPDIL1 ;SFISC/RSD - cont. of load Distribution Global ;11/14/2002 07:35
|
---|
2 | ;;8.0;KERNEL;**15,17,39,41,44,66,68,76,85,100,108,229**;Jul 10, 1995
|
---|
3 | ;
|
---|
4 | PKG(XPDA) ;check Package file
|
---|
5 | N XPD,XPDCP,XPDNM,XPDNOQUE,XPDPKG,X,Y,%
|
---|
6 | S XPDNM=$P(XPDT(XPDIT),U,2) W !?3,XPDNM
|
---|
7 | ;check KIDS version against sites version, skip if package is Kernel
|
---|
8 | I $$PKG^XPDUTL(XPDNM)'["KERNEL" D I $D(XPDQUIT) D ABORT^XPDI(XPDA,1) Q
|
---|
9 | .;this is part of a Kernel multi package
|
---|
10 | .Q:$O(XPDT("NM","KERNEL"))["KERNEL"
|
---|
11 | .S Y=$G(^XTMP("XPDI",XPDA,"VER"))
|
---|
12 | .I $$VERSION^XPDUTL("XU")<Y W !!,"But I need Version ",+Y," of KERNEL!" S XPDQUIT=1
|
---|
13 | .I $$VERSION^XPDUTL("VA FILEMAN")<$P(Y,U,2) W !,"But I Need Version ",+$P(Y,U,2)," of VA FILEMAN!" S XPDQUIT=1
|
---|
14 | ;get national package name
|
---|
15 | S %=$O(^XTMP("XPDI",XPDA,"PKG",0)),XPDPKG(0)=$G(^(+%,0)),XPDPKG=%
|
---|
16 | ;XPDPKG=new ien^old ien
|
---|
17 | I XPDPKG D S XPDPKG=+Y_U_XPDPKG
|
---|
18 | .N D,DIC
|
---|
19 | .S DIC="^DIC(9.4,",DIC(0)="X",X=$P(XPDPKG(0),U)
|
---|
20 | .D ^DIC Q:Y>0
|
---|
21 | .;if lookup fails try Prefix, C x-ref
|
---|
22 | .S X=$P(XPDPKG(0),U,2),D="C" D IX^DIC
|
---|
23 | ;add package to Install file
|
---|
24 | I XPDPKG>0 S XPD(9.7,XPDA_",",1)=+XPDPKG D FILE^DIE("","XPD")
|
---|
25 | ;XPDSKPE= does site want to run Environ. Check
|
---|
26 | I '$G(XPDSKPE) Q:$$ENV(0)=1
|
---|
27 | ;global package can't have pre or post inits
|
---|
28 | Q:$D(XPDGP)
|
---|
29 | ;create pre-init checkpoint
|
---|
30 | S XPDCP="INI" I '$$NEWCP^XPDUTL("XPD PREINSTALL COMPLETED") D ABORT^XPDI(XPDA,1) Q
|
---|
31 | S %=$$INRTN("INI")
|
---|
32 | ;check for routine, use as call back
|
---|
33 | I $L(%),'$$NEWCP^XPDUTL("XPD PREINSTALL STARTED",%) D ABORT^XPDI(XPDA,1) Q
|
---|
34 | ;create post-init checkpoint
|
---|
35 | S XPDCP="INIT" I '$$NEWCP^XPDUTL("XPD POSTINSTALL COMPLETED") D ABORT^XPDI(XPDA,1) Q
|
---|
36 | S %=$$INRTN("INIT")
|
---|
37 | I $L(%),'$$NEWCP^XPDUTL("XPD POSTINSTALL STARTED",%) D ABORT^XPDI(XPDA,1) Q
|
---|
38 | ;create fileman and components check points and file rest of data
|
---|
39 | D XPCK^XPDIK("FIA"),XPCK^XPDIK("KRN")
|
---|
40 | Q
|
---|
41 | INST(XPDNM) ;add to Install file
|
---|
42 | N %X,DIC,DIR,DIRUT,DLAYGO,X,XPD,XPDA,XPDIE,XPDDIQ,Y,SH
|
---|
43 | ;check if Build was already installed
|
---|
44 | ;XPD=0 abort install, else XPD=ien in Install file
|
---|
45 | I $D(^XPD(9.7,"B",XPDNM)) S (SH,Y)=0 D Q:$D(XPD) XPD
|
---|
46 | . W !,"Build ",XPDNM," has been loaded before, here is when: "
|
---|
47 | . F S Y=$O(^XPD(9.7,"B",XPDNM,Y)) Q:'Y D
|
---|
48 | .. Q:'$D(^XPD(9.7,Y,0)) S %=^(0)
|
---|
49 | .. W !?6,$P(%,U)," "
|
---|
50 | .. I $P(%,U,9)<3,$D(^XTMP("XPDI",Y)) W "**Transport Global already exists**",*7 S XPD=0 Q
|
---|
51 | .. S %X=$X W $$EXTERNAL^DILFD(9.7,.02,"",$P(%,U,9)),!?%X,"was loaded on ",$$FMTE^XLFDT($P($G(^XPD(9.7,Y,1)),U))
|
---|
52 | . ;quit if transport global exist
|
---|
53 | . Q:$D(XPD)
|
---|
54 | . S DIR(0)="Y",DIR("A")="OK to continue with Load",DIR("B")="NO"
|
---|
55 | . D ^DIR W ! I $D(DIRUT)!'Y S XPD=0 Q
|
---|
56 | S DIC="^XPD(9.7,",DIC(0)="XL",DLAYGO=9.7,X=""""_XPDNM_""""
|
---|
57 | ;add to Install file, must be new
|
---|
58 | D ^DIC
|
---|
59 | I Y<0 S SH=0 W !,"Can't add Build ",XPDNM," to Install File" Q 0
|
---|
60 | ;set starting package to Y, if it is not already defined
|
---|
61 | S:'XPDST XPDST=+Y
|
---|
62 | ;XPDT array keeps track of all packages in this distribution
|
---|
63 | S XPDA=+Y,XPDT(XPDIT)=XPDA_U_XPDNM,(XPDT("DA",XPDA),XPDT("NM",XPDNM))=XPDIT
|
---|
64 | S %="XPDIE(9.7,"""_XPDA_","")",@%@(.02)=0,@%@(2)=$$NOW^XLFDT,@%@(3)=XPDST,@%@(4)=XPDIT,@%@(5)="",@%@(6)=XPDST("H1")
|
---|
65 | D FILE^DIE("","XPDIE")
|
---|
66 | I '$D(SH) W !?3,XPDNM ;SH is set when some other part of INST shows the name
|
---|
67 | Q XPDA
|
---|
68 | ;
|
---|
69 | ;XPDQUIT quit current package install, 1=kill global, 2=leave global
|
---|
70 | ;XPDQUIT(package) quit package install, 1=kill, 2=leave
|
---|
71 | ;XPDABORT quit the entire distribution, 1=kill, 2=leave
|
---|
72 | ;XPDENV 0=loading distribution, 1=installing
|
---|
73 | ENV(XPDENV) ;enviroment check & version check
|
---|
74 | ;returns 0=ok, 1=rejected kill global, 2=rejected leave global
|
---|
75 | N %,DIR,XPDI,XPDQUIT,XPDABORT,XPDDONE,XPDGREF,XPDMBREQ
|
---|
76 | M X=DUZ N DUZ M DUZ=X S DUZ(0)="@" ;See that ENV check has full FM priv.
|
---|
77 | S XPDGREF="^XTMP(""XPDI"","_XPDA_",""TEMP"")"
|
---|
78 | S XPDMBREQ=$G(^XTMP("XPDI",XPDA,"MBREQ"))
|
---|
79 | S $P(^XPD(9.7,XPDA,0),U,7)=XPDMBREQ
|
---|
80 | ;check version number
|
---|
81 | I XPDPKG>0 D I $G(XPDQUIT) D ABORT^XPDI(XPDA,1) Q 1
|
---|
82 | .N DIR,DIRUT,X,Y
|
---|
83 | .S %=+$$VER^XPDUTL(XPDNM),Y=+$G(^DIC(9.4,+XPDPKG,"VERSION")),X=XPDNM["*"
|
---|
84 | .;if patch, version must be the same
|
---|
85 | .I X,%'=Y W !,"This Patch is for Version ",%,", you are running Version ",Y,! S XPDQUIT=1
|
---|
86 | .;if package, version must be greater or equal
|
---|
87 | .I 'X,%<Y W !,"You have a Version greater than mine!",! S XPDQUIT=1
|
---|
88 | .Q:'$G(XPDQUIT)
|
---|
89 | .I $G(XPDMBREQ) D S XPDQUIT=0,XPDDONE=1 Q
|
---|
90 | . . D MES^XPDUTL("**ABORT** Required Build "_XPDNM_", did not pass internal KIDS checks!"),ABRTALL^XPDI(1),NONE^XPDI
|
---|
91 | . . Q
|
---|
92 | .S DIR(0)="Y",DIR("A")="Want to continue installing this build",DIR("B")="NO"
|
---|
93 | .D ^DIR I Y K XPDQUIT
|
---|
94 | .Q
|
---|
95 | Q:$G(XPDDONE) 1
|
---|
96 | S %=$$REQB I % S (XPDABORT,XPDREQAB)=% G ABORT
|
---|
97 | S %=$G(^XTMP("XPDI",XPDA,"PRE")) D:%]""
|
---|
98 | .W !,"Will first run the Environment Check Routine, ",%,!
|
---|
99 | .D SAVE^XPDIJ(%),@("^"_%)
|
---|
100 | ABORT I $G(XPDABORT) D Q XPDABORT
|
---|
101 | .;if during load & leave global quit
|
---|
102 | .I 'XPDENV,XPDABORT=2 Q
|
---|
103 | .D ABRTALL^XPDI(XPDABORT)
|
---|
104 | Q:'$D(XPDQUIT) 0
|
---|
105 | I $G(XPDQUIT) D ABORT^XPDI(XPDA,XPDQUIT)
|
---|
106 | S XPDI=""
|
---|
107 | ;don't do if loading & leave global, need to keep XPDT(array)
|
---|
108 | F S XPDI=$O(XPDQUIT(XPDI)) Q:XPDI="" D:'(XPDQUIT(XPDI)=2&'XPDENV)
|
---|
109 | .S %=$G(XPDT("NM",XPDI)) D:% ABORT^XPDI(+XPDT(%),XPDQUIT(XPDI))
|
---|
110 | S XPDQUIT=$S($G(XPDQUIT):XPDQUIT,'$O(XPDT(0))!'$D(^XTMP("XPDI",XPDA)):1,1:0)
|
---|
111 | Q XPDQUIT
|
---|
112 | ;
|
---|
113 | REQB() ;check for Required Builds
|
---|
114 | ;returns 0=ok, 1=failed kill global, 2=failed leave global
|
---|
115 | N XPDACT,XPDBLD,XPDI,XPDQ,XPDQUIT,XPDX,XPDX0,X,Y
|
---|
116 | S XPDBLD=$O(^XTMP("XPDI",XPDA,"BLD",0)),XPDQUIT=0,XPDI=0
|
---|
117 | Q:'$D(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"REQB")) 0
|
---|
118 | F S XPDI=$O(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"REQB",XPDI)) Q:'XPDI S XPDX0=^(XPDI,0) D
|
---|
119 | .S XPDQ=0,XPDX=$P(XPDX0,U),XPDACT=$P(XPDX0,U,2),X=$$PKG^XPDUTL(XPDX),Y=$$VER^XPDUTL(XPDX),Z=$$VERSION^XPDUTL(X)
|
---|
120 | .;quit if current version is greater than what we are checking for
|
---|
121 | .Q:Z>Y
|
---|
122 | .I XPDX'["*" S:Z<Y XPDQ=2
|
---|
123 | .E S:'$$PATCH^XPDUTL(XPDX) XPDQ=1
|
---|
124 | .;quit if patch is already on system
|
---|
125 | .Q:'XPDQ
|
---|
126 | .;quit if patch is sequenced prior within this build
|
---|
127 | .I $D(XPDT("NM",XPDX)),(XPDT("NM",XPDX)<XPDT("NM",XPDNM)) S XPDQ=0 Q
|
---|
128 | .S XPDQUIT=$S(XPDACT>XPDQUIT:XPDACT,1:XPDQUIT)
|
---|
129 | .;XPDACT=0 warning, =1 abort & kill global, =2 abort
|
---|
130 | .W !!,$S(XPDACT:"**INSTALL ABORTED**",1:"**WARNING**")_$S(XPDQ=1:" Patch ",1:" Package ")_XPDX_" is Required "_$S(XPDACT:"to install",1:"for")_" this package!!",!
|
---|
131 | Q:'XPDQUIT 0
|
---|
132 | ;don't do if leave global and loading
|
---|
133 | D:'(XPDQUIT=2&'XPDENV) ABORT^XPDI(XPDA,XPDQUIT)
|
---|
134 | Q XPDQUIT
|
---|
135 | ;
|
---|
136 | ;return a routine that can be run
|
---|
137 | INRTN(X) N Y
|
---|
138 | S Y=$G(^XTMP("XPDI",XPDA,X)) Q:Y="" ""
|
---|
139 | S Y=$S(Y["^":Y,1:"^"_Y)
|
---|
140 | Q Y
|
---|