#Change log for wxEDID

NOTE: All data groups are operating on local data buffers.
      Reparse() restores the loaded EDID state, reverting all the changes - unless
      AssembleEDID() or Save/Export is executed. From this point Reparse() restores the
      saved/assembled state.

TODO: VSD: dynamic data layout depends on IEEE-OUI code - currently only 00-0C-03 is supported.
      (partially fixed).

TODO: Constructors for changing block type: in particular, some DBC blocks require to change more
      than one value at once to get a valid block of different type.
      (partially done).

TODO: DataGrid: Add option to hide/grey-out reserved fields.

TODO: Validation: Value ranges, reserved fields, field relations
      TODO: add handler opcode: OP_VALIDATE.
      TODO: add rule descriptors for fields.

TODO: HDRD: dynamic HMTD names
TODO: Handle copying of sub-grps with T_NO_COPY flag (HDRD::HMTD, SLDB::SPKLD, ..):
      deferred call to init(), which needs access to parent grp data - i.e. on Paste().

TODO: Support for HDMI Forum blocks:
      TODO: DBC_ET_HEOVR : HDMI Forum EDID Extension Override Data Block
      TODO: DBC_ET_HSCDB : HDMI Forum Sink Capability Data Block


____ BUGS:
____


2024.12.01
   <released v0.0.32>

2024.11.30
   - Fixed: UNK-DAT sub-grp: added type flag T_NO_MOVE: can't be moved.
   - Fixed: EDID_cl::STI_DBN(): use std name from VS if found - it can contain RB flag,
            which is not encoded directly in the structure.
   - Cleanup: edi_grp_cl::init_fields(): removed unused arg 'orflags'
   - Change: H-spec: SLDB::SPKD X/Y/Zmax distances have defined default values.
   - Change: H-spec: SLDB::DSPC DisplayX/Y/Z fields have defined default values.
   - Added: SLDB::SPKLD: value selector for Speaker_ID.
   - Added: EDID_cl::RMCD_NormV(): new handler to support normalized distance values in
            SLDB::DSPC and SLDB::SPKLD
   - Added: SLDB::SPKLD support for dynamic group name, based on spk ID, chn number and
            X/Y/Z coordinates

2024.11.27
   - Fixed: (BUG::regression) SVD: No dynamic name generated for VIC==0 (reserved).
   - Fixed: (BUG) edi_grp_cl::base_clone(): missing call to AssembleGroup(): changes made in
            sub-groups were not included in cloned group.
   - Fixed: wxEDID_Frame::evt_blktr_paste(): keep expanded state of target group.
   - Adedd: EDID_cl::AssembleEDID(): automatically inject missing descriptors of type 0x01 (VOID)
            in base EDID block, if ignoring of EDID errors is enabled.
   - Added: StatusBar: display total group size in bytes.

2024.11.25
   - Fixed: (BUG::wxWidgets::GTK) missing icons in wxMessageBox():
            using custom wxDialog: dlg::MessageBox()
   - Fixed: Event logic race: changing BlkTree group selection whith DataGrid selection active:
            description displayed in Info panel comes from field of newly generated grid insted from
            newly slected group.
   - Fixed: Some errors logged twice for Reparse().
   - Cleanup: Removed code for evt nesting prevention - no longer needed.
   - Cleanup: wxEDID_Frame::evt_dgrid_write(): removed Show/HideCellEditControl() - no longer needed.
   - Change: ADB: ACE_TC field moved to pos. 3, rigth after AFC row.
   - Change: Removed edi_grp_cl::subg_id: use type_id.subg_id >>
            root grps need to have this value set correctly, to support insert_into().
   - Change: EDID_base.cpp: main funtions and common field handlers moved to EDID_main.cpp

2024.11.24
   - Fixed: (BUG): UpdateDataGrid(): special case: assertion failure: (row_idx<row_cnt) if last row
            has F_FR flag set AND ForcedGrpRefresh() causes reducing numer of fields -> the index of
            selected row becomes out of range -> SelectRow() fails.
   - Fixed: (BUG::regression): RMCD: payload data interpreted as UNK-DAT.
   - Change: RMCD: removed DHDR sub-grp, using AHF now.
   - Change: SAB3D: ACAT fields moved to top of the field list.
   - Cleanup: HDRD: EDID_cl::HDRD_mtd_type() removed, using general-purpose EDID_cl::Word16() handler.
   - Change: H-spec: ADB: AFC=15, ACE=4,5,6, SAD byte2.bit0 is now "SysH_22_2" (reserved in G)
   - Change: H-spec: ADB: AFC=15, ACE=11, SAD byte0.bits0-2 field is now "MPEG-H 3D Audio Level" (reserved in G)
   - Change: H-spec: ADB: AFC=15, ACE=11, SAD byte2.bit0 is now "LCP" (reserved in G)
   - Change: H-spec: ADB: AFC=15, ACE=11, SAD byte2.bit1 is now "BP" (reserved in G)
   - Added: ADB::SAD: ACE_TC value selector.
   - Added: ADB::SAD: support for dynamic group names, based on SAD.ACE_TC code (if AFC==15)

2024.11.23
   - Fixed: (BUG::regression) base_DBC_Init_RootGrp() insert UNK-DAT group if block length is too short
            to show AHF fields.
   - Fixed: (BUG) BlkTreeChangeGrpType()->EDID.ParseAltDtor() needs grp offset, because instance data is in
            local data buffer -> for UNK type, the error message contains invalid group offset.
   - Change: MRL-CVT: CVT version byte split into major:minor bitfields.
   - Change: H-spec: SAB: byte0.bit6 is now reserved, was RLC/RRC: Rear Left/Right of Center
   - Change: H-spec: SAB: byte2.bit3 is now reserved, was TpLS/TpRS Top Left/Right Surround.
            However, in HADB this bit is used for LSd/RSd: Left/Right Surround direct
   - Added: H-spec: Support for HADB: HDMI Audio Data Block.

2024.11.21
   - Fixed: (BUG::old) ParseEDID_CEA() incorrect calculation of num_dtd: std says it's a total number
            of native DTDs, including Block0, but only DTDs in the CEA block were counted.
   - Fixed: (BUG::old) value of BED.num_extblk is now properly handled:
            num_extblk==0: only base EDID is saved, regardless of whether extension was loaded or not.
            num_extblk==1: wxedid reports error on Save/Export if the extension block is not present.
            num_extblk>1: error: only 1 extension block is currently supported (CTA-861).
   - Fixed: (BUG::wxWidgets::undocumented) ImportEDID_hex(): wxFileDialog: wilcard selector is showing empty
            string if path contains file extension that doesn't match the wilcard.
   - Fixed: ParseEDID_CEA(): added checking of 18-byte desc. type @ dtd_offs: must be a DTD.
            Currently it is possible to change the DTD into alt. desc. type by setting the PixClk to 0.
   - Change: ExportEDID_hex(), ImportEDID_hex(): default file name extension is '*.hex', so it is different
            from EDID structures saved as text.

2024.11.18
   - Fixed: T10VTDB, ADB, VDB: missing initialization of edi_grp_cl::subg_id: doInsert() did not
            set type_id for inserted groups.
   - Fixed: UNK-DAT sub-grps can only be deleted - or re-interpreted when group type or length is changed.
   - Fixed: GroupAr_cl::base_Paste() pasted group must inherit T_P_HOLDER flag (currently only for STI)
   - Added: blktree_cl::evt_mouse_leftup(): sending wxEVT_TREE_SEL_CHANGED evt -> allows to re-select
            currently selected item -> display group decription again.
   - Added: blktree_cl::evt_Lmouse_dclick(): sending WXK_RETURN key events for selected tree items.
   - Added: wxEDID_Frame::evt_blktr_key() handling of WXK_RETURN key events: switch to DTD constructor
            if selected item is of type DTD or T7VTDB.

2024.11.17
   - Change: Added -llto flag to release build flags (link-time optimization)
   - Change: MRL: variable data layout, depending on byte10 value (modes 0x00, 0x01, 0x02, 0x04)
   - Added:  MRL: support for CVT support information data layout (mode 0x04).
   - Change: MRL: EDID_cl::MRL_MaxPixClk() takes additional PixClk precision bits into account
             if CVT support information is available (mode 0x04).
   - Change: txtd_cl: dynamic blk name: display <invalid_str> for invalid data, which otherwise could
            trigger changing of tree item spacing.
   - Added: txtd_cl: "hex_text" field: hexadecimal representation of the text string.

2024.11.16
   - Change: UTX, MSN, MND: single txtd_cl class: switching ID, text field name and
            description depending on descriptor type.
   - Change: EDID: UNK descriptor handles type 0x10 as "VOID: Unused Data"
   - Added: EDID descriptor: DCM: Display Color Management (type 0xF9).
   - Added: EDID descriptor: CT3: CVT 3-Byte Timing Codes (type 0xF8).
   - Added: EDID descriptor: ET3: Estabilished Timings 3 (type 0xF7)
   - Added: VESA STD2, CVT3 non-std codes: "(!std)" appended to dynamic group name.

2024.11.13
   - Fixed: (BUG::old) wxEDID_Frame::BlkTreeChangeGrpType(), BlkTreeUpdateGrp():
            assertion failure (invalid idx) when changing type of last group in the GroupAr_cl.
   - Update: grpar: changed rules for operating groups/sub-groups:
            - base EDID & AST: STI can be moved/copied/pasted,
            - added support for new type_id format & flags.
   - Added: Support for LE<->BE byte swapping, depending on platform endianness:
            EDID_cl::Word16(), BitF16Val(), MfcId(), ProdSN(), DTD_PixClk(), ParseEDID_Base(hdr_magic).


2024.11.09
   - Added: DTD_constructor: support for T7VTDB
   - Change: EDID_class.cpp split into EDID_base.cpp and EDID_dsc.cpp
   - Change: AST: Additional Standard Timings (type 0xFA) uses STI sub-groups, what allows
            to show dynamic timing names and use value selector menu.
   - Change: Base_EDID::Alt Descriptors are now sharing header fields: using edi_grp_cl::init_fields()
            in append mode.
   - Change: T8VTDB: TSC=1 layout: using STI sub-groups, exchangeable with AST descriptor.
   - Change: Files generated by rcd_autogen are removed by "distclean" target, and not
             by "clean-local". This allows to re-build the package after 'make clean'
             without invoking the rcd_autogen again.

2024.11.08
   - Change: edi_grp_cl::type_id type changed to gtid_t -> alternative way for referencing type flags.
   - Change: (Paste/Insert): always create copy of source group -> no need to handle special cases.
   - Added: EDID_cl::ParseEDID_Base(), ParseEDID_CEA() logging details of the parsing process.
   - Added: EDID_cl::AssembleEDID(): logging details of the assembling process.

2024.11.05
   - Fixed: (BUG) BlkTreeChangeGrpType(): missing initialization of parent array: grp_new->setParentAr()
   - Added: ADB::SAD: support for dynamic group names, based on SAD.AFC code.
   - Added: T8VTDB: dynamic type ID, based on TSC bit value: verifying layout type for Insert operation.
   - Added: T8VTDB: dynamic VTC sub-groups base names: T8VTC_T0/STI, depending on TSC bit value.
   - Added: T10VTDB: dynamic type ID, based on T10_M bit value: verifying layout type for Insert operation.
   - Added: T10VTDB: dynamic VTD sub-groups base names: T10VTD_M0/T10VTD_M1, depending on T10_M value.
   - Added: H-spec: Support for T10VTDB.

2024.11.03
   - Fixed: (BUG) removed invalid "code page 437" references from field descriptions.
   - Fixed: (BUG::old) EDID_cl::FldPadStr()-> wxString::FromAscii(): assertion failure
            if UTX, MND or MSN descriptors contain non-ascii values.
            Now using wxString::From8BitData() / wxString::To8BitData(), what allows to handle
            invalid EDID data.
   - Change: CEA-DBC IDs shifted 1 bit left to make space for new Alternative Descriptors IDs.
   - Change: DTD can be transformed into alternative descriptor type by setting PixClk to ZERO.
   - Change: Alternative descriptors can be transformed to DTD by changing "zero_hdr" field
            to a non-zero value.
   - Added: EDID_cl::ALT_DType(): dedicated handler for alt. desc. type field: triggers
            reparsing of descriptor data.
   - Added: Support for changing descriptor types in base EDID block.

2024.11.02
   - Fixed: (BUG::old::mislooked): wxEDID_Frame::WriteField(): invalid access to freed data field
            buffer after DBC Tag or ETag values are changed. This could trigger repersing
            of invalid data from deleted block.
   - Fixed: (BUG::LEAK::old): wxEDID_Frame::BlkTreeDelGrp(), wxEDID_Frame::evt_blktr_copy():
            deletion of sub-groups not performed -> LEAK.
   - Change: Added DMT video codes table: vid_fmt.cpp::dmt_table[]. The table is used for generating
            value selectors for DMT-ID, STD2 and CVT3 codes.
   - Cleanup: Removed redundand checking for NULL instance ponter in some field handlers.
   - Added: H-spec: Support for T8VTDB.

2024.10.27
   - Added: dbc_root_dsc_t.fields, dbc_root_dsc_t.fcount and dbc_root_dsc_t.ahf_sz: support for additional
            fields in root group (besides the DBC header), needed for T8VTDB and T10VTDB
   - Change: edi_grp_cl::base_DBC_Init_RootGrp(), SubGrpAr_cl::CalcDataSZ(), GroupAr_cl::base_CalcDataSZ():
            added support for additional header fields in dbc_root_dsc_t.

2024.10.26
   - Fixed: (BUG::old::mislooked): AST: Additional Standard Timings descriptor: incorrect
            description for desc_type field.
   - Fixed: STI, AST: 'pix_ratio' field should be 'asp_ratio': image aspect ratio.
   - Fixed: (BUG::regression): SaveRep(): TagCode 7 and T7VTDB ETag descriptions not printed.
   - Change: EDID_cl::getVidDesc() -> EDID_cl::getValDesc(): general-purpose fn.
   - Added: vmap_ent_t.flags: additional flags for modifying value selector behaviour.
            Currently used only with F_HEX for VESA DMT 2 byte codes
   - Added: STI: 'DMT_2' field which allows to select standardised VESA video code using
            value selector menu.
   - Change: The DMT codes values are exceeding the range allowed for wxMenuItem ID (0x0..0x7FFF),
            so a new method for encoding menu item values is used:
            If (new) F_VSVM s set in edi_field_t.flags, the the value is stored from vmap_ent_t.val
            instead of item ID.
   - Added: H-spec: Support for T7VTDB.

2024.10.13
   - Change: Added vmap.cpp: global array of value maps and selector menus.
             Now the vmaps are referenced by edi_field_t.vmap_idx and can be shared among many fields.
             Value selector menus are created only on first use:
             wxEDID_Frame::evt_dgrid_vsel()->vmap_GetSelector()
             Removed: edi_dynfld_t.selector and edi_grp_cl.create_selector()

2024.10.12
   - Fixed: SaveEDID(): update BlockTree root node label and config.last_used_fname.
   - Change: edi_grp_cl::base_DBC_Init_FlatGrp() adopted to work as init() for T7VTDB.
   - Change: EDID_cl::ParseDBC_TAG(): create unknown type data blocks also for reserved ETags.
             This allows to freely change ETags and generates correct error messages.

2024.10.08
   - Added: T7VTDB: value selectors for 3D mode and aspect ratio.
   - Added: T7VTDB: getGrpName(): support for dynamic block name

2024.10.03
   - Fixed: (BUG::typo::old): mrl_cl::Clone(): base_clone() invoked with new dtd_cl, should be mrl_cl.
   - Fixed: EDID_cl::DTD_PixClk() now uses rdWord16_LE() and wrWord16_LE(), what allows to correctly
            handle unaligned 16bit fields in CEA block. Besides that, those functions allow to operate
            unaligned fields in T7VTDB.
   - Added: EDID_cl::T7VTB_PixClk() and T7VTB_W15_LE() dedicated field handlers for T7VTDB.
   - Added: EDID_cl::Word16(): unaligned u16_t opperations, LE.

2024.09.28
   - Started: updates for CTA-861-H
   - Added: New Extended Tag Codes definitions:
            DBC_ET_T7VTB : DisplayID Type VII Video Timing Data Block,
            DBC_ET_T8VTB : DisplayID Type VIII Video Timing Data Block
            DBC_ET_T10VTB: DisplayID Type X Video Timing Data Block
            Not in CTA-861-H spec:
            DBC_ET_HEOVR : HDMI Forum EDID Extension Override Data Block
            DBC_ET_HSCDB : HDMI Forum Sink Capability Data Block
            DBC_ET_HADB  : HDMI Audio Data Block
   - Change: vmap_t structures replaced with const std::map. This was necessary because new ETags have
            high values like "DBC_ET_HEOVR" == 120, so the old vmap_t would need to contain a lot of
            NULL entries.

2024.06.30
   - Update: rcode v3.2

2024.03.16
   <released v0.0.31>

2024.03.15
   - Fixed: (BUG) wxEDID_Frame::evt_ntbook_page() was invoked during frame construction with uninitialized
            wxEDID_Frame::flags & wxEDID_Frame::edigrp_sel, what could lead to a segfault.

2024.01.08
   <released v0.0.30>

2024.01.06
   - Added: Support for Dark Mode in Block Data grid.
            NOTE: wxGrid does not fully support dynamic theme switching in wxWidgets v3.2.x,
                  so the application has to be restarted to use new theme.
   - Fixed: DTD panel: fixed alignment of "X11 mode line".

2024.01.05
   - Fixed: Option "Assemble EDID" now updates also the CHD::DTD_offset field in Block Data grid.
            NOTE: The value is computed by EDID_cl::CEA_Set_DTD_Offset().
   - Fixed: wxEDID_Frame::AssembleEDID_main(): the EDID.BASE.BED could be refreshed twice if the CEA
            extension is not present.

2024.01.04
   - Fixed: Auto-select the BED block also after "Reparse EDID buffer" is executed:
            wxEDID_Frame::Reparse()->AutoSelectBED()
   - Fixed: mrl_cl::fields: misleading field description: GTF J, GTF C:
            "xxx value, multiplied by 2: 0...255 ->  0...127.5"
            changed to: "xxx value, multiplied by 2: 0...127.5 -> 0...255"
   - Fixed: MRL::resvd field should have the F_HEX flag.
   - Fixed: BED: fields ProdYr and ProdWk should not have the F_DN flag set.
   - Fixed: BED: ProdWk: added information that week==0 means that the field is not used.
   - Change: F_NI "NI" flag is no longer displayed in BlockData::"Flags" column.
   - Update: rcode v3.0: structure changed: RCD_UNIT_MAX=65535, RCD_LINE_MAX=16383

2023.05.22
   <released v0.0.29>
   - Fixed: (BUG::regression) EDID_cl::getVidDesc(): missing space between aspect ratio and screen resolution:
            incorrect SVD description in text output mode (Save_As_Text).
   - Fixed: Using global strings where possible: cheaper, faster.
            xxx::getGrpName() -> global EDID_cl::gp_name
            wxEDID_Frame::SaveRep_SubGrps(), WriteField(), GetFullGroupName() -> wxEDID_Frame::sval
            EDID_cl::getStrUint() -> EDID_cl::tmps2
   - Change: BED: dynamic name: displays only MFC and product ID (removed prod. year and week)
   - Change: VDB::SVD: append "[Native]" if native resolution flag is set.

2023.05.21
   <released v0.0.28>

2023.05.19
   - Fixed: STI: removed unused F_FR flag, removed useless code for setting NU flag.
   - Added: STI: use screen resolution as dynamic block name or set "not used" if both bytes are 0x1.
   - Added: BED: display MFC code, year, week, prod ID as dynamic block name.
   - Added: VID: display input type as dynamic block name.
   - Added: BDD: display image size as dynamic block name.
   - Fixed: EDID_cl::FldPadStr(OP_READ): return string without padding bytes.
   - Added: MND: display monitor name as dynamic block name.

2023.05.18
   - Added: edi_grp_cl::getGrpName(): support for dynamic block names.
   - Added: BlkTreeSwitchDynamicNames(): update block names from evt_dyn_blk_names handler.
   - Added: config option: blk_dynamic_names.
   - Added: DTD and VDB::SVD: use screen resolution as dynamic block name.

2023.03.08
   - Cleanup: EDID_cl::getValUnitName(), getValTypeName(), getValFlagsAsString():
            removed useless error checking.
   - Update: rcd_autogen v2.9: Fixed: misuse of VMSG TLS pointer, race possible.
            No influence on wxEDID behaviour, just update.

2023.03.07
   - Added: Automatic selection of BED block after the EDID file is loaded/imported.

2022.12.20
    - Fixed: DTD panel: sct_vsoffs, sct_vswidth controls: value range should be 0..63, not 0..1023
    - Fixed: DTD panel: sct_pixclk control: value range should be 0..65535 (655.35MHz), not 0..655350
    - Fixed: wxWidgets v3.2 : wxEDID_App::CmdLineArgs() "wxPATH_NORM_ALL" is deprecated, now the fn uses:
             (wxPATH_NORM_DOTS|wxPATH_NORM_TILDE|wxPATH_NORM_ABSOLUTE).

2022.11.12
    - Change: Default colors for all controls: allows to work with different window themes:
              wxWidgets 3.0.x: not working for wxAUI windows, wxTreeCtrl and wxGrid
              wxWidgets 3.2.x: not working for wxGrid

2022.11.10
   - Update: rcd_autogen v2.7 :: fixed: malformed licensing info in generated header files

2022.04.02
   - Fixed: (BUG::regression::old) rcd_autoconf.m4: changing rcd_autogen run mode at configure time didn't work.

2022.02.20
   <released v0.0.27>

2022.02.19
   - Cleanup: Removed most of calls to wxT macro - except those generated by wxSmith.
   - Change: ExportEDID_hex(): do not append wxEDID version and the source file name at the end of output file:
            this causes errors when the file needs to be imported back (unless ignoring errors is enabled).

2022.02.14
   - Change: VFPD: Video Format Preference Data Block is now root group for array of SVRs
   - Change: CEA-EXT::VFPD:SVR: added vmap: CEA_vidm_map, same as for SVD: this allows to show meaning of SVR values
            when the EDID structure is saved as text.
   - Added: wxEDID_Frame::SaveRep_SubGrps(): decoding of VFPD:SVR values.

2022.02.13
   - Fixed: The checksum values shown in BlockData grid for EDID.BASE.BED or EDID.CEA.CHD were not refreshed after
            AssembleEDID/Save/Export.
            To refresh those cells, it was necessary to Reparse() the EDID buffer. Now the checksums are automatically
            updated in wxEDID_Frame::AssembleEDID_main(), invoked from wxEDID_Frame::SaveEDID(), ExportEDID_hex(),
            SaveReport() and evt_assemble_edid().
   - Change: wxEDID_Frame::OpenEDID(), ImportEDID_hex(): always try to Reparse() faulty EDID structure when
            "Ignore EDID errors" is enabled.
            wxEDID_Frame::Reparse() is now returning fault even when ignoring errors is enabled.
   - Fixed: (BUG::leak) wxEDID_Frame::ImportEDID_hex(): memory leak possible when the hex->bin conversion fails.

2022.02.09
   - Fixed: (BUG::wxWidgets3.x ::wxAUI) AUI managed panel gets refreshed even when it's invisible, what can cause
            horrible flickering during window resizing.
            wxEDID_Frame::evt_ntbook_page(): disable the EvtHandler in AUI Manager when the panel is invisible.

2022.02.06
   - Fixed: (BUG: Regression in v0.0.23)
            The functions EDID_cl::MfcId(), ProdSN(), ProdWk(), ProdYr() were not updated to work with local data buffers:
            the respective fields in EDID.BASE.BED could not be changed.

2022.02.05
   - Fixed: wxEDID_Frame::SaveRep_SubGrps(): Video Data Block: VIC values were not really decoded,
            so for SVD values > 127 the descriptions were incorrect.
   - Fixed: (BUG::old::mislooked) wxEDID_Frame::SaveRep_SubGrps() uses value descriptions from vmap_t->vname_map_t, but
            reserved values were not included in some cases -> incorrect (shifted) descriptions in the output file.
            Now all the reserved values are included with value description set to NULL.
            edi_grp_cl::create_selector() ignores values with NULL name ptr.
            wxEDID_Frame::SaveRep_SubGrps() prints "<reserved>" for NULL name ptr.

2021.10.04
   < released v0.0.26 >

2021.09.30
   - Cleanup: dtd_screen_cl: removed unused code for background erase event.
   - Fixed: GCC v10.x :: -Wextra can generate tons of warnings, mostly false-positives: disabled in debug builds.
   - Change: wxEDID_Frame::evt_blktr_key():: use keycodes instead of Unicodes to identify character keys.

2021.09.29
   - Fixed: (BUG) CEA::VSD incorrect bit offset for DVI_Dual field.
   - Fixed: (BUG) reparsing of CEA-header group should not be possible (returned uninitialized rcode).
   - Update: rcd_autogen v2.6 :: size of array of units in now fixed, type declaration is variable.

2021.03.27
   < released v0.0.25 >
   - Change: default size for all spin controls on DTD_Constructor panel.
            Looks ugly, but works with wxWidgets compiled against GTK3.

2021.03.26
   - Fixed: Build fails with Clang: unlike GCC, Clang does not support static initialization of flexible
            arrays in C++ mode: removed flex arrays from all field groups descriptors.

   - Update: rcd_autogen v2.4 :: removed flexible array of units in rcd_scope_t.

2021.03.24
   - Fixed: <various functions> :: in case of error, always return error message, not just the rcode.
            Some function were returning the message only if "Ignore Errors" mode was enabled.

2021.03.21
   < released v0.0.24 >

2021.03.18
   - Fixed: Menu "Options": "Reparse EDID buffer" and "AssembleEDID" options are disabled until
            EDID data is loaded/imported.
   - Fixed: (BUG::regression) wxEDID_Frame::CreateBlockTree(): the BlockTree was not expanded automatically
            when opened file contains only the base EDID block (no extensions).
   - Added: wxEDID_Frame::ImportEDID_hex(): report source file byte offset if conversion fails.

2021.03.17
   - Fixed: wxEDID_Frame::UpdateDataGrid(): missing auto-resizing of row labels width:
            BlkDataGrid->SetRowLabelSize(wxGRID_AUTOSIZE).
   - Fixed: (old mislooked BUG): STI: Standard Timing Information: NU flag was not set for unused fields.
   - Fixed: (BUG::regression): edi_grp_cl::init_fields(): a call to FieldsAr.Empty() is necessary for
            ForcedGrpRefresh() functions.
   - Added: VID: Video Input Descriptor: support for field definitions introduced in EDID v1.4

2021.03.16
   - Change: EDID base block: UNK: Unknown Descriptor, unk_cl::init(): insert unknown byte fields instead of
             single byte string (easier to view and edit).

2021.03.14
   - Change: EDID_class.h: CEA-specific classes moved to dedicated headers: CEA.h, CEA_ET_class.h
   - Change: EDID_class.h: shared declarations moved to EDID_shared.h

2021.03.13
   < released v0.0.23 >

< removed old entries >
