home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume11 / mtools / part01 / mdel.c < prev    next >
C/C++ Source or Header  |  1987-08-27  |  3KB  |  101 lines

  1. /*
  2.  * Delete a MSDOS file
  3.  *
  4.  * Emmet P. Gray            US Army, HQ III Corps & Fort Hood
  5.  * ...!ihnp4!uiucuxc!fthood!egray    Attn: AFZF-DE-ENV
  6.  *                     Directorate of Engineering & Housing
  7.  *                     Environmental Management Office
  8.  *                     Fort Hood, TX 76544-5057
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include "msdos.h"
  13. #define VERBOSE
  14.  
  15. int fd;                /* the file descriptor for the floppy */
  16. int dir_start;            /* starting sector for directory */
  17. int dir_len;            /* length of directory (in sectors) */
  18. int dir_entries;        /* number of directory entries */
  19. int dir_chain[25];        /* chain of sectors in directory */
  20. int clus_size;            /* cluster size (in sectors) */
  21. int fat_len;            /* length of FAT table (in sectors) */
  22. int num_clus;            /* number of available clusters */
  23. unsigned char *fatbuf;        /* the File Allocation Table */
  24. char *mcwd;            /* the Current Working Directory */
  25.  
  26. main(argc, argv)
  27. int argc;
  28. char *argv[];
  29. {
  30.     int i, ismatch, entry, start, nogo, subdir();
  31.     char *filename, *newfile, text[4], tname[9], *getname(), *unixname();
  32.     char *strncpy(), *getpath(), *pathname, ans[10];
  33.     void exit();
  34.     struct directory *dir, *search();
  35.  
  36.     if (init(2)) {
  37.         fprintf(stderr, "mdel: Cannot initialize diskette\n");
  38.         exit(1);
  39.     }
  40.  
  41.     if (argc < 2) {
  42.         fprintf(stderr, "Usage: mdel <MSDOS file> [<MSDOS files...>]\n");
  43.         exit(1);
  44.     }
  45.  
  46.     for (i=1; i<argc; i++) {
  47.         filename = getname(argv[i]);
  48.         pathname = getpath(argv[i]);
  49.         if (subdir(pathname))
  50.             continue;
  51.         nogo = 0;
  52.         ismatch = 0;
  53.         for (entry=0; entry<dir_entries; entry++) {
  54.             dir = search(entry);
  55.                     /* if empty */
  56.             if (dir->name[0] == NULL)
  57.                 break;
  58.                     /* if erased */
  59.             if (dir->name[0] == 0xe5)
  60.                 continue;
  61.                     /* if dir or volume lable */
  62.             if ((dir->attr & 0x10) || (dir->attr & 0x08))
  63.                 continue;
  64.             strncpy(tname, dir->name, 8);
  65.             strncpy(text, dir->ext, 3);
  66.             newfile = unixname(tname, text);
  67.                     /* see it if matches the pattern */
  68.             if (match(newfile, filename)) {
  69. #ifdef VERBOSE
  70.                 printf("Removing %s\n", newfile);
  71. #endif
  72.                 ismatch = 1;
  73.                 if (dir->attr & 0x01) {
  74.                     while (!nogo) {
  75.                         printf("mdel: '%s' is read only, erase anyway (y/n) ? ", newfile);
  76.                         gets(ans);
  77.                         if (ans[0] == 'y' || ans[0] == 'Y')
  78.                             break;
  79.                         if (ans[0] == 'n' || ans[0] == 'N')
  80.                             nogo = 1;
  81.                     }
  82.                     if (nogo)
  83.                         continue;
  84.                 }
  85.                 start = dir->start[1]*0x100 + dir->start[0];
  86.                 zapit(start);
  87.                 dir->name[0] = 0xe5;
  88.                 writedir(entry, dir);
  89.             }
  90.         }
  91.         if (!ismatch) {
  92.             fprintf(stderr, "mdel: File '%s' not found\n", filename);
  93.             continue;
  94.         }
  95.     }
  96.                     /* update the FAT sectors */
  97.     writefat();
  98.     close(fd);
  99.     exit(0);
  100. }
  101.