Annotation of freem_fileman/DDSDBLK.m, revision 1.1.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>