| 1 | DIKZ0 ;SFISC/XAK-XREF COMPILER ;23AUG2004 | 
|---|
| 2 | ;;22.0;VA FileMan;**140**;Mar 30, 1999 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | S DIK0=" I X'=""""" D DD^DIK,A,SD Q:DIKZQ | 
|---|
| 5 | RET I $D(DK1) S A=A+1,DIKA=1,DH=0 F  S DH=$O(DK1(DH)) Q:DH'>0  D E^DIK | 
|---|
| 6 | S:DH="" DH=-1 I $D(DK1) K DK1 D SD Q:DIKZQ  G RET | 
|---|
| 7 | Q | 
|---|
| 8 | SD F DH=DH(1):0 S DH=$O(DU(DH)) Q:DH'>0  S:$D(^DD(DH,"SB")) DK1(DH)="" D DD1^DIK,0 Q:DIKZQ  S:$D(^DD(DH,"IX"))!$D(^TMP("DIKC",$J,DH)) DIK(X,DH)="A1^"_DNM_DRN K:'$D(^DD(DH,"IX"))&'$D(^TMP("DIKC",$J,DH)) DIK(X,DH) K DU(DH) | 
|---|
| 9 | Q | 
|---|
| 10 | 0 ; | 
|---|
| 11 | D SV^DIKZ Q:DIKZQ  S DIK1="" | 
|---|
| 12 | I $D(DIKA) S DIK1=" S DA("_A_")=DA"_$S(A=1:"",1:"("_(A-1)_")") | 
|---|
| 13 | F DIKL2=A-1:-1:1 S DIK1=DIK1_" S DA("_DIKL2_")=0" | 
|---|
| 14 | S ^UTILITY($J,DIKR+1)=DIK1_" S DA=0",DIKR=DIKR+2,^(DIKR)="A1 ;" | 
|---|
| 15 | D ^DIKZ2 K DIKA S DIKLW=1 | 
|---|
| 16 | S DIKR=DIKR+1,DIK=DIK2_DIK8(DH),^UTILITY($J,DIKR)=A_" ;",DIKR=DIKR+1 | 
|---|
| 17 | A ; | 
|---|
| 18 | K DIK6 F DIKQ=0:0 S DIKQ=$O(^UTILITY("DIK",$J,DH,DIKQ)) Q:DIKQ'>0  I $G(DIKVR)="DISET"!(DIKQ'=.01) S %=^(DIKQ) S:+%'=% %=""""_%_"""" D PUT | 
|---|
| 19 | I $G(DIKVR)="DIKILL",$D(^UTILITY("DIK",$J,DH,.01)) S DIKQ=.01,%=^(.01) S:+%'=% %=""""_%_"""" D PUT | 
|---|
| 20 | D INDEX | 
|---|
| 21 | K ^UTILITY("DIK",$J),DIK6 | 
|---|
| 22 | Q | 
|---|
| 23 | PUT N DIKSET I '$D(DIK6(%)) S ^UTILITY($J,DIKR)=" S DIKZ("_%_")=$G("_DIK_"DA,"_%_"))",DIK6(%)="" | 
|---|
| 24 | S DIKR=DIKR+1,(DIKSET,^UTILITY($J,DIKR))=" "_$P(^UTILITY("DIK",$J,DH,DIKQ,0),"^(X)")_"DIKZ("_%_")"_$P(^(0),"^(X)",2,9) | 
|---|
| 25 | F DIKC=0:0 S DIKC=$O(^UTILITY("DIK",$J,DH,DIKQ,DIKC)) S DIKR=DIKR+1 Q:DIKC'>0  D | 
|---|
| 26 | .S %=^(DIKC) S:$O(^(0))'=DIKC ^UTILITY($J,DIKR)=DIKSET,DIKR=DIKR+1 | 
|---|
| 27 | .I %["Q:"!(%[" Q") K DIK6 S ^UTILITY($J,DIKR)=DIK0_" X ^DD("_DH_","_DIKQ_",1,"_DIKC_","_X_")" Q | 
|---|
| 28 | .I %["D RCR" K DIK6 S ^UTILITY($J,DIKR)=DIK0_" D",DIKR=DIKR+2,^(DIKR-1)=" .N DIK,DIV,DIU,DIN",^UTILITY($J,DIKR)=" ."_^UTILITY("DIK",$J,DH,DIKQ,DIKC,0) Q | 
|---|
| 29 | .I %["S XMB=" S ^UTILITY($J,DIKR)=DIK0_",$D(DIK(0)),DIK(0)[""B"" S DIKZR="_DIKC_",DIKZZ="_DIKQ_" D BUL^"_DNM,DIKR=DIKR+1,^UTILITY($J,DIKR)=DIK0_",'$D(DIKOZ) "_$S($L(%)<225:%,1:"X ^DD("_DH_","_DIKQ_",1,"_DIKC_","_X_")") Q | 
|---|
| 30 | .S ^UTILITY($J,DIKR)=DIK0_" "_$S(%[" AUDIT":"S DH="_DH_",DV="_DIKQ_",DU="_A_" ",1:"")_%_$S(%[" AUDIT":"^DIK1",1:"") | 
|---|
| 31 | Q | 
|---|
| 32 | ; | 
|---|
| 33 | ; | 
|---|
| 34 | INDEX ;Loop through ^TMP and pick up cross references for file DH | 
|---|
| 35 | N DIKO,DIKCTAG | 
|---|
| 36 | S DIKCTAG=0 | 
|---|
| 37 | ; | 
|---|
| 38 | ;Build code for each xref | 
|---|
| 39 | S DIKC=0 F  S DIKC=$O(^TMP("DIKC",$J,DH,DIKC)) Q:'DIKC  D GETINDEX | 
|---|
| 40 | D:DIKCTAG LINE("CR"_(DIKCTAG+1)_" K X") | 
|---|
| 41 | Q | 
|---|
| 42 | ; | 
|---|
| 43 | GETINDEX ;Get code for one index DIKC in file DH | 
|---|
| 44 | I DIKVR="DIKILL",$G(^TMP("DIKC",$J,DH,DIKC,"K"))?."^" Q | 
|---|
| 45 | I DIKVR="DISET",$G(^TMP("DIKC",$J,DH,DIKC,"S"))?."^" Q | 
|---|
| 46 | ; | 
|---|
| 47 | N DIKF,DIKCOD,DIKO,DIK01 | 
|---|
| 48 | S DIKCTAG=DIKCTAG+1 | 
|---|
| 49 | D LINE("CR"_DIKCTAG_" S DIXR="_DIKC) | 
|---|
| 50 | ; | 
|---|
| 51 | ;Build code to set X array | 
|---|
| 52 | S DIKF=$O(^TMP("DIKC",$J,DH,DIKC,0)) Q:'DIKF | 
|---|
| 53 | D LINE(" K X") | 
|---|
| 54 | S DIKO=0 F  S DIKO=$O(^TMP("DIKC",$J,DH,DIKC,DIKO)) Q:'DIKO  D XARR | 
|---|
| 55 | D LINE(" S X=$G(X("_DIKF_"))") | 
|---|
| 56 | ; | 
|---|
| 57 | ;Build code to check for null subscripts | 
|---|
| 58 | S DIKCOD="",DIKO=0 | 
|---|
| 59 | F  S DIKO=$O(^TMP("DIKC",$J,DH,DIKC,DIKO)) Q:'DIKO  D:$G(^(DIKO,"SS")) | 
|---|
| 60 | . S DIKCOD=DIKCOD_$E(",",DIKCOD]"")_"$G(X("_DIKO_"))]""""" | 
|---|
| 61 | D LINE($S(DIKCOD]"":" I "_DIKCOD_" D",1:" D")) ;**GFT -- NOIS ISL-0604-50146 ** | 
|---|
| 62 | D LINE(" . K X1,X2 M X1=X,X2=X") | 
|---|
| 63 | ; | 
|---|
| 64 | I DIKVR="DIKILL" D | 
|---|
| 65 | . ;Adjust .01 values X2 array if we're deleting a record | 
|---|
| 66 | . I $D(DIK01) D | 
|---|
| 67 | ..S DIKCOD="",DIKO=0 F  S DIKO=$O(DIK01(DIKO)) Q:'DIKO  D  ;**GFT -- NOIS ISL-0604-50146 ** | 
|---|
| 68 | ... S DIKCOD=DIKCOD_$E(",",DIKCOD]"")_"X2("_DIKO_")" | 
|---|
| 69 | .. Q:DIKCOD="" | 
|---|
| 70 | .. S:DIKF=$O(DIK01(0)) DIKCOD="X2,"_DIKCOD | 
|---|
| 71 | .. S:DIKCOD["," DIKCOD="("_DIKCOD_")" | 
|---|
| 72 | .. D LINE(" . S:$D(DIKIL) "_DIKCOD_"=""""") | 
|---|
| 73 | . ; | 
|---|
| 74 | . ;Get kill condition code | 
|---|
| 75 | . S DIKCOD=$G(^TMP("DIKC",$J,DH,DIKC,"KC")) | 
|---|
| 76 | . I DIKCOD'?."^" D | 
|---|
| 77 | .. D LINE(" . N DIKXARR M DIKXARR=X S DIKCOND=1") | 
|---|
| 78 | .. D LINE(" . "_DIKCOD) | 
|---|
| 79 | .. D LINE(" . S DIKCOND=$G(X) K X M X=DIKXARR") | 
|---|
| 80 | .. D LINE(" . Q:'DIKCOND") | 
|---|
| 81 | . ;Get kill logic | 
|---|
| 82 | . D LINE(" . "_$G(^TMP("DIKC",$J,DH,DIKC,"K"))) | 
|---|
| 83 | ; | 
|---|
| 84 | I DIKVR="DISET" D | 
|---|
| 85 | . ;Get set condition code | 
|---|
| 86 | . S DIKCOD=$G(^TMP("DIKC",$J,DH,DIKC,"SC")) | 
|---|
| 87 | . I DIKCOD'?."^" D | 
|---|
| 88 | .. D LINE(" . N DIKXARR M DIKXARR=X S DIKCOND=1") | 
|---|
| 89 | .. D LINE(" . "_DIKCOD) | 
|---|
| 90 | .. D LINE(" . S DIKCOND=$G(X) K X M X=DIKXARR") | 
|---|
| 91 | .. D LINE(" . Q:'DIKCOND") | 
|---|
| 92 | . ;Get set logic | 
|---|
| 93 | . D LINE(" . "_$G(^TMP("DIKC",$J,DH,DIKC,"S"))) | 
|---|
| 94 | K DIK6 Q | 
|---|
| 95 | ; | 
|---|
| 96 | XARR ;Build code to set X array | 
|---|
| 97 | ;Also return DIK01(order#)="" if crv is .01 field | 
|---|
| 98 | N CODE,NODE,REF,LINE,TRANS | 
|---|
| 99 | ;K DIK01 | 
|---|
| 100 | ; | 
|---|
| 101 | ;Build data extraction code | 
|---|
| 102 | S CODE=$G(^TMP("DIKC",$J,DH,DIKC,DIKO)) Q:CODE?."^" | 
|---|
| 103 | I $D(^TMP("DIKC",$J,DH,DIKC,DIKO,"F"))#2 D | 
|---|
| 104 | . S DIK01(DIKO)="" | 
|---|
| 105 | . S REF=$P($P(CODE,",",1,$L(CODE,",")-2),"(",2,999) | 
|---|
| 106 | . S NODE=$P($P(REF,",",$L(REF,",")),"))") | 
|---|
| 107 | . I '$D(DIK6(NODE)) D | 
|---|
| 108 | .. D LINE(" S DIKZ("_NODE_")="_REF) | 
|---|
| 109 | .. S DIK6(NODE)="" | 
|---|
| 110 | . S LINE=" "_$P(CODE,REF)_"DIKZ("_NODE_")"_$P(CODE,REF,2,999) | 
|---|
| 111 | E  S LINE=" "_CODE | 
|---|
| 112 | ; | 
|---|
| 113 | S TRANS=$G(^TMP("DIKC",$J,DH,DIKC,DIKO,"T")) | 
|---|
| 114 | I TRANS'?."^" D | 
|---|
| 115 | . D LINE(LINE) | 
|---|
| 116 | . D DOTLINE(" I $G(X)]"""" "_TRANS) | 
|---|
| 117 | . D LINE(" S:$D(X)#2 X("_DIKO_")=X") | 
|---|
| 118 | E  I $G(NODE)]"",LINE?1" S X=".E D | 
|---|
| 119 | . D LINE(" S X("_DIKO_")"_$E(LINE,5,999)) | 
|---|
| 120 | E  D | 
|---|
| 121 | . D LINE(LINE) | 
|---|
| 122 | . D LINE(" S:$D(X)#2 X("_DIKO_")=X") | 
|---|
| 123 | Q | 
|---|
| 124 | ; | 
|---|
| 125 | DOTLINE(CODE) ;Add code to ^UTILITY. If the code looks like it contains | 
|---|
| 126 | ;a Quit command, put the code under a do-dot structure. | 
|---|
| 127 | I CODE[" Q"!(CODE["Q:") D | 
|---|
| 128 | . D LINE(" D") | 
|---|
| 129 | . D LINE(" . "_CODE) | 
|---|
| 130 | E  D LINE(CODE) | 
|---|
| 131 | Q | 
|---|
| 132 | ; | 
|---|
| 133 | LINE(CODE) ;Add line of code to ^UTILITY, increment DIKR | 
|---|
| 134 | S ^UTILITY($J,DIKR)=CODE | 
|---|
| 135 | S DIKR=DIKR+1 | 
|---|
| 136 | Q | 
|---|