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>