File:  [Coherent Logic Development] / freem_fileman / USER / DIFROMSP.m
Revision 1.1: download - view: text, annotated - select for diffs
Mon Apr 28 14:13:20 2025 UTC (3 months ago) by snw
Branches: MAIN
CVS tags: HEAD
Restructure repository

    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>