1: /*
   2:  * Rename an existing MSDOS file
   3:  *
   4:  * Emmet P. Gray			US Army, HQ III Corps & Fort Hood
   5:  * ...!uunet!uiucuxc!fthood!egray	Attn: AFZF-DE-ENV
   6:  * fthood!egray@uxc.cso.uiuc.edu	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: #include "patchlevel.h"
  14: 
  15: int fd = -1;                /* the file descriptor for the device */
  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 clus_size;              /* cluster size (in sectors) */
  20: char *mcwd;             /* the Current Working Directory */
  21: int fat_error;              /* FAT error detected? */
  22: 
  23: main(argc, argv)
  24: int argc;
  25: char *argv[];
  26: {
  27:     int entry, ismatch, nogo, fargn, verbose;
  28:     char filename[13], *newfile, *strncpy(), *unix_name();
  29:     char new[13], ans[10], *temp, *strcpy(), drive, get_drive();
  30:     char *get_path(), *pathname, *get_name(), *fix_mcwd();
  31:     unsigned char *target, *dos_name();
  32:     void exit(), dir_write(), disk_flush(), dir_flush();
  33:     struct directory *dir, *dir_read();
  34: 
  35:     fargn = 1;
  36:     verbose = 0;
  37:     if (argc > 1) {
  38:         if (!strcmp(argv[1], "-v")) {
  39:             fargn = 2;
  40:             verbose = 1;
  41:         }
  42:     }
  43:     if (argc != fargn + 2) {
  44:         fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
  45:         fprintf(stderr, "Usage: %s [-v] sourcefile targetfile\n", argv[0]);
  46:         exit(1);
  47:     }
  48:     mcwd = fix_mcwd();
  49: 
  50:     drive = get_drive(argv[1]);
  51:     if (init(drive, 2)) {
  52:         fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
  53:         exit(1);
  54:     }
  55:     strcpy(filename, get_name(argv[fargn]));
  56:     pathname = get_path(argv[fargn]);
  57:     if (subdir(drive, pathname))
  58:         exit(1);
  59: 
  60:     temp = get_name(argv[fargn + 1]);
  61:     target = dos_name(argv[fargn + 1], verbose);
  62: 
  63:     strcpy(new, unix_name(target, target + 8));
  64:     nogo = 0;
  65:                     /* the name supplied may be altered */
  66:     if (strcmp(temp, new) && verbose) {
  67:         while (!nogo) {
  68:             printf("Do you accept \"%s\" as the new filename (y/n) ? ", new);
  69:             gets(ans);
  70:             if (ans[0] == 'y' || ans[0] == 'Y')
  71:                 break;
  72:             if (ans[0] == 'n' || ans[0] == 'N')
  73:                 nogo = 1;
  74:         }
  75:     }
  76:     if (nogo)
  77:         exit(0);
  78:                     /* see if exists and do it */
  79:     ismatch = 0;
  80:     for (entry = 0; entry < dir_entries; entry++) {
  81:         dir = dir_read(entry);
  82:                     /* if empty */
  83:         if (dir->name[0] == 0x0)
  84:             break;
  85:                     /* if erased */
  86:         if (dir->name[0] == 0xe5)
  87:             continue;
  88:                     /* if volume label */
  89:         if ((dir->attr & 0x08))
  90:             continue;
  91:                     /* you may rename a directory */
  92:         newfile = unix_name(dir->name, dir->ext);
  93: 
  94:                     /* if the new name already exists */
  95:         if (!strcmp(new, newfile)) {
  96:             fprintf(stderr, "%s: File \"%s\" already exists\n", argv[0], new);
  97:             exit(1);
  98:         }
  99:                     /* if the old name exists */
 100:         if (match(newfile, filename)) {
 101:             ismatch = 1;
 102:             break;
 103:         }
 104:     }
 105:     if (!ismatch) {
 106:         fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
 107:         exit(1);
 108:     }
 109:                     /* so go ahead and do it */
 110:     strncpy((char *) dir->name, (char *) target, 8);
 111:     strncpy((char *) dir->ext, (char *) target + 8, 3);
 112:     dir_write(entry, dir);
 113: 
 114:     dir_flush();
 115:     disk_flush();
 116:     close(fd);
 117:     exit(0);
 118: }

Defined functions

main defined in line 23; never used

Defined variables

clus_size defined in line 19; never used
dir_entries defined in line 18; used 1 times
  • in line 80
dir_len defined in line 17; never used
dir_start defined in line 16; never used
fat_error defined in line 21; never used
fd defined in line 15; used 1 times
mcwd defined in line 20; used 1 times
  • in line 48
Last modified: 1992-06-24
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2188
Valid CSS Valid XHTML 1.0 Strict