TMGXPDL1 ;TMG/kst/Custom version of XPDIL1 ;09/17/08 ;;1.0;TMG-LIB;**1**;09/17/08 ;"Original header.... ;"XPDIL1 ;SFISC/RSD - cont. of load Distribution Global ;11/14/2002 07:35 ;" ;;8.0;KERNEL;**15,17,39,41,44,66,68,76,85,100,108,229**;Jul 10, 1995 PKG(XPDA,Option,Msg) ;"Purspose: Check Package file ;"Input: Options -- PASS BY REFERENCE. Entries are required unless marked optional ;" Option("FORCE CONT LOAD")=1 <-- if not given, then load won't continue ;" Msg -- PASS BY REFERENCE, an OUT PARAMETER. ;" Errors are stored in Msg("ERROR",x)=Message ;" Msg("ERROR")=count of last error ;" Message are store in Msg(x)=Message ;" Msg=count of last message+1 N XPD,XPDCP,XPDNM,XPDNOQUE,XPDPKG,X,Y,% new abort set abort=0 S XPDNM=$P(XPDT(XPDIT),U,2) do AddMsg^TMGPAT2(" "_XPDNM,0,.Msg) ;"check KIDS version against sites version, skip if package is Kernel I $$PKG^TMGXPDUT(XPDNM)'["KERNEL" D ;"not interactive routine . ;"this is part of a Kernel multi package . Q:$O(XPDT("NM","KERNEL"))["KERNEL" . S Y=$G(^XTMP("XPDI",XPDA,"VER")) . I $$VERSION^TMGXPDUT("XU")0 . ;"if lookup fails try Prefix, C x-ref . S X=$P(XPDPKG(0),U,2),D="C" . D IX^DIC ;"add package to Install file I XPDPKG>0 do . S XPD(9.7,XPDA_",",1)=+XPDPKG . D FILE^DIE("","XPD") ;"XPDSKPE= does site want to run Environ. Check I '$G(XPDSKPE),($$ENV(0,.Msg)=1) goto PCKDone ;"global package can't have pre or post inits if $D(XPDGP) goto PCKDone ;"create pre-init checkpoint S XPDCP="INI" I '$$NEWCP^TMGXPDUT("XPD PREINSTALL COMPLETED") set abort=1 goto PCKDone S %=$$INRTN("INI") ;"check for routine, use as call back I $L(%),'$$NEWCP^TMGXPDUT("XPD PREINSTALL STARTED",%) set abort=1 goto PCKDone ;"create post-init checkpoint S XPDCP="INIT" I '$$NEWCP^TMGXPDUT("XPD POSTINSTALL COMPLETED") set abort=1 goto PCKDone S %=$$INRTN("INIT") I $L(%),'$$NEWCP^TMGXPDUT("XPD POSTINSTALL STARTED",%) set abort=1 goto PCKDone ;"create fileman and components check points and file rest of data do XPCK^XPDIK("FIA") do XPCK^XPDIK("KRN") PCKDone if abort=1 do . do AddMsg^TMGPAT2("Aborting",1,.Msg) . do ABORT^TMGXPDI(XPDA,1,,.Msg) Q INST(XPDNM,Option,Msg) ;"Purpose: add to Install file ;"Input: XPDNM -- Name to match agains .01 field from file 9.7 ;" Options -- PASS BY REFERENCE. Entries are required unless marked optional ;" Option("FORCE CONT LOAD")=1 <-- if not given, then load won't continue ;" when question normally asked of user. ;" Msg -- PASS BY REFERENCE, an OUT PARAMETER. ;" Errors are stored in Msg("ERROR",x)=Message ;" Msg("ERROR")=count of last error ;" Message are store in Msg(x)=Message ;" Msg=count of last message+1 ;"Output: ;"Result: 0=error, or IEN in Install File (9.7) of newly added entry N %X,DIC,DIR,DIRUT,DLAYGO,X,XPD,XPDA,XPDIE,XPDDIQ,Y,SH ;"check if Build was already installed ;"XPD=0 abort install, else XPD=ien in Install file I $D(^XPD(9.7,"B",XPDNM)) do . new IEN set IEN=$order(^XPD(9.7,"B",XPDNM,"")) ;"//kt added . ;"set XPDQUIT=1 ;"//kt added . S (SH,Y)=0 . do AddMsg^TMGPAT2("Build "_XPDNM_" has been loaded before [IEN #"_IEN_" in File INSTALL (9.7)]",0,.Msg) . ;"do AddMsg^TMGPAT2("Here is when: ",0,.Msg) . F S Y=$O(^XPD(9.7,"B",XPDNM,Y)) Q:'Y D . . Q:'$D(^XPD(9.7,Y,0)) S %=^(0) . . ;"do AddMsg^TMGPAT2(" "_$P(%,U),0,.Msg) . . I $P(%,U,9)<3,$D(^XTMP("XPDI",Y)) do quit . . . do AddMsg^TMGPAT2(" **Transport Global already exists**",0,.Msg) . . . S XPD=0 . . S %X=$X . . do AddMsg^TMGPAT2(" "_$$EXTERNAL^DILFD(9.7,.02,"",$P(%,U,9)),0,.Msg) . . do AddMsg^TMGPAT2(" "_$P(%,U)_" was loaded on "_$$FMTE^XLFDT($P($G(^XPD(9.7,Y,1)),U)),0,.Msg) . Q:$D(XPD) ;"quit if transport global exist . set XPD=0 ;"signal quit -- //kt added if $D(XPD) set XPDA=XPD goto INSTDone ;"Add to Install file, must be new S DIC="^XPD(9.7,",DIC(0)="XL",DLAYGO=9.7,X=""""_XPDNM_"""" D ^DIC I Y<0 do goto INSTDone . S SH=0 . do AddMsg^TMGPAT2("Can't ADD Build "_XPDNM_" to Install File",1,.Msg) . ;"do AddMsg^TMGPAT2($piece(Y,"^",2)_" already exists in INSTALLATION file (9.7), IEN=#"_+Y,1,.Msg) . set XPDA=0 ;"set starting package to Y, if it is not already defined S:'XPDST XPDST=+Y ;"XPDT array keeps track of all packages in this distribution S XPDA=+Y set XPDT(XPDIT)=XPDA_U_XPDNM set XPDT("DA",XPDA)=XPDIT set XPDT("NM",XPDNM)=XPDIT S %="XPDIE(9.7,"""_XPDA_","")" set @%@(.02)=0 ;"STATUS set @%@(2)=$$NOW^XLFDT ;"DATE LOADED set @%@(3)=XPDST ;"STARTING PACKAGE set @%@(4)=XPDIT ;"INSTALL ORDER set @%@(5)="" ;"QUEUED TASK NUMBER set @%@(6)=XPDST("H1") ;"FILE COMMENT new TMGMSG D FILE^DIE("","XPDIE","TMGMSG") I '$D(SH) do ;"SH is set when some other part of INST shows the name . set Msg(Msg)=" "_XPDNM,Msg=Msg+1 INSTDone Q XPDA ENV(XPDENV,Msg) ;"Purpose: Enviroment check & version check ;"Input-- XPDENV 0=loading distribution, 1=installing ;" Msg -- PASS BY REFERENCE, an OUT PARAMETER. ;" Errors are stored in Msg("ERROR",x)=Message ;" Msg("ERROR")=count of last error ;" Message are store in Msg(x)=Message ;" Msg=count of last message+1 ;"Output: Globally scoped variables set as follows: ;" XPDQUIT quit current package install, 1=kill global, 2=leave global ;" XPDQUIT(package) quit package install, 1=kill, 2=leave ;" XPDABORT quit the entire distribution, 1=kill, 2=leave ;"Returns: 0=ok, 1=rejected kill global, 2=rejected leave global N %,DIR,XPDI,XPDQUIT,XPDABORT,XPDDONE,XPDGREF,XPDMBREQ M X=DUZ N DUZ M DUZ=X S DUZ(0)="@" ;"See that ENV check has full FM priv. S XPDGREF="^XTMP(""XPDI"","_XPDA_",""TEMP"")" S XPDMBREQ=$G(^XTMP("XPDI",XPDA,"MBREQ")) S $P(^XPD(9.7,XPDA,0),U,7)=XPDMBREQ ;"check version number I XPDPKG>0 D I $G(XPDQUIT) D ABORT^TMGXPDI(XPDA,1,,.Msg) Q 1 . N DIR,DIRUT,X,Y . S %=+$$VER^TMGXPDUT(XPDNM) . S Y=+$G(^DIC(9.4,+XPDPKG,"VERSION")) . S X=XPDNM["*" . ;"If patch, version must be the same . I X,%'=Y do . . do AddMsg^TMGPAT2("This Patch is for Version "_%_", you are running Version "_Y,1,.Msg) . . S XPDQUIT=1 . ;"if package, version must be greater or equal . I 'X,%Y . I XPDX'["*" S:ZXPDQUIT:XPDACT,1:XPDQUIT) . ;"XPDACT=0 warning, =1 abort & kill global, =2 abort . new s set s=$S(XPDACT:"**INSTALL ABORTED**",1:"**WARNING**")_$S(XPDQ=1:" Patch ",1:" Package ") . set s=s_XPDX_" is Required "_$S(XPDACT:"to install",1:"for")_" this package!!" . do AddMsg^TMGPAT2(s,1,.Msg) Q:'XPDQUIT 0 ;"Don't do if leave global and loading D:'(XPDQUIT=2&'XPDENV) ABORT^TMGXPDI(XPDA,XPDQUIT,,.Msg) Q XPDQUIT ; INRTN(X) ;"return a routine that can be run N Y S Y=$G(^XTMP("XPDI",XPDA,X)) Q:Y="" "" S Y=$S(Y["^":Y,1:"^"_Y) Q Y