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>