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

  1. /*
  2.  * Rename an existing 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.  
  14. int fd;                /* the file descriptor for the floppy */
  15. int dir_start;            /* starting sector for directory */
  16. int dir_len;            /* length of directory (in sectors) */
  17. int dir_entries;        /* number of directory entries */
  18. int dir_chain[25];        /* chain of sectors in directory */
  19. int clus_size;            /* cluster size (in sectors) */
  20. int fat_len;            /* length of FAT table (in sectors) */
  21. int num_clus;            /* number of available clusters */
  22. unsigned char *fatbuf;        /* the File Allocation Table */
  23. char *mcwd;            /* the Current Working Directory */
  24.  
  25. main(argc, argv)
  26. int argc;
  27. char *argv[];
  28. {
  29.     int entry, ismatch, subdir(), nogo, isdir();
  30.     char *filename, *newfile, *fixname(), *strncpy(), *unixname();
  31.     char *getpath(), *pathname, tname[9], text[4], *getname(), *target;
  32.     char *new, ans[10], *temp, *strcpy();
  33.     void exit();
  34.     struct directory *dir, *search();
  35.  
  36.     if (init(2)) {
  37.         fprintf(stderr, "mren: Cannot initialize diskette\n");
  38.         exit(1);
  39.     }
  40.     if (argc != 3) {
  41.         fprintf(stderr, "Usage: mren <MSDOS source file> <MSDOS target file>\n");
  42.         exit(1);
  43.     }
  44.     filename = getname(argv[1]);
  45.     pathname = getpath(argv[1]);
  46.     if (subdir(pathname))
  47.         exit(1);
  48.  
  49.     temp = getname(argv[2]);
  50.     target = fixname(argv[2]);
  51.     if (isdir(filename) && strcmp(target+8, "   ")) {
  52.         strcpy(target+8, "   ");
  53.         fprintf(stderr, "mren: Directory names may not have extentions\n");
  54.     }
  55.     new = unixname(target, target+8);
  56.     nogo = 0;
  57.                     /* the name supplied may be altered */
  58.     if (strcmp(temp, new)) {
  59.         while (!nogo) {
  60.             printf("Do you accept '%s' as the new file name (y/n) ? ", new);
  61.             gets(ans);
  62.             if (ans[0] == 'y' || ans[0] == 'Y')
  63.                 break;
  64.             if (ans[0] == 'n' || ans[0] == 'N')
  65.                 nogo = 1;
  66.         }
  67.     }
  68.     if (nogo)
  69.         exit(0);
  70.                     /* see if exists and do it */
  71.     ismatch = 0;
  72.     for (entry=0; entry<dir_entries; entry++) {
  73.         dir = search(entry);
  74.                     /* if empty */
  75.         if (dir->name[0] == NULL)
  76.             break;
  77.                     /* if erased */
  78.         if (dir->name[0] == 0xe5)
  79.             continue;
  80.                     /* you may rename a directory */
  81.         strncpy(tname, dir->name, 8);
  82.         strncpy(text, dir->ext, 3);
  83.         newfile = unixname(tname, text);
  84.         if (!strcmp(filename, newfile)) {
  85.             ismatch = 1;
  86.             strncpy(dir->name, target, 8);
  87.             strncpy(dir->ext, target+8, 3);
  88.             writedir(entry, dir);
  89.         }
  90.     }
  91.     if (!ismatch) {
  92.         fprintf(stderr, "mren: File '%s' not found\n", filename);
  93.         exit(1);
  94.     }
  95.     close(fd);
  96.     exit(0);
  97. }
  98.