Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ZZRCSUM

ZZRCSUM.m

Go to the documentation of this file.
ZZRCSUM	;EIE/HSED/mw - adhoc routine checksum comparison utility; 08/13/09
	;;1.5;EIE/HSED Research Utility; August 04, 2009
	;
	; menu...
	F  D  Q:$D(DIRUT)
	.W !!,"Routine Set Checksum Comparison Utility"
	.W !,"This configuration is: ",$P($ZU(86),"*",2)
	.W !,"This UCI is          : ",$ZU(5)
	.S DIR(0)="NAO^1:4"
	.S DIR("A")="Select OPTION NUMBER: "
	.S DIR("A",1)=" [1] Build Master Routine Set"
	.S DIR("A",2)=" [2] Build Comparison Routine Set"
	.S DIR("A",3)=" [3] Report Comparison Results"
	.S DIR("A",4)=" [4] Exit"
	.S DIR("A",5)=" "
	.S DIR("?")="^D HELP^ZZRCSUM"
	.W !
	.D ^DIR K DIR Q:$D(DIRUT)
	.I Y=4 S DIRUT=1 Q
	.S ZZOPT=Y
	.I ZZOPT=1 D GETBASE
	.I ZZOPT=2 D GETCOMP
	.I ZZOPT=3 D REPORT
	.K ZZOPT
	K DIRUT,DTOUT,X,Y,ZZOPT
	Q
	;
GETBASE	; collect master routine set...
	N DIRUT,DTOUT,X,Y
	I $D(^XTMP("HSED","MASTER_RSET")) D  I $D(DIRUT) Q
	.W !!,"CAUTION!"
	.W !,"The baseline routine set global appears to be already"
	.W !,"set in this UCI.  If you continue, I will delete the"
	.W !,"existing baseline routine set global."
	.S DIR(0)="YA"
	.S DIR("A")="Are you sure you wish to continue (Y/N)? "
	.W !
	.D ^DIR K DIR Q:$D(DIRUT)
	.I Y=0 D  Q
	..W !,"build of master routine set aborted"
	..S DIRUT=1
	; okay to continue...
	W !!,"Step 1: Initial routine selection"
	X ^%ZOSF("RSEL")
	I +$G(^UTILITY($J,0))=0 W !!,"No routines were found in this UCI!" Q
	;
	; move routine set to ^XTMP("HSED","MASTER_RSET",...), screening out Cache
	; routines beginning with "%SYS."...
	I $G(^XTMP("HSED",0))="" S ^XTMP("HSED",0)="3100101^3100101^HSED Research Utility"
	K ^XTMP("HSED","MASTER_RSET")
	; set initial routine count...
	S ^XTMP("HSED","MASTER_RSET",0)=+$G(^UTILITY($J,0))
	W !!,"Step 2: Create master routine set"
	W !,"Creating master routine set in ^XTMP(""HSED"",""MASTER_RSET"")."
	W !,"Note:  screening out %SYS.* routines, and verifying routines in the"
	W !,"       initial selection list actually exist in this UCI.  The routine"
	W !,"       count after this procedure may be different than reported above."
	S ROU="",RCT=+$G(^XTMP("HSED","MASTER_RSET",0))
	F  S ROU=$O(^UTILITY($J,ROU)) Q:ROU=""  D
	.I $E(ROU,1.5)="%SYS." S RCT=RCT-1 Q
	.S X=ROU
	.X ^%ZOSF("TEST")
	.I '$T S RCT=RCT-1 Q
	.S ^XTMP("HSED","MASTER_RSET",ROU)=""
	W !,"After screening and verifying, routine count = ",RCT
	S ^XTMP("HSED","MASTER_RSET",0)=RCT
	K RCT,ROU,^UTILITY($J)
	W !!,"Step 3: Compute checksums"
	W !,"Computing checksums for ",+$G(^XTMP("HSED","MASTER_RSET",0))," routines",!
	D CHKSUM("MASTER_RSET")
	W !,"All done."
	Q
	;
GETCOMP	; collect comparison routine set...
	N DIRUT,DTOUT,X,Y
	I $D(^XTMP("HSED","COMPARE_RSET")) D  I $D(DIRUT) Q
	.W !!,"CAUTION!"
	.W !,"The comparison routine set global appears to be already"
	.W !,"set in this UCI.  If you continue, I will delete the"
	.W !,"existing comparison routine set global."
	.S DIR(0)="YA"
	.S DIR("A")="Are you sure you wish to continue (Y/N)? "
	.W !
	.D ^DIR K DIR Q:$D(DIRUT)
	.I Y=0 D  Q
	..W !,"build of comparison routine set aborted"
	..S DIRUT=1
	; okay to continue...
	W !!,"Step 1: Initial routine selection"
	X ^%ZOSF("RSEL")
	I +$G(^UTILITY($J,0))=0 W !!,"No routines were found in this UCI!" Q
	;
	; move routine set to ^XTMP("HSED","COMPARE_RSET",...), screening out Cache
	; routines beginning with "%SYS."...
	I $G(^XTMP("HSED",0))="" S ^XTMP("HSED",0)="3100101^3100101^HSED Research Utility"
	K ^XTMP("HSED","COMPARE_RSET")
	; set initial routine count...
	S ^XTMP("HSED","COMPARE_RSET",0)=+$G(^UTILITY($J,0))
	W !!,"Step 2: Create comparison routine set"
	W !,"Creating comparison routine set in ^XTMP(""HSED"",""COMPARE_RSET"")."
	W !,"Note:  screening out %SYS.* routines, and verifying routines in the"
	W !,"       initial selection list actually exist in this UCI.  The routine"
	W !,"       count after this procedure may be different than reported above."
	S ROU="",RCT=+$G(^XTMP("HSED","COMPARE_RSET",0))
	F  S ROU=$O(^UTILITY($J,ROU)) Q:ROU=""  D
	.I $E(ROU,1.5)="%SYS." S RCT=RCT-1 Q
	.S X=ROU
	.X ^%ZOSF("TEST")
	.I '$T S RCT=RCT-1 Q
	.S ^XTMP("HSED","COMPARE_RSET",ROU)=""
	W !,"After screening and verifying, routine count = ",RCT
	S ^XTMP("HSED","COMPARE_RSET",0)=RCT
	K RCT,ROU,^UTILITY($J)
	W !!,"Step 3: Compute checksums"
	W !,"Computing checksums for ",+$G(^XTMP("HSED","COMPARE_RSET",0))," routines",!
	D CHKSUM("COMPARE_RSET")
	W !,"All done."
	Q
	;
REPORT	; report comparison results...
	W !!,"Routine Set Checksum Comparison -- Results"
	N CCT,MCT,NIMCT,RCT
	S CCT=+$G(^XTMP("HSED","COMPARE_RSET",0))
	S MCT=+$G(^XTMP("HSED","MASTER_RSET",0))
	W !!,"Routine count in MASTER  = ",$J(MCT,10)
	W !,"Routine count in COMPARE = ",$J(CCT,10)
	W !,"Difference               = ",$J($$DIFF(MCT,CCT),10)
	;
	; first pass -- use "MASTER_RSET" and check to see that all routines
	; in the master are present in the compare...
	W !!,"Verifying all MASTER SET routines are present in COMPARE SET."
	W !,"Routines listed below are in the MASTER SET, but NOT in the"
	W !,"COMPARE SET...",!
	S ROU=" ",RCT=0
	F  S ROU=$O(^XTMP("HSED","MASTER_RSET",ROU)) Q:ROU=""  D
	.I $D(^XTMP("HSED","COMPARE_RSET",ROU)) Q
	.W ROU,?$X+(10-$L(ROU))
	.I $X>70 W !
	.S RCT=RCT+1
	W !!,RCT," routine",$S(RCT=0:"s",RCT>1:"s",1:"")," in the MASTER SET were NOT found in the COMPARE SET."
	K RCT,ROU
	;
	W !!,"Comparing checksums:  COMPARE SET to MASTER SET..."
	S ROU=" ",(NIMCT,RCT)=0
	F  S ROU=$O(^XTMP("HSED","COMPARE_RSET",ROU)) Q:ROU=""  D
	.I '$D(^XTMP("HSED","MASTER_RSET",ROU)) D  Q
	..;W !,ROU,?12,"--",?24,"not in MASTER SET"
	..S NIMCT=NIMCT+1
	.S CVAL=^XTMP("HSED","COMPARE_RSET",ROU)
	.S MVAL=^XTMP("HSED","MASTER_RSET",ROU)
	.I CVAL=MVAL K CVAL,MVAL Q
	.W !!,"Routine",?12,"Master Set",?24,"Compare Set"
	.W !,ROU,?12,MVAL,?24,CVAL
	.W !,"First 2 lines of master routine:"
	.F I=1:1:2 W !,$G(^XTMP("HSED","MASTER_RSET",ROU,I))
	.W !,"First 2 lines of ompare routine:"
	.F I=1:1:2 W !,$G(^XTMP("HSED","COMPARE_RSET",ROU,I))
	.S RCT=RCT+1
	.K CVAL,MVAL
	K ROU
	W !!,"Summary"
	I RCT>0 W !!,RCT," routines with different checksums than the MASTER SET were found."
	I RCT=0 W !!,"No checksum differences were found."
	I NIMCT>0 W !,NIMCT," routines in this UCI were not found in the MASTER SET."
	I NIMCT=0 W !,"Both MASTER and COMPARE contain the same routines -- the sets are identical."
	W !!,"**END REPORT**",!!
	Q
	;
CHKSUM(RSET)	; compute checksums for routines in RSET...
	; RSET = either MASTER_RSET or COMPARE_RSET
	; returns nothing -- computes checksum using ^%ZOSF("RSUM") and stores
	; value at ^XTMP("HSED",<RSET>,<routine name>)=checksum value
	N I,ROU,X,XCNP,Y,ZZRL,ZZRLL
	S ZZRL="N %,%N S %N=0 X ""ZL @X F XCNP=XCNP+1:1:2 S %N=%N+1,%=$T(+%N) Q:$L(%)=0  S @(DIF_XCNP_"""",0)"""")=%"""
	S ROU=" "
	F  S ROU=$O(^XTMP("HSED",RSET,ROU)) Q:ROU=""  D
	.S X=ROU
	.X ^%ZOSF("RSUM")
	.S ^XTMP("HSED",RSET,ROU)=Y
	.; retrieve and store the first two lines of the routine...
	.K ZZRLL
	.S XCNP=0,DIF="ZZRLL("
	.X ZZRL
	.F I=1:1:2 S ^XTMP("HSED",RSET,ROU,I)=$G(ZZRLL(I,0))
	Q
	;
DIFF(V1,V2)	; compute difference between two values...
	; V1 and V2 are numeric values
	; returns difference (non-negative value) between V1 and V2
	I $G(V1)=""!($G(V2)="") Q 0
	I +V2>+V1 Q +V2-+V1
	Q +V1-+V2
	;
HELP	; help for menu option selection...
	W !!,"Master routine set is the set which will contain the routines"
	W !,"and checksum values that will be used to compare against a"
	W !,"routine set from another UCI.  This is the master routine set"
	W !,"and checksum values."
	W !!,"Comparison routine set is the set which contains the routines"
	W !,"in a UCI that will be compared against the master routine set."
	W !!,"The report option provides a list of routines in the current"
	W !,"UCI that either don't exist in the master, or have different"
	W !,"checksum values than the value computed for a given routine in"
	W !,"the master routine set."
	W !!,"Note:  ^%ZOSF(""RSUM"") is used to compute checksum values."
	Q