From 2d61e526deaa13a835a1307dc6fc701162495932 Mon Sep 17 00:00:00 2001 From: Fredrik Noring Date: Mon, 5 Aug 2019 10:50:47 +0200 Subject: [PATCH] decoder/sidplay: Fix date field to have year but not company or author Field 2 is called , formerly used as [1][2]. It is formatted , where may be , , or , for example "1987", "199?", "19??" or "1985-87". The may be for example Rob Hubbard. A full field may be for example "1987 Rob Hubbard". This change splits the field at the first , to retain the part. The 51823 SID files in High Voltage SID Collection (HVSC) version 71 have the following distribution of dates: 333 19?? 11 1990-92 6 1995-99 2 2006-08 827 198? 88 1990-93 2140 1996 530 2007 32 1982 69 1990-94 9 1996-97 15 2007-08 1 1982-83 49 1990-95 2 1996-98 2 2007-09 255 1983 3467 1991 5 1996-99 1 2007-10 677 1984 75 1991-92 1840 1997 430 2008 775 1985 65 1991-93 4 1997-98 23 2008-09 3 1985-86 10 1991-94 1276 1998 1 2008-12 10 1985-87 35 1991-97 4 1998-99 631 2009 943 1986 3320 1992 865 1999 1 2009-10 12 1986-87 26 1992-93 24 200? 645 2010 5 1986-89 59 1992-94 590 2000 1 2010-12 2083 1987 1 1992-96 4 2000-01 538 2011 31 1987-88 2996 1993 727 2001 1 2011-12 44 1987-89 42 1993-94 875 2002 651 2012 2510 1988 12 1993-95 2 2002-04 811 2013 129 1988-89 2 1993-97 844 2003 790 2014 91 1988-90 2737 1994 3 2003-05 740 2015 58 1988-91 16 1994-95 842 2004 792 2016 3466 1989 20 1994-96 2 2004-05 775 2017 95 1989-90 17 1994-97 707 2005 638 2018 150 1989-91 2271 1995 1 2005-06 284 2019 1077 199? 2 1995-96 2 2005-07 2834 1990 4 1995-97 785 2006 119 1990-91 2 1995-98 6 2006-07 References: [1] https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt [2] https://hvsc.c64.org/info --- NEWS | 1 + src/decoder/plugins/SidplayDecoderPlugin.cxx | 26 +++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 1ca3a3123..acc735d2e 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ ver 0.21.14 (not yet released) * decoder - sidplay: show track durations in database - sidplay: convert tag values from Windows-1252 charset + - sidplay: strip text from "Date" tag ver 0.21.13 (2019/08/06) * input diff --git a/src/decoder/plugins/SidplayDecoderPlugin.cxx b/src/decoder/plugins/SidplayDecoderPlugin.cxx index 619ef38f6..8a22e0817 100644 --- a/src/decoder/plugins/SidplayDecoderPlugin.cxx +++ b/src/decoder/plugins/SidplayDecoderPlugin.cxx @@ -477,6 +477,30 @@ GetInfoString(const SidTuneInfo &info, unsigned i) noexcept return Windows1252ToUTF8(s); } +gcc_pure +static AllocatedString +GetDateString(const SidTuneInfo &info) noexcept +{ + /* + * Field 2 is called , previously used as . + * It is formatted , + * where may be , , or , for + * example "1987", "199?", "19??" or "1985-87". The may be for example Rob Hubbard. A full field + * may be for example "1987 Rob Hubbard". + */ + AllocatedString release = GetInfoString(info, 2); + + /* Keep the part only for the date. */ + for (size_t i = 0; release[i] != AllocatedString::SENTINEL; i++) + if (std::isspace(release[i])) { + release[i] = AllocatedString::SENTINEL; + break; + } + + return release; +} + static void ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks, TagHandler &handler) noexcept @@ -498,7 +522,7 @@ ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks, handler.OnTag(TAG_ARTIST, artist.c_str()); /* date */ - const auto date = GetInfoString(info, 2); + const auto date = GetDateString(info); if (!date.empty()) handler.OnTag(TAG_DATE, date.c_str());