Annotation of freem_fileman/DDS1.m, revision 1.1.1.1

1.1       snw         1: DDS1(DDSPG)    ;SFISC/MKO-LOAD PAGE ;09:37 AM  20 Oct 1994
                      2:        ;;21.0;VA FileMan;;Dec 28, 1994
                      3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
                      4:        ;Input:
                      5:        ;  DDS     = Form number^Form name
                      6:        ;  DDSPG   = Internal page number
                      7:        ;  DA      = Record array
                      8:        ;  DDSREFT = Global location where data (temporarily) is stored
                      9:        ;  DDP     = Primary file number of form
                     10:        ;  DIE     = Global root of form
                     11:        ;  DDSDA   = DA,DA(1),... of form
                     12:        ;  DDSDL   = Level number
                     13:        ;Also needed for pointed-to blocks:
                     14:        ;  DDSDAORG
                     15:        ;  DDSDLORG
                     16:        ;Returns:
                     17:        ;  DIERR
                     18:        ;
                     19:        S U="^"
                     20:        ;
                     21:        ;Get header block
                     22:        S DDS1B=$P($G(^DIST(.403,+DDS,40,DDSPG,0)),U,2)
                     23:        I DDS1B]"" D BLK(DDSPG,DDS1B,"",1) G:$G(DIERR) END
                     24:        ;
                     25:        ;Get all other blocks on page
                     26:        S DDS1BO="" F  S DDS1BO=$O(^DIST(.403,+DDS,40,DDSPG,40,"AC",DDS1BO)) Q:DDS1BO=""  S DDS1B=$O(^(DDS1BO,0)) Q:'DDS1B  D BLK(DDSPG,DDS1B,DDS1BO) G:$G(DIERR) END
                     27:        ;
                     28: END    K DDS1B,DDS1BO
                     29:        Q
                     30:        ;
                     31: BLK(DDSPG,DDS1B,DDS1BO,DDS1H,DDS1E)    ;Load block
                     32:        ;In:  DDS1H  = 1 if a header block
                     33:        ;     DDS1E  = 1 if we're loading up a pointed-to block and
                     34:        ;              we want interactive dialog (DIC(0)["E") in the lookup
                     35:        ;
                     36:        I $D(^DIST(.404,DDS1B,0))[0 D BLD^DIALOG(3051,"#"_DDS1B) Q
                     37:        ;
                     38:        N DDS1PTB,DDS1REP S DDS1PTB=""
                     39:        I '$G(DDS1H) D
                     40:        . S DDS1PTB=$G(^DIST(.403,+DDS,40,DDSPG,40,DDS1B,1)),DDS1REP=$G(^(2))
                     41:        . K:DDS1REP<2 DDS1REP
                     42:        ;
                     43:        I DDS1PTB]"" N @$$D0(DDSDL),DA,DDP,DIE,DDSDL,DDSDA D  Q:$G(DIERR)
                     44:        . I $G(DDS1REP)>1 D
                     45:        .. D BK^DDS10(.DDS1B,.DDP) Q:$G(DIERR)
                     46:        .. D GDA^DDS10(DDS1B,$G(DDS1E),.DA) Q:$G(DIERR)
                     47:        .. S DDP=$G(^DD(DDP,0,"UP"))
                     48:        .. D GL^DDS10(DDP,.DA,.DIE,.DDSDL,.DDSDA,1)
                     49:        .. D GETD0(.DA,DDSDL)
                     50:        . E  D
                     51:        .. D SET^DDS10(DDS1B,$G(DDS1E),.DA,.DDP,.DIE,.DDSDL,.DDSDA)
                     52:        .. Q:$G(DIERR)
                     53:        .. I DA="",'$G(DDS1E),$P($G(@DDSREFT@(DDSPG,DDS1B)),U)]"" S DDSDA=$P(^(DDS1B),U),DA=+DDSDA
                     54:        .. S D0=DA
                     55:        ;
                     56:        I $G(DA)]"",$G(@DDSREFT@(DDSPG,DDS1B,DDSDA))<1 D
                     57:        . S $P(@DDSREFT@(DDSPG,DDS1B,DDSDA),U)=1
                     58:        . I $G(DDS1REP)>1 D REP Q
                     59:        . ;
                     60:        . S @DDSREFT@(DDSPG,DDS1B,DDSDA,"GL")=DIE
                     61:        . D ^DDS11(DDS1B)
                     62:        ;
                     63:        S $P(@DDSREFT@(DDSPG,DDS1B),U)=$G(DDSDA)
                     64:        Q
                     65:        ;
                     66: REP    ;Load data for repeating block
                     67:        N DDS1DDP,DDS1IND,DDS1INI,DDS1MUL,DDS1PDA,DDS1REF,DDS1RT,DDS1SEL
                     68:        N DDS1SN,DDS1VAL
                     69:        S DDS1REF=$NA(@DDSREFT@(DDSPG,DDS1B))
                     70:        S DDS1DDP=$P(@DDSREFS@(DDSPG,DDS1B),U,3)
                     71:        S DDS1IND=$P(DDS1REP,U,2) S:DDS1IND="" DDS1IND="B"
                     72:        S DDS1INI=$P(DDS1REP,U,3)
                     73:        S DDS1SEL=$P(@DDSREFS@(DDSPG,DDS1B),U,10)
                     74:        S DDS1PDA=DDSDA
                     75:        ;
                     76:        S DDS1MUL=$O(^DD(DDP,"SB",DDS1DDP,""))
                     77:        ;
                     78:        S $P(@DDS1REF@(DDS1PDA),U,7,10)=DDP_U_DDS1MUL_U_DDS1SEL_U_DDS1IND
                     79:        S @DDS1REF@(DDSDA,"GL")=$S(DDS1MUL:DIE_+DA_","""_$P($P(^DD(DDP,DDS1MUL,0),U,4),";")_""",",1:^DIC(DDS1DDP,0,"GL"))
                     80:        ;
                     81:        N DIE,DDP
                     82:        S DIE=@DDS1REF@(DDSDA,"GL"),DDS1RT=$$CREF^DILF(DIE),DDP=DDS1DDP
                     83:        S DDS1SN=0
                     84:        ;
                     85:        I DDS1MUL D
                     86:        . D DDA^DDS5(0,.DA,.DDSDL)
                     87:        . S DDSDA=","_DDSDA
                     88:        . S:'$D(@DDS1RT@(DDS1IND)) DDS1IND="!IEN"
                     89:        . I DDS1IND="!IEN" D
                     90:        .. S DA=0 F  S DA=$O(@DDS1RT@(DA)) Q:'DA  D REPLD
                     91:        . E  D
                     92:        .. S DDS1VAL=""
                     93:        .. F  S DDS1VAL=$O(@DDS1RT@(DDS1IND,DDS1VAL)) Q:DDS1VAL=""  D
                     94:        ... S DA="" F  S DA=$O(@DDS1RT@(DDS1IND,DDS1VAL,DA)) Q:DA=""  D REPLD
                     95:        ;
                     96:        E  S DDS1VAL=DA N D0,DA,DDSDA D
                     97:        . S DDSDA=",",DA=""
                     98:        . F  S DA=$O(@DDS1RT@(DDS1IND,DDS1VAL,DA)) Q:DA=""  D REPLD
                     99:        ;
                    100:        ;
                    101:        I DDS1INI="l"!(DDS1INI="n") D
                    102:        . N N,T
                    103:        . S N=DDS1INI="n"
                    104:        . S DDS1SN=$O(@DDS1REF@(DDS1PDA," "),-1)+N
                    105:        . S T=DDS1SN-DDS1REP+2-N
                    106:        . S DDS1INI=$S(T<1:1_U_DDS1SN,1:T_U_(DDS1REP-'N))_U_DDS1SN
                    107:        E  S DDS1INI="1^1^1"
                    108:        ;
                    109:        S $P(@DDS1REF@(DDS1PDA),U,2,6)=DDS1PDA_U_DDS1INI_U_+DDS1REP
                    110:        ;
                    111:        I DDS1MUL D
                    112:        . D UDA^DDS5(.DA,.DDSDL)
                    113:        . S DDSDA=$P(DDSDA,",",2,999)
                    114:        Q
                    115:        ;
                    116: REPLD  ;Load data
                    117:        S DDS1SN=DDS1SN+1,$P(DDSDA,",")=DA,@("D"_DDSDL)=DA
                    118:        S @DDS1REF@(DDS1PDA,DDS1SN)=DDSDA
                    119:        S @DDS1REF@(DDS1PDA,"B",DDSDA)=DDS1SN
                    120:        D ^DDS11(DDS1B)
                    121:        Q
                    122:        ;
                    123: D0(DL) ;Given DL, return string D0,D1,...,Dn
                    124:        N I,S
                    125:        S S="" F I=0:1:DL S S=S_"D"_I_","
                    126:        S:S?.E1"," S=$E(S,1,$L(S)-1)
                    127:        Q S
                    128:        ;
                    129: GETD0(DA,DL)   ;Given DA array, set D0,D1...
                    130:        N I
                    131:        S @("D"_DL)=DA
                    132:        F I=1:1:DL-1 S @("D"_(DL-I))=DA(I)
                    133:        Q

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