1
0
mirror of https://github.com/simh/simh.git synced 2026-01-26 20:12:23 +00:00

DISK: Cleanup generated MTAB entries for best ordering and single unit support

Much better HELP <dev> SET and HELP <dev> SHOW results.
This commit is contained in:
Mark Pizzolato
2023-06-20 18:55:22 -10:00
parent 9392ce3974
commit 2d2b8baa4f
2 changed files with 34 additions and 17 deletions

View File

@@ -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;
}