diff --git a/scp.c b/scp.c index f1232419..b74019f1 100644 --- a/scp.c +++ b/scp.c @@ -3700,7 +3700,8 @@ if ((dptr->modifiers) && (dptr->units)) { /* handle unit specific modifiers */ fprint_wrapped (st, buf, 30, gap, extra, 80); } if (((dptr->flags & DEV_DEBUG) || (dptr->debflags)) && - ((DEV_TYPE(dptr) == DEV_DISK) || (DEV_TYPE(dptr) == DEV_TAPE))) { + ((DEV_TYPE(dptr) == DEV_DISK) || (DEV_TYPE(dptr) == DEV_TAPE)) && + (dptr->numunits != 1)) { snprintf (buf, sizeof (buf), "set %s DEBUG", unit_spec); snprintf (extra, sizeof (extra), "Enables debugging for device unit %s", unit_spec); fprint_wrapped (st, buf, 30, gap, extra, 80); @@ -3819,7 +3820,8 @@ if ((dptr->flags & DEV_DEBUG) || (dptr->debflags)) { fprint_wrapped (st, buf, 30, gap, extra, 80); } if (((dptr->flags & DEV_DEBUG) || (dptr->debflags)) && - ((DEV_TYPE(dptr) == DEV_DISK) || (DEV_TYPE(dptr) == DEV_TAPE))) { + ((DEV_TYPE(dptr) == DEV_DISK) || (DEV_TYPE(dptr) == DEV_TAPE)) && + (enabled_units != 1)) { sprintf (buf, "show %s DEBUG", unit_spec); sprintf (extra, "Displays debugging status for device unit %s", unit_spec); fprint_wrapped (st, buf, 30, gap, extra, 80); @@ -3831,6 +3833,8 @@ if ((dptr->modifiers) && (dptr->units)) { /* handle unit specific modifiers */ continue; /* skip device only modifiers */ if ((!mptr->disp) || (!mptr->pstring)) continue; + if (enabled_units == 1) + continue; /* skip when only 1 unit */ fprint_header (st, &found, header); sprintf (buf, "show %s %s%s", unit_spec, mptr->pstring, MODMASK(mptr,MTAB_SHP) ? "=arg" : ""); fprint_wrapped (st, buf, 30, gap, mptr->help, 80); diff --git a/sim_disk.c b/sim_disk.c index e91a025c..30372be1 100644 --- a/sim_disk.c +++ b/sim_disk.c @@ -7215,8 +7215,10 @@ for (i = 0; NULL != (dptr = sim_devices[i]); i++) { uint32 setters = 0; uint32 dumb_autosizers = 0; uint32 smart_autosizers = 0; + uint32 smart_autosizer = 0; uint32 drives = 0; uint32 aliases = 0; + int32 show_type_entry = -1; if (((DEV_TYPE (dptr) != DEV_DISK) && (DEV_TYPE (dptr) != DEV_SCSI)) || (dptr->type_ctx == NULL)) @@ -7241,9 +7243,14 @@ for (i = 0; NULL != (dptr = sim_devices[i]); i++) { (strcasecmp (mtab[j].mstring, "NOAUTOSIZE") == 0)))) { if ((mtab[j].mask & (MTAB_XTD|MTAB_VUN)) == 0) ++dumb_autosizers; /* Autosize set in unit flags */ - else + else { ++smart_autosizers; /* Autosize set by modifier */ + smart_autosizer = j; + } } + if ((mtab[j].disp == &sim_disk_show_drive_type) && + (mtab[j].mask == (MTAB_XTD|MTAB_VUN))) + show_type_entry = j; for (k = 0; drive[k].name != NULL; k++) { if ((mtab[j].mstring == NULL) || (strncasecmp (mtab[j].mstring, drive[k].name, strlen (drive[k].name)))) @@ -7260,12 +7267,6 @@ for (i = 0; NULL != (dptr = sim_devices[i]); i++) { } nmtab = (MTAB *)calloc (2 + ((smart_autosizers == 0) * (sizeof (autos)/sizeof (autos[0]))) + (1 + (sizeof (autos)/sizeof (autos[0]))) * (drives + aliases + (modifiers - (setters + dumb_autosizers))), sizeof (MTAB)); l = 0; - if (smart_autosizers == 0) { - for (k = 0; k < (sizeof (autos)/sizeof (autos[0])); k++) - nmtab[l++] = autos[k]; - for (k = 0; k < (sizeof (autoz)/sizeof (autoz[0])); k++) - nmtab[l++] = autoz[k]; - } for (j = 0; mtab[j].mask != 0; j++) { if ((((mtab[j].pstring != NULL) && ((strcasecmp (mtab[j].pstring, "AUTOSIZE") == 0) || @@ -7287,6 +7288,10 @@ for (i = 0; NULL != (dptr = sim_devices[i]); i++) { (mtab[j].pstring == NULL) || (strcasecmp (mtab[j].pstring, "TYPE") != 0))) { nmtab[l++] = mtab[j]; + if (smart_autosizer == j) { + for (k = 0; k < (sizeof (autoz)/sizeof (autoz[0])); k++) + nmtab[l++] = autoz[k]; + } continue; } } @@ -7343,14 +7348,22 @@ for (i = 0; NULL != (dptr = sim_devices[i]); i++) { } } } - nmtab[l].mask = MTAB_XTD|MTAB_VUN; - nmtab[l].match = k; - nmtab[l].pstring = "TYPE"; - nmtab[l].mstring = NULL; - nmtab[l].valid = NULL; - nmtab[l].disp = &sim_disk_show_drive_type; - nmtab[l].desc = NULL; - nmtab[l].help = "Display device type"; + if (smart_autosizers == 0) { + for (k = 0; k < (sizeof (autos)/sizeof (autos[0])); k++) + nmtab[l++] = autos[k]; + for (k = 0; k < (sizeof (autoz)/sizeof (autoz[0])); k++) + nmtab[l++] = autoz[k]; + } + if (show_type_entry == -1) { + nmtab[l].mask = MTAB_XTD|MTAB_VUN; + nmtab[l].match = k; + nmtab[l].pstring = "TYPE"; + nmtab[l].mstring = NULL; + nmtab[l].valid = NULL; + nmtab[l].disp = &sim_disk_show_drive_type; + nmtab[l].desc = NULL; + nmtab[l].help = "Display device type"; + } /* replace the original modifier table with the revised one */ dptr->modifiers = nmtab; }