From e5954a7e3abf8eacded2c5f8fd06a6306630f3b0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 2 Aug 2019 08:29:11 +0200 Subject: Add new core options --- libretro_core_options.h | 965 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 965 insertions(+) create mode 100644 libretro_core_options.h (limited to 'libretro_core_options.h') diff --git a/libretro_core_options.h b/libretro_core_options.h new file mode 100644 index 0000000..c1f2490 --- /dev/null +++ b/libretro_core_options.h @@ -0,0 +1,965 @@ +#ifndef LIBRETRO_CORE_OPTIONS_H__ +#define LIBRETRO_CORE_OPTIONS_H__ + +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ******************************** + * Core Option Definitions + ******************************** +*/ + +/* RETRO_LANGUAGE_ENGLISH */ + +/* Default language: + * - All other languages must include the same keys and values + * - Will be used as a fallback in the event that frontend language + * is not available + * - Will be used as a fallback for any missing entries in + * frontend language definition */ + +struct retro_core_option_definition option_defs_us[] = { + + /* These variable names and possible values constitute an ABI with ZMZ (ZSNES Libretro player). + * Changing "Show layer 1" is fine, but don't change "layer_1"/etc or the possible values ("Yes|No"). + * Adding more variables and rearranging them is safe. */ + + { + "catsfc_VideoMode", + "Video Mode", + "Awaiting description.", + { + { "auto", NULL }, + { "NTSC", NULL }, + { "PAL", NULL }, + { NULL, NULL}, + }, + "auto" + }, + { + "catsfc_overclock_cycles", + "Reduce Slowdown (Hack, Unsafe, Restart)", + "Many games for the SNES suffered from slowdown due to the weak main CPU. This option helps allievate that at the cost of possible bugs. COMPATIBLE: Reduce slowdown but keep as much game compatibility as much as possible. MAX: Reduce slowdown as much as possible but will break more games.", + { + { "disabled", NULL }, + { "compatible", NULL }, + { "max", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "catsfc_next_reduce_sprite_flicker", + "Reduce Flickering (Hack, Unsafe)", + "Raises sprite limit to reduce flickering in games.", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { NULL, NULL, NULL, {{0}}, NULL }, +}; + +/* RETRO_LANGUAGE_JAPANESE */ + +/* RETRO_LANGUAGE_FRENCH */ + +/* RETRO_LANGUAGE_SPANISH */ + +/* RETRO_LANGUAGE_GERMAN */ + +/* RETRO_LANGUAGE_ITALIAN */ + +/* RETRO_LANGUAGE_DUTCH */ + +/* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */ + +/* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */ + +/* RETRO_LANGUAGE_RUSSIAN */ + +/* RETRO_LANGUAGE_KOREAN */ + +/* RETRO_LANGUAGE_CHINESE_TRADITIONAL */ + +/* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */ + +/* RETRO_LANGUAGE_ESPERANTO */ + +/* RETRO_LANGUAGE_POLISH */ + +/* RETRO_LANGUAGE_VIETNAMESE */ + +/* RETRO_LANGUAGE_ARABIC */ + +/* RETRO_LANGUAGE_GREEK */ + +/* RETRO_LANGUAGE_TURKISH */ + +struct retro_core_option_definition option_defs_tr[] = { + + /* These variable names and possible values constitute an ABI with ZMZ (ZSNES Libretro player). + * Changing "Show layer 1" is fine, but don't change "layer_1"/etc or the possible values ("Yes|No"). + * Adding more variables and rearranging them is safe. */ + { + "snes9x_region", + "Konsol Bölgesi (Core Yenilenir)", + "Sistemin hangi bölgeden olduğunu belirtir.. 'PAL' 50hz'dir, 'NTSC' ise 60hz. Yanlış bölge seçiliyse, oyunlar normalden daha hızlı veya daha yavaş çalışacaktır.", + { + { "auto", "Otomatik" }, + { "ntsc", "NTSC" }, + { "pal", "PAL" }, + { NULL, NULL}, + }, + "auto" + }, + { + "snes9x_aspect", + "Tercih Edilen En Boy Oranı", + "Tercih edilen içerik en boy oranını seçin. Bu, yalnızca RetroArch’ın en boy oranı Video ayarlarında 'Core tarafından' olarak ayarlandığında uygulanacaktır.", + { + { "4:3", NULL }, + { "uncorrected", "Düzeltilmemiş" }, + { "auto", "Otomatik" }, + { "ntsc", "NTSC" }, + { "pal", "PAL" }, + { NULL, NULL}, + }, + "4:3" + }, + { + "snes9x_overscan", + "Aşırı Taramayı Kırp", + "Ekranın üst ve alt kısmındaki ~8 piksel sınırlarını, tipik olarak standart çözünürlüklü bir televizyondakini kaldırır. 'Otomatik' ise geçerli içeriğe bağlı olarak aşırı taramayı algılamaya ve kırpmaya çalışacaktır.", + { + { "enabled", NULL }, + { "disabled", NULL }, + { "auto", "Otomatik" }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_gfx_hires", + "Hi-Res Modunu Etkinleştir", + "Oyunların hi-res moduna (512x448) geçmesine izin verir veya tüm içeriği 256x224'te (ezilmiş piksellerle) çıkmaya zorlar.", + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_hires_blend", + "Hi-Res Karışımı", + "Oyun hi-res moduna geçtiğinde pikselleri karıştırır (512x448). Şeffaflık efektleri üretmek için hi-res modunu kullanan bazı oyunlar için gereklidir (Kirby's Dream Land, Jurassic Park ...).", + { + { "disabled", NULL }, + { "merge", "Birlşetir" }, + { "blur", "Bulanıklaştır" }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_blargg", + "Blargg NTSC Filtresi", + "Çeşitli NTSC TV sinyallerini taklit etmek için bir video filtresi uygular.", + { + { "disabled", NULL }, + { "monochrome", "Monochrome" }, + { "rf", "RF" }, + { "composite", "Composite" }, + { "s-video", "S-Video" }, + { "rgb", "RGB" }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_audio_interpolation", + "Ses Enterpolasyonu", + "Belirtilen ses filtresini uygular. 'Gaussian', orijinal donanımın bas ağırlıklı sesini üretir. 'Cubic' ve 'Sinc' daha az doğrudur ve daha fazla aralığı korur.", + { + { "gaussian", "Gaussian" }, + { "cubic", "Cubic" }, + { "sinc", "Sinc" }, + { "none", "Hiçbiri" }, + { "linear", "Linear" }, + { NULL, NULL}, + }, + "gaussian" + }, + { + "snes9x_up_down_allowed", + "Karşı Yönlere İzin Ver", + "Bunu etkinleştirmek aynı anda hem sola hem de sağa (veya yukarı ve aşağı) yönlere basma / hızlı değiştirme / tutma imkanı sağlar. Bu harekete dayalı hatalara neden olabilir.", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled" + }, + { + "snes9x_overclock_superfx", + "SuperFX Hız Aşırtma", + "SuperFX işlemcisi frekans çarpanıdır. Kare hızını artırabilir veya zamanlama hatalarına neden olabilir. % 100'ün altındaki değerler yavaş cihazlarda oyun performansını artırabilir.", + { + { "50%", NULL }, + { "60%", NULL }, + { "70%", NULL }, + { "80%", NULL }, + { "90%", NULL }, + { "100%", NULL }, + { "150%", NULL }, + { "200%", NULL }, + { "250%", NULL }, + { "300%", NULL }, + { "350%", NULL }, + { "400%", NULL }, + { "450%", NULL }, + { "500%", NULL }, + { NULL, NULL}, + }, + "100%" + }, + { + "snes9x_overclock_cycles", + "Yavaşlamayı Azalt (Hack, Güvensiz)", + "SNES İşlemcisi için hız aşırtmadır. Oyunların çökmesine neden olabilir! Daha kısa yükleme süreleri için 'Hafif'i, yavaşlama gösteren oyunların çoğunda' Uyumlu 've yalnızca kesinlikle gerekliyse' Maks 'kullanın (Gradius 3, Süper R tipi ...).", + { + { "disabled", NULL }, + { "light", "Hafif" }, + { "compatible", "Uyumlu" }, + { "max", "Maks" }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_reduce_sprite_flicker", + "Kırılmayı Azalt (Hack, Güvensiz)", + "Ekranda aynı anda çizilebilen sprite sayısını arttırır.", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_randomize_memory", + "Belleği Rastgele Kıl (Güvensiz)", + "Başlatıldığında sistem RAM'ını rastgele ayarlar. 'Super Off Road' gibi bazı oyunlar, oyunu daha öngörülemeyen hale getirmek için öğe yerleştirme ve AI davranışı için rastgele sayı üreticisi olarak sistem RAM'ini kullanır.", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_block_invalid_vram_access", + "Geçersiz VRAM Erişimini Engelle", + "Bazı Homebrew/ROM'lar, doğru işlem için bu seçeneğin devre dışı bırakılmasını gerektirir.", + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_echo_buffer_hack", + "Eko Tampon Hack (Güvenli değil, yalnızca eski addmusic için etkinleştirin)", + "Bazı Homebrew/ROM'lar, doğru işlem için bu seçeneğin devre dışı bırakılmasını gerektirir.", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_show_lightgun_settings", + "Light Gun Ayarlarını Göster", + "Super Scope / Justifier / M.A.C.S. için tüfek girişi yapılandırmasını etkinleştir. NOT: Bu ayarın etkili olabilmesi için Hızlı Menü’nün açılması gerekir.", + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_lightgun_mode", + "Light Gun Modu", + "Fare kontrollü 'Light Gun' veya 'Dokunmatik Ekran' girişini kullanın.", + { + { "Lightgun", "Light Gun" }, + { "Touchscreen", "Dokunmatik Ekran" }, + { NULL, NULL}, + }, + "Lightgun" + }, + { + "snes9x_superscope_reverse_buttons", + "Super Scope Ters Tetik Düğmeleri", + "Süper Scope için 'Ateş' ve 'İmleç' butonlarının pozisyonlarını değiştir.", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_superscope_crosshair", + "Super Scope İmkeç", + "Ekrandaki imleç işaretini değiştirin.", + { + { "0", NULL }, + { "1", NULL }, + { "2", NULL }, + { "3", NULL }, + { "4", NULL }, + { "5", NULL }, + { "6", NULL }, + { "7", NULL }, + { "8", NULL }, + { "9", NULL }, + { "10", NULL }, + { "11", NULL }, + { "12", NULL }, + { "13", NULL }, + { "14", NULL }, + { "15", NULL }, + { "16", NULL }, + { NULL, NULL}, + }, + "2" + }, + { + "snes9x_superscope_color", + "Super Scope Rengi", + "Ekrandaki imleç işaretinin rengini değiştirin.", + { + { "White", NULL }, + { "White (blend)", NULL }, + { "Red", NULL }, + { "Red (blend)", NULL }, + { "Orange", NULL }, + { "Orange (blend)", NULL }, + { "Yellow", NULL }, + { "Yellow (blend)", NULL }, + { "Green", NULL }, + { "Green (blend)", NULL }, + { "Cyan", NULL }, + { "Cyan (blend)", NULL }, + { "Sky", NULL }, + { "Sky (blend)", NULL }, + { "Blue", NULL }, + { "Blue (blend)", NULL }, + { "Violet", NULL }, + { "Violet (blend)", NULL }, + { "Pink", NULL }, + { "Pink (blend)", NULL }, + { "Purple", NULL }, + { "Purple (blend)", NULL }, + { "Black", NULL }, + { "Black (blend)", NULL }, + { "25% Grey", NULL }, + { "25% Grey (blend)", NULL }, + { "50% Grey", NULL }, + { "50% Grey (blend)", NULL }, + { "75% Grey", NULL }, + { "75% Grey (blend)", NULL }, + { NULL, NULL}, + }, + "White" + }, + { + "snes9x_justifier1_crosshair", + "Justifier 1 İmleci", + "Ekrandaki imleç işaretinin boyutunu değiştirin.", + { + { "0", NULL }, + { "1", NULL }, + { "2", NULL }, + { "3", NULL }, + { "4", NULL }, + { "5", NULL }, + { "6", NULL }, + { "7", NULL }, + { "8", NULL }, + { "9", NULL }, + { "10", NULL }, + { "11", NULL }, + { "12", NULL }, + { "13", NULL }, + { "14", NULL }, + { "15", NULL }, + { "16", NULL }, + { NULL, NULL}, + }, + "4" + }, + { + "snes9x_justifier1_color", + "Justifier 1 Rengi", + "Ekrandaki imleç işaretinin rengini değiştirin.", + { + { "Blue", NULL }, + { "Blue (blend)", NULL }, + { "Violet", NULL }, + { "Violet (blend)", NULL }, + { "Pink", NULL }, + { "Pink (blend)", NULL }, + { "Purple", NULL }, + { "Purple (blend)", NULL }, + { "Black", NULL }, + { "Black (blend)", NULL }, + { "25% Grey", NULL }, + { "25% Grey (blend)", NULL }, + { "50% Grey", NULL }, + { "50% Grey (blend)", NULL }, + { "75% Grey", NULL }, + { "75% Grey (blend)", NULL }, + { "White", NULL }, + { "White (blend)", NULL }, + { "Red", NULL }, + { "Red (blend)", NULL }, + { "Orange", NULL }, + { "Orange (blend)", NULL }, + { "Yellow", NULL }, + { "Yellow (blend)", NULL }, + { "Green", NULL }, + { "Green (blend)", NULL }, + { "Cyan", NULL }, + { "Cyan (blend)", NULL }, + { "Sky", NULL }, + { "Sky (blend)", NULL }, + { NULL, NULL}, + }, + "Blue" + }, + { + "snes9x_justifier2_crosshair", + "Justifier 2 İmleci", + "Ekrandaki imleç işaretinin boyutunu değiştirin.", + { + { "0", NULL }, + { "1", NULL }, + { "2", NULL }, + { "3", NULL }, + { "4", NULL }, + { "5", NULL }, + { "6", NULL }, + { "7", NULL }, + { "8", NULL }, + { "9", NULL }, + { "10", NULL }, + { "11", NULL }, + { "12", NULL }, + { "13", NULL }, + { "14", NULL }, + { "15", NULL }, + { "16", NULL }, + { NULL, NULL}, + }, + "4" + }, + { + "snes9x_justifier2_color", + "Justifier 2 REngi", + "Ekrandaki imleç işaretinin rengini değiştirin.", + { + { "Pink", NULL }, + { "Pink (blend)", NULL }, + { "Purple", NULL }, + { "Purple (blend)", NULL }, + { "Black", NULL }, + { "Black (blend)", NULL }, + { "25% Grey", NULL }, + { "25% Grey (blend)", NULL }, + { "50% Grey", NULL }, + { "50% Grey (blend)", NULL }, + { "75% Grey", NULL }, + { "75% Grey (blend)", NULL }, + { "White", NULL }, + { "White (blend)", NULL }, + { "Red", NULL }, + { "Red (blend)", NULL }, + { "Orange", NULL }, + { "Orange (blend)", NULL }, + { "Yellow", NULL }, + { "Yellow (blend)", NULL }, + { "Green", NULL }, + { "Green (blend)", NULL }, + { "Cyan", NULL }, + { "Cyan (blend)", NULL }, + { "Sky", NULL }, + { "Sky (blend)", NULL }, + { "Blue", NULL }, + { "Blue (blend)", NULL }, + { "Violet", NULL }, + { "Violet (blend)", NULL }, + { NULL, NULL}, + }, + "Pink" + }, + { + "snes9x_rifle_crosshair", + "M.A.C.S. Tüfek ", + "Ekrandaki imleç işaretinin rengini değiştirin..", + { + { "0", NULL }, + { "1", NULL }, + { "2", NULL }, + { "3", NULL }, + { "4", NULL }, + { "5", NULL }, + { "6", NULL }, + { "7", NULL }, + { "8", NULL }, + { "9", NULL }, + { "10", NULL }, + { "11", NULL }, + { "12", NULL }, + { "13", NULL }, + { "14", NULL }, + { "15", NULL }, + { "16", NULL }, + { NULL, NULL}, + }, + "2" + }, + { + "snes9x_rifle_color", + "M.A.C.S. Tüfek Rengi", + "Ekrandaki imleç işaretinin rengini değiştirin.", + { + { "White", NULL }, + { "White (blend)", NULL }, + { "Red", NULL }, + { "Red (blend)", NULL }, + { "Orange", NULL }, + { "Orange (blend)", NULL }, + { "Yellow", NULL }, + { "Yellow (blend)", NULL }, + { "Green", NULL }, + { "Green (blend)", NULL }, + { "Cyan", NULL }, + { "Cyan (blend)", NULL }, + { "Sky", NULL }, + { "Sky (blend)", NULL }, + { "Blue", NULL }, + { "Blue (blend)", NULL }, + { "Violet", NULL }, + { "Violet (blend)", NULL }, + { "Pink", NULL }, + { "Pink (blend)", NULL }, + { "Purple", NULL }, + { "Purple (blend)", NULL }, + { "Black", NULL }, + { "Black (blend)", NULL }, + { "25% Grey", NULL }, + { "25% Grey (blend)", NULL }, + { "50% Grey", NULL }, + { "50% Grey (blend)", NULL }, + { "75% Grey", NULL }, + { "75% Grey (blend)", NULL }, + { NULL, NULL}, + }, + "White" + }, + { + "snes9x_show_advanced_av_settings", + "Gelişmiş Ses/Video Ayarlarını Göster", + "Düşük seviye video katmanı / GFX etkisi / ses kanalı parametrelerinin yapılandırılmasını etkinleştirir. NOT: Bu ayarın etkili olabilmesi için Hızlı Menü’nün açılması gerekir.", + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + "snes9x_layer_1", + "1. Katmanı Göster", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_layer_2", + "2. Katmanı Göster", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_layer_3", + "3. Katmanı Göster", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_layer_4", + "4. Katmanı Göster", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_layer_5", + "Sprite Katmanını Göster", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_gfx_clip", + "Grafik Klibi Pencerelerini Etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_gfx_transp", + "Saydamlık Efektlerini Etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_1", + "Ses Kanalı 1'i etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_2", + "Ses Kanalı 2'yi etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_3", + "Ses Kanalı 3'ü etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_4", + "Ses Kanalı 4'ü etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_5", + "Ses Kanalı 5'i etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_6", + "Ses Kanalı 6'yı etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_7", + "Ses Kanalı 7'yi etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { + "snes9x_sndchan_8", + "Ses Kanalı 8'i etkinleştir", + NULL, + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "enabled" + }, + { NULL, NULL, NULL, {{0}}, NULL }, +}; + +/* + ******************************** + * Language Mapping + ******************************** +*/ + +struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = { + option_defs_us, /* RETRO_LANGUAGE_ENGLISH */ + NULL, /* RETRO_LANGUAGE_JAPANESE */ + NULL, /* RETRO_LANGUAGE_FRENCH */ + NULL, /* RETRO_LANGUAGE_SPANISH */ + NULL, /* RETRO_LANGUAGE_GERMAN */ + NULL, /* RETRO_LANGUAGE_ITALIAN */ + NULL, /* RETRO_LANGUAGE_DUTCH */ + NULL, /* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */ + NULL, /* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */ + NULL, /* RETRO_LANGUAGE_RUSSIAN */ + NULL, /* RETRO_LANGUAGE_KOREAN */ + NULL, /* RETRO_LANGUAGE_CHINESE_TRADITIONAL */ + NULL, /* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */ + NULL, /* RETRO_LANGUAGE_ESPERANTO */ + NULL, /* RETRO_LANGUAGE_POLISH */ + NULL, /* RETRO_LANGUAGE_VIETNAMESE */ + NULL, /* RETRO_LANGUAGE_ARABIC */ + NULL, /* RETRO_LANGUAGE_GREEK */ + option_defs_tr, /* RETRO_LANGUAGE_TURKISH */ +}; + +/* + ******************************** + * Functions + ******************************** +*/ + +/* Handles configuration/setting of core options. + * Should only be called inside retro_set_environment(). + * > We place the function body in the header to avoid the + * necessity of adding more .c files (i.e. want this to + * be as painless as possible for core devs) + */ + +static INLINE void libretro_set_core_options(retro_environment_t environ_cb) +{ + unsigned version = 0; + + if (!environ_cb) + return; + + if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version == 1)) + { + struct retro_core_options_intl core_options_intl; + unsigned language = 0; + + core_options_intl.us = option_defs_us; + core_options_intl.local = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) && + (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH)) + core_options_intl.local = option_defs_intl[language]; + + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_intl); + } + else + { + size_t i; + size_t option_index = 0; + size_t num_options = 0; + struct retro_variable *variables = NULL; + char **values_buf = NULL; + + /* Determine number of options + * > Note: We are going to skip a number of irrelevant + * core options when building the retro_variable array, + * but we'll allocate space for all of them. The difference + * in resource usage is negligible, and this allows us to + * keep the code 'cleaner' */ + while (true) + { + if (option_defs_us[num_options].key) + num_options++; + else + break; + } + + /* Allocate arrays */ + variables = (struct retro_variable *)calloc(num_options + 1, sizeof(struct retro_variable)); + values_buf = (char **)calloc(num_options, sizeof(char *)); + + if (!variables || !values_buf) + goto error; + + /* Copy parameters from option_defs_us array */ + for (i = 0; i < num_options; i++) + { + const char *key = option_defs_us[i].key; + const char *desc = option_defs_us[i].desc; + const char *default_value = option_defs_us[i].default_value; + struct retro_core_option_value *values = option_defs_us[i].values; + size_t buf_len = 3; + size_t default_index = 0; + + values_buf[i] = NULL; + + /* Skip options that are irrelevant when using the + * old style core options interface */ + if ((strcmp(key, "snes9x_show_lightgun_settings") == 0) || + (strcmp(key, "snes9x_show_advanced_av_settings") == 0)) + continue; + + if (desc) + { + size_t num_values = 0; + + /* Determine number of values */ + while (true) + { + if (values[num_values].value) + { + /* Check if this is the default value */ + if (default_value) + if (strcmp(values[num_values].value, default_value) == 0) + default_index = num_values; + + buf_len += strlen(values[num_values].value); + num_values++; + } + else + break; + } + + /* Build values string */ + if (num_values > 1) + { + size_t j; + + buf_len += num_values - 1; + buf_len += strlen(desc); + + values_buf[i] = (char *)calloc(buf_len, sizeof(char)); + if (!values_buf[i]) + goto error; + + strcpy(values_buf[i], desc); + strcat(values_buf[i], "; "); + + /* Default value goes first */ + strcat(values_buf[i], values[default_index].value); + + /* Add remaining values */ + for (j = 0; j < num_values; j++) + { + if (j != default_index) + { + strcat(values_buf[i], "|"); + strcat(values_buf[i], values[j].value); + } + } + } + } + + variables[option_index].key = key; + variables[option_index].value = values_buf[i]; + option_index++; + } + + /* Set variables */ + environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables); + +error: + + /* Clean up */ + if (values_buf) + { + for (i = 0; i < num_options; i++) + { + if (values_buf[i]) + { + free(values_buf[i]); + values_buf[i] = NULL; + } + } + + free(values_buf); + values_buf = NULL; + } + + if (variables) + { + free(variables); + variables = NULL; + } + } +} + +#ifdef __cplusplus +} +#endif + +#endif -- cgit v1.2.3