| 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 | 
|---|