| 1 | DIVR ;SFISC/GFT-VERIFY FLDS ;8:43 AM  1 Jul 1999
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**7**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  I $D(DIVFIL)[0 N DIVDAT,DIVFIL,DIVMODE,DIVPG,POP D  G:$G(POP) Q^DIV
 | 
|---|
| 5 |  . S DIVMODE="C"
 | 
|---|
| 6 |  . D DEVSEL^DIV Q:$G(POP)
 | 
|---|
| 7 |  . D INIT^DIV
 | 
|---|
| 8 |  S W="W !,""ENTRY#"_$S(V:"'S",1:"")_""",?10,"""_$P(^DD(A,.01,0),U)_""",?40,""ERROR"""
 | 
|---|
| 9 |  D LF Q:$D(DIRUT)  S T=$E(T) S:"PS"[T&($D(DIVZ)[0) DIVZ=Z
 | 
|---|
| 10 |  K DIVREQK,DIVTYPE,DIVTMP
 | 
|---|
| 11 |  S DIVREQK=$D(^DD("KEY","F",A,DA))>9
 | 
|---|
| 12 |  I $D(^DD("IX","F",A,DA)) D
 | 
|---|
| 13 |  . S DIVTYPE=T,T="INDEX",DIVROOT=$$FROOTDA^DIKCU(A)
 | 
|---|
| 14 |  . D LOADVER^DIVC(A,DA,"DIVTMP")
 | 
|---|
| 15 |  K DG
 | 
|---|
| 16 |  F %=0:0 S %=$O(^DD(A,DA,1,%)) Q:%'>0  I $D(^(%,1)),$P(^(0),U,2,9)?1.A,^(2)?1"K ^".E1")",^(1)?1"S ^".E S DG(%)="I $D("_$E(^(2),3,99)_"),"_$E(^(1),3,99)
 | 
|---|
| 17 |  I T'="INDEX",'$D(^(+$O(^DD(A,DA,1,0)),1)) G E
 | 
|---|
| 18 |  I T'="INDEX",'$D(DG) W $C(7)_"(CANNOT CHECK"
 | 
|---|
| 19 |  E  W "(CHECKING"
 | 
|---|
| 20 |  W " CROSS-REFERENCE)" D LF I $D(DIRUT) Q:$D(DQI)  G Q
 | 
|---|
| 21 |  I $D(DG) D
 | 
|---|
| 22 |  . I T="INDEX" S E=DIVTYPE,DIVTYPE="IX"
 | 
|---|
| 23 |  . E  S E=T,T="IX"
 | 
|---|
| 24 | E S Y=$F(DDC,"%DT=""E") S:Y DDC=$E(DDC,1,Y-2)_$E(DDC,Y,999)
 | 
|---|
| 25 |  I DR["*" S DDC="Q" I $D(^DD(A,DA,12.1)) X ^(12.1) I $D(DIC("S")) S DDC(1)=DIC("S"),DDC="X DDC(1) E  K X"
 | 
|---|
| 26 |  D 0 S X=$P(Y(0),U,4),Y=$P(X,S,2),X=$P(X,S)
 | 
|---|
| 27 |  I +X'=X S X=Q_X_Q I Y="" S DE=DE_"S X=DA D R" G XEC
 | 
|---|
| 28 |  S M="S X=$S($D(^(DA,"_X_")):$"_$S(Y:"P(^("_X_"),U,"_Y,1:"E(^("_X_"),"_$E(Y,2,9))_"),1:"""") D R"
 | 
|---|
| 29 |  I $L(M)+$L(DE)>250 S DE=DE_"X DE(1)",DE(1)=M
 | 
|---|
| 30 |  E  S DE=DE_M
 | 
|---|
| 31 | XEC K DIC,M,Y X DE Q:$D(DQI)
 | 
|---|
| 32 |  W:'$D(M) $C(7),!,"NO PROBLEMS"
 | 
|---|
| 33 | Q S M=$O(^UTILITY("DIVR",$J,0)),E=$O(^(M)),DK=J(0)
 | 
|---|
| 34 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 35 |  E  I $T(+0^%ZISC)]"" D
 | 
|---|
| 36 |  . D ^%ZISC
 | 
|---|
| 37 |  E  X $G(^%ZIS("C"))
 | 
|---|
| 38 |  G:'E!$D(DIRUT)!$D(ZTQUEUED) QX K DIBT,DISV D
 | 
|---|
| 39 |  . N C,D,I,J,L,O,Q,S,D0,DDA,DICL,DIFLD,DIU0
 | 
|---|
| 40 |  . D S2^DIBT1 Q
 | 
|---|
| 41 |  S DDC=0 I '$D(DIRUT) G Q:Y<0 F E=0:0 S E=$O(^UTILITY("DIVR",$J,E)) Q:E=""  S DDC=DDC+1,^DIBT(+Y,1,E)=""
 | 
|---|
| 42 |  S:DDC>0 ^DIBT(+Y,"QR")=DT_U_DDC
 | 
|---|
| 43 | QX K DIVINDEX,DIVKEY,DIVREQK,DIVROOT,DIVTMP,DIVTYPE
 | 
|---|
| 44 |  K ^UTILITY("DIVR",$J),DIRUT,DIROUT,DTOUT,DUOUT,DQI,DK,DA,DG,DQ,DE,T,P,E,M,DR,W,DDC,DIVZ Q
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | R Q:$D(DIRUT)
 | 
|---|
| 47 |  I X?." " Q:DR'["R"&'DIVREQK  D  G X
 | 
|---|
| 48 |  . I X="" S M="Missing"_$S(DIVREQK:" key value",1:"")
 | 
|---|
| 49 |  . E  S M="Equals only 1 or more spaces"
 | 
|---|
| 50 |  G @T
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | P I @("$D(^"_DIVZ_"X,0))") S Y=X G F
 | 
|---|
| 53 |  S M="No '"_X_"' in pointed-to File" G X
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | S S Y=X X DDC I '$D(X) S M=Q_Y_Q_" fails screen" G X
 | 
|---|
| 56 |  Q:S_DIVZ[(S_X_":")  S M=Q_X_Q_" not in Set" G X
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | D S Y=X,X=$E(Y,1,3)+1700,%=$E(Y,6,7) S:% X=%_"-"_X S:$E(Y,4,5) X=+$E(Y,4,5)_"-"_X
 | 
|---|
| 59 |  S:Y["." X=X_"@"_$E(Y_"00",9,10)_":"_$E(Y_"0000",11,12)_$S($E(Y,13,14):":"_$E(Y_"0",13,14),1:"")
 | 
|---|
| 60 | N ;
 | 
|---|
| 61 | K ;
 | 
|---|
| 62 | F S DQ=X I X'?.ANP S M="Non-printing character" G X
 | 
|---|
| 63 |  X DDC Q:$D(X)  S M=Q_DQ_Q_" fails Input Transform"
 | 
|---|
| 64 | X I $O(^UTILITY("DIVR",$J,0))="" X W
 | 
|---|
| 65 |  S X=$S(V:DA(V),1:DA),^UTILITY("DIVR",$J,X)=""
 | 
|---|
| 66 |  S X=V I @(I(0)_"0)")
 | 
|---|
| 67 | DA I 'X D  Q
 | 
|---|
| 68 |  . D LF Q:$D(DIRUT)
 | 
|---|
| 69 |  . W DA,?10,$S($D(^(DA,0)):$P(^(0),U),1:DA),?40,$E(M,1,40)
 | 
|---|
| 70 |  . D:V LF
 | 
|---|
| 71 |  D LF Q:$D(DIRUT)  W DA(X),?10,$P(^(DA(X),0),U) S X=X-1,@("Y=$D(^("_I(V-X)_",0))") G DA
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | 0 ;
 | 
|---|
| 74 |  S Y=I(0),DE="",X=V
 | 
|---|
| 75 | L S DA="DA" S:X DA=DA_"("_X_")" S Y=Y_DA,DE=DE_"F "_DA_"=0:0 ",%="S "_DA_"=$O("_Y_"))" I V>2 S DE(X+X)=%,DE=DE_"X DE("_(X+X)_")"
 | 
|---|
| 76 |  E  S DE=DE_%
 | 
|---|
| 77 |  S DE=DE_" Q:"_DA_"'>0  S D"_(V-X)_"="_DA_" "
 | 
|---|
| 78 |  ;I X=1,DIFLD=.01 S DE=DE_"X P:$D(^(DA(1),"_I(V)_",0)) ",P="S $P(^(0),U,2)="""_$P(^DD(J(V-1),P,0),U,2)_Q
 | 
|---|
| 79 |  S X=X-1 Q:X<0  S Y=Y_","_I(V-X)_"," G L
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | IX F %=0:0 S %=$O(DG(%)) Q:+%'>0  X DG(%) I '$T S M=Q_X_Q_" not properly Cross-referenced" G X
 | 
|---|
| 82 |  G @E
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | V I $P(X,S,2)'?1A.AN1"(".ANP,$P(X,S,2)'?1"%".AN1"(".ANP S M=Q_X_Q_" has the wrong format" G X
 | 
|---|
| 85 |  S M=$S($D(@(U_$P(X,S,2)_"0)")):^(0),1:"")
 | 
|---|
| 86 |  I '$D(^DD(A,DIFLD,"V","B",+$P(M,U,2))) S M=$P(M,U)_" FILE not in the DD" G X
 | 
|---|
| 87 |  I '$D(@(U_$P(X,S,2)_+X_",0)")) S M=U_$P(X,S,2)_+X_",0) does not exist" G X
 | 
|---|
| 88 |  G F
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | INDEX ;Check new indexes
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ;Set DIVINDEX(indexName,index#) = "" for indexes aren't set
 | 
|---|
| 93 |  ;Set DIVKEY(file#,keyName,uiNumber) = "null" : if key field is null
 | 
|---|
| 94 |  ;                                     "uniq" : if key is not unique
 | 
|---|
| 95 |  K DIVKEY,DIINDEX
 | 
|---|
| 96 |  D VER^DIVC(A,DIVROOT,.DA,"DIVTMP",.DIVINDEX,.DIVKEY)
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ;If some indexes aren't set properly, print index info
 | 
|---|
| 99 |  I $D(DIVINDEX) D  K DIVINDEX Q:$D(DIRUT)
 | 
|---|
| 100 |  . N DIVNAME,DIVNUM
 | 
|---|
| 101 |  . S DIVNAME="" F  S DIVNAME=$O(DIVINDEX(DIVNAME)) Q:DIVNAME=""  D  Q:$D(DIRUT)
 | 
|---|
| 102 |  .. S DIVNUM=0 F  S DIVNUM=$O(DIVINDEX(DIVNAME,DIVNUM)) Q:'DIVNUM  D  Q:$D(DIRUT)
 | 
|---|
| 103 |  ... S M=Q_X_Q_": "_DIVNAME_" index (#"_DIVNUM_") not properly set"
 | 
|---|
| 104 |  ... D IER
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ;If keys integrity is violated, print key info
 | 
|---|
| 107 |  I $D(DIVKEY) D  K DIVKEY Q:$D(DIRUT)
 | 
|---|
| 108 |  . N DIVFILE,DIVKNM,DIVPROB,DIVXRNM
 | 
|---|
| 109 |  . S DIVFILE="" F  S DIVFILE=$O(DIVKEY(DIVFILE)) Q:DIVFILE=""  D  Q:$D(DIRUT)
 | 
|---|
| 110 |  .. S DIVKNM="" F  S DIVKNM=$O(DIVKEY(DIVFILE,DIVKNM)) Q:DIVKNM=""  D  Q:$D(DIRUT)
 | 
|---|
| 111 |  ... S DIVXRNM="" F  S DIVXRNM=$O(DIVKEY(DIVFILE,DIVKNM,DIVXRNM)) Q:DIVXRNM=""  D  Q:$D(DIRUT)
 | 
|---|
| 112 |  .... S DIVPROB=DIVKEY(DIVFILE,DIVKNM,DIVXRNM)
 | 
|---|
| 113 |  .... S M=Q_X_Q_": "_$S(DIVPROB="null":"Key values are missing.",1:"Key is not unique.")
 | 
|---|
| 114 |  .... S M=M_" (File #"_DIVFILE_", Key "_DIVKNM_", Index "_DIVXRNM_")"
 | 
|---|
| 115 |  .... D IER
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ;Continue with checking traditional xrefs (if any) and data type
 | 
|---|
| 118 |  G @DIVTYPE
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 | IER ;Print info about invalid indexes. (Modeled after DA subroutine above)
 | 
|---|
| 121 |  N DIVTXT,DIVI,X
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 |  ;Wrap message M to within 40 columns
 | 
|---|
| 124 |  S DIVTXT(0)=M D WRAP^DIKCU2(.DIVTXT,40)
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ;If nothing was written yet, write column headers
 | 
|---|
| 127 |  I $O(^UTILITY("DIVR",$J,0))="" X W
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 |  ;Set ^UTILITY("DIVR",$J,topIen)="", X = level#, naked = top level root
 | 
|---|
| 130 |  S X=$S(V:DA(V),1:DA),^UTILITY("DIVR",$J,X)=""
 | 
|---|
| 131 |  S X=V I @(I(0)_"0)")
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | IER1 ;If top level, write record info and message
 | 
|---|
| 134 |  I 'X D  Q
 | 
|---|
| 135 |  . D LF Q:$D(DIRUT)  W DA,?10,$S($D(^(DA,0)):$P(^(0),U),1:DA)
 | 
|---|
| 136 |  . F DIVI=0:1 Q:$D(DIVTXT(DIVI))[0  D  Q:$D(DIRUT)
 | 
|---|
| 137 |  .. I DIVI D LF Q:$D(DIRUT)
 | 
|---|
| 138 |  .. W ?40,DIVTXT(DIVI)
 | 
|---|
| 139 |  . D:V LF
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 |  ;Else write subrecord info, decrement level, set naked = ^naked(node,0)
 | 
|---|
| 142 |  D LF Q:$D(DIRUT)
 | 
|---|
| 143 |  W DA(X),?10,$P(^(DA(X),0),U) S X=X-1,@("Y=$D(^("_I(V-X)_",0))")
 | 
|---|
| 144 |  G IER1
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 | LF ;Issue a line feed or EOP read
 | 
|---|
| 147 |  I $Y+3<IOSL W ! Q
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  N DINAKED S DINAKED=$$LGR^%ZOSV
 | 
|---|
| 150 |  I IOST?1"C-".E D
 | 
|---|
| 151 |  . N DIR,X,Y
 | 
|---|
| 152 |  . S DIR(0)="E" W ! D ^DIR
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 |  I '$D(DIRUT) D
 | 
|---|
| 155 |  . I $D(ZTQUEUED),$$S^%ZTLOAD S (ZTSTOP,DIRUT)=1
 | 
|---|
| 156 |  . E  W @IOF D HDR
 | 
|---|
| 157 |  S:DINAKED]"" DINAKED=$S(DINAKED["""""":$O(@DINAKED),1:$D(@DINAKED))
 | 
|---|
| 158 |  Q
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 | HDR ;Print header
 | 
|---|
| 161 |  N DIVTAB
 | 
|---|
| 162 |  S DIVPG=$G(DIVPG)+1
 | 
|---|
| 163 |  W "VERIFY FIELDS REPORT"
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  S DIVTAB=IOM-1-$L(DIVFIL)-$L(DIVDAT)-$L(DIVPG)
 | 
|---|
| 166 |  I DIVTAB>1 W !,DIVFIL_$J("",DIVTAB)_DIVDAT_DIVPG
 | 
|---|
| 167 |  E  W !,DIVFIL,!,$J("",IOM-1-$L(DIVDAT)-$L(DIVPG))_DIVDAT_DIVPG
 | 
|---|
| 168 |  W !,$TR($J("",IOM-1)," ","-"),!
 | 
|---|
| 169 |  Q
 | 
|---|