| 1 | DIKD1 ;SFISC/MKO-DELETE XREF DATA ;1:03 PM  20 Aug 1999
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**12**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | KILL(DIFIL,DIFLD,DIXR,DIFLG,DIKDMSG) ;Delete xref data
 | 
|---|
| 6 |  N DA,DIDEC,DIF,DIFILR,DIKILL,DIMF,DINAM,DIQUIT,DIROOT,DITOPF,DITYP
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;Init
 | 
|---|
| 9 |  I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
 | 
|---|
| 10 |  S DIFLG=$G(DIFLG)
 | 
|---|
| 11 |  S DIF=$E("D",DIFLG'["d")
 | 
|---|
| 12 |  I DIFLG'["c" D CHK G:$G(DIQUIT) END
 | 
|---|
| 13 |  D INIT G:$D(DIQUIT) END
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ;Fire the kill logic
 | 
|---|
| 16 |  D:$G(DIFLG)["W"
 | 
|---|
| 17 |  . I DITYP="BULLETIN"!(DITYP="MUMPS")!(DITYP="TRIGGER") D
 | 
|---|
| 18 |  .. W !,"Executing kill logic ..."
 | 
|---|
| 19 |  . E  W !,"Removing index ..."
 | 
|---|
| 20 |  D FIRE(DITOPF,DIROOT)
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 | END ;Move error message if necessary and quit
 | 
|---|
| 23 |  D:$G(DIKDMSG)]"" CALLOUT^DIEFU(DIKDMSG)
 | 
|---|
| 24 |  Q
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 | FIRE(DIFILE,DIROOT) ;Fire the kill logic
 | 
|---|
| 27 |  N DICNT,DILAST,DIMULTF,DISBROOT,X
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;If we're at the level where the index resides,
 | 
|---|
| 30 |  ;check whether we can delete the entire index with one kill
 | 
|---|
| 31 |  I DIFILE=DIFILR,DINAM?1.E,DITYP'="MNEMONIC",DITYP'="MUMPS" D
 | 
|---|
| 32 |  . K @DIROOT@(DINAM)
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ;Else, if we're at the level where the index is defined,
 | 
|---|
| 35 |  ;execute the kill logic for each entry
 | 
|---|
| 36 |  E  I DIFILE=DIFIL S (DICNT,DA)=0 F  S DA=$O(@DIROOT@(DA)) Q:DA'=+DA  D
 | 
|---|
| 37 |  . N X
 | 
|---|
| 38 |  . S DICNT=DICNT+1
 | 
|---|
| 39 |  . X DIDEC X:X]"" DIKILL
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ;Else, for all entries, descend into multiple
 | 
|---|
| 42 |  E  S DIMULTF=$O(DIMF(DIFILE,0)) I DIMULTF S (DICNT,DA)=0 F  S DA=$O(@DIROOT@(DA)) Q:DA'=+DA  D
 | 
|---|
| 43 |  . S DICNT=DICNT+1
 | 
|---|
| 44 |  . S DISBROOT=$NA(@DIROOT@(DA,DIMF(DIFILE,DIMULTF))) Q:'$D(@DISBROOT)
 | 
|---|
| 45 |  . D PUSHDA^DIKCU(.DA)
 | 
|---|
| 46 |  . D FIRE(DIMF(DIFILE,DIMULTF,0),DISBROOT)
 | 
|---|
| 47 |  . D POPDA^DIKCU(.DA)
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  I $D(DICNT),$D(@DIROOT@(0))#2 D
 | 
|---|
| 50 |  . S DILAST=$O(@DIROOT@(" "),-1)
 | 
|---|
| 51 |  . S:'DILAST DILAST="" S:'DICNT DICNT=""
 | 
|---|
| 52 |  . S $P(@DIROOT@(0),U,3,4)=DILAST_U_DICNT
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | CHK ;Check input parameters
 | 
|---|
| 56 |  I '$G(DIFIL) D:DIF["D" ERR^DIKCU2(202,"","","","FILE") D QUIT
 | 
|---|
| 57 |  I '$G(DIFLD) D:DIF["D" ERR^DIKCU2(202,"","","","FIELD") D QUIT
 | 
|---|
| 58 |  I '$G(DIQUIT),'$$VFLD^DIKCU1($G(DIFIL),$G(DIFLD),DIF) D QUIT
 | 
|---|
| 59 |  I '$G(DIXR) D:DIF["D" ERR^DIKCU2(202,"","","","CROSS-REFERENCE") D QUIT
 | 
|---|
| 60 |  D:'$$VFLAG^DIKCU1(DIFLG,"Wcd",DIF) QUIT
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | INIT ;Get xref info and subfile info
 | 
|---|
| 64 |  N DIXR0
 | 
|---|
| 65 |  S DIXR0=$G(^DD(DIFIL,DIFLD,1,DIXR,0)) G:DIXR0="" QUIT
 | 
|---|
| 66 |  S DIFILR=$P(DIXR0,U),DINAM=$P(DIXR0,U,2),DITYP=$P(DIXR0,U,3)
 | 
|---|
| 67 |  G:DITYP="BULLETIN" QUIT
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  S DIKILL=$G(^DD(DIFIL,DIFLD,1,DIXR,2))
 | 
|---|
| 70 |  G:DIKILL="Q"!(DIKILL?."^") QUIT
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  D SBINFO^DIKCU(DIFIL,.DIMF)
 | 
|---|
| 73 |  I '$D(DIMF) S DITOPF=DIFIL
 | 
|---|
| 74 |  E  S DITOPF=0 F  S DITOPF=$O(DIMF(DITOPF)) Q:'$G(^DD(DITOPF,0,"UP"))
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  S DIROOT=$$CREF^DILF($G(^DIC(DITOPF,0,"GL")))
 | 
|---|
| 77 |  S DIDEC=$$DEC^DIKC2(DIFIL,DIFLD)
 | 
|---|
| 78 |  G:DIROOT=""!(DIDEC="") QUIT
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | QUIT ;Set flag to quit
 | 
|---|
| 82 |  S DIQUIT=1
 | 
|---|
| 83 |  Q
 | 
|---|