# 2.11BSD#431 - /usr/src/local/mtools/mren.c

##### Functions

    main              X

##### Variables

    clus_size         X
    dir_entries       X
    dir_len           X
    dir_start         X
    fat_error         X
    fd                X
    mcwd              X

       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

- in line 116

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: 589 |