DIKZ ;SFISC/XAK-XREF COMPILER ;19JAN2010
;;22.0;VA FileMan;**140,163**;Mar 30, 1999;Build 30
;Per VHA Directive 2004-038, this routine should not be modified.
I $G(DUZ(0))'="@" W $C(7),$$EZBLD^DIALOG(101) Q
EN1 N DIKJ,%X D:'$D(DISYS) OS^DII
I '$D(^DD("OS",DISYS,"ZS")) W $C(7),$$EZBLD^DIALOG(820) Q
S U="^" S:'$G(DTIME) DTIME=300
D SIZ^DIPZ0(8036) G:$D(DTOUT)!($D(DUOUT))!('X) Q1 S DMAX=X
FILE K DIC S DMAX=X,DIC="^DIC(",DIC(0)="AEQ" D ^DIC G Q1:Y'>0 N DIPZ S DIPZ=+Y
D RNM^DIPZ0(8036) G:$D(DTOUT)!($D(DUOUT))!(X="") Q1 S DNM=X
W ! S DIR(0)="Y",DIR("A")=$$EZBLD^DIALOG(8020) D ^DIR K DIR G:'Y!($D(DIRUT)) Q1
S X=DNM,Y=DIPZ K DIPZ
EN ;
S Y(1)=$$EZBLD^DIALOG(8036),Y(3)=Y D BLD^DIALOG(8024,.Y,"","DIR") W:'$G(DIKZS) !!,DIR,! K Y(1),Y(3)
K ^UTILITY($J),^UTILITY("DIK",$J) N DIK,DIFILENO
S DNM=X,(DH,DIFILENO)=+Y I $D(^DIC(+Y,0,"GL")) S DIK2=^("GL")
I '$D(DIK2)!(DMAX<2400) G Q
S X=DH D DELETROU^DIEZ(DNM),A^DIU21,WAIT^DICD:'$G(DIKZS),DT^DICRW ;DELETE OLD ROUTINES, DELETE "DIK" NODES
S (DRN,DIKZQ,T)=0,DMAX=DMAX-100
;
;Load indexes defined in Index file
N DIXRLIST,DIKMF
K ^TMP("DIKC",$J)
D LOADALL^DIKC1(DIFILENO,"KS","R","",$NA(^TMP("DIKC",$J)),"",.DIKMF)
;
; compile kill logic
S (DIKA,A)=1,X=2,DIKVR="DIKILL",DIK=DIK2
D Q2,NEWR S ^UTILITY($J,0,3)=" S DIKZK="_X
S DIKGO="^"_DNM_1 ;starting ROUTINE name
D ^DIKZ0 G:DIKZQ Q D RTE
;
; compile set logic
S (DIKA,A)=1,X=1,DIKVR="DISET",DIK=DIK2
D Q2,NEWR S ^UTILITY($J,0,3)=" S DIKZK="_X
S DIKGO=DIKGO_",^"_DNM_DRN
D ^DIKZ0 G:DIKZQ Q D RTE
;
; compile driver code
D Q2,^DIKZ1
;
; finish up
S:'DIKZQ ^DD(DIFILENO,0,"DIKOLD")=DNM
Q I DIKZQ S X=DH(1) D A^DIU21
Q1 K DH,X,Y,DIK4,DIKQ,DIKC,T,DV,DIK8,DU,DW,DW1,DIKGO,DRN,DNM,DTOUT,DIRUT,DIROUT,DUOUT,DIC,A,%,%H,%Y
K DIKVR,DIK6,DIKA,DIKR,DMAX,DIK2,DIKCT,DIK1,DIK0,^UTILITY($J),^("DIK"),DIK,DIKZQ,DIKZZ,DIKZZ1,DIKZOVFL
K ^TMP("DIKC",$J)
Q2 K DIKRT,DIKLW,DIKL2
Q
SV ; transfer the accumulated code in ^UTILITY($J,#) to ^UTILITY($J,0,#)
; (the routine buffer) and call SAVE to flush the buffer into a routine
; whenever it's full. Flush the buffer one more time when done.
S DNM(1)=DNM_DRN
F DIKR=0:0 S DIKR=$O(^UTILITY($J,DIKR)) Q:DIKR'>0 S %=^(DIKR) K ^(DIKR) D:T+$L(%)>DMAX S ^UTILITY($J,0,DIKR)=%,T=T+$L(%)+2
. N DIKZMORE S DIKZMORE=1 D SAVE
D SAVE
Q
SAVE ; save the accumulated code in ^UTILITY($J,0,#) as a routine
I DIKR,$E($P(%," ",2))="." F D Q:$E($P(%," ",2))'="."
. S ^UTILITY($J,DIKR)=%
. S DIKR=$O(^UTILITY($J,0,DIKR),-1),%=^(DIKR) K ^(DIKR)
I $D(DIKLW),'DIKR S ^UTILITY($J,0,997)=" G:'$D(DIKLM) "_$C(64+DIKCT)_$S(DNM_DRN'=DNM(1):"^"_DNM(1),1:"")_" Q:$D("_DIKVR_")"
I $D(DIKLW),DIKR S ^UTILITY($J,0,998)=" G ^"_DNM_(DRN+1)
S ^UTILITY($J,0,999)="END "_$S($D(DIKRT)&'DIKR:"Q",1:"G "_$S(DIKR&($D(DIKLW)):"END",1:"")_U_DNM_(DRN+1))
N X,DIR S X=DNM_DRN X ^DD("OS",DISYS,"ZS") S X(1)=X D BLD^DIALOG(8025,.X,"","DIR") W:'$G(DIKZS) !,DIR S:$G(DIKZRLA)]"" @DIKZRLA@(DNM_DRN)="",DIKZRLAF=1
D NEWR:'$D(DIKRT)!$G(DIKZMORE) Q:DIKZQ S ^DD(DH,0,"DIK")=DNM K DIKL2
Q
NEWR ;
I '$D(DIKRT),T,$D(%),T+$L(%)>DMAX S DIKZDH=+$P(^UTILITY($J,0,1),"#",2)
K ^UTILITY($J,0) S DIKR=4,T=0,DRN=DRN+1 I $L(DNM_DRN)>8 W:'$G(DIKZS) $C(7),!,DNM_DRN_$$EZBLD^DIALOG(1503) S:$G(DIKZRLA)]"" DIKZRLAF=0 S DIKZQ=1 Q
S ^UTILITY($J,0,1)=DNM_DRN_" ; COMPILED XREF FOR FILE #"_$S($D(DIKZDH):DIKZDH,1:DH)_" ; "_$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_$E(DT,2,3),^(2)=" ; "
K DIKZDH Q
RTE ;
N DIKFIL,DIKSUB,DIKLIST,DIKP
;Build DIKSUB(file)=subfile1,subfile2,... list
S DIKFIL=0 F S DIKFIL=$O(DIK(X,DIKFIL)) Q:'DIKFIL D
. S DIKSUB=0 F S DIKSUB=$O(^DD(DIKFIL,"SB",DIKSUB)) Q:'DIKSUB D
.. S:$D(DIK(X,DIKSUB))#2 DIKSUB(DIKFIL)=$G(DIKSUB(DIKFIL))_DIKSUB_","
;
;Build DIKLIST(file)=subfile1,subfile2,...
M DIKLIST=DIKSUB
S DIKFIL=0 F S DIKFIL=$O(DIKSUB(DIKFIL)) Q:'DIKFIL D
. S DIKP=0
. F D Q:DIKP'<($L(DIKLIST(DIKFIL),",")-1)
.. F DIKP=DIKP+1:1:$L(DIKLIST(DIKFIL),",")-1 D
... S DIKSUB=$P(DIKLIST(DIKFIL),",",DIKP)
... S DIKLIST(DIKFIL)=DIKLIST(DIKFIL)_$G(DIKSUB(DIKSUB))
K DIKSUB
;
;Convert file numbers in DIKLIST to routine list
S DIKFIL=0 F S DIKFIL=$O(DIKLIST(DIKFIL)) Q:'DIKFIL D
. S $E(DIKLIST(DIKFIL),$L(DIKLIST(DIKFIL)))=""
. S DIKLIST(DIKFIL)=DIKFIL_","_DIKLIST(DIKFIL)
. F DIKP=1:1:$L(DIKLIST(DIKFIL),",") D
.. S DIKSUB=$P(DIKLIST(DIKFIL),",",DIKP)
.. S $P(DIKLIST(DIKFIL),",",DIKP)=DIK(X,DIKSUB)
;
;Move list to DIK
M DIK(X)=DIKLIST
K DIKFIL,DIKLIST,DIKP
S DIKRT=1,A=A-1,DH=DH(1) G SV
;
EN2(Y,DIKZFLGS,X,DMAX,DIKZRLA,DIKZZMSG) ;Silent or Talking with parameter passing
;and optionally return list of routines built and if successful
;FILE#,FLAGS,ROUTINE,RTNMAXSIZE,RTNLISTARRAY,MSGARRAY
;Y=FILE NUMBER (required)
;FLAGS="T"alk (optional)
;X=ROUTINE NAME (required)
;DMAX=ROUTINE SIZE (optional)
;DIKZRLA=ROUTINE LIST ARRAY, by value (optional)
;DIKZZMSG=MESSAGE ARRAY (optional) (default ^TMP)
;*
;DIKZS will be used to indicate "silent" if set to 1
;Write statements are made conditional, if not "silent"
;*
N DIKZS,DNM,DIQUIET,DIKZRIEN,DIKZRLAZ,%X,DIKJ,DIR,DIKZRLAF,DK1
N DIK,DIC,%I,DICS
S DIKZS=$G(DIKZFLGS)'["T"
S:DIKZS DIQUIET=1
I '$D(DIFM) N DIFM S DIFM=1 D
.N Y,DIKZFLGS,X,DMAX,DIKZRLA,DIKZS
.D INIZE^DIEFU
I $G(Y)'>0 D BLD^DIALOG(1700,"File Number missing or invalid") G EN2E
I '$D(^DD(Y,0)) D BLD^DIALOG(1700,"File Number: "_Y_" Invalid") G EN2E
I $G(X)']"" D BLD^DIALOG(1700,"Routine name missing") G EN2E
I X'?1U.NU&(X'?1"%"1U.NU) D BLD^DIALOG(1700,"Routine name invalid") G EN2E
I $L(X)>7 D BLD^DIALOG(1700,"Routine name too long") G EN2E
S DIKZRLA=$G(DIKZRLA,"DIKZRLAZ"),DIKZRIEN=Y
S:DIKZRLA="" DIKZRLA="DIKZRLAZ" S:$G(DMAX)<2500!($G(DMAX)>^DD("ROU")) DMAX=^DD("ROU")
S DIKZRLAF=""
K @DIKZRLA
D EN
G:'DIKZS!(DIKZRLAF) EN2E
D BLD^DIALOG(1700,"Compiling Cross-references (FILE#:"_DIKZRIEN_")"_$S(DIKZRLAF=0:", routine name too long",1:""))
EN2E I 'DIKZS D MSG^DIALOG() Q
I $G(DIKZZMSG)]"" D CALLOUT^DIEFU(DIKZZMSG)
Q
;
;DIALOG #101 'only those with programmer's access'
; #820 'no way to save routines on the system'
; #8020 'Should the compilation run now?'
; #8024 'Compiling template name Input template of file n'
; #8036 'Cross-References'
; #8025 'Routine filed'
; #1503 'routine name is too long...'
DIKZ ;SFISC/XAK-XREF COMPILER ;19JAN2010
+1 ;;22.0;VA FileMan;**140,163**;Mar 30, 1999;Build 30
+2 ;Per VHA Directive 2004-038, this routine should not be modified.
+3 IF $GET(DUZ(0))'="@"
WRITE $CHAR(7),$$EZBLD^DIALOG(101)
QUIT
EN1 NEW DIKJ,%X
IF '$DATA(DISYS)
DO OS^DII
+1 IF '$DATA(^DD("OS",DISYS,"ZS"))
WRITE $CHAR(7),$$EZBLD^DIALOG(820)
QUIT
+2 SET U="^"
IF '$GET(DTIME)
SET DTIME=300
+3 DO SIZ^DIPZ0(8036)
IF $DATA(DTOUT)!($DATA(DUOUT))!('X)
GOTO Q1
SET DMAX=X
FILE KILL DIC
SET DMAX=X
SET DIC="^DIC("
SET DIC(0)="AEQ"
DO ^DIC
IF Y'>0
GOTO Q1
NEW DIPZ
SET DIPZ=+Y
+1 DO RNM^DIPZ0(8036)
IF $DATA(DTOUT)!($DATA(DUOUT))!(X="")
GOTO Q1
SET DNM=X
+2 WRITE !
SET DIR(0)="Y"
SET DIR("A")=$$EZBLD^DIALOG(8020)
DO ^DIR
KILL DIR
IF 'Y!($DATA(DIRUT))
GOTO Q1
+3 SET X=DNM
SET Y=DIPZ
KILL DIPZ
EN ;
+1 SET Y(1)=$$EZBLD^DIALOG(8036)
SET Y(3)=Y
DO BLD^DIALOG(8024,.Y,"","DIR")
IF '$GET(DIKZS)
WRITE !!,DIR,!
KILL Y(1),Y(3)
+2 KILL ^UTILITY($JOB),^UTILITY("DIK",$JOB)
NEW DIK,DIFILENO
+3 SET DNM=X
SET (DH,DIFILENO)=+Y
IF $DATA(^DIC(+Y,0,"GL"))
SET DIK2=^("GL")
+4 IF '$DATA(DIK2)!(DMAX<2400)
GOTO Q
+5 ;DELETE OLD ROUTINES, DELETE "DIK" NODES
SET X=DH
DO DELETROU^DIEZ(DNM)
DO A^DIU21
IF '$GET(DIKZS)
DO WAIT^DICD
DO DT^DICRW
+6 SET (DRN,DIKZQ,T)=0
SET DMAX=DMAX-100
+7 ;
+8 ;Load indexes defined in Index file
+9 NEW DIXRLIST,DIKMF
+10 KILL ^TMP("DIKC",$JOB)
+11 DO LOADALL^DIKC1(DIFILENO,"KS","R","",$NAME(^TMP("DIKC",$JOB)),"",.DIKMF)
+12 ;
+13 ; compile kill logic
+14 SET (DIKA,A)=1
SET X=2
SET DIKVR="DIKILL"
SET DIK=DIK2
+15 DO Q2
DO NEWR
SET ^UTILITY($JOB,0,3)=" S DIKZK="_X
+16 ;starting ROUTINE name
SET DIKGO="^"_DNM_1
+17 DO ^DIKZ0
IF DIKZQ
GOTO Q
DO RTE
+18 ;
+19 ; compile set logic
+20 SET (DIKA,A)=1
SET X=1
SET DIKVR="DISET"
SET DIK=DIK2
+21 DO Q2
DO NEWR
SET ^UTILITY($JOB,0,3)=" S DIKZK="_X
+22 SET DIKGO=DIKGO_",^"_DNM_DRN
+23 DO ^DIKZ0
IF DIKZQ
GOTO Q
DO RTE
+24 ;
+25 ; compile driver code
+26 DO Q2
DO ^DIKZ1
+27 ;
+28 ; finish up
+29 IF 'DIKZQ
SET ^DD(DIFILENO,0,"DIKOLD")=DNM
Q IF DIKZQ
SET X=DH(1)
DO A^DIU21
Q1 KILL DH,X,Y,DIK4,DIKQ,DIKC,T,DV,DIK8,DU,DW,DW1,DIKGO,DRN,DNM,DTOUT,DIRUT,DIROUT,DUOUT,DIC,A,%,%H,%Y
+1 KILL DIKVR,DIK6,DIKA,DIKR,DMAX,DIK2,DIKCT,DIK1,DIK0,^UTILITY($JOB),^("DIK"),DIK,DIKZQ,DIKZZ,DIKZZ1,DIKZOVFL
+2 KILL ^TMP("DIKC",$JOB)
Q2 KILL DIKRT,DIKLW,DIKL2
+1 QUIT
SV ; transfer the accumulated code in ^UTILITY($J,#) to ^UTILITY($J,0,#)
+1 ; (the routine buffer) and call SAVE to flush the buffer into a routine
+2 ; whenever it's full. Flush the buffer one more time when done.
+3 SET DNM(1)=DNM_DRN
+4 FOR DIKR=0:0
SET DIKR=$ORDER(^UTILITY($JOB,DIKR))
IF DIKR'>0
QUIT
SET %=^(DIKR)
KILL ^(DIKR)
IF T+$LENGTH(%)>DMAX
Begin DoDot:1
+5 NEW DIKZMORE
SET DIKZMORE=1
DO SAVE
End DoDot:1
SET ^UTILITY($JOB,0,DIKR)=%
SET T=T+$LENGTH(%)+2
+6 DO SAVE
+7 QUIT
SAVE ; save the accumulated code in ^UTILITY($J,0,#) as a routine
+1 IF DIKR
IF $EXTRACT($PIECE(%," ",2))="."
FOR
Begin DoDot:1
+2 SET ^UTILITY($JOB,DIKR)=%
+3 SET DIKR=$ORDER(^UTILITY($JOB,0,DIKR),-1)
SET %=^(DIKR)
KILL ^(DIKR)
End DoDot:1
IF $EXTRACT($PIECE(%," ",2))'="."
QUIT
+4 IF $DATA(DIKLW)
IF 'DIKR
SET ^UTILITY($JOB,0,997)=" G:'$D(DIKLM) "_$CHAR(64+DIKCT)_$SELECT(DNM_DRN'=DNM(1):"^"_DNM(1),1:"")_" Q:$D("_DIKVR_")"
+5 IF $DATA(DIKLW)
IF DIKR
SET ^UTILITY($JOB,0,998)=" G ^"_DNM_(DRN+1)
+6 SET ^UTILITY($JOB,0,999)="END "_$SELECT($DATA(DIKRT)&'DIKR:"Q",1:"G "_$SELECT(DIKR&($DATA(DIKLW)):"END",1:"")_U_DNM_(DRN+1))
+7 NEW X,DIR
SET X=DNM_DRN
XECUTE ^DD("OS",DISYS,"ZS")
SET X(1)=X
DO BLD^DIALOG(8025,.X,"","DIR")
IF '$GET(DIKZS)
WRITE !,DIR
IF $GET(DIKZRLA)]""
SET @DIKZRLA@(DNM_DRN)=""
SET DIKZRLAF=1
+8 IF '$DATA(DIKRT)!$GET(DIKZMORE)
DO NEWR
IF DIKZQ
QUIT
SET ^DD(DH,0,"DIK")=DNM
KILL DIKL2
+9 QUIT
NEWR ;
+1 IF '$DATA(DIKRT)
IF T
IF $DATA(%)
IF T+$LENGTH(%)>DMAX
SET DIKZDH=+$PIECE(^UTILITY($JOB,0,1),"#",2)
+2 KILL ^UTILITY($JOB,0)
SET DIKR=4
SET T=0
SET DRN=DRN+1
IF $LENGTH(DNM_DRN)>8
IF '$GET(DIKZS)
WRITE $CHAR(7),!,DNM_DRN_$$EZBLD^DIALOG(1503)
IF $GET(DIKZRLA)]""
SET DIKZRLAF=0
SET DIKZQ=1
QUIT
+3 SET ^UTILITY($JOB,0,1)=DNM_DRN_" ; COMPILED XREF FOR FILE #"_$SELECT($DATA(DIKZDH):DIKZDH,1:DH)_" ; "_$EXTRACT(DT,4,5)_"/"_$EXTRACT(DT,6,7)_"/"_$EXTRACT(DT,2,3)
SET ^(2)=" ; "
+4 KILL DIKZDH
QUIT
RTE ;
+1 NEW DIKFIL,DIKSUB,DIKLIST,DIKP
+2 ;Build DIKSUB(file)=subfile1,subfile2,... list
+3 SET DIKFIL=0
FOR
SET DIKFIL=$ORDER(DIK(X,DIKFIL))
IF 'DIKFIL
QUIT
Begin DoDot:1
+4 SET DIKSUB=0
FOR
SET DIKSUB=$ORDER(^DD(DIKFIL,"SB",DIKSUB))
IF 'DIKSUB
QUIT
Begin DoDot:2
+5 IF $DATA(DIK(X,DIKSUB))#2
SET DIKSUB(DIKFIL)=$GET(DIKSUB(DIKFIL))_DIKSUB_","
End DoDot:2
End DoDot:1
+6 ;
+7 ;Build DIKLIST(file)=subfile1,subfile2,...
+8 MERGE DIKLIST=DIKSUB
+9 SET DIKFIL=0
FOR
SET DIKFIL=$ORDER(DIKSUB(DIKFIL))
IF 'DIKFIL
QUIT
Begin DoDot:1
+10 SET DIKP=0
+11 FOR
Begin DoDot:2
+12 FOR DIKP=DIKP+1:1:$LENGTH(DIKLIST(DIKFIL),",")-1
Begin DoDot:3
+13 SET DIKSUB=$PIECE(DIKLIST(DIKFIL),",",DIKP)
+14 SET DIKLIST(DIKFIL)=DIKLIST(DIKFIL)_$GET(DIKSUB(DIKSUB))
End DoDot:3
End DoDot:2
IF DIKP'<($LENGTH(DIKLIST(DIKFIL),",")-1)
QUIT
End DoDot:1
+15 KILL DIKSUB
+16 ;
+17 ;Convert file numbers in DIKLIST to routine list
+18 SET DIKFIL=0
FOR
SET DIKFIL=$ORDER(DIKLIST(DIKFIL))
IF 'DIKFIL
QUIT
Begin DoDot:1
+19 SET $EXTRACT(DIKLIST(DIKFIL),$LENGTH(DIKLIST(DIKFIL)))=""
+20 SET DIKLIST(DIKFIL)=DIKFIL_","_DIKLIST(DIKFIL)
+21 FOR DIKP=1:1:$LENGTH(DIKLIST(DIKFIL),",")
Begin DoDot:2
+22 SET DIKSUB=$PIECE(DIKLIST(DIKFIL),",",DIKP)
+23 SET $PIECE(DIKLIST(DIKFIL),",",DIKP)=DIK(X,DIKSUB)
End DoDot:2
End DoDot:1
+24 ;
+25 ;Move list to DIK
+26 MERGE DIK(X)=DIKLIST
+27 KILL DIKFIL,DIKLIST,DIKP
+28 SET DIKRT=1
SET A=A-1
SET DH=DH(1)
GOTO SV
+29 ;
EN2(Y,DIKZFLGS,X,DMAX,DIKZRLA,DIKZZMSG) ;Silent or Talking with parameter passing
+1 ;and optionally return list of routines built and if successful
+2 ;FILE#,FLAGS,ROUTINE,RTNMAXSIZE,RTNLISTARRAY,MSGARRAY
+3 ;Y=FILE NUMBER (required)
+4 ;FLAGS="T"alk (optional)
+5 ;X=ROUTINE NAME (required)
+6 ;DMAX=ROUTINE SIZE (optional)
+7 ;DIKZRLA=ROUTINE LIST ARRAY, by value (optional)
+8 ;DIKZZMSG=MESSAGE ARRAY (optional) (default ^TMP)
+9 ;*
+10 ;DIKZS will be used to indicate "silent" if set to 1
+11 ;Write statements are made conditional, if not "silent"
+12 ;*
+13 NEW DIKZS,DNM,DIQUIET,DIKZRIEN,DIKZRLAZ,%X,DIKJ,DIR,DIKZRLAF,DK1
+14 NEW DIK,DIC,%I,DICS
+15 SET DIKZS=$GET(DIKZFLGS)'["T"
+16 IF DIKZS
SET DIQUIET=1
+17 IF '$DATA(DIFM)
NEW DIFM
SET DIFM=1
Begin DoDot:1
+18 NEW Y,DIKZFLGS,X,DMAX,DIKZRLA,DIKZS
+19 DO INIZE^DIEFU
End DoDot:1
+20 IF $GET(Y)'>0
DO BLD^DIALOG(1700,"File Number missing or invalid")
GOTO EN2E
+21 IF '$DATA(^DD(Y,0))
DO BLD^DIALOG(1700,"File Number: "_Y_" Invalid")
GOTO EN2E
+22 IF $GET(X)']""
DO BLD^DIALOG(1700,"Routine name missing")
GOTO EN2E
+23 IF X'?1U.NU&(X'?1"%"1U.NU)
DO BLD^DIALOG(1700,"Routine name invalid")
GOTO EN2E
+24 IF $LENGTH(X)>7
DO BLD^DIALOG(1700,"Routine name too long")
GOTO EN2E
+25 SET DIKZRLA=$GET(DIKZRLA,"DIKZRLAZ")
SET DIKZRIEN=Y
+26 IF DIKZRLA=""
SET DIKZRLA="DIKZRLAZ"
IF $GET(DMAX)<2500!($GET(DMAX)>^DD("ROU"))
SET DMAX=^DD("ROU")
+27 SET DIKZRLAF=""
+28 KILL @DIKZRLA
+29 DO EN
+30 IF 'DIKZS!(DIKZRLAF)
GOTO EN2E
+31 DO BLD^DIALOG(1700,"Compiling Cross-references (FILE#:"_DIKZRIEN_")"_$SELECT(DIKZRLAF=0:", routine name too long",1:""))
EN2E IF 'DIKZS
DO MSG^DIALOG()
QUIT
+1 IF $GET(DIKZZMSG)]""
DO CALLOUT^DIEFU(DIKZZMSG)
+2 QUIT
+3 ;
+4 ;DIALOG #101 'only those with programmer's access'
+5 ; #820 'no way to save routines on the system'
+6 ; #8020 'Should the compilation run now?'
+7 ; #8024 'Compiling template name Input template of file n'
+8 ; #8036 'Cross-References'
+9 ; #8025 'Routine filed'
+10 ; #1503 'routine name is too long...'