XPDDCS ;SFISC/RSD - Display Checksum for a package ;05/05/2008
;;8.0;KERNEL;**2,44,108,202,393,511,547**;Jul 10, 1995;Build 16
;Per VHA Directive 2004-038, this routine should not be modified.
Q
EN1 ;Verify checksums in Transport Global
N D0,DIC,X,XPD,XPDS,XPDSHW,XPDST,XPDT,Y,Z
;S DIC="^XPD(9.7,",DIC(0)="AEQMZ",DIC("S")="I $D(^XTMP(""XPDI"",Y))"
;D ^DIC Q:Y<0
S XPDS="I $D(^XTMP(""XPDI"",Y))"
S XPDST=$$LOOK^XPDI1(XPDS) Q:XPDST'>0
S XPDSHW=$$ASK Q:$D(DIRUT)
S XPD("XPDT(")="",XPD("XPDST")="",XPD("XPDSHW")="",X="XUTMDEVQ"
;during Virgin install, XUTMDEVQ might not exists
X ^%ZOSF("TEST") E D Q
.S IOSL=99999,IOM=80,IOF="#",IOST="",$Y=0 D LST1(9.7)
S Y="LST1^XPDDCS(9.7)",Z="Checksum Print"
;p345-rename AND* to XPD* - Patch was Cancelled keep code for future.
I '$G(XPDAUTO) D EN^XUTMDEVQ(Y,Z,.XPD)
I $G(XPDAUTO) S IO=XPDDEV U XPDDEV D LST1^XPDDCS(9.7)
Q
;
ASK() ;Ask if want each routine listed
N DIR
I $D(XPDAUTO) Q 1
S DIR(0)="YAO",DIR("A")="Want each Routine Listed with Checksums: ",DIR("A",1)="",DIR("B")="Yes"
D ^DIR
Q Y
;
EN2 ;print from build (system)
N D0,DIC,XPD,XPDT,XPDST,Y,Z
;S DIC="^XPD(9.6,",DIC(0)="AEQMZ"
;D ^DIC Q:Y<0
S XPDST=$$LOOK^XPDB1() Q:XPDST'>0
S XPDSHW=$$ASK Q:$D(DIRUT)
S XPD("XPDT(")="",XPD("XPDSHW")="",Y="LST1^XPDDCS(9.6)",Z="Checksum Print"
;p345-rename AND* to XPD*- Patch was Cancelled keep code for future.
I '$G(XPDAUTO) D EN^XUTMDEVQ(Y,Z,.XPD)
I $G(XPDAUTO) S:'$D(XPDDEV) XPDDEV=0 U XPDDEV D LST1^XPDDCS(9.6)
Q
;
LST1(FILE) ;Print group
N XPDI S XPDI=0
F S XPDI=$O(XPDT(XPDI)) Q:XPDI'>0 S D0=+XPDT(XPDI) D PNT(FILE)
Q
;
PNT(XPDFIL) ;print
N XPD0,XPDC,XPDDT,XPDE,XPDI,XPDJ,XPDPG,XPDQ,XPDUL,XPDBCS,X
Q:'$D(^XPD(XPDFIL,D0,0)) S XPD0=^(0),XPDPG=1,$P(XPDUL,"-",IOM)="",XPDDT=$$HTE^XLFDT($H,"1PM")
W:$E(IOST,1,2)="C-" @IOF D HDR
W !
S XPDI="",(XPDQ,XPDE)=0
;XPDFIL=9.7 use transport global exists
I XPDFIL=9.7 D
.I '$D(^XTMP("XPDI",D0)) W !!," ** Transport Global doesn't exist **" S XPDQ=1 Q
.;check for missing nodes in transport global
.I '$D(^XTMP("XPDI",D0,"BLD"))="" W !!," **Transport Global corrupted, please reload **" S XPDQ=1 Q
.F XPDC=0:1 S XPDI=$O(^XTMP("XPDI",D0,"RTN",XPDI)) Q:XPDI="" S XPDJ=$G(^(XPDI)) D Q:XPDQ
..I XPDJ="" W !," **Transport Global corrupted, please reload **" S XPDQ=1 Q
..;if deleting at site, there is no checksum
..I +XPDJ=1 S XPDC=XPDC-1 Q
..;if no before checksum, get from FORUM, XPDBCS(routine)=checksum, doesn't work no web service on Forum
..;I $P(XPDJ,U,4)="" D:'$D(XPDBCS) CHKS^XPDIST($P(XPD0,U),.XPDBCS) S $P(XPDJ,U,4)=$G(XPDBCS(XPDI))
..D SUM(XPDI,$NA(^XTMP("XPDI",D0,"RTN",XPDI)),$P(XPDJ,U,3),$P(XPDJ,U,4))
..S XPDQ=$$CHK(4)
;check build file
E D
.F XPDC=0:1 S XPDI=$O(^XPD(9.6,D0,"KRN",9.8,"NM","B",XPDI)) Q:XPDI="" S XPDJ=$O(^(XPDI,0)) D Q:XPDQ
..Q:'$D(^XPD(9.6,D0,"KRN",9.8,"NM",+XPDJ,0)) S XPDJ=$P(^(0),U,4)
..;quit if no checksum, routine wasn't loaded
..I XPDJ="" S XPDC=XPDC-1 Q
..N DIF,XCNP,%N
..S X=XPDI,DIF="^TMP($J,""RTN"",XPDI,",XCNP=0
..X ^%ZOSF("TEST") E W !,XPDI,?10,"Doesn't Exist" Q
..X ^%ZOSF("LOAD")
..D SUM(XPDI,$NA(^TMP($J,"RTN",XPDI)),XPDJ,"")
..S XPDQ=$$CHK(4)
Q:XPDQ
W !!?3,XPDC," Routine"_$S(XPDC>1:"s",1:"")_" checked, ",XPDE," failed.",!
;p345-rename AND* to XPD*-Patch was Cancelled keep code for future.
I $G(XPDAUTO) S XPDCHKSM=XPDE
Q
;
;XPDR=routine name, Z=global root, XPD=check sum, XPDBS=before Checksum from FORUM
SUM(XPDR,Z,XPD,XPDBS) ;check checksum
N Y
;See if we have a before checksum and compare.
I $L(XPDBS) D BEFORE(XPDR,XPDBS)
;first char. is the sum tag used in XPDRSUM
I XPD'?1U1.N W !,XPDR,?10,"ERROR in Checksum" S XPDE=XPDE+1 Q
S @("Y=$$SUM"_$E(XPD)_"^XPDRSUM(Z)"),XPD=$E(XPD,2,255)
I Y=XPD,XPDSHW W !,XPDR,?10,"Calculated "_$J(XPD,10)
I Y'=XPD W !,XPDR,?10,"Calculated "_$C(7)_$J(Y,10)_", expected value "_XPD S XPDE=XPDE+1
Q
;
BEFORE(RN,SUM) ;Check a before Checksum
N DIF,XCNP,%N,X
I SUM'?1U1.N Q
K ^TMP($J,"XPDDCS",RN) ;patch 511
S X=RN,DIF="^TMP($J,""XPDDCS"",RN,",XCNP=0
X ^%ZOSF("TEST") E W !,RN,?10,"Not on current system." Q
X ^%ZOSF("LOAD")
S DIF=$NA(^TMP($J,"XPDDCS",RN))
S @("Y=$$SUM"_$E(SUM)_"^XPDRSUM(DIF)"),SUM=$E(SUM,2,255)
I Y'=SUM W !,RN,?10,"Before Checksum Calculated "_Y_" expected value "_SUM
Q
;
CHK(Y) ;Y=excess lines, return 1 to exit
Q:$Y<(IOSL-Y) 0
I $E(IOST,1,2)="C-" D Q:'Y 1
.N DIR,I,J,K,X
.S DIR(0)="E" D ^DIR
S XPDPG=XPDPG+1
W @IOF D HDR
Q 0
;
HDR W !,"PACKAGE: ",$P(XPD0,U)," ",XPDDT,?70,"PAGE ",XPDPG,!,XPDUL,!
Q
XPDDCS ;SFISC/RSD - Display Checksum for a package ;05/05/2008
+1 ;;8.0;KERNEL;**2,44,108,202,393,511,547**;Jul 10, 1995;Build 16
+2 ;Per VHA Directive 2004-038, this routine should not be modified.
+3 QUIT
EN1 ;Verify checksums in Transport Global
+1 NEW D0,DIC,X,XPD,XPDS,XPDSHW,XPDST,XPDT,Y,Z
+2 ;S DIC="^XPD(9.7,",DIC(0)="AEQMZ",DIC("S")="I $D(^XTMP(""XPDI"",Y))"
+3 ;D ^DIC Q:Y<0
+4 SET XPDS="I $D(^XTMP(""XPDI"",Y))"
+5 SET XPDST=$$LOOK^XPDI1(XPDS)
IF XPDST'>0
QUIT
+6 SET XPDSHW=$$ASK
IF $DATA(DIRUT)
QUIT
+7 SET XPD("XPDT(")=""
SET XPD("XPDST")=""
SET XPD("XPDSHW")=""
SET X="XUTMDEVQ"
+8 ;during Virgin install, XUTMDEVQ might not exists
+9 XECUTE ^%ZOSF("TEST")
IF '$TEST
Begin DoDot:1
+10 SET IOSL=99999
SET IOM=80
SET IOF="#"
SET IOST=""
SET $Y=0
DO LST1(9.7)
End DoDot:1
QUIT
+11 SET Y="LST1^XPDDCS(9.7)"
SET Z="Checksum Print"
+12 ;p345-rename AND* to XPD* - Patch was Cancelled keep code for future.
+13 IF '$GET(XPDAUTO)
DO EN^XUTMDEVQ(Y,Z,.XPD)
+14 IF $GET(XPDAUTO)
SET IO=XPDDEV
USE XPDDEV
DO LST1^XPDDCS(9.7)
+15 QUIT
+16 ;
ASK() ;Ask if want each routine listed
+1 NEW DIR
+2 IF $DATA(XPDAUTO)
QUIT 1
+3 SET DIR(0)="YAO"
SET DIR("A")="Want each Routine Listed with Checksums: "
SET DIR("A",1)=""
SET DIR("B")="Yes"
+4 DO ^DIR
+5 QUIT Y
+6 ;
EN2 ;print from build (system)
+1 NEW D0,DIC,XPD,XPDT,XPDST,Y,Z
+2 ;S DIC="^XPD(9.6,",DIC(0)="AEQMZ"
+3 ;D ^DIC Q:Y<0
+4 SET XPDST=$$LOOK^XPDB1()
IF XPDST'>0
QUIT
+5 SET XPDSHW=$$ASK
IF $DATA(DIRUT)
QUIT
+6 SET XPD("XPDT(")=""
SET XPD("XPDSHW")=""
SET Y="LST1^XPDDCS(9.6)"
SET Z="Checksum Print"
+7 ;p345-rename AND* to XPD*- Patch was Cancelled keep code for future.
+8 IF '$GET(XPDAUTO)
DO EN^XUTMDEVQ(Y,Z,.XPD)
+9 IF $GET(XPDAUTO)
IF '$DATA(XPDDEV)
SET XPDDEV=0
USE XPDDEV
DO LST1^XPDDCS(9.6)
+10 QUIT
+11 ;
LST1(FILE) ;Print group
+1 NEW XPDI
SET XPDI=0
+2 FOR
SET XPDI=$ORDER(XPDT(XPDI))
IF XPDI'>0
QUIT
SET D0=+XPDT(XPDI)
DO PNT(FILE)
+3 QUIT
+4 ;
PNT(XPDFIL) ;print
+1 NEW XPD0,XPDC,XPDDT,XPDE,XPDI,XPDJ,XPDPG,XPDQ,XPDUL,XPDBCS,X
+2 IF '$DATA(^XPD(XPDFIL,D0,0))
QUIT
SET XPD0=^(0)
SET XPDPG=1
SET $PIECE(XPDUL,"-",IOM)=""
SET XPDDT=$$HTE^XLFDT($HOROLOG,"1PM")
+3 IF $EXTRACT(IOST,1,2)="C-"
WRITE @IOF
DO HDR
+4 WRITE !
+5 SET XPDI=""
SET (XPDQ,XPDE)=0
+6 ;XPDFIL=9.7 use transport global exists
+7 IF XPDFIL=9.7
Begin DoDot:1
+8 IF '$DATA(^XTMP("XPDI",D0))
WRITE !!," ** Transport Global doesn't exist **"
SET XPDQ=1
QUIT
+9 ;check for missing nodes in transport global
+10 IF '$DATA(^XTMP("XPDI",D0,"BLD"))=""
WRITE !!," **Transport Global corrupted, please reload **"
SET XPDQ=1
QUIT
+11 FOR XPDC=0:1
SET XPDI=$ORDER(^XTMP("XPDI",D0,"RTN",XPDI))
IF XPDI=""
QUIT
SET XPDJ=$GET(^(XPDI))
Begin DoDot:2
+12 IF XPDJ=""
WRITE !," **Transport Global corrupted, please reload **"
SET XPDQ=1
QUIT
+13 ;if deleting at site, there is no checksum
+14 IF +XPDJ=1
SET XPDC=XPDC-1
QUIT
+15 ;if no before checksum, get from FORUM, XPDBCS(routine)=checksum, doesn't work no web service on Forum
+16 ;I $P(XPDJ,U,4)="" D:'$D(XPDBCS) CHKS^XPDIST($P(XPD0,U),.XPDBCS) S $P(XPDJ,U,4)=$G(XPDBCS(XPDI))
+17 DO SUM(XPDI,$NAME(^XTMP("XPDI",D0,"RTN",XPDI)),$PIECE(XPDJ,U,3),$PIECE(XPDJ,U,4))
+18 SET XPDQ=$$CHK(4)
End DoDot:2
IF XPDQ
QUIT
End DoDot:1
+19 ;check build file
+20 IF '$TEST
Begin DoDot:1
+21 FOR XPDC=0:1
SET XPDI=$ORDER(^XPD(9.6,D0,"KRN",9.8,"NM","B",XPDI))
IF XPDI=""
QUIT
SET XPDJ=$ORDER(^(XPDI,0))
Begin DoDot:2
+22 IF '$DATA(^XPD(9.6,D0,"KRN",9.8,"NM",+XPDJ,0))
QUIT
SET XPDJ=$PIECE(^(0),U,4)
+23 ;quit if no checksum, routine wasn't loaded
+24 IF XPDJ=""
SET XPDC=XPDC-1
QUIT
+25 NEW DIF,XCNP,%N
+26 SET X=XPDI
SET DIF="^TMP($J,""RTN"",XPDI,"
SET XCNP=0
+27 XECUTE ^%ZOSF("TEST")
IF '$TEST
WRITE !,XPDI,?10,"Doesn't Exist"
QUIT
+28 XECUTE ^%ZOSF("LOAD")
+29 DO SUM(XPDI,$NAME(^TMP($JOB,"RTN",XPDI)),XPDJ,"")
+30 SET XPDQ=$$CHK(4)
End DoDot:2
IF XPDQ
QUIT
End DoDot:1
+31 IF XPDQ
QUIT
+32 WRITE !!?3,XPDC," Routine"_$SELECT(XPDC>1:"s",1:"")_" checked, ",XPDE," failed.",!
+33 ;p345-rename AND* to XPD*-Patch was Cancelled keep code for future.
+34 IF $GET(XPDAUTO)
SET XPDCHKSM=XPDE
+35 QUIT
+36 ;
+37 ;XPDR=routine name, Z=global root, XPD=check sum, XPDBS=before Checksum from FORUM
SUM(XPDR,Z,XPD,XPDBS) ;check checksum
+1 NEW Y
+2 ;See if we have a before checksum and compare.
+3 IF $LENGTH(XPDBS)
DO BEFORE(XPDR,XPDBS)
+4 ;first char. is the sum tag used in XPDRSUM
+5 IF XPD'?1U1.N
WRITE !,XPDR,?10,"ERROR in Checksum"
SET XPDE=XPDE+1
QUIT
+6 SET @("Y=$$SUM"_$EXTRACT(XPD)_"^XPDRSUM(Z)")
SET XPD=$EXTRACT(XPD,2,255)
+7 IF Y=XPD
IF XPDSHW
WRITE !,XPDR,?10,"Calculated "_$JUSTIFY(XPD,10)
+8 IF Y'=XPD
WRITE !,XPDR,?10,"Calculated "_$CHAR(7)_$JUSTIFY(Y,10)_", expected value "_XPD
SET XPDE=XPDE+1
+9 QUIT
+10 ;
BEFORE(RN,SUM) ;Check a before Checksum
+1 NEW DIF,XCNP,%N,X
+2 IF SUM'?1U1.N
QUIT
+3 ;patch 511
KILL ^TMP($JOB,"XPDDCS",RN)
+4 SET X=RN
SET DIF="^TMP($J,""XPDDCS"",RN,"
SET XCNP=0
+5 XECUTE ^%ZOSF("TEST")
IF '$TEST
WRITE !,RN,?10,"Not on current system."
QUIT
+6 XECUTE ^%ZOSF("LOAD")
+7 SET DIF=$NAME(^TMP($JOB,"XPDDCS",RN))
+8 SET @("Y=$$SUM"_$EXTRACT(SUM)_"^XPDRSUM(DIF)")
SET SUM=$EXTRACT(SUM,2,255)
+9 IF Y'=SUM
WRITE !,RN,?10,"Before Checksum Calculated "_Y_" expected value "_SUM
+10 QUIT
+11 ;
CHK(Y) ;Y=excess lines, return 1 to exit
+1 IF $Y<(IOSL-Y)
QUIT 0
+2 IF $EXTRACT(IOST,1,2)="C-"
Begin DoDot:1
+3 NEW DIR,I,J,K,X
+4 SET DIR(0)="E"
DO ^DIR
End DoDot:1
IF 'Y
QUIT 1
+5 SET XPDPG=XPDPG+1
+6 WRITE @IOF
DO HDR
+7 QUIT 0
+8 ;
HDR WRITE !,"PACKAGE: ",$PIECE(XPD0,U)," ",XPDDT,?70,"PAGE ",XPDPG,!,XPDUL,!
+1 QUIT