TwlToolsRED/build/tools/sctools/common/src/pre_install.c

878 lines
26 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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