- XPDANLYZ2 ;OAK/RSF- BUILD ANALYZER ;10/28/22
- ;;8.0;KERNEL;**782,792**;Jul 10, 1995;Build 4
- ;;Per VHA Directive 2004-038, this routine should not be modified.
- ;
- XREF ;XREF
- Q:'FXX
- S XPDARR("FILE",FXX,"XREF")="No"
- I $D(^DD(FXX,0,"IX")) D
- . S XPDARR("FILE",FXX,"XREF")="Yes"
- . N JJ,LL,MM,RSF S JJ="",(LL,MM)=0 F S JJ=$O(^DD(FXX,0,"IX",JJ)) Q:$G(JJ)']"" F S LL=$O(^DD(FXX,0,"IX",JJ,LL)) Q:'$G(LL) D
- .. F S MM=$O(^DD(FXX,0,"IX",JJ,LL,MM)) Q:'$G(MM) D
- ... Q:(JJ="B") ;&(MM=.01)
- ... N PP S PP=0,RSF="field" F S PP=$O(^DD(LL,MM,1,PP)) Q:'PP S:LL'=FXX RSF="subfield " D
- .... I JJ=$P(^DD(LL,MM,1,PP,0),"^",2),'$D(^DD(LL,MM,1,PP,"%D")) S XPDARR("FILE",FXX,MM,"WARNING","XREF")=$P(^DD(LL,MM,1,PP,0),"^",2)_" cross-reference ("_RSF_" #"_MM_") - DESCRIPTION missing."
- Q
- ;
- ;OPTION
- OPTME ;Option Analysis called from START^XPDANLYZ1
- N XPDOARR,KK S KK=0 ;XPDRC=2 IS OPTION
- N DIRUT,Y K DIR S DIR(0)="YO",DIR("A")="Do you want to analyze all options for a namespace"
- S DIR("?")="Will use a range of options whose name starts with a series of letters - usually the namespace (i.e. TIU)"
- D ^DIR I $D(DIRUT) S END=1 Q
- N XPDY S XPDY=Y
- G1 I XPDY=0 W ! D
- . N DIC,Y S DIC=19,DIC(0)="QEAM",DIC("A")="Select individual options by name: "
- . D ^DIC I Y=-1 K DIC S XPDY=99,END=1 Q
- . ;I $D(DUOUT) K DIC Q ;-1 LIKE ABOVE
- . I $D(DTOUT) S XPDY=99,END=1 Q
- . I $G(Y)]"" S XPDOARR($P(Y,"^"))=$P(Y,"^",2),KK=KK+1 ;OPTION ien ^ NAME
- G:XPDY=0 G1
- I XPDY=1 N XPDPKG,XPDPKGL D G:END X1^XPDANLYZ1
- . W ! N DIRUT K DIR S DIR(0)="FO^2:10",DIR("?")="Enter the Package for the options to include"
- . S DIR("A")="Enter the package abbreviation or leading characters of options to include"
- . D ^DIR
- . I $D(DIRUT) S END=1 Q
- . I $G(Y)]"" S XPDPKG=$$UP^XLFSTR(Y),XPDPKGL=$L(XPDPKG) Q:'$G(XPDPKGL) ;** CONFRIM ALL SHOULD BE UPPERCASE
- . N JJ S JJ="",KK=0 F S JJ=$O(^DIC(19,"B",JJ)) Q:$G(JJ)']"" I $E(JJ,1,XPDPKGL)=XPDPKG S XPDOARR($O(^DIC(19,"B",JJ,0)))=JJ,KK=KK+1
- I $G(KK)>1 D
- . W !!,"Will check these ",KK," options:"
- . N JJ S JJ=0 F S JJ=$O(XPDOARR(JJ)) Q:'JJ W !,?5,XPDOARR(JJ) I ($Y+5)>IOSL D HDR^XPDANLYZ1("Options (continued): ") Q:END
- . W !!,?5,",, WORKING .."
- I $D(XPDOARR) D OCHK(.XPDOARR)
- Q
- OCHK(XPDORR) ;setting up information to check OPTIONS ENTRY/EXIT for files and routines.
- N JJ,XPDIENS S JJ=0 F S JJ=$O(XPDORR(JJ)) Q:'JJ D
- . N TARR S XPDIENS=JJ_"," D GETS^DIQ(19,XPDIENS,"**","N","TARR") I $D(TARR) D
- .. S XPDARR("OPTION",JJ,"NAME")=XPDORR(JJ)
- .. I '$D(TARR(19,XPDIENS,3.5)) S XPDARR("OPTION",JJ,"DESCRIPT")="No",XPDARR("OPTION",JJ,"WARNING","DESCRIPTION")="DESCRIPTION field (#3.5) missing."
- .. I $D(TARR(19,XPDIENS,3.5)) S XPDARR("OPTION",JJ,"DESCRIPT")="Yes" N LL S LL=0 F S LL=$O(TARR(19,XPDIENS,3.5,LL)) Q:'LL S XPDARR("OPTION",JJ,"DESCRIPTION",LL)=TARR(19,XPDIENS,3.5,LL)
- .. I $D(TARR(19,XPDIENS,1)) S XPDARR("OPTION",JJ,"Menu")=TARR(19,XPDIENS,1)
- .. I '$D(TARR(19,XPDIENS,1)) S XPDARR("OPTION",JJ,"WARNING","MENU TXT")="MENU TEXT field (#1) missing."
- .. I '$D(TARR(19,XPDIENS,12)) S XPDARR("OPTION",JJ,"WARNING","PKG")="PACKAGE field (#12) missing."
- .. I $D(TARR(19,XPDIENS,12)) S XPDARR("OPTION",JJ,"PKG")=TARR(19,XPDIENS,12)
- .. ; 25 IS ROUTINE AND IS TAG^ROUTINE
- .. I $D(TARR(19,XPDIENS,25)) N TT,RR S TT=$L(TARR(19,XPDIENS,25),"^") Q:$G(TT)']"" S RR=$P(TARR(19,XPDIENS,25),"^",TT) S:RR["(" RR=$P(RR,"(") D
- ... S XPOPT(JJ,"ROU",RR)="ROUTINE field(#25):"
- ... ;S XPDARR("OPTION",JJ,"WARNING",RR)="Calls routine "_RR_" not found in build"
- ... ;I $E(RR,1,$L(XPDSPC))'=XPDSPC S XPDARR("OPTION",JJ,"WARNING",RR_"Z")="Calls routine "_RR_" not in patch namespace."
- Q:XPDRC=4
- S XPDCS("OPTION")=19
- OPX K DIC Q
- ;
- RPCHK ; RPC Analysis called XPDANLYZ1
- N XPDCARR,KK S KK=0 ;XPDRC=4 IS RPC
- N DIRUT K DIR S DIR(0)="YO",DIR("A")="Do you want to analyze all RPCs for a namespace"
- S DIR("?")="Will use a range of RPCs whose name starts with a series of letters - usually the namespace (i.e. TIU)"
- D ^DIR I $D(DIRUT) S END=1 Q
- N XPDY S XPDY=Y
- RPC1 I XPDY=0 W ! D
- . N DIC S DIC=8994,DIC(0)="QEAM",DIC("A")="Select individual RPCs by name: "
- . D ^DIC I Y=-1 K DIC S XPDY=99 Q
- . I $D(DTOUT) S XPDY=99 Q
- . I $G(Y)]"" S XPDCARR($P(Y,"^"))=$P(Y,"^",2),KK=KK+1 ;RPC ien ^ NAME
- G:XPDY=0 RPC1
- I XPDY=1 N XPDPKG,XPDPKGL D G:END X1^XPDANLYZ1
- . W ! N DIRUT K DIR S DIR(0)="FO^2:10",DIR("?")="Enter the Package for the RPCs"
- . S DIR("A")="Enter the package abbreviation or leading characters of RPCs to include"
- . D ^DIR
- . I $D(DIRUT) Q
- . I $G(Y)]"" S XPDPKG=$$UP^XLFSTR(Y),XPDPKGL=$L(XPDPKG) Q:'$G(XPDPKGL) ;** CONFRIM ALL SHOULD BE UPPERCASE
- . N JJ S JJ="",KK=0 F S JJ=$O(^XWB(8994,"B",JJ)) Q:$G(JJ)']"" I $E(JJ,1,XPDPKGL)=XPDPKG S XPDCARR($O(^XWB(8994,"B",JJ,0)))=JJ,KK=KK+1
- I $G(KK)>1 D
- . W !!,"Will check these ",KK," Remote Procedure Calls"
- . N JJ S JJ=0 F S JJ=$O(XPDCARR(JJ)) Q:'JJ W !,?5,XPDCARR(JJ) I ($Y+5)>IOSL D HDR^XPDANLYZ1("RPC (continued): ") Q:END
- . W !!,?5,",, WORKING .."
- I $D(XPDCARR) D RPC2(.XPDCARR)
- Q
- RPC2(XPDRPC) ;^XWB(8994,; Remote Procedure check
- Q:'$D(XPDRPC)
- N JJ,XPDIENS S JJ=0 F S JJ=$O(XPDRPC(JJ)) Q:'JJ D
- . N TARR S XPDIENS=JJ_"," D GETS^DIQ(8994,XPDIENS,"**","NR","TARR") I $D(TARR) D
- .. S XPDARR("REMOTE PROCEDURE",JJ,"NAME")=XPDRPC(JJ)
- .. I '$D(TARR(8994,XPDIENS,"DESCRIPTION")) S XPDARR("REMOTE PROCEDURE",JJ,"DESCRIPT")="No",XPDARR("REMOTE PROCEDURE",JJ,"WARNING","DESCRIPTION")="DESCRIPTION field (#1) missing."
- .. I $D(TARR(8994,XPDIENS,"DESCRIPTION")) S XPDARR("REMOTE PROCEDURE",JJ,"DESCRIPT")="Yes" N LL S LL=0 F S LL=$O(TARR(8994,XPDIENS,"DESCRIPTION",LL)) Q:'LL S XPDARR("REMOTE PROCEDURE",JJ,"DESCRIPTION",LL)=TARR(8994,XPDIENS,"DESCRIPTION",LL)
- .. ;RETURN PARAMETERS
- .. I $D(TARR(8994,XPDIENS,"RETURN VALUE TYPE")),'$D(TARR(8994,XPDIENS,"RETURN PARAMETER DESCRIPTION")) S XPDARR("REMOTE PROCEDURE",JJ,"WARNING","RETURN DESCRIPTION")="RPC RETURN DESCRIPTION field (#3) missing."
- .. ;INPUT
- .. I $D(^XWB(8994,JJ,2,0)) N XPDIP S XPDIP=$P(^XWB(8994,JJ,2,0),"^",4) Q:$G(XPDIP)<1 D
- ... N MM F MM=1:1:XPDIP I '$D(TARR(8994.02,MM_","_XPDIENS,"DESCRIPTION")) N LL D ;p792
- .... S LL=MM I '$D(TARR(8994.02,MM_","_XPDIENS)) S LL=$P($O(TARR(8994.02,MM_","_XPDIENS)),",") S:LL="" LL=MM I $D(TARR(8994.02,LL_","_XPDIENS,"DESCRIPTION")) Q
- .... S XPDARR("REMOTE PROCEDURE",JJ,"WARNING","INPUT DESCRIPTION")="RPC Input Description for "_$G(TARR(8994.02,LL_","_XPDIENS,"INPUT PARAMETER"))_" missing."
- .. I $D(TARR(8994,XPDIENS,"ROUTINE")) N RRR S RRR=TARR(8994,XPDIENS,"ROUTINE") D
- ... S XPDARR("REMOTE PROCEDURE",JJ,"ROUTINE",RRR)="Routine field (#.03): Calls "_RRR_" not found in build."
- ... ;I $E(RRR,1,$L(XPDSPC))'=XPDSPC S XPDARR("REMOTE PROCEDURE",JJ,"WARNING",RRR_"Z")="Routine field (#.03): Calls "_RRR_" not in patch namespace."
- Q:XPDRC=4
- S XPDCS("REMOTE PROCEDURE")=8994
- RPCX K DIC Q
- ;
- SQA(RR) ;Sets SQA CL array XPDARRR
- S XPDARRR("////",RR,0)=""
- S XPDARRR("DIC(0)",RR,0)=""
- S XPDARRR("^UTILITY",RR,0)=""
- S XPDARRR("^TMP",RR,0)=""
- S XPDARRR("^XTMP",RR,0)=""
- S XPDARRR("%",RR,0)=""
- S XPDARRR("$I",RR,0)=""
- S XPDARRR("U=",RR,0)=""
- S XPDARRR("K ^",RR,0)=""
- S XPDARRR("K:",RR,0)=""
- S XPDARRR("K @",RR,0)=""
- S XPDARRR("^(",RR,0)=""
- S XPDARRR("IO",RR,0)=""
- Q
- ;
- FMSG(XPDBT) ;
- N XPDUZ S XPDUZ=$G(DUZ) Q:'$G(DUZ)
- K ^TMP("XPDEM",$J)
- N XMCRIT S XMCRIT("SUBJ")=XPDBT
- D LISTMSGS^XMXAPIB(XPDUZ,"*","SUBJ;DATE;F","B",,,.XMCRIT,"^TMP(""XPDEM"",$J)")
- I $D(^TMP("XPDEM",$J)) D
- . N JKL,XPDNIEN S JKL=$O(^TMP("XPDEM",$J,"XMLIST",0)) Q:'$G(JKL) S XPDNIEN=^TMP("XPDEM",$J,"XMLIST",JKL)
- . ;W !,XPDNIEN
- . N XPDMTXT,XPD,XEND S XPD=$$GET1^DIQ(3.9,288988_",",3,"","XPDMTXT"),XEND=0
- . Q:'$D(XPDMTXT) Q:'$D(XPDMTXT(.006))
- . ; NOT SURE THIS IS CONSISTENT...Q:XPDMTXT(.006)'["FORUM"
- . W !!,"Description from FORUM patch:",!
- . S JKL=.9 F S JKL=$O(XPDMTXT(JKL)) Q:('$G(JKL))!(+$G(XEND))!(XPDMTXT(JKL)="Packman Mail Message:") D Q:+$G(XEND)
- .. I XPDMTXT(JKL)="$END TXT" S XEND=1 Q
- .. W !,XPDMTXT(JKL)
- Q
- ;
- COMP1 ;SETS THE COMPONENTS USED BY BUILD PROGRAM From <https://www.domain.ext/vdl/documents/Infrastructure/Kernel/krn8_0dg.docx>
- S XPDCS("APPLICATION ACTION")=1.61
- S XPDCS("BULLETIN")=3.6
- S XPDCS("DIALOG")=.84
- S XPDCS("ENTITY")=1.5
- S XPDCS("FORM")=.403
- S XPDCS("FUNCTION")=.5
- S XPDCS("HELP FRAME")=9.2
- S XPDCS("HL7 APPLICATION PARAMETER")=771
- S XPDCS("HLO APPLICATION REGISTRY")=779.2
- S XPDCS("HL LOGICAL LINK")=870
- ;S XPDCS("HL LOWER LEVEL PROTOCOL")=""
- S XPDCS("INPUT TEMPLATE")=.402
- S XPDCS("LIST TEMPLATE")=409.61
- S XPDCS("MAIL GROUP")=3.8
- S XPDCS("OPTION")=19
- S XPDCS("PARAMETER DEFINITION")=8989.51
- S XPDCS("PARAMETER TEMPLATE")=8989.52
- S XPDCS("POLICY")=1.6
- S XPDCS("POLICY FUNCTION")=1.62
- S XPDCS("PRINT TEMPLATE")=.4
- S XPDCS("PROTOCOL")=101
- S XPDCS("REMOTE PROCEDURE")=8994
- S XPDCS("ROUTINE")=9.8
- S XPDCS("SECURITY KEY")=19.1
- S XPDCS("SORT TEMPLATE")=.401
- S XPDCS("XULM LOCK DICTIONARY")=8993
- Q
- ;
- RLINES ;CAPTURES ROUTINE INFO; XPDSQA ARRAY OF SQA ROUTINE LINES
- N JJ,X,RTN,ROU,DIF,XCNP,XPDARRR,XPDPNUM,PNUM,XPCNT,X2,BROU S XPDPNUM=$P(XPDARR("BUILD",XPDBIEN,"NAME"),"*",3),PNUM="",XPCNT=5,XPTL=0
- N TCNT S (JJ,TCNT)=0 F S JJ=$O(XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ)) Q:'JJ S ROU=XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ) D
- . S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=""
- . I ROU'=$$UP^XLFSTR(ROU) S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* NAME (#.01) must be in UPPERCASE." ;ROU
- . D SQA^XPDANLYZ2(JJ) ;SETS SQA CL ARRAY XPDARRR
- . D RSPELL(ROU) ;SETS SPELL CHECK ARRAY XPRSPL
- . ;I $E(ROU,1,$L(XPDSPC))'=XPDSPC S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* "_ROU_" is not in the Package namespace."
- . I '$$NSPACE^XPDANLYZ6(ROU) S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* "_ROU_" is not in the Package namespace."
- . N XRIEN S XRIEN=$O(^DIC(9.8,"B",ROU,0)) Q:'XRIEN D
- .. N XPDINX S XPDINX=$$GET1^DIQ(9.8,XRIEN_",",1.4)
- .. I XPDINX]"" S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* Date of Last ^XINDEX: "_XPDINX
- .. I XPDINX']"" S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* Date ^XINDEX last run was not found."
- . N X S X=ROU X ^%ZOSF("TEST") Q:'$T
- . K RTN S XCNP=0,DIF="RTN(" X ^%ZOSF("LOAD")
- . N K,SQAC,ZTAG,TCHK S (TCHK,K)=0 F S K=$O(RTN(K)) Q:'K D
- .. I $E(RTN(K,0),1)'=" " S ZTAG=$P($P(RTN(K,0)," "),"(")_"^"_K I $L($P(ZTAG,"^"))>XPTL S XPTL=$L($P(ZTAG,"^"))
- .. I K=1 S XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,1)=RTN(K,0) Q
- .. I K=2 D
- ... S XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,2)=RTN(K,0)
- ... N QL S PNUM=$P(RTN(K,0),"**",2),X2=","_PNUM_",",QL=$L(PNUM,",") I $P(PNUM,",",QL)'=XPDPNUM S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* Missing current patch number on second line."
- ... ;D BCHK^XPDANLYZ3(ROU) I $D(BROU(ROU)) D ;RESOURCE INTENSIVE FOR LITTLE USEFUL INFO
- ... ;. S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* BUILD file also lists this routine in these patches:"
- ... ;. S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=BROU(ROU)
- .. I K=3,$E(RTN(K,0),1,6)[";",$L(RTN(K,0))>3,$E(RTN(K,0),1)'?1U S XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,3)=RTN(K,0) ;,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,4)="" Q
- .. I K>3,$TR($E(RTN(K,0),1,10)," ",".")?."."1";".E Q ;QUITS IF BEGINS WITH SPACES OR SPACES AND .. FOLLOWED BY ";"
- .. N XPD1,EXT S XPD1=" ",EXT=0 F S XPD1=$O(XPDARRR(XPD1)) Q:$G(XPD1)']"" D
- ... N TAGME S TAGME=$P(ZTAG,"^")_" +"_(K-$P(ZTAG,"^",2))
- ... I XPD1="K:",RTN(K,0)[XPD1 D KCOLON^XPDANLYZ5(RTN(K,0)) Q
- ... Q:EXT
- ... I XPD1="^XTMP",RTN(K,0)[XPD1 D TMPX^XPDANLYZ5(RTN(K,0)) I 'XPDIS2 Q:TCHK ;TMPX^ZZSRABA
- ... I XPD1="^TMP",'XPDIS2,RTN(K,0)[XPD1 D TMP^XPDANLYZ5(RTN(K,0)) I 'XPDIS2 Q:TCHK
- ... I (XPD1="K ^"),'XPDIS2,RTN(K,0)[XPD1 S TCHK=$$KCHK^XPDANLYZ5(RTN(K,0),XPD1) Q:TCHK'=3
- ... I (XPD1="%"),'XPDIS2,RTN(K,0)[XPD1 S TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1) Q:'TCHK ;$$GCHK^XPDANLYZ5(RTN(K,0),XPD1) D
- ... I (XPD1="IO"),'XPDIS2,RTN(K,0)[XPD1 S TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1) Q:'TCHK
- ... I (XPD1="$I"),'XPDIS2,RTN(K,0)[XPD1 S TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1) Q:'TCHK
- ... I (XPD1="DIC(0)"),'XPDIS2,RTN(K,0)[XPD1 S TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1) Q:'TCHK
- ... I XPD1="U=",'XPDIS2,(RTN(K,0)["U=""^""")!(RTN(K,0)'?.E1P1"U=") Q
- ... I RTN(K,0)[XPD1 S XPDSQA(ROU,XPD1,K,TAGME)=RTN(K,0) I XTOG S:XPDARRR(XPD1,JJ,0)]"" XPDARRR(XPD1,JJ,0)=XPDARRR(XPD1,JJ,0)_" "_K_"," S:XPDARRR(XPD1,JJ,0)']"" XPDARRR(XPD1,JJ,0)="Lines: "_K_","
- . I XTOG D
- .. S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* The SQA Checklist identifies the following specific code "
- .. S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=" references to check in this routine:",SQAC=XPCNT
- .. N MM S MM=" " F S MM=$O(XPDARRR(MM)) Q:MM']"" D
- ... I XPDARRR(MM,JJ,0)]"" S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=$J(MM,8)_$J(" ",5)_$$TRIM^XLFSTR(XPDARRR(MM,JJ,0),"R",",")
- ... I $L(XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT))>73 D CUT^XPDANLYZ3
- .. S:SQAC=XPCNT XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=$J(" ",2)_"- No specific code references from the SQA Checklist were found."
- . S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=" "
- . S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=$$CJ^XLFSTR("<><><>",50)
- Q
- RSPELL(ROU) ;FIND TEXT IN ROUTINE BETWEEN QUOTES and after ";;"
- N X S X=ROU X ^%ZOSF("TEST") Q:'$T
- K RTN S XCNP=0,DIF="RTN(" X ^%ZOSF("LOAD")
- N K,CNT S (CNT,K)=0 F S K=$O(RTN(K)) Q:'K D
- . I RTN(K,0)[$C(34) N I,XTXT,TMP S TMP=RTN(K,0) F I=2:2:$L(TMP) D
- .. I $TR($E(TMP,1,10)," ",".")?."."1";".E Q ;DO NOT LOOK AT LINE THAT BEGINS WITH ';'
- .. S XTXT=$$TRIM^XLFSTR($P(TMP,$C(34),I)) I $L(XTXT)>2,XTXT?.E3A.E D
- ... I $L(XTXT)>14,XTXT'[$C(32) Q ;QUIT IF 15 OR MORE CHARACTERS WITHOUT A SPACE...PROBABLY CODE.
- ... I XTXT[("I "_$P(XTXT," ",2)) Q ;IF STATEMENT, NOT FOR SPELL CHECK
- ... N J,CLTXT S CLTXT="" I XTXT'[$C(32) Q:$E(XTXT,$L(XTXT))="(" F J=1:1:$L(XTXT) S:$E(XTXT,J)?1A CLTXT=CLTXT_$E(XTXT,J)
- ... I CLTXT]"" I $L(XTXT)>(2*$L(CLTXT)) Q ;NUMBER,PUNCUATION, FEW LETTERS
- ... Q:TMP[("("_$C(34)_XTXT) Q:TMP[("$J,"_$C(34)_XTXT) Q:TMP[(XTXT_$C(34)_",$J")
- ... Q:TMP[("DIC="_$C(34)_XTXT) Q:TMP[("DIC(0)="_$C(34)_XTXT) Q:TMP[("DR="_$C(34)_XTXT) Q:TMP[("DIE="_$C(34)_XTXT) Q:TMP[("DIC(""S"")="_$C(34)_XTXT)
- ... S XTXT=$J(K,3)_": "_XTXT S:$L(XTXT)<81 CNT=CNT+1,XPRSPL(ROU,CNT)=XTXT
- ... I $L(XTXT)>80 N L1,L2 S L1="",L2="" D LWRAP(XTXT,($L($P(XTXT,":"))+2)) S:L1]"" CNT=CNT+1,XPRSPL(ROU,CNT)=L1 S:L2]"" CNT=CNT+1,XPRSPL(ROU,CNT)=L2
- . I K>2,RTN(K,0)[";;" Q:RTN(K,0)[$C(34)_";;"_$C(34) Q:$L(RTN(K,0))<5 N XPT81 S XPT81=$J(K,3)_": "_$P(RTN(K,0),";;",2,99) D
- .. S:$L(XPT81)<81 CNT=CNT+1,XPRSPL(ROU,CNT)=XPT81 I $L(XPT81)>80 D
- ... N L1,L2 S L1="",L2="" D LWRAP(XPT81,($L($P(XPT81,":"))+2)) S:L1]"" CNT=CNT+1,XPRSPL(ROU,CNT)=L1 S:L2]"" CNT=CNT+1,XPRSPL(ROU,CNT)=L2
- Q
- LWRAP(LTXT,LW) ;
- N T0 S T0=LTXT
- F I=80:-1:60 D Q:L1]""
- . I $E(T0,I)?1P S L1=$E(T0,1,I),L2=$J(" ",LW)_$E(T0,(I+1),9999)
- . Q:L1]""
- S:L1']"" L1=LTXT
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXPDANLYZ2 15179 printed Mar 13, 2025@21:08:02 Page 2
- XPDANLYZ2 ;OAK/RSF- BUILD ANALYZER ;10/28/22
- +1 ;;8.0;KERNEL;**782,792**;Jul 10, 1995;Build 4
- +2 ;;Per VHA Directive 2004-038, this routine should not be modified.
- +3 ;
- XREF ;XREF
- +1 if 'FXX
- QUIT
- +2 SET XPDARR("FILE",FXX,"XREF")="No"
- +3 IF $DATA(^DD(FXX,0,"IX"))
- Begin DoDot:1
- +4 SET XPDARR("FILE",FXX,"XREF")="Yes"
- +5 NEW JJ,LL,MM,RSF
- SET JJ=""
- SET (LL,MM)=0
- FOR
- SET JJ=$ORDER(^DD(FXX,0,"IX",JJ))
- if $GET(JJ)']""
- QUIT
- FOR
- SET LL=$ORDER(^DD(FXX,0,"IX",JJ,LL))
- if '$GET(LL)
- QUIT
- Begin DoDot:2
- +6 FOR
- SET MM=$ORDER(^DD(FXX,0,"IX",JJ,LL,MM))
- if '$GET(MM)
- QUIT
- Begin DoDot:3
- +7 ;&(MM=.01)
- if (JJ="B")
- QUIT
- +8 NEW PP
- SET PP=0
- SET RSF="field"
- FOR
- SET PP=$ORDER(^DD(LL,MM,1,PP))
- if 'PP
- QUIT
- if LL'=FXX
- SET RSF="subfield "
- Begin DoDot:4
- +9 IF JJ=$PIECE(^DD(LL,MM,1,PP,0),"^",2)
- IF '$DATA(^DD(LL,MM,1,PP,"%D"))
- SET XPDARR("FILE",FXX,MM,"WARNING","XREF")=$PIECE(^DD(LL,MM,1,PP,0),"^",2)_" cross-reference ("_RSF_" #"_MM_") - DESCRIPTION missing."
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +10 QUIT
- +11 ;
- +12 ;OPTION
- OPTME ;Option Analysis called from START^XPDANLYZ1
- +1 ;XPDRC=2 IS OPTION
- NEW XPDOARR,KK
- SET KK=0
- +2 NEW DIRUT,Y
- KILL DIR
- SET DIR(0)="YO"
- SET DIR("A")="Do you want to analyze all options for a namespace"
- +3 SET DIR("?")="Will use a range of options whose name starts with a series of letters - usually the namespace (i.e. TIU)"
- +4 DO ^DIR
- IF $DATA(DIRUT)
- SET END=1
- QUIT
- +5 NEW XPDY
- SET XPDY=Y
- G1 IF XPDY=0
- WRITE !
- Begin DoDot:1
- +1 NEW DIC,Y
- SET DIC=19
- SET DIC(0)="QEAM"
- SET DIC("A")="Select individual options by name: "
- +2 DO ^DIC
- IF Y=-1
- KILL DIC
- SET XPDY=99
- SET END=1
- QUIT
- +3 ;I $D(DUOUT) K DIC Q ;-1 LIKE ABOVE
- +4 IF $DATA(DTOUT)
- SET XPDY=99
- SET END=1
- QUIT
- +5 ;OPTION ien ^ NAME
- IF $GET(Y)]""
- SET XPDOARR($PIECE(Y,"^"))=$PIECE(Y,"^",2)
- SET KK=KK+1
- End DoDot:1
- +6 if XPDY=0
- GOTO G1
- +7 IF XPDY=1
- NEW XPDPKG,XPDPKGL
- Begin DoDot:1
- +8 WRITE !
- NEW DIRUT
- KILL DIR
- SET DIR(0)="FO^2:10"
- SET DIR("?")="Enter the Package for the options to include"
- +9 SET DIR("A")="Enter the package abbreviation or leading characters of options to include"
- +10 DO ^DIR
- +11 IF $DATA(DIRUT)
- SET END=1
- QUIT
- +12 ;** CONFRIM ALL SHOULD BE UPPERCASE
- IF $GET(Y)]""
- SET XPDPKG=$$UP^XLFSTR(Y)
- SET XPDPKGL=$LENGTH(XPDPKG)
- if '$GET(XPDPKGL)
- QUIT
- +13 NEW JJ
- SET JJ=""
- SET KK=0
- FOR
- SET JJ=$ORDER(^DIC(19,"B",JJ))
- if $GET(JJ)']""
- QUIT
- IF $EXTRACT(JJ,1,XPDPKGL)=XPDPKG
- SET XPDOARR($ORDER(^DIC(19,"B",JJ,0)))=JJ
- SET KK=KK+1
- End DoDot:1
- if END
- GOTO X1^XPDANLYZ1
- +14 IF $GET(KK)>1
- Begin DoDot:1
- +15 WRITE !!,"Will check these ",KK," options:"
- +16 NEW JJ
- SET JJ=0
- FOR
- SET JJ=$ORDER(XPDOARR(JJ))
- if 'JJ
- QUIT
- WRITE !,?5,XPDOARR(JJ)
- IF ($Y+5)>IOSL
- DO HDR^XPDANLYZ1("Options (continued): ")
- if END
- QUIT
- +17 WRITE !!,?5,",, WORKING .."
- End DoDot:1
- +18 IF $DATA(XPDOARR)
- DO OCHK(.XPDOARR)
- +19 QUIT
- OCHK(XPDORR) ;setting up information to check OPTIONS ENTRY/EXIT for files and routines.
- +1 NEW JJ,XPDIENS
- SET JJ=0
- FOR
- SET JJ=$ORDER(XPDORR(JJ))
- if 'JJ
- QUIT
- Begin DoDot:1
- +2 NEW TARR
- SET XPDIENS=JJ_","
- DO GETS^DIQ(19,XPDIENS,"**","N","TARR")
- IF $DATA(TARR)
- Begin DoDot:2
- +3 SET XPDARR("OPTION",JJ,"NAME")=XPDORR(JJ)
- +4 IF '$DATA(TARR(19,XPDIENS,3.5))
- SET XPDARR("OPTION",JJ,"DESCRIPT")="No"
- SET XPDARR("OPTION",JJ,"WARNING","DESCRIPTION")="DESCRIPTION field (#3.5) missing."
- +5 IF $DATA(TARR(19,XPDIENS,3.5))
- SET XPDARR("OPTION",JJ,"DESCRIPT")="Yes"
- NEW LL
- SET LL=0
- FOR
- SET LL=$ORDER(TARR(19,XPDIENS,3.5,LL))
- if 'LL
- QUIT
- SET XPDARR("OPTION",JJ,"DESCRIPTION",LL)=TARR(19,XPDIENS,3.5,LL)
- +6 IF $DATA(TARR(19,XPDIENS,1))
- SET XPDARR("OPTION",JJ,"Menu")=TARR(19,XPDIENS,1)
- +7 IF '$DATA(TARR(19,XPDIENS,1))
- SET XPDARR("OPTION",JJ,"WARNING","MENU TXT")="MENU TEXT field (#1) missing."
- +8 IF '$DATA(TARR(19,XPDIENS,12))
- SET XPDARR("OPTION",JJ,"WARNING","PKG")="PACKAGE field (#12) missing."
- +9 IF $DATA(TARR(19,XPDIENS,12))
- SET XPDARR("OPTION",JJ,"PKG")=TARR(19,XPDIENS,12)
- +10 ; 25 IS ROUTINE AND IS TAG^ROUTINE
- +11 IF $DATA(TARR(19,XPDIENS,25))
- NEW TT,RR
- SET TT=$LENGTH(TARR(19,XPDIENS,25),"^")
- if $GET(TT)']""
- QUIT
- SET RR=$PIECE(TARR(19,XPDIENS,25),"^",TT)
- if RR["("
- SET RR=$PIECE(RR,"(")
- Begin DoDot:3
- +12 SET XPOPT(JJ,"ROU",RR)="ROUTINE field(#25):"
- +13 ;S XPDARR("OPTION",JJ,"WARNING",RR)="Calls routine "_RR_" not found in build"
- +14 ;I $E(RR,1,$L(XPDSPC))'=XPDSPC S XPDARR("OPTION",JJ,"WARNING",RR_"Z")="Calls routine "_RR_" not in patch namespace."
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +15 if XPDRC=4
- QUIT
- +16 SET XPDCS("OPTION")=19
- OPX KILL DIC
- QUIT
- +1 ;
- RPCHK ; RPC Analysis called XPDANLYZ1
- +1 ;XPDRC=4 IS RPC
- NEW XPDCARR,KK
- SET KK=0
- +2 NEW DIRUT
- KILL DIR
- SET DIR(0)="YO"
- SET DIR("A")="Do you want to analyze all RPCs for a namespace"
- +3 SET DIR("?")="Will use a range of RPCs whose name starts with a series of letters - usually the namespace (i.e. TIU)"
- +4 DO ^DIR
- IF $DATA(DIRUT)
- SET END=1
- QUIT
- +5 NEW XPDY
- SET XPDY=Y
- RPC1 IF XPDY=0
- WRITE !
- Begin DoDot:1
- +1 NEW DIC
- SET DIC=8994
- SET DIC(0)="QEAM"
- SET DIC("A")="Select individual RPCs by name: "
- +2 DO ^DIC
- IF Y=-1
- KILL DIC
- SET XPDY=99
- QUIT
- +3 IF $DATA(DTOUT)
- SET XPDY=99
- QUIT
- +4 ;RPC ien ^ NAME
- IF $GET(Y)]""
- SET XPDCARR($PIECE(Y,"^"))=$PIECE(Y,"^",2)
- SET KK=KK+1
- End DoDot:1
- +5 if XPDY=0
- GOTO RPC1
- +6 IF XPDY=1
- NEW XPDPKG,XPDPKGL
- Begin DoDot:1
- +7 WRITE !
- NEW DIRUT
- KILL DIR
- SET DIR(0)="FO^2:10"
- SET DIR("?")="Enter the Package for the RPCs"
- +8 SET DIR("A")="Enter the package abbreviation or leading characters of RPCs to include"
- +9 DO ^DIR
- +10 IF $DATA(DIRUT)
- QUIT
- +11 ;** CONFRIM ALL SHOULD BE UPPERCASE
- IF $GET(Y)]""
- SET XPDPKG=$$UP^XLFSTR(Y)
- SET XPDPKGL=$LENGTH(XPDPKG)
- if '$GET(XPDPKGL)
- QUIT
- +12 NEW JJ
- SET JJ=""
- SET KK=0
- FOR
- SET JJ=$ORDER(^XWB(8994,"B",JJ))
- if $GET(JJ)']""
- QUIT
- IF $EXTRACT(JJ,1,XPDPKGL)=XPDPKG
- SET XPDCARR($ORDER(^XWB(8994,"B",JJ,0)))=JJ
- SET KK=KK+1
- End DoDot:1
- if END
- GOTO X1^XPDANLYZ1
- +13 IF $GET(KK)>1
- Begin DoDot:1
- +14 WRITE !!,"Will check these ",KK," Remote Procedure Calls"
- +15 NEW JJ
- SET JJ=0
- FOR
- SET JJ=$ORDER(XPDCARR(JJ))
- if 'JJ
- QUIT
- WRITE !,?5,XPDCARR(JJ)
- IF ($Y+5)>IOSL
- DO HDR^XPDANLYZ1("RPC (continued): ")
- if END
- QUIT
- +16 WRITE !!,?5,",, WORKING .."
- End DoDot:1
- +17 IF $DATA(XPDCARR)
- DO RPC2(.XPDCARR)
- +18 QUIT
- RPC2(XPDRPC) ;^XWB(8994,; Remote Procedure check
- +1 if '$DATA(XPDRPC)
- QUIT
- +2 NEW JJ,XPDIENS
- SET JJ=0
- FOR
- SET JJ=$ORDER(XPDRPC(JJ))
- if 'JJ
- QUIT
- Begin DoDot:1
- +3 NEW TARR
- SET XPDIENS=JJ_","
- DO GETS^DIQ(8994,XPDIENS,"**","NR","TARR")
- IF $DATA(TARR)
- Begin DoDot:2
- +4 SET XPDARR("REMOTE PROCEDURE",JJ,"NAME")=XPDRPC(JJ)
- +5 IF '$DATA(TARR(8994,XPDIENS,"DESCRIPTION"))
- SET XPDARR("REMOTE PROCEDURE",JJ,"DESCRIPT")="No"
- SET XPDARR("REMOTE PROCEDURE",JJ,"WARNING","DESCRIPTION")="DESCRIPTION field (#1) missing."
- +6 IF $DATA(TARR(8994,XPDIENS,"DESCRIPTION"))
- SET XPDARR("REMOTE PROCEDURE",JJ,"DESCRIPT")="Yes"
- NEW LL
- SET LL=0
- FOR
- SET LL=$ORDER(TARR(8994,XPDIENS,"DESCRIPTION",LL))
- if 'LL
- QUIT
- SET XPDARR("REMOTE PROCEDURE",JJ,"DESCRIPTION",LL)=TARR(8994,XPDIENS,"DESCRIPTION",LL)
- +7 ;RETURN PARAMETERS
- +8 IF $DATA(TARR(8994,XPDIENS,"RETURN VALUE TYPE"))
- IF '$DATA(TARR(8994,XPDIENS,"RETURN PARAMETER DESCRIPTION"))
- SET XPDARR("REMOTE PROCEDURE",JJ,"WARNING","RETURN DESCRIPTION")="RPC RETURN DESCRIPTION field (#3) missing."
- +9 ;INPUT
- +10 IF $DATA(^XWB(8994,JJ,2,0))
- NEW XPDIP
- SET XPDIP=$PIECE(^XWB(8994,JJ,2,0),"^",4)
- if $GET(XPDIP)<1
- QUIT
- Begin DoDot:3
- +11 ;p792
- NEW MM
- FOR MM=1:1:XPDIP
- IF '$DATA(TARR(8994.02,MM_","_XPDIENS,"DESCRIPTION"))
- NEW LL
- Begin DoDot:4
- +12 SET LL=MM
- IF '$DATA(TARR(8994.02,MM_","_XPDIENS))
- SET LL=$PIECE($ORDER(TARR(8994.02,MM_","_XPDIENS)),",")
- if LL=""
- SET LL=MM
- IF $DATA(TARR(8994.02,LL_","_XPDIENS,"DESCRIPTION"))
- QUIT
- +13 SET XPDARR("REMOTE PROCEDURE",JJ,"WARNING","INPUT DESCRIPTION")="RPC Input Description for "_$GET(TARR(8994.02,LL_","_XPDIENS,"INPUT PARAMETER"))_" missing."
- End DoDot:4
- End DoDot:3
- +14 IF $DATA(TARR(8994,XPDIENS,"ROUTINE"))
- NEW RRR
- SET RRR=TARR(8994,XPDIENS,"ROUTINE")
- Begin DoDot:3
- +15 SET XPDARR("REMOTE PROCEDURE",JJ,"ROUTINE",RRR)="Routine field (#.03): Calls "_RRR_" not found in build."
- +16 ;I $E(RRR,1,$L(XPDSPC))'=XPDSPC S XPDARR("REMOTE PROCEDURE",JJ,"WARNING",RRR_"Z")="Routine field (#.03): Calls "_RRR_" not in patch namespace."
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +17 if XPDRC=4
- QUIT
- +18 SET XPDCS("REMOTE PROCEDURE")=8994
- RPCX KILL DIC
- QUIT
- +1 ;
- SQA(RR) ;Sets SQA CL array XPDARRR
- +1 SET XPDARRR("////",RR,0)=""
- +2 SET XPDARRR("DIC(0)",RR,0)=""
- +3 SET XPDARRR("^UTILITY",RR,0)=""
- +4 SET XPDARRR("^TMP",RR,0)=""
- +5 SET XPDARRR("^XTMP",RR,0)=""
- +6 SET XPDARRR("%",RR,0)=""
- +7 SET XPDARRR("$I",RR,0)=""
- +8 SET XPDARRR("U=",RR,0)=""
- +9 SET XPDARRR("K ^",RR,0)=""
- +10 SET XPDARRR("K:",RR,0)=""
- +11 SET XPDARRR("K @",RR,0)=""
- +12 SET XPDARRR("^(",RR,0)=""
- +13 SET XPDARRR("IO",RR,0)=""
- +14 QUIT
- +15 ;
- FMSG(XPDBT) ;
- +1 NEW XPDUZ
- SET XPDUZ=$GET(DUZ)
- if '$GET(DUZ)
- QUIT
- +2 KILL ^TMP("XPDEM",$JOB)
- +3 NEW XMCRIT
- SET XMCRIT("SUBJ")=XPDBT
- +4 DO LISTMSGS^XMXAPIB(XPDUZ,"*","SUBJ;DATE;F","B",,,.XMCRIT,"^TMP(""XPDEM"",$J)")
- +5 IF $DATA(^TMP("XPDEM",$JOB))
- Begin DoDot:1
- +6 NEW JKL,XPDNIEN
- SET JKL=$ORDER(^TMP("XPDEM",$JOB,"XMLIST",0))
- if '$GET(JKL)
- QUIT
- SET XPDNIEN=^TMP("XPDEM",$JOB,"XMLIST",JKL)
- +7 ;W !,XPDNIEN
- +8 NEW XPDMTXT,XPD,XEND
- SET XPD=$$GET1^DIQ(3.9,288988_",",3,"","XPDMTXT")
- SET XEND=0
- +9 if '$DATA(XPDMTXT)
- QUIT
- if '$DATA(XPDMTXT(.006))
- QUIT
- +10 ; NOT SURE THIS IS CONSISTENT...Q:XPDMTXT(.006)'["FORUM"
- +11 WRITE !!,"Description from FORUM patch:",!
- +12 SET JKL=.9
- FOR
- SET JKL=$ORDER(XPDMTXT(JKL))
- if ('$GET(JKL))!(+$GET(XEND))!(XPDMTXT(JKL)="Packman Mail Message
- QUIT
- Begin DoDot:2
- +13 IF XPDMTXT(JKL)="$END TXT"
- SET XEND=1
- QUIT
- +14 WRITE !,XPDMTXT(JKL)
- End DoDot:2
- if +$GET(XEND)
- QUIT
- End DoDot:1
- +15 QUIT
- +16 ;
- COMP1 ;SETS THE COMPONENTS USED BY BUILD PROGRAM From <https://www.domain.ext/vdl/documents/Infrastructure/Kernel/krn8_0dg.docx>
- +1 SET XPDCS("APPLICATION ACTION")=1.61
- +2 SET XPDCS("BULLETIN")=3.6
- +3 SET XPDCS("DIALOG")=.84
- +4 SET XPDCS("ENTITY")=1.5
- +5 SET XPDCS("FORM")=.403
- +6 SET XPDCS("FUNCTION")=.5
- +7 SET XPDCS("HELP FRAME")=9.2
- +8 SET XPDCS("HL7 APPLICATION PARAMETER")=771
- +9 SET XPDCS("HLO APPLICATION REGISTRY")=779.2
- +10 SET XPDCS("HL LOGICAL LINK")=870
- +11 ;S XPDCS("HL LOWER LEVEL PROTOCOL")=""
- +12 SET XPDCS("INPUT TEMPLATE")=.402
- +13 SET XPDCS("LIST TEMPLATE")=409.61
- +14 SET XPDCS("MAIL GROUP")=3.8
- +15 SET XPDCS("OPTION")=19
- +16 SET XPDCS("PARAMETER DEFINITION")=8989.51
- +17 SET XPDCS("PARAMETER TEMPLATE")=8989.52
- +18 SET XPDCS("POLICY")=1.6
- +19 SET XPDCS("POLICY FUNCTION")=1.62
- +20 SET XPDCS("PRINT TEMPLATE")=.4
- +21 SET XPDCS("PROTOCOL")=101
- +22 SET XPDCS("REMOTE PROCEDURE")=8994
- +23 SET XPDCS("ROUTINE")=9.8
- +24 SET XPDCS("SECURITY KEY")=19.1
- +25 SET XPDCS("SORT TEMPLATE")=.401
- +26 SET XPDCS("XULM LOCK DICTIONARY")=8993
- +27 QUIT
- +28 ;
- RLINES ;CAPTURES ROUTINE INFO; XPDSQA ARRAY OF SQA ROUTINE LINES
- +1 NEW JJ,X,RTN,ROU,DIF,XCNP,XPDARRR,XPDPNUM,PNUM,XPCNT,X2,BROU
- SET XPDPNUM=$PIECE(XPDARR("BUILD",XPDBIEN,"NAME"),"*",3)
- SET PNUM=""
- SET XPCNT=5
- SET XPTL=0
- +2 NEW TCNT
- SET (JJ,TCNT)=0
- FOR
- SET JJ=$ORDER(XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ))
- if 'JJ
- QUIT
- SET ROU=XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ)
- Begin DoDot:1
- +3 SET XPCNT=XPCNT+1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=""
- +4 ;ROU
- IF ROU'=$$UP^XLFSTR(ROU)
- SET XPCNT=XPCNT+1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* NAME (#.01) must be in UPPERCASE."
- +5 ;SETS SQA CL ARRAY XPDARRR
- DO SQA^XPDANLYZ2(JJ)
- +6 ;SETS SPELL CHECK ARRAY XPRSPL
- DO RSPELL(ROU)
- +7 ;I $E(ROU,1,$L(XPDSPC))'=XPDSPC S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* "_ROU_" is not in the Package namespace."
- +8 IF '$$NSPACE^XPDANLYZ6(ROU)
- SET XPCNT=XPCNT+1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* "_ROU_" is not in the Package namespace."
- +9 NEW XRIEN
- SET XRIEN=$ORDER(^DIC(9.8,"B",ROU,0))
- if 'XRIEN
- QUIT
- Begin DoDot:2
- +10 NEW XPDINX
- SET XPDINX=$$GET1^DIQ(9.8,XRIEN_",",1.4)
- +11 IF XPDINX]""
- SET XPCNT=XPCNT+1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* Date of Last ^XINDEX: "_XPDINX
- +12 IF XPDINX']""
- SET XPCNT=XPCNT+1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* Date ^XINDEX last run was not found."
- End DoDot:2
- +13 NEW X
- SET X=ROU
- XECUTE ^%ZOSF("TEST")
- if '$TEST
- QUIT
- +14 KILL RTN
- SET XCNP=0
- SET DIF="RTN("
- XECUTE ^%ZOSF("LOAD")
- +15 NEW K,SQAC,ZTAG,TCHK
- SET (TCHK,K)=0
- FOR
- SET K=$ORDER(RTN(K))
- if 'K
- QUIT
- Begin DoDot:2
- +16 IF $EXTRACT(RTN(K,0),1)'=" "
- SET ZTAG=$PIECE($PIECE(RTN(K,0)," "),"(")_"^"_K
- IF $LENGTH($PIECE(ZTAG,"^"))>XPTL
- SET XPTL=$LENGTH($PIECE(ZTAG,"^"))
- +17 IF K=1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,1)=RTN(K,0)
- QUIT
- +18 IF K=2
- Begin DoDot:3
- +19 SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,2)=RTN(K,0)
- +20 NEW QL
- SET PNUM=$PIECE(RTN(K,0),"**",2)
- SET X2=","_PNUM_","
- SET QL=$LENGTH(PNUM,",")
- IF $PIECE(PNUM,",",QL)'=XPDPNUM
- SET XPCNT=XPCNT+1
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* Missing current patch number on second line."
- +21 ;D BCHK^XPDANLYZ3(ROU) I $D(BROU(ROU)) D ;RESOURCE INTENSIVE FOR LITTLE USEFUL INFO
- +22 ;. S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* BUILD file also lists this routine in these patches:"
- +23 ;. S XPCNT=XPCNT+1,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=BROU(ROU)
- End DoDot:3
- +24 ;,XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,4)="" Q
- IF K=3
- IF $EXTRACT(RTN(K,0),1,6)[";"
- IF $LENGTH(RTN(K,0))>3
- IF $EXTRACT(RTN(K,0),1)'?1U
- SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,3)=RTN(K,0)
- +25 ;QUITS IF BEGINS WITH SPACES OR SPACES AND .. FOLLOWED BY ";"
- IF K>3
- IF $TRANSLATE($EXTRACT(RTN(K,0),1,10)," ",".")?."."1";".E
- QUIT
- +26 NEW XPD1,EXT
- SET XPD1=" "
- SET EXT=0
- FOR
- SET XPD1=$ORDER(XPDARRR(XPD1))
- if $GET(XPD1)']""
- QUIT
- Begin DoDot:3
- +27 NEW TAGME
- SET TAGME=$PIECE(ZTAG,"^")_" +"_(K-$PIECE(ZTAG,"^",2))
- +28 IF XPD1="K:"
- IF RTN(K,0)[XPD1
- DO KCOLON^XPDANLYZ5(RTN(K,0))
- QUIT
- +29 if EXT
- QUIT
- +30 ;TMPX^ZZSRABA
- IF XPD1="^XTMP"
- IF RTN(K,0)[XPD1
- DO TMPX^XPDANLYZ5(RTN(K,0))
- IF 'XPDIS2
if TCHK
QUIT
+31 IF XPD1="^TMP"
IF 'XPDIS2
IF RTN(K,0)[XPD1
DO TMP^XPDANLYZ5(RTN(K,0))
IF 'XPDIS2
if TCHK
QUIT
+32 IF (XPD1="K ^")
IF 'XPDIS2
IF RTN(K,0)[XPD1
SET TCHK=$$KCHK^XPDANLYZ5(RTN(K,0),XPD1)
if TCHK'=3
QUIT
+33 ;$$GCHK^XPDANLYZ5(RTN(K,0),XPD1) D
IF (XPD1="%")
IF 'XPDIS2
IF RTN(K,0)[XPD1
SET TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1)
if 'TCHK
QUIT
+34 IF (XPD1="IO")
IF 'XPDIS2
IF RTN(K,0)[XPD1
SET TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1)
if 'TCHK
QUIT
+35 IF (XPD1="$I")
IF 'XPDIS2
IF RTN(K,0)[XPD1
SET TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1)
if 'TCHK
QUIT
+36 IF (XPD1="DIC(0)")
IF 'XPDIS2
IF RTN(K,0)[XPD1
SET TCHK=$$MSQA^XPDANLYZ5(RTN(K,0),XPD1)
if 'TCHK
QUIT
+37 IF XPD1="U="
IF 'XPDIS2
IF (RTN(K,0)["U=""^""")!(RTN(K,0)'?.E1P1"U=")
QUIT
+38 IF RTN(K,0)[XPD1
SET XPDSQA(ROU,XPD1,K,TAGME)=RTN(K,0)
IF XTOG
if XPDARRR(XPD1,JJ,0)]""
SET XPDARRR(XPD1,JJ,0)=XPDARRR(XPD1,JJ,0)_" "_K_","
if XPDARRR(XPD1,JJ,0)']""
SET XPDARRR(XPD1,JJ,0)="Lines: "_K_","
End DoDot:3
End DoDot:2
+39 IF XTOG
Begin DoDot:2
+40 SET XPCNT=XPCNT+1
SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)="* The SQA Checklist identifies the following specific code "
+41 SET XPCNT=XPCNT+1
SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=" references to check in this routine:"
SET SQAC=XPCNT
+42 NEW MM
SET MM=" "
FOR
SET MM=$ORDER(XPDARRR(MM))
if MM']""
QUIT
Begin DoDot:3
+43 IF XPDARRR(MM,JJ,0)]""
SET XPCNT=XPCNT+1
SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=$JUSTIFY(MM,8)_$JUSTIFY(" ",5)_$$TRIM^XLFSTR(XPDARRR(MM,JJ,0),"R",",")
+44 IF $LENGTH(XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT))>73
DO CUT^XPDANLYZ3
End DoDot:3
+45 if SQAC=XPCNT
SET XPCNT=XPCNT+1
SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=$JUSTIFY(" ",2)_"- No specific code references from the SQA Checklist were found."
End DoDot:2
+46 SET XPCNT=XPCNT+1
SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=" "
+47 SET XPCNT=XPCNT+1
SET XPDARR("BUILD",XPDBIEN,"ROUTINE",JJ,XPCNT)=$$CJ^XLFSTR("<><><>",50)
End DoDot:1
+48 QUIT
RSPELL(ROU) ;FIND TEXT IN ROUTINE BETWEEN QUOTES and after ";;"
+1 NEW X
SET X=ROU
XECUTE ^%ZOSF("TEST")
if '$TEST
QUIT
+2 KILL RTN
SET XCNP=0
SET DIF="RTN("
XECUTE ^%ZOSF("LOAD")
+3 NEW K,CNT
SET (CNT,K)=0
FOR
SET K=$ORDER(RTN(K))
if 'K
QUIT
Begin DoDot:1
+4 IF RTN(K,0)[$CHAR(34)
NEW I,XTXT,TMP
SET TMP=RTN(K,0)
FOR I=2:2:$LENGTH(TMP)
Begin DoDot:2
+5 ;DO NOT LOOK AT LINE THAT BEGINS WITH ';'
IF $TRANSLATE($EXTRACT(TMP,1,10)," ",".")?."."1";".E
QUIT
+6 SET XTXT=$$TRIM^XLFSTR($PIECE(TMP,$CHAR(34),I))
IF $LENGTH(XTXT)>2
IF XTXT?.E3A.E
Begin DoDot:3
+7 ;QUIT IF 15 OR MORE CHARACTERS WITHOUT A SPACE...PROBABLY CODE.
IF $LENGTH(XTXT)>14
IF XTXT'[$CHAR(32)
QUIT
+8 ;IF STATEMENT, NOT FOR SPELL CHECK
IF XTXT[("I "_$PIECE(XTXT," ",2))
QUIT
+9 NEW J,CLTXT
SET CLTXT=""
IF XTXT'[$CHAR(32)
if $EXTRACT(XTXT,$LENGTH(XTXT))="("
QUIT
FOR J=1:1:$LENGTH(XTXT)
if $EXTRACT(XTXT,J)?1A
SET CLTXT=CLTXT_$EXTRACT(XTXT,J)
+10 ;NUMBER,PUNCUATION, FEW LETTERS
IF CLTXT]""
IF $LENGTH(XTXT)>(2*$LENGTH(CLTXT))
QUIT
+11 if TMP[("("_$CHAR(34)_XTXT)
QUIT
if TMP[("$J,"_$CHAR(34)_XTXT)
QUIT
if TMP[(XTXT_$CHAR(34)_",$J")
QUIT
+12 if TMP[("DIC="_$CHAR(34)_XTXT)
QUIT
if TMP[("DIC(0)="_$CHAR(34)_XTXT)
QUIT
if TMP[("DR="_$CHAR(34)_XTXT)
QUIT
if TMP[("DIE="_$CHAR(34)_XTXT)
QUIT
if TMP[("DIC(""S"")="_$CHAR(34)_XTXT)
QUIT
+13 SET XTXT=$JUSTIFY(K,3)_": "_XTXT
if $LENGTH(XTXT)<81
SET CNT=CNT+1
SET XPRSPL(ROU,CNT)=XTXT
+14 IF $LENGTH(XTXT)>80
NEW L1,L2
SET L1=""
SET L2=""
DO LWRAP(XTXT,($LENGTH($PIECE(XTXT,":"))+2))
if L1]""
SET CNT=CNT+1
SET XPRSPL(ROU,CNT)=L1
if L2]""
SET CNT=CNT+1
SET XPRSPL(ROU,CNT)=L2
End DoDot:3
End DoDot:2
+15 IF K>2
IF RTN(K,0)[";;"
if RTN(K,0)[$CHAR(34)_";;"_$CHAR(34)
QUIT
if $LENGTH(RTN(K,0))<5
QUIT
NEW XPT81
SET XPT81=$JUSTIFY(K,3)_": "_$PIECE(RTN(K,0),";;",2,99)
Begin DoDot:2
+16 if $LENGTH(XPT81)<81
SET CNT=CNT+1
SET XPRSPL(ROU,CNT)=XPT81
IF $LENGTH(XPT81)>80
Begin DoDot:3
+17 NEW L1,L2
SET L1=""
SET L2=""
DO LWRAP(XPT81,($LENGTH($PIECE(XPT81,":"))+2))
if L1]""
SET CNT=CNT+1
SET XPRSPL(ROU,CNT)=L1
if L2]""
SET CNT=CNT+1
SET XPRSPL(ROU,CNT)=L2
End DoDot:3
End DoDot:2
End DoDot:1
+18 QUIT
LWRAP(LTXT,LW) ;
+1 NEW T0
SET T0=LTXT
+2 FOR I=80:-1:60
Begin DoDot:1
+3 IF $EXTRACT(T0,I)?1P
SET L1=$EXTRACT(T0,1,I)
SET L2=$JUSTIFY(" ",LW)_$EXTRACT(T0,(I+1),9999)
+4 if L1]""
QUIT
End DoDot:1
if L1]""
QUIT
+5 if L1']""
SET L1=LTXT
+6 QUIT