| 1 | DDFIX ;SFCIOFO/S0/MKO VARIOUS DD AND DIC FIXES ;9:17 AM  15 Mar 1999
 | 
|---|
| 2 |  ;;22.0;VA FileMan;;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | FIXPT ; ==> Fix Bad "PT" Nodes <==
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  N EP,ESC
 | 
|---|
| 8 |  I '$D(XPDNM) S EP="PT" D DEVICE
 | 
|---|
| 9 |  I $D(ESC) G EXIT
 | 
|---|
| 10 | DEQPT N DICFILE,DDFILE,DDFIELD,PGLEN,PG,RPTDT,X
 | 
|---|
| 11 |  U IO
 | 
|---|
| 12 |  D RPTDT
 | 
|---|
| 13 |  S PGLEN=IOSL-5,PG=0
 | 
|---|
| 14 |  I '$D(XPDNM) D PTHDR
 | 
|---|
| 15 |  ; Loop thru DIC(<file #>,
 | 
|---|
| 16 |  S DICFILE=1.99999
 | 
|---|
| 17 |  F  S DICFILE=$O(^DIC(DICFILE)) Q:DICFILE'>1.99999!$D(ESC)  D
 | 
|---|
| 18 |  . ; Loop thru DD(DICFILE,0,"PT",<file #>
 | 
|---|
| 19 |  . S DDFILE=1.99999
 | 
|---|
| 20 |  . F  S DDFILE=$O(^DD(DICFILE,0,"PT",DDFILE)) Q:DDFILE'>1.99999!$D(ESC)  D
 | 
|---|
| 21 |  .. I $D(^DD(DDFILE,0))#2 D  Q  ; File Exists
 | 
|---|
| 22 |  ... ; Check Fields Exists
 | 
|---|
| 23 |  ... S DDFIELD=0
 | 
|---|
| 24 |  ... F  S DDFIELD=$O(^DD(DICFILE,0,"PT",DDFILE,DDFIELD)) Q:'DDFIELD!$D(ESC)  D
 | 
|---|
| 25 |  .... I $D(^DD(DDFILE,DDFIELD,0))#2 D  Q  ; Field is still in DD
 | 
|---|
| 26 |  ..... I ($P(^(0),U,2)'["P")&($P(^(0),U,2)'["V") D  Q  ; Field Still A Pointer?
 | 
|---|
| 27 |  ...... S X="*File: "_DDFILE_" Field: "_DDFIELD_" is Not a Pointer Type." D RPTOUT
 | 
|---|
| 28 |  ...... S X="   Deleting ""PT"" node: "_$NA(^DD(DICFILE,0,"PT",DDFILE,DDFIELD)) D RPTOUT,K1 Q
 | 
|---|
| 29 |  ..... I $P(^(0),U,2)["P",+$P($P(^(0),U,2),"P",2)'=DICFILE D  Q  ; Field Still Point To Same File?
 | 
|---|
| 30 |  ...... S X="*File: "_DDFILE_" Field: "_DDFIELD_" Does Not Point To File: "_DICFILE_"." D RPTOUT
 | 
|---|
| 31 |  ...... S X="  Deleting ""PT"" Node: "_$NA(^DD(DICFILE,0,"PT",DDFILE,DDFIELD)) D RPTOUT,K1 Q
 | 
|---|
| 32 |  .... ; **Field No Longer Exists
 | 
|---|
| 33 |  .... S X="*Field: "_DDFIELD_" in File: "_DDFILE_" does Not Exist." D RPTOUT
 | 
|---|
| 34 |  .... S X="  Deleting ""PT"" node: "_$NA(^DD(DICFILE,0,"PT",DDFILE,DDFIELD)) D RPTOUT,K1 Q
 | 
|---|
| 35 |  .. ; **File No Longer Exists
 | 
|---|
| 36 |  .. S X="*File: "_DDFILE_" Does Not Exist." D RPTOUT
 | 
|---|
| 37 |  .. S X="  Deleting ""PT"" node: "_$NA(^DD(DICFILE,0,"PT",DDFILE)) D RPTOUT
 | 
|---|
| 38 |  .. K ^DD(DICFILE,0,"PT",DDFILE)
 | 
|---|
| 39 |  G EXIT ; GoTo Common Exit
 | 
|---|
| 40 | K1 ; Kill at Field Level
 | 
|---|
| 41 |  K ^DD(DICFILE,0,"PT",DDFILE,DDFIELD)
 | 
|---|
| 42 |  Q
 | 
|---|
| 43 | PTHDR ; Fix "PT" nodes Report Header
 | 
|---|
| 44 |  I $E(IOST,1,2)="C-" D  Q:$D(ESC)
 | 
|---|
| 45 |  . I PG D PAUSE Q:$D(ESC)
 | 
|---|
| 46 |  . W @IOF
 | 
|---|
| 47 |  I PG W @IOF
 | 
|---|
| 48 |  S PG=PG+1
 | 
|---|
| 49 |  W "Fix ""PT"" Nodes Report     "_RPTDT,?(IOM-10),"Page: "_PG,!
 | 
|---|
| 50 |  N X
 | 
|---|
| 51 |  S X="",$P(X,"-",(IOM-1))="" W X,!
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | FIXNM ; ==> Fix Duplicate 'NM' Nodes <==
 | 
|---|
| 55 |  ; From patch DI*21*50, routine DIPR50
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  N EP,ESC
 | 
|---|
| 58 |  I '$D(XPDNM) S EP="NM" D DEVICE
 | 
|---|
| 59 |  I $D(ESC) G EXIT
 | 
|---|
| 60 | DEQNM N DDFILE,DDNAME,DDNEW,PGLEN,PG,RPTDT,X
 | 
|---|
| 61 |  U IO
 | 
|---|
| 62 |  D RPTDT
 | 
|---|
| 63 |  S PGLEN=IOSL-5,PG=0
 | 
|---|
| 64 |  I '$D(XPDNM) D NMHDR
 | 
|---|
| 65 |  S DDFILE=1.99999
 | 
|---|
| 66 |  F  S DDFILE=$O(^DD(DDFILE)) Q:'DDFILE!$D(ESC)  D
 | 
|---|
| 67 |  . ; Check and repair duplicate "NM" nodes
 | 
|---|
| 68 |  . S DDNAME=$O(^DD(DDFILE,0,"NM","")) Q:DDNAME=""
 | 
|---|
| 69 |  . I $O(^DD(DDFILE,0,"NM",DDNAME))="" Q
 | 
|---|
| 70 |  . S X="*File/Subfile: "_DDFILE_" has duplicate 'NM' nodes."
 | 
|---|
| 71 |  . D RPTOUT
 | 
|---|
| 72 |  . S DDNEW=$S($D(^DIC(DDFILE,0))#2:$P(^(0),U),1:$P(^DD(DDFILE,0)," SUB-FIELD"))
 | 
|---|
| 73 |  . Q:DDNEW=""
 | 
|---|
| 74 |  . K ^DD(DDFILE,0,"NM")
 | 
|---|
| 75 |  . S ^DD(DDFILE,0,"NM",DDNEW)=""
 | 
|---|
| 76 |  . S X="  ""NM"" node will be set to: "_DDNEW
 | 
|---|
| 77 |  . D RPTOUT
 | 
|---|
| 78 |  G EXIT ; GoTo Common Exit Point
 | 
|---|
| 79 | NMHDR ; Fix "NM" nodes Report Header
 | 
|---|
| 80 |  I $E(IOST,1,2)="C-" D  Q:$D(ESC)
 | 
|---|
| 81 |  . I PG D PAUSE Q:$D(ESC)
 | 
|---|
| 82 |  . W @IOF
 | 
|---|
| 83 |  I PG W @IOF
 | 
|---|
| 84 |  S PG=PG+1
 | 
|---|
| 85 |  W "Fix Duplicate ""NM"" Nodes Report     "_RPTDT,?(IOM-10),"Page: "_PG,!
 | 
|---|
| 86 |  N X
 | 
|---|
| 87 |  S X="",$P(X,"-",(IOM-1))="" W X,!
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | FIXAG ; ==> Application Group Multiple Bad Xrefs <==
 | 
|---|
| 91 |  ; From patch DI*21*58, routine DIPR58
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  N EP,ESC
 | 
|---|
| 94 |  I '$D(XPDNM) S EP="AG" D DEVICE
 | 
|---|
| 95 |  I $D(ESC) G EXIT
 | 
|---|
| 96 | DEQAG N DDAGPKG,DDFILE,IEN,PGLEN,PG,RPTDT,X
 | 
|---|
| 97 |  U IO
 | 
|---|
| 98 |  D RPTDT
 | 
|---|
| 99 |  S PGLEN=IOSL-5,PG=0
 | 
|---|
| 100 |  I '$D(XPDNM) D AGHDR
 | 
|---|
| 101 |  S DDFILE=1.99999
 | 
|---|
| 102 |  F  S DDFILE=$O(^DIC(DDFILE)) Q:DDFILE<1.99999  D
 | 
|---|
| 103 |  . I '$D(^DIC(DDFILE,"%")) Q  ; No App. Group Multiple
 | 
|---|
| 104 |  . S DDAGPKG=""
 | 
|---|
| 105 |  . F  S DDAGPKG=$O(^DIC(DDFILE,"%","B",DDAGPKG)) Q:DDAGPKG=""  D
 | 
|---|
| 106 |  .. S IEN=0
 | 
|---|
| 107 |  .. F  S IEN=$O(^DIC(DDFILE,"%","B",DDAGPKG,IEN)) Q:'IEN  D
 | 
|---|
| 108 |  ... I $P($G(^DIC(DDFILE,"%",IEN,0)),U)=DDAGPKG Q
 | 
|---|
| 109 |  ... S X="Deleting App. Group "_DDAGPKG_" ""B"" xref: "_$NA(^DIC(DDFILE,"%","B",DDAGPKG,IEN))
 | 
|---|
| 110 |  ... D RPTOUT
 | 
|---|
| 111 |  ... K ^DIC(DDFILE,"%","B",DDAGPKG,IEN)
 | 
|---|
| 112 | AC ; Loop Thru "AC" xref and Remove Any Entries That Point to
 | 
|---|
| 113 |  ; Files That Do Not Exist
 | 
|---|
| 114 |  S DDAGPKG=""
 | 
|---|
| 115 |  F  S DDAGPKG=$O(^DIC("AC",DDAGPKG)) Q:DDAGPKG=""  D
 | 
|---|
| 116 |  . S DDFILE=1.99999
 | 
|---|
| 117 |  . F  S DDFILE=$O(^DIC("AC",DDAGPKG,DDFILE)) Q:DDFILE<1.99999  D
 | 
|---|
| 118 |  .. I $D(^DIC(DDFILE,0))[0 D  Q
 | 
|---|
| 119 |  ... S X="Deleting ""AC"" xref: "_$NA(^DIC("AC",DDAGPKG,DDFILE))
 | 
|---|
| 120 |  ... D RPTOUT
 | 
|---|
| 121 |  ... K ^DIC("AC",DDAGPKG,DDFILE)
 | 
|---|
| 122 |  .. S IEN=0
 | 
|---|
| 123 |  .. F  S IEN=$O(^DIC("AC",DDAGPKG,DDFILE,IEN)) Q:'IEN  D
 | 
|---|
| 124 |  ... I $P($G(^DIC(DDFILE,"%",IEN,0)),U)'=DDAGPKG D
 | 
|---|
| 125 |  .... S X="Deleting ""AC"" xref: "_$NA(^DIC("AC",DDAGPKG,DDFILE,IEN))
 | 
|---|
| 126 |  .... D RPTOUT
 | 
|---|
| 127 |  .... K ^DIC("AC",DDAGPKG,DDFILE,IEN)
 | 
|---|
| 128 |  G EXIT ; GoTo Common Exit Point
 | 
|---|
| 129 | AGHDR ; Fix Application Group Xrefs Report Header
 | 
|---|
| 130 |  I $E(IOST,1,2)="C-" D  Q:$D(ESC)
 | 
|---|
| 131 |  . I PG D PAUSE Q:$D(ESC)
 | 
|---|
| 132 |  . W @IOF
 | 
|---|
| 133 |  I PG W @IOF
 | 
|---|
| 134 |  S PG=PG+1
 | 
|---|
| 135 |  W "Fix Application Group Xrefs Report     "_RPTDT,?(IOM-10),"Page: "_PG,!
 | 
|---|
| 136 |  N X
 | 
|---|
| 137 |  S X="",$P(X,"-",(IOM-1))="" W X,!
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  ; Common For All Entry Points
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | DEVICE ; Output Device Selection
 | 
|---|
| 143 |  S %ZIS="MQ"
 | 
|---|
| 144 |  D ^%ZIS
 | 
|---|
| 145 |  I POP S ESC=1 Q  ;User Escaped Device Selection
 | 
|---|
| 146 |  I $D(IO("Q")) D
 | 
|---|
| 147 |  . S ZTDESC=$S(EP="PT":"FIX PT NODES",EP="NM":"FIX DUPLICATE 'NM' NODES",EP="AG":"FIX APPLICATION GROUP XREFS",1:"")
 | 
|---|
| 148 |  . S ZTRTN=$S(EP="PT":"DEQPT",EP="NM":"DEQNM",EP="AG":"DEQAG",1:"")_"^DDFIX"
 | 
|---|
| 149 |  . S ZTSAVE("EP")=""
 | 
|---|
| 150 |  . D ^%ZTLOAD
 | 
|---|
| 151 |  . I $D(ZTSK)#2 W !,"Report queued!",!,"Task number: "_$G(ZTSK),!
 | 
|---|
| 152 |  . S ESC=1
 | 
|---|
| 153 |  . K ZTSK,ZTDESC,ZTRTN,ZTSAVE
 | 
|---|
| 154 |  . D HOME^%ZIS
 | 
|---|
| 155 |  Q
 | 
|---|
| 156 | RPTDT ; Get Report Date/Time
 | 
|---|
| 157 |  N %,%H,X,Y
 | 
|---|
| 158 |  S %H=$H
 | 
|---|
| 159 |  D YX^%DTC
 | 
|---|
| 160 |  S RPTDT=$P(Y,"@")_"@"_$E($P(Y,"@",2),1,5)
 | 
|---|
| 161 |  Q
 | 
|---|
| 162 | RPTOUT ; Print Messages
 | 
|---|
| 163 |  I $D(XPDNM) D MES^XPDUTL(X) Q  ;  KIDS install being used
 | 
|---|
| 164 |  W X,! ; KIDS install not being used
 | 
|---|
| 165 |  I $Y'>PGLEN Q
 | 
|---|
| 166 |  I EP="PT" D PTHDR Q
 | 
|---|
| 167 |  I EP="NM" D NMHDR Q
 | 
|---|
| 168 |  I EP="AG" D AGHDR Q
 | 
|---|
| 169 |  Q
 | 
|---|
| 170 | PAUSE ; End of Page Pause
 | 
|---|
| 171 |  N DIR,Y
 | 
|---|
| 172 |  S DIR(0)="E"
 | 
|---|
| 173 |  D ^DIR
 | 
|---|
| 174 |  I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) K DTOUT,DUOUT,DIRUT,DIROUT S ESC=1 Q
 | 
|---|
| 175 |  Q
 | 
|---|
| 176 | EXIT ; Common Exit Point
 | 
|---|
| 177 |  I $E(IOST,1,2)="P-" D ^%ZISC
 | 
|---|
| 178 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 179 |  K EP
 | 
|---|
| 180 |  Q
 | 
|---|