| 1 | DDUCHK ;SFISC/RWF-CHECK DD ;11:25 AM  30 Dec 2004
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**130**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ; DDUCFI=home file, DDUCFE=home field, DDUCFIX=flag to fix DD
 | 
|---|
| 5 |  ; DDUCRFI=referenced file, DDUCRFE=referenced field.
 | 
|---|
| 6 | A W !!,"Check the Data Dictionary." D
 | 
|---|
| 7 |  . W !,"Note: Messages that begin with an asterisk(*) can NOT be corrected and"
 | 
|---|
| 8 |  . W !,"will need careful evaluation by software development!"
 | 
|---|
| 9 |  S DDUC=""
 | 
|---|
| 10 |  D DT^DICRW
 | 
|---|
| 11 |  D L^DICRW1
 | 
|---|
| 12 |  I X'>0 D  G EXIT
 | 
|---|
| 13 |  . I X'="" Q
 | 
|---|
| 14 |  . W !?5,"*The file: "_$P($G(Y),U,2)_"(#"_$P($G(Y),U)_") is missing its ""GL"" (Global Location) node."
 | 
|---|
| 15 |  . W !?6,"No further checking for this file can occur!"
 | 
|---|
| 16 |  S DDUCFIS=+X-.000001,DDUCFIE=DIB(1)
 | 
|---|
| 17 |  S DIR(0)="Y",DIR("A")="Remove erroneous nodes",DIR("B")="NO",DIR("?",1)="This routine will try to fix certain nodes that are erroneous and may set some nodes to a file referenced by the selected file."
 | 
|---|
| 18 |  S DIR("?")="Say 'NO' here to leave the DD untouched.  It will only flag the ones it finds erroneous."
 | 
|---|
| 19 |  D ^DIR G EXIT:$D(DIRUT) S DDUCFIX=+Y K DIR
 | 
|---|
| 20 | ZIS S %ZIS="Q" D ^%ZIS G EXIT:POP
 | 
|---|
| 21 |  I $D(IO("Q")) S ZTRTN="DQ^DDUCHK",ZTSAVE("DDUCFIX")="",ZTSAVE("DDUCFIS")="",ZTSAVE("DDUCFIE")="" D ^%ZTLOAD G EXIT
 | 
|---|
| 22 | DQ U IO K DDUCSTK,^TMP("DDUCHK",$J) S DDUCSTK=0,DDUCFX=DDUCFIX
 | 
|---|
| 23 |  F DDUCFILE=DDUCFIS:0:DDUCFIE S DDUCFILE=$O(^DIC(DDUCFILE)) Q:DDUCFILE'>0!(DDUCFILE>DDUCFIE)  D PAGE Q:$D(DIRUT)  D
 | 
|---|
| 24 |  . N DDUERR S DDUERR=0
 | 
|---|
| 25 |  . W !!,"Checking file ",DDUCFILE
 | 
|---|
| 26 |  . S (DDUCFI,DIFILE)=+DDUCFILE
 | 
|---|
| 27 |  . D DDAC
 | 
|---|
| 28 |  . D CHKHDR
 | 
|---|
| 29 |  . I DDUERR Q
 | 
|---|
| 30 |  . D CHK
 | 
|---|
| 31 | EXIT ;
 | 
|---|
| 32 |  I $G(DUZ(0))="@",$D(^TMP("DDUCHK",$J)) D
 | 
|---|
| 33 |  . W:$G(IOF)]"" @IOF
 | 
|---|
| 34 |  . W !!,"List of ;;<file#>^<field #>^<cross reference#> that contain $Next"
 | 
|---|
| 35 |  . N DDFIL S DDFIL=0 N I S I=1 N DDSP S DDSP="        "
 | 
|---|
| 36 |  . F  S DDFIL=$O(^TMP("DDUCHK",$J,DDFIL)) Q:'DDFIL  D
 | 
|---|
| 37 |  .. N DDFLD S DDFLD=0
 | 
|---|
| 38 |  .. F  S DDFLD=$O(^TMP("DDUCHK",$J,DDFIL,DDFLD)) Q:'DDFLD  D
 | 
|---|
| 39 |  ... N DDXRN S DDXRN=0
 | 
|---|
| 40 |  ... F  S DDXRN=$O(^TMP("DDUCHK",$J,DDFIL,DDFLD,DDXRN)) Q:'DDXRN  D
 | 
|---|
| 41 |  .... W !,I_$E(DDSP,1,(8-$L(I)))_";;"_DDFIL_U_DDFLD_U_DDXRN
 | 
|---|
| 42 |  .... S I=I+1
 | 
|---|
| 43 |  . S I=9999 W !,I_$E(DDSP,1,(8-$L(I)))_";;LAST LINE"
 | 
|---|
| 44 |  K ^TMP("DDUCHK",$J)
 | 
|---|
| 45 |  D ^%ZISC
 | 
|---|
| 46 |  K DDUCFI,DDUCFIX,DDUCFILE,DDUCFIS,DDUCFIE,DDUCFE,DDUCX,DDUCX1,DDUCX2,DDUCX4,DDUCRFI
 | 
|---|
| 47 |  K DDUCRFE,DDUCSTK,DDUCSTK,DDUCDNAM,DDUCNAME,DDUCXX,DDUCY,DDUCUP,DDUCXN
 | 
|---|
| 48 |  K DDUCF,DDUCXREF,DDUCZ,DDUC5,DDUCYY,DDUCYY1,DDUCOK,DDUCYYX,DIB,DDUC,DDUCFX,DIAC,DIFILE
 | 
|---|
| 49 |  Q
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 | PAGE I $Y+3>IOSL S DIR(0)="E" D:IOST["C-" ^DIR W @IOF
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | DDAC I DUZ(0)'="@" S DIAC="DD" D ^DIAC S DDUCFIX=DDUCFX I 'DIAC,DDUCFX W !,"You don't have DD access to this file.  No fixing will be done on this file." S DDUCFIX=0 Q
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 | CHK I $G(^DIC(DDUCFI,0))]"",'$P(^(0),U,2) S:DDUCFIX $P(^(0),U,2)=DDUCFI
 | 
|---|
| 57 |  I $D(^DD(DDUCFI,0))[0 S DDUCRFI=DDUCFI W !?5,"*File: "_DDUCRFI_", is missing its file header node."
 | 
|---|
| 58 |  I $D(^DD(DDUCFI,0,"ID")) D ID^DDUCHK1
 | 
|---|
| 59 |  I $D(^DD(DDUCFI,0,"IX")) D IX^DDUCHK1
 | 
|---|
| 60 |  I $D(^DD(DDUCFI,0,"PT")) D PT^DDUCHK1
 | 
|---|
| 61 |  D CHKGL^DDUCHK2
 | 
|---|
| 62 |  D CHKSB^DDUCHK2
 | 
|---|
| 63 |  S DDUCNAME=$O(^DD(DDUCFI,0,"NM","")),DDUCDNAM=$O(^(DDUCNAME)),DDUCRFI=DDUCFI I DDUCDNAM]"" D WFI W "has duplicate 'NM' nodes." I DDUCFIX D NM^DDUCHK1
 | 
|---|
| 64 |  I $D(^DD("ACOMP",DDUCFI)) D AC^DDUCHK1
 | 
|---|
| 65 |  D INDEX^DDUCHK4(DDUCFI,DDUCFIX),KEY^DDUCHK5(DDUCFI,DDUCFIX)
 | 
|---|
| 66 |  G ^DDUCHK2
 | 
|---|
| 67 | WFI W !?8,"File: ",DDUCRFI," " Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | EN ;
 | 
|---|
| 70 |  Q:'$D(DDUCFI)!'$D(DDUCFIX)  S U="^"
 | 
|---|
| 71 |  I DDUCFI Q:'$D(^DIC(DDUCFI,0,"GL"))  G EN1
 | 
|---|
| 72 |  Q:'$D(@(DDUCFI_"0)"))  S DDUCFI=+$P(^(0),U,2)
 | 
|---|
| 73 | EN1 S DDUCFIS=+DDUCFI-.000001,DDUCFIE=+DDUCFI
 | 
|---|
| 74 |  G ZIS
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | CHKHDR ; Check for Missing or Incorrect File Header Node ;22*130
 | 
|---|
| 77 |  ;W !?5,"File: ",DDUCFI," Checking File Header Node."
 | 
|---|
| 78 |  N DDUCGL,DDUCNA,DDUCHDR
 | 
|---|
| 79 |  S DDUCGL=$G(^DIC(DDUCFI,0,"GL"))
 | 
|---|
| 80 |  I DDUCGL="" W !?5,"*File: "_DDUCFI_", is missing file's ""GL"" (Global Location) node.",!?6,"No further checking can occur!" S DDUERR=1 Q
 | 
|---|
| 81 |  S DDUCHDR=DDUCGL_"0)",DDUCHDR=$G(@DDUCHDR)
 | 
|---|
| 82 |  S DDUCNA=$P(^DIC(DDUCFI,0),U)
 | 
|---|
| 83 |  I DDUCHDR="" W !?5,"*File: "_DDUCFI_", is missing the File header node." Q
 | 
|---|
| 84 |  I $P(DDUCHDR,U)'=DDUCNA W !?5,"*File: "_DDUCFI_", header name is incorrect." Q
 | 
|---|
| 85 |  I +$P(DDUCHDR,U,2)'=DDUCFI W !?5,"*File: "_DDUCFI_" File header number is incorrect." Q
 | 
|---|
| 86 |  Q
 | 
|---|