From af2e807134d7fb1a8447208fd59da71d5ddbb76f Mon Sep 17 00:00:00 2001 From: anod <182859762@qq.com> Date: Sat, 29 Apr 2023 23:30:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9atp=5Ftips=E7=9A=84=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=EF=BC=8C=E5=8F=AA=E8=B4=9F=E8=B4=A3=E5=8F=B3=E4=B8=8B?= =?UTF-8?q?=E8=A7=92=E4=B8=8D=E5=86=8D=E5=A4=84=E7=90=86=E5=B7=A6=E4=B8=8B?= =?UTF-8?q?=E8=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/arm11/atp.h | 4 ++-- source/arm11/atp.c | 37 ++++++++++++++++++++++-------------- source/arm11/filebrowser.c | 22 +++++++++++---------- source/arm11/keyremix.c | 4 +++- source/arm11/open_agb_firm.c | 4 +++- 5 files changed, 43 insertions(+), 28 deletions(-) diff --git a/include/arm11/atp.h b/include/arm11/atp.h index 6734a70..8e03c77 100644 --- a/include/arm11/atp.h +++ b/include/arm11/atp.h @@ -107,8 +107,8 @@ extern atp_error_t atp_select( ); extern atp_error_t atp_tips( - INPUT(atp_text_t) tips_at_bottom_left, - INPUT(atp_text_t) tips_at_bottom_right + INPUT(atp_text_t) tips_string, + OUTPUT(atp_text_t) tips_before ); #undef INPUT diff --git a/source/arm11/atp.c b/source/arm11/atp.c index b70beec..2516dff 100644 --- a/source/arm11/atp.c +++ b/source/arm11/atp.c @@ -7,8 +7,8 @@ #define TITLE_MAX 8 #define TIPS_MAX 64 -static char ta[TIPS_MAX] = {'\0'}; -static char tb[TIPS_MAX] = {'\0'}; +static char dymt[TIPS_MAX] = {'\0'}; +static atp_text_t stct = NULL; #define ATP_COLOR_SIZE (ATP_COLOR_WHITE+1) @@ -79,8 +79,8 @@ const char *acf_put_text(int x, int y, int width, int height, int maxwidth, u8 c static void screen_clean() { memset(consoleGet()->frameBuffer, 0, WINDOW_WIDTH*WINDOW_HEIGHT*sizeof(uint16_t)); - if( ta[0] ) acf_put_text( 5, 215, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH-10, ATP_COLOR_CYAN, ATP_PLACEMENT_LEFT, ta ); - if( tb[0] ) acf_put_text( 5, 215, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH-10, ATP_COLOR_CYAN, ATP_PLACEMENT_RIGHT, tb ); + if( dymt[0] ) acf_put_text( 5, 215, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH-10, ATP_COLOR_CYAN, ATP_PLACEMENT_LEFT, dymt ); + if( stct[0] ) acf_put_text( 5, 215, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH-10, ATP_COLOR_CYAN, ATP_PLACEMENT_RIGHT, stct ); } static void screen_clean_zone( int x, int y, int w, int h ) @@ -108,6 +108,13 @@ static uint32_t waitKey() return down; } +static atp_error_t dynamic_tips( atp_text_t tips ) +{ + if( strlen(tips) > TIPS_MAX-1 ) return ATP_INDEX_OUTOFRANGE; + strcpy( dymt, tips ); + return ATP_SUCCESS; +} + #define easy_put(text, align, color, row) acf_put_text( \ CONTAINER_LEFTTOP_X, \ CONTAINER_LEFTTOP_Y+FONT_HEIGHT*(row), \ @@ -144,6 +151,8 @@ static void container_paint( atp_lineprovider_t provider, atp_callerdata_t data, atp_error_t atp_show( atp_counter_t cnt, atp_lineprovider_t provider, atp_callerdata_t data ) { int idx_top = 0; + dynamic_tips(""); + screen_clean(); container_paint( provider, data, cnt, idx_top ); @@ -197,7 +206,7 @@ static void set_paging( int top, int len ) unsigned current = top / CONTAINER_MAX_LINES; char buf[32]; ee_snprintf( buf, sizeof(buf), "页码:%d/%d", current+1, total ); - atp_tips( buf, NULL ); + dynamic_tips( buf ); screen_clean(); } @@ -384,17 +393,17 @@ atp_error_t atp_select( atp_text_t title, atp_counter_t cnt, atp_itemprovider_t } -atp_error_t atp_tips( atp_text_t tipsA, atp_text_t tipsB ) +atp_error_t atp_tips( atp_text_t tips, atp_text_t *old ) { - if( tipsA != NULL ) + if( old != NULL ) + *old = stct; + + if( tips != NULL ) { - strncpy( ta, tipsA, TIPS_MAX-1 ); - ta[TIPS_MAX-1] = 0; - } - if( tipsB != NULL ) - { - strncpy( tb, tipsB, TIPS_MAX-1 ); - tb[TIPS_MAX-1] = 0; + if( strlen(tips) > TIPS_MAX-1 ) + return ATP_INDEX_OUTOFRANGE; + + stct = tips; } return ATP_SUCCESS; } diff --git a/source/arm11/filebrowser.c b/source/arm11/filebrowser.c index c7a9edc..a39902d 100644 --- a/source/arm11/filebrowser.c +++ b/source/arm11/filebrowser.c @@ -181,7 +181,7 @@ static atp_text_t folder_help[] = { "A键      查看目录或启动游戏", "B键          上层文件夹", "X键            金手指", - "Y键           暂不使用", + "Y键         配置游戏键位", "START        查看说明", "SELECT       系统设置" }; @@ -233,9 +233,10 @@ static atp_error_t display_help( atp_callerdata_t table, atp_counter_t index, at atp_error_t help_page( atp_text_t *wording, atp_counter_t length ) { - atp_tips( NULL, "返回:按A/B" ); + atp_text_t current; + atp_tips( "返回:按A/B", ¤t ); atp_error_t res = atp_show( length, display_help, (atp_callerdata_t)wording ); - atp_tips( NULL, "指引:按START" ); + atp_tips( current, NULL ); return res; } @@ -658,7 +659,6 @@ static atp_pageopt_t serve_on_key( atp_callerdata_t data, atp_counter_t index, a { if( start ) { - atp_tips( "", NULL ); return WAIT_ON_ACT( help_page( folder_help, sizeof(folder_help)/sizeof(atp_text_t) ) ); } else if( select ) @@ -736,7 +736,8 @@ static atp_pageopt_t serve_on_key( atp_callerdata_t data, atp_counter_t index, a uint8_t status = DISP_REGION; atp_counter_t defi = 0; acl_entryid_t eid = 0; - atp_tips(NULL, "确定A/取消B"); + atp_text_t oldtips; + atp_tips("确定A/取消B", &oldtips); while( status != DISP_DONE ) { @@ -812,7 +813,7 @@ static atp_pageopt_t serve_on_key( atp_callerdata_t data, atp_counter_t index, a } acl_close_lib(); - atp_tips( NULL, "指引:按START" ); + atp_tips( oldtips, NULL ); return WAIT_ON_ACT( res ); } else if( y ) @@ -823,6 +824,8 @@ static atp_pageopt_t serve_on_key( atp_callerdata_t data, atp_counter_t index, a #endif atp_itemval_t position=0, field=0, value; atp_error_t res; + atp_text_t oldtips; + atp_tips( "确定A/取消B", oldtips ); #define DISP_KPOS 1 #define DISP_SETK 2 // SET KEY @@ -967,6 +970,7 @@ static atp_pageopt_t serve_on_key( atp_callerdata_t data, atp_counter_t index, a else break; } } + atp_tips( oldtips, NULL ); return WAIT_ON_ACT(res); } @@ -1022,7 +1026,7 @@ Result browseFiles(const char *const basePath, char selected[512]) { GFX_waitForVBlank0(); hidScanInput(); - atp_tips( NULL, "指引:按START" ); + atp_tips( "指引:按START", NULL ); void *cust[2] = {dList, curDir}; error = atp_select( curDir, count, display_folder, serve_on_key, (atp_callerdata_t)cust, selecting, 0, &value ); } @@ -1067,9 +1071,7 @@ Result browseFiles(const char *const basePath, char selected[512]) {// 上层目录 if( strcmp(curDir, FS_DRIVE_NAMES) == 0 ) { - atp_tips("没有上层目录", NULL); - help_page( folder_help, sizeof(folder_help)/sizeof(atp_text_t) ); - atp_tips("", NULL); + atp_show(1, disp_str, "没有上层目录"); } else DIRUP; } diff --git a/source/arm11/keyremix.c b/source/arm11/keyremix.c index ae8822d..5384334 100644 --- a/source/arm11/keyremix.c +++ b/source/arm11/keyremix.c @@ -43,7 +43,9 @@ void keyremix_freeze() temp[0].game_keys = p->game_keys; has_cheat = 1; } - else if( p->remix_type != REMIX_TYPE_NONE ) + else if( p->remix_type != REMIX_TYPE_NONE + && p->device_keys != 0 + && p->game_keys != 0 ) { temp[j].remix_type = p->remix_type; temp[j].device_keys = p->device_keys; diff --git a/source/arm11/open_agb_firm.c b/source/arm11/open_agb_firm.c index 1719cd0..34ce62c 100644 --- a/source/arm11/open_agb_firm.c +++ b/source/arm11/open_agb_firm.c @@ -278,7 +278,6 @@ static atp_pageopt_t config_adjust( atp_callerdata_t, atp_counter_t index, atp_b } else if( start ) { - atp_tips("", NULL); return ATP_POWER_OFF == help_page( config_help, sizeof(config_help)/sizeof(atp_text_t) ) ? ATP_POWER_OFF : ATP_PAGE_REFRESH; } @@ -305,12 +304,15 @@ atp_error_t oaf_config_page() static char title[210]; memcpy( base, &g_oafConfig, sizeof(g_oafConfig) ); OafConfig *prev = (OafConfig*)&base[0]; + atp_text_t oldtips; + atp_tips("保存X/确定A/取消B", &oldtips); ee_snprintf( title, sizeof(title), "参数配置           当前电量:%3d%%" "每次开机存档方案重置为“和卡带序列号一致”,这个方案会优先使用游戏最后一次启动时设置的存档类型", MCU_getBatteryLevel()); atp_error_t res = atp_select( title, 5, config_item, config_adjust, NULL, 0, 0, NULL ); + atp_tips( oldtips, NULL ); if( res == ATP_NO_ACTION ) { memcpy( &g_oafConfig, prev, sizeof(g_oafConfig) );