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