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

DIFROMSE	;SFISC/DCL-FILE ORDER TO RESOLVE POINTERS;07:27 AM  2 Jun 1994;
	;;21.0;VA FileMan;;Dec 28, 1994
	;Per VHA Directive 10-93-142, this routine should not be modified.
	Q
	;File Order List for Resolving Pointers
FOLRP(DIFRFLG,DIFRTA)	;FLAGS,TARGET_ARRAY ; Creates the "DIORD" subscript
	;                structure in the transport array.
	;FLAGS,TARGET_ARRAY
	;*
	;FLAGS = None
	;*
	;TARGET_ARRAY = CLOSED ROOT
	;               This is the Transport Array Root.
	;               "DIORD" is appended to the array root.
	;               A ordered list of files is returned
	;               in the target array.  Each file is given
	;               a value to determine which file should have
	;               pointers resolved.  After each file has been
	;               assigned a value it is ordered by value then
	;               by file number.  If files have the same value
	;               the file number is then used to determine the
	;               order.  This call is used after all the file
	;               being transported are in the "FIA" structure.
	;*
	Q:$G(DIFRTA)']""
	N DIFRCNT,DIFRDD,DIFRF,DIFRFILE,DIFRFLD,DIFRX
	S DIFRFILE=0
	K ^TMP("DIFROMSE",$J),^TMP("DIFRORD",$J),^TMP("DIFRFILE",$J),@DIFRTA@("DIORD")
	F  S DIFRFILE=$O(@DIFRTA@("FIA",DIFRFILE)) Q:DIFRFILE'>0  D
	.D FSF^DIFROMSP(DIFRFILE,"","^TMP(""DIFROMSE"",$J)")
	.Q
	S DIFRFILE=0
	F  S DIFRFILE=$O(^TMP("DIFROMSE",$J,DIFRFILE)) Q:DIFRFILE'>0  D
	.S DIFRDD=0,^TMP("DIFRORD",$J,DIFRFILE)=0
	.F  S DIFRDD=$O(^TMP("DIFROMSE",$J,DIFRFILE,DIFRDD)) Q:DIFRDD'>0  D
	..S DIFRFLD=0
	..F  S DIFRFLD=$O(^DD(DIFRDD,DIFRFLD)) Q:DIFRFLD'>0  S DIFRX=$G(^(DIFRFLD,0)) D
	...Q:$P(DIFRX,"^",2)
	...Q:$P(DIFRX,"^",2)'["P"&($P(DIFRX,"^")'["V")
	...S DIFRCNT=0
	...I $P(DIFRX,"^",2)["V" D  G P
	....S DIFRF=0 F  S DIFRF=$O(^DD(DIFRDD,DIFRFLD,"V","B",DIFRF)) Q:DIFRF'>0  S ^TMP("DIFRFILE",$J,DIFRF)=DIFRCNT+1
	....Q
	...I +$P(@("^"_$P(DIFRX,"^",3)_"0)"),"^",2)=DIFRFILE S:$G(^TMP("DIFRORD",$J,DIFRFILE))'>DIFRCNT ^(DIFRFILE)=DIFRCNT Q
	...I $P(DIFRX,"^",2)["P" S ^TMP("DIFRFILE",$J,+$P(@("^"_$P(DIFRX,"^",3)_"0)"),"^",2))=DIFRCNT+1
P	...S DIFRF=$O(^TMP("DIFRFILE",$J,"")) Q:DIFRF=""  S DIFRCNT=^(DIFRF) K ^(DIFRF)
	...I $G(^TMP("DIFRORD",$J,DIFRF))'>DIFRCNT S ^(DIFRF)=DIFRCNT
	...S DIFRX=^DD(DIFRF,.01,0)
	...I $P(DIFRX,"^",2)["P" S ^TMP("DIFRFILE",$J,+$P(@("^"_$P(DIFRX,"^",3)_"0)"),"^",2))=DIFRCNT+1 G P
	...G:$P(DIFRX,"^",2)'["V" P
	...S DIFRF=0 F  S DIFRF=$O(^DD(DIFRDD,DIFRFLD,"V","B",DIFRF)) Q:DIFRF'>0  S ^TMP("DIFRFILE",$J,DIFRF)=DIFRCNT
	...S DIFRCNT=DIFRCNT+1
	...G P
	...Q
	..Q
	.Q
	S DIFRFILE=0
	F  S DIFRFILE=$O(^TMP("DIFRORD",$J,DIFRFILE)) Q:DIFRFILE'>0  S DIFRX=^(DIFRFILE),^TMP("DIFRORD",$J,"DIORD",DIFRX,DIFRFILE)=""
	S DIFRX="",DIFRCNT=1 F  S DIFRX=$O(^TMP("DIFRORD",$J,"DIORD",DIFRX),-1) Q:DIFRX=""  D
	.S DIFRFILE=0 F  S DIFRFILE=$O(^TMP("DIFRORD",$J,"DIORD",DIFRX,DIFRFILE)) Q:DIFRFILE'>0  D
	..S @DIFRTA@("DIORD",DIFRCNT)=DIFRFILE,DIFRCNT=DIFRCNT+1
	D KILL
	Q
KILL	;
	K ^TMP("DIFROMSE",$J),^TMP("DIFRORD",$J),^TMP("DIFRFILE",$J)
	Q
	;
CHK(DIFRFLG,DIFRSA,DIFRTA)	;CHECK FILES POINTED TO AGAINST FILES GOING OUT WITH DATA
	;Compares the "DIORD" with the "FIA" structures
	;FLAGS,SOURCE_ARRAY,TARGET_ARRAY
	;*
	;FLAGS = None
	;*
	;SOURCE_ARRAY = TRANSPORT ARRAY ROOT
	;*
	;TARGET_ARRAY = TARGET ARRAY ROOT
	;               Returns a list of files that are pointed to
	;               but not being exported.  This is used after
	;               all the files being exported are in the "FIA"
	;               structure.
	;*
	Q:$G(DIFRSA)']""
	Q:$G(DIFRTA)']""
	N DIFRX,DIFRFILE
	S DIFRX=0
	F  S DIFRX=$O(@DIFRSA@("DIORD",DIFRX)) Q:DIFRX'>0  S DIFRFILE=^(DIFRX) D
	.Q:$D(@DIFRSA@("DATA",DIFRFILE))&($P($G(@DIFRSA@("FIA",DIFRFILE,0,1)),"^",5)="y")
	.S @DIFRTA@(DIFRFILE)=""
	.Q
	Q

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>