Annotation of freem_fileman/DIFROMSE.m, revision 1.1.1.1
1.1 snw 1: DIFROMSE ;SFISC/DCL-FILE ORDER TO RESOLVE POINTERS;07:27 AM 2 Jun 1994;
2: ;;21.0;VA FileMan;;Dec 28, 1994
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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>