| 1 | DIFROMS1 ;SFISC/DCL/TKW-MOVE DD TO TARGET ARRAY ;5/5/98  12:59 | 
|---|
| 2 | ;;22.0;VA FileMan;;Mar 30, 1999 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | Q | 
|---|
| 6 | EN ; | 
|---|
| 7 | I '$D(@DIFRFIA) D ERR(1) Q | 
|---|
| 8 | G:$G(DIFRFILE) FCHK | 
|---|
| 9 | S DIFRFILE=0 F  S DIFRFILE=$O(@DIFRFIA@(DIFRFILE)) Q:DIFRFILE'>0  D FILE | 
|---|
| 10 | Q | 
|---|
| 11 | FCHK I '$D(@DIFRFIA@(DIFRFILE)) D ERR(2) Q | 
|---|
| 12 | FILE N DSEC,DIFRD,DIFRX,DIFR01,DIFRFDD | 
|---|
| 13 | N DIFRQ,DIFRTART,DIFRK,R,R1,R2,R3,C,F,G,I,DIFRPFD | 
|---|
| 14 | S DIFR01=$G(@DIFRFIA@(DIFRFILE,0,1)) | 
|---|
| 15 | S DIFRFDD=$TR($P(DIFR01,"^",3),"FP","fp")'="p" | 
|---|
| 16 | S DSEC=$TR($P(DIFR01,"^",2),"y","Y")="Y" | 
|---|
| 17 | S DIFRPFD=@DIFRFIA@(DIFRFILE,DIFRFILE)=0 | 
|---|
| 18 | I DIFRFDD!DIFRPFD D | 
|---|
| 19 | .M @DIFRTA@("^DIC",DIFRFILE,DIFRFILE,"%")=^DIC(DIFRFILE,"%") | 
|---|
| 20 | .M @DIFRTA@("^DIC",DIFRFILE,DIFRFILE,"%D")=^DIC(DIFRFILE,"%D") | 
|---|
| 21 | .S @DIFRTA@("^DIC",DIFRFILE,DIFRFILE,0)=$P(^DIC(DIFRFILE,0),"^",1,2) | 
|---|
| 22 | .S @DIFRTA@("^DIC",DIFRFILE,DIFRFILE,0,"GL")=^DIC(DIFRFILE,0,"GL") | 
|---|
| 23 | .S @DIFRTA@("^DIC",DIFRFILE,"B",@DIFRFIA@(DIFRFILE),DIFRFILE)="" | 
|---|
| 24 | .Q | 
|---|
| 25 | I DSEC,(DIFRFDD!(DIFRPFD)) D | 
|---|
| 26 | .D XY^%RCR("^DIC("_DIFRFILE_",0,",$$OREF^DILF($NA(@DIFRTA@("SEC","^DIC",DIFRFILE,DIFRFILE,0)))) | 
|---|
| 27 | .K @DIFRTA@("SEC","^DIC",DIFRFILE,DIFRFILE,0,"GL") | 
|---|
| 28 | .Q | 
|---|
| 29 | S DIFRD=0 | 
|---|
| 30 | ;              * * Go through each DD and sub-DD * * | 
|---|
| 31 | F  S DIFRD=$O(@DIFRFIA@(DIFRFILE,DIFRD)) Q:DIFRD'>0  S DIFRPFD=^(DIFRD)=0 D | 
|---|
| 32 | .S DIFRX=0 | 
|---|
| 33 | .;         * * Merge each field DD to transport structure * * | 
|---|
| 34 | .;F  S DIFRX=$O(^DD(DIFRD,DIFRX)) Q:DIFRX'>0  I $D(@DIFRFIA@(DIFRFILE,DIFRD))<9!($D(@DIFRFIA@(DIFRFILE,DIFRD,DIFRX))) D | 
|---|
| 35 | .F  S DIFRX=$O(^DD(DIFRD,DIFRX)) Q:DIFRX'>0  I DIFRPFD!($D(@DIFRFIA@(DIFRFILE,DIFRD,DIFRX))) D | 
|---|
| 36 | ..M @DIFRTA@("^DD",DIFRFILE,DIFRD,DIFRX)=^DD(DIFRD,DIFRX) | 
|---|
| 37 | ..N SEC F SEC=8,8.5,9 I $D(^DD(DIFRD,DIFRX,SEC)) D:SEC=8  I SEC>8,^(SEC)'="^",$P(^(0),"^",2)'["K",^(SEC)'="@" D | 
|---|
| 38 | ...I DSEC S @DIFRTA@("SEC","^DD",DIFRFILE,DIFRD,DIFRX,SEC)=^DD(DIFRD,DIFRX,SEC) | 
|---|
| 39 | ...K @DIFRTA@("^DD",DIFRFILE,DIFRD,DIFRX,SEC) | 
|---|
| 40 | ...Q | 
|---|
| 41 | ..; If multiple field sent, send ^DD(SUBFILE#,0) and ^("NM",multiple name) for partial DDs | 
|---|
| 42 | ..I 'DIFRPFD D | 
|---|
| 43 | ...N SUBNUM S SUBNUM=$$SUBNUM(DIFRD,DIFRX) | 
|---|
| 44 | ...I 'SUBNUM Q | 
|---|
| 45 | ...S @DIFRTA@("^DD",DIFRFILE,SUBNUM,0)=^DD(SUBNUM,0) | 
|---|
| 46 | ...S @DIFRTA@("^DD",DIFRFILE,SUBNUM,0,"NM",$O(^DD(SUBNUM,0,"NM","")))="" | 
|---|
| 47 | ...Q | 
|---|
| 48 | ..Q | 
|---|
| 49 | .;                * * Clean up x-refs in DDs * * | 
|---|
| 50 | .S DIFRQ=$NA(@DIFRTA@("^DD",DIFRFILE,DIFRD)) | 
|---|
| 51 | .S DIFRTART=$$OREF^DILF(DIFRQ) | 
|---|
| 52 | .F  S DIFRQ=$Q(@DIFRQ) Q:$P(DIFRQ,DIFRTART)]""!(DIFRQ="")  D:$P(DIFRQ,DIFRTART,2,99)["""" | 
|---|
| 53 | ..S DIFRK=1 | 
|---|
| 54 | ..S R2=$P(DIFRQ,DIFRTART,2,99),$E(R2,$L(R2))="",C=$L(R2,","),F=1,R1=0 | 
|---|
| 55 | ..F I=1:1 Q:I'<C  S G=$P(R2,",",F,I) Q:G=""  I G'[""""!($L(G,"""")#2&($E(G)="""")&($E(G,$L(G))="""")) S F=F+$L(G,","),I=F-1,R1=R1+1,C=C+($L(G,",")-1) I 'G,G'?1"0".E,R1#2 S DIFRK=DIFRTART_$P(R2,",",1,I)_")" Q | 
|---|
| 56 | ..Q:DIFRK | 
|---|
| 57 | ..K @DIFRK | 
|---|
| 58 | ..Q | 
|---|
| 59 | .;           * * Build DD 0 node after x-ref clean up * * | 
|---|
| 60 | .;               for full DD or full sub-DD | 
|---|
| 61 | .I DIFRFDD!(DIFRPFD) D | 
|---|
| 62 | ..M @DIFRTA@("^DD",DIFRFILE,DIFRD,0)=^DD(DIFRD,0) | 
|---|
| 63 | ..K @DIFRTA@("^DD",DIFRFILE,DIFRD,0,"VR") | 
|---|
| 64 | ..Q | 
|---|
| 65 | .Q | 
|---|
| 66 | IXKEY ; Send entries from KEY and INDEX file | 
|---|
| 67 | S DIFRD=0 | 
|---|
| 68 | F  S DIFRD=$O(@DIFRFIA@(DIFRFILE,DIFRD)) Q:DIFRD'>0  D | 
|---|
| 69 | . I $O(^DD("IX","B",DIFRD,0)) D DDIXOUT^DIFROMSX(DIFRFILE,DIFRD,DIFRFDD,DIFRTA) | 
|---|
| 70 | . I $O(^DD("KEY","B",DIFRD,0)) D DDKEYOUT^DIFROMSY(DIFRFILE,DIFRD,DIFRTA) | 
|---|
| 71 | . Q | 
|---|
| 72 | Q | 
|---|
| 73 | ; | 
|---|
| 74 | Q | 
|---|
| 75 | SUBNUM(F,FD) ; | 
|---|
| 76 | ;Returns 0 if FielD in File is not multiple, otherwise subfile#. | 
|---|
| 77 | N SUBNUM S SUBNUM=+$P($G(^DD(F,FD,0)),U,2) | 
|---|
| 78 | I 'SUBNUM Q 0 | 
|---|
| 79 | I $P($G(^DD(SUBNUM,.01,0)),U,2)["W" Q 0 | 
|---|
| 80 | Q SUBNUM | 
|---|
| 81 | ; | 
|---|
| 82 | ERR(X) D BLD^DIALOG($P($T(ERR+X),";",5)) Q | 
|---|
| 83 | ;;FIA Array Does Not Exist;1;9501 | 
|---|
| 84 | ;;FIA File Number Invalid;2;9502 | 
|---|