From 705a0dd62eaa81436d509f001d8d2b30796f82d6 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Mon, 28 May 2012 22:43:08 +0200 Subject: [PATCH] (PS3) Add info message enable/disable option --- 360/main.c | 1 + 360/menu.cpp | 196 +++++++++++++++++++++++++----------------- console/console_ext.c | 9 +- general.h | 3 +- ps3/main.c | 1 + ps3/menu-entries.h | 16 +++- ps3/menu.c | 31 ++++++- ps3/menu.h | 1 + 8 files changed, 172 insertions(+), 86 deletions(-) diff --git a/360/main.c b/360/main.c index 88fad5147a..26bba2a760 100644 --- a/360/main.c +++ b/360/main.c @@ -178,6 +178,7 @@ static void set_default_settings (void) g_console.viewports.custom_vp.x = 0; g_console.viewports.custom_vp.y = 0; g_console.color_format = 0; + g_console.info_msg_enable = true; //g_extern g_extern.state_slot = 0; diff --git a/360/menu.cpp b/360/menu.cpp index 9199c90cd8..2f61ac54fe 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -375,20 +375,24 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled } break; case MENU_ITEM_OVERSCAN_AMOUNT: - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "TODO - Not yet implemented.", 1, 180); + msg_queue_clear(g_extern.msg_queue); + if(g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "TODO - Not yet implemented.", 1, 180); + } break; case MENU_ITEM_ORIENTATION: switch(g_console.screen_orientation) { case ORIENTATION_NORMAL: g_console.screen_orientation = ORIENTATION_VERTICAL; - m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, L"Orientation: Vertical"); - break; - case ORIENTATION_VERTICAL: - g_console.screen_orientation = ORIENTATION_FLIPPED; - m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, L"Orientation: Flipped"); - break; + m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, L"Orientation: Vertical"); + break; + case ORIENTATION_VERTICAL: + g_console.screen_orientation = ORIENTATION_FLIPPED; + m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, L"Orientation: Flipped"); + break; case ORIENTATION_FLIPPED: g_console.screen_orientation = ORIENTATION_FLIPPED_ROTATED; m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, L"Orientation: Flipped Rotated"); @@ -401,9 +405,12 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled video_xdk360.set_rotation(driver.video_data, g_console.screen_orientation); break; case MENU_ITEM_RESIZE_MODE: - g_console.input_loop = INPUT_LOOP_RESIZE_MODE; - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - Resize the screen by moving around the two analog sticks.\nPress Y to reset to default values, and B to go back.\nTo select the resized screen mode, set Aspect Ratio to: 'Custom'.", 1, 270); + g_console.input_loop = INPUT_LOOP_RESIZE_MODE; + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - Resize the screen by moving around the two analog sticks.\nPress Y to reset to default values, and B to go back.\nTo select the resized screen mode, set Aspect Ratio to: 'Custom'.", 1, 270); + } break; case MENU_ITEM_FRAME_ADVANCE: if (g_console.emulator_initialized) @@ -414,8 +421,11 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled } break; case MENU_ITEM_SCREENSHOT_MODE: - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "TODO - Not yet implemented.", 1, 180); + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "TODO - Not yet implemented.", 1, 180); + } break; case MENU_ITEM_RESET: if (g_console.emulator_initialized) @@ -516,8 +526,11 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle { filebrowser_new(&browser, "cache:", rarch_console_get_rom_ext()); filebrowser_fetch_directory_entries("cache:", &browser, &m_romlist, &m_rompathtitle); - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - All the contents of the ZIP files you have selected in the filebrowser\nare extracted to this partition.", 1, 180); + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - All the contents of the ZIP files you have selected in the filebrowser\nare extracted to this partition.", 1, 180); + } } bHandled = TRUE; @@ -534,29 +547,33 @@ HRESULT CRetroArchShaderBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHand int index = m_shaderlist.GetCurSel(); if(tmp_browser.cur[index].d_type != FILE_ATTRIBUTE_DIRECTORY) { - const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); + const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); - switch(set_shader) - { - case 1: - snprintf(g_settings.video.cg_shader_path, sizeof(g_settings.video.cg_shader_path), "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); - hlsl_load_shader(set_shader, g_settings.video.cg_shader_path); - break; - case 2: - snprintf (g_settings.video.second_pass_shader, sizeof(g_settings.video.second_pass_shader), "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); - hlsl_load_shader(set_shader, g_settings.video.second_pass_shader); - break; - default: - break; - } - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - Shader successfully loaded.", 1, 180); + switch(set_shader) + { + case 1: + snprintf(g_settings.video.cg_shader_path, sizeof(g_settings.video.cg_shader_path), "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); + hlsl_load_shader(set_shader, g_settings.video.cg_shader_path); + break; + case 2: + snprintf (g_settings.video.second_pass_shader, sizeof(g_settings.video.second_pass_shader), "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); + hlsl_load_shader(set_shader, g_settings.video.second_pass_shader); + break; + default: + break; + } + + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - Shader successfully loaded.", 1, 180); + } } else if(tmp_browser.cur[index].d_type == FILE_ATTRIBUTE_DIRECTORY) { - const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); - snprintf(path, sizeof(path), "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); - filebrowser_fetch_directory_entries(path, &tmp_browser, &m_shaderlist, &m_shaderpathtitle); + const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); + snprintf(path, sizeof(path), "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); + filebrowser_fetch_directory_entries(path, &tmp_browser, &m_shaderlist, &m_shaderpathtitle); } } @@ -606,8 +623,11 @@ HRESULT CRetroArchSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled case SETTING_EMU_REWIND_ENABLED: g_settings.rewind_enable = !g_settings.rewind_enable; m_settingslist.SetText(SETTING_EMU_REWIND_ENABLED, g_settings.rewind_enable ? L"Rewind: ON" : L"Rewind: OFF"); - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); + } break; case SETTING_GAMMA_CORRECTION_ENABLED: g_console.gamma_correction_enable = !g_console.gamma_correction_enable; @@ -616,50 +636,58 @@ HRESULT CRetroArchSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); break; case SETTING_COLOR_FORMAT: - g_console.color_format = !g_console.color_format; + g_console.color_format = !g_console.color_format; m_settingslist.SetText(SETTING_COLOR_FORMAT, g_console.color_format ? L"Color format: 32bit ARGB" : L"Color format: 16bit RGBA"); - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); - break; + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); + } + break; case SETTING_SHADER: - set_shader = 1; - hr = XuiSceneCreate(hdmenus_allowed ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_shader_browser.xur", NULL, &app.hShaderBrowser); + set_shader = 1; + hr = XuiSceneCreate(hdmenus_allowed ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_shader_browser.xur", NULL, &app.hShaderBrowser); - if (hr < 0) - { - RARCH_ERR("Failed to load scene.\n"); - } - hCur = app.hShaderBrowser; - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - Select a shader from the menu by pressing the A button.", 1, 180); - NavigateForward(app.hShaderBrowser); - break; + if (hr < 0) + { + RARCH_ERR("Failed to load scene.\n"); + } + hCur = app.hShaderBrowser; + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - Select a shader from the menu by pressing the A button.", 1, 180); + } + NavigateForward(app.hShaderBrowser); + break; case SETTING_SHADER_2: - set_shader = 2; - hr = XuiSceneCreate(hdmenus_allowed ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_shader_browser.xur", NULL, &app.hShaderBrowser); - - if (hr < 0) - { - RARCH_ERR("Failed to load scene.\n"); - } - hCur = app.hShaderBrowser; - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - Select a shader from the menu by pressing the A button.", 1, 180); - NavigateForward(app.hShaderBrowser); - break; + set_shader = 2; + hr = XuiSceneCreate(hdmenus_allowed ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_shader_browser.xur", NULL, &app.hShaderBrowser); + if (hr < 0) + { + RARCH_ERR("Failed to load scene.\n"); + } + hCur = app.hShaderBrowser; + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - Select a shader from the menu by pressing the A button.", 1, 180); + } + NavigateForward(app.hShaderBrowser); + break; case SETTING_HW_TEXTURE_FILTER: g_settings.video.smooth = !g_settings.video.smooth; - m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER, g_settings.video.smooth ? L"Hardware filtering shader #1: Linear interpolation" : L"Hardware filtering shader #1: Point filtering"); + m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER, g_settings.video.smooth ? L"Hardware filtering shader #1: Linear interpolation" : L"Hardware filtering shader #1: Point filtering"); break; case SETTING_HW_TEXTURE_FILTER_2: g_settings.video.second_pass_smooth = !g_settings.video.second_pass_smooth; - m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER_2, g_settings.video.second_pass_smooth ? L"Hardware filtering shader #2: Linear interpolation" : L"Hardware filtering shader #2: Point filtering"); + m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER_2, g_settings.video.second_pass_smooth ? L"Hardware filtering shader #2: Linear interpolation" : L"Hardware filtering shader #2: Point filtering"); break; case SETTING_SCALE_ENABLED: - g_console.fbo_enabled = !g_console.fbo_enabled; - m_settingslist.SetText(SETTING_SCALE_ENABLED, g_console.fbo_enabled ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); - gfx_ctx_set_fbo(g_console.fbo_enabled); - break; + g_console.fbo_enabled = !g_console.fbo_enabled; + m_settingslist.SetText(SETTING_SCALE_ENABLED, g_console.fbo_enabled ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); + gfx_ctx_set_fbo(g_console.fbo_enabled); + break; } } @@ -680,10 +708,9 @@ HRESULT CRetroArchMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) hr = XuiSceneCreate(hdmenus_allowed ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_filebrowser.xur", NULL, &app.hFileBrowser); if (hr < 0) - { RARCH_ERR("Failed to load scene.\n"); - } - hCur = app.hFileBrowser; + + hCur = app.hFileBrowser; NavigateForward(app.hFileBrowser); } else if ( hObjPressed == m_quick_menu) @@ -692,7 +719,8 @@ HRESULT CRetroArchMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) if (hr < 0) RARCH_ERR("Failed to load scene.\n"); - hCur = app.hQuickMenu; + + hCur = app.hQuickMenu; NavigateForward(app.hQuickMenu); } else if ( hObjPressed == m_controls) @@ -701,9 +729,13 @@ HRESULT CRetroArchMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) if (hr < 0) RARCH_ERR("Failed to load scene.\n"); - hCur = app.hControlsMenu; - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - Press LEFT/RIGHT to change the controls, and press\nSTART/A to reset a button to default values.", 1, 180); + + hCur = app.hControlsMenu; + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - Press LEFT/RIGHT to change the controls, and press\nSTART/A to reset a button to default values.", 1, 180); + } NavigateForward(app.hControlsMenu); } else if ( hObjPressed == m_change_libretro_core ) @@ -714,9 +746,12 @@ HRESULT CRetroArchMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) { RARCH_ERR("Failed to load scene.\n"); } - hCur = app.hCoreBrowser; - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - Select a Libretro core from the menu by pressing the A button.", 1, 180); + hCur = app.hCoreBrowser; + if (g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - Select a Libretro core from the menu by pressing the A button.", 1, 180); + } NavigateForward(app.hCoreBrowser); } else if ( hObjPressed == m_settings ) @@ -725,7 +760,8 @@ HRESULT CRetroArchMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) if (hr < 0) RARCH_ERR("Failed to load scene.\n"); - hCur = app.hRetroArchSettings; + + hCur = app.hRetroArchSettings; NavigateForward(app.hRetroArchSettings); } else if ( hObjPressed == m_quit ) diff --git a/console/console_ext.c b/console/console_ext.c index b72abf4ab0..fa55bbe726 100644 --- a/console/console_ext.c +++ b/console/console_ext.c @@ -200,8 +200,11 @@ int rarch_extract_zipfile(const char *zip_path) } } - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - ZIP file extracted to cache partition.", 1, 180); + if(g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - ZIP file extracted to cache partition.", 1, 180); + } return 0; } @@ -776,6 +779,7 @@ void rarch_config_load(const char * conf_name, const char * libretro_dir_path, c CONFIG_GET_BOOL_CONSOLE(screenshots_enable, "screenshots_enable"); CONFIG_GET_BOOL_CONSOLE(throttle_enable, "throttle_enable"); CONFIG_GET_BOOL_CONSOLE(triple_buffering_enable, "triple_buffering_enable"); + CONFIG_GET_BOOL_CONSOLE(info_msg_enable, "info_msg_enable"); CONFIG_GET_INT_CONSOLE(aspect_ratio_index, "aspect_ratio_index"); CONFIG_GET_INT_CONSOLE(current_resolution_id, "current_resolution_id"); CONFIG_GET_INT_CONSOLE(viewports.custom_vp.x, "custom_viewport_x"); @@ -844,6 +848,7 @@ void rarch_config_save(const char * conf_name) #endif config_set_bool(conf, "throttle_enable", g_console.throttle_enable); config_set_bool(conf, "triple_buffering_enable", g_console.triple_buffering_enable); + config_set_bool(conf, "info_msg_enable", g_console.info_msg_enable); config_set_int(conf, "sound_mode", g_console.sound_mode); config_set_int(conf, "aspect_ratio_index", g_console.aspect_ratio_index); config_set_int(conf, "current_resolution_id", g_console.current_resolution_id); diff --git a/general.h b/general.h index ae37043b7a..9a2ec4a612 100644 --- a/general.h +++ b/general.h @@ -207,8 +207,9 @@ struct console_settings bool default_savestate_dir_enable; bool fbo_enabled; bool frame_advance_enable; - bool gamma_correction_enable; bool initialize_rarch_enable; + bool info_msg_enable; + bool gamma_correction_enable; bool ingame_menu_enable; bool menu_enable; bool overscan_enable; diff --git a/ps3/main.c b/ps3/main.c index 9fb2f40cd9..967359359c 100644 --- a/ps3/main.c +++ b/ps3/main.c @@ -146,6 +146,7 @@ static void set_default_settings(void) g_console.viewports.custom_vp.x = 0; g_console.viewports.custom_vp.y = 0; g_console.custom_bgm_enable = true; + g_console.info_msg_enable = true; // g_extern g_extern.state_slot = 0; diff --git a/ps3/menu-entries.h b/ps3/menu-entries.h index 4c9b59c1e7..44f11df7a9 100644 --- a/ps3/menu-entries.h +++ b/ps3/menu-entries.h @@ -327,7 +327,6 @@ static item items_generalsettings[MAX_NO_OF_CONTROLS_SETTINGS] = 0, 1 }, - /* port-specific */ { SETTING_EMU_CURRENT_SAVE_STATE_SLOT, "Current save state slot", @@ -343,6 +342,21 @@ static item items_generalsettings[MAX_NO_OF_CONTROLS_SETTINGS] = 0, 1 }, + { + SETTING_EMU_SHOW_INFO_MSG, + "Info messages", + "", + 0.0f, + 0.0f, + YELLOW, + "INFO - Show onscreen info messages in the menu.", + WHITE, + 0.91f, + 0.09f, + 0.83f, + 0, + 1 + }, { SETTING_RARCH_DEFAULT_EMU, "Default emulator core", diff --git a/ps3/menu.c b/ps3/menu.c index 9eafb97aac..1a16bbebe9 100644 --- a/ps3/menu.c +++ b/ps3/menu.c @@ -548,6 +548,18 @@ static void set_setting_label(menu * menu_obj, uint64_t currentsetting) snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), "%d", g_extern.state_slot); break; /* emu-specific */ + case SETTING_EMU_SHOW_INFO_MSG: + if(g_console.info_msg_enable) + { + snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), "ON"); + menu_obj->items[currentsetting].text_color = GREEN; + } + else + { + snprintf(menu_obj->items[currentsetting].setting_text, sizeof(menu_obj->items[currentsetting].setting_text), "OFF"); + menu_obj->items[currentsetting].text_color = ORANGE; + } + break; case SETTING_EMU_DEFAULT_ALL: if(menu_obj->selected == currentsetting) menu_obj->items[currentsetting].text_color = GREEN; @@ -1558,14 +1570,29 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue) if(CTRL_START(state)) g_extern.state_slot = 0; break; + case SETTING_EMU_SHOW_INFO_MSG: + if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state)) + { + g_console.info_msg_enable = !g_console.info_msg_enable; + set_delay = DELAY_MEDIUM; + } + if(CTRL_START(state)) + { + g_console.info_msg_enable = true; + set_delay = DELAY_MEDIUM; + } + break; case SETTING_EMU_REWIND_ENABLED: if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state)) { g_settings.rewind_enable = !g_settings.rewind_enable; set_delay = DELAY_MEDIUM; - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); + if(g_console.info_msg_enable) + { + msg_queue_clear(g_extern.msg_queue); + msg_queue_push(g_extern.msg_queue, "INFO - You need to restart RetroArch for this change to take effect.", 1, 180); + } } if(CTRL_START(state)) { diff --git a/ps3/menu.h b/ps3/menu.h index 0a1ebbc96f..5034605575 100644 --- a/ps3/menu.h +++ b/ps3/menu.h @@ -102,6 +102,7 @@ enum SETTING_ENABLE_CUSTOM_BGM, SETTING_DEFAULT_AUDIO_ALL, SETTING_EMU_CURRENT_SAVE_STATE_SLOT, + SETTING_EMU_SHOW_INFO_MSG, SETTING_RARCH_DEFAULT_EMU, SETTING_EMU_DEFAULT_ALL, SETTING_EMU_REWIND_ENABLED,