Annotation of freem_fileman/DDS10.m, revision 1.1

1.1     ! snw         1: DDS10  ;SFISC/MKO-BLOCK SETUP ;09:48 AM  18 Nov 1994
        !             2:        ;;21.0;VA FileMan;;Dec 28, 1994
        !             3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
        !             4:        ;
        !             5: SET(DDS1B,DDS1E,DA,DDP,DIE,DL,DDSDA)   ;Get values for pointed-to block
        !             6:        ;In:
        !             7:        ;  DDS1B   = Block number or [Block name] (by ref)
        !             8:        ;  DDS1E   = 1, if we're loading a pointed-to block and we want
        !             9:        ;               interactive dialog (DIC(0)["E") in the lookup
        !            10:        ;  DA      = Record array
        !            11:        ;Returns:
        !            12:        ;  DDS1B = Block number
        !            13:        ;  DDP   = File number of block
        !            14:        ;  DIE   = Global root based on DDP and DA
        !            15:        ;  DL    = Level number (top=0)
        !            16:        ;  DDSDA = DA,DA(1),...,
        !            17:        ;
        !            18:        D BK(.DDS1B,.DDP) Q:$G(DIERR)
        !            19:        D GDA(DDS1B,DDS1E,.DA) Q:$G(DIERR)
        !            20:        D GL(DDP,.DA,.DIE,.DL,.DDSDA,1) Q:$G(DIERR)
        !            21:        Q
        !            22:        ;
        !            23: BK(DDSBK,DDP)  ;Lookup block, get file number
        !            24:        ;Input:
        !            25:        ;  DDSBK = Block number or [Block name] (by ref)
        !            26:        ;Returns:
        !            27:        ;  DDSBK = Block number
        !            28:        ;  DDP   = File number
        !            29:        ;  DIERR
        !            30:        ;
        !            31:        I DDSBK=+$P(DDSBK,"E")  D  Q
        !            32:        . I $D(^DIST(.404,DDSBK,0))[0 D BLD^DIALOG(3051,"#"_DDSBK) Q
        !            33:        . S DDP=+$P(^DIST(.404,DDSBK,0),U,2)
        !            34:        I DDSBK?1"["1.E1"]" D  Q
        !            35:        . N X,Y,DIC
        !            36:        . S X=$E(DDSBK,2,$L(DDSBK)-1),DIC="^DIST(.404,",DIC(0)="FZ"
        !            37:        . D ^DIC I Y<0 D BLD^DIALOG(3051,"named "_X) Q
        !            38:        . S DDSBK=+Y,DDP=+$P(Y(0),U,2)
        !            39:        D BLD^DIALOG(3051,"#"_DDSBK)
        !            40:        Q
        !            41:        ;
        !            42: GDA(DDS1B,DDS1E,DA)    ;Find new DA
        !            43:        ;Input:
        !            44:        ;  DDS1B    = Block number
        !            45:        ;  DDS1E    = 1:Interactive lookup
        !            46:        ;  DDSDAORG = Original DA array
        !            47:        ;  DDSDLORG = Original DL
        !            48:        ;  DDSPG
        !            49:        ;Returns:
        !            50:        ;  DA      = Record number
        !            51:        ;  DIERR
        !            52:        ;
        !            53:        N DDSDA,DDSI,X
        !            54:        ;
        !            55:        ;Set DA array to its original value
        !            56:        S DA=DDSDAORG
        !            57:        F DDSI=1:1:DDSDLORG S DA(DDSI)=DDSDAORG(DDSI)
        !            58:        D DDSDA(.DA,DDSDLORG,.DDSDA)
        !            59:        ;
        !            60:        ;Xecute each PTB node
        !            61:        F DDSI=1:1 Q:DA=""!'$D(@DDSREFS@(DDSPG,DDS1B,"PTB",DDSI))  X ^(DDSI) S:$G(X)'>0 DA=""
        !            62:        ;
        !            63:        ;Kill descendants of DA
        !            64:        I '$G(DIERR) S DDSI=DA K DA S DA=DDSI
        !            65:        S:DA'>0!$G(DIERR) DA=""
        !            66:        Q
        !            67:        ;
        !            68: GL(F,DA,DIE,DL,DDSDA,DDSL)     ;Get global root, level, and IEN
        !            69:        ;Input variables:
        !            70:        ;  F    = file #
        !            71:        ;  DA   = array
        !            72:        ;  DDSL = flag to lock record
        !            73:        ;Returns:
        !            74:        ;  DIE   = global root of file (null if error)
        !            75:        ;  DL    = level (top=0) (null if error)
        !            76:        ;  DDSDA = IEN
        !            77:        ;  DIERR = Error flag
        !            78:        ;
        !            79:        I '$D(^DD(F)) D BLD^DIALOG(401,F) S (DIE,DL)="" Q
        !            80:        I $D(^DIC(F,0,"GL"))#2 S DIE=^("GL"),DL=0
        !            81:        E  D SUBGL Q:$G(DIERR)
        !            82:        ;
        !            83:        Q:'$G(DA)
        !            84:        D DDSDA(.DA,DL,.DDSDA)
        !            85:        ;
        !            86:        N DDSP S DDSP("FILE")=F,DDSP("IEN")=DDSDA
        !            87:        ;
        !            88:        I $D(@(DIE_DA_",0)"))[0 D BLD^DIALOG(601,"",.DDSP)
        !            89:        I $D(@(DIE_DA_",-9)")) D BLD^DIALOG(602,"",.DDSP)
        !            90:        ;
        !            91:        I $G(DDSL),$D(^TMP("DDS",$J,"LOCK",DIE_DA_")"))[0 D  Q:$G(DIERR)
        !            92:        . L +@(DIE_DA_")"):0 E  D BLD^DIALOG(110,"",.DDSP) Q
        !            93:        . S ^TMP("DDS",$J,"LOCK",DIE_DA_")")=""
        !            94:        Q
        !            95:        ;
        !            96: SUBGL  ;Get root and level for subfile
        !            97:        N D,I,S,U1
        !            98:        S D=F
        !            99:        F DL=0:1 Q:$D(^DD(D,0,"UP"))[0  S U1=^("UP") G:'$D(^DD(U1,"SB",D)) SUBER G:$D(^DD(U1,$O(^(D,"")),0))[0 SUBER S S(DL+1)=""""_$P($P(^(0),U,4),";")_"""",D=U1
        !           100:        G:$D(^DIC(D,0,"GL"))[0 SUBER S DIE=^("GL")
        !           101:        F I=DL:-1:1 G:$D(DA(I))[0 SUBER S DIE=DIE_DA(I)_","_S(I)_","
        !           102:        Q
        !           103:        ;
        !           104: SUBER  ;Come here if an error is encountered in GL
        !           105:        S (DIE,DL)=""
        !           106:        D BLD^DIALOG(309)
        !           107:        Q
        !           108:        ;
        !           109: DDSDA(DA,DL,DDSDA)     ;Determine DDSDA
        !           110:        ;Input:
        !           111:        ;  DA    = Record array
        !           112:        ;  DL    = Level number (top=0)
        !           113:        ;Output:
        !           114:        ;  DDSDA = DA,DA(1),...,
        !           115:        ;
        !           116:        N I
        !           117:        I DA="" S DDSDA="" Q
        !           118:        S DDSDA=DA_"," F I=1:1:DL S DDSDA=DDSDA_DA(I)_","
        !           119:        Q

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