X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/cb4fb1ed02b59f798368a76f2596d7c24125e68a..3f88ef88f347c2c2d7a77db9faab6652dd9c9042:/avr/cmd_attach.c?ds=sidebyside diff --git a/avr/cmd_attach.c b/avr/cmd_attach.c index e1a3b2c..e9b5ccd 100644 --- a/avr/cmd_attach.c +++ b/avr/cmd_attach.c @@ -5,7 +5,7 @@ */ /* - * attach chanels to devices + * attach channels to devices */ #include "common.h" @@ -15,11 +15,6 @@ #include "command.h" #include "z180-serv.h" #include "getopt-min.h" -//#include "print-utils.h" -//#include "con-utils.h" -//#include "timer.h" -//#include "z80-if.h" -//#include "debug.h" static const FLASH char * const FLASH rc_messages[] = { @@ -40,10 +35,10 @@ void printerror(int rc, uint8_t unit, char *fn) if (rc < 0 || (unsigned) rc >= ARRAY_SIZE(rc_messages)) rc = 1; -#if GCC_BUG_61443 * 0 - printf_P(PSTR("rc=%u FR_"), rc); - my_puts_P(rc_names[rc]); - my_puts_P(PSTR("\n")); +#if GCC_BUG_61443 + printf_P(PSTR("Attachment of '%s' to dsk%d failed: "), fn, unit); + my_puts_P(rc_messages[rc]); + my_puts_P(PSTR("!\n")); #else printf_P(PSTR("Attachment of '%s' to dsk%d failed: %S!\n"), fn, unit, rc_messages[rc]); @@ -68,31 +63,34 @@ command_ret_t do_attach(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ uint8_t unit; char *filename = NULL; bool detach = false; + bool detach_all = false; drv_opt_t options = 0; int res; (void) cmdtp; (void) flag; - if (argv[0][0] == 'd') + if (argv[0][0] == 'd') { /* we are called as 'detach' */ detach = true; - - if (argc == 1) { + } else if (argc == 1) { /* no arguments */ drv_list(); return CMD_RET_SUCCESS; } /* reset getopt() */ - optind = 1; + optind = 0; int opt; - while ((opt = getopt(argc, argv, PSTR("drwo:"))) != -1) { + while ((opt = getopt(argc, argv, PSTR("darwo:"))) != -1) { switch (opt) { case 'd': detach = true; break; + case 'a': + detach_all = true; + break; case 'r': options |= DRV_OPT_RO; break; @@ -128,21 +126,26 @@ command_ret_t do_attach(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ /* remaining arguments */ argc -= optind; - if ( !((detach && argc == 1) || - ((options & DRV_OPT_REATTATCH) && argc == 1) || - argc == 2) ) + if ( !( (argc == 0 && detach && detach_all) || + (argc == 1 && detach) || + (argc == 1 && (options & DRV_OPT_REATTATCH)) || + argc == 2) ) return CMD_RET_USAGE; - if ((strlen(argv[optind]) != 4) || + if (argc > 0 && ((strlen(argv[optind]) != 4) || strncmp_P(argv[optind], PSTR("dsk"), 3) || - (unit = argv[optind][3] - '0') >= CONFIG_CPM_MAX_DRIVE) { + (unit = argv[optind][3] - '0') >= CONFIG_CPM_MAX_DRIVE)) { printf_P(PSTR("Unknown device: '%s'\n"), argv[optind]); return CMD_RET_FAILURE; } if (detach) { - res = drv_detach(unit); + if (detach_all) + for (uint8_t i = 0; i < CONFIG_CPM_MAX_DRIVE; i++) + drv_detach(i); + else + drv_detach(unit); return CMD_RET_SUCCESS; }