mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ページ送り可能に修正
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2867 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
e50342d212
commit
4076dd558b
@ -27,9 +27,9 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
|
||||||
#define TITLE_MAX_SHOW 19
|
#define TITLE_SHOW_BASE_Y 5
|
||||||
#define TITLE_NUM_CUL 40
|
#define TITLE_MAX_SHOW 0x10
|
||||||
#define TITLE_NUM_PAGE (TITLE_NUM_CUL * 2)
|
#define TITLE_NUM_PAGE 300
|
||||||
|
|
||||||
#define ETICKET_NUM_MAX 10
|
#define ETICKET_NUM_MAX 10
|
||||||
|
|
||||||
@ -61,6 +61,16 @@ static s32 gNandAllAppNum;
|
|||||||
// カーソル位置
|
// カーソル位置
|
||||||
static s32 gCurPos = 0;
|
static s32 gCurPos = 0;
|
||||||
|
|
||||||
|
// 選択中の要素
|
||||||
|
static s32 gCurrentElem;
|
||||||
|
|
||||||
|
// ページ数
|
||||||
|
static u32 gCurrentPage;
|
||||||
|
static u32 gMaxPage;
|
||||||
|
|
||||||
|
// Error
|
||||||
|
static BOOL gErrorFlg;
|
||||||
|
|
||||||
// eTicketType
|
// eTicketType
|
||||||
typedef enum ETicketType {
|
typedef enum ETicketType {
|
||||||
ETICKET_TYPE_COMMON = 0,
|
ETICKET_TYPE_COMMON = 0,
|
||||||
@ -141,6 +151,7 @@ void TwlMain(void)
|
|||||||
gNandAppNum = 0;
|
gNandAppNum = 0;
|
||||||
gNandInstalledAppNum = 0;
|
gNandInstalledAppNum = 0;
|
||||||
gNandAllAppNum = 0;
|
gNandAllAppNum = 0;
|
||||||
|
gErrorFlg = FALSE;
|
||||||
|
|
||||||
FS_Init( FS_DMA_NOT_USE );
|
FS_Init( FS_DMA_NOT_USE );
|
||||||
|
|
||||||
@ -162,37 +173,93 @@ void TwlMain(void)
|
|||||||
// キー入力情報取得
|
// キー入力情報取得
|
||||||
ReadKey(&gKey);
|
ReadKey(&gKey);
|
||||||
|
|
||||||
// カーソルの移動
|
|
||||||
if (gKey.trg & PAD_KEY_DOWN)
|
if (gKey.trg & PAD_KEY_DOWN)
|
||||||
{
|
{
|
||||||
gCurPos++;
|
gCurPos++;
|
||||||
if ( gCurPos >= ( gNandAllAppNum < TITLE_NUM_PAGE ? gNandAllAppNum : TITLE_NUM_PAGE) )
|
|
||||||
|
if ( gCurrentPage != gMaxPage )
|
||||||
{
|
{
|
||||||
|
if ( gCurPos >= TITLE_MAX_SHOW )
|
||||||
|
{
|
||||||
|
gCurrentPage++;
|
||||||
gCurPos = 0;
|
gCurPos = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gKey.trg & PAD_KEY_UP)
|
else
|
||||||
{
|
{
|
||||||
if( gNandAllAppNum )
|
if( (gNandAllAppNum & 0x0f) == 0 )
|
||||||
|
{
|
||||||
|
if( gCurPos >= TITLE_MAX_SHOW )
|
||||||
|
{
|
||||||
|
gCurrentPage = 0;
|
||||||
|
gCurPos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( gCurPos >= (gNandAllAppNum & 0x0f) ) // バグ
|
||||||
|
{
|
||||||
|
gCurrentPage = 0;
|
||||||
|
gCurPos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OS_TPrintf("↓ gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum);
|
||||||
|
}
|
||||||
|
if (gKey.trg & PAD_KEY_UP)
|
||||||
{
|
{
|
||||||
if( gCurPos == 0)
|
if( gCurPos == 0)
|
||||||
{
|
{
|
||||||
if ( gNandAllAppNum < TITLE_NUM_PAGE )
|
if ( gCurrentPage == 0 )
|
||||||
{
|
{
|
||||||
gCurPos = gNandAllAppNum - 1;
|
gCurrentPage = gMaxPage;
|
||||||
|
gCurPos = ((gNandAllAppNum & 0x0f) == 0) ? TITLE_MAX_SHOW - 1 : (gNandAllAppNum & 0x0f) - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gCurPos = TITLE_NUM_PAGE - 1;
|
gCurrentPage--;
|
||||||
|
gCurPos = TITLE_MAX_SHOW - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gCurPos--;
|
gCurPos--;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
OS_TPrintf("↑ gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gKey.trg & PAD_KEY_LEFT)
|
||||||
|
{
|
||||||
|
if(gCurrentPage == 0)
|
||||||
|
{
|
||||||
|
gCurrentPage = gMaxPage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gCurrentPage--;
|
||||||
|
}
|
||||||
|
|
||||||
|
gCurPos = 0;
|
||||||
|
|
||||||
|
OS_TPrintf("← gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum);
|
||||||
|
}
|
||||||
|
if (gKey.trg & PAD_KEY_RIGHT)
|
||||||
|
{
|
||||||
|
if(gCurrentPage == gMaxPage)
|
||||||
|
{
|
||||||
|
gCurrentPage = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gCurrentPage++;
|
||||||
|
}
|
||||||
|
|
||||||
|
gCurPos = 0;
|
||||||
|
|
||||||
|
OS_TPrintf("→ gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 選択中の要素
|
||||||
|
gCurrentElem = (s32)((u32)(gCurrentPage << 4) + (u32)gCurPos);
|
||||||
|
|
||||||
// 画面描画
|
// 画面描画
|
||||||
DrawScene(gDataList);
|
DrawScene(gDataList);
|
||||||
@ -232,65 +299,87 @@ static void DrawScene(DataStruct* list)
|
|||||||
s32 i;
|
s32 i;
|
||||||
u8 init_code[5];
|
u8 init_code[5];
|
||||||
u8 color;
|
u8 color;
|
||||||
|
u32 start;
|
||||||
|
|
||||||
DataStruct* p = list;
|
DataStruct* p = list;
|
||||||
|
|
||||||
|
if( gErrorFlg )
|
||||||
|
{
|
||||||
|
PutMainScreen( 10, 12, 0xf1, "--- Error ---");
|
||||||
|
PutSubScreen( 10, 12, 0xf1, "--- Error ---");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 上画面 一覧表示
|
// 上画面 一覧表示
|
||||||
PutMainScreen( 1, 0, 0xf2, "------- eTicket Viewer ------- ");
|
PutMainScreen( 1, 0, 0xf2, "------- eTicket Viewer ------- ");
|
||||||
|
PutMainScreen( 1, 1, 0xfa, "<Page %d/%d>", (gCurrentPage+1), (gMaxPage+1));
|
||||||
PutMainScreen( 1, 2, 0xf4, " Game Ticket Ticket");
|
PutMainScreen( 1, 2, 0xf4, " Game Ticket Ticket");
|
||||||
PutMainScreen( 1, 3, 0xf4, " Code srl Num Type");
|
PutMainScreen( 1, 3, 0xf4, " Code srl Num Type");
|
||||||
PutMainScreen( 0, 4, 0xff, "--------------------------------");
|
PutMainScreen( 0, 4, 0xff, "--------------------------------");
|
||||||
|
|
||||||
// カーソル表示
|
// カーソル表示
|
||||||
if( gCurPos <= TITLE_MAX_SHOW ){
|
if( gCurPos <= TITLE_MAX_SHOW ){
|
||||||
PutMainScreen( 0, gCurPos+5 , 0xf1, ">");
|
PutMainScreen( 0, gCurPos+TITLE_SHOW_BASE_Y , 0xf1, ">");
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i=0; i < TITLE_MAX_SHOW; i++, p++)
|
start = (u32)(gCurrentPage << 4);
|
||||||
|
p += start;
|
||||||
|
|
||||||
|
for ( i=(s32)start; i < (start + TITLE_MAX_SHOW); i++, p++)
|
||||||
{
|
{
|
||||||
|
s32 tmp_i;
|
||||||
|
|
||||||
// そもそも NAND アプリの数が 1ページにも満たない場合は途中で終了する
|
// そもそも NAND アプリの数が 1ページにも満たない場合は途中で終了する
|
||||||
if ( i >= gNandAllAppNum )
|
if ( i >= gNandAllAppNum )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmp_i = (s32)(i & 0xf);
|
||||||
|
|
||||||
ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id));
|
ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id));
|
||||||
|
|
||||||
color = p->commonTicketFlg ? COMMON_COLOR : PERSONALIZED_COLOR;
|
color = p->commonTicketFlg ? COMMON_COLOR : PERSONALIZED_COLOR;
|
||||||
|
|
||||||
// ゲームコード表示
|
// ゲームコード表示
|
||||||
PutMainScreen( GAME_CODE_BASE_X, 5 +i, color, "%s", init_code);
|
PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, color, "%2d:%s", (tmp_i+1), init_code);
|
||||||
|
|
||||||
// srlの有無表示
|
// srlの有無表示
|
||||||
if(p->isSrlFlg)
|
if(p->isSrlFlg)
|
||||||
{
|
{
|
||||||
PutMainScreen( GAME_CODE_BASE_X + 7, 5 +i, color, "o");
|
PutMainScreen( GAME_CODE_BASE_X + 9, TITLE_SHOW_BASE_Y+tmp_i, color, "o");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PutMainScreen( GAME_CODE_BASE_X + 7, 5 +i, color, "x");
|
PutMainScreen( GAME_CODE_BASE_X + 9, TITLE_SHOW_BASE_Y+tmp_i, color, "x");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ETicketの数の表示
|
// ETicketの数の表示
|
||||||
PutMainScreen( GAME_CODE_BASE_X + 12, 5 +i, color, "%d", p->numTicket);
|
PutMainScreen( GAME_CODE_BASE_X + 12, TITLE_SHOW_BASE_Y+tmp_i, color, "%d", p->numTicket);
|
||||||
|
|
||||||
// ETicketのタイプの表示
|
// ETicketのタイプの表示
|
||||||
if(p->commonTicketFlg)
|
if(p->commonTicketFlg)
|
||||||
{
|
{
|
||||||
PutMainScreen(GAME_CODE_BASE_X + 19, 5 +i, color, "common");
|
PutMainScreen(GAME_CODE_BASE_X + 19, TITLE_SHOW_BASE_Y+tmp_i, color, "common");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PutMainScreen(GAME_CODE_BASE_X + 19, 5 +i, color, "personalized");
|
PutMainScreen(GAME_CODE_BASE_X + 19, TITLE_SHOW_BASE_Y+tmp_i, color, "personalized");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y, 0xff, "--------------------------------");
|
||||||
|
|
||||||
|
PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 1, 0xfa, "Up Down Key : Next Application");
|
||||||
|
PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 2, 0xfa, "Left Right Key: Page Change");
|
||||||
|
|
||||||
// 下画面 詳細表示
|
// 下画面 詳細表示
|
||||||
ConvertInitialCode(init_code, NAM_GetTitleIdLo(list[gCurPos].id));
|
ConvertInitialCode(init_code, NAM_GetTitleIdLo(list[gCurrentElem].id));
|
||||||
PutSubScreen(3, 2, 0xf4, "Selected Title : [ %s ]", init_code);
|
PutSubScreen(3, 2, 0xf4, "Selected Title : [ %s ]", init_code);
|
||||||
PutSubScreen(3, 4, 0xff, "- Ticket List -");
|
PutSubScreen(3, 4, 0xff, "- Ticket List -");
|
||||||
|
|
||||||
for( i=0; i < list[gCurPos].numTicket; i++){
|
for( i=0; i < list[gCurrentElem].numTicket; i++){
|
||||||
if(i > 15)
|
if(i > 15)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@ -298,7 +387,7 @@ static void DrawScene(DataStruct* list)
|
|||||||
|
|
||||||
PutSubScreen(5, 6+i, 0xf4, "Ticket%d : ", (i+1));
|
PutSubScreen(5, 6+i, 0xf4, "Ticket%d : ", (i+1));
|
||||||
|
|
||||||
if(list[gCurPos].tType[i] == ETICKET_TYPE_COMMON)
|
if(list[gCurrentElem].tType[i] == ETICKET_TYPE_COMMON)
|
||||||
{
|
{
|
||||||
PutSubScreen(15, 6+i, COMMON_COLOR, "COMMON");
|
PutSubScreen(15, 6+i, COMMON_COLOR, "COMMON");
|
||||||
}
|
}
|
||||||
@ -318,7 +407,7 @@ static void DrawScene(DataStruct* list)
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static BOOL GetDataStruct(DataStruct* list, DataStruct* Ilist)
|
static BOOL GetDataStruct(DataStruct* list, DataStruct* Ilist)
|
||||||
{
|
{
|
||||||
// 36個分のタイトルIDリストバッファ
|
// タイトルIDリストバッファ
|
||||||
NAMTitleId titleIdList[TITLE_NUM_PAGE];
|
NAMTitleId titleIdList[TITLE_NUM_PAGE];
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
@ -329,7 +418,7 @@ static BOOL GetDataStruct(DataStruct* list, DataStruct* Ilist)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// データリストの作成(1ページ分)
|
// データリストの作成
|
||||||
for ( i=0; i<TITLE_NUM_PAGE; i++, list++)
|
for ( i=0; i<TITLE_NUM_PAGE; i++, list++)
|
||||||
{
|
{
|
||||||
// そもそも NAND アプリの数が 1ページにも満たない場合は途中で終了する
|
// そもそも NAND アプリの数が 1ページにも満たない場合は途中で終了する
|
||||||
@ -354,7 +443,7 @@ static BOOL GetDataStruct(DataStruct* list, DataStruct* Ilist)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// データリストの作成(1ページ分)
|
// データリストの作成
|
||||||
for ( i=0; i<TITLE_NUM_PAGE; i++, Ilist++)
|
for ( i=0; i<TITLE_NUM_PAGE; i++, Ilist++)
|
||||||
{
|
{
|
||||||
// そもそも NAND アプリの数が 1ページにも満たない場合は途中で終了する
|
// そもそも NAND アプリの数が 1ページにも満たない場合は途中で終了する
|
||||||
@ -549,7 +638,25 @@ BOOL GetETicketData( void )
|
|||||||
getUserApplication( gDataList );
|
getUserApplication( gDataList );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// 必要なページ数を求める
|
||||||
|
gMaxPage = (u32)(gNandAllAppNum >> 4);
|
||||||
|
if( gMaxPage != 0 && (gNandAllAppNum & 0xf) == 0 )
|
||||||
|
{
|
||||||
|
gMaxPage--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 現在ページの初期化
|
||||||
|
gCurrentPage = 0;
|
||||||
|
|
||||||
OS_TPrintf("gNandAllAppNum : %d\n",gNandAllAppNum);
|
OS_TPrintf("gNandAllAppNum : %d\n",gNandAllAppNum);
|
||||||
|
OS_TPrintf("gMaxPage : %d\n",gMaxPage);
|
||||||
|
|
||||||
|
if( gNandAllAppNum == 0 )
|
||||||
|
{
|
||||||
|
gErrorFlg = TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// アプリのETicketデータを取得する
|
// アプリのETicketデータを取得する
|
||||||
for (i=0; i<gNandAllAppNum; i++)
|
for (i=0; i<gNandAllAppNum; i++)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user