Annotation of freem_fileman/DIFROMSP.m, revision 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>