1 | TMGXPDL1 ;TMG/kst/Custom version of XPDIL1 ;09/17/08
|
---|
2 | ;;1.0;TMG-LIB;**1**;09/17/08
|
---|
3 |
|
---|
4 | ;"Original header....
|
---|
5 | ;"XPDIL1 ;SFISC/RSD - cont. of load Distribution Global ;11/14/2002 07:35
|
---|
6 | ;" ;;8.0;KERNEL;**15,17,39,41,44,66,68,76,85,100,108,229**;Jul 10, 1995
|
---|
7 |
|
---|
8 | PKG(XPDA,Option,Msg)
|
---|
9 | ;"Purspose: Check Package file
|
---|
10 | ;"Input: Options -- PASS BY REFERENCE. Entries are required unless marked optional
|
---|
11 | ;" Option("FORCE CONT LOAD")=1 <-- if not given, then load won't continue
|
---|
12 | ;" Msg -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
13 | ;" Errors are stored in Msg("ERROR",x)=Message
|
---|
14 | ;" Msg("ERROR")=count of last error
|
---|
15 | ;" Message are store in Msg(x)=Message
|
---|
16 | ;" Msg=count of last message+1
|
---|
17 |
|
---|
18 | N XPD,XPDCP,XPDNM,XPDNOQUE,XPDPKG,X,Y,%
|
---|
19 | new abort set abort=0
|
---|
20 | S XPDNM=$P(XPDT(XPDIT),U,2)
|
---|
21 | do AddMsg^TMGPAT2(" "_XPDNM,0,.Msg)
|
---|
22 |
|
---|
23 | ;"check KIDS version against sites version, skip if package is Kernel
|
---|
24 | I $$PKG^TMGXPDUT(XPDNM)'["KERNEL" D ;"not interactive routine
|
---|
25 | . ;"this is part of a Kernel multi package
|
---|
26 | . Q:$O(XPDT("NM","KERNEL"))["KERNEL"
|
---|
27 | . S Y=$G(^XTMP("XPDI",XPDA,"VER"))
|
---|
28 | . I $$VERSION^TMGXPDUT("XU")<Y do
|
---|
29 | . . do AddMsg^TMGPAT2("Need Version "_+Y_" of KERNEL!",1,.Msg)
|
---|
30 | . . S XPDQUIT=1
|
---|
31 | . I $$VERSION^TMGXPDUT("VA FILEMAN")<$P(Y,U,2) do
|
---|
32 | . . do AddMsg^TMGPAT2("Need Version "_+$P(Y,U,2)_" of VA FILEMAN!",1,.Msg)
|
---|
33 | . . S XPDQUIT=1
|
---|
34 | I $D(XPDQUIT) set abort=1 goto PCKDone
|
---|
35 |
|
---|
36 | ;"get national package name
|
---|
37 | S %=$O(^XTMP("XPDI",XPDA,"PKG",0))
|
---|
38 | set XPDPKG(0)=$G(^(+%,0))
|
---|
39 | set XPDPKG=%
|
---|
40 | ;"XPDPKG=new ien^old ien
|
---|
41 | I XPDPKG D S XPDPKG=+Y_U_XPDPKG
|
---|
42 | . N D,DIC
|
---|
43 | . S DIC="^DIC(9.4,",DIC(0)="X",X=$P(XPDPKG(0),U)
|
---|
44 | . D ^DIC Q:Y>0
|
---|
45 | . ;"if lookup fails try Prefix, C x-ref
|
---|
46 | . S X=$P(XPDPKG(0),U,2),D="C"
|
---|
47 | . D IX^DIC
|
---|
48 |
|
---|
49 | ;"add package to Install file
|
---|
50 | I XPDPKG>0 do
|
---|
51 | . S XPD(9.7,XPDA_",",1)=+XPDPKG
|
---|
52 | . D FILE^DIE("","XPD")
|
---|
53 |
|
---|
54 | ;"XPDSKPE= does site want to run Environ. Check
|
---|
55 | I '$G(XPDSKPE),($$ENV(0,.Msg)=1) goto PCKDone
|
---|
56 |
|
---|
57 | ;"global package can't have pre or post inits
|
---|
58 | if $D(XPDGP) goto PCKDone
|
---|
59 |
|
---|
60 | ;"create pre-init checkpoint
|
---|
61 | S XPDCP="INI"
|
---|
62 | I '$$NEWCP^TMGXPDUT("XPD PREINSTALL COMPLETED") set abort=1 goto PCKDone
|
---|
63 | S %=$$INRTN("INI")
|
---|
64 |
|
---|
65 | ;"check for routine, use as call back
|
---|
66 | I $L(%),'$$NEWCP^TMGXPDUT("XPD PREINSTALL STARTED",%) set abort=1 goto PCKDone
|
---|
67 |
|
---|
68 | ;"create post-init checkpoint
|
---|
69 | S XPDCP="INIT"
|
---|
70 | I '$$NEWCP^TMGXPDUT("XPD POSTINSTALL COMPLETED") set abort=1 goto PCKDone
|
---|
71 | S %=$$INRTN("INIT")
|
---|
72 |
|
---|
73 | I $L(%),'$$NEWCP^TMGXPDUT("XPD POSTINSTALL STARTED",%) set abort=1 goto PCKDone
|
---|
74 | ;"create fileman and components check points and file rest of data
|
---|
75 | do XPCK^XPDIK("FIA")
|
---|
76 | do XPCK^XPDIK("KRN")
|
---|
77 | PCKDone
|
---|
78 | if abort=1 do
|
---|
79 | . do AddMsg^TMGPAT2("Aborting",1,.Msg)
|
---|
80 | . do ABORT^TMGXPDI(XPDA,1,,.Msg)
|
---|
81 |
|
---|
82 | Q
|
---|
83 |
|
---|
84 | INST(XPDNM,Option,Msg)
|
---|
85 | ;"Purpose: add to Install file
|
---|
86 | ;"Input: XPDNM -- Name to match agains .01 field from file 9.7
|
---|
87 | ;" Options -- PASS BY REFERENCE. Entries are required unless marked optional
|
---|
88 | ;" Option("FORCE CONT LOAD")=1 <-- if not given, then load won't continue
|
---|
89 | ;" when question normally asked of user.
|
---|
90 | ;" Msg -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
91 | ;" Errors are stored in Msg("ERROR",x)=Message
|
---|
92 | ;" Msg("ERROR")=count of last error
|
---|
93 | ;" Message are store in Msg(x)=Message
|
---|
94 | ;" Msg=count of last message+1
|
---|
95 | ;"Output:
|
---|
96 | ;"Result: 0=error, or IEN in Install File (9.7) of newly added entry
|
---|
97 |
|
---|
98 | N %X,DIC,DIR,DIRUT,DLAYGO,X,XPD,XPDA,XPDIE,XPDDIQ,Y,SH
|
---|
99 |
|
---|
100 | ;"check if Build was already installed
|
---|
101 | ;"XPD=0 abort install, else XPD=ien in Install file
|
---|
102 | I $D(^XPD(9.7,"B",XPDNM)) do
|
---|
103 | . new IEN set IEN=$order(^XPD(9.7,"B",XPDNM,"")) ;"//kt added
|
---|
104 | . ;"set XPDQUIT=1 ;"//kt added
|
---|
105 | . S (SH,Y)=0
|
---|
106 | . do AddMsg^TMGPAT2("Build "_XPDNM_" has been loaded before [IEN #"_IEN_" in File INSTALL (9.7)]",0,.Msg)
|
---|
107 | . ;"do AddMsg^TMGPAT2("Here is when: ",0,.Msg)
|
---|
108 | . F S Y=$O(^XPD(9.7,"B",XPDNM,Y)) Q:'Y D
|
---|
109 | . . Q:'$D(^XPD(9.7,Y,0)) S %=^(0)
|
---|
110 | . . ;"do AddMsg^TMGPAT2(" "_$P(%,U),0,.Msg)
|
---|
111 | . . I $P(%,U,9)<3,$D(^XTMP("XPDI",Y)) do quit
|
---|
112 | . . . do AddMsg^TMGPAT2(" **Transport Global already exists**",0,.Msg)
|
---|
113 | . . . S XPD=0
|
---|
114 | . . S %X=$X
|
---|
115 | . . do AddMsg^TMGPAT2(" "_$$EXTERNAL^DILFD(9.7,.02,"",$P(%,U,9)),0,.Msg)
|
---|
116 | . . do AddMsg^TMGPAT2(" "_$P(%,U)_" was loaded on "_$$FMTE^XLFDT($P($G(^XPD(9.7,Y,1)),U)),0,.Msg)
|
---|
117 | . Q:$D(XPD) ;"quit if transport global exist
|
---|
118 | . set XPD=0 ;"signal quit -- //kt added
|
---|
119 | if $D(XPD) set XPDA=XPD goto INSTDone
|
---|
120 |
|
---|
121 | ;"Add to Install file, must be new
|
---|
122 | S DIC="^XPD(9.7,",DIC(0)="XL",DLAYGO=9.7,X=""""_XPDNM_""""
|
---|
123 | D ^DIC
|
---|
124 | I Y<0 do goto INSTDone
|
---|
125 | . S SH=0
|
---|
126 | . do AddMsg^TMGPAT2("Can't ADD Build "_XPDNM_" to Install File",1,.Msg)
|
---|
127 | . ;"do AddMsg^TMGPAT2($piece(Y,"^",2)_" already exists in INSTALLATION file (9.7), IEN=#"_+Y,1,.Msg)
|
---|
128 | . set XPDA=0
|
---|
129 |
|
---|
130 | ;"set starting package to Y, if it is not already defined
|
---|
131 | S:'XPDST XPDST=+Y
|
---|
132 | ;"XPDT array keeps track of all packages in this distribution
|
---|
133 | S XPDA=+Y
|
---|
134 | set XPDT(XPDIT)=XPDA_U_XPDNM
|
---|
135 | set XPDT("DA",XPDA)=XPDIT
|
---|
136 | set XPDT("NM",XPDNM)=XPDIT
|
---|
137 | S %="XPDIE(9.7,"""_XPDA_","")"
|
---|
138 | set @%@(.02)=0 ;"STATUS
|
---|
139 | set @%@(2)=$$NOW^XLFDT ;"DATE LOADED
|
---|
140 | set @%@(3)=XPDST ;"STARTING PACKAGE
|
---|
141 | set @%@(4)=XPDIT ;"INSTALL ORDER
|
---|
142 | set @%@(5)="" ;"QUEUED TASK NUMBER
|
---|
143 | set @%@(6)=XPDST("H1") ;"FILE COMMENT
|
---|
144 | new TMGMSG
|
---|
145 | D FILE^DIE("","XPDIE","TMGMSG")
|
---|
146 | I '$D(SH) do ;"SH is set when some other part of INST shows the name
|
---|
147 | . set Msg(Msg)=" "_XPDNM,Msg=Msg+1
|
---|
148 | INSTDone
|
---|
149 | Q XPDA
|
---|
150 |
|
---|
151 |
|
---|
152 |
|
---|
153 | ENV(XPDENV,Msg)
|
---|
154 | ;"Purpose: Enviroment check & version check
|
---|
155 | ;"Input-- XPDENV 0=loading distribution, 1=installing
|
---|
156 | ;" Msg -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
157 | ;" Errors are stored in Msg("ERROR",x)=Message
|
---|
158 | ;" Msg("ERROR")=count of last error
|
---|
159 | ;" Message are store in Msg(x)=Message
|
---|
160 | ;" Msg=count of last message+1
|
---|
161 | ;"Output: Globally scoped variables set as follows:
|
---|
162 | ;" XPDQUIT quit current package install, 1=kill global, 2=leave global
|
---|
163 | ;" XPDQUIT(package) quit package install, 1=kill, 2=leave
|
---|
164 | ;" XPDABORT quit the entire distribution, 1=kill, 2=leave
|
---|
165 | ;"Returns: 0=ok, 1=rejected kill global, 2=rejected leave global
|
---|
166 |
|
---|
167 | N %,DIR,XPDI,XPDQUIT,XPDABORT,XPDDONE,XPDGREF,XPDMBREQ
|
---|
168 | M X=DUZ
|
---|
169 | N DUZ
|
---|
170 | M DUZ=X
|
---|
171 | S DUZ(0)="@" ;"See that ENV check has full FM priv.
|
---|
172 | S XPDGREF="^XTMP(""XPDI"","_XPDA_",""TEMP"")"
|
---|
173 | S XPDMBREQ=$G(^XTMP("XPDI",XPDA,"MBREQ"))
|
---|
174 | S $P(^XPD(9.7,XPDA,0),U,7)=XPDMBREQ
|
---|
175 | ;"check version number
|
---|
176 | I XPDPKG>0 D I $G(XPDQUIT) D ABORT^TMGXPDI(XPDA,1,,.Msg) Q 1
|
---|
177 | . N DIR,DIRUT,X,Y
|
---|
178 | . S %=+$$VER^TMGXPDUT(XPDNM)
|
---|
179 | . S Y=+$G(^DIC(9.4,+XPDPKG,"VERSION"))
|
---|
180 | . S X=XPDNM["*"
|
---|
181 | . ;"If patch, version must be the same
|
---|
182 | . I X,%'=Y do
|
---|
183 | . . do AddMsg^TMGPAT2("This Patch is for Version "_%_", you are running Version "_Y,1,.Msg)
|
---|
184 | . . S XPDQUIT=1
|
---|
185 | . ;"if package, version must be greater or equal
|
---|
186 | . I 'X,%<Y do
|
---|
187 | . . do AddMsg^TMGPAT2("You have a Version greater than mine!",1,.Msg)
|
---|
188 | . . S XPDQUIT=1
|
---|
189 | . Q:'$G(XPDQUIT)
|
---|
190 | . I $G(XPDMBREQ) D Q
|
---|
191 | . . D MES^TMGXPDUT("**ABORT** Required Build "_XPDNM_", did not pass internal KIDS checks!",.Msg)
|
---|
192 | . . D ABRTALL^TMGXPDI(1,,.Msg)
|
---|
193 | . . D NONE^TMGXPDI
|
---|
194 | . . S XPDQUIT=0,XPDDONE=1
|
---|
195 | . . Q
|
---|
196 | . ;"NEED TO CHANGE BELOW IF GOING TO MAKE NON-INTERACTIVE...
|
---|
197 | . S DIR(0)="Y",DIR("A")="Want to continue installing this build",DIR("B")="NO"
|
---|
198 | . D ^DIR
|
---|
199 | . I Y K XPDQUIT
|
---|
200 | . Q
|
---|
201 | Q:$G(XPDDONE) 1
|
---|
202 |
|
---|
203 | S %=$$REQB(.Msg)
|
---|
204 | I % S (XPDABORT,XPDREQAB)=% G ABORT
|
---|
205 | S %=$G(^XTMP("XPDI",XPDA,"PRE")) D:%]""
|
---|
206 | . do AddMsg^TMGPAT2("Will first run the Environment Check Routine, "_%,0,.Msg)
|
---|
207 | . D SAVE^XPDIJ(%)
|
---|
208 | . new saved
|
---|
209 | . do IOCapON^TMGKERNL
|
---|
210 | . D @("^"_%)
|
---|
211 | . do IOCapOFF^TMGKERNL("saved")
|
---|
212 | . if $data(saved) do AddMsg^TMGPAT2(.saved,0,.Msg)
|
---|
213 |
|
---|
214 |
|
---|
215 | ABORT I $G(XPDABORT) D Q XPDABORT
|
---|
216 | . ;"if during load & leave global quit
|
---|
217 | . I 'XPDENV,XPDABORT=2 Q
|
---|
218 | . D ABRTALL^TMGXPDI(XPDABORT,,.Msg)
|
---|
219 | Q:'$D(XPDQUIT) 0
|
---|
220 | I $G(XPDQUIT) D ABORT^TMGXPDI(XPDA,XPDQUIT,,.Msg)
|
---|
221 | S XPDI=""
|
---|
222 |
|
---|
223 | ;"don't do if loading & leave global, need to keep XPDT(array)
|
---|
224 | F S XPDI=$O(XPDQUIT(XPDI)) Q:XPDI="" D:'(XPDQUIT(XPDI)=2&'XPDENV)
|
---|
225 | . S %=$G(XPDT("NM",XPDI))
|
---|
226 | . D:% ABORT^TMGXPDI(+XPDT(%),XPDQUIT(XPDI),,.Msg)
|
---|
227 | S XPDQUIT=$S($G(XPDQUIT):XPDQUIT,'$O(XPDT(0))!'$D(^XTMP("XPDI",XPDA)):1,1:0)
|
---|
228 | Q XPDQUIT
|
---|
229 | ;
|
---|
230 |
|
---|
231 |
|
---|
232 | REQB(Msg)
|
---|
233 | ;"Purpose: check for Required Builds
|
---|
234 | ;"Input: Msg -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
235 | ;" Errors are stored in Msg("ERROR",x)=Message
|
---|
236 | ;" Msg("ERROR")=count of last error
|
---|
237 | ;" Message are store in Msg(x)=Message
|
---|
238 | ;" Msg=count of last message+1
|
---|
239 | ;"returns 0=ok, 1=failed kill global, 2=failed leave global
|
---|
240 |
|
---|
241 | N XPDACT,XPDBLD,XPDI,XPDQ,XPDQUIT,XPDX,XPDX0,X,Y
|
---|
242 | S XPDBLD=$O(^XTMP("XPDI",XPDA,"BLD",0)),XPDQUIT=0,XPDI=0
|
---|
243 | Q:'$D(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"REQB")) 0
|
---|
244 | F S XPDI=$O(^XTMP("XPDI",XPDA,"BLD",XPDBLD,"REQB",XPDI)) Q:'XPDI D
|
---|
245 | . S XPDX0=^(XPDI,0)
|
---|
246 | . S XPDQ=0,XPDX=$P(XPDX0,U),XPDACT=$P(XPDX0,U,2)
|
---|
247 | . S X=$$PKG^TMGXPDUT(XPDX)
|
---|
248 | . S Y=$$VER^TMGXPDUT(XPDX)
|
---|
249 | . S Z=$$VERSION^TMGXPDUT(X)
|
---|
250 | .;"Quit if current version is greater than what we are checking for
|
---|
251 | . Q:Z>Y
|
---|
252 | . I XPDX'["*" S:Z<Y XPDQ=2
|
---|
253 | . E S:'$$PATCH^TMGXPDUT(XPDX) XPDQ=1
|
---|
254 | . ;"Quit if patch is already on system
|
---|
255 | . Q:'XPDQ
|
---|
256 | . ;"quit if patch is sequenced prior within this build
|
---|
257 | . I $D(XPDT("NM",XPDX)),(XPDT("NM",XPDX)<XPDT("NM",XPDNM)) S XPDQ=0 Q
|
---|
258 | . S XPDQUIT=$S(XPDACT>XPDQUIT:XPDACT,1:XPDQUIT)
|
---|
259 | . ;"XPDACT=0 warning, =1 abort & kill global, =2 abort
|
---|
260 | . new s set s=$S(XPDACT:"**INSTALL ABORTED**",1:"**WARNING**")_$S(XPDQ=1:" Patch ",1:" Package ")
|
---|
261 | . set s=s_XPDX_" is Required "_$S(XPDACT:"to install",1:"for")_" this package!!"
|
---|
262 | . do AddMsg^TMGPAT2(s,1,.Msg)
|
---|
263 | Q:'XPDQUIT 0
|
---|
264 | ;"Don't do if leave global and loading
|
---|
265 | D:'(XPDQUIT=2&'XPDENV) ABORT^TMGXPDI(XPDA,XPDQUIT,,.Msg)
|
---|
266 | Q XPDQUIT
|
---|
267 | ;
|
---|
268 |
|
---|
269 | INRTN(X)
|
---|
270 | ;"return a routine that can be run
|
---|
271 | N Y
|
---|
272 | S Y=$G(^XTMP("XPDI",XPDA,X)) Q:Y="" ""
|
---|
273 | S Y=$S(Y["^":Y,1:"^"_Y)
|
---|
274 | Q Y
|
---|