1 | DIFROMSE ;SFISC/DCL-FILE ORDER TO RESOLVE POINTERS ;07:27 AM 2 Jun 1994
|
---|
2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | Q
|
---|
5 | ;File Order List for Resolving Pointers
|
---|
6 | FOLRP(DIFRFLG,DIFRTA) ;FLAGS,TARGET_ARRAY ; Creates the "DIORD" subscript
|
---|
7 | ; structure in the transport array.
|
---|
8 | ;FLAGS,TARGET_ARRAY
|
---|
9 | ;*
|
---|
10 | ;FLAGS = None
|
---|
11 | ;*
|
---|
12 | ;TARGET_ARRAY = CLOSED ROOT
|
---|
13 | ; This is the Transport Array Root.
|
---|
14 | ; "DIORD" is appended to the array root.
|
---|
15 | ; A ordered list of files is returned
|
---|
16 | ; in the target array. Each file is given
|
---|
17 | ; a value to determine which file should have
|
---|
18 | ; pointers resolved. After each file has been
|
---|
19 | ; assigned a value it is ordered by value then
|
---|
20 | ; by file number. If files have the same value
|
---|
21 | ; the file number is then used to determine the
|
---|
22 | ; order. This call is used after all the file
|
---|
23 | ; being transported are in the "FIA" structure.
|
---|
24 | ;*
|
---|
25 | Q:$G(DIFRTA)']""
|
---|
26 | N DIFRCNT,DIFRDD,DIFRF,DIFRFILE,DIFRFLD,DIFRX
|
---|
27 | S DIFRFILE=0
|
---|
28 | K ^TMP("DIFROMSE",$J),^TMP("DIFRORD",$J),^TMP("DIFRFILE",$J),@DIFRTA@("DIORD")
|
---|
29 | F S DIFRFILE=$O(@DIFRTA@("FIA",DIFRFILE)) Q:DIFRFILE'>0 D
|
---|
30 | .D FSF^DIFROMSP(DIFRFILE,"","^TMP(""DIFROMSE"",$J)")
|
---|
31 | .Q
|
---|
32 | S DIFRFILE=0
|
---|
33 | F S DIFRFILE=$O(^TMP("DIFROMSE",$J,DIFRFILE)) Q:DIFRFILE'>0 D
|
---|
34 | .S DIFRDD=0,^TMP("DIFRORD",$J,DIFRFILE)=0
|
---|
35 | .F S DIFRDD=$O(^TMP("DIFROMSE",$J,DIFRFILE,DIFRDD)) Q:DIFRDD'>0 D
|
---|
36 | ..S DIFRFLD=0
|
---|
37 | ..F S DIFRFLD=$O(^DD(DIFRDD,DIFRFLD)) Q:DIFRFLD'>0 S DIFRX=$G(^(DIFRFLD,0)) D
|
---|
38 | ...Q:$P(DIFRX,"^",2)
|
---|
39 | ...Q:$P(DIFRX,"^",2)'["P"&($P(DIFRX,"^")'["V")
|
---|
40 | ...S DIFRCNT=0
|
---|
41 | ...I $P(DIFRX,"^",2)["V" D G P
|
---|
42 | ....S DIFRF=0 F S DIFRF=$O(^DD(DIFRDD,DIFRFLD,"V","B",DIFRF)) Q:DIFRF'>0 S ^TMP("DIFRFILE",$J,DIFRF)=DIFRCNT+1
|
---|
43 | ....Q
|
---|
44 | ...I +$P(@("^"_$P(DIFRX,"^",3)_"0)"),"^",2)=DIFRFILE S:$G(^TMP("DIFRORD",$J,DIFRFILE))'>DIFRCNT ^(DIFRFILE)=DIFRCNT Q
|
---|
45 | ...I $P(DIFRX,"^",2)["P" S ^TMP("DIFRFILE",$J,+$P(@("^"_$P(DIFRX,"^",3)_"0)"),"^",2))=DIFRCNT+1
|
---|
46 | P ...S DIFRF=$O(^TMP("DIFRFILE",$J,"")) Q:DIFRF="" S DIFRCNT=^(DIFRF) K ^(DIFRF)
|
---|
47 | ...I $G(^TMP("DIFRORD",$J,DIFRF))'>DIFRCNT S ^(DIFRF)=DIFRCNT
|
---|
48 | ...S DIFRX=^DD(DIFRF,.01,0)
|
---|
49 | ...I $P(DIFRX,"^",2)["P" S ^TMP("DIFRFILE",$J,+$P(@("^"_$P(DIFRX,"^",3)_"0)"),"^",2))=DIFRCNT+1 G P
|
---|
50 | ...G:$P(DIFRX,"^",2)'["V" P
|
---|
51 | ...S DIFRF=0 F S DIFRF=$O(^DD(DIFRDD,DIFRFLD,"V","B",DIFRF)) Q:DIFRF'>0 S ^TMP("DIFRFILE",$J,DIFRF)=DIFRCNT
|
---|
52 | ...S DIFRCNT=DIFRCNT+1
|
---|
53 | ...G P
|
---|
54 | ...Q
|
---|
55 | ..Q
|
---|
56 | .Q
|
---|
57 | S DIFRFILE=0
|
---|
58 | F S DIFRFILE=$O(^TMP("DIFRORD",$J,DIFRFILE)) Q:DIFRFILE'>0 S DIFRX=^(DIFRFILE),^TMP("DIFRORD",$J,"DIORD",DIFRX,DIFRFILE)=""
|
---|
59 | S DIFRX="",DIFRCNT=1 F S DIFRX=$O(^TMP("DIFRORD",$J,"DIORD",DIFRX),-1) Q:DIFRX="" D
|
---|
60 | .S DIFRFILE=0 F S DIFRFILE=$O(^TMP("DIFRORD",$J,"DIORD",DIFRX,DIFRFILE)) Q:DIFRFILE'>0 D
|
---|
61 | ..S @DIFRTA@("DIORD",DIFRCNT)=DIFRFILE,DIFRCNT=DIFRCNT+1
|
---|
62 | D KILL
|
---|
63 | Q
|
---|
64 | KILL ;
|
---|
65 | K ^TMP("DIFROMSE",$J),^TMP("DIFRORD",$J),^TMP("DIFRFILE",$J)
|
---|
66 | Q
|
---|
67 | ;
|
---|
68 | CHK(DIFRFLG,DIFRSA,DIFRTA) ;CHECK FILES POINTED TO AGAINST FILES GOING OUT WITH DATA
|
---|
69 | ;Compares the "DIORD" with the "FIA" structures
|
---|
70 | ;FLAGS,SOURCE_ARRAY,TARGET_ARRAY
|
---|
71 | ;*
|
---|
72 | ;FLAGS = None
|
---|
73 | ;*
|
---|
74 | ;SOURCE_ARRAY = TRANSPORT ARRAY ROOT
|
---|
75 | ;*
|
---|
76 | ;TARGET_ARRAY = TARGET ARRAY ROOT
|
---|
77 | ; Returns a list of files that are pointed to
|
---|
78 | ; but not being exported. This is used after
|
---|
79 | ; all the files being exported are in the "FIA"
|
---|
80 | ; structure.
|
---|
81 | ;*
|
---|
82 | Q:$G(DIFRSA)']""
|
---|
83 | Q:$G(DIFRTA)']""
|
---|
84 | N DIFRX,DIFRFILE
|
---|
85 | S DIFRX=0
|
---|
86 | F S DIFRX=$O(@DIFRSA@("DIORD",DIFRX)) Q:DIFRX'>0 S DIFRFILE=^(DIFRX) D
|
---|
87 | .Q:$D(@DIFRSA@("DATA",DIFRFILE))&($P($G(@DIFRSA@("FIA",DIFRFILE,0,1)),"^",5)="y")
|
---|
88 | .S @DIFRTA@(DIFRFILE)=""
|
---|
89 | .Q
|
---|
90 | Q
|
---|