--- config.c.orig Wed May 8 20:20:04 2002 +++ config.c Wed May 8 19:38:58 2002 @@ -775,3 +775,75 @@ exit(0); } + +void +config_cmdline(int *pargc, char ***pargv) +{ + int argc = *pargc; + char **argv = *pargv; + int sa, da; + char *sc, *dc, *opts; + + char *file = 0 ; + + if(argc == 1) + return; + + sa = da = 1; + + while(sa < argc) { + if(argv[sa][0] == '-') { + opts = argv[sa]; + sc = dc = opts+1; + while(*sc) { + switch(*sc) { + case 'F': + if(argc - sa > 1) + file = argv[++sa] ; + else + usage(); + sc++; + break; + case 'L': + mtools_ignore_short_case = 1; + sc++; + break; + case 'U': + mtools_no_vfat = 1; + sc++; + break; + default: + if(dc < sc) + *dc = *sc; + sc++; + dc++; + break; + } + } + sa++; + if(dc > opts+1) { + *dc = '\0'; + argv[da] = opts; + da++; + } + } + else + argv[da++] = argv[sa++]; + } + + argv[da] = 0; + *pargc = da; + + if(file) { + purge('A', file_nr+1); + prepend(); + memset((char*)(devices+cur_dev), 0, sizeof(*devices)); + devices[cur_dev].drive = 'A'; + devices[cur_dev].name = file; + devices[cur_dev].heads = 2; + devices[cur_dev].sectors = 18; + devices[cur_dev].tracks = 80 ; + devices[cur_dev].misc_flags = MFORMAT_ONLY_FLAG | CREATE_FLAG; + } +} + --- mformat.c.orig Wed May 8 20:17:28 2002 +++ mformat.c Wed May 8 19:41:51 2002 @@ -575,7 +575,7 @@ int hs, hs_set; int arguse_2m = 0; int sectors0=18; /* number of sectors on track 0 */ - int create = 0; + int create1 = 0, create; int rate_0, rate_any; int mangled; int argssize=0; /* sector size */ @@ -732,7 +732,7 @@ break; case 'C': - create = O_CREAT; + create1 = O_CREAT; break; case 'H': @@ -776,7 +776,7 @@ usage(); #ifdef USE_XDF - if(create && format_xdf) { + if(create1 && format_xdf) { fprintf(stderr,"Create and XDF can't be used together\n"); exit(1); } @@ -793,6 +793,11 @@ /* drive letter */ if (dev->drive != drive) continue; + if(dev->misc_flags & CREATE_FLAG) + create = O_CREAT ; + else + create = create1 ; + used_dev = *dev; SET_INT(used_dev.tracks, argtracks); --- mtools.c.orig Wed May 8 20:16:45 2002 +++ mtools.c Sun May 5 21:48:59 2002 @@ -150,6 +150,8 @@ } read_config(); + config_cmdline(&argc, &argv) ; + setup_signal(); for (i = 0; i < NDISPATCH; i++) { if (!strcmp(name,dispatch[i].cmd)) --- mtools.h.orig Wed May 8 20:16:15 2002 +++ mtools.h Wed May 8 19:31:02 2002 @@ -17,6 +17,7 @@ #define VOLD_FLAG 32 #define FLOPPYD_FLAG 64 #define FILTER_FLAG 128 +#define CREATE_FLAG 256 #define IS_SCSI(x) ((x) && ((x)->misc_flags & SCSI_FLAG)) #define IS_PRIVILEGED(x) ((x) && ((x)->misc_flags & PRIV_FLAG)) @@ -155,6 +156,7 @@ extern int batchmode; void read_config(void); +void config_cmdline(int *, char ***) ; extern struct device *devices; extern struct device const_devices[]; extern const int nr_const_devices;