From: Toni Wilen Date: Mon, 5 Jan 2015 13:02:44 +0000 (+0200) Subject: Include CD volume id (label), if available, in status line CD insert message. X-Git-Tag: 3100~143 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=6dc08bf28d99aeb80036dbb645a07e459dbfc4a9;p=francis%2Fwinuae.git Include CD volume id (label), if available, in status line CD insert message. --- diff --git a/blkdev.cpp b/blkdev.cpp index 9df08e48..d5d3315a 100644 --- a/blkdev.cpp +++ b/blkdev.cpp @@ -48,6 +48,7 @@ struct blkdevstate int wasopen; bool mediawaschanged; struct scsi_data_tape *tape; + bool showstatusline; }; struct blkdevstate state[MAX_TOTAL_SCSI_DEVICES]; @@ -404,6 +405,17 @@ fallback: return unitnum; } +static void cd_statusline_label(int unitnum) +{ + if (currprefs.cdslots[unitnum].name[0]) { + struct device_info di; + if (sys_command_info(unitnum, &di, 0) && di.volume_id[0]) + statusline_add_message(_T("CD%d: [%s] %s"), unitnum, di.volume_id, currprefs.cdslots[unitnum].name); + else + statusline_add_message(_T("CD%d: %s"), unitnum, currprefs.cdslots[unitnum].name); + } +} + int get_standard_cd_unit (cd_standard_unit csu) { int unitnum = get_standard_cd_unit2 (&currprefs, csu); @@ -417,6 +429,7 @@ int get_standard_cd_unit (cd_standard_unit csu) if (currprefs.cdslots[unitnum].delayed) { st->delayed = PRE_INSERT_DELAY; } + st->showstatusline = true; return unitnum; } @@ -573,6 +586,11 @@ static void check_changes (int unitnum) if (st->device_func == NULL) return; + if (st->showstatusline) { + cd_statusline_label(unitnum); + st->showstatusline = 0; + } + if (st->delayed) { st->delayed--; if (st->delayed == 0) @@ -636,8 +654,6 @@ static void check_changes (int unitnum) currprefs.cdslots[unitnum].inuse = changed_prefs.cdslots[unitnum].inuse = st->cdimagefileinuse; st->newimagefile[0] = 0; write_log (_T("CD: delayed insert '%s' (open=%d,unit=%d)\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T(""), st->wasopen ? 1 : 0, unitnum); - if (currprefs.cdslots[unitnum].name[0]) - statusline_add_message(_T("CD%d: %s"), unitnum, currprefs.cdslots[unitnum].name); device_func_init (0); if (st->wasopen) { if (!st->device_func->opendev (unitnum, currprefs.cdslots[unitnum].name, 0)) { @@ -660,13 +676,14 @@ static void check_changes (int unitnum) filesys_do_disk_change (unitnum, 1); } st->mediawaschanged = true; -#ifdef RETROPLATFORM - rp_cd_image_change (unitnum, currprefs.cdslots[unitnum].name); -#endif + st->showstatusline = true; if (gotsem) { freesem (unitnum); gotsem = false; } +#ifdef RETROPLATFORM + rp_cd_image_change (unitnum, currprefs.cdslots[unitnum].name); +#endif set_config_changed (); @@ -985,7 +1002,27 @@ struct device_info *sys_command_info_session (int unitnum, struct device_info *d } struct device_info *sys_command_info (int unitnum, struct device_info *di, int quick) { - return sys_command_info_session (unitnum, di, quick, -1); + struct device_info *dix; + + dix = sys_command_info_session (unitnum, di, quick, -1); + if (dix && dix->media_inserted && !quick) { + TCHAR *name = NULL; + uae_u8 buf[2048]; + if (sys_command_cd_read(unitnum, buf, 16, 1)) { + if ((buf[0] == 1 || buf[0] == 2) && !memcmp(buf + 1, "CD001", 5)) { + TCHAR *p; + au_copy(dix->volume_id, 32, (uae_char*)buf + 40); + au_copy(dix->system_id, 32, (uae_char*)buf + 8); + p = dix->volume_id + _tcslen(dix->volume_id) - 1; + while (p > dix->volume_id && *p == ' ') + *p-- = 0; + p = dix->system_id + _tcslen(dix->system_id) - 1; + while (p > dix->system_id && *p == ' ') + *p-- = 0; + } + } + } + return dix; } #define MODE_SELECT_6 0x15