www.pudn.com > HIM.zip > MFDEL.C
/***************** Program Source Module ***********************/
#ifdef AUTOPDOC
MODULE: mfdel.c
DESCRIPTION:
A little file delete utility which will build a menu of
files in the current directory and allow you to mark/unmark each file.
When enter is pressed all marked files will be deleted.
When the list is built, all files with a read-only attribute will show
up on the list but will be marked read-only so the user can't do anything
with it.
TABLE OF CONTENTS:
#endif
/*
*
* Copyright 1988 Allsoft (tm)
* 100 Calle Playa Del Sol NE
* Albuquerque, NM 87109
*
* ALL RIGHTS RESERVED.
*
* Unauthorized distribution, adaptation or use may be
* subject to civil and criminal penalties.
*
*/
/********** Filled by Polytron Version Control System **********
$Author: james borders $
$Date: 01 Dec 1988 12:17:26 $
$Revision: 1.0 $
$Log: D:/C/FMLIB/MM/VCS/MFDEL.C $
*
* Rev 1.0 01 Dec 1988 12:17:26 james borders
* Initial revision.
****************************************************************/
/*** Include Files ***/
#include "stdio.h"
#ifdef MSC
#include "malloc.h"
#endif
#include "dos.h"
#ifdef TURBOC
#include "alloc.h"
#include "dir.h"
#endif
#include "lm.h"
#include "wn.h"
#include "km.h"
#include "mm.h"
/*** Typedefs ***/
/*** Constants ***/
#define BC WNBLUE
#define FC WNLCYAN
#define BBC WNBLUE
#define BFC WNCYAN
#define HBC WNBLACK
#define HFC WNCYAN
#define RBC WNBLUE
#define RFC WNDGRAY
#define MBC WNBLUE
#define MFC WNGREEN
#define TBC WNBLACK
#define TFC WNYELLOW
#define MC '\001'
#define MK ' '
#define WIDTH 70
#define HEIGHT 0
#define ROW 15
#define COL 0
#define ABSATT MMABSR | MMABSW
#ifdef MSC
#define LOOKUPKEY _A_RDONLY | _A_NORMAL
#define ROKEY _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_VOLID | _A_SUBDIR
#define FILEBLOCK struct find_t
#define getfirst(a,b,c) _dos_findfirst((a), (b), (c))
#define getnext(a) _dos_findnext(a)
#define attribfld attrib
#define namefld name
#endif
#ifdef TURBOC
#define LOOKUPKEY FA_RDONLY
#define ROKEY FA_RDONLY | FA_HIDDEN | FA_SYSTEM | FA_LABEL | FA_DIREC
#define FILEBLOCK struct ffblk
#define getfirst(a,b,c) findfirst((a), (c), (b))
#define getnext(a) findnext(a)
#define attribfld ff_attrib
#define namefld ff_name
#endif
/*** Global Vars ***/
/*** Macros ***/
main(argc,argv)
/*****/
int argc;
char *argv[];
{
int code,mnum,mel,count;
FILEBLOCK cfile;
int kbhit(),getch();
char *cfs;
char buf[80];
lminit((char *(*)())malloc,free,0); /* init list manager */
wninit(0,0,NULL,0,(char *(*)())malloc,free); /* window manager using memory */
kminit(kbhit,getch); /* keyboard manager */
mminit(kmgetch,NULL); /* menu manager */
mmscparms(BC,FC,BBC,BFC,RBC,RFC,MBC,MFC,HBC,HFC,TBC,TFC,MC,MK);
mnum = mmcreate("files",MMPOPUP,ROW,COL,WIDTH,HEIGHT,ABSATT,
"[ Files in Current Directory ]",
"[ Space to Mark, ESC to Abort, Enter to Delete Marked ]",NULL,0,
0,1,MMACTIONNULL,NULL);
count = 0;
if (argc > 1)
cfs = argv[1];
else
cfs = "*.*";
code = getfirst(cfs,LOOKUPKEY,&cfile);
while (code == 0){
count++;
sprintf(buf,"File [%s] is number %d",cfile.namefld,count);
mel = mmamel(mnum,"",cfile.namefld,buf,"",1,0,MMNOCASE | cfile.namefld[0],
MMACTIONNULL,NULL);
if (cfile.attribfld & (ROKEY))
mmsmelronly(mnum,mel); /* make read only */
code = getnext(&cfile);
}
if (count){
code = mmpromenu(mnum,MMPROCESS,1);
if (code != 0){ /* user didn't ESCAPE */
if (mmgmelstat(mnum,-1) > 0){ /* user marked files */
mel = mmgfirstmel(mnum);
while (mel > 0){
if (mmgmelstat(mnum,mel)){
if (unlink(mmgmelmdata(mnum,mel))){ /* delete file */
printf("\nError deleting file [%s].",mmgmelmdata(mnum,mel));
}
}
mel = mmgnextmel(mnum);
}
}
}
}
else{
printf("\nNo files matching [%s]",cfs);
}
mmdestroy(mnum);
exit(0);
}