Annotation of freem_fileman/DIFROMSP.m, revision 1.1.1.1
1.1 snw 1: DIFROMSP ;SFISC/DCL-DIFROM SERVER POINTER LIST;02:58 PM 9 Sep 1994;
2: ;;21.0;VA FileMan;;Dec 28, 1994
3: ;Per VHA Directive 10-93-142, this routine should not be modified.
4: ;
5: POINTERS(DIFRFILE,DIFRFLG,DIFRPTA) ;FILENUMBER, POINTER X-REF TARGET ARRAY ROOT
6: ;FILE, FLAGS, TARGET ARRAY
7: S DIFRFLG=$G(DIFRFLG)
8: N DIFRDDNS,DIFRALL
9: S DIFRALL=DIFRFLG["A"
10: D FP(DIFRFILE,"","DIFRDDNS") ;ALL DD#s FOR FILE IN DIFRDDNS array
11: S DIFRDDNS=0
12: F S DIFRDDNS=$O(DIFRDDNS(DIFRFILE,DIFRDDNS)) Q:DIFRDDNS'>0 D
13: .D P(DIFRDDNS,DIFRFLG,$NA(@DIFRPTA@("P",DIFRFILE))) ;set "P" x-refs in target array
14: .Q
15: Q
16: ;
17: FP(DIFRFILE,DIFRFLG,DIFRTA) ;FILENUMBER, TARGET ARRAY ROOT FOR SUB DD NRS
18: ;FILE, FLAGS, TARGET ARRAY
19: N DIFRFD,DIFRFE,DIFRFW,DIFRNM,DIFRX
20: S DIFRFW=$G(DIFRFLG)'["W"
21: F S @DIFRTA@(DIFRFILE,DIFRFILE)=$O(^DD(DIFRFILE,0,"NM",""))_" "_$S($D(^DIC(DIFRFILE,0)):"(File-top level)",1:"(sub-file)"),DIFRFE=0
22: E F S DIFRFE=$O(@DIFRTA@(DIFRFILE,DIFRFE)) Q:DIFRFE'>0 D
23: .S DIFRFD=0
24: .F S DIFRFD=$O(^DD(DIFRFE,"SB",DIFRFD)) Q:DIFRFD'>0 D
25: ..I DIFRFW,$P(^DD(DIFRFD,.01,0),"^",2)["W" Q
26: ..I DIFRFILE-DIFRFE!'$D(DIFRFA) S @DIFRTA@(DIFRFILE,DIFRFD)=$O(^DD(DIFRFD,0,"NM",""))_" (sub-file)"
27: ..Q
28: .Q
29: Q
30: ;
31: P(DIFRPDD,DIFRFLG,DIFRPTA) ;DIFRPDD=DD#,DIFRPTA=TARGET ARRAY BY VALUE TO SET "P" X-REF
32: ;FILE/SUB-DD#,FLAGS,TARGET_ARRAY
33: N X,Y,PN,PIDF,PFILE,DIFRALL
34: S DIFRFLG=$G(DIFRFLG),DIFRALL=DIFRFLG["A"
35: I $G(U)'="^" N U S U="^"
36: S X=$S(DIFRALL:0,1:.01)
37: F S X=$O(^DD(DIFRPDD,X)) Q:X'>0 I $D(^(X,0)),'$P(^(0),U,2),$P(^(0),U,2)["P" S Y=^(0) D
38: .I 'DIFRALL,$D(^DD(DIFRPDD,0,"IX",X)) Q
39: .S PN=0
40: .S @DIFRPTA@(DIFRPDD,X,PN)=U_$P(Y,U,3)
41: .F Q:$P($G(^DD(+$P($P(Y,U,2),"P",2),.01,0)),U,2)'["P" S Y=^(0) D
42: ..S PN=PN+1
43: ..S @DIFRPTA@(DIFRPDD,X,PN)=U_$P(Y,U,3)
44: ..Q
45: .S PIDF=0,PFILE=+$P($P(Y,U,2),"P",2)
46: .F S PIDF=$O(^DD(PFILE,0,"ID",PIDF)) Q:PIDF'>0 D
47: ..S @DIFRPTA@(DIFRPDD,X,PN,"ID",PIDF)=""
48: ..Q
49: .;HERE FIND ALL REQUIRED ID OR ALL ID FOR POINTED TOO FILE
50: .;AND LIST IN @DIFRPTA@(DIFRPDD,X,PN,"ID",FILEDNUMBER)
51: .Q
52: Q
53: ;
54: PGL(DIFRFILE,DIFRFLG,DIFRTA) ; RETURN GL NODES FOR POINTERS IN TARGET ARRAY
55: ;FILE,FLAGS,TARGET ARRAY
56: N DIFR,DIFRD,DIFRF,DIFRPGL,DIFRX
57: Q:'$D(^DD(DIFRFILE))
58: Q:$G(DIFRTA)']""
59: D FSF(DIFRFILE,"","DIFRPGL")
60: S (DIFR,DIFRD)=0
61: F S DIFRD=$O(DIFRPGL(DIFRFILE,DIFRD)) Q:DIFRD'>0 D
62: .S DIFRF=.01 ;Dont select .01 fields
63: .F S DIFRF=$O(^DD(DIFRD,DIFRF)) Q:DIFRF'>0 I $D(^(DIFRF,0)) S DIFRX=^(0) D
64: ..Q:$P(DIFRX,"^",2) ;Don't select Multiple/WP fields
65: ..I $D(^DD(DIFRD,0,"ID",DIFRF)) Q ;Don't select IDENTIFIER fields
66: ..I $P(DIFRX,"^",2)["P"!($P(DIFRX,"^",2)["V") S @DIFRTA@("PGL",DIFRD,$P($P(DIFRX,"^",4),";"),$P($P(DIFRX,"^",4),";",2),DIFRF)=DIFRX Q
67: ..;SEND WHOLD NODE NOT $P(DIFRX,"^",2) Q
68: ..Q
69: .Q
70: Q
71: TP(DIFRFILE,DIFRFLG,DIFRTA) ; $$ Extrinsic Function - Test for Pointers OR Variable Pointers
72: ;Returns 1 or 0, if pointers in file
73: ;FILE,FLAGS,TARGET ARRAY
74: ;If target array exist the entire list of fields being exported will be
75: ;in array
76: N DIFR,DIFRTMP,DIFRD,DIFRF,DIFRX
77: S DIFRX=$G(DIFRTA)]""
78: D FSF(DIFRFILE,"","DIFRTMP")
79: S (DIFR,DIFRD)=0
80: F S DIFRD=$O(DIFRTMP(DIFRFILE,DIFRD)) Q:DIFRD'>0 D Q:DIFR
81: .S DIFRF=.01 ; Do not include .01 fields
82: .F S DIFRF=$O(^DD(DIFRD,DIFRF)) Q:DIFRF'>0 I $D(^(DIFRF,0)),'$P(^(0),"^",2),($P(^(0),"^",2)["P"!($P(^(0),"^",2)["V")),'$D(^DD(DIFRD,0,"ID",DIFRF)) S:'DIFRX DIFR=1 Q:DIFR D
83: ..S:DIFRX @DIFRTA@(DIFRD,DIFRF)=$S($P(^DD(DIFRD,DIFRF,0),"^",2)["P":"P",1:"V")
84: ..Q
85: .Q
86: Q:DIFRX $D(@DIFRTA)>9
87: Q DIFR
88: ;
89: TL(DIFRFILE,DIFRFLG,DIFRSA) ; $$ Extrinsic Function - Test for local fields
90: ;FILE,FLAGS,SOURCE_ARRAY - compares local DD with Transport DD
91: ;Returns 1 or 0, if local changes exist
92: ;RUN THIS AFTER DD IS INSTALLED ON TARGET SITE
93: N DIFR,DIFRD,DIFRF,DIFRTMP
94: D FSF(DIFRFILE,"","DIFRTMP")
95: S (DIFR,DIFRD)=0
96: F S DIFRD=$O(DIFRTMP(DIFRFILE,DIFRD)) Q:DIFRD'>0 D Q:DIFR
97: .S DIFRF=0
98: .F S DIFRF=$O(^DD(DIFRD,DIFRF)) Q:DIFRF'>0 I $D(^(DIFRF,0)),'$D(@DIFRSA@("^DD",DIFRFILE,DIFRD,DIFRF,0)) S DIFR=1 Q
99: .Q
100: Q DIFR
101: ;
102: FSF(DIFRFILE,DIFRFLG,DIFRTA) ;File-Sub-File List
103: ;FILE, FLAGS, TARGET ARRAY
104: N DIFRFD,DIFRFE,DIFRFW,DIFRNM,DIFRX
105: S DIFRFW=$G(DIFRFLG)'["W"
106: S @DIFRTA@(DIFRFILE,DIFRFILE)="",DIFRFE=0
107: F S DIFRFE=$O(@DIFRTA@(DIFRFILE,DIFRFE)) Q:DIFRFE'>0 D
108: .S DIFRFD=0
109: .F S DIFRFD=$O(^DD(DIFRFE,"SB",DIFRFD)) Q:DIFRFD'>0 D
110: ..I DIFRFW,$P(^DD(DIFRFD,.01,0),"^",2)["W" Q
111: ..I DIFRFILE-DIFRFE!'$D(DIFRFA) S @DIFRTA@(DIFRFILE,DIFRFD)=""
112: ..Q
113: .Q
114: Q
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>