2023-04-19 17:35:20 -04:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
2020-09-18 01:50:44 -07:00
|
|
|
|
using System.Text.RegularExpressions;
|
2020-08-28 22:21:35 -07:00
|
|
|
|
|
2020-12-08 16:37:08 -08:00
|
|
|
|
namespace SabreTools.Core.Tools
|
2020-07-15 09:41:59 -07:00
|
|
|
|
{
|
|
|
|
|
|
public static class Converters
|
|
|
|
|
|
{
|
2020-08-24 13:21:59 -07:00
|
|
|
|
#region Enum to Enum
|
|
|
|
|
|
|
2020-12-12 21:35:20 -08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get the DatItemFields associated with each hash type
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static List<DatItemField> AsDatItemFields(this Hash hash)
|
|
|
|
|
|
{
|
2023-04-19 16:39:58 -04:00
|
|
|
|
List<DatItemField> fields = new();
|
2020-12-12 21:35:20 -08:00
|
|
|
|
|
|
|
|
|
|
if (hash.HasFlag(Hash.CRC))
|
|
|
|
|
|
fields.Add(DatItemField.CRC);
|
|
|
|
|
|
if (hash.HasFlag(Hash.MD5))
|
|
|
|
|
|
fields.Add(DatItemField.MD5);
|
|
|
|
|
|
if (hash.HasFlag(Hash.SHA1))
|
|
|
|
|
|
fields.Add(DatItemField.SHA1);
|
|
|
|
|
|
if (hash.HasFlag(Hash.SHA256))
|
|
|
|
|
|
fields.Add(DatItemField.SHA256);
|
|
|
|
|
|
if (hash.HasFlag(Hash.SHA384))
|
|
|
|
|
|
fields.Add(DatItemField.SHA384);
|
|
|
|
|
|
if (hash.HasFlag(Hash.SHA512))
|
|
|
|
|
|
fields.Add(DatItemField.SHA512);
|
|
|
|
|
|
if (hash.HasFlag(Hash.SpamSum))
|
|
|
|
|
|
fields.Add(DatItemField.SpamSum);
|
|
|
|
|
|
|
|
|
|
|
|
return fields;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region String to Enum
|
|
|
|
|
|
|
2020-09-02 14:32:16 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get ChipType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="chipType">String to get value from</param>
|
|
|
|
|
|
/// <returns>ChipType value corresponding to the string</returns>
|
|
|
|
|
|
public static ChipType AsChipType(this string chipType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return chipType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"cpu" => ChipType.CPU,
|
|
|
|
|
|
"audio" => ChipType.Audio,
|
|
|
|
|
|
_ => ChipType.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-06 23:00:13 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get ControlType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="controlType">String to get value from</param>
|
|
|
|
|
|
/// <returns>ControlType value corresponding to the string</returns>
|
|
|
|
|
|
public static ControlType AsControlType(this string controlType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return controlType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"joy" => ControlType.Joy,
|
|
|
|
|
|
"stick" => ControlType.Stick,
|
|
|
|
|
|
"paddle" => ControlType.Paddle,
|
|
|
|
|
|
"pedal" => ControlType.Pedal,
|
|
|
|
|
|
"lightgun" => ControlType.Lightgun,
|
|
|
|
|
|
"positional" => ControlType.Positional,
|
|
|
|
|
|
"dial" => ControlType.Dial,
|
|
|
|
|
|
"trackball" => ControlType.Trackball,
|
|
|
|
|
|
"mouse" => ControlType.Mouse,
|
|
|
|
|
|
"only_buttons" => ControlType.OnlyButtons,
|
|
|
|
|
|
"keypad" => ControlType.Keypad,
|
|
|
|
|
|
"keyboard" => ControlType.Keyboard,
|
|
|
|
|
|
"mahjong" => ControlType.Mahjong,
|
|
|
|
|
|
"hanafuda" => ControlType.Hanafuda,
|
|
|
|
|
|
"gambling" => ControlType.Gambling,
|
|
|
|
|
|
_ => ControlType.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-12-12 21:33:26 -08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get DatHeaderField value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="DatHeaderField">String to get value from</param>
|
|
|
|
|
|
/// <returns>DatHeaderField value corresponding to the string</returns>
|
|
|
|
|
|
public static DatHeaderField AsDatHeaderField(this string input)
|
|
|
|
|
|
{
|
|
|
|
|
|
// If the input is empty, we return null
|
|
|
|
|
|
if (string.IsNullOrEmpty(input))
|
|
|
|
|
|
return DatHeaderField.NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// Normalize the input
|
|
|
|
|
|
input = input.ToLowerInvariant();
|
|
|
|
|
|
|
|
|
|
|
|
// Create regex
|
|
|
|
|
|
string headerRegex = @"^(dat|header|datheader)[.\-_\s]";
|
|
|
|
|
|
|
|
|
|
|
|
// If we don't have a header field, skip
|
|
|
|
|
|
if (!Regex.IsMatch(input, headerRegex))
|
|
|
|
|
|
return DatHeaderField.NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// Replace the match and re-normalize
|
|
|
|
|
|
string headerInput = Regex.Replace(input, headerRegex, string.Empty)
|
|
|
|
|
|
.Replace(' ', '_')
|
|
|
|
|
|
.Replace('-', '_')
|
|
|
|
|
|
.Replace('.', '_');
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
return headerInput switch
|
2020-12-12 21:33:26 -08:00
|
|
|
|
{
|
|
|
|
|
|
#region Common
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"file" => DatHeaderField.FileName,
|
|
|
|
|
|
"filename" => DatHeaderField.FileName,
|
|
|
|
|
|
"file_name" => DatHeaderField.FileName,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"dat" => DatHeaderField.Name,
|
|
|
|
|
|
"datname" => DatHeaderField.Name,
|
|
|
|
|
|
"dat_name" => DatHeaderField.Name,
|
|
|
|
|
|
"internalname" => DatHeaderField.Name,
|
|
|
|
|
|
"internal_name" => DatHeaderField.Name,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"desc" => DatHeaderField.Description,
|
|
|
|
|
|
"description" => DatHeaderField.Description,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"root" => DatHeaderField.RootDir,
|
|
|
|
|
|
"rootdir" => DatHeaderField.RootDir,
|
|
|
|
|
|
"root_dir" => DatHeaderField.RootDir,
|
|
|
|
|
|
"rootdirectory" => DatHeaderField.RootDir,
|
|
|
|
|
|
"root_directory" => DatHeaderField.RootDir,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"category" => DatHeaderField.Category,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"version" => DatHeaderField.Version,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"date" => DatHeaderField.Date,
|
|
|
|
|
|
"timestamp" => DatHeaderField.Date,
|
|
|
|
|
|
"time_stamp" => DatHeaderField.Date,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"author" => DatHeaderField.Author,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"email" => DatHeaderField.Email,
|
|
|
|
|
|
"e_mail" => DatHeaderField.Email,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"homepage" => DatHeaderField.Homepage,
|
|
|
|
|
|
"home_page" => DatHeaderField.Homepage,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"url" => DatHeaderField.Url,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"comment" => DatHeaderField.Comment,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"header" => DatHeaderField.HeaderSkipper,
|
|
|
|
|
|
"headerskipper" => DatHeaderField.HeaderSkipper,
|
|
|
|
|
|
"header_skipper" => DatHeaderField.HeaderSkipper,
|
|
|
|
|
|
"skipper" => DatHeaderField.HeaderSkipper,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"dattype" => DatHeaderField.Type,
|
|
|
|
|
|
"type" => DatHeaderField.Type,
|
|
|
|
|
|
"superdat" => DatHeaderField.Type,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"forcemerging" => DatHeaderField.ForceMerging,
|
|
|
|
|
|
"force_merging" => DatHeaderField.ForceMerging,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"forcenodump" => DatHeaderField.ForceNodump,
|
|
|
|
|
|
"force_nodump" => DatHeaderField.ForceNodump,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"forcepacking" => DatHeaderField.ForcePacking,
|
|
|
|
|
|
"force_packing" => DatHeaderField.ForcePacking,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region ListXML
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"debug" => DatHeaderField.Debug,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"mameconfig" => DatHeaderField.MameConfig,
|
|
|
|
|
|
"mame_config" => DatHeaderField.MameConfig,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Logiqx
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"id" => DatHeaderField.NoIntroID,
|
|
|
|
|
|
"nointroid" => DatHeaderField.NoIntroID,
|
|
|
|
|
|
"no_intro_id" => DatHeaderField.NoIntroID,
|
2023-04-03 12:24:42 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"build" => DatHeaderField.Build,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"rommode" => DatHeaderField.RomMode,
|
|
|
|
|
|
"rom_mode" => DatHeaderField.RomMode,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"biosmode" => DatHeaderField.BiosMode,
|
|
|
|
|
|
"bios_mode" => DatHeaderField.BiosMode,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"samplemode" => DatHeaderField.SampleMode,
|
|
|
|
|
|
"sample_mode" => DatHeaderField.SampleMode,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"lockrommode" => DatHeaderField.LockRomMode,
|
|
|
|
|
|
"lockrom_mode" => DatHeaderField.LockRomMode,
|
|
|
|
|
|
"lock_rommode" => DatHeaderField.LockRomMode,
|
|
|
|
|
|
"lock_rom_mode" => DatHeaderField.LockRomMode,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"lockbiosmode" => DatHeaderField.LockBiosMode,
|
|
|
|
|
|
"lockbios_mode" => DatHeaderField.LockBiosMode,
|
|
|
|
|
|
"lock_biosmode" => DatHeaderField.LockBiosMode,
|
|
|
|
|
|
"lock_bios_mode" => DatHeaderField.LockBiosMode,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"locksamplemode" => DatHeaderField.LockSampleMode,
|
|
|
|
|
|
"locksample_mode" => DatHeaderField.LockSampleMode,
|
|
|
|
|
|
"lock_samplemode" => DatHeaderField.LockSampleMode,
|
|
|
|
|
|
"lock_sample_mode" => DatHeaderField.LockSampleMode,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region OfflineList
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"system" => DatHeaderField.System,
|
|
|
|
|
|
"plugin" => DatHeaderField.System, // Used with RomCenter
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"screenshotwidth" => DatHeaderField.ScreenshotsWidth,
|
|
|
|
|
|
"screenshotswidth" => DatHeaderField.ScreenshotsWidth,
|
|
|
|
|
|
"screenshot_width" => DatHeaderField.ScreenshotsWidth,
|
|
|
|
|
|
"screenshots_width" => DatHeaderField.ScreenshotsWidth,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"screenshotheight" => DatHeaderField.ScreenshotsHeight,
|
|
|
|
|
|
"screenshotsheight" => DatHeaderField.ScreenshotsHeight,
|
|
|
|
|
|
"screenshot_height" => DatHeaderField.ScreenshotsHeight,
|
|
|
|
|
|
"screenshots_height" => DatHeaderField.ScreenshotsHeight,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"info_name" => DatHeaderField.Info_Name,
|
|
|
|
|
|
"infos_name" => DatHeaderField.Info_Name,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"info_visible" => DatHeaderField.Info_Visible,
|
|
|
|
|
|
"infos_visible" => DatHeaderField.Info_Visible,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"info_isnamingoption" => DatHeaderField.Info_IsNamingOption,
|
|
|
|
|
|
"info_is_naming_option" => DatHeaderField.Info_IsNamingOption,
|
|
|
|
|
|
"infos_isnamingoption" => DatHeaderField.Info_IsNamingOption,
|
|
|
|
|
|
"infos_is_naming_option" => DatHeaderField.Info_IsNamingOption,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"info_default" => DatHeaderField.Info_Default,
|
|
|
|
|
|
"infos_default" => DatHeaderField.Info_Default,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"canopen" => DatHeaderField.CanOpen,
|
|
|
|
|
|
"can_open" => DatHeaderField.CanOpen,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"romtitle" => DatHeaderField.RomTitle,
|
|
|
|
|
|
"rom_title" => DatHeaderField.RomTitle,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region RomCenter
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"rcversion" => DatHeaderField.RomCenterVersion,
|
|
|
|
|
|
"rc_version" => DatHeaderField.RomCenterVersion,
|
|
|
|
|
|
"romcenterversion" => DatHeaderField.RomCenterVersion,
|
|
|
|
|
|
"romcenter_version" => DatHeaderField.RomCenterVersion,
|
|
|
|
|
|
"rom_center_version" => DatHeaderField.RomCenterVersion,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
_ => DatHeaderField.NULL,
|
|
|
|
|
|
};
|
2020-12-12 21:33:26 -08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get DatItemField value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="input">String to get value from</param>
|
|
|
|
|
|
/// <returns>DatItemField value corresponding to the string</returns>
|
|
|
|
|
|
public static DatItemField AsDatItemField(this string input)
|
|
|
|
|
|
{
|
|
|
|
|
|
// If the input is empty, we return null
|
|
|
|
|
|
if (string.IsNullOrEmpty(input))
|
|
|
|
|
|
return DatItemField.NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// Normalize the input
|
|
|
|
|
|
input = input.ToLowerInvariant();
|
|
|
|
|
|
|
|
|
|
|
|
// Create regex
|
|
|
|
|
|
string datItemRegex = @"^(item|datitem)[.\-_\s]";
|
|
|
|
|
|
|
|
|
|
|
|
// If we don't have an item field, skip
|
|
|
|
|
|
if (!Regex.IsMatch(input, datItemRegex))
|
|
|
|
|
|
return DatItemField.NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// Replace the match and re-normalize
|
|
|
|
|
|
string itemInput = Regex.Replace(input, datItemRegex, string.Empty)
|
|
|
|
|
|
.Replace(' ', '_')
|
|
|
|
|
|
.Replace('-', '_')
|
|
|
|
|
|
.Replace('.', '_');
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
return itemInput switch
|
2020-12-12 21:33:26 -08:00
|
|
|
|
{
|
|
|
|
|
|
#region Common
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"type" => DatItemField.Type,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Item-Specific
|
|
|
|
|
|
|
|
|
|
|
|
#region Actionable
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Rom
|
|
|
|
|
|
|
|
|
|
|
|
"name" => DatItemField.Name,
|
|
|
|
|
|
|
|
|
|
|
|
"bios" => DatItemField.Bios,
|
|
|
|
|
|
|
|
|
|
|
|
"size" => DatItemField.Size,
|
|
|
|
|
|
|
|
|
|
|
|
"crc" => DatItemField.CRC,
|
|
|
|
|
|
"crc32" => DatItemField.CRC,
|
|
|
|
|
|
|
|
|
|
|
|
"md5" => DatItemField.MD5,
|
|
|
|
|
|
"md5hash" => DatItemField.MD5,
|
|
|
|
|
|
"md5_hash" => DatItemField.MD5,
|
|
|
|
|
|
|
|
|
|
|
|
"sha1" => DatItemField.SHA1,
|
|
|
|
|
|
"sha_1" => DatItemField.SHA1,
|
|
|
|
|
|
"sha1hash" => DatItemField.SHA1,
|
|
|
|
|
|
"sha1_hash" => DatItemField.SHA1,
|
|
|
|
|
|
"sha_1hash" => DatItemField.SHA1,
|
|
|
|
|
|
"sha_1_hash" => DatItemField.SHA1,
|
|
|
|
|
|
|
|
|
|
|
|
"sha256" => DatItemField.SHA256,
|
|
|
|
|
|
"sha_256" => DatItemField.SHA256,
|
|
|
|
|
|
"sha256hash" => DatItemField.SHA256,
|
|
|
|
|
|
"sha256_hash" => DatItemField.SHA256,
|
|
|
|
|
|
"sha_256hash" => DatItemField.SHA256,
|
|
|
|
|
|
"sha_256_hash" => DatItemField.SHA256,
|
|
|
|
|
|
|
|
|
|
|
|
"sha384" => DatItemField.SHA384,
|
|
|
|
|
|
"sha_384" => DatItemField.SHA384,
|
|
|
|
|
|
"sha384hash" => DatItemField.SHA384,
|
|
|
|
|
|
"sha384_hash" => DatItemField.SHA384,
|
|
|
|
|
|
"sha_384hash" => DatItemField.SHA384,
|
|
|
|
|
|
"sha_384_hash" => DatItemField.SHA384,
|
|
|
|
|
|
|
|
|
|
|
|
"sha512" => DatItemField.SHA512,
|
|
|
|
|
|
"sha_512" => DatItemField.SHA512,
|
|
|
|
|
|
"sha512hash" => DatItemField.SHA512,
|
|
|
|
|
|
"sha512_hash" => DatItemField.SHA512,
|
|
|
|
|
|
"sha_512hash" => DatItemField.SHA512,
|
|
|
|
|
|
"sha_512_hash" => DatItemField.SHA512,
|
|
|
|
|
|
|
|
|
|
|
|
"spamsum" => DatItemField.SpamSum,
|
|
|
|
|
|
"spam_sum" => DatItemField.SpamSum,
|
|
|
|
|
|
|
|
|
|
|
|
"merge" => DatItemField.Merge,
|
|
|
|
|
|
"mergetag" => DatItemField.Merge,
|
|
|
|
|
|
"merge_tag" => DatItemField.Merge,
|
|
|
|
|
|
|
|
|
|
|
|
"region" => DatItemField.Region,
|
|
|
|
|
|
|
|
|
|
|
|
"offset" => DatItemField.Offset,
|
|
|
|
|
|
|
|
|
|
|
|
"date" => DatItemField.Date,
|
|
|
|
|
|
|
|
|
|
|
|
"status" => DatItemField.Status,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"optional" => DatItemField.Optional,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"inverted" => DatItemField.Inverted,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Rom (Archive.org)
|
|
|
|
|
|
|
|
|
|
|
|
"ado_source" => DatItemField.ArchiveDotOrgSource,
|
|
|
|
|
|
|
|
|
|
|
|
"ado_format" => DatItemField.ArchiveDotOrgFormat,
|
|
|
|
|
|
|
|
|
|
|
|
"original_filename" => DatItemField.OriginalFilename,
|
|
|
|
|
|
|
|
|
|
|
|
"rotation" => DatItemField.Rotation,
|
|
|
|
|
|
|
|
|
|
|
|
"summation" => DatItemField.Summation,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Rom (AttractMode)
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"altname" => DatItemField.AltName,
|
|
|
|
|
|
"alt_name" => DatItemField.AltName,
|
|
|
|
|
|
"altromname" => DatItemField.AltName,
|
|
|
|
|
|
"alt_romname" => DatItemField.AltName,
|
|
|
|
|
|
"alt_rom_name" => DatItemField.AltName,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"alttitle" => DatItemField.AltTitle,
|
|
|
|
|
|
"alt_title" => DatItemField.AltTitle,
|
|
|
|
|
|
"altromtitle" => DatItemField.AltTitle,
|
|
|
|
|
|
"alt_romtitle" => DatItemField.AltTitle,
|
|
|
|
|
|
"alt_rom_title" => DatItemField.AltTitle,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Rom (Logiqx)
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"mia" => DatItemField.MIA,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Rom (OpenMSX)
|
|
|
|
|
|
|
|
|
|
|
|
"original" => DatItemField.Original,
|
|
|
|
|
|
|
|
|
|
|
|
"subtype" => DatItemField.OpenMSXSubType,
|
|
|
|
|
|
"sub_type" => DatItemField.OpenMSXSubType,
|
|
|
|
|
|
"openmsxsubtype" => DatItemField.OpenMSXSubType,
|
|
|
|
|
|
"openmsx_subtype" => DatItemField.OpenMSXSubType,
|
|
|
|
|
|
"openmsx_sub_type" => DatItemField.OpenMSXSubType,
|
|
|
|
|
|
|
|
|
|
|
|
"openmsxtype" => DatItemField.OpenMSXType,
|
|
|
|
|
|
"openmsx_type" => DatItemField.OpenMSXType,
|
|
|
|
|
|
|
|
|
|
|
|
"remark" => DatItemField.Remark,
|
|
|
|
|
|
|
|
|
|
|
|
"boot" => DatItemField.Boot,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Rom (SoftwareList)
|
|
|
|
|
|
|
|
|
|
|
|
"areaname" => DatItemField.AreaName,
|
|
|
|
|
|
"area_name" => DatItemField.AreaName,
|
|
|
|
|
|
|
|
|
|
|
|
"areasize" => DatItemField.AreaSize,
|
|
|
|
|
|
"area_size" => DatItemField.AreaSize,
|
|
|
|
|
|
|
|
|
|
|
|
"areawidth" => DatItemField.AreaWidth,
|
|
|
|
|
|
"area_width" => DatItemField.AreaWidth,
|
|
|
|
|
|
|
|
|
|
|
|
"areaendinanness" => DatItemField.AreaEndianness,
|
|
|
|
|
|
"area_endianness" => DatItemField.AreaEndianness,
|
|
|
|
|
|
|
|
|
|
|
|
"loadflag" => DatItemField.LoadFlag,
|
|
|
|
|
|
"load_flag" => DatItemField.LoadFlag,
|
|
|
|
|
|
|
|
|
|
|
|
"partname" => DatItemField.Part_Name,
|
|
|
|
|
|
"part_name" => DatItemField.Part_Name,
|
|
|
|
|
|
|
|
|
|
|
|
"partinterface" => DatItemField.Part_Interface,
|
|
|
|
|
|
"part_interface" => DatItemField.Part_Interface,
|
|
|
|
|
|
|
|
|
|
|
|
"part_feature_name" => DatItemField.Part_Feature_Name,
|
|
|
|
|
|
|
|
|
|
|
|
"part_feature_value" => DatItemField.Part_Feature_Value,
|
|
|
|
|
|
|
|
|
|
|
|
"value" => DatItemField.Value,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Disk
|
|
|
|
|
|
|
|
|
|
|
|
"index" => DatItemField.Index,
|
|
|
|
|
|
|
|
|
|
|
|
"writable" => DatItemField.Writable,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Auxiliary
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Adjuster
|
|
|
|
|
|
|
|
|
|
|
|
"default" => DatItemField.Default,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Analog
|
|
|
|
|
|
|
|
|
|
|
|
"analog_mask" => DatItemField.Analog_Mask,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Archive
|
|
|
|
|
|
|
|
|
|
|
|
"number" => DatItemField.Number,
|
|
|
|
|
|
|
|
|
|
|
|
"clone" => DatItemField.Clone,
|
|
|
|
|
|
|
|
|
|
|
|
"regparent" => DatItemField.RegParent,
|
|
|
|
|
|
"reg_parent" => DatItemField.RegParent,
|
|
|
|
|
|
|
|
|
|
|
|
"languages" => DatItemField.Languages,
|
|
|
|
|
|
|
|
|
|
|
|
"devstatus" => DatItemField.DevStatus,
|
|
|
|
|
|
"dev_status" => DatItemField.DevStatus,
|
|
|
|
|
|
|
|
|
|
|
|
"physical" => DatItemField.Physical,
|
|
|
|
|
|
|
|
|
|
|
|
"complete" => DatItemField.Complete,
|
|
|
|
|
|
|
|
|
|
|
|
"categories" => DatItemField.Categories,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region BiosSet
|
|
|
|
|
|
|
|
|
|
|
|
"description" => DatItemField.Description,
|
|
|
|
|
|
"biosdescription" => DatItemField.Description,
|
|
|
|
|
|
"bios_description" => DatItemField.Description,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Chip
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"tag" => DatItemField.Tag,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"chiptype" => DatItemField.ChipType,
|
|
|
|
|
|
"chip_type" => DatItemField.ChipType,
|
2023-04-07 14:49:30 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"clock" => DatItemField.Clock,
|
2023-04-07 14:49:30 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Condition
|
2023-04-07 14:49:30 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"mask" => DatItemField.Mask,
|
2023-04-07 14:49:30 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"relation" => DatItemField.Relation,
|
2023-04-07 15:47:24 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"condition_tag" => DatItemField.Condition_Tag,
|
2023-04-07 15:47:24 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"condition_mask" => DatItemField.Condition_Mask,
|
2023-04-07 15:47:24 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"condition_relation" => DatItemField.Condition_Relation,
|
2023-04-07 15:47:24 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"condition_value" => DatItemField.Condition_Value,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Control
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_type" => DatItemField.Control_Type,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_player" => DatItemField.Control_Player,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_buttons" => DatItemField.Control_Buttons,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_reqbuttons" => DatItemField.Control_RequiredButtons,
|
|
|
|
|
|
"control_req_buttons" => DatItemField.Control_RequiredButtons,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_minimum" => DatItemField.Control_Minimum,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_maximum" => DatItemField.Control_Maximum,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_sensitivity" => DatItemField.Control_Sensitivity,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_keydelta" => DatItemField.Control_KeyDelta,
|
|
|
|
|
|
"control_key_delta" => DatItemField.Control_KeyDelta,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_reverse" => DatItemField.Control_Reverse,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_ways" => DatItemField.Control_Ways,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_ways2" => DatItemField.Control_Ways2,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control_ways3" => DatItemField.Control_Ways3,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Device
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"devicetype" => DatItemField.DeviceType,
|
|
|
|
|
|
"device_type" => DatItemField.DeviceType,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"fixedimage" => DatItemField.FixedImage,
|
|
|
|
|
|
"fixed_image" => DatItemField.FixedImage,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"mandatory" => DatItemField.Mandatory,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"interface" => DatItemField.Interface,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Display
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"displaytype" => DatItemField.DisplayType,
|
|
|
|
|
|
"display_type" => DatItemField.DisplayType,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"rotate" => DatItemField.Rotate,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"flipx" => DatItemField.FlipX,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"width" => DatItemField.Width,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"height" => DatItemField.Height,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"refresh" => DatItemField.Refresh,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"pixclock" => DatItemField.PixClock,
|
|
|
|
|
|
"pix_clock" => DatItemField.PixClock,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"htotal" => DatItemField.HTotal,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"hbend" => DatItemField.HBEnd,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"hbstart" => DatItemField.HBStart,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"vtotal" => DatItemField.VTotal,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"vbend" => DatItemField.VBEnd,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"vbstart" => DatItemField.VBStart,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Driver
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"supportstatus" => DatItemField.SupportStatus,
|
|
|
|
|
|
"support_status" => DatItemField.SupportStatus,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"emulationstatus" => DatItemField.EmulationStatus,
|
|
|
|
|
|
"emulation_status" => DatItemField.EmulationStatus,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"cocktailstatus" => DatItemField.CocktailStatus,
|
|
|
|
|
|
"cocktail_status" => DatItemField.CocktailStatus,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"savestatestatus" => DatItemField.SaveStateStatus,
|
|
|
|
|
|
"savestate_status" => DatItemField.SaveStateStatus,
|
|
|
|
|
|
"save_state_status" => DatItemField.SaveStateStatus,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"requiresartwork" => DatItemField.RequiresArtwork,
|
|
|
|
|
|
"requires_artwork" => DatItemField.RequiresArtwork,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"unofficial" => DatItemField.Unofficial,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"nosoundhardware" => DatItemField.NoSoundHardware,
|
|
|
|
|
|
"no_sound_hardware" => DatItemField.NoSoundHardware,
|
2022-11-03 11:37:55 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"incomplete" => DatItemField.Incomplete,
|
2022-11-03 11:37:55 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2022-11-03 11:37:55 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Extension
|
2022-11-03 11:37:55 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"extension_name" => DatItemField.Extension_Name,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Feature
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"featuretype" => DatItemField.FeatureType,
|
|
|
|
|
|
"feature_type" => DatItemField.FeatureType,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"featurestatus" => DatItemField.FeatureStatus,
|
|
|
|
|
|
"feature_status" => DatItemField.FeatureStatus,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"featureoverall" => DatItemField.FeatureOverall,
|
|
|
|
|
|
"feature_overall" => DatItemField.FeatureOverall,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Input
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"service" => DatItemField.Service,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"tilt" => DatItemField.Tilt,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"players" => DatItemField.Players,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"coins" => DatItemField.Coins,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Instance
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"instance_name" => DatItemField.Instance_Name,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"instance_briefname" => DatItemField.Instance_BriefName,
|
|
|
|
|
|
"instance_brief_name" => DatItemField.Instance_BriefName,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-09-01 11:34:52 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region Location
|
2020-09-01 11:34:52 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"location_name" => DatItemField.Location_Name,
|
2020-09-01 11:34:52 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"location_number" => DatItemField.Location_Number,
|
2020-08-31 23:01:51 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"location_inverted" => DatItemField.Location_Inverted,
|
2020-08-31 23:01:51 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#endregion
|
2020-08-31 23:01:51 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
#region RamOption
|
2020-08-31 23:01:51 -07:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"content" => DatItemField.Content,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Release
|
|
|
|
|
|
|
|
|
|
|
|
"language" => DatItemField.Language,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Setting
|
|
|
|
|
|
|
|
|
|
|
|
"setting_name" => DatItemField.Setting_Name,
|
|
|
|
|
|
"value_name" => DatItemField.Setting_Name,
|
|
|
|
|
|
|
|
|
|
|
|
"setting_value" => DatItemField.Setting_Value,
|
|
|
|
|
|
"value_value" => DatItemField.Setting_Value,
|
|
|
|
|
|
|
|
|
|
|
|
"setting_default" => DatItemField.Setting_Default,
|
|
|
|
|
|
"value_default" => DatItemField.Setting_Default,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region SlotOption
|
|
|
|
|
|
|
|
|
|
|
|
"slotoption_name" => DatItemField.SlotOption_Name,
|
|
|
|
|
|
|
|
|
|
|
|
"slotoption_devicename" => DatItemField.SlotOption_DeviceName,
|
|
|
|
|
|
"slotoption_device_name" => DatItemField.SlotOption_DeviceName,
|
|
|
|
|
|
|
|
|
|
|
|
"slotoption_default" => DatItemField.SlotOption_Default,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region SoftwareList
|
|
|
|
|
|
|
|
|
|
|
|
"softwareliststatus" => DatItemField.SoftwareListStatus,
|
|
|
|
|
|
"softwarelist_status" => DatItemField.SoftwareListStatus,
|
|
|
|
|
|
|
|
|
|
|
|
"filter" => DatItemField.Filter,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Sound
|
|
|
|
|
|
|
|
|
|
|
|
"channels" => DatItemField.Channels,
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
2020-08-31 23:01:51 -07:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#endregion // Item-Specific
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
_ => DatItemField.NULL,
|
|
|
|
|
|
};
|
2020-07-15 09:41:59 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-12-14 15:22:14 -08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get DeviceType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="deviceType">String to get value from</param>
|
|
|
|
|
|
/// <returns>DeviceType value corresponding to the string</returns>
|
|
|
|
|
|
public static DeviceType AsDeviceType(this string deviceType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return deviceType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"unknown" => DeviceType.Unknown,
|
|
|
|
|
|
"cartridge" => DeviceType.Cartridge,
|
|
|
|
|
|
"floppydisk" => DeviceType.FloppyDisk,
|
|
|
|
|
|
"harddisk" => DeviceType.HardDisk,
|
|
|
|
|
|
"cylinder" => DeviceType.Cylinder,
|
|
|
|
|
|
"cassette" => DeviceType.Cassette,
|
|
|
|
|
|
"punchcard" => DeviceType.PunchCard,
|
|
|
|
|
|
"punchtape" => DeviceType.PunchTape,
|
|
|
|
|
|
"printout" => DeviceType.Printout,
|
|
|
|
|
|
"serial" => DeviceType.Serial,
|
|
|
|
|
|
"parallel" => DeviceType.Parallel,
|
|
|
|
|
|
"snapshot" => DeviceType.Snapshot,
|
|
|
|
|
|
"quickload" => DeviceType.QuickLoad,
|
|
|
|
|
|
"memcard" => DeviceType.MemCard,
|
|
|
|
|
|
"cdrom" => DeviceType.CDROM,
|
|
|
|
|
|
"magtape" => DeviceType.MagTape,
|
|
|
|
|
|
"romimage" => DeviceType.ROMImage,
|
|
|
|
|
|
"midiin" => DeviceType.MIDIIn,
|
|
|
|
|
|
"midiout" => DeviceType.MIDIOut,
|
|
|
|
|
|
"picture" => DeviceType.Picture,
|
|
|
|
|
|
"vidfile" => DeviceType.VidFile,
|
|
|
|
|
|
_ => DeviceType.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get DisplayType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="displayType">String to get value from</param>
|
|
|
|
|
|
/// <returns>DisplayType value corresponding to the string</returns>
|
|
|
|
|
|
public static DisplayType AsDisplayType(this string displayType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return displayType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"raster" => DisplayType.Raster,
|
|
|
|
|
|
"vector" => DisplayType.Vector,
|
|
|
|
|
|
"lcd" => DisplayType.LCD,
|
|
|
|
|
|
"svg" => DisplayType.SVG,
|
|
|
|
|
|
"unknown" => DisplayType.Unknown,
|
|
|
|
|
|
_ => DisplayType.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Endianness value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="endianness">String to get value from</param>
|
|
|
|
|
|
/// <returns>Endianness value corresponding to the string</returns>
|
|
|
|
|
|
public static Endianness AsEndianness(this string endianness)
|
|
|
|
|
|
{
|
|
|
|
|
|
return endianness?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"big" => Endianness.Big,
|
|
|
|
|
|
"little" => Endianness.Little,
|
|
|
|
|
|
_ => Endianness.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get FeatureStatus value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="featureStatus">String to get value from</param>
|
|
|
|
|
|
/// <returns>FeatureStatus value corresponding to the string</returns>
|
|
|
|
|
|
public static FeatureStatus AsFeatureStatus(this string featureStatus)
|
|
|
|
|
|
{
|
|
|
|
|
|
return featureStatus?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"unemulated" => FeatureStatus.Unemulated,
|
|
|
|
|
|
"imperfect" => FeatureStatus.Imperfect,
|
|
|
|
|
|
_ => FeatureStatus.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get FeatureType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="emulationStatus">String to get value from</param>
|
|
|
|
|
|
/// <returns>FeatureType value corresponding to the string</returns>
|
|
|
|
|
|
public static FeatureType AsFeatureType(this string featureType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return featureType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"protection" => FeatureType.Protection,
|
|
|
|
|
|
"palette" => FeatureType.Palette,
|
|
|
|
|
|
"graphics" => FeatureType.Graphics,
|
|
|
|
|
|
"sound" => FeatureType.Sound,
|
|
|
|
|
|
"controls" => FeatureType.Controls,
|
|
|
|
|
|
"keyboard" => FeatureType.Keyboard,
|
|
|
|
|
|
"mouse" => FeatureType.Mouse,
|
|
|
|
|
|
"microphone" => FeatureType.Microphone,
|
|
|
|
|
|
"camera" => FeatureType.Camera,
|
|
|
|
|
|
"disk" => FeatureType.Disk,
|
|
|
|
|
|
"printer" => FeatureType.Printer,
|
|
|
|
|
|
"lan" => FeatureType.Lan,
|
|
|
|
|
|
"wan" => FeatureType.Wan,
|
|
|
|
|
|
"timing" => FeatureType.Timing,
|
|
|
|
|
|
_ => FeatureType.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-07-15 09:41:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get ItemStatus value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="status">String to get value from</param>
|
|
|
|
|
|
/// <returns>ItemStatus value corresponding to the string</returns>
|
|
|
|
|
|
public static ItemStatus AsItemStatus(this string status)
|
|
|
|
|
|
{
|
|
|
|
|
|
return status?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"good" => ItemStatus.Good,
|
|
|
|
|
|
"baddump" => ItemStatus.BadDump,
|
|
|
|
|
|
"nodump" => ItemStatus.Nodump,
|
|
|
|
|
|
"yes" => ItemStatus.Nodump,
|
|
|
|
|
|
"verified" => ItemStatus.Verified,
|
|
|
|
|
|
"none" => ItemStatus.None,
|
|
|
|
|
|
"no" => ItemStatus.None,
|
|
|
|
|
|
_ => ItemStatus.None,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get ItemType? value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="itemType">String to get value from</param>
|
|
|
|
|
|
/// <returns>ItemType? value corresponding to the string</returns>
|
|
|
|
|
|
public static ItemType? AsItemType(this string itemType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return itemType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
2020-09-01 11:34:52 -07:00
|
|
|
|
"adjuster" => ItemType.Adjuster,
|
2020-09-02 16:31:23 -07:00
|
|
|
|
"analog" => ItemType.Analog,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
"archive" => ItemType.Archive,
|
|
|
|
|
|
"biosset" => ItemType.BiosSet,
|
|
|
|
|
|
"blank" => ItemType.Blank,
|
2020-08-25 22:48:46 -07:00
|
|
|
|
"chip" => ItemType.Chip,
|
2020-09-02 16:31:23 -07:00
|
|
|
|
"condition" => ItemType.Condition,
|
2020-09-01 12:04:35 -07:00
|
|
|
|
"configuration" => ItemType.Configuration,
|
2020-09-02 23:02:06 -07:00
|
|
|
|
"control" => ItemType.Control,
|
2020-09-04 14:10:35 -07:00
|
|
|
|
"dataarea" => ItemType.DataArea,
|
2020-09-02 17:09:19 -07:00
|
|
|
|
"device" => ItemType.Device,
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"deviceref" => ItemType.DeviceReference,
|
2020-08-31 23:01:51 -07:00
|
|
|
|
"device_ref" => ItemType.DeviceReference,
|
2020-09-01 13:36:32 -07:00
|
|
|
|
"dipswitch" => ItemType.DipSwitch,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
"disk" => ItemType.Disk,
|
2020-09-04 14:10:35 -07:00
|
|
|
|
"diskarea" => ItemType.DiskArea,
|
2020-09-02 21:36:14 -07:00
|
|
|
|
"display" => ItemType.Display,
|
2020-09-02 15:38:10 -07:00
|
|
|
|
"driver" => ItemType.Driver,
|
2020-09-02 16:37:01 -07:00
|
|
|
|
"extension" => ItemType.Extension,
|
2020-09-02 13:31:50 -07:00
|
|
|
|
"feature" => ItemType.Feature,
|
2020-09-02 23:31:35 -07:00
|
|
|
|
"info" => ItemType.Info,
|
2020-09-02 21:59:26 -07:00
|
|
|
|
"input" => ItemType.Input,
|
2020-09-02 16:46:17 -07:00
|
|
|
|
"instance" => ItemType.Instance,
|
2020-09-02 22:38:00 -07:00
|
|
|
|
"location" => ItemType.Location,
|
2020-08-27 16:57:22 -07:00
|
|
|
|
"media" => ItemType.Media,
|
2020-09-04 14:10:35 -07:00
|
|
|
|
"part" => ItemType.Part,
|
2020-09-03 13:20:56 -07:00
|
|
|
|
"partfeature" => ItemType.PartFeature,
|
|
|
|
|
|
"part_feature" => ItemType.PartFeature,
|
2020-09-02 17:22:31 -07:00
|
|
|
|
"port" => ItemType.Port,
|
2020-09-01 11:34:52 -07:00
|
|
|
|
"ramoption" => ItemType.RamOption,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
"release" => ItemType.Release,
|
2023-04-19 12:26:54 -04:00
|
|
|
|
"releasedetails" => ItemType.ReleaseDetails,
|
|
|
|
|
|
"release_details" => ItemType.ReleaseDetails,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
"rom" => ItemType.Rom,
|
|
|
|
|
|
"sample" => ItemType.Sample,
|
2023-04-19 12:26:54 -04:00
|
|
|
|
"serials" => ItemType.Serials,
|
2020-09-02 22:38:00 -07:00
|
|
|
|
"setting" => ItemType.Setting,
|
2020-09-03 00:48:07 -07:00
|
|
|
|
"sharedfeat" => ItemType.SharedFeature,
|
2020-09-01 16:21:55 -07:00
|
|
|
|
"slot" => ItemType.Slot,
|
2020-09-02 22:44:54 -07:00
|
|
|
|
"slotoption" => ItemType.SlotOption,
|
2020-08-31 23:26:07 -07:00
|
|
|
|
"softwarelist" => ItemType.SoftwareList,
|
2020-09-02 12:51:21 -07:00
|
|
|
|
"sound" => ItemType.Sound,
|
2023-04-19 12:26:54 -04:00
|
|
|
|
"sourcedetails" => ItemType.SourceDetails,
|
|
|
|
|
|
"source_details" => ItemType.SourceDetails,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-03 21:32:00 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get LoadFlag value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="loadFlag">String to get value from</param>
|
|
|
|
|
|
/// <returns>LoadFlag value corresponding to the string</returns>
|
|
|
|
|
|
public static LoadFlag AsLoadFlag(this string loadFlag)
|
|
|
|
|
|
{
|
|
|
|
|
|
return loadFlag?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"load16_byte" => LoadFlag.Load16Byte,
|
|
|
|
|
|
"load16_word" => LoadFlag.Load16Word,
|
|
|
|
|
|
"load16_word_swap" => LoadFlag.Load16WordSwap,
|
|
|
|
|
|
"load32_byte" => LoadFlag.Load32Byte,
|
|
|
|
|
|
"load32_word" => LoadFlag.Load32Word,
|
|
|
|
|
|
"load32_word_swap" => LoadFlag.Load32WordSwap,
|
|
|
|
|
|
"load32_dword" => LoadFlag.Load32DWord,
|
|
|
|
|
|
"load64_word" => LoadFlag.Load64Word,
|
|
|
|
|
|
"load64_word_swap" => LoadFlag.Load64WordSwap,
|
|
|
|
|
|
"reload" => LoadFlag.Reload,
|
|
|
|
|
|
"fill" => LoadFlag.Fill,
|
|
|
|
|
|
"continue" => LoadFlag.Continue,
|
|
|
|
|
|
"reload_plain" => LoadFlag.ReloadPlain,
|
|
|
|
|
|
"ignore" => LoadFlag.Ignore,
|
|
|
|
|
|
_ => LoadFlag.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-02-03 10:09:40 -08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get LogLevel value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="logLevel">String to get value from</param>
|
|
|
|
|
|
/// <returns>LogLevel value corresponding to the string</returns>
|
|
|
|
|
|
public static LogLevel AsLogLevel(this string logLevel)
|
|
|
|
|
|
{
|
2021-02-03 10:48:23 -08:00
|
|
|
|
return logLevel?.ToLowerInvariant() switch
|
2021-02-03 10:09:40 -08:00
|
|
|
|
{
|
|
|
|
|
|
"verbose" => LogLevel.VERBOSE,
|
|
|
|
|
|
"user" => LogLevel.USER,
|
|
|
|
|
|
"warning" => LogLevel.WARNING,
|
|
|
|
|
|
"error" => LogLevel.ERROR,
|
|
|
|
|
|
_ => LogLevel.VERBOSE,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2020-12-12 21:33:26 -08:00
|
|
|
|
/// Get MachineField value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="input">String to get value from</param>
|
|
|
|
|
|
/// <returns>MachineField value corresponding to the string</returns>
|
|
|
|
|
|
public static MachineField AsMachineField(this string input)
|
|
|
|
|
|
{
|
|
|
|
|
|
// If the input is empty, we return null
|
|
|
|
|
|
if (string.IsNullOrEmpty(input))
|
|
|
|
|
|
return MachineField.NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// Normalize the input
|
|
|
|
|
|
input = input.ToLowerInvariant();
|
|
|
|
|
|
|
|
|
|
|
|
// Create regex
|
|
|
|
|
|
string machineRegex = @"^(game|machine)[.\-_\s]";
|
|
|
|
|
|
|
|
|
|
|
|
// If we don't have a machine field, skip
|
|
|
|
|
|
if (!Regex.IsMatch(input, machineRegex))
|
|
|
|
|
|
return MachineField.NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// Replace the match and re-normalize
|
|
|
|
|
|
string machineInput = Regex.Replace(input, machineRegex, string.Empty)
|
|
|
|
|
|
.Replace(' ', '_')
|
|
|
|
|
|
.Replace('-', '_')
|
|
|
|
|
|
.Replace('.', '_');
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
return machineInput switch
|
2020-12-12 21:33:26 -08:00
|
|
|
|
{
|
|
|
|
|
|
#region Common
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"name" => MachineField.Name,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"comment" => MachineField.Comment,
|
|
|
|
|
|
"extra" => MachineField.Comment, // Used with AttractMode
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"desc" => MachineField.Description,
|
|
|
|
|
|
"description" => MachineField.Description,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"year" => MachineField.Year,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"manufacturer" => MachineField.Manufacturer,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"publisher" => MachineField.Publisher,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"category" => MachineField.Category,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"romof" => MachineField.RomOf,
|
|
|
|
|
|
"rom_of" => MachineField.RomOf,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"cloneof" => MachineField.CloneOf,
|
|
|
|
|
|
"clone_of" => MachineField.CloneOf,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"sampleof" => MachineField.SampleOf,
|
|
|
|
|
|
"sample_of" => MachineField.SampleOf,
|
2023-04-19 17:35:20 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"type" => MachineField.Type,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region AttractMode
|
2023-04-19 17:35:20 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"players" => MachineField.Players,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"rotation" => MachineField.Rotation,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"control" => MachineField.Control,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"amstatus" => MachineField.Status,
|
|
|
|
|
|
"am_status" => MachineField.Status,
|
|
|
|
|
|
"gamestatus" => MachineField.Status,
|
|
|
|
|
|
"supportstatus" => MachineField.Status,
|
|
|
|
|
|
"support_status" => MachineField.Status,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"displaycount" => MachineField.DisplayCount,
|
|
|
|
|
|
"display_count" => MachineField.DisplayCount,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"displaytype" => MachineField.DisplayType,
|
|
|
|
|
|
"display_type" => MachineField.DisplayType,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"buttons" => MachineField.Buttons,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region ListXML
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"history" => MachineField.History,
|
2020-12-28 10:22:40 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"sourcefile" => MachineField.SourceFile,
|
|
|
|
|
|
"source_file" => MachineField.SourceFile,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"runnable" => MachineField.Runnable,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Logiqx
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"board" => MachineField.Board,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"rebuildto" => MachineField.RebuildTo,
|
|
|
|
|
|
"rebuild_to" => MachineField.RebuildTo,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"id" => MachineField.NoIntroId,
|
|
|
|
|
|
"nointroid" => MachineField.NoIntroId,
|
|
|
|
|
|
"nointro_id" => MachineField.NoIntroId,
|
|
|
|
|
|
"no_intro_id" => MachineField.NoIntroId,
|
2023-03-26 21:47:17 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"cloneofid" => MachineField.NoIntroCloneOfId,
|
|
|
|
|
|
"nointrocloneofid" => MachineField.NoIntroCloneOfId,
|
|
|
|
|
|
"nointro_cloneofid" => MachineField.NoIntroCloneOfId,
|
|
|
|
|
|
"no_intro_cloneofid" => MachineField.NoIntroCloneOfId,
|
|
|
|
|
|
"no_intro_clone_of_id" => MachineField.NoIntroCloneOfId,
|
2023-04-03 11:57:06 -04:00
|
|
|
|
|
2020-12-12 21:33:26 -08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Logiqx EmuArc
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"titleid" => MachineField.TitleID,
|
|
|
|
|
|
"title_id" => MachineField.TitleID,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"developer" => MachineField.Developer,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"genre" => MachineField.Genre,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"subgenre" => MachineField.Subgenre,
|
|
|
|
|
|
"sub_genre" => MachineField.Subgenre,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"ratings" => MachineField.Ratings,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"score" => MachineField.Score,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"enabled" => MachineField.Enabled,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"crc" => MachineField.CRC,
|
|
|
|
|
|
"hascrc" => MachineField.CRC,
|
|
|
|
|
|
"has_crc" => MachineField.CRC,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"relatedto" => MachineField.RelatedTo,
|
|
|
|
|
|
"related_to" => MachineField.RelatedTo,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region OpenMSX
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"genmsxid" => MachineField.GenMSXID,
|
|
|
|
|
|
"genmsx_id" => MachineField.GenMSXID,
|
|
|
|
|
|
"gen_msxid" => MachineField.GenMSXID,
|
|
|
|
|
|
"gen_msx_id" => MachineField.GenMSXID,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"system" => MachineField.System,
|
|
|
|
|
|
"msxsystem" => MachineField.System,
|
|
|
|
|
|
"msx_system" => MachineField.System,
|
2023-04-19 17:35:20 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"country" => MachineField.Country,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region SoftwareList
|
2023-04-19 17:35:20 -04:00
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
"supported" => MachineField.Supported,
|
2020-12-12 21:33:26 -08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
|
_ => MachineField.NULL,
|
|
|
|
|
|
};
|
2020-12-12 21:33:26 -08:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-07-15 09:41:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get MachineType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="gametype">String to get value from</param>
|
|
|
|
|
|
/// <returns>MachineType value corresponding to the string</returns>
|
|
|
|
|
|
public static MachineType AsMachineType(this string gametype)
|
|
|
|
|
|
{
|
|
|
|
|
|
return gametype?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"bios" => MachineType.Bios,
|
|
|
|
|
|
"dev" => MachineType.Device,
|
|
|
|
|
|
"device" => MachineType.Device,
|
|
|
|
|
|
"mech" => MachineType.Mechanical,
|
|
|
|
|
|
"mechanical" => MachineType.Mechanical,
|
2020-08-24 13:53:53 -07:00
|
|
|
|
"none" => MachineType.NULL,
|
|
|
|
|
|
_ => MachineType.NULL,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-20 20:38:29 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get MergingFlag value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="merging">String to get value from</param>
|
|
|
|
|
|
/// <returns>MergingFlag value corresponding to the string</returns>
|
|
|
|
|
|
public static MergingFlag AsMergingFlag(this string merging)
|
|
|
|
|
|
{
|
|
|
|
|
|
return merging?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"split" => MergingFlag.Split,
|
|
|
|
|
|
"merged" => MergingFlag.Merged,
|
2023-04-19 12:04:25 -04:00
|
|
|
|
"fullmerged" => MergingFlag.FullMerged,
|
2020-08-20 20:38:29 -07:00
|
|
|
|
"nonmerged" => MergingFlag.NonMerged,
|
|
|
|
|
|
"unmerged" => MergingFlag.NonMerged,
|
2023-04-19 12:04:25 -04:00
|
|
|
|
"full" => MergingFlag.FullNonMerged,
|
|
|
|
|
|
"fullnonmerged" => MergingFlag.FullNonMerged,
|
|
|
|
|
|
"fullunmerged" => MergingFlag.FullNonMerged,
|
|
|
|
|
|
"device" => MergingFlag.DeviceNonMerged,
|
|
|
|
|
|
"devicenonmerged" => MergingFlag.DeviceNonMerged,
|
|
|
|
|
|
"deviceunmerged" => MergingFlag.DeviceNonMerged,
|
2020-08-20 20:38:29 -07:00
|
|
|
|
"none" => MergingFlag.None,
|
|
|
|
|
|
_ => MergingFlag.None,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get NodumpFlag value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="nodump">String to get value from</param>
|
|
|
|
|
|
/// <returns>NodumpFlag value corresponding to the string</returns>
|
|
|
|
|
|
public static NodumpFlag AsNodumpFlag(this string nodump)
|
|
|
|
|
|
{
|
|
|
|
|
|
return nodump?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"obsolete" => NodumpFlag.Obsolete,
|
|
|
|
|
|
"required" => NodumpFlag.Required,
|
|
|
|
|
|
"ignore" => NodumpFlag.Ignore,
|
|
|
|
|
|
"none" => NodumpFlag.None,
|
|
|
|
|
|
_ => NodumpFlag.None,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-21 23:48:35 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get OpenMSXSubType value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="itemType">String to get value from</param>
|
|
|
|
|
|
/// <returns>OpenMSXSubType value corresponding to the string</returns>
|
|
|
|
|
|
public static OpenMSXSubType AsOpenMSXSubType(this string itemType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return itemType?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"rom" => OpenMSXSubType.Rom,
|
|
|
|
|
|
"megarom" => OpenMSXSubType.MegaRom,
|
|
|
|
|
|
"sccpluscart" => OpenMSXSubType.SCCPlusCart,
|
|
|
|
|
|
_ => OpenMSXSubType.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-20 20:38:29 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get PackingFlag value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="packing">String to get value from</param>
|
|
|
|
|
|
/// <returns>PackingFlag value corresponding to the string</returns>
|
|
|
|
|
|
public static PackingFlag AsPackingFlag(this string packing)
|
|
|
|
|
|
{
|
|
|
|
|
|
return packing?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"yes" => PackingFlag.Zip,
|
|
|
|
|
|
"zip" => PackingFlag.Zip,
|
|
|
|
|
|
"no" => PackingFlag.Unzip,
|
|
|
|
|
|
"unzip" => PackingFlag.Unzip,
|
2020-08-28 19:15:23 -07:00
|
|
|
|
"partial" => PackingFlag.Partial,
|
|
|
|
|
|
"flat" => PackingFlag.Flat,
|
2020-08-20 20:38:29 -07:00
|
|
|
|
"none" => PackingFlag.None,
|
|
|
|
|
|
_ => PackingFlag.None,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-03 21:59:53 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Relation value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="relation">String to get value from</param>
|
|
|
|
|
|
/// <returns>Relation value corresponding to the string</returns>
|
|
|
|
|
|
public static Relation AsRelation(this string relation)
|
|
|
|
|
|
{
|
|
|
|
|
|
return relation?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"eq" => Relation.Equal,
|
|
|
|
|
|
"ne" => Relation.NotEqual,
|
|
|
|
|
|
"gt" => Relation.GreaterThan,
|
|
|
|
|
|
"le" => Relation.LessThanOrEqual,
|
|
|
|
|
|
"lt" => Relation.LessThan,
|
|
|
|
|
|
"ge" => Relation.GreaterThanOrEqual,
|
|
|
|
|
|
_ => Relation.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-23 15:34:42 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Runnable value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="runnable">String to get value from</param>
|
|
|
|
|
|
/// <returns>Runnable value corresponding to the string</returns>
|
|
|
|
|
|
public static Runnable AsRunnable(this string runnable)
|
|
|
|
|
|
{
|
|
|
|
|
|
return runnable?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"no" => Runnable.No,
|
|
|
|
|
|
"partial" => Runnable.Partial,
|
|
|
|
|
|
"yes" => Runnable.Yes,
|
|
|
|
|
|
_ => Runnable.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-31 23:01:51 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get SoftwareListStatus value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="status">String to get value from</param>
|
|
|
|
|
|
/// <returns>SoftwareListStatus value corresponding to the string</returns>
|
|
|
|
|
|
public static SoftwareListStatus AsSoftwareListStatus(this string status)
|
|
|
|
|
|
{
|
|
|
|
|
|
return status?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"original" => SoftwareListStatus.Original,
|
|
|
|
|
|
"compatible" => SoftwareListStatus.Compatible,
|
|
|
|
|
|
"none" => SoftwareListStatus.NULL,
|
|
|
|
|
|
_ => SoftwareListStatus.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-22 13:31:13 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get Supported value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="supported">String to get value from</param>
|
|
|
|
|
|
/// <returns>Supported value corresponding to the string</returns>
|
|
|
|
|
|
public static Supported AsSupported(this string supported)
|
|
|
|
|
|
{
|
|
|
|
|
|
return supported?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"no" => Supported.No,
|
2020-09-02 15:38:10 -07:00
|
|
|
|
"unsupported" => Supported.No,
|
2020-08-22 13:31:13 -07:00
|
|
|
|
"partial" => Supported.Partial,
|
|
|
|
|
|
"yes" => Supported.Yes,
|
2020-09-02 15:38:10 -07:00
|
|
|
|
"supported" => Supported.Yes,
|
2020-08-22 13:31:13 -07:00
|
|
|
|
_ => Supported.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-02 15:38:10 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get SupportStatus value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="supported">String to get value from</param>
|
|
|
|
|
|
/// <returns>SupportStatus value corresponding to the string</returns>
|
|
|
|
|
|
public static SupportStatus AsSupportStatus(this string supportStatus)
|
|
|
|
|
|
{
|
|
|
|
|
|
return supportStatus?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"good" => SupportStatus.Good,
|
|
|
|
|
|
"imperfect" => SupportStatus.Imperfect,
|
|
|
|
|
|
"preliminary" => SupportStatus.Preliminary,
|
|
|
|
|
|
_ => SupportStatus.NULL,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-07-15 09:41:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get bool? value from input string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="yesno">String to get value from</param>
|
|
|
|
|
|
/// <returns>bool? corresponding to the string</returns>
|
|
|
|
|
|
public static bool? AsYesNo(this string yesno)
|
|
|
|
|
|
{
|
|
|
|
|
|
return yesno?.ToLowerInvariant() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"yes" => true,
|
2020-07-28 17:00:19 -07:00
|
|
|
|
"true" => true,
|
2020-07-15 09:41:59 -07:00
|
|
|
|
"no" => false,
|
2020-07-28 17:00:19 -07:00
|
|
|
|
"false" => false,
|
2020-08-23 22:54:09 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2023-04-19 17:35:20 -04:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get a set of mappings from strings to enum values
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="type">Enum type to generate from</param>
|
|
|
|
|
|
/// <returns>Dictionary of string to enum values</returns>
|
|
|
|
|
|
private static Dictionary<string, T> GenerateToEnum<T>(Type type)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// Get all of the values for the enum type
|
|
|
|
|
|
var values = Enum.GetValues(type);
|
|
|
|
|
|
|
|
|
|
|
|
// Build the output dictionary
|
|
|
|
|
|
Dictionary<string, T> mappings = new();
|
|
|
|
|
|
foreach (T value in values)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Try to get the mapping attribute
|
|
|
|
|
|
MappingAttribute attr = AttributeHelper<T>.GetAttribute(value);
|
|
|
|
|
|
if (attr?.Mappings == null || !attr.Mappings.Any())
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
// Loop through the mappings and add each
|
|
|
|
|
|
foreach (string mapString in attr.Mappings)
|
|
|
|
|
|
{
|
|
|
|
|
|
mappings[mapString] = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Return the output dictionary
|
|
|
|
|
|
return mappings;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch
|
|
|
|
|
|
{
|
|
|
|
|
|
// This should not happen, only if the type was not an enum
|
|
|
|
|
|
return new Dictionary<string, T>();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-08-23 22:54:09 -07:00
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Enum to String
|
|
|
|
|
|
|
2020-09-02 14:32:16 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input ChipType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="chipType">ChipType to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the ChipType</returns>
|
|
|
|
|
|
public static string FromChipType(this ChipType chipType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return chipType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
ChipType.CPU => "cpu",
|
|
|
|
|
|
ChipType.Audio => "audio",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-06 23:00:13 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input ControlType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="controlType">ControlType to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the ControlType</returns>
|
|
|
|
|
|
public static string FromControlType(this ControlType controlType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return controlType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
ControlType.Joy => "joy",
|
|
|
|
|
|
ControlType.Stick => "stick",
|
|
|
|
|
|
ControlType.Paddle => "paddle",
|
|
|
|
|
|
ControlType.Pedal => "pedal",
|
|
|
|
|
|
ControlType.Lightgun => "lightgun",
|
|
|
|
|
|
ControlType.Positional => "positional",
|
|
|
|
|
|
ControlType.Dial => "dial",
|
|
|
|
|
|
ControlType.Trackball => "trackball",
|
|
|
|
|
|
ControlType.Mouse => "mouse",
|
|
|
|
|
|
ControlType.OnlyButtons => "only_buttons",
|
|
|
|
|
|
ControlType.Keypad => "keypad",
|
|
|
|
|
|
ControlType.Keyboard => "keyboard",
|
|
|
|
|
|
ControlType.Mahjong => "mahjong",
|
|
|
|
|
|
ControlType.Hanafuda => "hanafuda",
|
|
|
|
|
|
ControlType.Gambling => "gambling",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-07 00:39:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input DeviceType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="deviceType">vDeviceType to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the DeviceType</returns>
|
|
|
|
|
|
public static string FromDeviceType(this DeviceType deviceType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return deviceType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
DeviceType.Unknown => "unknown",
|
|
|
|
|
|
DeviceType.Cartridge => "cartridge",
|
|
|
|
|
|
DeviceType.FloppyDisk => "floppydisk",
|
|
|
|
|
|
DeviceType.HardDisk => "harddisk",
|
|
|
|
|
|
DeviceType.Cylinder => "cylinder",
|
|
|
|
|
|
DeviceType.Cassette => "cassette",
|
|
|
|
|
|
DeviceType.PunchCard => "punchcard",
|
|
|
|
|
|
DeviceType.PunchTape => "punchtape",
|
|
|
|
|
|
DeviceType.Printout => "printout",
|
|
|
|
|
|
DeviceType.Serial => "serial",
|
|
|
|
|
|
DeviceType.Parallel => "parallel",
|
|
|
|
|
|
DeviceType.Snapshot => "snapshot",
|
|
|
|
|
|
DeviceType.QuickLoad => "quickload",
|
|
|
|
|
|
DeviceType.MemCard => "memcard",
|
|
|
|
|
|
DeviceType.CDROM => "cdrom",
|
|
|
|
|
|
DeviceType.MagTape => "magtape",
|
|
|
|
|
|
DeviceType.ROMImage => "romimage",
|
|
|
|
|
|
DeviceType.MIDIIn => "midiin",
|
|
|
|
|
|
DeviceType.MIDIOut => "midiout",
|
|
|
|
|
|
DeviceType.Picture => "picture",
|
|
|
|
|
|
DeviceType.VidFile => "vidfile",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-03 21:32:00 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input DisplayType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="displayType">DisplayType to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the DisplayType</returns>
|
|
|
|
|
|
public static string FromDisplayType(this DisplayType displayType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return displayType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
DisplayType.Raster => "raster",
|
|
|
|
|
|
DisplayType.Vector => "vector",
|
|
|
|
|
|
DisplayType.LCD => "lcd",
|
|
|
|
|
|
DisplayType.SVG => "svg",
|
|
|
|
|
|
DisplayType.Unknown => "unknown",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-03 21:39:16 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input Endianness
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="endianness">Endianness to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the Endianness</returns>
|
|
|
|
|
|
public static string FromEndianness(this Endianness endianness)
|
|
|
|
|
|
{
|
|
|
|
|
|
return endianness switch
|
|
|
|
|
|
{
|
|
|
|
|
|
Endianness.Big => "big",
|
|
|
|
|
|
Endianness.Little => "little",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-02 14:32:16 -07:00
|
|
|
|
/// <summary>
|
2020-09-02 14:34:41 -07:00
|
|
|
|
/// Get string value from input FeatureStatus
|
2020-09-02 14:32:16 -07:00
|
|
|
|
/// </summary>
|
2020-09-02 14:34:41 -07:00
|
|
|
|
/// <param name="featureStatus">FeatureStatus to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the FeatureStatus</returns>
|
|
|
|
|
|
public static string FromFeatureStatus(this FeatureStatus featureStatus)
|
2020-09-02 14:32:16 -07:00
|
|
|
|
{
|
2020-09-02 14:34:41 -07:00
|
|
|
|
return featureStatus switch
|
2020-09-02 14:32:16 -07:00
|
|
|
|
{
|
2020-09-02 14:34:41 -07:00
|
|
|
|
FeatureStatus.Unemulated => "unemulated",
|
|
|
|
|
|
FeatureStatus.Imperfect => "imperfect",
|
2020-09-02 14:32:16 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-02 14:04:02 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input FeatureType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="featureType">FeatureType to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the FeatureType</returns>
|
|
|
|
|
|
public static string FromFeatureType(this FeatureType featureType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return featureType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
FeatureType.Protection => "protection",
|
|
|
|
|
|
FeatureType.Palette => "palette",
|
|
|
|
|
|
FeatureType.Graphics => "graphics",
|
|
|
|
|
|
FeatureType.Sound => "sound",
|
|
|
|
|
|
FeatureType.Controls => "controls",
|
|
|
|
|
|
FeatureType.Keyboard => "keyboard",
|
|
|
|
|
|
FeatureType.Mouse => "mouse",
|
|
|
|
|
|
FeatureType.Microphone => "microphone",
|
|
|
|
|
|
FeatureType.Camera => "camera",
|
|
|
|
|
|
FeatureType.Disk => "disk",
|
|
|
|
|
|
FeatureType.Printer => "printer",
|
|
|
|
|
|
FeatureType.Lan => "lan",
|
|
|
|
|
|
FeatureType.Wan => "wan",
|
|
|
|
|
|
FeatureType.Timing => "timing",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input ItemStatus
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="status">ItemStatus to get value from</param>
|
|
|
|
|
|
/// <param name="yesno">True to use Yes/No format instead</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the ItemStatus</returns>
|
|
|
|
|
|
public static string FromItemStatus(this ItemStatus status, bool yesno)
|
|
|
|
|
|
{
|
|
|
|
|
|
return status switch
|
|
|
|
|
|
{
|
|
|
|
|
|
ItemStatus.Good => "good",
|
|
|
|
|
|
ItemStatus.BadDump => "baddump",
|
|
|
|
|
|
ItemStatus.Nodump => yesno ? "yes" : "nodump",
|
|
|
|
|
|
ItemStatus.Verified => "verified",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-03 21:32:00 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input LoadFlag
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="loadFlag">LoadFlag to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the LoadFlag</returns>
|
|
|
|
|
|
public static string FromLoadFlag(this LoadFlag loadFlag)
|
|
|
|
|
|
{
|
|
|
|
|
|
return loadFlag switch
|
|
|
|
|
|
{
|
|
|
|
|
|
LoadFlag.Load16Byte => "load16_byte",
|
|
|
|
|
|
LoadFlag.Load16Word => "load16_word",
|
|
|
|
|
|
LoadFlag.Load16WordSwap => "load16_word_swap",
|
|
|
|
|
|
LoadFlag.Load32Byte => "load32_byte",
|
|
|
|
|
|
LoadFlag.Load32Word => "load32_word",
|
|
|
|
|
|
LoadFlag.Load32WordSwap => "load32_word_swap",
|
|
|
|
|
|
LoadFlag.Load32DWord => "load32_dword",
|
|
|
|
|
|
LoadFlag.Load64Word => "load64_word",
|
|
|
|
|
|
LoadFlag.Load64WordSwap => "load64_word_swap",
|
|
|
|
|
|
LoadFlag.Reload => "reload",
|
|
|
|
|
|
LoadFlag.Fill => "fill",
|
|
|
|
|
|
LoadFlag.Continue => "continue",
|
|
|
|
|
|
LoadFlag.ReloadPlain => "reload_plain",
|
|
|
|
|
|
LoadFlag.Ignore => "ignore",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input ItemType?
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="itemType">ItemType? to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the ItemType?</returns>
|
|
|
|
|
|
public static string FromItemType(this ItemType? itemType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return itemType switch
|
|
|
|
|
|
{
|
2020-09-01 11:34:52 -07:00
|
|
|
|
ItemType.Adjuster => "adjuster",
|
2020-09-02 16:31:23 -07:00
|
|
|
|
ItemType.Analog => "analog",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
ItemType.Archive => "archive",
|
|
|
|
|
|
ItemType.BiosSet => "biosset",
|
|
|
|
|
|
ItemType.Blank => "blank",
|
2020-08-25 22:48:46 -07:00
|
|
|
|
ItemType.Chip => "chip",
|
2020-09-02 16:31:23 -07:00
|
|
|
|
ItemType.Condition => "condition",
|
2020-09-01 12:04:35 -07:00
|
|
|
|
ItemType.Configuration => "configuration",
|
2020-09-02 23:02:06 -07:00
|
|
|
|
ItemType.Control => "control",
|
2020-09-04 14:10:35 -07:00
|
|
|
|
ItemType.DataArea => "dataarea",
|
2020-09-02 17:09:19 -07:00
|
|
|
|
ItemType.Device => "device",
|
2020-08-31 23:01:51 -07:00
|
|
|
|
ItemType.DeviceReference => "device_ref",
|
2020-09-01 13:36:32 -07:00
|
|
|
|
ItemType.DipSwitch => "dipswitch",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
ItemType.Disk => "disk",
|
2020-09-04 14:10:35 -07:00
|
|
|
|
ItemType.DiskArea => "diskarea",
|
2020-09-02 21:36:14 -07:00
|
|
|
|
ItemType.Display => "display",
|
2020-09-02 15:38:10 -07:00
|
|
|
|
ItemType.Driver => "driver",
|
2020-09-02 16:37:01 -07:00
|
|
|
|
ItemType.Extension => "extension",
|
2020-09-02 13:31:50 -07:00
|
|
|
|
ItemType.Feature => "feature",
|
2020-09-02 23:31:35 -07:00
|
|
|
|
ItemType.Info => "info",
|
2020-09-02 21:59:26 -07:00
|
|
|
|
ItemType.Input => "input",
|
2020-09-02 16:46:17 -07:00
|
|
|
|
ItemType.Instance => "instance",
|
2020-09-02 22:38:00 -07:00
|
|
|
|
ItemType.Location => "location",
|
2020-08-27 16:57:22 -07:00
|
|
|
|
ItemType.Media => "media",
|
2020-09-04 14:10:35 -07:00
|
|
|
|
ItemType.Part => "part",
|
2020-09-03 13:20:56 -07:00
|
|
|
|
ItemType.PartFeature => "part_feature",
|
2020-09-02 17:22:31 -07:00
|
|
|
|
ItemType.Port => "port",
|
2020-09-01 11:34:52 -07:00
|
|
|
|
ItemType.RamOption => "ramoption",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
ItemType.Release => "release",
|
2023-04-19 12:26:54 -04:00
|
|
|
|
ItemType.ReleaseDetails => "release_details",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
ItemType.Rom => "rom",
|
|
|
|
|
|
ItemType.Sample => "sample",
|
2023-04-19 16:39:58 -04:00
|
|
|
|
ItemType.Serials => "serials",
|
|
|
|
|
|
ItemType.Setting => "setting",
|
2020-09-03 00:48:07 -07:00
|
|
|
|
ItemType.SharedFeature => "sharedfeat",
|
2020-09-01 16:21:55 -07:00
|
|
|
|
ItemType.Slot => "slot",
|
2020-09-02 22:44:54 -07:00
|
|
|
|
ItemType.SlotOption => "slotoption",
|
2020-08-31 23:26:07 -07:00
|
|
|
|
ItemType.SoftwareList => "softwarelist",
|
2020-09-02 12:51:21 -07:00
|
|
|
|
ItemType.Sound => "sound",
|
2023-04-19 12:26:54 -04:00
|
|
|
|
ItemType.SourceDetails => "source_details",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input MachineType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="gametype">MachineType to get value from</param>
|
|
|
|
|
|
/// <param name="romCenter">True to use old naming instead</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the MachineType</returns>
|
|
|
|
|
|
public static string FromMachineType(this MachineType gametype, bool old)
|
|
|
|
|
|
{
|
|
|
|
|
|
return gametype switch
|
|
|
|
|
|
{
|
|
|
|
|
|
MachineType.Bios => "bios",
|
|
|
|
|
|
MachineType.Device => old ? "dev" : "device",
|
|
|
|
|
|
MachineType.Mechanical => old ? "mech" : "mechanical",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input MergingFlag
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="merging">MergingFlag to get value from</param>
|
|
|
|
|
|
/// <param name="romCenter">True to use RomCenter naming instead</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the MergingFlag</returns>
|
|
|
|
|
|
public static string FromMergingFlag(this MergingFlag merging, bool romCenter)
|
|
|
|
|
|
{
|
|
|
|
|
|
return merging switch
|
|
|
|
|
|
{
|
|
|
|
|
|
MergingFlag.Split => "split",
|
|
|
|
|
|
MergingFlag.Merged => "merged",
|
2023-04-19 12:04:25 -04:00
|
|
|
|
MergingFlag.FullMerged => "fullmerged",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
MergingFlag.NonMerged => romCenter ? "unmerged" : "nonmerged",
|
2023-04-19 12:04:25 -04:00
|
|
|
|
MergingFlag.FullNonMerged => "full",
|
|
|
|
|
|
MergingFlag.DeviceNonMerged => "device",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input NodumpFlag
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="nodump">NodumpFlag to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the NodumpFlag</returns>
|
|
|
|
|
|
public static string FromNodumpFlag(this NodumpFlag nodump)
|
|
|
|
|
|
{
|
|
|
|
|
|
return nodump switch
|
|
|
|
|
|
{
|
|
|
|
|
|
NodumpFlag.Obsolete => "obsolete",
|
|
|
|
|
|
NodumpFlag.Required => "required",
|
|
|
|
|
|
NodumpFlag.Ignore => "ignore",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input OpenMSXSubType
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="itemType">OpenMSXSubType to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the OpenMSXSubType</returns>
|
|
|
|
|
|
public static string FromOpenMSXSubType(this OpenMSXSubType itemType)
|
|
|
|
|
|
{
|
|
|
|
|
|
return itemType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
OpenMSXSubType.Rom => "rom",
|
|
|
|
|
|
OpenMSXSubType.MegaRom => "megarom",
|
|
|
|
|
|
OpenMSXSubType.SCCPlusCart => "sccpluscart",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2020-08-28 22:21:35 -07:00
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input PackingFlag
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="packing">PackingFlag to get value from</param>
|
|
|
|
|
|
/// <param name="yesno">True to use Yes/No format instead</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the PackingFlag</returns>
|
|
|
|
|
|
public static string FromPackingFlag(this PackingFlag packing, bool yesno)
|
|
|
|
|
|
{
|
|
|
|
|
|
return packing switch
|
|
|
|
|
|
{
|
|
|
|
|
|
PackingFlag.Zip => yesno ? "yes" : "zip",
|
2021-09-20 09:30:11 -07:00
|
|
|
|
PackingFlag.Unzip => yesno ? "no" : "unzip",
|
2020-08-28 19:15:23 -07:00
|
|
|
|
PackingFlag.Partial => "partial",
|
|
|
|
|
|
PackingFlag.Flat => "flat",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-03 21:59:53 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input Relation
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="relation">Relation to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the Relation</returns>
|
|
|
|
|
|
public static string FromRelation(this Relation relation)
|
|
|
|
|
|
{
|
|
|
|
|
|
return relation switch
|
|
|
|
|
|
{
|
|
|
|
|
|
Relation.Equal => "eq",
|
|
|
|
|
|
Relation.NotEqual => "ne",
|
|
|
|
|
|
Relation.GreaterThan => "gt",
|
|
|
|
|
|
Relation.LessThanOrEqual => "le",
|
|
|
|
|
|
Relation.LessThan => "lt",
|
|
|
|
|
|
Relation.GreaterThanOrEqual => "ge",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input Runnable
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="runnable">Runnable to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the Runnable</returns>
|
|
|
|
|
|
public static string FromRunnable(this Runnable runnable)
|
|
|
|
|
|
{
|
|
|
|
|
|
return runnable switch
|
|
|
|
|
|
{
|
|
|
|
|
|
Runnable.No => "no",
|
|
|
|
|
|
Runnable.Partial => "partial",
|
|
|
|
|
|
Runnable.Yes => "yes",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-31 23:01:51 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input SoftwareListStatus
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="status">SoftwareListStatus to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the SoftwareListStatus</returns>
|
|
|
|
|
|
public static string FromSoftwareListStatus(this SoftwareListStatus status)
|
|
|
|
|
|
{
|
|
|
|
|
|
return status switch
|
|
|
|
|
|
{
|
|
|
|
|
|
SoftwareListStatus.Original => "original",
|
|
|
|
|
|
SoftwareListStatus.Compatible => "compatible",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input Supported
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="supported">Supported to get value from</param>
|
2020-09-02 15:38:10 -07:00
|
|
|
|
/// <param name="verbose">True to use verbose output, false otherwise</param>
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <returns>String value corresponding to the Supported</returns>
|
2020-09-02 15:38:10 -07:00
|
|
|
|
public static string FromSupported(this Supported supported, bool verbose)
|
2020-08-24 13:21:59 -07:00
|
|
|
|
{
|
|
|
|
|
|
return supported switch
|
|
|
|
|
|
{
|
2020-12-14 16:01:28 -08:00
|
|
|
|
Supported.No => verbose ? "unsupported" : "no",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
Supported.Partial => "partial",
|
2020-12-14 16:01:28 -08:00
|
|
|
|
Supported.Yes => verbose ? "supported" : "yes",
|
2020-08-24 13:21:59 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2020-08-24 00:25:23 -07:00
|
|
|
|
|
2020-09-02 15:38:10 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input SupportStatus
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="supportStatus">SupportStatus to get value from</param>
|
|
|
|
|
|
/// <returns>String value corresponding to the SupportStatus</returns>
|
|
|
|
|
|
public static string FromSupportStatus(this SupportStatus supportStatus)
|
|
|
|
|
|
{
|
|
|
|
|
|
return supportStatus switch
|
|
|
|
|
|
{
|
|
|
|
|
|
SupportStatus.Good => "good",
|
|
|
|
|
|
SupportStatus.Imperfect => "imperfect",
|
|
|
|
|
|
SupportStatus.Preliminary => "preliminary",
|
|
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-23 22:54:09 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get string value from input bool?
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="yesno">bool? to get value from</param>
|
2020-08-24 13:21:59 -07:00
|
|
|
|
/// <returns>String corresponding to the bool?</returns>
|
2020-08-23 22:54:09 -07:00
|
|
|
|
public static string FromYesNo(this bool? yesno)
|
|
|
|
|
|
{
|
|
|
|
|
|
return yesno switch
|
|
|
|
|
|
{
|
|
|
|
|
|
true => "yes",
|
|
|
|
|
|
false => "no",
|
2020-07-15 09:41:59 -07:00
|
|
|
|
_ => null,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2020-08-24 13:21:59 -07:00
|
|
|
|
|
2023-04-19 17:35:20 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Get a set of mappings from enum values to string
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="type">Enum type to generate from</param>
|
|
|
|
|
|
/// <returns>Dictionary of enum to string values</returns>
|
|
|
|
|
|
private static Dictionary<T, string> GenerateToString<T>(Type type)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// Get all of the values for the enum type
|
|
|
|
|
|
var values = Enum.GetValues(type);
|
|
|
|
|
|
|
|
|
|
|
|
// Build the output dictionary
|
|
|
|
|
|
Dictionary<T, string> mappings = new();
|
|
|
|
|
|
foreach (T value in values)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Try to get the mapping attribute
|
|
|
|
|
|
MappingAttribute attr = AttributeHelper<T>.GetAttribute(value);
|
|
|
|
|
|
if (attr?.Mappings == null || !attr.Mappings.Any())
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
// Always use the first value in the list
|
|
|
|
|
|
mappings[value] = attr.Mappings[0];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Return the output dictionary
|
|
|
|
|
|
return mappings;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch
|
|
|
|
|
|
{
|
|
|
|
|
|
// This should not happen, only if the type was not an enum
|
|
|
|
|
|
return new Dictionary<T, string>();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-24 13:21:59 -07:00
|
|
|
|
#endregion
|
2020-07-15 09:41:59 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|