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>