- DIK ;SFISC/GFT,YJK,XAK-GATHER A FILE'S XREFS TO EXECUTE ;1NOV2012
- ;;22.0;VA FileMan;**41,109,160,167**;Mar 30, 1999;Build 20
- ;Per VHA Directive 2004-038, this routine should not be modified.
- Q:"(,"'[$E($RE(DIK)) Q:'$G(DA) Q:'$D(@(DIK_"DA)")) Q:$P($G(^DD($$GLO^DILIBF(DIK),0,"DI")),U,2)["Y"&'$D(DIOVRD)&'$G(DIFROM) Q:DA'>0
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIAU,DIKALLR
- D CHKS I $D(DIKZ1) N DIKIL S DIKIL=1 G @DIKGP
- S X=2 D DD G ^DIK1
- ;
- DD1 N DISKIPIN D D,A Q
- ;
- ;
- DISKIPIN(DISKIPIN) ;ALSO CALLED FROM DIU1
- K DISKIPIN S DISKIPIN=1 D DDGO
- F DV=0:0 S DV=$O(^DD("IX","B",+$P($G(@(DIK_"0)")),U,2),DV)) Q:'DV I $G(^DD("IX",DV,"NOREINDEX")) S DISKIPIN=DISKIPIN+1
- S DISKIPIN=DISKIPIN-1 Q ;RETURN THE NUMBER OF SKIPPED INDEXES
- ;
- DD ;CALLED FROM DIKZ0
- N DISKIPIN
- DDGO D DIKJ N DIKCHK S DIKCHK=1,DV=0 D D,A
- I $G(DIK(0))["s" S DU=1 Q
- E S DV=$O(^DD(DH,"SB",DV))
- I DV>0 S DU=$O(^(DV,0)) G E:'$D(^DD(DV,.01,0)),E:$P(^(0),U,2)["W" S DW=$P($P(^DD(DH,DU,0),U,4),";") S:+DW'=DW DW=""""_DW_"""" S DV(DH,DU)=DW,DV(DH,DU,0)=DV,DU(DV)=DH D:$D(DIK0) CRT^DIKZ2 G E
- Q:$D(DIK0)
- DH S DH=$O(DU(DH)) G:DH>0 DH:$D(DV(DH)),E
- F DH=DH(1):0 S DH=$O(DU(DH)) Q:DH'>0 D D,A
- DV S DH=0 F S DH=$O(DV(DH)) Q:'DH S DU=0 F S DU=$O(DV(DH,DU)) Q:'DU I $G(DIKCHK),'$G(DIKCHK(DV(DH,DU,0))) S DV(DH,DU,"NOLOOP")=""
- S DU=1
- Q
- ;
- DW I $O(^UTILITY("DIK",DIKJ,DH,DV,0))="" K ^UTILITY("DIK",DIKJ,DH,DV)
- D S DV=$O(^DD(DH,"IX",DV)) Q:DV'>0 I '$D(^DD(DH,DV,0)) K ^DD(DH,"IX",DV) G D
- D 0
- I F DW=0:0 S DW=$O(^DD(DH,DV,1,DW)) G DW:DW'>0 I $D(^(DW,X)),"Q"'[^(X),$D(^(0)) S %=^(0) D
- .I $G(^("NOREINDEX")),$G(DISKIPIN) S DISKIPIN(DISKIPIN)=%,DISKIPIN=DISKIPIN+1 Q
- .D INX
- ;
- INX I %["TRIGGER" S %=^(X),^UTILITY("DIK",DIKJ,DH,DV,DW)="D RCR",^(DW,0)=% Q
- I %["BULLETIN MESSAGE",$G(DIK(0))["B" S %=$P("CREA^DELE",U,X)_"TE VALUE" W:$D(^(%)) !,"...('"_^(%)_"' BULLETIN WILL NOT BE TRIGGERED)..." Q
- I '$D(DIK0),X=2,$P(%,U),$P(%,U,2)]"",$P(%,U,3)="",+%=DH(1)&$G(DIKALLR)!$D(DU(+%)) D
- . S ^UTILITY("DIK",DIKJ,"KW",+%,$P(%,U,2))=DH_U_DV_U_DW
- . D CHK($G(DU(+%)),.DU,.DIKCHK)
- E D
- . S ^UTILITY("DIK",DIKJ,DH,DV,DW)=^DD(DH,DV,1,DW,X)
- . D CHK(DH,.DU,.DIKCHK)
- Q
- CHK(F,DU,DIKCHK) ;Set CHK(f) for file F and its parents
- Q:$D(DIK0)!'$G(DIKCHK)
- F Q:'F Q:$D(DIKCHK(F)) S DIKCHK(F)=1,F=$G(DU(F))
- Q
- ;
- A F DV=0:0 S DV=$O(^DD(DH,"AUDIT",DV)) Q:DV'>0 D A1 ;FIND AUDITED FIELDS
- Q
- A1 D 0 S ^UTILITY("DIK",DIKJ,DH,DV,99)="S DIIX="_(4-X)_" D:$G(DIK(0))'[""A"" AUDIT" D CHK(DH,.DU,.DIKCHK) Q
- ;
- 0 ;REMEMBER HOW TO GRAB THE FIELD'S VALUE
- S DW=$P(^DD(DH,DV,0),U,4),^UTILITY("DIK",DIKJ,DH,DV)=$P(DW,";",1),DW=$P(DW,";",2)
- S ^UTILITY("DIK",DIKJ,DH,DV,0)=$S(DW:"S X=$P($G(^(X)),U,"_DW_")",1:"S X=$E($G(^(X)),"_+$E(DW,2,9)_","_$P(DW,",",2)_")"),DW=0 Q
- ;
- IX ;
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- D CHKS I $D(DIKZ1) N DIKKS S DIKKS=1 G @DIKGP
- S X=2,DIKNM=1 D DD,1^DIK1
- IX1 ;
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKSET,DIKALLR
- I '$D(DIKNM) D CHKS I $D(DIKZ1) N DIKST S DIKST=1 G @DIKGP
- S X=1,DIKSET=1 D DD,1^DIK1
- ;
- D INDEX^DIKC(DIK,.DA,"","",$E("K",$D(DIKNM)#2)_"S"_$E("RI",$D(DIFROM)#2+1)_$E("s",$G(DIK(0))["s"))
- G Q
- ;
- IX2 ;
- Q:$D(@(DIK_"0)"))[0
- N DIKJ,DIKS,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- S X=2 D DD,1^DIK1
- D INDEX^DIKC(DIK,.DA,"","","K"_$E("RI",$D(DIFROM)#2+1)_$E("s",$G(DIK(0))["s"))
- G Q
- ;
- IXALL ;
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKSET,DIKALLR
- N DINO S X=1 D DISKIPIN(.DINO)
- D CHKS I $D(DIKZ1),'$G(DINO) N DIKSAT S DIKSAT=1,DA=0 G @DIKGP ;CAN'T DO COMPILED ROUTINE IF THERE ARE SOME WE MUST SKIP
- ;
- N DIKDASV,DIKSAVE
- M DIKDASV=DA S DIKDASV=0,DIKSAVE=DIK
- S (DA,DCNT)=0,X=1,DIKSET=1 D CNT^DIK1
- ;NOW FIRE NEW-STYLE SETS
- D INDEX^DIKC(DIKSAVE,.DIKDASV,"","","Sx"_$E("RI",$D(DIFROM)#2+1)_$E("s",$G(DIK(0))["s"))
- G Q
- ;
- IXALL2 ;
- Q:$D(@(DIK_"0)"))[0
- N DIKJ,DIKS,DIN,DH,DU,DV,DW,DIKDA,DIKDASV,DIKSAVE,DIKALLR
- N DINO S X=2 D DISKIPIN(.DINO)
- M DIKDASV=DA S DIKDASV=0,DIKSAVE=DIK
- S DIKALLR=1,(DA,DCNT)=0,X=2 D CNT^DIK1
- ;NOW FIRE NEW-STYLE KILLS
- D INDEX^DIKC(DIKSAVE,.DIKDASV,"","","Kx"_$E("RI",$D(DIFROM)#2+1)_$E("s",$G(DIK(0))["s"))
- G Q
- ;
- EN ;
- N DIKCRFIL,DIKCDIK,DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- D N(1) G:'$D(DH)!'$D(DA) Q
- S DIKCRFIL=DH M DIKCDIK=DIK
- S DIKNM=1,X=2 D:$D(DIKNX) PR,1^DIK1
- ;
- EN1 ;
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- D @$S('$D(DIKNM):"N(1)",1:"DIKJ") G:'$D(DH)!'$D(DA) Q
- I '$D(DIKNM) N DIKCRFIL,DIKCDIK S DIKCRFIL=DH M DIKCDIK=DIK
- S X=1 D:$D(DIKNX) PR,1^DIK1
- I $D(^DD("IX","AC",DIKCRFIL)) M DIK=DIKCDIK D INDEX^DIKC(DIKCRFIL,.DA,$P(DIK(1),U),$P(DIK(1),U,2,999),$E("K",$D(DIKNM))_"S"_$E("RI",$D(DIFROM)#2+1))
- G Q
- ;
- EN2 ;
- N DIKCRFIL,DIKCDIK,DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- D N(1) G:'$D(DH)!'$D(DA) Q
- S DIKCRFIL=DH M DIKCDIK=DIK
- S X=2 D:$D(DIKNX) PR,1^DIK1
- I $D(^DD("IX","AC",DIKCRFIL)) M DIK=DIKCDIK D INDEX^DIKC(DIKCRFIL,.DA,$P(DIK(1),U),$P(DIK(1),U,2,999),"K"_$E("RI",$D(DIFROM)#2+1))
- G Q
- ;
- ENALL ;
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKXREF,DIKDASV,DIKSAVE,DHSAVE,DIKALLR
- D N(0) G:'$D(DH) Q
- M DIKDASV=DA,DIKSAVE=DIK,DHSAVE=DH S DIKDASV=0
- S (DA,DCNT)=0,X=1 D PR,CNT^DIK1
- D:$D(^DD("IX","AC",DHSAVE)) INDEX^DIKC(DHSAVE,.DIKDASV,$P(DIKSAVE(1),U),$P(DIKSAVE(1),U,2,999),"Sx"_$E("RI",$D(DIFROM)#2+1))
- G Q
- ;
- ENALL2 ;
- N DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKXREF,DIKDASV,DIKSAVE,DHSAVE,DIKALLR
- D N(0) G:'$D(DH) Q
- M DIKDASV=DA,DIKSAVE=DIK,DHSAVE=DH S DIKDASV=0
- S DIKALLR=1,(DA,DCNT)=0,X=2 D PR,CNT^DIK1
- D:$D(^DD("IX","AC",DHSAVE)) INDEX^DIKC(DHSAVE,.DIKDASV,$P(DIKSAVE(1),U),$P(DIKSAVE(1),U,2,999),"Kx"_$E("RI",$D(DIFROM)#2+1))
- G Q
- ;
- ;
- N(REINDOK) Q:'$D(DIK)!'$D(DIK(1))!'$D(@(DIK_"0)")) D DIKJ S DIKND=$P(DIK(1),U)
- I '$D(^DD(DH,"IX",DIKND)) K:'$D(^DD("IX","F",DH,DIKND)) DH Q
- I $P(DIK(1),U,2)="" D
- . S %=0 F A1=1:1 S %=$O(^DD(DH,DIKND,1,%)) Q:'% I '$G(^(%,"NOREINDEX"))!REINDOK S DIKNX(A1)=% ;SKIP NON-RERUNNABLE INDEX IF NOT SPECIFIED PRECISELY AND IF THIS IS A MASS REINDEX
- E F A1=1:1 Q:$P(DIK(1),U,A1+1)="" S DIKNX(A1)=$P(DIK(1),U,A1+1)
- K A1,% Q
- ;
- PR S DV=DIKND I '$D(^DD(DH,"IX",DV)),'$D(^DD(DH,"AUDIT",DV)) Q
- D 0 S DIKZ1=1 D CK K DIKZ1
- D:$D(^DD(DH,"AUDIT",DV)) A1 S DU=1 Q
- ;
- CK Q:'$D(DIKNX(DIKZ1))
- F DW=0:0 S DW=$O(^DD(DH,DV,1,DW)) Q:DW'>0 I $D(^(DW,0)),(DW=DIKNX(DIKZ1))!($P(^(0),U,2)=DIKNX(DIKZ1)),$D(^(X)),"Q"'[^(X) S %=^(0) D INX
- S DIKZ1=DIKZ1+1 G CK
- ;
- FREE(X) N V S V=$G(^UTILITY("DIK",X)) I 'V Q 1
- Q $H-1>V
- ;
- DIKJ F DIKJ=$J:.01 I $$FREE(DIKJ) K ^UTILITY("DIK",DIKJ) S ^UTILITY("DIK",DIKJ)=$H Q ;TO ENABLE RECURSIVE CALL, FIND A "$J" THAT'S UNUSED
- INT K DIKS,DIN,DH,DU,DV,DW S U="^",DH=+$P(@(DIK_"0)"),U,2),DH(1)=DH Q
- ;
- CHKS ;
- I $D(@(DIK_"0)"))[0 S DIKZ1=1,DIKGP="Q^DIK1" Q
- S DIKZ1=+$P(^(0),"^",2) I DIKZ1,$D(^DD(DIKZ1,0,"DIK")),$$ROUEXIST^DILIBF(^("DIK")) S DIKGP="^"_^DD(DIKZ1,0,"DIK") Q
- K DIKZ1 Q
- ;
- Q K DIKND,DIKNX,DIKZ1,DIKNM,DIAU,DIG,DIH,DIV,DIW,%,DH Q
- DIK ;SFISC/GFT,YJK,XAK-GATHER A FILE'S XREFS TO EXECUTE ;1NOV2012
- +1 ;;22.0;VA FileMan;**41,109,160,167**;Mar 30, 1999;Build 20
- +2 ;Per VHA Directive 2004-038, this routine should not be modified.
- +3 IF "(,"'[$EXTRACT($REVERSE(DIK))
- QUIT
- IF '$GET(DA)
- QUIT
- IF '$DATA(@(DIK_"DA)"))
- QUIT
- IF $PIECE($GET(^DD($$GLO^DILIBF(DIK),0,"DI")),U,2)["Y"&'$DATA(DIOVRD)&'$GET(DIFROM)
- QUIT
- IF DA'>0
- QUIT
- +4 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIAU,DIKALLR
- +5 DO CHKS
- IF $DATA(DIKZ1)
- NEW DIKIL
- SET DIKIL=1
- GOTO @DIKGP
- +6 SET X=2
- DO DD
- GOTO ^DIK1
- +7 ;
- DD1 NEW DISKIPIN
- DO D
- DO A
- QUIT
- +1 ;
- +2 ;
- DISKIPIN(DISKIPIN) ;ALSO CALLED FROM DIU1
- +1 KILL DISKIPIN
- SET DISKIPIN=1
- DO DDGO
- +2 FOR DV=0:0
- SET DV=$ORDER(^DD("IX","B",+$PIECE($GET(@(DIK_"0)")),U,2),DV))
- IF 'DV
- QUIT
- IF $GET(^DD("IX",DV,"NOREINDEX"))
- SET DISKIPIN=DISKIPIN+1
- +3 ;RETURN THE NUMBER OF SKIPPED INDEXES
- SET DISKIPIN=DISKIPIN-1
- QUIT
- +4 ;
- DD ;CALLED FROM DIKZ0
- +1 NEW DISKIPIN
- DDGO DO DIKJ
- NEW DIKCHK
- SET DIKCHK=1
- SET DV=0
- DO D
- DO A
- +1 IF $GET(DIK(0))["s"
- SET DU=1
- QUIT
- E SET DV=$ORDER(^DD(DH,"SB",DV))
- +1 IF DV>0
- SET DU=$ORDER(^(DV,0))
- IF '$DATA(^DD(DV,.01,0))
- GOTO E
- IF $PIECE(^(0),U,2)["W"
- GOTO E
- SET DW=$PIECE($PIECE(^DD(DH,DU,0),U,4),";")
- IF +DW'=DW
- SET DW=""""_DW_""""
- SET DV(DH,DU)=DW
- SET DV(DH,DU,0)=DV
- SET DU(DV)=DH
- IF $DATA(DIK0)
- DO CRT^DIKZ2
- GOTO E
- +2 IF $DATA(DIK0)
- QUIT
- DH SET DH=$ORDER(DU(DH))
- IF DH>0
- IF $DATA(DV(DH))
- GOTO DH
- GOTO E
- +1 FOR DH=DH(1):0
- SET DH=$ORDER(DU(DH))
- IF DH'>0
- QUIT
- DO D
- DO A
- DV SET DH=0
- FOR
- SET DH=$ORDER(DV(DH))
- IF 'DH
- QUIT
- SET DU=0
- FOR
- SET DU=$ORDER(DV(DH,DU))
- IF 'DU
- QUIT
- IF $GET(DIKCHK)
- IF '$GET(DIKCHK(DV(DH,DU,0)))
- SET DV(DH,DU,"NOLOOP")=""
- +1 SET DU=1
- +2 QUIT
- +3 ;
- DW IF $ORDER(^UTILITY("DIK",DIKJ,DH,DV,0))=""
- KILL ^UTILITY("DIK",DIKJ,DH,DV)
- D SET DV=$ORDER(^DD(DH,"IX",DV))
- IF DV'>0
- QUIT
- IF '$DATA(^DD(DH,DV,0))
- KILL ^DD(DH,"IX",DV)
- GOTO D
- +1 DO 0
- I FOR DW=0:0
- SET DW=$ORDER(^DD(DH,DV,1,DW))
- IF DW'>0
- GOTO DW
- IF $DATA(^(DW,X))
- IF "Q"'[^(X)
- IF $DATA(^(0))
- SET %=^(0)
- Begin DoDot:1
- +1 IF $GET(^("NOREINDEX"))
- IF $GET(DISKIPIN)
- SET DISKIPIN(DISKIPIN)=%
- SET DISKIPIN=DISKIPIN+1
- QUIT
- +2 DO INX
- End DoDot:1
- +3 ;
- INX IF %["TRIGGER"
- SET %=^(X)
- SET ^UTILITY("DIK",DIKJ,DH,DV,DW)="D RCR"
- SET ^(DW,0)=%
- QUIT
- +1 IF %["BULLETIN MESSAGE"
- IF $GET(DIK(0))["B"
- SET %=$PIECE("CREA^DELE",U,X)_"TE VALUE"
- IF $DATA(^(%))
- WRITE !,"...('"_^(%)_"' BULLETIN WILL NOT BE TRIGGERED)..."
- QUIT
- +2 IF '$DATA(DIK0)
- IF X=2
- IF $PIECE(%,U)
- IF $PIECE(%,U,2)]""
- IF $PIECE(%,U,3)=""
- IF +%=DH(1)&$GET(DIKALLR)!$DATA(DU(+%))
- Begin DoDot:1
- +3 SET ^UTILITY("DIK",DIKJ,"KW",+%,$PIECE(%,U,2))=DH_U_DV_U_DW
- +4 DO CHK($GET(DU(+%)),.DU,.DIKCHK)
- End DoDot:1
- +5 IF '$TEST
- Begin DoDot:1
- +6 SET ^UTILITY("DIK",DIKJ,DH,DV,DW)=^DD(DH,DV,1,DW,X)
- +7 DO CHK(DH,.DU,.DIKCHK)
- End DoDot:1
- +8 QUIT
- CHK(F,DU,DIKCHK) ;Set CHK(f) for file F and its parents
- +1 IF $DATA(DIK0)!'$GET(DIKCHK)
- QUIT
- +2 FOR
- IF 'F
- QUIT
- IF $DATA(DIKCHK(F))
- QUIT
- SET DIKCHK(F)=1
- SET F=$GET(DU(F))
- +3 QUIT
- +4 ;
- A ;FIND AUDITED FIELDS
- FOR DV=0:0
- SET DV=$ORDER(^DD(DH,"AUDIT",DV))
- IF DV'>0
- QUIT
- DO A1
- +1 QUIT
- A1 DO 0
- SET ^UTILITY("DIK",DIKJ,DH,DV,99)="S DIIX="_(4-X)_" D:$G(DIK(0))'[""A"" AUDIT"
- DO CHK(DH,.DU,.DIKCHK)
- QUIT
- +1 ;
- 0 ;REMEMBER HOW TO GRAB THE FIELD'S VALUE
- +1 SET DW=$PIECE(^DD(DH,DV,0),U,4)
- SET ^UTILITY("DIK",DIKJ,DH,DV)=$PIECE(DW,";",1)
- SET DW=$PIECE(DW,";",2)
- +2 SET ^UTILITY("DIK",DIKJ,DH,DV,0)=$SELECT(DW:"S X=$P($G(^(X)),U,"_DW_")",1:"S X=$E($G(^(X)),"_+$EXTRACT(DW,2,9)_","_$PIECE(DW,",",2)_")")
- SET DW=0
- QUIT
- +3 ;
- IX ;
- +1 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- +2 DO CHKS
- IF $DATA(DIKZ1)
- NEW DIKKS
- SET DIKKS=1
- GOTO @DIKGP
- +3 SET X=2
- SET DIKNM=1
- DO DD
- DO 1^DIK1
- IX1 ;
- +1 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKSET,DIKALLR
- +2 IF '$DATA(DIKNM)
- DO CHKS
- IF $DATA(DIKZ1)
- NEW DIKST
- SET DIKST=1
- GOTO @DIKGP
- +3 SET X=1
- SET DIKSET=1
- DO DD
- DO 1^DIK1
- +4 ;
- +5 DO INDEX^DIKC(DIK,.DA,"","",$EXTRACT("K",$DATA(DIKNM)#2)_"S"_$EXTRACT("RI",$DATA(DIFROM)#2+1)_$EXTRACT("s",$GET(DIK(0))["s"))
- +6 GOTO Q
- +7 ;
- IX2 ;
- +1 IF $DATA(@(DIK_"0)"))[0
- QUIT
- +2 NEW DIKJ,DIKS,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- +3 SET X=2
- DO DD
- DO 1^DIK1
- +4 DO INDEX^DIKC(DIK,.DA,"","","K"_$EXTRACT("RI",$DATA(DIFROM)#2+1)_$EXTRACT("s",$GET(DIK(0))["s"))
- +5 GOTO Q
- +6 ;
- IXALL ;
- +1 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKSET,DIKALLR
- +2 NEW DINO
- SET X=1
- DO DISKIPIN(.DINO)
- +3 ;CAN'T DO COMPILED ROUTINE IF THERE ARE SOME WE MUST SKIP
- DO CHKS
- IF $DATA(DIKZ1)
- IF '$GET(DINO)
- NEW DIKSAT
- SET DIKSAT=1
- SET DA=0
- GOTO @DIKGP
- +4 ;
- +5 NEW DIKDASV,DIKSAVE
- +6 MERGE DIKDASV=DA
- SET DIKDASV=0
- SET DIKSAVE=DIK
- +7 SET (DA,DCNT)=0
- SET X=1
- SET DIKSET=1
- DO CNT^DIK1
- +8 ;NOW FIRE NEW-STYLE SETS
- +9 DO INDEX^DIKC(DIKSAVE,.DIKDASV,"","","Sx"_$EXTRACT("RI",$DATA(DIFROM)#2+1)_$EXTRACT("s",$GET(DIK(0))["s"))
- +10 GOTO Q
- +11 ;
- IXALL2 ;
- +1 IF $DATA(@(DIK_"0)"))[0
- QUIT
- +2 NEW DIKJ,DIKS,DIN,DH,DU,DV,DW,DIKDA,DIKDASV,DIKSAVE,DIKALLR
- +3 NEW DINO
- SET X=2
- DO DISKIPIN(.DINO)
- +4 MERGE DIKDASV=DA
- SET DIKDASV=0
- SET DIKSAVE=DIK
- +5 SET DIKALLR=1
- SET (DA,DCNT)=0
- SET X=2
- DO CNT^DIK1
- +6 ;NOW FIRE NEW-STYLE KILLS
- +7 DO INDEX^DIKC(DIKSAVE,.DIKDASV,"","","Kx"_$EXTRACT("RI",$DATA(DIFROM)#2+1)_$EXTRACT("s",$GET(DIK(0))["s"))
- +8 GOTO Q
- +9 ;
- EN ;
- +1 NEW DIKCRFIL,DIKCDIK,DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- +2 DO N(1)
- IF '$DATA(DH)!'$DATA(DA)
- GOTO Q
- +3 SET DIKCRFIL=DH
- MERGE DIKCDIK=DIK
- +4 SET DIKNM=1
- SET X=2
- IF $DATA(DIKNX)
- DO PR
- DO 1^DIK1
- +5 ;
- EN1 ;
- +1 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- +2 DO @$SELECT('$DATA(DIKNM):"N(1)",1:"DIKJ")
- IF '$DATA(DH)!'$DATA(DA)
- GOTO Q
- +3 IF '$DATA(DIKNM)
- NEW DIKCRFIL,DIKCDIK
- SET DIKCRFIL=DH
- MERGE DIKCDIK=DIK
- +4 SET X=1
- IF $DATA(DIKNX)
- DO PR
- DO 1^DIK1
- +5 IF $DATA(^DD("IX","AC",DIKCRFIL))
- MERGE DIK=DIKCDIK
- DO INDEX^DIKC(DIKCRFIL,.DA,$PIECE(DIK(1),U),$PIECE(DIK(1),U,2,999),$EXTRACT("K",$DATA(DIKNM))_"S"_$EXTRACT("RI",$DATA(DIFROM)#2+1))
- +6 GOTO Q
- +7 ;
- EN2 ;
- +1 NEW DIKCRFIL,DIKCDIK,DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKALLR
- +2 DO N(1)
- IF '$DATA(DH)!'$DATA(DA)
- GOTO Q
- +3 SET DIKCRFIL=DH
- MERGE DIKCDIK=DIK
- +4 SET X=2
- IF $DATA(DIKNX)
- DO PR
- DO 1^DIK1
- +5 IF $DATA(^DD("IX","AC",DIKCRFIL))
- MERGE DIK=DIKCDIK
- DO INDEX^DIKC(DIKCRFIL,.DA,$PIECE(DIK(1),U),$PIECE(DIK(1),U,2,999),"K"_$EXTRACT("RI",$DATA(DIFROM)#2+1))
- +6 GOTO Q
- +7 ;
- ENALL ;
- +1 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKXREF,DIKDASV,DIKSAVE,DHSAVE,DIKALLR
- +2 DO N(0)
- IF '$DATA(DH)
- GOTO Q
- +3 MERGE DIKDASV=DA,DIKSAVE=DIK,DHSAVE=DH
- SET DIKDASV=0
- +4 SET (DA,DCNT)=0
- SET X=1
- DO PR
- DO CNT^DIK1
- +5 IF $DATA(^DD("IX","AC",DHSAVE))
- DO INDEX^DIKC(DHSAVE,.DIKDASV,$PIECE(DIKSAVE(1),U),$PIECE(DIKSAVE(1),U,2,999),"Sx"_$EXTRACT("RI",$DATA(DIFROM)#2+1))
- +6 GOTO Q
- +7 ;
- ENALL2 ;
- +1 NEW DIKJ,DIKS,DIKZ1,DIN,DH,DU,DV,DW,DIKDA,DIKXREF,DIKDASV,DIKSAVE,DHSAVE,DIKALLR
- +2 DO N(0)
- IF '$DATA(DH)
- GOTO Q
- +3 MERGE DIKDASV=DA,DIKSAVE=DIK,DHSAVE=DH
- SET DIKDASV=0
- +4 SET DIKALLR=1
- SET (DA,DCNT)=0
- SET X=2
- DO PR
- DO CNT^DIK1
- +5 IF $DATA(^DD("IX","AC",DHSAVE))
- DO INDEX^DIKC(DHSAVE,.DIKDASV,$PIECE(DIKSAVE(1),U),$PIECE(DIKSAVE(1),U,2,999),"Kx"_$EXTRACT("RI",$DATA(DIFROM)#2+1))
- +6 GOTO Q
- +7 ;
- +8 ;
- N(REINDOK) IF '$DATA(DIK)!'$DATA(DIK(1))!'$DATA(@(DIK_"0)"))
- QUIT
- DO DIKJ
- SET DIKND=$PIECE(DIK(1),U)
- +1 IF '$DATA(^DD(DH,"IX",DIKND))
- IF '$DATA(^DD("IX","F",DH,DIKND))
- KILL DH
- QUIT
- +2 IF $PIECE(DIK(1),U,2)=""
- Begin DoDot:1
- +3 ;SKIP NON-RERUNNABLE INDEX IF NOT SPECIFIED PRECISELY AND IF THIS IS A MASS REINDEX
- SET %=0
- FOR A1=1:1
- SET %=$ORDER(^DD(DH,DIKND,1,%))
- IF '%
- QUIT
- IF '$GET(^(%,"NOREINDEX"))!REINDOK
- SET DIKNX(A1)=%
- End DoDot:1
- +4 IF '$TEST
- FOR A1=1:1
- IF $PIECE(DIK(1),U,A1+1)=""
- QUIT
- SET DIKNX(A1)=$PIECE(DIK(1),U,A1+1)
- +5 KILL A1,%
- QUIT
- +6 ;
- PR SET DV=DIKND
- IF '$DATA(^DD(DH,"IX",DV))
- IF '$DATA(^DD(DH,"AUDIT",DV))
- QUIT
- +1 DO 0
- SET DIKZ1=1
- DO CK
- KILL DIKZ1
- +2 IF $DATA(^DD(DH,"AUDIT",DV))
- DO A1
- SET DU=1
- QUIT
- +3 ;
- CK IF '$DATA(DIKNX(DIKZ1))
- QUIT
- +1 FOR DW=0:0
- SET DW=$ORDER(^DD(DH,DV,1,DW))
- IF DW'>0
- QUIT
- IF $DATA(^(DW,0))
- IF (DW=DIKNX(DIKZ1))!($PIECE(^(0),U,2)=DIKNX(DIKZ1))
- IF $DATA(^(X))
- IF "Q"'[^(X)
- SET %=^(0)
- DO INX
- +2 SET DIKZ1=DIKZ1+1
- GOTO CK
- +3 ;
- FREE(X) NEW V
- SET V=$GET(^UTILITY("DIK",X))
- IF 'V
- QUIT 1
- +1 QUIT $HOROLOG-1>V
- +2 ;
- DIKJ ;TO ENABLE RECURSIVE CALL, FIND A "$J" THAT'S UNUSED
- FOR DIKJ=$JOB:.01
- IF $$FREE(DIKJ)
- KILL ^UTILITY("DIK",DIKJ)
- SET ^UTILITY("DIK",DIKJ)=$HOROLOG
- QUIT
- INT KILL DIKS,DIN,DH,DU,DV,DW
- SET U="^"
- SET DH=+$PIECE(@(DIK_"0)"),U,2)
- SET DH(1)=DH
- QUIT
- +1 ;
- CHKS ;
- +1 IF $DATA(@(DIK_"0)"))[0
- SET DIKZ1=1
- SET DIKGP="Q^DIK1"
- QUIT
- +2 SET DIKZ1=+$PIECE(^(0),"^",2)
- IF DIKZ1
- IF $DATA(^DD(DIKZ1,0,"DIK"))
- IF $$ROUEXIST^DILIBF(^("DIK"))
- SET DIKGP="^"_^DD(DIKZ1,0,"DIK")
- QUIT
- +3 KILL DIKZ1
- QUIT
- +4 ;
- Q KILL DIKND,DIKNX,DIKZ1,DIKNM,DIAU,DIG,DIH,DIV,DIW,%,DH
- QUIT