mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
878 lines
26 KiB
C
878 lines
26 KiB
C
#include <twl.h>
|
||
#include <twl/sea.h>
|
||
#include <twl/lcfg.h>
|
||
#include <twl/na.h>
|
||
#include <twl/nam.h>
|
||
#include <es.h>
|
||
|
||
#include "font.h"
|
||
#include "text.h"
|
||
#include "mprintf.h"
|
||
#include "logprintf.h"
|
||
|
||
#include "my_fs_util.h"
|
||
#include "myimport.h"
|
||
|
||
#include "pre_install.h"
|
||
|
||
#define PRE_INSTALL_TABLE_FILE_NAND "rom:/tads/tad_table.txt"
|
||
#define PRE_INSTALL_TABLE_DEV_FILE_NAND "rom:/taddevs/taddev_table.txt"
|
||
#define PRE_INSTALL_TABLE_FILE_SD "sdmc:/tads/tad_table.txt"
|
||
|
||
static PRE_INSTALL_FILE *pre_install_file_list = NULL;
|
||
|
||
|
||
BOOL pre_install_check_download_or_pre_install(u64 tid, int *flag, FSFile *log_fd)
|
||
{
|
||
ESError rv;
|
||
ESTicketView *ticketViews;
|
||
u32 numTickets;
|
||
|
||
|
||
#if 0
|
||
typedef u32 ESId; /* 32-bit device identity */
|
||
|
||
typedef struct {
|
||
ESVersion version; /* eTicket data structure version */
|
||
ESTicketId ticketId; /* eTicket ID */
|
||
ESId deviceId; /* device ID 0->common else->personalized */
|
||
ESTitleId titleId; /* title ID */
|
||
ESSysAccessMask sysAccessMask; /* 16 bit cidx mask */
|
||
u16 ticketVersion; /* 16 bit ticket version */
|
||
u32 accessTitleId; /* 32 bit title id for access control*/
|
||
u32 accessTitleMask; /* 32 bit title id mask */
|
||
u8 licenseType; /* for infrastructure use */
|
||
ESTicketReserved reserved; /* 48 bytes reserved info */
|
||
u8 audit; /* for infrastructure use */
|
||
ESCidxMask cidxMask; /* 512 bits of cidx mask */
|
||
ESLpEntry limits[ES_MAX_LIMIT_TYPE]; /* limit algorithm and limit */
|
||
} ESTicketView;
|
||
|
||
|
||
ESError ES_GetTicketViews(ESTitleId titleId, ESTicketView* ticketViewList, u32* ticketViewCnt);
|
||
#endif
|
||
|
||
if( flag == NULL ) {
|
||
return FALSE;
|
||
}
|
||
|
||
*flag = 0;
|
||
|
||
rv = ES_GetTicketViews(tid, NULL, &numTickets);
|
||
if (rv != ES_ERR_OK) {
|
||
miya_log_fprintf(log_fd,"ES_GetTicketViews failed: %d tid=0x%08x%08x\n",
|
||
rv, (u32)(tid >> 32) , (u32)(tid & 0xffffffff));
|
||
return FALSE;
|
||
}
|
||
|
||
if(numTickets) {
|
||
ticketViews = OS_Alloc(sizeof(ESTicketView) * numTickets);
|
||
rv = ES_GetTicketViews(tid, ticketViews, &numTickets);
|
||
if (rv != ES_ERR_OK) {
|
||
miya_log_fprintf(log_fd,"ES_GetTicketViews failed: %d tid=0x%08x%08x\n",
|
||
rv, (u32)(tid >> 32) , (u32)(tid & 0xffffffff) );
|
||
return FALSE;
|
||
|
||
}
|
||
}
|
||
else {
|
||
#if 0
|
||
miya_log_fprintf(log_fd,"ES_GetTicketViews failed numTickets = 0: %d tid=0x%08x%08x\n",
|
||
rv, (u32)(tid >> 32) , (u32)(tid & 0xffffffff) );
|
||
return FALSE;
|
||
#endif
|
||
/* error ??? */
|
||
*flag = 0;
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
#if 0
|
||
/* c:/twlsdk/add-ins/es/es-sdk-20090216/twl/build/demos/sysmenu/src/list.c */
|
||
/* Just use first ticket view for now */
|
||
OS_Printf("Attempting to launch %08x\n", (u32)(t->titleId & 0xffffffff));
|
||
rv = ES_CheckLaunchRights(t->titleId, &t->ticketViews[0]);
|
||
#endif
|
||
|
||
if( ticketViews[0].deviceId == 0 ) {
|
||
/* common */
|
||
*flag = 1;
|
||
}
|
||
else {
|
||
/* personalized */
|
||
*flag = 2;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
static BOOL pre_install_add_list(u64 tid, u8 region, u8 country_code, char *temp_file_name, FSFile *log_fd)
|
||
{
|
||
PRE_INSTALL_FILE *temp_pre_install_file = NULL;
|
||
PRE_INSTALL_FILE *temp_list;
|
||
|
||
if( temp_file_name == NULL ) {
|
||
return FALSE;
|
||
}
|
||
|
||
temp_pre_install_file = (PRE_INSTALL_FILE *)OS_Alloc( sizeof(PRE_INSTALL_FILE) );
|
||
if( temp_pre_install_file == NULL ) {
|
||
miya_log_fprintf(log_fd,"Error: %s %s %d\n", __FILE__,__FUNCTION__,__LINE__);
|
||
return FALSE;
|
||
}
|
||
temp_pre_install_file->tid = tid;
|
||
temp_pre_install_file->region = region;
|
||
temp_pre_install_file->country = country_code;
|
||
temp_pre_install_file->next = NULL;
|
||
|
||
STD_StrCpy(temp_pre_install_file->file_name, temp_file_name);
|
||
|
||
miya_log_fprintf(log_fd,"add list tid=0x%08x %08x %s\n", (u32)(tid >> 32) , (u32)(tid & 0xffffffff) , temp_file_name);
|
||
|
||
|
||
if( pre_install_file_list == NULL ) {
|
||
pre_install_file_list = temp_pre_install_file;
|
||
}
|
||
else {
|
||
for( temp_list = pre_install_file_list ; temp_list->next != NULL ; temp_list = temp_list->next ) {
|
||
;
|
||
}
|
||
temp_list->next = temp_pre_install_file;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
char *pre_install_search_tid(u64 tid, FSFile *log_fd)
|
||
{
|
||
PRE_INSTALL_FILE *temp_list;
|
||
|
||
for( temp_list = pre_install_file_list ; temp_list != NULL ; temp_list = temp_list->next ) {
|
||
if( temp_list->tid == tid ) {
|
||
miya_log_fprintf(log_fd,"\ntad file entry tid=0x%08x%08x\n%s\n",
|
||
(u32)(tid >> 32) , (u32)(tid & 0xffffffff), temp_list->file_name );
|
||
|
||
return temp_list->file_name;
|
||
}
|
||
}
|
||
miya_log_fprintf(log_fd,"\n%s:No entry\ntid 0x%08x%08x\n",__FUNCTION__,
|
||
(u32)(tid >> 32) , (u32)(tid & 0xffffffff));
|
||
return NULL;
|
||
|
||
}
|
||
|
||
BOOL pre_install_discard_list(void)
|
||
{
|
||
PRE_INSTALL_FILE *temp_list;
|
||
PRE_INSTALL_FILE *temp_list2;
|
||
|
||
temp_list = pre_install_file_list;
|
||
while( temp_list != NULL ) {
|
||
temp_list2 = temp_list->next;
|
||
OS_Free( temp_list );
|
||
temp_list = temp_list2;
|
||
}
|
||
pre_install_file_list = NULL;
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void pre_install_print_list(FSFile *log_fd)
|
||
{
|
||
PRE_INSTALL_FILE *temp_list;
|
||
u64 tid;
|
||
|
||
for( temp_list = pre_install_file_list ; temp_list != NULL ; temp_list = temp_list->next ) {
|
||
tid = temp_list->tid;
|
||
miya_log_fprintf(log_fd,"tad file entry tid=0x%08x%08x %s\n",
|
||
(u32)(tid >> 32) , (u32)(tid & 0xffffffff), temp_list->file_name );
|
||
}
|
||
}
|
||
|
||
|
||
|
||
static int ReadLine(FSFile *f, char *buf, int buf_size)
|
||
{
|
||
char c;
|
||
s32 readSize;
|
||
int count = 0;
|
||
while( 1 ) {
|
||
readSize = FS_ReadFile(f, (void *)&c, (s32)1 );
|
||
if( readSize == 0 ) {
|
||
/* EOF */
|
||
break;
|
||
}
|
||
count++;
|
||
if( c == '\r' ) {
|
||
*buf = '\0';
|
||
break;
|
||
}
|
||
else if(c == '\n' ) {
|
||
*buf = '\0';
|
||
break;
|
||
}
|
||
|
||
*buf = c;
|
||
buf++;
|
||
if( count > buf_size ) {
|
||
buf--;
|
||
*buf = '\0';
|
||
break;
|
||
}
|
||
}
|
||
return count;
|
||
}
|
||
|
||
static int my_char_to_hex(char c)
|
||
{
|
||
if( '0' <= c && c <= '9' ) {
|
||
return (int)( c - '0');
|
||
}
|
||
else if( 'A' <= c && c <= 'F' ) {
|
||
return (int)( c - 'A' + 10 );
|
||
}
|
||
else if( 'a' <= c && c <= 'f' ) {
|
||
return (int)( c - 'a' + 10 );
|
||
}
|
||
return -1; /* error */
|
||
}
|
||
|
||
BOOL pre_install_load_file(char *path, FSFile *log_fd)
|
||
{
|
||
FSFile file;
|
||
BOOL bSuccess = TRUE;
|
||
// s32 result;
|
||
s32 readSize;
|
||
FSResult fsres;
|
||
|
||
int buf_counter;
|
||
int buf_state;
|
||
|
||
#define LINE_BUF_SIZE 512
|
||
char line_buf[LINE_BUF_SIZE];
|
||
// PRE_INSTALL_FILE temp_pre_install_file;
|
||
char temp_file_name[FS_FILE_NAME_MAX];
|
||
|
||
u64 temp_tid;
|
||
u8 temp_region;
|
||
u8 temp_country_code;
|
||
int temp_hex;
|
||
int temp_filename_count;
|
||
char c;
|
||
|
||
FS_InitFile(&file);
|
||
|
||
bSuccess = FS_OpenFile(&file, path);
|
||
if( ! bSuccess ) {
|
||
fsres = FS_GetArchiveResultCode(path);
|
||
miya_log_fprintf(log_fd,"Error:%s %s open file\n",__FILE__,__FUNCTION__);
|
||
miya_log_fprintf(log_fd, " Failed open file:%s\n", my_fs_util_get_fs_result_word( fsres ));
|
||
return FALSE; /* open error! */
|
||
}
|
||
|
||
/*
|
||
title id
|
||
0x00000000 00000000, region , country code, file name,
|
||
*/
|
||
|
||
while( 1 ) {
|
||
next_line_read:
|
||
buf_state = 0;
|
||
readSize = ReadLine(&file, line_buf, LINE_BUF_SIZE );
|
||
if( readSize == 0 ) {
|
||
/* EOF */
|
||
OS_TPrintf("%s %s %d : End of File\n", __FILE__,__FUNCTION__,__LINE__);
|
||
break;
|
||
}
|
||
|
||
if( !STD_StrNCmp( line_buf, "0x" , STD_StrLen("0x")) ) {
|
||
|
||
OS_TPrintf("%s\n", line_buf);
|
||
|
||
buf_counter = STD_StrLen("0x");
|
||
buf_state = 1;
|
||
temp_tid = 0;
|
||
temp_region = 0;
|
||
temp_country_code = 0;
|
||
temp_filename_count = 0;
|
||
|
||
while( readSize > buf_counter ) {
|
||
c = line_buf[buf_counter];
|
||
|
||
switch( buf_state ) {
|
||
case 1: /* TID */
|
||
if( c == ',') {
|
||
if( buf_counter == 18 ) {
|
||
// OS_TPrintf("temp_tid=0x%08x %08x\n", (u32)(temp_tid >> 32) , (u32)(temp_tid & 0xffffffff));
|
||
buf_state = 2; /* next state */
|
||
}
|
||
else {
|
||
/* format error */
|
||
miya_log_fprintf(log_fd,"Error:%s %s %d format error \n",__FILE__,__FUNCTION__,__LINE__);
|
||
goto next_line_read;
|
||
// break;
|
||
}
|
||
}
|
||
else {
|
||
temp_hex = my_char_to_hex(c);
|
||
if( temp_hex != -1 ) {
|
||
temp_tid |= ( ((u64)temp_hex) << (64 - (4 * (buf_counter-1))) );
|
||
}
|
||
else {
|
||
/* format error */
|
||
miya_log_fprintf(log_fd,"Error:%s %s %d format error\n",__FILE__,__FUNCTION__,__LINE__);
|
||
goto next_line_read;
|
||
// break;
|
||
}
|
||
}
|
||
break;
|
||
case 2: /* region */
|
||
if( c == ' ' ) {
|
||
}
|
||
else if( c == ',' ) {
|
||
buf_state = 3; /* next state */
|
||
}
|
||
else {
|
||
temp_hex = my_char_to_hex(c);
|
||
if( temp_hex != -1 ) {
|
||
temp_region = (u8)temp_hex;
|
||
}
|
||
else {
|
||
/* format error */
|
||
miya_log_fprintf(log_fd,"Error:%s %s %d format error\n",__FILE__,__FUNCTION__,__LINE__);
|
||
goto next_line_read;
|
||
}
|
||
}
|
||
break;
|
||
case 3: /* country code */
|
||
if( c == ' ' ) {
|
||
}
|
||
else if( c == ',' ) {
|
||
buf_state = 4; /* next state */
|
||
}
|
||
else {
|
||
temp_hex = my_char_to_hex(c);
|
||
if( temp_hex != -1 ) {
|
||
temp_country_code = (u8)temp_hex;
|
||
}
|
||
else {
|
||
/* format error */
|
||
miya_log_fprintf(log_fd,"Error:%s %s %d format error\n",__FILE__,__FUNCTION__,__LINE__);
|
||
goto next_line_read;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 4: /* file name */
|
||
if( c == ',' ) {
|
||
temp_file_name[temp_filename_count] = '\0';
|
||
/* add list */
|
||
if( TRUE != pre_install_add_list(temp_tid, temp_region, temp_country_code, temp_file_name, log_fd) ) {
|
||
OS_TPrintf("Error: add list error %s %s %d\n", __FILE__,__FUNCTION__,__LINE__);
|
||
}
|
||
buf_state = 5; /* next state */
|
||
}
|
||
else {
|
||
if( c != ' ' ) {
|
||
temp_file_name[temp_filename_count] = c;
|
||
temp_filename_count++;
|
||
}
|
||
}
|
||
break;
|
||
case 5: /* until line end */
|
||
break;
|
||
default:
|
||
/* error */
|
||
break;
|
||
}
|
||
buf_counter++;
|
||
}
|
||
}
|
||
else {
|
||
/* <20><><EFBFBD>ȃt<C883>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>͑S<CD91><53><EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD>. */
|
||
}
|
||
}
|
||
|
||
label_last:
|
||
(void)FS_CloseFile(&file);
|
||
|
||
return bSuccess;
|
||
}
|
||
|
||
|
||
|
||
BOOL pre_install_Cleanup_User_Titles( FSFile *log_fd )
|
||
{
|
||
#define NAM_TITLE_ID_S 128
|
||
|
||
NAMTitleId pArray[NAM_TITLE_ID_S];
|
||
s32 i;
|
||
BOOL ret_flag = TRUE;
|
||
s32 num = 0;
|
||
u64 tid;
|
||
char game_code_buf[5];
|
||
|
||
#if 1
|
||
num = NAM_GetNumInstalledTitles();
|
||
#else
|
||
num = NAM_GetNumTitles();
|
||
#endif
|
||
|
||
if( num > 0 ) {
|
||
#if 1
|
||
if( NAM_OK != NAM_GetInstalledTitleList( pArray , NAM_TITLE_ID_S ) ) {
|
||
return FALSE;
|
||
}
|
||
#else
|
||
if( NAM_OK != NAM_GetTitleList( pArray , NAM_TITLE_ID_S ) ) {
|
||
return FALSE;
|
||
}
|
||
#endif
|
||
|
||
miya_log_fprintf(log_fd, "NAND Installed titles\n");
|
||
|
||
mprintf("Clean-up NAND installed titles\n");
|
||
|
||
for( i = 0 ; i < num ; i++ ) {
|
||
tid = pArray[i];
|
||
|
||
/*
|
||
No. 0 0003000f484e4c41
|
||
No. 1 0003000f484e4841
|
||
No. 2 0003000f484e4341
|
||
No. 3 00030015484e4241
|
||
No. 4 00030017484e4141 launcher
|
||
^
|
||
| <20><><EFBFBD><EFBFBD><EFBFBD>̍ʼn<CC8D><C589>ʃr<CA83>b<EFBFBD>g<EFBFBD><67><EFBFBD>P<EFBFBD>̂<EFBFBD><CC82><EFBFBD><C282>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76>
|
||
|
|
||
<20>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>̓_<CD83>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>ΏۊO
|
||
*/
|
||
(void)my_fs_Tid_To_GameCode(tid, game_code_buf);
|
||
if( tid & 0x0000000100000000 ) {
|
||
/* system app. */
|
||
miya_log_fprintf(log_fd, " sys.id %08X %08X [%s]\n", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
}
|
||
else {
|
||
/* user app. */
|
||
mprintf(" id %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
miya_log_fprintf(log_fd, " usr.id %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
|
||
|
||
if( NAM_OK != NAM_DeleteTitleCompletely( tid ) ) {
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */
|
||
mprintf("NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
|
||
miya_log_fprintf(log_fd, "NG.\n");
|
||
miya_log_fprintf(log_fd, " Error: NAM_DeleteTitleCompletely id = %08X%08X\n", (u32)(tid >> 32), (u32)tid);
|
||
ret_flag = FALSE;
|
||
}
|
||
else {
|
||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
|
||
mprintf("OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
miya_log_fprintf(log_fd, "OK.\n");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return ret_flag;
|
||
}
|
||
|
||
|
||
BOOL pre_install_command(FSFile *log_fd, u64 *tid_array, int tid_count, int command, BOOL development_version_flag )
|
||
{
|
||
char *tad_file_name;
|
||
int i;
|
||
u64 tid;
|
||
char game_code_buf[5];
|
||
BOOL ret_flag;
|
||
|
||
if( development_version_flag ) {
|
||
(void)pre_install_load_file(PRE_INSTALL_TABLE_DEV_FILE_NAND, log_fd);
|
||
}
|
||
else {
|
||
(void)pre_install_load_file(PRE_INSTALL_TABLE_FILE_NAND, log_fd);
|
||
}
|
||
|
||
switch( command ) {
|
||
case 1:
|
||
mprintf("Install App.\n");
|
||
break;
|
||
case 2:
|
||
mprintf("Install TicketOnly.\n");
|
||
break;
|
||
case 3:
|
||
mprintf("Uninstall App.(except ticket)\n");
|
||
break;
|
||
case 4:
|
||
mprintf("Uninstall App. with ticket\n");
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
for( i = 0 ; i < tid_count ; i++ ) {
|
||
ret_flag = TRUE;
|
||
tid = tid_array[i];
|
||
(void)my_fs_Tid_To_GameCode(tid, game_code_buf);
|
||
mprintf(" %08X%08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
miya_log_fprintf(log_fd, " %08X%08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
if( tid == 0 ) {
|
||
/* error<6F><72> */
|
||
continue;
|
||
}
|
||
|
||
switch( command ) {
|
||
case 1:
|
||
mprintf("IA ");
|
||
miya_log_fprintf(log_fd, "IA ");
|
||
tad_file_name = pre_install_search_tid( tid , log_fd);
|
||
if( tad_file_name ) {
|
||
ret_flag = myImportTad( tad_file_name , log_fd );
|
||
}
|
||
|
||
break;
|
||
case 2:
|
||
mprintf("TO ");
|
||
miya_log_fprintf(log_fd, "TO ");
|
||
tad_file_name = pre_install_search_tid( tid , log_fd);
|
||
if( tad_file_name ) {
|
||
ret_flag = my_NAM_ImportTadTicketOnly( tad_file_name );
|
||
}
|
||
break;
|
||
case 3:
|
||
mprintf("DA ");
|
||
miya_log_fprintf(log_fd, "DA ");
|
||
ret_flag = myDeleteTitle( tid, 0 , NULL );
|
||
break;
|
||
case 4:
|
||
mprintf("DC ");
|
||
miya_log_fprintf(log_fd, "DC ");
|
||
ret_flag = myDeleteTitle( tid, 1 , NULL );
|
||
break;
|
||
default:
|
||
mprintf("?? ");
|
||
miya_log_fprintf(log_fd, "?? ");
|
||
break;
|
||
}
|
||
|
||
|
||
if( ret_flag == FALSE ) {
|
||
/* error <20>`<60>P<EFBFBD>b<EFBFBD>g<EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>H */
|
||
miya_log_fprintf(log_fd, "NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */
|
||
mprintf("NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
|
||
}
|
||
else {
|
||
miya_log_fprintf(log_fd, "OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
|
||
mprintf("OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
}
|
||
|
||
}
|
||
|
||
mprintf("Done.\n");
|
||
|
||
(void)pre_install_discard_list();
|
||
return ret_flag;
|
||
|
||
}
|
||
|
||
BOOL pre_install_process( FSFile *log_fd, MY_USER_APP_TID *title_id_buf_ptr, int title_id_count,
|
||
u64 *ticket_id_array, int ticket_id_count, BOOL development_version_flag )
|
||
{
|
||
char *tad_file_name;
|
||
int i;
|
||
u64 tid;
|
||
char game_code_buf[5];
|
||
BOOL ret_flag = TRUE;
|
||
|
||
|
||
#if 0
|
||
/* <20>Z<EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>I<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƁE<C681>E<EFBFBD>E */
|
||
(void)pre_install_load_file(PRE_INSTALL_TABLE_FILE_SD, log_fd);
|
||
#endif
|
||
|
||
if( development_version_flag ) {
|
||
(void)pre_install_load_file(PRE_INSTALL_TABLE_DEV_FILE_NAND, log_fd);
|
||
}
|
||
else {
|
||
(void)pre_install_load_file(PRE_INSTALL_TABLE_FILE_NAND, log_fd);
|
||
}
|
||
|
||
|
||
|
||
pre_install_print_list(NULL);
|
||
|
||
|
||
/* <20>`<60>P<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><> */
|
||
for( i = 0 ; i < ticket_id_count ; i++ ) {
|
||
tid = ticket_id_array[i];
|
||
(void)my_fs_Tid_To_GameCode(tid, game_code_buf);
|
||
mprintf(" TO %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
miya_log_fprintf(log_fd, " TO %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
if( tid == 0 ) {
|
||
/* error<6F><72> */
|
||
continue;
|
||
}
|
||
|
||
tad_file_name = pre_install_search_tid( tid , log_fd);
|
||
if( tad_file_name ) {
|
||
if( FALSE == my_NAM_ImportTadTicketOnly( tad_file_name ) ) {
|
||
/* error <20>`<60>P<EFBFBD>b<EFBFBD>g<EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>H */
|
||
miya_log_fprintf(log_fd, "NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */
|
||
mprintf("NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
miya_log_fprintf(log_fd, "error: import tid=0x%08x%08x %s\n",
|
||
(u32)(tid >> 32) , (u32)(tid & 0xffffffff), tad_file_name);
|
||
ret_flag = FALSE;
|
||
}
|
||
else {
|
||
miya_log_fprintf(log_fd, "OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
|
||
mprintf("OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
}
|
||
}
|
||
else {
|
||
/* error <20>q<EFBFBD>n<EFBFBD>l<EFBFBD>Ƀt<C983>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD> */
|
||
miya_log_fprintf(log_fd, "NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */
|
||
mprintf("NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
mprintf("No file\n");
|
||
miya_log_fprintf(log_fd, "error: no file\n");
|
||
ret_flag = FALSE;
|
||
}
|
||
}
|
||
|
||
|
||
/* <20>A<EFBFBD>v<EFBFBD><76><EFBFBD>icommon eticket<65>j<EFBFBD>̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><> */
|
||
for( i = 0 ; i < title_id_count ; i++ ) {
|
||
/*
|
||
pTitleIds[i].is_personalized = 1 -> common (pre installed)
|
||
pTitleIds[i].is_personalized = 2 -> personalized
|
||
*/
|
||
if( title_id_buf_ptr[i].is_personalized == 1 /* common<6F>̏ꍇ */ ) {
|
||
/*
|
||
0x00030004484E474A "rom:/tads/TWL-KGUJ-v257.tad.out"
|
||
0x000300044B32444A "rom:/tads/TWL-K2DJ-v0.tad.out"
|
||
0x000300044B47554A "rom:/tads/TWL-HNGJ-v256.tad.out"
|
||
*/
|
||
tid = title_id_buf_ptr[i].tid;
|
||
(void)my_fs_Tid_To_GameCode(tid, game_code_buf);
|
||
mprintf(" AP %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
miya_log_fprintf(log_fd, " AP %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf);
|
||
|
||
tad_file_name = pre_install_search_tid( tid , log_fd);
|
||
if( tad_file_name ) {
|
||
if( FALSE == myImportTad( tad_file_name , log_fd) ) {
|
||
miya_log_fprintf(log_fd, "NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */
|
||
mprintf("NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
miya_log_fprintf(log_fd, "error: import tid=0x%08x%08x %s\n",
|
||
(u32)(tid >> 32) , (u32)(tid & 0xffffffff), tad_file_name);
|
||
ret_flag = FALSE;
|
||
}
|
||
else {
|
||
miya_log_fprintf(log_fd, "OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
|
||
mprintf("OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
title_id_buf_ptr[i].install_success_flag = TRUE; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>Ȃ<EFBFBD><C882>ƌ<EFBFBD><C68C>ŃZ<C583>[<5B>u<EFBFBD>f<EFBFBD>[<5B>^<5E><EFBFBD><F0959C8A><EFBFBD><EFBFBD>Ȃ<EFBFBD> */
|
||
}
|
||
}
|
||
else {
|
||
miya_log_fprintf(log_fd, "No file\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */
|
||
mprintf("No file\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
miya_log_fprintf(log_fd, "error: no file\n");
|
||
ret_flag = FALSE;
|
||
}
|
||
}
|
||
else {
|
||
/* personalized e-ticket<65>̂<EFBFBD><CC82><EFBFBD> */
|
||
}
|
||
}
|
||
(void)pre_install_discard_list();
|
||
return ret_flag;
|
||
}
|
||
|
||
|
||
|
||
#if 0
|
||
|
||
// <20><><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>[<5B>h
|
||
typedef enum OSTWLRegionCode
|
||
{
|
||
OS_TWL_REGION_JAPAN = 0,
|
||
OS_TWL_REGION_AMERICA = 1,
|
||
OS_TWL_REGION_EUROPE = 2,
|
||
OS_TWL_REGION_AUSTRALIA = 3,
|
||
OS_TWL_REGION_CHINA = 4,
|
||
OS_TWL_REGION_KOREA = 5,
|
||
OS_TWL_REGION_MAX
|
||
} OSTWLRegion;
|
||
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD><DD92>R<EFBFBD>[<5B>h
|
||
typedef enum LCFGTWLCountryCode
|
||
{
|
||
LCFG_TWL_COUNTRY_UNDEFINED = 0, // <20><><EFBFBD>ݒ<EFBFBD>
|
||
|
||
// JPN<50><4E><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_JAPAN = 1, // <20><><EFBFBD>{
|
||
|
||
// USA<53><41><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_Anguilla = 8, // <20>A<EFBFBD><41><EFBFBD>M<EFBFBD><4D>
|
||
LCFG_TWL_COUNTRY_ANTIGUA_AND_BARBUDA, // <20>A<EFBFBD><41><EFBFBD>e<EFBFBD>B<EFBFBD>O<EFBFBD>A<EFBFBD>E<EFBFBD>o<EFBFBD>[<5B>u<EFBFBD>[<5B>_
|
||
LCFG_TWL_COUNTRY_ARGENTINA = 10, // <20>A<EFBFBD><41><EFBFBD>[<5B><><EFBFBD>`<60><>
|
||
LCFG_TWL_COUNTRY_ARUBA, // <20>A<EFBFBD><41><EFBFBD>o
|
||
LCFG_TWL_COUNTRY_BAHAMAS, // <20>o<EFBFBD>n<EFBFBD>}
|
||
LCFG_TWL_COUNTRY_BARBADOS, // <20>o<EFBFBD><6F><EFBFBD>o<EFBFBD>h<EFBFBD>X
|
||
LCFG_TWL_COUNTRY_BELIZE, // <20>x<EFBFBD><78><EFBFBD>[<5B>Y
|
||
LCFG_TWL_COUNTRY_BOLIVIA, // <20>{<7B><><EFBFBD>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_BRAZIL, // <20>u<EFBFBD><75><EFBFBD>W<EFBFBD><57>
|
||
LCFG_TWL_COUNTRY_BRITISH_VIRGIN_ISLANDS, // <20>p<EFBFBD>̃<EFBFBD><CC83>@<40>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_CANADA, // <20>J<EFBFBD>i<EFBFBD>_
|
||
LCFG_TWL_COUNTRY_CAYMAN_ISLANDS, // <20>P<EFBFBD>C<EFBFBD>}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_CHILE = 20, // <20>`<60><>
|
||
LCFG_TWL_COUNTRY_COLOMBIA, // <20>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_COSTA_RICA, // <20>R<EFBFBD>X<EFBFBD>^<5E><><EFBFBD>J
|
||
LCFG_TWL_COUNTRY_DOMINICA, // <20>h<EFBFBD>~<7E>j<EFBFBD>J<EFBFBD><4A>
|
||
LCFG_TWL_COUNTRY_DOMINICAN_REPUBLIC, // <20>h<EFBFBD>~<7E>j<EFBFBD>J<EFBFBD><4A><EFBFBD>a<EFBFBD><61>
|
||
LCFG_TWL_COUNTRY_ECUADOR, // <20>G<EFBFBD>N<EFBFBD>A<EFBFBD>h<EFBFBD><68>
|
||
LCFG_TWL_COUNTRY_EL_SALVADOR, // <20>G<EFBFBD><47><EFBFBD>T<EFBFBD><54><EFBFBD>o<EFBFBD>h<EFBFBD><68>
|
||
LCFG_TWL_COUNTRY_FRENCH_GUIANA, // <20>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̃M<CC83>A<EFBFBD>i
|
||
LCFG_TWL_COUNTRY_GRENADA, // <20>O<EFBFBD><4F><EFBFBD>i<EFBFBD>_
|
||
LCFG_TWL_COUNTRY_GUADELOUPE, // <20>O<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>[<5B>v
|
||
LCFG_TWL_COUNTRY_GUATEMALA = 30, // <20>O<EFBFBD>A<EFBFBD>e<EFBFBD>}<7D><>
|
||
LCFG_TWL_COUNTRY_GUYANA, // <20>K<EFBFBD>C<EFBFBD>A<EFBFBD>i
|
||
LCFG_TWL_COUNTRY_HAITI, // <20>n<EFBFBD>C<EFBFBD>`
|
||
LCFG_TWL_COUNTRY_HONDURAS, // <20>z<EFBFBD><7A><EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>X
|
||
LCFG_TWL_COUNTRY_JAMAICA, // <20>W<EFBFBD><57><EFBFBD>}<7D>C<EFBFBD>J
|
||
LCFG_TWL_COUNTRY_MARTINIQUE, // <20>}<7D><><EFBFBD>e<EFBFBD>B<EFBFBD>j<EFBFBD>[<5B>N
|
||
LCFG_TWL_COUNTRY_MEXICO, // <20><><EFBFBD>L<EFBFBD>V<EFBFBD>R
|
||
LCFG_TWL_COUNTRY_MONTSERRAT, // <20><><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>Z<EFBFBD><5A><EFBFBD>g
|
||
LCFG_TWL_COUNTRY_NETHERLANDS_ANTILLES, // <20>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>̃A<CC83><41><EFBFBD>e<EFBFBD>B<EFBFBD><42>
|
||
LCFG_TWL_COUNTRY_NICARAGUA, // <20>j<EFBFBD>J<EFBFBD><4A><EFBFBD>O<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_PANAMA = 40, // <20>p<EFBFBD>i<EFBFBD>}
|
||
LCFG_TWL_COUNTRY_PARAGUAY, // <20>p<EFBFBD><70><EFBFBD>O<EFBFBD>A<EFBFBD>C
|
||
LCFG_TWL_COUNTRY_PERU, // <20>y<EFBFBD><79><EFBFBD>[
|
||
LCFG_TWL_COUNTRY_ST_KITTS_AND_NEVIS, // <20>Z<EFBFBD><5A><EFBFBD>g<EFBFBD>L<EFBFBD>b<EFBFBD>c<EFBFBD>E<EFBFBD>l<EFBFBD>C<EFBFBD>r<EFBFBD>X
|
||
LCFG_TWL_COUNTRY_ST_LUCIA, // <20>Z<EFBFBD><5A><EFBFBD>g<EFBFBD><67><EFBFBD>V<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_ST_VINCENT_AND_THE_GRENADINES, // <20>Z<EFBFBD><5A><EFBFBD>g<EFBFBD>r<EFBFBD><72><EFBFBD>Z<EFBFBD><5A><EFBFBD>g<EFBFBD>E<EFBFBD>O<EFBFBD><4F><EFBFBD>i<EFBFBD>f<EFBFBD>B<EFBFBD>[<5B><>
|
||
LCFG_TWL_COUNTRY_SURINAME, // <20>X<EFBFBD><58><EFBFBD>i<EFBFBD><69>
|
||
LCFG_TWL_COUNTRY_TRINIDAD_AND_TOBAGO, // <20>g<EFBFBD><67><EFBFBD>j<EFBFBD>_<EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>g<EFBFBD>o<EFBFBD>S
|
||
LCFG_TWL_COUNTRY_TURKS_AND_CAICOS_ISLANDS, // <20>^<5E>[<5B>N<EFBFBD>X<EFBFBD>E<EFBFBD>J<EFBFBD>C<EFBFBD>R<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_UNITED_STATES, // <20>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>J
|
||
LCFG_TWL_COUNTRY_URUGUAY = 50, // <20>E<EFBFBD><45><EFBFBD>O<EFBFBD>A<EFBFBD>C
|
||
LCFG_TWL_COUNTRY_US_VIRGIN_ISLANDS, // <20>ė̃o<CC83>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_VENEZUELA, // <20>x<EFBFBD>l<EFBFBD>Y<EFBFBD>G<EFBFBD><47>
|
||
|
||
// EUR, NAL <20><><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_ALBANIA = 64, // <20>A<EFBFBD><41><EFBFBD>o<EFBFBD>j<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_AUSTRALIA, // <20>I<EFBFBD>[<5B>X<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>A
|
||
LCFG_TWL_COUNTRY_AUSTRIA, // <20>I<EFBFBD>[<5B>X<EFBFBD>g<EFBFBD><67><EFBFBD>A
|
||
LCFG_TWL_COUNTRY_BELGIUM, // <20>x<EFBFBD><78><EFBFBD>M<EFBFBD>[
|
||
LCFG_TWL_COUNTRY_BOSNIA_AND_HERZEGOVINA, // <20>{<7B>X<EFBFBD>j<EFBFBD>A<EFBFBD>E<EFBFBD>w<EFBFBD><77><EFBFBD>c<EFBFBD>F<EFBFBD>S<EFBFBD>r<EFBFBD>i
|
||
LCFG_TWL_COUNTRY_BOTSWANA, // <20>{<7B>c<EFBFBD><63><EFBFBD>i
|
||
LCFG_TWL_COUNTRY_BULGARIA = 70, // <20>u<EFBFBD><75><EFBFBD>K<EFBFBD><4B><EFBFBD>A
|
||
LCFG_TWL_COUNTRY_CROATIA, // <20>N<EFBFBD><4E><EFBFBD>A<EFBFBD>`<60>A
|
||
LCFG_TWL_COUNTRY_CYPRUS, // <20>L<EFBFBD>v<EFBFBD><76><EFBFBD>X
|
||
LCFG_TWL_COUNTRY_CZECH_REPUBLIC, // <20>`<60>F<EFBFBD>R
|
||
LCFG_TWL_COUNTRY_DENMARK, // <20>f<EFBFBD><66><EFBFBD>}<7D>[<5B>N
|
||
LCFG_TWL_COUNTRY_ESTONIA, // <20>G<EFBFBD>X<EFBFBD>g<EFBFBD>j<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_FINLAND, // <20>t<EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_FRANCE, // <20>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>X
|
||
LCFG_TWL_COUNTRY_GERMANY, // <20>h<EFBFBD>C<EFBFBD>c
|
||
LCFG_TWL_COUNTRY_GREECE, // <20>M<EFBFBD><4D><EFBFBD>V<EFBFBD><56>
|
||
LCFG_TWL_COUNTRY_HUNGARY = 80, // <20>n<EFBFBD><6E><EFBFBD>K<EFBFBD><4B><EFBFBD>[
|
||
LCFG_TWL_COUNTRY_ICELAND, // <20>A<EFBFBD>C<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_IRELAND, // <20>A<EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_ITALY, // <20>C<EFBFBD>^<5E><><EFBFBD>A
|
||
LCFG_TWL_COUNTRY_LATVIA, // <20><><EFBFBD>g<EFBFBD>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_LESOTHO, // <20><><EFBFBD>\<5C>g
|
||
LCFG_TWL_COUNTRY_LIECHTENSTEIN, // <20><><EFBFBD>q<EFBFBD>e<EFBFBD><65><EFBFBD>V<EFBFBD><56><EFBFBD>^<5E>C<EFBFBD><43>
|
||
LCFG_TWL_COUNTRY_LITHUANIA, // <20><><EFBFBD>g<EFBFBD>A<EFBFBD>j<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_LUXEMBOURG, // <20><><EFBFBD>N<EFBFBD>Z<EFBFBD><5A><EFBFBD>u<EFBFBD><75><EFBFBD>N
|
||
LCFG_TWL_COUNTRY_MACEDONIA, // <20>}<7D>P<EFBFBD>h<EFBFBD>j<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_MALTA = 90, // <20>}<7D><><EFBFBD>^
|
||
LCFG_TWL_COUNTRY_MONTENEGRO, // <20><><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>l<EFBFBD>O<EFBFBD><4F>
|
||
LCFG_TWL_COUNTRY_MOZAMBIQUE, // <20><><EFBFBD>U<EFBFBD><55><EFBFBD>r<EFBFBD>[<5B>N
|
||
LCFG_TWL_COUNTRY_NAMIBIA, // <20>i<EFBFBD>~<7E>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_NETHERLANDS, // <20>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>_
|
||
LCFG_TWL_COUNTRY_NEW_ZEALAND, // <20>j<EFBFBD><6A><EFBFBD>[<5B>W<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_NORWAY, // <20>m<EFBFBD><6D><EFBFBD>E<EFBFBD>F<EFBFBD>[
|
||
LCFG_TWL_COUNTRY_POLAND, // <20>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_PORTUGAL, // <20>|<7C><><EFBFBD>g<EFBFBD>K<EFBFBD><4B>
|
||
LCFG_TWL_COUNTRY_ROMANIA, // <20><><EFBFBD>[<5B>}<7D>j<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_RUSSIA = 100, // <20><><EFBFBD>V<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_SERBIA, // <20>Z<EFBFBD><5A><EFBFBD>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_SLOVAKIA, // <20>X<EFBFBD><58><EFBFBD>o<EFBFBD>L<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_SLOVENIA, // <20>X<EFBFBD><58><EFBFBD>x<EFBFBD>j<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_SOUTH_AFRICA, // <20><><EFBFBD>A<EFBFBD>t<EFBFBD><74><EFBFBD>J
|
||
LCFG_TWL_COUNTRY_SPAIN, // <20>X<EFBFBD>y<EFBFBD>C<EFBFBD><43>
|
||
LCFG_TWL_COUNTRY_SWAZILAND, // <20>X<EFBFBD><58><EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_SWEDEN, // <20>X<EFBFBD>E<EFBFBD>F<EFBFBD>[<5B>f<EFBFBD><66>
|
||
LCFG_TWL_COUNTRY_SWITZERLAND, // <20>X<EFBFBD>C<EFBFBD>X
|
||
LCFG_TWL_COUNTRY_TURKEY, // <20>g<EFBFBD><67><EFBFBD>R
|
||
LCFG_TWL_COUNTRY_UNITED_KINGDOM = 110, // <20>C<EFBFBD>M<EFBFBD><4D><EFBFBD>X
|
||
LCFG_TWL_COUNTRY_ZAMBIA, // <20>U<EFBFBD><55><EFBFBD>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_ZIMBABWE, // <20>W<EFBFBD><57><EFBFBD>o<EFBFBD>u<EFBFBD>G
|
||
|
||
// TWN<57><4E><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_TAIWAN = 128, // <20><><EFBFBD>p
|
||
|
||
// KOR<4F><52><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_SOUTH_KOREA = 136, // <20>؍<EFBFBD>
|
||
|
||
// HKG<4B><47><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>iWii<69>̍<EFBFBD><CC8D><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>ɑ<EFBFBD><C991>݁j
|
||
LCFG_TWL_COUNTRY_HONG_KONG = 144, // <20>z<EFBFBD><7A><EFBFBD>R<EFBFBD><52>
|
||
LCFG_TWL_COUNTRY_MACAU, // <20>}<7D>J<EFBFBD>I
|
||
|
||
// ASI<53><49><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>iWii<69>̍<EFBFBD><CC8D><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>ɑ<EFBFBD><C991>݁j
|
||
LCFG_TWL_COUNTRY_INDONESIA = 152, // <20>C<EFBFBD><43><EFBFBD>h<EFBFBD>l<EFBFBD>V<EFBFBD>A
|
||
|
||
// USA<53><41><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_SINGAPORE = 153, // <20>V<EFBFBD><56><EFBFBD>K<EFBFBD>|<7C>[<5B><>
|
||
|
||
// ASI<53><49><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ăсj
|
||
LCFG_TWL_COUNTRY_THAILAND = 154, // <20>^<5E>C
|
||
LCFG_TWL_COUNTRY_PHILIPPINES, // <20>t<EFBFBD>B<EFBFBD><42><EFBFBD>s<EFBFBD><73>
|
||
LCFG_TWL_COUNTRY_MALAYSIA, // <20>}<7D><><EFBFBD>[<5B>V<EFBFBD>A
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>iIQue<75><65><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>j
|
||
LCFG_TWL_COUNTRY_CHINA = 160, // <20><><EFBFBD><EFBFBD>
|
||
|
||
// USA<53><41><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_UAE = 168, // <20>A<EFBFBD><41><EFBFBD>u<EFBFBD><EFBFBD><F192B78D>A<EFBFBD>M
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
|
||
LCFG_TWL_COUNTRY_INDIA = 169, // <20>C<EFBFBD><43><EFBFBD>h
|
||
LCFG_TWL_COUNTRY_EGYPT = 170, // <20>G<EFBFBD>W<EFBFBD>v<EFBFBD>g
|
||
LCFG_TWL_COUNTRY_OMAN, // <20>I<EFBFBD>}<7D>[<5B><>
|
||
LCFG_TWL_COUNTRY_QATAR, // <20>J<EFBFBD>^<5E>[<5B><>
|
||
LCFG_TWL_COUNTRY_KUWAIT, // <20>N<EFBFBD>E<EFBFBD>F<EFBFBD>[<5B>g
|
||
LCFG_TWL_COUNTRY_SAUDI_ARABIA, // <20>T<EFBFBD>E<EFBFBD>W<EFBFBD>A<EFBFBD><41><EFBFBD>r<EFBFBD>A
|
||
LCFG_TWL_COUNTRY_SYRIA, // <20>V<EFBFBD><56><EFBFBD>A
|
||
LCFG_TWL_COUNTRY_BAHRAIN, // <20>o<EFBFBD>[<5B><><EFBFBD>[<5B><>
|
||
LCFG_TWL_COUNTRY_JORDAN, // <20><><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F>
|
||
|
||
LCFG_TWL_COUNTRY_OTHERS = 254,
|
||
LCFG_TWL_COUNTRY_UNKNOWN = 255,
|
||
|
||
LCFG_TWL_COUNTRY_MAX
|
||
|
||
} LCFGTWLCountryCode;
|
||
|
||
#endif
|