Annotation of freem_fileman/DDSDBLK.m, revision 1.1

1.1     ! snw         1: DDSDBLK        ;SFISC/MKO-DELETE UNUSED BLOCKS ;09:15 AM  18 Aug 1994
        !             2:        ;;21.0;VA FileMan;;Dec 28, 1994
        !             3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
        !             4:        ;
        !             5:        N %,D,DIAC,DIC,DIFILE,DIOVRD,X,Y
        !             6:        D INIT
        !             7:        S DDSFILE=$$FILE G:DDSFILE=-1 QUIT
        !             8:        D SUB(+DDSFILE,DDSSUB),FINDB(DDSSUB,DDSBLK),PROC,QUIT
        !             9:        Q
        !            10:        ;
        !            11: ALL    ;Purge all unused blocks regardless of file
        !            12:        N %,DIC,DIOVRD,X,Y
        !            13:        K DDSFILE
        !            14:        D INIT,FINDALL(DDSBLK),PROC,QUIT
        !            15:        Q
        !            16:        ;
        !            17: PROC   ;Delete blocks in @DDSBLK
        !            18:        I '$D(@DDSBLK) D  Q
        !            19:        . W !!!,"There are no unused blocks associated with this file."
        !            20:        ;
        !            21:        D REPORT
        !            22:        D ASKDEL Q:DDSQUIT
        !            23:        D ASKCONT Q:DDSQUIT
        !            24:        ;
        !            25:        ;Delete blocks
        !            26:        D:$G(DDSDEL) DELNPR
        !            27:        D:'$G(DDSDEL) DELPR
        !            28:        W !!,"DONE!"
        !            29:        Q
        !            30:        ;
        !            31: INIT   ;Initialize variables
        !            32:        S (DDSDEL,DDSQUIT)=0,DIOVRD=1
        !            33:        S DDSBLK=$NA(^TMP("DDSDBLK",$J,"BLK"))
        !            34:        S DDSSUB=$NA(^TMP("DDSDBLK",$J,"SUB"))
        !            35:        K @DDSBLK,@DDSSUB
        !            36:        Q
        !            37:        ;
        !            38: QUIT   ;Cleanup
        !            39:        K @DDSBLK,@DDSSUB
        !            40:        K DDSBLK,DDSDEL,DDSFILE,DDSQUIT,DDSSUB
        !            41:        K DDH,DIRUT,DIROUT,DTOUT,DUOUT
        !            42:        Q
        !            43:        ;
        !            44: FINDB(DDSSUB,DDSBLK)   ;Find blocks associated with a specific file
        !            45:        N B,B0,N
        !            46:        S B=0 F  S B=$O(^DIST(.404,B)) Q:'B  S B0=$G(^(B,0)) D
        !            47:        . S N=$P(B0,U,2)
        !            48:        . I N,$D(@DDSSUB@(N)),'$D(^DIST(.403,"AB",B)),'$D(^DIST(.403,"AC",B)) S @DDSBLK@(B)=$P(B0,U)
        !            49:        Q
        !            50:        ;
        !            51: FINDALL(DDSBLK)        ;Find all unused blocks
        !            52:        N B,B0
        !            53:        S B=0 F  S B=$O(^DIST(.404,B)) Q:'B  S B0=$G(^(B,0)) D
        !            54:        . I '$D(^DIST(.403,"AB",B)),'$D(^DIST(.403,"AC",B)) D
        !            55:        .. S @DDSBLK@(B)=$P(B0,U)
        !            56:        Q
        !            57:        ;
        !            58: FILE() ;Prompt for form
        !            59:        ;Select file
        !            60:        N DIC,Y
        !            61:        S DDS1="PURGE UNUSED BLOCKS FROM" D W^DICRW K DDS1 G:Y<0 FILEQ
        !            62:        S:'$D(@(DIC_"0)")) Y=-1
        !            63: FILEQ  Q Y
        !            64:        ;
        !            65: DELPR  ;Delete blocks with prompting
        !            66:        N DDSB
        !            67:        W ! K DIK,DIR,DIRUT
        !            68:        S DIR(0)="YA",DIR("B")="NO"
        !            69:        S DIR("?")="  Enter 'Y' to delete, 'N' to keep."
        !            70:        S DIK="^DIST(.404,"
        !            71:        ;
        !            72:        S DDSB=""
        !            73:        F  S DDSB=$O(@DDSBLK@(DDSB)) Q:DDSB=""!DDSQUIT  D
        !            74:        . S DIR("A")=$P(@DDSBLK@(DDSB),U)_$J("",30-$L($P(@DDSBLK@(DDSB),U)))_"Delete (Y/N)? "
        !            75:        . D ^DIR S:$D(DIRUT) DDSQUIT=1 Q:'Y
        !            76:        . S DA=DDSB D ^DIK
        !            77:        K DA,DIR,DIK,DIRUT,DTOUT,DUOUT,DIROUT
        !            78:        Q
        !            79:        ;
        !            80: DELNPR ;Delete blocks without prompting
        !            81:        N DDSB
        !            82:        W ! K DIK
        !            83:        S DIK="^DIST(.404,"
        !            84:        S DDSB=""
        !            85:        F  S DDSB=$O(@DDSBLK@(DDSB)) Q:DDSB=""  D
        !            86:        . W !,"Deleting block "_$P(@DDSBLK@(DDSB),U)_" (IEN #"_DDSB_") ..."
        !            87:        . S DA=DDSB D ^DIK
        !            88:        K DIK,DA
        !            89:        Q
        !            90:        ;
        !            91: ASKDEL ;Ask if user wants to delete all unused blocks w/o confirmation
        !            92:        W ! S DIR(0)="YA",DIR("B")="NO"
        !            93:        S DIR("A",1)=""
        !            94:        S DIR("A")="Delete all unused blocks without prompting (Y/N)? "
        !            95:        S DIR("?",1)="  Enter 'Y' to delete unused blocks from the BLOCK file"
        !            96:        S DIR("?",2)="    without confirmation."
        !            97:        S DIR("?",3)=""
        !            98:        S DIR("?")="  Enter 'N' to confirm each delete."
        !            99:        D ^DIR K DIR I $D(DIRUT) S DDSQUIT=1 Q
        !           100:        S DDSDEL=Y
        !           101:        Q
        !           102:        ;
        !           103: ASKCONT        ;Final chance to abort
        !           104:        K DIR S DIR(0)="YA",DIR("B")="NO"
        !           105:        S DIR("A",1)=""
        !           106:        S DIR("A")="Continue (Y/N)? "
        !           107:        S DIR("?")="  Enter 'Y' to delete form.  Enter 'N' to exit."
        !           108:        D ^DIR K DIR
        !           109:        S:$D(DIRUT)!'Y DDSQUIT=1
        !           110:        Q
        !           111:        ;
        !           112: REPORT ;Print report
        !           113:        N B
        !           114:        W !!!
        !           115:        W "  UNUSED BLOCKS"
        !           116:        W:$D(DDSFILE) " ASSOCIATED WITH FILE "_$P(DDSFILE,U,2)_" (#"_$P(DDSFILE,U)_")"
        !           117:        W !!,"  Internal"
        !           118:        W !,"  Entry Number   Block Name"
        !           119:        W !,"  ------------   ----------"
        !           120:        ;
        !           121:        S B="" F  S B=$O(@DDSBLK@(B)) Q:B=""  W !,"  "_B,?17,@DDSBLK@(B)
        !           122:        Q
        !           123:        ;
        !           124: SUB(FN,OUT)    ;
        !           125:        ;Set OUT array for file number FN and all its subfiles
        !           126:        N SUB
        !           127:        I $D(^DD(FN)) S @OUT@(FN)=""
        !           128:        S SUB="" F  S SUB=$O(^DD(FN,"SB",SUB)) Q:SUB=""  D SUB(SUB,OUT)
        !           129:        Q

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