[796] | 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
|
---|