From 31c9d5dacbd411fc39dc4e1c7f5cac7386179c15 Mon Sep 17 00:00:00 2001 From: chaoskagami Date: Thu, 2 Jun 2016 16:36:43 -0400 Subject: [PATCH] Reformat shit --- external/loader/source/fsldr.c | 11 +- external/loader/source/fsldr.h | 4 +- external/loader/source/fsreg.c | 36 +- external/loader/source/fsreg.h | 8 +- external/loader/source/internal.h | 4 +- external/loader/source/interp.h | 2 +- external/loader/source/loader.c | 115 +- external/loader/source/logger.c | 68 +- external/loader/source/logger.h | 2 +- external/loader/source/lzss.c | 6 +- external/loader/source/lzss.h | 2 +- external/loader/source/memory.c | 22 +- external/loader/source/memory.h | 9 +- external/loader/source/patcher.c | 254 ++-- external/loader/source/patcher.h | 8 +- external/loader/source/pxipm.c | 21 +- external/loader/source/pxipm.h | 5 +- external/loader/source/srvsys.c | 31 +- external/loader/source/srvsys.h | 10 +- source/config.c | 5 +- source/config.h | 20 +- source/fatfs/diskio.c | 41 +- source/fatfs/diskio.h | 13 +- source/fatfs/ff.c | 1782 ++++++++++++----------------- source/fatfs/ff.h | 189 ++- source/fatfs/sdmmc.c | 197 ++-- source/fatfs/sdmmc.h | 35 +- source/firm/crypto.c | 142 ++- source/firm/crypto.h | 69 +- source/firm/fcram.c | 2 +- source/firm/fcram.h | 2 +- source/firm/firm.c | 150 +-- source/firm/firm.h | 20 +- source/firm/headers.h | 20 +- source/firm/version.c | 58 +- source/i2c.c | 34 +- source/i2c.h | 7 +- source/input.h | 2 +- source/interp.c | 659 +++++------ source/interp.h | 4 +- source/main.c | 3 +- source/menu.c | 136 ++- source/patch/module.c | 37 +- source/patch/patch_file.h | 6 +- source/patch/svc.c | 91 +- source/patch_format.h | 55 +- source/patcher.c | 68 +- source/std/abort.h | 10 +- source/std/draw.c | 112 +- source/std/draw.h | 32 +- source/std/font.h | 250 ++-- source/std/fs.c | 28 +- source/std/fs.h | 21 +- source/std/memory.c | 60 +- source/std/memory.h | 19 +- source/std/types.h | 6 +- 56 files changed, 2148 insertions(+), 2855 deletions(-) diff --git a/external/loader/source/fsldr.c b/external/loader/source/fsldr.c index eccc757..ba55828 100644 --- a/external/loader/source/fsldr.c +++ b/external/loader/source/fsldr.c @@ -22,7 +22,7 @@ fsldrPatchPermissions(void) info.mediaType = MEDIATYPE_NAND; res = svcGetProcessId(&pid, 0xFFFF8001); if (R_SUCCEEDED(res)) { - res = FSREG_Register(pid, 0xFFFF000000000000LL, &info, (u8*)storage); + res = FSREG_Register(pid, 0xFFFF000000000000LL, &info, (u8 *)storage); } return res; } @@ -60,7 +60,7 @@ fsldrExit(void) Result FSLDR_InitializeWithSdkVersion(Handle session, u32 version) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x861, 1, 2); // 0x8610042 cmdbuf[1] = version; @@ -76,7 +76,7 @@ FSLDR_InitializeWithSdkVersion(Handle session, u32 version) Result FSLDR_SetPriority(u32 priority) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x862, 1, 0); // 0x8620040 cmdbuf[1] = priority; @@ -89,10 +89,9 @@ FSLDR_SetPriority(u32 priority) } Result -FSLDR_OpenFileDirectly(Handle* out, FS_ArchiveID archiveId, FS_Path archivePath, - FS_Path filePath, u32 openFlags, u32 attributes) +FSLDR_OpenFileDirectly(Handle *out, FS_ArchiveID archiveId, FS_Path archivePath, FS_Path filePath, u32 openFlags, u32 attributes) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x803, 8, 4); // 0x8030204 cmdbuf[1] = 0; diff --git a/external/loader/source/fsldr.h b/external/loader/source/fsldr.h index f3d403f..36dac0c 100644 --- a/external/loader/source/fsldr.h +++ b/external/loader/source/fsldr.h @@ -7,8 +7,6 @@ Result fsldrInit(void); void fsldrExit(void); Result FSLDR_InitializeWithSdkVersion(Handle session, u32 version); Result FSLDR_SetPriority(u32 priority); -Result FSLDR_OpenFileDirectly(Handle* out, FS_ArchiveID archiveId, - FS_Path archivePath, FS_Path filePath, - u32 openFlags, u32 attributes); +Result FSLDR_OpenFileDirectly(Handle *out, FS_ArchiveID archiveId, FS_Path archivePath, FS_Path filePath, u32 openFlags, u32 attributes); #endif diff --git a/external/loader/source/fsreg.c b/external/loader/source/fsreg.c index 2c638b0..4ac0abd 100644 --- a/external/loader/source/fsreg.c +++ b/external/loader/source/fsreg.c @@ -32,7 +32,7 @@ fsregExit(void) Result FSREG_CheckHostLoadId(u64 prog_handle) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x406, 2, 0); // 0x4060080 cmdbuf[1] = (u32)(prog_handle); @@ -46,32 +46,31 @@ FSREG_CheckHostLoadId(u64 prog_handle) } Result -FSREG_LoadProgram(u64* prog_handle, FS_ProgramInfo* title) +FSREG_LoadProgram(u64 *prog_handle, FS_ProgramInfo *title) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x404, 4, 0); // 0x4040100 memcpy(&cmdbuf[1], &title->programId, sizeof(u64)); - *(u8*)&cmdbuf[3] = title->mediaType; - memcpy(((u8*)&cmdbuf[3]) + 1, &title->padding, 7); + *(u8 *)&cmdbuf[3] = title->mediaType; + memcpy(((u8 *)&cmdbuf[3]) + 1, &title->padding, 7); Result ret = 0; if (R_FAILED(ret = svcSendSyncRequest(fsregHandle))) return ret; - *prog_handle = *(u64*)&cmdbuf[2]; + *prog_handle = *(u64 *)&cmdbuf[2]; return cmdbuf[1]; } Result -FSREG_GetProgramInfo(exheader_header* exheader, u32 entry_count, - u64 prog_handle) +FSREG_GetProgramInfo(exheader_header *exheader, u32 entry_count, u64 prog_handle) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x403, 3, 0); // 0x40300C0 cmdbuf[1] = entry_count; - *(u64*)&cmdbuf[2] = prog_handle; + *(u64 *)&cmdbuf[2] = prog_handle; cmdbuf[64] = ((entry_count << 10) << 14) | 2; cmdbuf[65] = (u32)exheader; @@ -85,7 +84,7 @@ FSREG_GetProgramInfo(exheader_header* exheader, u32 entry_count, Result FSREG_UnloadProgram(u64 prog_handle) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x405, 2, 0); // 0x4050080 cmdbuf[1] = (u32)(prog_handle); @@ -101,7 +100,7 @@ FSREG_UnloadProgram(u64 prog_handle) Result FSREG_Unregister(u32 pid) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x402, 1, 0); // 0x4020040 cmdbuf[1] = pid; @@ -114,18 +113,17 @@ FSREG_Unregister(u32 pid) } Result -FSREG_Register(u32 pid, u64 prog_handle, FS_ProgramInfo* info, - void* storageinfo) +FSREG_Register(u32 pid, u64 prog_handle, FS_ProgramInfo *info, void *storageinfo) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x401, 0xf, 0); // 0x40103C0 cmdbuf[1] = pid; - *(u64*)&cmdbuf[2] = prog_handle; + *(u64 *)&cmdbuf[2] = prog_handle; memcpy(&cmdbuf[4], &info->programId, sizeof(u64)); - *(u8*)&cmdbuf[6] = info->mediaType; - memcpy(((u8*)&cmdbuf[6]) + 1, &info->padding, 7); - memcpy((u8*)&cmdbuf[8], storageinfo, 32); + *(u8 *)&cmdbuf[6] = info->mediaType; + memcpy(((u8 *)&cmdbuf[6]) + 1, &info->padding, 7); + memcpy((u8 *)&cmdbuf[8], storageinfo, 32); Result ret = 0; if (R_FAILED(ret = svcSendSyncRequest(fsregHandle))) diff --git a/external/loader/source/fsreg.h b/external/loader/source/fsreg.h index ad1dff4..6e366db 100644 --- a/external/loader/source/fsreg.h +++ b/external/loader/source/fsreg.h @@ -7,12 +7,10 @@ Result fsregInit(void); void fsregExit(void); Result FSREG_CheckHostLoadId(u64 prog_handle); -Result FSREG_LoadProgram(u64* prog_handle, FS_ProgramInfo* title); -Result FSREG_GetProgramInfo(exheader_header* exheader, u32 entry_count, - u64 prog_handle); +Result FSREG_LoadProgram(u64 *prog_handle, FS_ProgramInfo *title); +Result FSREG_GetProgramInfo(exheader_header *exheader, u32 entry_count, u64 prog_handle); Result FSREG_UnloadProgram(u64 prog_handle); Result FSREG_Unregister(u32 pid); -Result FSREG_Register(u32 pid, u64 prog_handle, FS_ProgramInfo* info, - void* storageinfo); +Result FSREG_Register(u32 pid, u64 prog_handle, FS_ProgramInfo *info, void *storageinfo); #endif diff --git a/external/loader/source/internal.h b/external/loader/source/internal.h index a3ead07..ba61b2b 100644 --- a/external/loader/source/internal.h +++ b/external/loader/source/internal.h @@ -2,7 +2,7 @@ #define __INTERNAL_H // These are libc builtins, so there's no need to carry an implementation here. -void* memcpy(void* dest, const void* src, size_t len); -size_t strlen(const char* string); +void *memcpy(void *dest, const void *src, size_t len); +size_t strlen(const char *string); #endif diff --git a/external/loader/source/interp.h b/external/loader/source/interp.h index c34412e..d48da32 100644 --- a/external/loader/source/interp.h +++ b/external/loader/source/interp.h @@ -1,6 +1,6 @@ #ifndef __INTERP_H #define __INTERP_H -int execb(uint64_t tid, uint8_t* search_mem, uint32_t search_len); +int execb(uint64_t tid, uint8_t *search_mem, uint32_t search_len); #endif diff --git a/external/loader/source/loader.c b/external/loader/source/loader.c index 16bb455..f9f3229 100644 --- a/external/loader/source/loader.c +++ b/external/loader/source/loader.c @@ -14,8 +14,7 @@ #define MAX_SESSIONS 1 -const char CODE_PATH[] = { 0x01, 0x00, 0x00, 0x00, 0x2E, 0x63, - 0x6F, 0x64, 0x65, 0x00, 0x00, 0x00 }; +const char CODE_PATH[] = { 0x01, 0x00, 0x00, 0x00, 0x2E, 0x63, 0x6F, 0x64, 0x65, 0x00, 0x00, 0x00 }; typedef struct { @@ -35,7 +34,7 @@ static exheader_header g_exheader; static char g_ret_buf[1024]; static Result -allocate_shared_mem(prog_addrs_t* shared, prog_addrs_t* vaddr, int flags) +allocate_shared_mem(prog_addrs_t *shared, prog_addrs_t *vaddr, int flags) { // Somehow, we need to allow reallocating. @@ -46,16 +45,13 @@ allocate_shared_mem(prog_addrs_t* shared, prog_addrs_t* vaddr, int flags) // address to kill ASLR (I believe.) shared->ro_addr = shared->text_addr + (shared->text_size << 12); shared->data_addr = shared->ro_addr + (shared->ro_size << 12); - return svcControlMemory( - &dummy, shared->text_addr, 0, shared->total_size << 12, - (flags & 0xF00) | MEMOP_ALLOC, MEMPERM_READ | MEMPERM_WRITE); + return svcControlMemory(&dummy, shared->text_addr, 0, shared->total_size << 12, (flags & 0xF00) | MEMOP_ALLOC, MEMPERM_READ | MEMPERM_WRITE); } static Result -load_code(u64 progid, prog_addrs_t* shared, prog_addrs_t* original, - u64 prog_handle, int is_compressed) +load_code(u64 progid, prog_addrs_t *shared, prog_addrs_t *original, u64 prog_handle, int is_compressed) { - Handle handle; + Handle handle; FS_Path archivePath; FS_Path path; Result res; @@ -70,8 +66,7 @@ load_code(u64 progid, prog_addrs_t* shared, prog_addrs_t* original, path.data = CODE_PATH; path.size = sizeof(CODE_PATH); - if (R_FAILED(FSLDR_OpenFileDirectly(&handle, ARCHIVE_SAVEDATA_AND_CONTENT2, archivePath, - path, FS_OPEN_READ, 0))) { + if (R_FAILED(FSLDR_OpenFileDirectly(&handle, ARCHIVE_SAVEDATA_AND_CONTENT2, archivePath, path, FS_OPEN_READ, 0))) { svcBreak(USERBREAK_ASSERT); } @@ -88,7 +83,7 @@ load_code(u64 progid, prog_addrs_t* shared, prog_addrs_t* original, } // read code - res = FSFILE_Read(handle, &total, 0, (void*)shared->text_addr, size); + res = FSFILE_Read(handle, &total, 0, (void *)shared->text_addr, size); FSFILE_Close(handle); // done reading if (R_FAILED(res)) { svcBreak(USERBREAK_ASSERT); @@ -96,22 +91,19 @@ load_code(u64 progid, prog_addrs_t* shared, prog_addrs_t* original, // decompress in place if (is_compressed) { - lzss_decompress((u8*)shared->text_addr + size); + lzss_decompress((u8 *)shared->text_addr + size); } // Patch segments - patch_text(progid, (u8*)shared->text_addr, shared->text_size << 12, - original->text_size << 12); - patch_data(progid, (u8*)shared->data_addr, shared->data_size << 12, - original->data_size << 12); - patch_ro(progid, (u8*)shared->ro_addr, shared->ro_size << 12, - original->ro_size << 12); + patch_text(progid, (u8 *)shared->text_addr, shared->text_size << 12, original->text_size << 12); + patch_data(progid, (u8 *)shared->data_addr, shared->data_size << 12, original->data_size << 12); + patch_ro(progid, (u8 *)shared->ro_addr, shared->ro_size << 12, original->ro_size << 12); return 0; } static Result -loader_GetProgramInfo(exheader_header* exheader, u64 prog_handle) +loader_GetProgramInfo(exheader_header *exheader, u64 prog_handle) { Result res; @@ -131,8 +123,7 @@ loader_GetProgramInfo(exheader_header* exheader, u64 prog_handle) } } -extern void KernelSetState(unsigned int, unsigned int, unsigned int, - unsigned int); +extern void KernelSetState(unsigned int, unsigned int, unsigned int, unsigned int); static void ConfigureNew3DSCPU(u8 mode) @@ -145,7 +136,7 @@ ConfigureNew3DSCPU(u8 mode) } static Result -loader_LoadProcess(Handle* process, u64 prog_handle) +loader_LoadProcess(Handle *process, u64 prog_handle) { Result res; int count; @@ -161,7 +152,7 @@ loader_LoadProcess(Handle* process, u64 prog_handle) u64 progid; u32 text_grow, data_grow, ro_grow; - openLogger(); + openLogger(); // make sure the cached info corrosponds to the current prog_handle if (g_cached_prog_handle != prog_handle) { @@ -188,8 +179,8 @@ loader_LoadProcess(Handle* process, u64 prog_handle) // load code progid = g_exheader.arm11systemlocalcaps.programid; - logu64(progid); - logstr(" validated params\n"); + logu64(progid); + logstr(" validated params\n"); load_config(); // First order of business - we need the config file. @@ -205,18 +196,14 @@ loader_LoadProcess(Handle* process, u64 prog_handle) // sysmodule. It doesn't make sense. } - // TODO - clean up this shit below. Not only is it unoptimized but it reads like garbage. + // TODO - clean up this shit below. Not only is it unoptimized but it reads like garbage. // What the addressing info would be if not for expansion. This is passed to // patchCode. - original_vaddr.text_size = (g_exheader.codesetinfo.text.codesize + 4095) >> - 12; // (Text size + one page) >> page size + original_vaddr.text_size = (g_exheader.codesetinfo.text.codesize + 4095) >> 12; // (Text size + one page) >> page size original_vaddr.ro_size = (g_exheader.codesetinfo.ro.codesize + 4095) >> 12; - original_vaddr.data_size = - (g_exheader.codesetinfo.data.codesize + 4095) >> 12; - original_vaddr.total_size = original_vaddr.text_size + - original_vaddr.ro_size + - original_vaddr.data_size; + original_vaddr.data_size = (g_exheader.codesetinfo.data.codesize + 4095) >> 12; + original_vaddr.total_size = original_vaddr.text_size + original_vaddr.ro_size + original_vaddr.data_size; // Allow changing code, ro, data sizes to allow adding code text_grow = get_text_extend(progid, g_exheader.codesetinfo.text.codesize); @@ -227,26 +214,19 @@ loader_LoadProcess(Handle* process, u64 prog_handle) // Allocate process memory, growing as needed for extra patches vaddr.text_addr = g_exheader.codesetinfo.text.address; - vaddr.text_size = - (g_exheader.codesetinfo.text.codesize + text_grow + 4095) >> - 12; // (Text size + one page) >> page size + vaddr.text_size = (g_exheader.codesetinfo.text.codesize + text_grow + 4095) >> 12; // (Text size + one page) >> page size vaddr.ro_addr = g_exheader.codesetinfo.ro.address; vaddr.ro_size = (g_exheader.codesetinfo.ro.codesize + ro_grow + 4095) >> 12; vaddr.data_addr = g_exheader.codesetinfo.data.address; - vaddr.data_size = - (g_exheader.codesetinfo.data.codesize + data_grow + 4095) >> 12; - data_mem_size = (g_exheader.codesetinfo.data.codesize + text_grow + - g_exheader.codesetinfo.bsssize + 4095) >> - 12; - vaddr.total_size = vaddr.text_size + vaddr.ro_size + vaddr.data_size + - text_grow + ro_grow + data_grow; + vaddr.data_size = (g_exheader.codesetinfo.data.codesize + data_grow + 4095) >> 12; + data_mem_size = (g_exheader.codesetinfo.data.codesize + text_grow + g_exheader.codesetinfo.bsssize + 4095) >> 12; + vaddr.total_size = vaddr.text_size + vaddr.ro_size + vaddr.data_size + text_grow + ro_grow + data_grow; if ((res = allocate_shared_mem(&shared_addr, &vaddr, flags)) < 0) { return res; } - if ((res = load_code(progid, &shared_addr, &original_vaddr, prog_handle, - g_exheader.codesetinfo.flags.flag & 1)) >= 0) { + if ((res = load_code(progid, &shared_addr, &original_vaddr, prog_handle, g_exheader.codesetinfo.flags.flag & 1)) >= 0) { memcpy(&codesetinfo.name, g_exheader.codesetinfo.name, 8); codesetinfo.program_id = progid; codesetinfo.text_addr = vaddr.text_addr; @@ -258,15 +238,11 @@ loader_LoadProcess(Handle* process, u64 prog_handle) codesetinfo.rw_addr = vaddr.data_addr; codesetinfo.rw_size = vaddr.data_size; codesetinfo.rw_size_total = data_mem_size; - res = svcCreateCodeSet( - &codeset, &codesetinfo, (void*)shared_addr.text_addr, - (void*)shared_addr.ro_addr, (void*)shared_addr.data_addr); + res = svcCreateCodeSet(&codeset, &codesetinfo, (void *)shared_addr.text_addr, (void *)shared_addr.ro_addr, (void *)shared_addr.data_addr); if (res >= 0) { - closeLogger(); + closeLogger(); - res = - svcCreateProcess(process, codeset, - g_exheader.arm11kernelcaps.descriptors, count); + res = svcCreateProcess(process, codeset, g_exheader.arm11kernelcaps.descriptors, count); svcCloseHandle(codeset); if (res >= 0) { return 0; @@ -274,14 +250,12 @@ loader_LoadProcess(Handle* process, u64 prog_handle) } } - svcControlMemory(&dummy, shared_addr.text_addr, 0, - shared_addr.total_size << 12, MEMOP_FREE, 0); + svcControlMemory(&dummy, shared_addr.text_addr, 0, shared_addr.total_size << 12, MEMOP_FREE, 0); return res; } static Result -loader_RegisterProgram(u64* prog_handle, FS_ProgramInfo* title, - FS_ProgramInfo* update) +loader_RegisterProgram(u64 *prog_handle, FS_ProgramInfo *title, FS_ProgramInfo *update) { Result res; u64 prog_id; @@ -300,8 +274,7 @@ loader_RegisterProgram(u64* prog_handle, FS_ProgramInfo* title, res = FSREG_CheckHostLoadId(*prog_handle); // if ((res >= 0 && (unsigned)res >> 27) || (res < 0 && // ((unsigned)res >> 27)-32)) - if (R_FAILED(res) || - (R_SUCCEEDED(res) && R_LEVEL(res) != RL_SUCCESS)) { + if (R_FAILED(res) || (R_SUCCEEDED(res) && R_LEVEL(res) != RL_SUCCESS)) { return 0; } } @@ -309,8 +282,7 @@ loader_RegisterProgram(u64* prog_handle, FS_ProgramInfo* title, } } - if ((title->mediaType != update->mediaType) || - (prog_id != update->programId)) { + if ((title->mediaType != update->mediaType) || (prog_id != update->programId)) { svcBreak(USERBREAK_ASSERT); } res = FSREG_LoadProgram(prog_handle, title); @@ -352,7 +324,7 @@ handle_commands(void) { FS_ProgramInfo title; FS_ProgramInfo update; - u32* cmdbuf; + u32 *cmdbuf; u16 cmdid; int res; Handle handle; @@ -364,7 +336,7 @@ handle_commands(void) switch (cmdid) { case 1: // LoadProcess { - res = loader_LoadProcess(&handle, *(u64*)&cmdbuf[1]); + res = loader_LoadProcess(&handle, *(u64 *)&cmdbuf[1]); cmdbuf[0] = 0x10042; cmdbuf[1] = res; cmdbuf[2] = 16; @@ -378,7 +350,7 @@ handle_commands(void) res = loader_RegisterProgram(&prog_handle, &title, &update); cmdbuf[0] = 0x200C0; cmdbuf[1] = res; - *(u64*)&cmdbuf[2] = prog_handle; + *(u64 *)&cmdbuf[2] = prog_handle; break; } case 3: // UnregisterProgram @@ -387,12 +359,12 @@ handle_commands(void) g_cached_prog_handle = 0; } cmdbuf[0] = 0x30040; - cmdbuf[1] = loader_UnregisterProgram(*(u64*)&cmdbuf[1]); + cmdbuf[1] = loader_UnregisterProgram(*(u64 *)&cmdbuf[1]); break; } case 4: // GetProgramInfo { - prog_handle = *(u64*)&cmdbuf[1]; + prog_handle = *(u64 *)&cmdbuf[1]; if (prog_handle != g_cached_prog_handle) { res = loader_GetProgramInfo(&g_exheader, prog_handle); if (res >= 0) { @@ -418,7 +390,7 @@ handle_commands(void) } static Result -should_terminate(int* term_request) +should_terminate(int *term_request) { u32 notid; Result ret; @@ -481,12 +453,12 @@ main() Result ret; Handle handle; Handle reply_target; - Handle* srv_handle; - Handle* notification_handle; + Handle *srv_handle; + Handle *notification_handle; s32 index; int i; int term_request; - u32* cmdbuf; + u32 *cmdbuf; ret = 0; @@ -512,8 +484,7 @@ main() cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0xFFFF0000; } - ret = svcReplyAndReceive(&index, g_handles, g_active_handles, - reply_target); + ret = svcReplyAndReceive(&index, g_handles, g_active_handles, reply_target); if (R_FAILED(ret)) { // check if any handle has been closed diff --git a/external/loader/source/logger.c b/external/loader/source/logger.c index 9f71e53..9b8708f 100644 --- a/external/loader/source/logger.c +++ b/external/loader/source/logger.c @@ -14,57 +14,65 @@ Handle log_file_hdl; int logger_is_initd = 0; -void openLogger() { +void +openLogger() +{ Result r; if (logger_is_initd) return; - r = fileOpen(&log_file_hdl, ARCHIVE_SDMC, "/corbenik/loader.log", FS_OPEN_WRITE|FS_OPEN_READ|FS_OPEN_CREATE); + r = fileOpen(&log_file_hdl, ARCHIVE_SDMC, "/corbenik/loader.log", FS_OPEN_WRITE | FS_OPEN_READ | FS_OPEN_CREATE); if (R_FAILED(r)) { logger_is_initd = -1; } - logger_is_initd = 1; + logger_is_initd = 1; } -void logstr(const char* str) { - if (logger_is_initd == -1) - return; // Errored during init. Don't bother. +void +logstr(const char *str) +{ + if (logger_is_initd == -1) + return; // Errored during init. Don't bother. - u32 len = strlen(str); - u64 size; - u32 wrote; - Result r; + u32 len = strlen(str); + u64 size; + u32 wrote; + Result r; - // Get current size. - r = FSFILE_GetSize(log_file_hdl, &size); + // Get current size. + r = FSFILE_GetSize(log_file_hdl, &size); if (R_FAILED(r)) - return; + return; - // Expand file size. - r = FSFILE_SetSize(log_file_hdl, size+len); + // Expand file size. + r = FSFILE_SetSize(log_file_hdl, size + len); if (R_FAILED(r)) - return; + return; - // Write data. - FSFILE_Write(log_file_hdl, &wrote, size, str, len, FS_WRITE_FLUSH); + // Write data. + FSFILE_Write(log_file_hdl, &wrote, size, str, len, FS_WRITE_FLUSH); } -void logu64(u64 progId) { - char str[] = "Title: 0000000000000000\n"; - u32 i = 22; - while(progId) { - static const char hexDigits[] = "0123456789ABCDEF"; - str[i--] = hexDigits[(u32)(progId & 0xF)]; - progId >>= 4; - } +void +logu64(u64 progId) +{ + char str[] = "Title: 0000000000000000\n"; + u32 i = 22; + while (progId) { + static const char hexDigits[] = "0123456789ABCDEF"; + str[i--] = hexDigits[(u32)(progId & 0xF)]; + progId >>= 4; + } - logstr(str); + logstr(str); } -void closeLogger() { - FSFILE_Close(log_file_hdl); - logger_is_initd = 0; +void +closeLogger() +{ + FSFILE_Close(log_file_hdl); + logger_is_initd = 0; } diff --git a/external/loader/source/logger.h b/external/loader/source/logger.h index 55f126d..8dcf505 100644 --- a/external/loader/source/logger.h +++ b/external/loader/source/logger.h @@ -2,7 +2,7 @@ #define __LOGGER_H void openLogger(); -void logstr(const char* str); +void logstr(const char *str); void logu64(u64 progId); void closeLogger(); diff --git a/external/loader/source/lzss.c b/external/loader/source/lzss.c index b4f32d0..7ca6e0b 100644 --- a/external/loader/source/lzss.c +++ b/external/loader/source/lzss.c @@ -3,7 +3,7 @@ // TODO - In the future, why not ADD code compression modes? Like, zlib, for example. Or lzss+zlib. int -lzss_decompress(u8* buffer) +lzss_decompress(u8 *buffer) { // This WAS originally a decompilation in @yifan_lu's repo; it was rewritten // for readability following ctrtool's namings. @@ -19,8 +19,8 @@ lzss_decompress(u8* buffer) return 0; // v1=decompressedSize, v2=compressedSize, v3=index, v4=stopIndex - decompSize = *((u32*)buffer - 2); - compressEndOff = &buffer[*((u32*)buffer - 1)]; + decompSize = *((u32 *)buffer - 2); + compressEndOff = &buffer[*((u32 *)buffer - 1)]; index = &buffer[-(decompSize >> 24)]; // FIXME - The integer negation is due // to a compiler optimization. It's // probably okay, but... diff --git a/external/loader/source/lzss.h b/external/loader/source/lzss.h index b4fcb89..5ab8b82 100644 --- a/external/loader/source/lzss.h +++ b/external/loader/source/lzss.h @@ -1,6 +1,6 @@ #ifndef __LZSS_H #define __LZSS_H -int lzss_decompress(u8* buffer); +int lzss_decompress(u8 *buffer); #endif diff --git a/external/loader/source/memory.c b/external/loader/source/memory.c index b131616..eb294b7 100644 --- a/external/loader/source/memory.c +++ b/external/loader/source/memory.c @@ -11,10 +11,10 @@ #include "../../../source/patch_format.h" int -memcmp(const void* buf1, const void* buf2, u32 size) +memcmp(const void *buf1, const void *buf2, u32 size) { - const u8* buf1c = (const u8*)buf1; - const u8* buf2c = (const u8*)buf2; + const u8 *buf1c = (const u8 *)buf1; + const u8 *buf2c = (const u8 *)buf2; for (u32 i = 0; i < size; i++) { int cmp = buf1c[i] - buf2c[i]; @@ -27,10 +27,10 @@ memcmp(const void* buf1, const void* buf2, u32 size) // Quick Search algorithm, adapted from // http://igm.univ-mlv.fr/~lecroq/string/node19.html#SECTION00190 -u8* -memfind(u8* startPos, u32 size, const void* pattern, u32 patternSize) +u8 * +memfind(u8 *startPos, u32 size, const void *pattern, u32 patternSize) { - const u8* patternc = (const u8*)pattern; + const u8 *patternc = (const u8 *)pattern; // Preprocessing u32 table[256]; @@ -53,13 +53,12 @@ memfind(u8* startPos, u32 size, const void* pattern, u32 patternSize) } u32 -patchMemory(u8* start, u32 size, const void* pattern, u32 patSize, int offset, - const void* replace, u32 repSize, u32 count) +patchMemory(u8 *start, u32 size, const void *pattern, u32 patSize, int offset, const void *replace, u32 repSize, u32 count) { u32 i; for (i = 0; i < count; i++) { - u8* found = memfind(start, size, pattern, patSize); + u8 *found = memfind(start, size, pattern, patSize); if (found == NULL) break; @@ -80,11 +79,12 @@ patchMemory(u8* start, u32 size, const void* pattern, u32 patSize, int offset, } size_t -strnlen(const char* string, size_t maxlen) +strnlen(const char *string, size_t maxlen) { size_t size; - for (size = 0; *string && size < maxlen; string++, size++); + for (size = 0; *string && size < maxlen; string++, size++) + ; return size; } diff --git a/external/loader/source/memory.h b/external/loader/source/memory.h index 9eebaa7..c7b77f3 100644 --- a/external/loader/source/memory.h +++ b/external/loader/source/memory.h @@ -1,10 +1,9 @@ #ifndef __MEMORY_H #define __MEMORY_H -int memcmp(const void* buf1, const void* buf2, u32 size); -u8* memfind(u8* startPos, u32 size, const void* pattern, u32 patternSize); -u32 patchMemory(u8* start, u32 size, const void* pattern, u32 patSize, int offset, - const void* replace, u32 repSize, u32 count); -size_t strnlen(const char* string, size_t maxlen); +int memcmp(const void *buf1, const void *buf2, u32 size); +u8 *memfind(u8 *startPos, u32 size, const void *pattern, u32 patternSize); +u32 patchMemory(u8 *start, u32 size, const void *pattern, u32 patSize, int offset, const void *replace, u32 repSize, u32 count); +size_t strnlen(const char *string, size_t maxlen); #endif diff --git a/external/loader/source/patcher.c b/external/loader/source/patcher.c index 55c7f45..d11695f 100644 --- a/external/loader/source/patcher.c +++ b/external/loader/source/patcher.c @@ -14,14 +14,14 @@ #include "config.h" int -fileOpen(Handle* file, FS_ArchiveID id, const char* path, int flags) +fileOpen(Handle *file, FS_ArchiveID id, const char *path, int flags) { FS_Path apath; FS_Path ppath; apath.type = PATH_EMPTY; apath.size = 1; - apath.data = (u8*)""; + apath.data = (u8 *)""; ppath.type = PATH_ASCII; ppath.data = path; @@ -46,8 +46,7 @@ load_config() } // Read file. - if (!R_SUCCEEDED( - FSFILE_Read(file, &total, 0, &config, sizeof(struct config_file)))) { + if (!R_SUCCEEDED(FSFILE_Read(file, &total, 0, &config, sizeof(struct config_file)))) { FSFILE_Close(file); // Read to memory. // Failed to read. @@ -69,79 +68,78 @@ load_config() failed_load_config = 0; - logstr(" loaded config file\n"); + logstr(" loaded config file\n"); return; } -static int loadTitleLocaleConfig(u64 progId, u8 *regionId, u8 *languageId) +static int +loadTitleLocaleConfig(u64 progId, u8 *regionId, u8 *languageId) { // FIXME - Rewrite this function to use a single line-based config of - // the grammar: + // the grammar: - // lang := "ja" | "en" | "fr" | "de" | "it" | "es" | "zh" | "ko" | "nl" | "pt" | "ru" | "tw" - // region := "JP" | "US" | "EU" | "AU" | "CN" | "KO" | "TW" - // title := (0123456789abcdef)16 - // langcode := lang . "_" . country - // line := title langcode + // lang := "ja" | "en" | "fr" | "de" | "it" | "es" | "zh" | "ko" | "nl" | "pt" | "ru" | "tw" + // region := "JP" | "US" | "EU" | "AU" | "CN" | "KO" | "TW" + // title := (0123456789abcdef)16 + // langcode := lang . "_" . country + // line := title langcode - // So this would be valid as an example file: - // 0040000000012300 en_US - // 0040000000032100 ja_JP + // So this would be valid as an example file: + // 0040000000012300 en_US + // 0040000000032100 ja_JP // Directory seeks have severe issues on FAT and // dumping configs based on 3dsdb (more than 1000) causes things // to kinda choke. FAT is not meant for large numbers of files per // directory due to linear seeks rather than tree or hash-based indexes. - // This really does need a rewrite. - - char path[] = "/corbenik/etc/locale/0000000000000000"; - u32 i = 36; - while(progId) { - static const char hexDigits[] = "0123456789ABCDEF"; - path[i--] = hexDigits[(u32)(progId & 0xF)]; - progId >>= 4; - } - - static const char* regions[] = { "JPN", "USA", "EUR", "AUS", - "CHN", "KOR", "TWN" }; - static const char* languages[] = { "JA", "EN", "FR", "DE", "IT", "ES", - "ZH", "KO", "NL", "PT", "RU", "TW" }; - Handle file; - Result ret = fileOpen(&file, ARCHIVE_SDMC, path, FS_OPEN_READ); - if(R_SUCCEEDED(ret)) { - char buf[6]; - u32 total; - ret = FSFILE_Read(file, &total, 0, buf, 6); - FSFILE_Close(file); - - if(!R_SUCCEEDED(ret) || total < 6) - return -1; - - for(u32 i = 0; i < 7; i++) { - if(memcmp(buf, regions[i], 3) == 0) { - *regionId = (u8)i; - break; - } - } - - for(u32 i = 0; i < 12; i++) { - if(memcmp(buf + 4, languages[i], 2) == 0) { - *languageId = (u8)i; - break; - } - } - - logstr(" langemu cfg applied\n "); - logstr(path); - logstr("\n"); - } - return ret; + // This really does need a rewrite. + + char path[] = "/corbenik/etc/locale/0000000000000000"; + u32 i = 36; + while (progId) { + static const char hexDigits[] = "0123456789ABCDEF"; + path[i--] = hexDigits[(u32)(progId & 0xF)]; + progId >>= 4; + } + + static const char *regions[] = { "JPN", "USA", "EUR", "AUS", "CHN", "KOR", "TWN" }; + static const char *languages[] = { "JA", "EN", "FR", "DE", "IT", "ES", "ZH", "KO", "NL", "PT", "RU", "TW" }; + Handle file; + Result ret = fileOpen(&file, ARCHIVE_SDMC, path, FS_OPEN_READ); + if (R_SUCCEEDED(ret)) { + char buf[6]; + u32 total; + ret = FSFILE_Read(file, &total, 0, buf, 6); + FSFILE_Close(file); + + if (!R_SUCCEEDED(ret) || total < 6) + return -1; + + for (u32 i = 0; i < 7; i++) { + if (memcmp(buf, regions[i], 3) == 0) { + *regionId = (u8)i; + break; + } + } + + for (u32 i = 0; i < 12; i++) { + if (memcmp(buf + 4, languages[i], 2) == 0) { + *languageId = (u8)i; + break; + } + } + + logstr(" langemu cfg applied\n "); + logstr(path); + logstr("\n"); + } + return ret; } -static u8* -getCfgOffsets(u8* code, u32 size, u32* CFGUHandleOffset) +static u8 * +getCfgOffsets(u8 *code, u32 size, u32 *CFGUHandleOffset) { // HANS: // Look for error code which is known to be stored near cfg:u handle @@ -150,27 +148,23 @@ getCfgOffsets(u8* code, u32 size, u32* CFGUHandleOffset) u32 n = 0, possible[24]; - for (u8* pos = code + 4; n < 24 && pos < code + size - 4; pos += 4) { - if (*(u32*)pos == 0xD8A103F9) { - for (u32* l = (u32*)pos - 4; n < 24 && l < (u32*)pos + 4; l++) + for (u8 *pos = code + 4; n < 24 && pos < code + size - 4; pos += 4) { + if (*(u32 *)pos == 0xD8A103F9) { + for (u32 *l = (u32 *)pos - 4; n < 24 && l < (u32 *)pos + 4; l++) if (*l <= 0x10000000) possible[n++] = *l; } } - for (u8* CFGU_GetConfigInfoBlk2_endPos = code; - CFGU_GetConfigInfoBlk2_endPos < code + size - 8; - CFGU_GetConfigInfoBlk2_endPos += 4) { - static const u32 CFGU_GetConfigInfoBlk2_endPattern[] = { 0xE8BD8010, - 0x00010082 }; + for (u8 *CFGU_GetConfigInfoBlk2_endPos = code; CFGU_GetConfigInfoBlk2_endPos < code + size - 8; CFGU_GetConfigInfoBlk2_endPos += 4) { + static const u32 CFGU_GetConfigInfoBlk2_endPattern[] = { 0xE8BD8010, 0x00010082 }; // There might be multiple implementations of GetConfigInfoBlk2 but // let's search for the one we want - u32* cmp = (u32*)CFGU_GetConfigInfoBlk2_endPos; + u32 *cmp = (u32 *)CFGU_GetConfigInfoBlk2_endPos; - if (cmp[0] == CFGU_GetConfigInfoBlk2_endPattern[0] && - cmp[1] == CFGU_GetConfigInfoBlk2_endPattern[1]) { - *CFGUHandleOffset = *((u32*)CFGU_GetConfigInfoBlk2_endPos + 2); + if (cmp[0] == CFGU_GetConfigInfoBlk2_endPattern[0] && cmp[1] == CFGU_GetConfigInfoBlk2_endPattern[1]) { + *CFGUHandleOffset = *((u32 *)CFGU_GetConfigInfoBlk2_endPos + 2); for (u32 i = 0; i < n; i++) if (possible[i] == *CFGUHandleOffset) @@ -184,57 +178,45 @@ getCfgOffsets(u8* code, u32 size, u32* CFGUHandleOffset) } static void -patchCfgGetLanguage(u8* code, u32 size, u8 languageId, - u8* CFGU_GetConfigInfoBlk2_endPos) +patchCfgGetLanguage(u8 *code, u32 size, u8 languageId, u8 *CFGU_GetConfigInfoBlk2_endPos) { - u8* CFGU_GetConfigInfoBlk2_startPos; // Let's find STMFD SP (there might be + u8 *CFGU_GetConfigInfoBlk2_startPos; // Let's find STMFD SP (there might be // a NOP before, but nevermind) for (CFGU_GetConfigInfoBlk2_startPos = CFGU_GetConfigInfoBlk2_endPos - 4; - CFGU_GetConfigInfoBlk2_startPos >= code && - *((u16*)CFGU_GetConfigInfoBlk2_startPos + 1) != 0xE92D; - CFGU_GetConfigInfoBlk2_startPos -= 2) + CFGU_GetConfigInfoBlk2_startPos >= code && *((u16 *)CFGU_GetConfigInfoBlk2_startPos + 1) != 0xE92D; CFGU_GetConfigInfoBlk2_startPos -= 2) ; - for (u8* languageBlkIdPos = code; languageBlkIdPos < code + size; - languageBlkIdPos += 4) { - if (*(u32*)languageBlkIdPos == 0xA0002) { - for (u8* instr = languageBlkIdPos - 8; - instr >= languageBlkIdPos - 0x1008 && instr >= code + 4; - instr -= 4) // Should be enough + for (u8 *languageBlkIdPos = code; languageBlkIdPos < code + size; languageBlkIdPos += 4) { + if (*(u32 *)languageBlkIdPos == 0xA0002) { + for (u8 *instr = languageBlkIdPos - 8; instr >= languageBlkIdPos - 0x1008 && instr >= code + 4; instr -= 4) // Should be enough { if (instr[3] == 0xEB) // We're looking for BL { - u8* calledFunction = instr; + u8 *calledFunction = instr; u32 i = 0, found; do { - u32 low24 = (*(u32*)calledFunction & 0x00FFFFFF) << 2; - u32 signMask = (u32)(-(low24 >> 25)) & - 0xFC000000; // Sign extension - s32 offset = (s32)(low24 | signMask) + - 8; // Branch offset + 8 for prefetch + u32 low24 = (*(u32 *)calledFunction & 0x00FFFFFF) << 2; + u32 signMask = (u32)(-(low24 >> 25)) & 0xFC000000; // Sign extension + s32 offset = (s32)(low24 | signMask) + 8; // Branch offset + 8 for prefetch calledFunction += offset; - found = calledFunction >= - CFGU_GetConfigInfoBlk2_startPos - 4 && - calledFunction <= CFGU_GetConfigInfoBlk2_endPos; + found = calledFunction >= CFGU_GetConfigInfoBlk2_startPos - 4 && calledFunction <= CFGU_GetConfigInfoBlk2_endPos; i++; } while (i < 2 && !found && calledFunction[3] == 0xEA); if (found) { - *((u32*)instr - 1) = - 0xE3A00000 | languageId; // mov r0, sp - // => mov r0, =languageId - *(u32*)instr = 0xE5CD0000; // bl + *((u32 *)instr - 1) = 0xE3A00000 | languageId; // mov r0, sp + // => mov r0, =languageId + *(u32 *)instr = 0xE5CD0000; // bl // CFGU_GetConfigInfoBlk2 => // strb r0, [sp] - *((u32*)instr + 1) = - 0xE3B00000; // (1 or 2 instructions) => movs - // r0, 0 (result code) + *((u32 *)instr + 1) = 0xE3B00000; // (1 or 2 instructions) => movs + // r0, 0 (result code) - logstr(" patched language\n"); + logstr(" patched language\n"); // We're done return; @@ -246,36 +228,31 @@ patchCfgGetLanguage(u8* code, u32 size, u8 languageId, } static void -patchCfgGetRegion(u8* code, u32 size, u8 regionId, u32 CFGUHandleOffset) +patchCfgGetRegion(u8 *code, u32 size, u8 regionId, u32 CFGUHandleOffset) { - for (u8* cmdPos = code; cmdPos < code + size - 28; cmdPos += 4) { - static const u32 cfgSecureInfoGetRegionCmdPattern[] = { 0xEE1D4F70, - 0xE3A00802, - 0xE5A40080 }; - - u32* cmp = (u32*)cmdPos; - - if (cmp[0] == cfgSecureInfoGetRegionCmdPattern[0] && - cmp[1] == cfgSecureInfoGetRegionCmdPattern[1] && - cmp[2] == cfgSecureInfoGetRegionCmdPattern[2] && - *((u16*)cmdPos + 7) == 0xE59F && - *(u32*)(cmdPos + 20 + *((u16*)cmdPos + 6)) == CFGUHandleOffset) { - *((u32*)cmdPos + 4) = 0xE3A00000 | regionId; // mov r0, =regionId - *((u32*)cmdPos + 5) = 0xE5C40008; // strb r0, [r4, 8] - *((u32*)cmdPos + 6) = 0xE3B00000; // movs r0, 0 (result - // code) ('s' not needed but nvm) - *((u32*)cmdPos + 7) = 0xE5840004; // str r0, [r4, 4] + for (u8 *cmdPos = code; cmdPos < code + size - 28; cmdPos += 4) { + static const u32 cfgSecureInfoGetRegionCmdPattern[] = { 0xEE1D4F70, 0xE3A00802, 0xE5A40080 }; + + u32 *cmp = (u32 *)cmdPos; + + if (cmp[0] == cfgSecureInfoGetRegionCmdPattern[0] && cmp[1] == cfgSecureInfoGetRegionCmdPattern[1] && cmp[2] == cfgSecureInfoGetRegionCmdPattern[2] && + *((u16 *)cmdPos + 7) == 0xE59F && *(u32 *)(cmdPos + 20 + *((u16 *)cmdPos + 6)) == CFGUHandleOffset) { + *((u32 *)cmdPos + 4) = 0xE3A00000 | regionId; // mov r0, =regionId + *((u32 *)cmdPos + 5) = 0xE5C40008; // strb r0, [r4, 8] + *((u32 *)cmdPos + 6) = 0xE3B00000; // movs r0, 0 (result + // code) ('s' not needed but nvm) + *((u32 *)cmdPos + 7) = 0xE5840004; // str r0, [r4, 4] // The remaining, not patched, function code will do the rest for us break; } } - logstr(" patched region\n"); + logstr(" patched region\n"); } static void -adjust_cpu_settings(u64 progId, u8* code, u32 size) +adjust_cpu_settings(u64 progId, u8 *code, u32 size) { if (!failed_load_config) { u32 cpuSetting = 0; @@ -285,11 +262,9 @@ adjust_cpu_settings(u64 progId, u8* code, u32 size) cpuSetting |= config.options[OPTION_LOADER_CPU_800MHZ] << 1; if (cpuSetting) { - static const u8 cfgN3dsCpuPattern[] = { 0x00, 0x40, 0xA0, - 0xE1, 0x07, 0x00 }; + static const u8 cfgN3dsCpuPattern[] = { 0x00, 0x40, 0xA0, 0xE1, 0x07, 0x00 }; - u32* cfgN3dsCpuLoc = (u32*)memfind(code, size, cfgN3dsCpuPattern, - sizeof(cfgN3dsCpuPattern)); + u32 *cfgN3dsCpuLoc = (u32 *)memfind(code, size, cfgN3dsCpuPattern, sizeof(cfgN3dsCpuPattern)); // Patch N3DS CPU Clock and L2 cache setting if (cfgN3dsCpuLoc != NULL) { @@ -300,9 +275,8 @@ adjust_cpu_settings(u64 progId, u8* code, u32 size) } } - void -language_emu(u64 progId, u8* code, u32 size) +language_emu(u64 progId, u8 *code, u32 size) { if (!failed_load_config && config.options[OPTION_LOADER_LANGEMU]) { u32 tidHigh = (progId & 0xFFFFFFF000000000LL) >> 0x24; @@ -311,20 +285,16 @@ language_emu(u64 progId, u8* code, u32 size) // Language emulation u8 regionId = 0xFF, languageId = 0xFF; - if (R_SUCCEEDED( - loadTitleLocaleConfig(progId, ®ionId, &languageId))) { + if (R_SUCCEEDED(loadTitleLocaleConfig(progId, ®ionId, &languageId))) { u32 CFGUHandleOffset; - u8* CFGU_GetConfigInfoBlk2_endPos = - getCfgOffsets(code, size, &CFGUHandleOffset); + u8 *CFGU_GetConfigInfoBlk2_endPos = getCfgOffsets(code, size, &CFGUHandleOffset); if (CFGU_GetConfigInfoBlk2_endPos != NULL) { if (languageId != 0xFF) - patchCfgGetLanguage(code, size, languageId, - CFGU_GetConfigInfoBlk2_endPos); + patchCfgGetLanguage(code, size, languageId, CFGU_GetConfigInfoBlk2_endPos); if (regionId != 0xFF) - patchCfgGetRegion(code, size, regionId, - CFGUHandleOffset); + patchCfgGetRegion(code, size, regionId, CFGUHandleOffset); } } } @@ -332,31 +302,31 @@ language_emu(u64 progId, u8* code, u32 size) } void -overlay_patch(u64 progId, u8* code, u32 size) +overlay_patch(u64 progId, u8 *code, u32 size) { // TODO - Implement. Needs some thought. This should allow usage of files off SD rather than RomFS. } // This is only for the .data segment. void -patch_data(u64 progId, u8* data, u32 size, u32 orig_size) +patch_data(u64 progId, u8 *data, u32 size, u32 orig_size) { } // This is only for the .ro segment. void -patch_ro(u64 progId, u8* ro, u32 size, u32 orig_size) +patch_ro(u64 progId, u8 *ro, u32 size, u32 orig_size) { } // This is only for the .code segment. void -patch_text(u64 progId, u8* text, u32 size, u32 orig_size) +patch_text(u64 progId, u8 *text, u32 size, u32 orig_size) { - if (progId == 0x0004013000008002LL) + if (progId == 0x0004013000008002LL) adjust_cpu_settings(progId, text, orig_size); - execb(progId, text, orig_size); + execb(progId, text, orig_size); language_emu(progId, text, orig_size); } diff --git a/external/loader/source/patcher.h b/external/loader/source/patcher.h index 6619e6f..7f09e45 100644 --- a/external/loader/source/patcher.h +++ b/external/loader/source/patcher.h @@ -3,9 +3,9 @@ #include <3ds/types.h> -void patch_text(u64 progId, u8* text, u32 size, u32 orig_size); -void patch_data(u64 progId, u8* data, u32 size, u32 orig_size); -void patch_ro(u64 progId, u8* ro, u32 size, u32 orig_size); +void patch_text(u64 progId, u8 *text, u32 size, u32 orig_size); +void patch_data(u64 progId, u8 *data, u32 size, u32 orig_size); +void patch_ro(u64 progId, u8 *ro, u32 size, u32 orig_size); u32 get_text_extend(u64 progId, u32 size_orig); u32 get_ro_extend(u64 progId, u32 size_orig); @@ -13,7 +13,7 @@ u32 get_data_extend(u64 progId, u32 size_orig); void load_config(); -int fileOpen(Handle* file, FS_ArchiveID id, const char* path, int flags); +int fileOpen(Handle *file, FS_ArchiveID id, const char *path, int flags); u8 get_cpumode(u64 progId); diff --git a/external/loader/source/pxipm.c b/external/loader/source/pxipm.c index ebeebb4..e89440a 100644 --- a/external/loader/source/pxipm.c +++ b/external/loader/source/pxipm.c @@ -30,31 +30,30 @@ pxipmExit(void) } Result -PXIPM_RegisterProgram(u64* prog_handle, FS_ProgramInfo* title, - FS_ProgramInfo* update) +PXIPM_RegisterProgram(u64 *prog_handle, FS_ProgramInfo *title, FS_ProgramInfo *update) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x2, 8, 0); // 0x20200 memcpy(&cmdbuf[1], &title->programId, sizeof(u64)); - *(u8*)&cmdbuf[3] = title->mediaType; - memcpy(((u8*)&cmdbuf[3]) + 1, &title->padding, 7); + *(u8 *)&cmdbuf[3] = title->mediaType; + memcpy(((u8 *)&cmdbuf[3]) + 1, &title->padding, 7); memcpy(&cmdbuf[5], &update->programId, sizeof(u64)); - *(u8*)&cmdbuf[7] = update->mediaType; - memcpy(((u8*)&cmdbuf[7]) + 1, &update->padding, 7); + *(u8 *)&cmdbuf[7] = update->mediaType; + memcpy(((u8 *)&cmdbuf[7]) + 1, &update->padding, 7); Result ret = 0; if (R_FAILED(ret = svcSendSyncRequest(pxipmHandle))) return ret; - *prog_handle = *(u64*)&cmdbuf[2]; + *prog_handle = *(u64 *)&cmdbuf[2]; return cmdbuf[1]; } Result -PXIPM_GetProgramInfo(exheader_header* exheader, u64 prog_handle) +PXIPM_GetProgramInfo(exheader_header *exheader, u64 prog_handle) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x1, 2, 2); // 0x10082 cmdbuf[1] = (u32)(prog_handle); @@ -72,7 +71,7 @@ PXIPM_GetProgramInfo(exheader_header* exheader, u64 prog_handle) Result PXIPM_UnregisterProgram(u64 prog_handle) { - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x3, 2, 0); // 0x30080 cmdbuf[1] = (u32)(prog_handle); diff --git a/external/loader/source/pxipm.h b/external/loader/source/pxipm.h index 002eeae..c8769fe 100644 --- a/external/loader/source/pxipm.h +++ b/external/loader/source/pxipm.h @@ -6,9 +6,8 @@ Result pxipmInit(void); void pxipmExit(void); -Result PXIPM_RegisterProgram(u64* prog_handle, FS_ProgramInfo* title, - FS_ProgramInfo* update); -Result PXIPM_GetProgramInfo(exheader_header* exheader, u64 prog_handle); +Result PXIPM_RegisterProgram(u64 *prog_handle, FS_ProgramInfo *title, FS_ProgramInfo *update); +Result PXIPM_GetProgramInfo(exheader_header *exheader, u64 prog_handle); Result PXIPM_UnregisterProgram(u64 prog_handle); #endif diff --git a/external/loader/source/srvsys.c b/external/loader/source/srvsys.c index 683707d..c5d7161 100644 --- a/external/loader/source/srvsys.c +++ b/external/loader/source/srvsys.c @@ -25,8 +25,7 @@ srvSysInit() while (1) { rc = svcConnectToPort(&srvHandle, "srv:"); - if (R_LEVEL(rc) != RL_PERMANENT || R_SUMMARY(rc) != RS_NOTFOUND || - R_DESCRIPTION(rc) != RD_NOT_FOUND) + if (R_LEVEL(rc) != RL_PERMANENT || R_SUMMARY(rc) != RS_NOTFOUND || R_DESCRIPTION(rc) != RD_NOT_FOUND) break; svcSleepThread(500000); } @@ -43,7 +42,7 @@ Result srvSysRegisterClient(void) { Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x1, 0, 2); // 0x10002 cmdbuf[1] = IPC_Desc_CurProcessHandle(); @@ -78,13 +77,13 @@ srvSysExit() } Result -srvSysGetServiceHandle(Handle* out, const char* name) +srvSysGetServiceHandle(Handle *out, const char *name) { Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x5, 4, 0); // 0x50100 - strncpy((char*)&cmdbuf[1], name, 8); + strncpy((char *)&cmdbuf[1], name, 8); cmdbuf[3] = strlen(name); cmdbuf[4] = 0x0; @@ -98,10 +97,10 @@ srvSysGetServiceHandle(Handle* out, const char* name) } Result -srvSysEnableNotification(Handle* semaphoreOut) +srvSysEnableNotification(Handle *semaphoreOut) { Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x2, 0, 0); @@ -115,10 +114,10 @@ srvSysEnableNotification(Handle* semaphoreOut) } Result -srvSysReceiveNotification(u32* notificationIdOut) +srvSysReceiveNotification(u32 *notificationIdOut) { Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0xB, 0, 0); // 0xB0000 @@ -132,13 +131,13 @@ srvSysReceiveNotification(u32* notificationIdOut) } Result -srvSysRegisterService(Handle* out, const char* name, int maxSessions) +srvSysRegisterService(Handle *out, const char *name, int maxSessions) { Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x3, 4, 0); // 0x30100 - strncpy((char*)&cmdbuf[1], name, 8); + strncpy((char *)&cmdbuf[1], name, 8); cmdbuf[3] = strlen(name); cmdbuf[4] = maxSessions; @@ -152,13 +151,13 @@ srvSysRegisterService(Handle* out, const char* name, int maxSessions) } Result -srvSysUnregisterService(const char* name) +srvSysUnregisterService(const char *name) { Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); + u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x4, 3, 0); // 0x400C0 - strncpy((char*)&cmdbuf[1], name, 8); + strncpy((char *)&cmdbuf[1], name, 8); cmdbuf[3] = strlen(name); if (R_FAILED(rc = svcSendSyncRequest(srvHandle))) diff --git a/external/loader/source/srvsys.h b/external/loader/source/srvsys.h index ace5bf9..ca23b6e 100644 --- a/external/loader/source/srvsys.h +++ b/external/loader/source/srvsys.h @@ -17,7 +17,7 @@ Result srvSysExit(void); * @param out Pointer to write the handle to. * @param name Name of the service. */ -Result srvSysGetServiceHandle(Handle* out, const char* name); +Result srvSysGetServiceHandle(Handle *out, const char *name); /// Registers the current process as a client to the service API. Result srvSysRegisterClient(void); @@ -26,14 +26,14 @@ Result srvSysRegisterClient(void); * @brief Enables service notificatios, returning a notification semaphore. * @param semaphoreOut Pointer to output the notification semaphore to. */ -Result srvSysEnableNotification(Handle* semaphoreOut); +Result srvSysEnableNotification(Handle *semaphoreOut); /** * @brief Receives a notification. * @param notificationIdOut Pointer to output the ID of the received * notification to. */ -Result srvSysReceiveNotification(u32* notificationIdOut); +Result srvSysReceiveNotification(u32 *notificationIdOut); /** * @brief Registers the current process as a service. @@ -41,12 +41,12 @@ Result srvSysReceiveNotification(u32* notificationIdOut); * @param name Name of the service. * @param maxSessions Maximum number of sessions the service can handle. */ -Result srvSysRegisterService(Handle* out, const char* name, int maxSessions); +Result srvSysRegisterService(Handle *out, const char *name, int maxSessions); /** * @brief Unregisters the current process as a service. * @param name Name of the service. */ -Result srvSysUnregisterService(const char* name); +Result srvSysUnregisterService(const char *name); #endif diff --git a/source/config.c b/source/config.c index c76583e..1b613e2 100644 --- a/source/config.c +++ b/source/config.c @@ -1,6 +1,6 @@ #include "common.h" -FILE* conf_handle; +FILE *conf_handle; struct config_file config; @@ -45,8 +45,7 @@ load_config() "has incorrect magic:\n" " '%c%c%c%c'\n" "Regenerating with defaults.\n", - PATH_CONFIG, config.magic[0], config.magic[1], - config.magic[2], config.magic[3]); + PATH_CONFIG, config.magic[0], config.magic[1], config.magic[2], config.magic[3]); f_unlink(PATH_CONFIG); regenerate_config(); } diff --git a/source/config.h b/source/config.h index a990723..7d3cad3 100644 --- a/source/config.h +++ b/source/config.h @@ -23,10 +23,10 @@ extern struct config_file config; enum type { - boolean_val, // Toggle - ranged_val, // N1 - N2, left and right to pick. - mask_val, // Bitmask allowed values. - not_option // Skip over this. + boolean_val, // Toggle + ranged_val, // N1 - N2, left and right to pick. + mask_val, // Bitmask allowed values. + not_option // Skip over this. }; struct range_str @@ -54,7 +54,7 @@ struct options_s #define OPTION_TRANSP_BG 8 // Background color is not drawn under text. #define OPTION_NO_CLEAR_BG 9 - // Framebuffer is preserved from whatever ran before us. +// Framebuffer is preserved from whatever ran before us. #define OPTION_READ_ME 10 // Remove Help/Readme from menu. #define OPTION_LOADER_CPU_L2 11 // Enable L2 cache. @@ -62,16 +62,16 @@ struct options_s #define OPTION_LOADER_LANGEMU 13 // Enable 800Mhz mode. #define OPTION_REPLACE_ALLOCATED_SVC 14 - // Replace allocated services. Normally you don't want this. +// Replace allocated services. Normally you don't want this. #define IGNORE_PATCH_DEPS 14 // Ignore patch UUID dependencies. Not recommended. #define IGNORE_BROKEN_SHIT 15 - // Allow enabling patches which are marked as 'incompatible'. Chances are - // there's a reason. +// Allow enabling patches which are marked as 'incompatible'. Chances are +// there's a reason. #define OPTION_AADOWNGRADE 16 // Anti-anti-downgrade. -#define OPTION_MEMEXEC 17 // Prevent MPU from disabling execute permissions. -#define OPTION_UNITINFO 18 // Dev UNITINFO. Note that this is overkill. +#define OPTION_MEMEXEC 17 // Prevent MPU from disabling execute permissions. +#define OPTION_UNITINFO 18 // Dev UNITINFO. Note that this is overkill. //#define HEADER_COLOR 12 // Color of header text. //#define BG_COLOR 13 // Color of background. diff --git a/source/fatfs/diskio.c b/source/fatfs/diskio.c index 95256a1..f94270e 100644 --- a/source/fatfs/diskio.c +++ b/source/fatfs/diskio.c @@ -15,8 +15,7 @@ /*-----------------------------------------------------------------------*/ DSTATUS -disk_status(__attribute__((unused)) - BYTE pdrv /* Physical drive nmuber to identify the drive */ +disk_status(__attribute__((unused)) BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { return RES_OK; @@ -27,8 +26,7 @@ disk_status(__attribute__((unused)) /*-----------------------------------------------------------------------*/ DSTATUS -disk_initialize(__attribute__((unused)) - BYTE pdrv /* Physical drive nmuber to identify the drive */ +disk_initialize(__attribute__((unused)) BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { if (!sdmmc_sdcard_init()) @@ -41,11 +39,10 @@ disk_initialize(__attribute__((unused)) /*-----------------------------------------------------------------------*/ DRESULT -disk_read(__attribute__((unused)) - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - BYTE* buff, /* Data buffer to store read data */ - DWORD sector, /* Sector address in LBA */ - UINT count /* Number of sectors to read */ +disk_read(__attribute__((unused)) BYTE pdrv, /* Physical drive nmuber to identify the drive */ + BYTE *buff, /* Data buffer to store read data */ + DWORD sector, /* Sector address in LBA */ + UINT count /* Number of sectors to read */ ) { if (sdmmc_sdcard_readsectors(sector, count, buff)) { @@ -61,14 +58,13 @@ disk_read(__attribute__((unused)) #if _USE_WRITE DRESULT -disk_write(__attribute__((unused)) - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - const BYTE* buff, /* Data to be written */ - DWORD sector, /* Sector address in LBA */ - UINT count /* Number of sectors to write */ +disk_write(__attribute__((unused)) BYTE pdrv, /* Physical drive nmuber to identify the drive */ + const BYTE *buff, /* Data to be written */ + DWORD sector, /* Sector address in LBA */ + UINT count /* Number of sectors to write */ ) { - if (sdmmc_sdcard_writesectors(sector, count, (BYTE*)buff)) { + if (sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff)) { return RES_PARERR; } @@ -82,21 +78,20 @@ disk_write(__attribute__((unused)) #if _USE_IOCTL DRESULT -disk_ioctl( - __attribute__((unused)) BYTE pdrv, /* Physical drive nmuber (0..) */ - __attribute__((unused)) BYTE cmd, /* Control code */ - __attribute__((unused)) void* buff /* Buffer to send/receive control data */ - ) +disk_ioctl(__attribute__((unused)) BYTE pdrv, /* Physical drive nmuber (0..) */ + __attribute__((unused)) BYTE cmd, /* Control code */ + __attribute__((unused)) void *buff /* Buffer to send/receive control data */ + ) { switch (cmd) { case GET_SECTOR_SIZE: - *((DWORD*)buff) = 0x200; + *((DWORD *)buff) = 0x200; return RES_OK; case GET_SECTOR_COUNT: - *((DWORD*)buff) = getMMCDevice(1)->total_size; + *((DWORD *)buff) = getMMCDevice(1)->total_size; return RES_OK; case GET_BLOCK_SIZE: - *((DWORD*)buff) = 0x2000; + *((DWORD *)buff) = 0x2000; return RES_OK; case CTRL_SYNC: // nothing to do here - the disk_write function handles that diff --git a/source/fatfs/diskio.h b/source/fatfs/diskio.h index c57983e..cacc033 100644 --- a/source/fatfs/diskio.h +++ b/source/fatfs/diskio.h @@ -31,9 +31,9 @@ typedef enum { DSTATUS disk_initialize(BYTE pdrv); DSTATUS disk_status(BYTE pdrv); -DRESULT disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count); -DRESULT disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count); -DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void* buff); +DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count); +DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count); +DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff); /* Disk Status Bits (DSTATUS) */ @@ -44,13 +44,12 @@ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void* buff); /* Command code for disk_ioctrl fucntion */ /* Generic command (Used by FatFs) */ -#define CTRL_SYNC \ - 0 /* Complete pending write process (needed at _FS_READONLY == 0) */ +#define CTRL_SYNC 0 /* Complete pending write process (needed at _FS_READONLY == 0) */ #define GET_SECTOR_COUNT 1 /* Get media size (needed at _USE_MKFS == 1) */ #define GET_SECTOR_SIZE 2 /* Get sector size (needed at _MAX_SS != _MIN_SS) */ #define GET_BLOCK_SIZE 3 /* Get erase block size (needed at _USE_MKFS == 1) */ -#define CTRL_TRIM \ - 4 /* Inform device that the data on the block of sectors is no longer used \ +#define CTRL_TRIM \ + 4 /* Inform device that the data on the block of sectors is no longer used \ (needed at _USE_TRIM == 1) */ /* Generic command (Not used by FatFs) */ diff --git a/source/fatfs/ff.c b/source/fatfs/ff.c index 80c112c..4e72972 100644 --- a/source/fatfs/ff.c +++ b/source/fatfs/ff.c @@ -33,30 +33,29 @@ #if _USE_LFN == 1 #error Static LFN work area cannot be used at thread-safe configuration #endif -#define ENTER_FF(fs) \ - { \ - if (!lock_fs(fs)) \ - return FR_TIMEOUT; \ +#define ENTER_FF(fs) \ + { \ + if (!lock_fs(fs)) \ + return FR_TIMEOUT; \ } -#define LEAVE_FF(fs, res) \ - { \ - unlock_fs(fs, res); \ - return res; \ +#define LEAVE_FF(fs, res) \ + { \ + unlock_fs(fs, res); \ + return res; \ } #else #define ENTER_FF(fs) #define LEAVE_FF(fs, res) return res #endif -#define ABORT(fs, res) \ - { \ - fp->err = (BYTE)(res); \ - LEAVE_FF(fs, res); \ +#define ABORT(fs, res) \ + { \ + fp->err = (BYTE)(res); \ + LEAVE_FF(fs, res); \ } /* Definitions of sector size */ -#if (_MAX_SS < _MIN_SS) || (_MAX_SS != 512 && _MAX_SS != 1024 && \ - _MAX_SS != 2048 && _MAX_SS != 4096) || \ +#if (_MAX_SS < _MIN_SS) || (_MAX_SS != 512 && _MAX_SS != 1024 && _MAX_SS != 2048 && _MAX_SS != 4096) || \ (_MIN_SS != 512 && _MIN_SS != 1024 && _MIN_SS != 2048 && _MIN_SS != 4096) #error Wrong sector size configuration #endif @@ -68,13 +67,10 @@ /* Timestamp feature */ #if _FS_NORTC == 1 -#if _NORTC_YEAR < 1980 || _NORTC_YEAR > 2107 || _NORTC_MON < 1 || \ - _NORTC_MON > 12 || _NORTC_MDAY < 1 || _NORTC_MDAY > 31 +#if _NORTC_YEAR < 1980 || _NORTC_YEAR > 2107 || _NORTC_MON < 1 || _NORTC_MON > 12 || _NORTC_MDAY < 1 || _NORTC_MDAY > 31 #error Invalid _FS_NORTC settings #endif -#define GET_FATTIME() \ - ((DWORD)(_NORTC_YEAR - 1980) << 25 | (DWORD)_NORTC_MON << 21 | \ - (DWORD)_NORTC_MDAY << 16) +#define GET_FATTIME() ((DWORD)(_NORTC_YEAR - 1980) << 25 | (DWORD)_NORTC_MON << 21 | (DWORD)_NORTC_MDAY << 16) #else #define GET_FATTIME() get_fattime() #endif @@ -86,7 +82,7 @@ #endif typedef struct { - FATFS* fs; /* Object ID 1, volume (NULL:blank entry) */ + FATFS *fs; /* Object ID 1, volume (NULL:blank entry) */ DWORD clu; /* Object ID 2, directory (0:root) */ WORD idx; /* Object ID 3, directory index */ WORD ctr; /* Object open counter, 0:none, 0x01..0xFF:read mode open count, @@ -143,24 +139,17 @@ typedef struct \ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}*/ -static const unsigned short Tbl[] = - { /* CP437(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, - 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, - 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, - 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, - 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, - 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, - 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, - 0x2510, 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, - 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 0x2568, - 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, - 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, - 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, - 0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, - 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, - 0x25A0, 0x00A0 - }; +static const unsigned short Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, + 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, + 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, + 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, + 0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, + 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, + 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, + 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; WCHAR ff_convert( /* Converted character, Returns zero on error */ @@ -198,362 +187,242 @@ ff_wtoupper(WCHAR chr) #elif _CODE_PAGE == 720 /* Arabic (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x45, 0x41, 0x84, 0x41, 0x86, 0x43, 0x45, 0x45, 0x45, \ - 0x49, 0x49, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x93, 0x94, 0x95, \ - 0x49, 0x49, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x45, 0x41, 0x84, 0x41, 0x86, 0x43, 0x45, 0x45, 0x45, 0x49, 0x49, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x93, 0x94, 0x95, 0x49, 0x49, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 737 /* Greek (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, \ - 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAA, 0x92, \ - 0x93, 0x94, 0x95, 0x96, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x97, 0xEA, 0xEB, \ - 0xEC, 0xE4, 0xED, 0xEE, 0xE7, 0xE8, 0xF1, 0xEA, 0xEB, 0xEC, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x80, \ + 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAA, 0x92, 0x93, 0x94, 0x95, 0x96, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x97, \ + 0xEA, 0xEB, 0xEC, 0xE4, 0xED, 0xEE, 0xE7, 0xE8, 0xF1, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 775 /* Baltic (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x9A, 0x91, 0xA0, 0x8E, 0x95, 0x8F, 0x80, 0xAD, 0xED, 0x8A, \ - 0x8A, 0xA1, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0x95, \ - 0x96, 0x97, 0x97, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0xA1, 0xE0, 0xA3, 0xA3, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xB5, 0xB6, 0xB7, 0xB8, 0xBD, 0xBE, 0xC6, 0xC7, \ - 0xA5, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE5, 0xE5, 0xE6, 0xE3, 0xE8, 0xE8, 0xEA, 0xEA, 0xEE, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x9A, 0x91, 0xA0, 0x8E, 0x95, 0x8F, 0x80, 0xAD, 0xED, 0x8A, 0x8A, 0xA1, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0x95, 0x96, 0x97, 0x97, \ + 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xE0, 0xA3, 0xA3, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xB5, 0xB6, 0xB7, 0xB8, 0xBD, 0xBE, 0xC6, 0xC7, 0xA5, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE5, 0xE5, 0xE6, 0xE3, 0xE8, 0xE8, 0xEA, 0xEA, 0xEE, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, \ - 0xD8, 0xD7, 0xDE, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, \ - 0xEA, 0xEB, 0x59, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xB5, \ - 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0x21, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE7, 0xE9, 0xEA, 0xEB, 0xED, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, 0xD8, 0xD7, 0xDE, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, 0xEA, 0xEB, 0x59, \ + 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xB5, 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0x21, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE7, 0xE9, 0xEA, 0xEB, 0xED, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xDE, 0x8F, 0x80, 0x9D, 0xD3, 0x8A, \ - 0x8A, 0xD7, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x91, 0xE2, 0x99, 0x95, \ - 0x95, 0x97, 0x97, 0x99, 0x9A, 0x9B, 0x9B, 0x9D, 0x9E, 0x9F, 0xB5, \ - 0xD6, 0xE0, 0xE9, 0xA4, 0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0x8D, \ - 0xAC, 0xB8, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBD, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC6, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD2, 0xD3, 0xD2, 0xD5, 0xD6, 0xD7, \ - 0xB7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE3, 0xD5, 0xE6, 0xE6, 0xE8, 0xE9, 0xE8, 0xEB, 0xED, 0xED, \ - 0xDD, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xEB, 0xFC, 0xFC, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xDE, 0x8F, 0x80, 0x9D, 0xD3, 0x8A, 0x8A, 0xD7, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x91, 0xE2, 0x99, 0x95, 0x95, 0x97, 0x97, \ + 0x99, 0x9A, 0x9B, 0x9B, 0x9D, 0x9E, 0x9F, 0xB5, 0xD6, 0xE0, 0xE9, 0xA4, 0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0x8D, 0xAC, 0xB8, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBD, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC6, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD2, 0xD3, 0xD2, 0xD5, 0xD6, 0xD7, 0xB7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE3, 0xD5, 0xE6, 0xE6, 0xE8, 0xE9, 0xE8, 0xEB, 0xED, 0xED, 0xDD, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xEB, 0xFC, 0xFC, 0xFE, 0xFF \ } #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x81, 0x81, 0x83, 0x83, 0x85, 0x85, 0x87, 0x87, 0x89, 0x89, 0x8B, \ - 0x8B, 0x8D, 0x8D, 0x8F, 0x8F, 0x91, 0x91, 0x93, 0x93, 0x95, 0x95, \ - 0x97, 0x97, 0x99, 0x99, 0x9B, 0x9B, 0x9D, 0x9D, 0x9F, 0x9F, 0xA1, \ - 0xA1, 0xA3, 0xA3, 0xA5, 0xA5, 0xA7, 0xA7, 0xA9, 0xA9, 0xAB, 0xAB, \ - 0xAD, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB6, 0xB6, \ - 0xB8, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBE, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD3, 0xD3, 0xD5, 0xD5, 0xD7, 0xD7, \ - 0xDD, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xE0, 0xDF, 0xE0, 0xE2, 0xE2, \ - 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, \ - 0xEE, 0xEF, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, \ - 0xFA, 0xFA, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x81, 0x81, 0x83, 0x83, 0x85, 0x85, 0x87, 0x87, 0x89, 0x89, 0x8B, 0x8B, 0x8D, 0x8D, 0x8F, 0x8F, 0x91, 0x91, 0x93, 0x93, 0x95, 0x95, 0x97, 0x97, 0x99, \ + 0x99, 0x9B, 0x9B, 0x9D, 0x9D, 0x9F, 0x9F, 0xA1, 0xA1, 0xA3, 0xA3, 0xA5, 0xA5, 0xA7, 0xA7, 0xA9, 0xA9, 0xAB, 0xAB, 0xAD, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBE, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD3, 0xD3, 0xD5, 0xD5, 0xD7, 0xD7, 0xDD, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xE0, 0xDF, 0xE0, \ + 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, 0xEE, 0xEF, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, \ + 0xFA, 0xFA, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 857 /* Turkish (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, \ - 0xD8, 0xD7, 0x98, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, \ - 0xEA, 0xEB, 0x98, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9E, 0xB5, \ - 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA6, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0x21, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xDE, 0x59, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, 0xD8, 0xD7, 0x98, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, 0xEA, 0xEB, 0x98, \ + 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9E, 0xB5, 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA6, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0x21, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xDE, 0x59, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, \ - 0xD8, 0xD7, 0xDE, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, \ - 0xEA, 0xEB, 0x59, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xB5, \ - 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0x21, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE7, 0xE9, 0xEA, 0xEB, 0xED, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, 0xD8, 0xD7, 0xDE, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, 0xEA, 0xEB, 0x59, \ + 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xB5, 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0x21, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE7, 0xE9, 0xEA, 0xEB, 0xED, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 862 /* Hebrew (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x41, \ - 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0x21, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x41, 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0x21, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 866 /* Russian (OEM) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x80, \ - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, \ - 0x8C, 0x8D, 0x8E, 0x8F, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x90, 0x91, 0x92, \ - 0x93, 0x9d, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, \ - 0x9E, 0x9F, 0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x90, \ + 0x91, 0x92, 0x93, 0x9d, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x8A, 0x9B, 0x8C, 0x8D, 0x8E, 0x8F, 0xA0, \ - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xA3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xA5, 0xAA, 0xBB, 0xBC, 0xBD, 0xBC, 0xAF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ - 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x8A, 0x9B, 0x8C, 0x8D, 0x8E, 0x8F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xA3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xA5, 0xAA, 0xBB, 0xBC, 0xBD, 0xBC, 0xAF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ + 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xFF \ } #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x82, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x80, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x8A, 0x9B, 0x8C, 0x8D, 0x8E, 0x8F, 0xA0, \ - 0xA2, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB2, 0xA5, 0xB5, 0xB6, \ - 0xB7, 0xA8, 0xB9, 0xAA, 0xBB, 0xA3, 0xBD, 0xBD, 0xAF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, \ - 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x82, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x80, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x8A, 0x9B, 0x8C, 0x8D, 0x8E, 0x8F, 0xA0, 0xA2, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB2, 0xA5, 0xB5, 0xB6, 0xB7, 0xA8, 0xB9, 0xAA, 0xBB, 0xA3, 0xBD, 0xBD, 0xAF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, \ + 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF \ } #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0xAd, 0x9B, 0x8C, 0x9D, 0xAE, 0x9F, 0xA0, \ - 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ - 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x9F \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0xAd, 0x9B, 0x8C, 0x9D, 0xAE, 0x9F, 0xA0, 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ + 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x9F \ } #elif _CODE_PAGE == 1253 /* Greek (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xA2, 0xB8, 0xB9, 0xBA, 0xE0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xF2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, \ - 0xD9, 0xDA, 0xFB, 0xBC, 0xFD, 0xBF, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xA2, 0xB8, 0xB9, 0xBA, 0xE0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xF2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, \ + 0xD9, 0xDA, 0xFB, 0xBC, 0xFD, 0xBF, 0xFF \ } #elif _CODE_PAGE == 1254 /* Turkish (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x8A, 0x9B, 0x8C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ - 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x9F \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x8A, 0x9B, 0x8C, 0x9D, 0x9E, 0x9F, 0xA0, 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ + 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x9F \ } #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, \ - 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, \ - 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, \ + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 1256 /* Arabic (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x8C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x41, 0xE1, 0x41, \ - 0xE3, 0xE4, 0xE5, 0xE6, 0x43, 0x45, 0x45, 0x45, 0x45, 0xEC, 0xED, \ - 0x49, 0x49, 0xF0, 0xF1, 0xF2, 0xF3, 0x4F, 0xF5, 0xF6, 0xF7, 0xF8, \ - 0x55, 0xFA, 0x55, 0x55, 0xFD, 0xFE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x8C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x41, \ + 0xE1, 0x41, 0xE3, 0xE4, 0xE5, 0xE6, 0x43, 0x45, 0x45, 0x45, 0x45, 0xEC, 0xED, 0x49, 0x49, 0xF0, 0xF1, 0xF2, 0xF3, 0x4F, 0xF5, 0xF6, 0xF7, 0xF8, \ + 0x55, 0xFA, 0x55, 0x55, 0xFD, 0xFE, 0xFF \ } #elif _CODE_PAGE == 1257 /* Baltic (Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xA8, 0xB9, 0xAA, 0xBB, 0xBC, 0xBD, 0xBE, 0xAF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ - 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xFF \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xA8, 0xB9, 0xAA, 0xBB, 0xBC, 0xBD, 0xBE, 0xAF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ + 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xFF \ } #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ #define _DF1S 0 -#define _EXCVT \ - { \ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, \ - 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, \ - 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0xAC, 0x9D, 0x9E, 0x9F, 0xA0, \ - 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, \ - 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, \ - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, \ - 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ - 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, \ - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, 0xC1, 0xC2, \ - 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xEC, 0xCD, \ - 0xCE, 0xCF, 0xD0, 0xD1, 0xF2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ - 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xFE, 0x9F \ +#define _EXCVT \ + { \ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, \ + 0x99, 0x9A, 0x9B, 0xAC, 0x9D, 0x9E, 0x9F, 0xA0, 0x21, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, \ + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, \ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xC0, \ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xEC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xF2, 0xD3, 0xD4, 0xD5, 0xD6, 0xF7, 0xD8, \ + 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xFE, 0x9F \ } #elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */ @@ -575,22 +444,15 @@ ff_wtoupper(WCHAR chr) #if _DF1S /* Code page is DBCS */ #ifdef _DF2S /* Two 1st byte areas */ -#define IsDBCS1(c) \ - (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || \ - ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) +#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) #else /* One 1st byte area */ #define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) #endif #ifdef _DS3S /* Three 2nd byte areas */ -#define IsDBCS2(c) \ - (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || \ - ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || \ - ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) +#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) #else /* Two 2nd byte areas */ -#define IsDBCS2(c) \ - (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || \ - ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) +#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) #endif #else /* Code page is SBCS */ @@ -618,36 +480,35 @@ ff_wtoupper(WCHAR chr) / structure member because the structure is not binary compatible between / different platforms */ -#define BS_jmpBoot 0 /* x86 jump instruction (3) */ -#define BS_OEMName 3 /* OEM name (8) */ -#define BPB_BytsPerSec 11 /* Sector size [byte] (2) */ -#define BPB_SecPerClus 13 /* Cluster size [sector] (1) */ -#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (2) */ -#define BPB_NumFATs 16 /* Number of FAT copies (1) */ -#define BPB_RootEntCnt \ - 17 /* Number of root directory entries for FAT12/16 (2) */ -#define BPB_TotSec16 19 /* Volume size [sector] (2) */ -#define BPB_Media 21 /* Media descriptor (1) */ -#define BPB_FATSz16 22 /* FAT size [sector] (2) */ -#define BPB_SecPerTrk 24 /* Track size [sector] (2) */ -#define BPB_NumHeads 26 /* Number of heads (2) */ -#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */ -#define BPB_TotSec32 32 /* Volume size [sector] (4) */ -#define BS_DrvNum 36 /* Physical drive number (2) */ -#define BS_BootSig 38 /* Extended boot signature (1) */ -#define BS_VolID 39 /* Volume serial number (4) */ -#define BS_VolLab 43 /* Volume label (8) */ -#define BS_FilSysType 54 /* File system type (1) */ -#define BPB_FATSz32 36 /* FAT size [sector] (4) */ -#define BPB_ExtFlags 40 /* Extended flags (2) */ -#define BPB_FSVer 42 /* File system version (2) */ -#define BPB_RootClus 44 /* Root directory first cluster (4) */ -#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */ -#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */ -#define BS_DrvNum32 64 /* Physical drive number (2) */ -#define BS_BootSig32 66 /* Extended boot signature (1) */ -#define BS_VolID32 67 /* Volume serial number (4) */ -#define BS_VolLab32 71 /* Volume label (8) */ +#define BS_jmpBoot 0 /* x86 jump instruction (3) */ +#define BS_OEMName 3 /* OEM name (8) */ +#define BPB_BytsPerSec 11 /* Sector size [byte] (2) */ +#define BPB_SecPerClus 13 /* Cluster size [sector] (1) */ +#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (2) */ +#define BPB_NumFATs 16 /* Number of FAT copies (1) */ +#define BPB_RootEntCnt 17 /* Number of root directory entries for FAT12/16 (2) */ +#define BPB_TotSec16 19 /* Volume size [sector] (2) */ +#define BPB_Media 21 /* Media descriptor (1) */ +#define BPB_FATSz16 22 /* FAT size [sector] (2) */ +#define BPB_SecPerTrk 24 /* Track size [sector] (2) */ +#define BPB_NumHeads 26 /* Number of heads (2) */ +#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */ +#define BPB_TotSec32 32 /* Volume size [sector] (4) */ +#define BS_DrvNum 36 /* Physical drive number (2) */ +#define BS_BootSig 38 /* Extended boot signature (1) */ +#define BS_VolID 39 /* Volume serial number (4) */ +#define BS_VolLab 43 /* Volume label (8) */ +#define BS_FilSysType 54 /* File system type (1) */ +#define BPB_FATSz32 36 /* FAT size [sector] (4) */ +#define BPB_ExtFlags 40 /* Extended flags (2) */ +#define BPB_FSVer 42 /* File system version (2) */ +#define BPB_RootClus 44 /* Root directory first cluster (4) */ +#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */ +#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */ +#define BS_DrvNum32 64 /* Physical drive number (2) */ +#define BS_BootSig32 66 /* Extended boot signature (1) */ +#define BS_VolID32 67 /* Volume serial number (4) */ +#define BS_VolLab32 71 /* Volume label (8) */ #define BS_FilSysType32 82 /* File system type (1) */ #define FSI_LeadSig 0 /* FSI: Leading signature (4) */ #define FSI_StrucSig 484 /* FSI: Structure signature (4) */ @@ -677,7 +538,7 @@ ff_wtoupper(WCHAR chr) #define SZ_DIRE 32 /* Size of a directory entry */ #define LLEF 0x40 /* Last long entry flag in LDIR_Ord */ #define DDEM 0xE5 /* Deleted directory entry mark at DIR_Name[0] */ -#define RDDEM 0x05 /* Replacement of the character collides with DDEM */ +#define RDDEM 0x05 /* Replacement of the character collides with DDEM */ /*------------------------------------------------------------*/ /* Module private work area */ @@ -690,9 +551,8 @@ ff_wtoupper(WCHAR chr) #if _VOLUMES < 1 || _VOLUMES > 9 #error Wrong _VOLUMES setting #endif -static FATFS* - FatFs[_VOLUMES]; /* Pointer to the file system objects (logical drives) */ -static WORD Fsid; /* File system mount ID */ +static FATFS *FatFs[_VOLUMES]; /* Pointer to the file system objects (logical drives) */ +static WORD Fsid; /* File system mount ID */ #if _FS_RPATH && _VOLUMES >= 2 static BYTE CurrVol; /* Current drive */ @@ -713,33 +573,33 @@ static FILESEM Files[_FS_LOCK]; /* Open object lock semaphores */ #if _USE_LFN == 1 /* LFN feature with static working buffer */ static WCHAR LfnBuf[_MAX_LFN + 1]; #define DEFINE_NAMEBUF BYTE sfn[12] -#define INIT_BUF(dobj) \ - { \ - (dobj).fn = sfn; \ - (dobj).lfn = LfnBuf; \ +#define INIT_BUF(dobj) \ + { \ + (dobj).fn = sfn; \ + (dobj).lfn = LfnBuf; \ } #define FREE_BUF() #elif _USE_LFN == 2 /* LFN feature with dynamic working buffer on the stack */ -#define DEFINE_NAMEBUF \ - BYTE sfn[12]; \ +#define DEFINE_NAMEBUF \ + BYTE sfn[12]; \ WCHAR lbuf[_MAX_LFN + 1] -#define INIT_BUF(dobj) \ - { \ - (dobj).fn = sfn; \ - (dobj).lfn = lbuf; \ +#define INIT_BUF(dobj) \ + { \ + (dobj).fn = sfn; \ + (dobj).lfn = lbuf; \ } #define FREE_BUF() #elif _USE_LFN == 3 /* LFN feature with dynamic working buffer on the heap */ -#define DEFINE_NAMEBUF \ - BYTE sfn[12]; \ - WCHAR* lfn -#define INIT_BUF(dobj) \ - { \ - lfn = ff_memalloc((_MAX_LFN + 1) * 2); \ - if (!lfn) \ - LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \ - (dobj).lfn = lfn; \ - (dobj).fn = sfn; \ +#define DEFINE_NAMEBUF \ + BYTE sfn[12]; \ + WCHAR *lfn +#define INIT_BUF(dobj) \ + { \ + lfn = ff_memalloc((_MAX_LFN + 1) * 2); \ + if (!lfn) \ + LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \ + (dobj).lfn = lfn; \ + (dobj).fn = sfn; \ } #define FREE_BUF() ff_memfree(lfn) #else @@ -748,8 +608,7 @@ static WCHAR LfnBuf[_MAX_LFN + 1]; #endif #ifdef _EXCVT -static const BYTE ExCvt[] = - _EXCVT; /* Upper conversion table for extended characters */ +static const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for extended characters */ #endif /*-------------------------------------------------------------------------- @@ -764,14 +623,14 @@ static const BYTE ExCvt[] = /* Copy memory to memory */ static void -mem_cpy(void* dst, const void* src, UINT cnt) +mem_cpy(void *dst, const void *src, UINT cnt) { - BYTE* d = (BYTE*)dst; - const BYTE* s = (const BYTE*)src; + BYTE *d = (BYTE *)dst; + const BYTE *s = (const BYTE *)src; #if _WORD_ACCESS == 1 while (cnt >= sizeof(int)) { - *(int*)d = *(int*)s; + *(int *)d = *(int *)s; d += sizeof(int); s += sizeof(int); cnt -= sizeof(int); @@ -783,9 +642,9 @@ mem_cpy(void* dst, const void* src, UINT cnt) /* Fill memory */ static void -mem_set(void* dst, int val, UINT cnt) +mem_set(void *dst, int val, UINT cnt) { - BYTE* d = (BYTE*)dst; + BYTE *d = (BYTE *)dst; while (cnt--) *d++ = (BYTE)val; @@ -793,7 +652,7 @@ mem_set(void* dst, int val, UINT cnt) /* Compare memory to memory */ static int -mem_cmp(const void* dst, const void* src, UINT cnt) +mem_cmp(const void *dst, const void *src, UINT cnt) { const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; int r = 0; @@ -805,7 +664,7 @@ mem_cmp(const void* dst, const void* src, UINT cnt) /* Check if chr is contained in the string */ static int -chk_chr(const char* str, int chr) +chk_chr(const char *str, int chr) { while (*str && *str != chr) str++; @@ -817,19 +676,18 @@ chk_chr(const char* str, int chr) /*-----------------------------------------------------------------------*/ #if _FS_REENTRANT static int -lock_fs(FATFS* fs /* File system object */ +lock_fs(FATFS *fs /* File system object */ ) { return ff_req_grant(fs->sobj); } static void -unlock_fs(FATFS* fs, /* File system object */ +unlock_fs(FATFS *fs, /* File system object */ FRESULT res /* Result code to be returned */ ) { - if (fs && res != FR_NOT_ENABLED && res != FR_INVALID_DRIVE && - res != FR_INVALID_OBJECT && res != FR_TIMEOUT) { + if (fs && res != FR_NOT_ENABLED && res != FR_INVALID_DRIVE && res != FR_INVALID_OBJECT && res != FR_TIMEOUT) { ff_rel_grant(fs->sobj); } } @@ -842,7 +700,7 @@ unlock_fs(FATFS* fs, /* File system object */ static FRESULT chk_lock( /* Check if the file can be accessed */ - DIR* dp, /* Directory object pointing the file to be checked */ + DIR *dp, /* Directory object pointing the file to be checked */ int acc /* Desired access type (0:Read, 1:Write, 2:Delete/Rename) */ ) { @@ -850,22 +708,19 @@ chk_lock( /* Check if the file can be accessed */ /* Search file semaphore table */ for (i = be = 0; i < _FS_LOCK; i++) { - if (Files[i].fs) { /* Existing entry */ - if (Files[i].fs == - dp->fs && /* Check if the object matched with an open - object */ - Files[i].clu == dp->sclust && - Files[i].idx == dp->index) + if (Files[i].fs) { /* Existing entry */ + if (Files[i].fs == dp->fs && /* Check if the object matched with an open + object */ + Files[i].clu == dp->sclust && Files[i].idx == dp->index) break; } else { /* Blank entry */ be = 1; } } - if (i == _FS_LOCK) /* The object is not opened */ - return (be || acc == 2) ? FR_OK - : FR_TOO_MANY_OPEN_FILES; /* Is there a blank - entry for new - object? */ + if (i == _FS_LOCK) /* The object is not opened */ + return (be || acc == 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank + entry for new + object? */ /* The object has been opened. Reject any open against writing file and all * write mode open */ @@ -882,9 +737,9 @@ static int enq_lock(void) /* Check if an entry is available for a new object */ } static UINT -inc_lock(/* Increment object open counter and returns its index (0:Internal - error) */ - DIR* dp, /* Directory object pointing the file to register or increment +inc_lock( /* Increment object open counter and returns its index (0:Internal + error) */ + DIR *dp, /* Directory object pointing the file to register or increment */ int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ ) @@ -892,8 +747,7 @@ inc_lock(/* Increment object open counter and returns its index (0:Internal UINT i; for (i = 0; i < _FS_LOCK; i++) { /* Find the object */ - if (Files[i].fs == dp->fs && Files[i].clu == dp->sclust && - Files[i].idx == dp->index) + if (Files[i].fs == dp->fs && Files[i].clu == dp->sclust && Files[i].idx == dp->index) break; } @@ -942,7 +796,7 @@ dec_lock( /* Decrement object open counter */ static void clear_lock(/* Clear lock entries of the volume */ - FATFS* fs) + FATFS *fs) { UINT i; @@ -958,7 +812,7 @@ clear_lock(/* Clear lock entries of the volume */ /*-----------------------------------------------------------------------*/ #if !_FS_READONLY static FRESULT -sync_window(FATFS* fs /* File system object */ +sync_window(FATFS *fs /* File system object */ ) { DWORD wsect; @@ -971,9 +825,8 @@ sync_window(FATFS* fs /* File system object */ res = FR_DISK_ERR; } else { fs->wflag = 0; - if (wsect - fs->fatbase < fs->fsize) { /* Is it in the FAT area? */ - for (nf = fs->n_fats; nf >= 2; - nf--) { /* Reflect the change to all FAT copies */ + if (wsect - fs->fatbase < fs->fsize) { /* Is it in the FAT area? */ + for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ wsect += fs->fsize; disk_write(fs->drv, fs->win, wsect, 1); } @@ -985,7 +838,7 @@ sync_window(FATFS* fs /* File system object */ #endif static FRESULT -move_window(FATFS* fs, /* File system object */ +move_window(FATFS *fs, /* File system object */ DWORD sector /* Sector number to make appearance in the fs->win[] */ ) { @@ -997,8 +850,7 @@ move_window(FATFS* fs, /* File system object */ #endif if (res == FR_OK) { /* Fill sector window with new data */ if (disk_read(fs->drv, fs->win, sector, 1) != RES_OK) { - sector = - 0xFFFFFFFF; /* Invalidate window if data is not reliable */ + sector = 0xFFFFFFFF; /* Invalidate window if data is not reliable */ res = FR_DISK_ERR; } fs->winsect = sector; @@ -1013,7 +865,7 @@ move_window(FATFS* fs, /* File system object */ #if !_FS_READONLY static FRESULT sync_fs( /* FR_OK: successful, FR_DISK_ERR: failed */ - FATFS* fs /* File system object */ + FATFS *fs /* File system object */ ) { FRESULT res; @@ -1050,7 +902,7 @@ sync_fs( /* FR_OK: successful, FR_DISK_ERR: failed */ DWORD clust2sect( /* !=0: Sector number, 0: Failed - invalid cluster# */ - FATFS* fs, /* File system object */ + FATFS *fs, /* File system object */ DWORD clst /* Cluster# to be converted */ ) { @@ -1066,14 +918,14 @@ clust2sect( /* !=0: Sector number, 0: Failed - invalid cluster# */ /* Hidden API for hacks and disk tools */ DWORD -get_fat(/* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status - */ - FATFS* fs, /* File system object */ +get_fat( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status + */ + FATFS *fs, /* File system object */ DWORD clst /* FAT index number (cluster number) to get the value */ ) { UINT wc, bc; - BYTE* p; + BYTE *p; DWORD val; if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ @@ -1096,16 +948,14 @@ get_fat(/* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status break; case FS_FAT16: - if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != - FR_OK) + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; p = &fs->win[clst * 2 % SS(fs)]; val = LD_WORD(p); break; case FS_FAT32: - if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != - FR_OK) + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; p = &fs->win[clst * 4 % SS(fs)]; val = LD_DWORD(p) & 0x0FFFFFFF; @@ -1126,13 +976,13 @@ get_fat(/* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status #if !_FS_READONLY FRESULT -put_fat(FATFS* fs, /* File system object */ +put_fat(FATFS *fs, /* File system object */ DWORD clst, /* FAT index number (cluster number) to be changed */ DWORD val /* New value to be set to the entry */ ) { UINT bc; - BYTE* p; + BYTE *p; FRESULT res; if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ @@ -1153,8 +1003,7 @@ put_fat(FATFS* fs, /* File system object */ if (res != FR_OK) break; p = &fs->win[bc % SS(fs)]; - *p = (clst & 1) ? (BYTE)(val >> 4) - : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); + *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); fs->wflag = 1; break; @@ -1191,7 +1040,7 @@ put_fat(FATFS* fs, /* File system object */ /*-----------------------------------------------------------------------*/ #if !_FS_READONLY static FRESULT -remove_chain(FATFS* fs, /* File system object */ +remove_chain(FATFS *fs, /* File system object */ DWORD clst /* Cluster# to remove a chain from */ ) { @@ -1228,10 +1077,10 @@ remove_chain(FATFS* fs, /* File system object */ #if _USE_TRIM if (ecl + 1 == nxt) { /* Is next cluster contiguous? */ ecl = nxt; - } else { /* End of contiguous clusters */ - rt[0] = clust2sect(fs, scl); /* Start sector */ + } else { /* End of contiguous clusters */ + rt[0] = clust2sect(fs, scl); /* Start sector */ rt[1] = clust2sect(fs, ecl) + fs->csize - 1; /* End sector */ - disk_ioctl(fs->drv, CTRL_TRIM, rt); /* Erase the block */ + disk_ioctl(fs->drv, CTRL_TRIM, rt); /* Erase the block */ scl = ecl = nxt; } #endif @@ -1248,9 +1097,9 @@ remove_chain(FATFS* fs, /* File system object */ /*-----------------------------------------------------------------------*/ #if !_FS_READONLY static DWORD -create_chain(/* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, - >=2:New cluster# */ - FATFS* fs, /* File system object */ +create_chain( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, + >=2:New cluster# */ + FATFS *fs, /* File system object */ DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ ) { @@ -1291,8 +1140,7 @@ create_chain(/* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, res = put_fat(fs, ncl, 0x0FFFFFFF); /* Mark the new cluster "last link" */ if (res == FR_OK && clst != 0) { - res = - put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ + res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ } if (res == FR_OK) { fs->last_clust = ncl; /* Update FSINFO */ @@ -1315,15 +1163,14 @@ create_chain(/* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, #if _USE_FASTSEEK static DWORD clmt_clust( /* <2:Error, >=2:Cluster number */ - FIL* fp, /* Pointer to the file object */ + FIL *fp, /* Pointer to the file object */ DWORD ofs /* File offset to be converted to cluster# */ ) { DWORD cl, ncl, *tbl; - tbl = fp->cltbl + 1; /* Top of CLMT */ - cl = ofs / SS(fp->fs) / - fp->fs->csize; /* Cluster order from top of the file */ + tbl = fp->cltbl + 1; /* Top of CLMT */ + cl = ofs / SS(fp->fs) / fp->fs->csize; /* Cluster order from top of the file */ for (;;) { ncl = *tbl++; /* Number of cluters in the fragment */ if (!ncl) @@ -1342,35 +1189,32 @@ clmt_clust( /* <2:Error, >=2:Cluster number */ /*-----------------------------------------------------------------------*/ static FRESULT -dir_sdi(DIR* dp, /* Pointer to directory object */ +dir_sdi(DIR *dp, /* Pointer to directory object */ UINT idx /* Index of directory table */ ) { DWORD clst, sect; UINT ic; - dp->index = (WORD)idx; /* Current index */ - clst = dp->sclust; /* Table start cluster (0:root) */ + dp->index = (WORD)idx; /* Current index */ + clst = dp->sclust; /* Table start cluster (0:root) */ if (clst == 1 || clst >= dp->fs->n_fatent) /* Check start cluster range */ return FR_INT_ERR; - if (!clst && - dp->fs->fs_type == - FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ + if (!clst && dp->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ clst = dp->fs->dirbase; - if (clst == 0) { /* Static table (root-directory in FAT12/16) */ + if (clst == 0) { /* Static table (root-directory in FAT12/16) */ if (idx >= dp->fs->n_rootdir) /* Is index out of range? */ return FR_INT_ERR; sect = dp->fs->dirbase; - } else { /* Dynamic table (root-directory in FAT32 or sub-directory) */ + } else { /* Dynamic table (root-directory in FAT32 or sub-directory) */ ic = SS(dp->fs) / SZ_DIRE * dp->fs->csize; /* Entries per cluster */ while (idx >= ic) { /* Follow cluster chain */ clst = get_fat(dp->fs, clst); /* Get next cluster */ if (clst == 0xFFFFFFFF) - return FR_DISK_ERR; /* Disk error */ - if (clst < 2 || - clst >= dp->fs->n_fatent) /* Reached to end of table or internal - error */ + return FR_DISK_ERR; /* Disk error */ + if (clst < 2 || clst >= dp->fs->n_fatent) /* Reached to end of table or internal + error */ return FR_INT_ERR; idx -= ic; } @@ -1379,12 +1223,8 @@ dir_sdi(DIR* dp, /* Pointer to directory object */ dp->clust = clst; /* Current cluster# */ if (!sect) return FR_INT_ERR; - dp->sect = - sect + - idx / (SS(dp->fs) / SZ_DIRE); /* Sector# of the directory entry */ - dp->dir = dp->fs->win + - (idx % (SS(dp->fs) / SZ_DIRE)) * - SZ_DIRE; /* Ptr to the entry in the sector */ + dp->sect = sect + idx / (SS(dp->fs) / SZ_DIRE); /* Sector# of the directory entry */ + dp->dir = dp->fs->win + (idx % (SS(dp->fs) / SZ_DIRE)) * SZ_DIRE; /* Ptr to the entry in the sector */ return FR_OK; } @@ -1394,9 +1234,9 @@ dir_sdi(DIR* dp, /* Pointer to directory object */ /*-----------------------------------------------------------------------*/ static FRESULT -dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not - stretch */ - DIR* dp, /* Pointer to the directory object */ +dir_next( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not + stretch */ + DIR *dp, /* Pointer to the directory object */ int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ ) { @@ -1407,8 +1247,7 @@ dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not #endif i = dp->index + 1; - if (!(i & 0xFFFF) || - !dp->sect) /* Report EOT when index has reached 65535 */ + if (!(i & 0xFFFF) || !dp->sect) /* Report EOT when index has reached 65535 */ return FR_NO_FILE; if (!(i % (SS(dp->fs) / SZ_DIRE))) { /* Sector changed? */ @@ -1418,22 +1257,18 @@ dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not if (i >= dp->fs->n_rootdir) /* Report EOT if it reached end of static table */ return FR_NO_FILE; - } else { /* Dynamic table */ - if (((i / (SS(dp->fs) / SZ_DIRE)) & (dp->fs->csize - 1)) == - 0) { /* Cluster changed? */ - clst = get_fat(dp->fs, dp->clust); /* Get next cluster */ + } else { /* Dynamic table */ + if (((i / (SS(dp->fs) / SZ_DIRE)) & (dp->fs->csize - 1)) == 0) { /* Cluster changed? */ + clst = get_fat(dp->fs, dp->clust); /* Get next cluster */ if (clst <= 1) return FR_INT_ERR; if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - if (clst >= - dp->fs - ->n_fatent) { /* If it reached end of dynamic table, */ + if (clst >= dp->fs->n_fatent) { /* If it reached end of dynamic table, */ #if !_FS_READONLY if (!stretch) - return FR_NO_FILE; /* If do not stretch, report EOT */ - clst = create_chain(dp->fs, - dp->clust); /* Stretch cluster chain */ + return FR_NO_FILE; /* If do not stretch, report EOT */ + clst = create_chain(dp->fs, dp->clust); /* Stretch cluster chain */ if (clst == 0) return FR_DENIED; /* No free cluster */ if (clst == 1) @@ -1442,13 +1277,10 @@ dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not return FR_DISK_ERR; /* Clean-up stretched table */ if (sync_window(dp->fs)) - return FR_DISK_ERR; /* Flush disk access window */ - mem_set(dp->fs->win, 0, - SS(dp->fs)); /* Clear window buffer */ - dp->fs->winsect = - clust2sect(dp->fs, clst); /* Cluster start sector */ - for (c = 0; c < dp->fs->csize; - c++) { /* Fill the new cluster with 0 */ + return FR_DISK_ERR; /* Flush disk access window */ + mem_set(dp->fs->win, 0, SS(dp->fs)); /* Clear window buffer */ + dp->fs->winsect = clust2sect(dp->fs, clst); /* Cluster start sector */ + for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ dp->fs->wflag = 1; if (sync_window(dp->fs)) return FR_DISK_ERR; @@ -1457,9 +1289,9 @@ dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not dp->fs->winsect -= c; /* Rewind window offset */ #else if (!stretch) - return FR_NO_FILE; /* If do not stretch, report EOT - (this is to suppress warning) */ - return FR_NO_FILE; /* Report EOT */ + return FR_NO_FILE; /* If do not stretch, report EOT + (this is to suppress warning) */ + return FR_NO_FILE; /* Report EOT */ #endif } dp->clust = clst; /* Initialize data for new cluster */ @@ -1468,10 +1300,8 @@ dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not } } - dp->index = (WORD)i; /* Current index */ - dp->dir = dp->fs->win + - (i % (SS(dp->fs) / SZ_DIRE)) * - SZ_DIRE; /* Current entry in the window */ + dp->index = (WORD)i; /* Current index */ + dp->dir = dp->fs->win + (i % (SS(dp->fs) / SZ_DIRE)) * SZ_DIRE; /* Current entry in the window */ return FR_OK; } @@ -1482,7 +1312,7 @@ dir_next(/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not #if !_FS_READONLY static FRESULT -dir_alloc(DIR* dp, /* Pointer to the directory object */ +dir_alloc(DIR *dp, /* Pointer to the directory object */ UINT nent /* Number of contiguous entries to allocate (1-21) */ ) { @@ -1496,8 +1326,7 @@ dir_alloc(DIR* dp, /* Pointer to the directory object */ res = move_window(dp->fs, dp->sect); if (res != FR_OK) break; - if (dp->dir[0] == DDEM || - dp->dir[0] == 0) { /* Is it a free entry? */ + if (dp->dir[0] == DDEM || dp->dir[0] == 0) { /* Is it a free entry? */ if (++n == nent) break; /* A block of contiguous free entries is found */ } else { @@ -1517,8 +1346,8 @@ dir_alloc(DIR* dp, /* Pointer to the directory object */ /*-----------------------------------------------------------------------*/ static DWORD -ld_clust(FATFS* fs, /* Pointer to the fs object */ - BYTE* dir /* Pointer to the directory entry */ +ld_clust(FATFS *fs, /* Pointer to the fs object */ + BYTE *dir /* Pointer to the directory entry */ ) { DWORD cl; @@ -1532,7 +1361,7 @@ ld_clust(FATFS* fs, /* Pointer to the fs object */ #if !_FS_READONLY static void -st_clust(BYTE* dir, /* Pointer to the directory entry */ +st_clust(BYTE *dir, /* Pointer to the directory entry */ DWORD cl /* Value to be set */ ) { @@ -1545,14 +1374,12 @@ st_clust(BYTE* dir, /* Pointer to the directory entry */ /* LFN handling - Test/Pick/Fit an LFN segment from/to directory entry */ /*-----------------------------------------------------------------------*/ #if _USE_LFN -static const BYTE LfnOfs[] = { - 1, 3, 5, 7, 9, 14, 16, 18, 20, 22, 24, 28, 30 -}; /* Offset of LFN characters in the directory entry */ +static const BYTE LfnOfs[] = { 1, 3, 5, 7, 9, 14, 16, 18, 20, 22, 24, 28, 30 }; /* Offset of LFN characters in the directory entry */ static int cmp_lfn( /* 1:Matched, 0:Not matched */ - WCHAR* lfnbuf, /* Pointer to the LFN to be compared */ - BYTE* dir /* Pointer to the directory entry containing a part of LFN */ + WCHAR *lfnbuf, /* Pointer to the LFN to be compared */ + BYTE *dir /* Pointer to the directory entry containing a part of LFN */ ) { UINT i, s; @@ -1562,22 +1389,18 @@ cmp_lfn( /* 1:Matched, 0:Not matched */ s = 0; wc = 1; do { - uc = - LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */ - if (wc) { /* Last character has not been processed */ - wc = ff_wtoupper(uc); /* Convert it to upper case */ - if (i >= _MAX_LFN || - wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ - return 0; /* Not matched */ + uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */ + if (wc) { /* Last character has not been processed */ + wc = ff_wtoupper(uc); /* Convert it to upper case */ + if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ + return 0; /* Not matched */ } else { if (uc != 0xFFFF) return 0; /* Check filler */ } - } while (++s < - 13); /* Repeat until all characters in the entry are checked */ + } while (++s < 13); /* Repeat until all characters in the entry are checked */ - if ((dir[LDIR_Ord] & LLEF) && wc && - lfnbuf[i]) /* Last segment matched but different length */ + if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) /* Last segment matched but different length */ return 0; return 1; /* The part of LFN matched */ @@ -1585,8 +1408,8 @@ cmp_lfn( /* 1:Matched, 0:Not matched */ static int pick_lfn( /* 1:Succeeded, 0:Buffer overflow */ - WCHAR* lfnbuf, /* Pointer to the Unicode-LFN buffer */ - BYTE* dir /* Pointer to the directory entry */ + WCHAR *lfnbuf, /* Pointer to the Unicode-LFN buffer */ + BYTE *dir /* Pointer to the directory entry */ ) { UINT i, s; @@ -1597,9 +1420,8 @@ pick_lfn( /* 1:Succeeded, 0:Buffer overflow */ s = 0; wc = 1; do { - uc = - LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */ - if (wc) { /* Last character has not been processed */ + uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */ + if (wc) { /* Last character has not been processed */ if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ lfnbuf[i++] = wc = uc; /* Store it */ @@ -1620,8 +1442,8 @@ pick_lfn( /* 1:Succeeded, 0:Buffer overflow */ #if !_FS_READONLY static void -fit_lfn(const WCHAR* lfnbuf, /* Pointer to the LFN buffer */ - BYTE* dir, /* Pointer to the directory entry */ +fit_lfn(const WCHAR *lfnbuf, /* Pointer to the LFN buffer */ + BYTE *dir, /* Pointer to the directory entry */ BYTE ord, /* LFN order (1-20) */ BYTE sum /* SFN sum */ ) @@ -1656,9 +1478,9 @@ fit_lfn(const WCHAR* lfnbuf, /* Pointer to the LFN buffer */ /*-----------------------------------------------------------------------*/ #if _USE_LFN static void -gen_numname(BYTE* dst, /* Pointer to the buffer to store numbered SFN */ - const BYTE* src, /* Pointer to SFN */ - const WCHAR* lfn, /* Pointer to LFN */ +gen_numname(BYTE *dst, /* Pointer to the buffer to store numbered SFN */ + const BYTE *src, /* Pointer to SFN */ + const WCHAR *lfn, /* Pointer to LFN */ UINT seq /* Sequence number */ ) { @@ -1714,7 +1536,7 @@ gen_numname(BYTE* dst, /* Pointer to the buffer to store numbered SFN */ /*-----------------------------------------------------------------------*/ #if _USE_LFN static BYTE -sum_sfn(const BYTE* dir /* Pointer to the SFN entry */ +sum_sfn(const BYTE *dir /* Pointer to the SFN entry */ ) { BYTE sum = 0; @@ -1732,7 +1554,7 @@ sum_sfn(const BYTE* dir /* Pointer to the SFN entry */ /*-----------------------------------------------------------------------*/ static FRESULT -dir_find(DIR* dp /* Pointer to the directory object linked to the file name */ +dir_find(DIR *dp /* Pointer to the directory object linked to the file name */ ) { FRESULT res; @@ -1761,8 +1583,7 @@ dir_find(DIR* dp /* Pointer to the directory object linked to the file name */ } /* Reached to end of table */ #if _USE_LFN /* LFN configuration */ a = dir[DIR_Attr] & AM_MASK; - if (c == DDEM || - ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + if (c == DDEM || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ } else { @@ -1776,10 +1597,7 @@ dir_find(DIR* dp /* Pointer to the directory object linked to the file name */ } /* Check validity of the LFN entry and compare it with given * name */ - ord = (c == ord && sum == dir[LDIR_Chksum] && - cmp_lfn(dp->lfn, dir)) - ? ord - 1 - : 0xFF; + ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; } } else { /* An SFN entry is found */ if (!ord && sum == sum_sfn(dir)) @@ -1791,8 +1609,7 @@ dir_find(DIR* dp /* Pointer to the directory object linked to the file name */ } } #else /* Non LFN configuration */ - if (!(dir[DIR_Attr] & AM_VOL) && - !mem_cmp(dir, dp->fn, 11)) /* Is it a valid entry? */ + if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dp->fn, 11)) /* Is it a valid entry? */ break; #endif res = dir_next(dp, 0); /* Next entry */ @@ -1806,7 +1623,7 @@ dir_find(DIR* dp /* Pointer to the directory object linked to the file name */ /*-----------------------------------------------------------------------*/ #if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2 static FRESULT -dir_read(DIR* dp, /* Pointer to the directory object */ +dir_read(DIR *dp, /* Pointer to the directory object */ int vol /* Filtered by 0:file/directory or 1:volume label */ ) { @@ -1828,10 +1645,8 @@ dir_read(DIR* dp, /* Pointer to the directory object */ break; } /* Reached to end of table */ a = dir[DIR_Attr] & AM_MASK; -#if _USE_LFN /* LFN configuration */ - if (c == DDEM || (!_FS_RPATH && c == '.') || - (int)((a & ~AM_ARC) == AM_VOL) != - vol) { /* An entry without valid data */ +#if _USE_LFN /* LFN configuration */ + if (c == DDEM || (!_FS_RPATH && c == '.') || (int)((a & ~AM_ARC) == AM_VOL) != vol) { /* An entry without valid data */ ord = 0xFF; } else { if (a == AM_LFN) { /* An LFN entry is found */ @@ -1842,10 +1657,7 @@ dir_read(DIR* dp, /* Pointer to the directory object */ dp->lfn_idx = dp->index; } /* Check LFN validity and capture it */ - ord = (c == ord && sum == dir[LDIR_Chksum] && - pick_lfn(dp->lfn, dir)) - ? ord - 1 - : 0xFF; + ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; } else { /* An SFN entry is found */ if (ord || sum != sum_sfn(dir)) /* Is there a valid LFN? */ dp->lfn_idx = 0xFFFF; /* It has no LFN. */ @@ -1853,8 +1665,7 @@ dir_read(DIR* dp, /* Pointer to the directory object */ } } #else /* Non LFN configuration */ - if (c != DDEM && (_FS_RPATH || c != '.') && a != AM_LFN && - (int)((a & ~AM_ARC) == AM_VOL) == vol) /* Is it a valid entry? */ + if (c != DDEM && (_FS_RPATH || c != '.') && a != AM_LFN && (int)((a & ~AM_ARC) == AM_VOL) == vol) /* Is it a valid entry? */ break; #endif res = dir_next(dp, 0); /* Next entry */ @@ -1874,16 +1685,16 @@ dir_read(DIR* dp, /* Pointer to the directory object */ /*-----------------------------------------------------------------------*/ #if !_FS_READONLY static FRESULT -dir_register(/* FR_OK:Successful, FR_DENIED:No free entry or too many SFN - collision, FR_DISK_ERR:Disk error */ - DIR* dp /* Target directory with object name to be created */ +dir_register( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN + collision, FR_DISK_ERR:Disk error */ + DIR *dp /* Target directory with object name to be created */ ) { FRESULT res; #if _USE_LFN /* LFN configuration */ UINT n, nent; BYTE sn[12], *fn, sum; - WCHAR* lfn; + WCHAR *lfn; fn = dp->fn; lfn = dp->lfn; @@ -1892,14 +1703,12 @@ dir_register(/* FR_OK:Successful, FR_DENIED:No free entry or too many SFN if (_FS_RPATH && (sn[NSFLAG] & NS_DOT)) /* Cannot create dot entry */ return FR_INVALID_NAME; - if (sn[NSFLAG] & - NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ + if (sn[NSFLAG] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ fn[NSFLAG] = 0; dp->lfn = 0; /* Find only SFN */ for (n = 1; n < 100; n++) { gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ - res = - dir_find(dp); /* Check if the name collides with existing SFN */ + res = dir_find(dp); /* Check if the name collides with existing SFN */ if (res != FR_OK) break; } @@ -1945,8 +1754,7 @@ dir_register(/* FR_OK:Successful, FR_DENIED:No free entry or too many SFN mem_set(dp->dir, 0, SZ_DIRE); /* Clean the entry */ mem_cpy(dp->dir, dp->fn, 11); /* Put SFN */ #if _USE_LFN - dp->dir[DIR_NTres] = - dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */ + dp->dir[DIR_NTres] = dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */ #endif dp->fs->wflag = 1; } @@ -1962,30 +1770,26 @@ dir_register(/* FR_OK:Successful, FR_DENIED:No free entry or too many SFN #if !_FS_READONLY && !_FS_MINIMIZE static FRESULT dir_remove( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ - DIR* dp /* Directory object pointing the entry to be removed */ + DIR *dp /* Directory object pointing the entry to be removed */ ) { FRESULT res; #if _USE_LFN /* LFN configuration */ UINT i; - i = dp->index; /* SFN index */ - res = dir_sdi( - dp, (dp->lfn_idx == 0xFFFF) - ? i - : dp->lfn_idx); /* Goto the SFN or top of the LFN entries */ + i = dp->index; /* SFN index */ + res = dir_sdi(dp, (dp->lfn_idx == 0xFFFF) ? i : dp->lfn_idx); /* Goto the SFN or top of the LFN entries */ if (res == FR_OK) { do { res = move_window(dp->fs, dp->sect); if (res != FR_OK) break; - mem_set(dp->dir, 0, - SZ_DIRE); /* Clear and mark the entry "deleted" */ + mem_set(dp->dir, 0, SZ_DIRE); /* Clear and mark the entry "deleted" */ *dp->dir = DDEM; dp->fs->wflag = 1; if (dp->index >= i) - break; /* When reached SFN, all entries of the object has been - deleted. */ + break; /* When reached SFN, all entries of the object has been + deleted. */ res = dir_next(dp, 0); /* Next entry */ } while (res == FR_OK); if (res == FR_NO_FILE) @@ -1997,8 +1801,7 @@ dir_remove( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ if (res == FR_OK) { res = move_window(dp->fs, dp->sect); if (res == FR_OK) { - mem_set(dp->dir, 0, - SZ_DIRE); /* Clear and mark the entry "deleted" */ + mem_set(dp->dir, 0, SZ_DIRE); /* Clear and mark the entry "deleted" */ *dp->dir = DDEM; dp->fs->wflag = 1; } @@ -2015,13 +1818,13 @@ dir_remove( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ #if _FS_MINIMIZE <= 1 || _FS_RPATH >= 2 static void get_fileinfo( /* No return code */ - DIR* dp, /* Pointer to the directory object */ - FILINFO* fno /* Pointer to the file information to be filled */ + DIR *dp, /* Pointer to the directory object */ + FILINFO *fno /* Pointer to the file information to be filled */ ) { UINT i; TCHAR *p, c; - BYTE* dir; + BYTE *dir; #if _USE_LFN WCHAR w, *lfn; #endif @@ -2062,8 +1865,7 @@ get_fileinfo( /* No return code */ if (fno->lfname) { i = 0; p = fno->lfname; - if (dp->sect && fno->lfsize && - dp->lfn_idx != 0xFFFF) { /* Get LFN if available */ + if (dp->sect && fno->lfsize && dp->lfn_idx != 0xFFFF) { /* Get LFN if available */ lfn = dp->lfn; while ((w = *lfn++) != 0) { /* Get an LFN character */ #if !_LFN_UNICODE @@ -2071,10 +1873,9 @@ get_fileinfo( /* No return code */ if (!w) { i = 0; break; - } /* No LFN if it could not be converted */ - if (_DF1S && - w >= 0x100) /* Put 1st byte if it is a DBC (always false on - SBCS cfg) */ + } /* No LFN if it could not be converted */ + if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC (always false on + SBCS cfg) */ p[i++] = (TCHAR)(w >> 8); #endif if (i >= fno->lfsize - 1) { @@ -2095,9 +1896,8 @@ get_fileinfo( /* No return code */ /*-----------------------------------------------------------------------*/ #if _USE_FIND && _FS_MINIMIZE <= 1 static WCHAR -get_achar(/* Get a character and advances ptr 1 or 2 */ - const TCHAR** - ptr /* Pointer to pointer to the SBCS/DBCS/Unicode string */ +get_achar( /* Get a character and advances ptr 1 or 2 */ + const TCHAR **ptr /* Pointer to pointer to the SBCS/DBCS/Unicode string */ ) { WCHAR chr; @@ -2113,15 +1913,15 @@ get_achar(/* Get a character and advances ptr 1 or 2 */ chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */ #endif #else - chr = ff_wtoupper(*(*ptr)++); /* Get a word and to upper */ + chr = ff_wtoupper(*(*ptr)++); /* Get a word and to upper */ #endif return chr; } static int pattern_matching( /* Return value: 0:mismatched, 1:matched */ - const TCHAR* pat, /* Matching pattern */ - const TCHAR* nam, /* String to be tested */ + const TCHAR *pat, /* Matching pattern */ + const TCHAR *nam, /* String to be tested */ int skip, /* Number of pre-skip chars (number of ?s) */ int inf /* Infinite search (* specified) */ ) @@ -2163,8 +1963,7 @@ pattern_matching( /* Return value: 0:mismatched, 1:matched */ return 1; /* Branch matched? (matched at end of both strings) */ } get_achar(&nam); /* nam++ */ - } while (inf && - nc); /* Retry until end of name if infinite search is specified */ + } while (inf && nc); /* Retry until end of name if infinite search is specified */ return 0; } @@ -2175,16 +1974,15 @@ pattern_matching( /* Return value: 0:mismatched, 1:matched */ /*-----------------------------------------------------------------------*/ static FRESULT -create_name(DIR* dp, /* Pointer to the directory object */ - const TCHAR** - path /* Pointer to pointer to the segment in the path string */ +create_name(DIR *dp, /* Pointer to the directory object */ + const TCHAR **path /* Pointer to pointer to the segment in the path string */ ) { #if _USE_LFN /* LFN configuration */ BYTE b, cf; WCHAR w, *lfn; UINT i, ni, si, di; - const TCHAR* p; + const TCHAR *p; /* Create LFN in Unicode */ for (p = *path; *p == '/' || *p == '\\'; p++) @@ -2199,8 +1997,8 @@ create_name(DIR* dp, /* Pointer to the directory object */ return FR_INVALID_NAME; #if !_LFN_UNICODE w &= 0xFF; - if (IsDBCS1(w)) { /* Check if it is a DBC 1st byte (always false on SBCS - cfg) */ + if (IsDBCS1(w)) { /* Check if it is a DBC 1st byte (always false on SBCS + cfg) */ b = (BYTE)p[si++]; /* Get 2nd byte */ w = (w << 8) + b; /* Create a DBC */ if (!IsDBCS2(b)) @@ -2210,8 +2008,7 @@ create_name(DIR* dp, /* Pointer to the directory object */ if (!w) return FR_INVALID_NAME; /* Reject invalid code */ #endif - if (w < 0x80 && - chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal characters for LFN */ + if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal characters for LFN */ return FR_INVALID_NAME; lfn[di++] = w; /* Store the Unicode character */ } @@ -2281,8 +2078,7 @@ create_name(DIR* dp, /* Pointer to the directory object */ w = ExCvt[w - 0x80]; /* Convert extended character to upper (SBCS) */ #else - w = ff_convert(ff_wtoupper(w), - 0); /* Upper converted Unicode -> OEM code */ + w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */ #endif cf |= NS_LFN; /* Force create LFN entry */ } @@ -2294,9 +2090,8 @@ create_name(DIR* dp, /* Pointer to the directory object */ continue; } dp->fn[i++] = (BYTE)(w >> 8); - } else { /* SBC */ - if (!w || - chk_chr("+,;=[]", w)) { /* Replace illegal characters for SFN */ + } else { /* SBC */ + if (!w || chk_chr("+,;=[]", w)) { /* Replace illegal characters for SFN */ w = '_'; cf |= NS_LOSS | NS_LFN; /* Lossy conversion */ } else { @@ -2319,9 +2114,7 @@ create_name(DIR* dp, /* Pointer to the directory object */ if (ni == 8) b <<= 2; - if ((b & 0x0C) == 0x0C || - (b & 0x03) == - 0x03) /* Create LFN entry when there are composite capitals */ + if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */ cf |= NS_LFN; if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended character, NT flags are created */ @@ -2338,7 +2131,7 @@ create_name(DIR* dp, /* Pointer to the directory object */ #else /* Non-LFN configuration */ BYTE b, c, d, *sfn; UINT ni, si, i; - const char* p; + const char *p; /* Create file name in directory form */ for (p = *path; *p == '/' || *p == '\\'; p++) @@ -2357,10 +2150,8 @@ create_name(DIR* dp, /* Pointer to the directory object */ } if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; - *path = &p[si]; /* Return pointer to the next segment */ - sfn[NSFLAG] = (c <= ' ') - ? NS_LAST | NS_DOT - : NS_DOT; /* Set last segment flag if end of path */ + *path = &p[si]; /* Return pointer to the next segment */ + sfn[NSFLAG] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ return FR_OK; } #endif @@ -2376,8 +2167,8 @@ create_name(DIR* dp, /* Pointer to the directory object */ b <<= 2; continue; } - if (c >= 0x80) { /* Extended character? */ - b |= 3; /* Eliminate NT flag */ + if (c >= 0x80) { /* Extended character? */ + b |= 3; /* Eliminate NT flag */ #ifdef _EXCVT c = ExCvt[c - 0x80]; /* To upper extended characters (SBCS cfg) */ #else @@ -2386,16 +2177,15 @@ create_name(DIR* dp, /* Pointer to the directory object */ #endif #endif } - if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS - cfg) */ + if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS + cfg) */ d = (BYTE)p[si++]; /* Get 2nd byte */ if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ return FR_INVALID_NAME; sfn[i++] = c; sfn[i++] = d; - } else { /* SBC */ - if (chk_chr("\"*+,:;<=>\?[]|\x7F", - c)) /* Reject illegal chrs for SFN */ + } else { /* SBC */ + if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ return FR_INVALID_NAME; if (IsUpper(c)) { /* ASCII large capital? */ b |= 2; @@ -2435,10 +2225,10 @@ create_name(DIR* dp, /* Pointer to the directory object */ /*-----------------------------------------------------------------------*/ static FRESULT -follow_path( /* FR_OK(0): successful, !=0: error code */ - DIR* dp, /* Directory object to return last directory and found - object */ - const TCHAR* path /* Full-path string to find a file or directory */ +follow_path( /* FR_OK(0): successful, !=0: error code */ + DIR *dp, /* Directory object to return last directory and found + object */ + const TCHAR *path /* Full-path string to find a file or directory */ ) { FRESULT res; @@ -2447,8 +2237,8 @@ follow_path( /* FR_OK(0): successful, !=0: error code */ #if _FS_RPATH if (*path == '/' || *path == '\\') { /* There is a heading separator */ path++; - dp->sclust = 0; /* Strip it and start from the root directory */ - } else { /* No heading separator */ + dp->sclust = 0; /* Strip it and start from the root directory */ + } else { /* No heading separator */ dp->sclust = dp->fs->cdir; /* Start from the current directory */ } #else @@ -2467,13 +2257,11 @@ follow_path( /* FR_OK(0): successful, !=0: error code */ break; res = dir_find(dp); /* Find an object with the sagment name */ ns = dp->fn[NSFLAG]; - if (res != FR_OK) { /* Failed to find the object */ - if (res == FR_NO_FILE) { /* Object is not found */ - if (_FS_RPATH && - (ns & NS_DOT)) { /* If dot entry is not exist, */ + if (res != FR_OK) { /* Failed to find the object */ + if (res == FR_NO_FILE) { /* Object is not found */ + if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, */ dp->sclust = 0; - dp->dir = - 0; /* it is the root directory and stay there */ + dp->dir = 0; /* it is the root directory and stay there */ if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ @@ -2488,10 +2276,9 @@ follow_path( /* FR_OK(0): successful, !=0: error code */ break; } if (ns & NS_LAST) - break; /* Last segment matched. Function completed. */ - dir = dp->dir; /* Follow the sub-directory */ - if (!(dir[DIR_Attr] & - AM_DIR)) { /* It is not a sub-directory and cannot follow */ + break; /* Last segment matched. Function completed. */ + dir = dp->dir; /* Follow the sub-directory */ + if (!(dir[DIR_Attr] & AM_DIR)) { /* It is not a sub-directory and cannot follow */ res = FR_NO_PATH; break; } @@ -2507,30 +2294,29 @@ follow_path( /* FR_OK(0): successful, !=0: error code */ /*-----------------------------------------------------------------------*/ static int -get_ldnumber(/* Returns logical drive number (-1:invalid drive) */ - const TCHAR** path /* Pointer to pointer to the path name */ +get_ldnumber( /* Returns logical drive number (-1:invalid drive) */ + const TCHAR **path /* Pointer to pointer to the path name */ ) { const TCHAR *tp, *tt; UINT i; int vol = -1; #if _STR_VOLUME_ID /* Find string drive id */ - static const char* const str[] = { _VOLUME_STRS }; - const char* sp; + static const char *const str[] = { _VOLUME_STRS }; + const char *sp; char c; TCHAR tc; #endif if (*path) { /* If the pointer is not a null */ - for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; - tt++) + for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ; /* Find ':' in the path */ if (*tt == ':') { /* If a ':' is exist in the path name */ tp = *path; i = *tp++ - '0'; if (i < 10 && tp == tt) { /* Is there a numeric drive id? */ - if (i < _VOLUMES) { /* If a drive id is found, get the value and - strip it */ + if (i < _VOLUMES) { /* If a drive id is found, get the value and + strip it */ vol = (int)i; *path = ++tt; } @@ -2548,12 +2334,9 @@ get_ldnumber(/* Returns logical drive number (-1:invalid drive) */ if (IsLower(tc)) tc -= 0x20; } while (c && (TCHAR)c == tc); - } while ( - (c || tp != tt) && - ++i < - _VOLUMES); /* Repeat for each id until pattern match */ - if (i < _VOLUMES) { /* If a drive id is found, get the value and - strip it */ + } while ((c || tp != tt) && ++i < _VOLUMES); /* Repeat for each id until pattern match */ + if (i < _VOLUMES) { /* If a drive id is found, get the value and + strip it */ vol = (int)i; *path = tt; } @@ -2575,9 +2358,9 @@ get_ldnumber(/* Returns logical drive number (-1:invalid drive) */ /*-----------------------------------------------------------------------*/ static BYTE -check_fs(/* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot - sector, 3:Disk error */ - FATFS* fs, /* File system object */ +check_fs( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot + sector, 3:Disk error */ + FATFS *fs, /* File system object */ DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ ) @@ -2593,11 +2376,9 @@ check_fs(/* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot >512) */ return 2; - if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == - 0x544146) /* Check "FAT" string */ + if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ return 0; - if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == - 0x544146) /* Check "FAT" string */ + if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ return 0; return 1; @@ -2608,12 +2389,10 @@ check_fs(/* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot /*-----------------------------------------------------------------------*/ static FRESULT -find_volume(/* FR_OK(0): successful, !=0: any error occurred */ - FATFS** - rfs, /* Pointer to pointer to the found file system object */ - const TCHAR** - path, /* Pointer to pointer to the path name (drive number) */ - BYTE wmode /* !=0: Check write protection for write access */ +find_volume( /* FR_OK(0): successful, !=0: any error occurred */ + FATFS **rfs, /* Pointer to pointer to the found file system object */ + const TCHAR **path, /* Pointer to pointer to the path name (drive number) */ + BYTE wmode /* !=0: Check write protection for write access */ ) { BYTE fmt, *pt; @@ -2621,7 +2400,7 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ DSTATUS stat; DWORD bsect, fasize, tsect, sysect, nclst, szbfat, br[4]; WORD nrsv; - FATFS* fs; + FATFS *fs; UINT i; /* Get logical drive number from the path name */ @@ -2640,10 +2419,8 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ if (fs->fs_type) { /* If the volume has been mounted */ stat = disk_status(fs->drv); - if (!(stat & - STA_NOINIT)) { /* and the physical drive is kept initialized */ - if (!_FS_READONLY && wmode && - (stat & STA_PROTECT)) /* Check write protection if needed */ + if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ + if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ return FR_WRITE_PROTECTED; return FR_OK; /* The file system object is valid */ } @@ -2653,31 +2430,24 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ /* Following code attempts to mount the volume. (analyze BPB and initialize * the fs object) */ - fs->fs_type = 0; /* Clear the file system object */ - fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ - stat = disk_initialize(fs->drv); /* Initialize the physical drive */ - if (stat & STA_NOINIT) /* Check if the initialization succeeded */ - return FR_NOT_READY; /* Failed to initialize due to no medium or hard - error */ - if (!_FS_READONLY && wmode && - (stat & STA_PROTECT)) /* Check disk write protection if needed */ + fs->fs_type = 0; /* Clear the file system object */ + fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ + stat = disk_initialize(fs->drv); /* Initialize the physical drive */ + if (stat & STA_NOINIT) /* Check if the initialization succeeded */ + return FR_NOT_READY; /* Failed to initialize due to no medium or hard + error */ + if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ return FR_WRITE_PROTECTED; #if _MAX_SS != _MIN_SS /* Get sector size (multiple sector size cfg only) */ - if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || - SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) + if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) return FR_DISK_ERR; #endif /* Find an FAT partition on the drive. Supports only generic partitioning, * FDISK and SFD. */ bsect = 0; - fmt = check_fs( - fs, - bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ - if (fmt == 1 || - (!fmt && - (LD2PT( - vol)))) { /* Not an FAT boot sector or forced partition number */ - for (i = 0; i < 4; i++) { /* Get partition offset */ + fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ + if (fmt == 1 || (!fmt && (LD2PT(vol)))) { /* Not an FAT boot sector or forced partition number */ + for (i = 0; i < 4; i++) { /* Get partition offset */ pt = fs->win + MBR_Table + i * SZ_PTE; br[i] = pt[4] ? LD_DWORD(&pt[8]) : 0; } @@ -2697,8 +2467,7 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ /* An FAT volume is found. Following code initializes the file system object */ - if (LD_WORD(fs->win + BPB_BytsPerSec) != - SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ + if (LD_WORD(fs->win + BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ return FR_NO_FILESYSTEM; fasize = LD_WORD(fs->win + BPB_FATSz16); /* Number of sectors per FAT */ @@ -2711,17 +2480,15 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ return FR_NO_FILESYSTEM; fasize *= fs->n_fats; /* Number of sectors for FAT area */ - fs->csize = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ + fs->csize = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ if (!fs->csize || (fs->csize & (fs->csize - 1))) /* (Must be power of 2) */ return FR_NO_FILESYSTEM; - fs->n_rootdir = LD_WORD( - fs->win + BPB_RootEntCnt); /* Number of root directory entries */ - if (fs->n_rootdir % (SS(fs) / SZ_DIRE)) /* (Must be sector aligned) */ + fs->n_rootdir = LD_WORD(fs->win + BPB_RootEntCnt); /* Number of root directory entries */ + if (fs->n_rootdir % (SS(fs) / SZ_DIRE)) /* (Must be sector aligned) */ return FR_NO_FILESYSTEM; - tsect = - LD_WORD(fs->win + BPB_TotSec16); /* Number of sectors on the volume */ + tsect = LD_WORD(fs->win + BPB_TotSec16); /* Number of sectors on the volume */ if (!tsect) tsect = LD_DWORD(fs->win + BPB_TotSec32); @@ -2730,8 +2497,7 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ return FR_NO_FILESYSTEM; /* (Must not be 0) */ /* Determine the FAT sub type */ - sysect = nrsv + fasize + - fs->n_rootdir / (SS(fs) / SZ_DIRE); /* RSV + FAT + DIR */ + sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZ_DIRE); /* RSV + FAT + DIR */ if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ @@ -2750,10 +2516,9 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ fs->database = bsect + sysect; /* Data start sector */ if (fmt == FS_FAT32) { if (fs->n_rootdir) - return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ - fs->dirbase = - LD_DWORD(fs->win + BPB_RootClus); /* Root directory start cluster */ - szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ + return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + fs->dirbase = LD_DWORD(fs->win + BPB_RootClus); /* Root directory start cluster */ + szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ } else { if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ @@ -2762,9 +2527,7 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); } - if (fs->fsize < - (szbfat + (SS(fs) - 1)) / - SS(fs)) /* (BPB_FATSz must not be less than the size needed) */ + if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (BPB_FATSz must not be less than the size needed) */ return FR_NO_FILESYSTEM; #if !_FS_READONLY @@ -2775,13 +2538,10 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ fs->fsi_flag = 0x80; #if (_FS_NOFSINFO & 3) != 3 if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */ - && LD_WORD(fs->win + BPB_FSInfo) == 1 && - move_window(fs, bsect + 1) == FR_OK) { + && LD_WORD(fs->win + BPB_FSInfo) == 1 && move_window(fs, bsect + 1) == FR_OK) { fs->fsi_flag = 0; - if (LD_WORD(fs->win + BS_55AA) == - 0xAA55 /* Load FSINFO data if available */ - && LD_DWORD(fs->win + FSI_LeadSig) == 0x41615252 && - LD_DWORD(fs->win + FSI_StrucSig) == 0x61417272) { + if (LD_WORD(fs->win + BS_55AA) == 0xAA55 /* Load FSINFO data if available */ + && LD_DWORD(fs->win + FSI_LeadSig) == 0x41615252 && LD_DWORD(fs->win + FSI_StrucSig) == 0x61417272) { #if (_FS_NOFSINFO & 1) == 0 fs->free_clust = LD_DWORD(fs->win + FSI_Free_Count); #endif @@ -2810,11 +2570,11 @@ find_volume(/* FR_OK(0): successful, !=0: any error occurred */ static FRESULT validate( /* FR_OK(0): The object is valid, !=0: Invalid */ - void* obj /* Pointer to the object FIL/DIR to check validity */ + void *obj /* Pointer to the object FIL/DIR to check validity */ ) { - FIL* fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR - structure is identical */ + FIL *fil = (FIL *)obj; /* Assuming offset of .fs and .id in the FIL/DIR + structure is identical */ if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id) return FR_INVALID_OBJECT; @@ -2838,15 +2598,15 @@ validate( /* FR_OK(0): The object is valid, !=0: Invalid */ /*-----------------------------------------------------------------------*/ FRESULT -f_mount(FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/ - const TCHAR* path, /* Logical drive number to be mounted/unmounted */ - BYTE opt /* 0:Do not mount (delayed mount), 1:Mount immediately */ +f_mount(FATFS *fs, /* Pointer to the file system object (NULL:unmount)*/ + const TCHAR *path, /* Logical drive number to be mounted/unmounted */ + BYTE opt /* 0:Do not mount (delayed mount), 1:Mount immediately */ ) { - FATFS* cfs; + FATFS *cfs; int vol; FRESULT res; - const TCHAR* rp = path; + const TCHAR *rp = path; vol = get_ldnumber(&rp); if (vol < 0) @@ -2885,14 +2645,14 @@ f_mount(FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/ /*-----------------------------------------------------------------------*/ FRESULT -f_open(FIL* fp, /* Pointer to the blank file object */ - const TCHAR* path, /* Pointer to the file name */ +f_open(FIL *fp, /* Pointer to the blank file object */ + const TCHAR *path, /* Pointer to the file name */ BYTE mode /* Access mode and file open mode flags */ ) { FRESULT res; DIR dj; - BYTE* dir; + BYTE *dir; DEFINE_NAMEBUF; #if !_FS_READONLY DWORD dw, cl; @@ -2904,8 +2664,7 @@ f_open(FIL* fp, /* Pointer to the blank file object */ /* Get logical drive number */ #if !_FS_READONLY - mode &= - FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; + mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; res = find_volume(&dj.fs, &path, (BYTE)(mode & ~FA_READ)); #else mode &= FA_READ; @@ -2926,30 +2685,26 @@ f_open(FIL* fp, /* Pointer to the blank file object */ } /* Create or Open a file */ if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { - if (res != FR_OK) { /* No file, create new */ - if (res == - FR_NO_FILE) /* There is no file to open, create a new entry - */ + if (res != FR_OK) { /* No file, create new */ + if (res == FR_NO_FILE) /* There is no file to open, create a new entry + */ #if _FS_LOCK - res = - enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; + res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; #else res = dir_register(&dj); #endif - mode |= FA_CREATE_ALWAYS; /* File is created */ - dir = dj.dir; /* New entry */ - } else { /* Any object is already existing */ - if (dir[DIR_Attr] & - (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ + mode |= FA_CREATE_ALWAYS; /* File is created */ + dir = dj.dir; /* New entry */ + } else { /* Any object is already existing */ + if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ res = FR_DENIED; } else { if (mode & FA_CREATE_NEW) /* Cannot create as new file */ res = FR_EXIST; } } - if (res == FR_OK && - (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ - dw = GET_FATTIME(); /* Created time */ + if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ + dw = GET_FATTIME(); /* Created time */ ST_DWORD(dir + DIR_CrtTime, dw); dir[DIR_Attr] = 0; /* Reset attribute */ ST_DWORD(dir + DIR_FileSize, 0); /* size = 0 */ @@ -2970,8 +2725,7 @@ f_open(FIL* fp, /* Pointer to the blank file object */ if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ res = FR_NO_FILE; } else { - if ((mode & FA_WRITE) && - (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ + if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ res = FR_DENIED; } } @@ -3025,10 +2779,10 @@ f_open(FIL* fp, /* Pointer to the blank file object */ /*-----------------------------------------------------------------------*/ FRESULT -f_read(FIL* fp, /* Pointer to the file object */ - void* buff, /* Pointer to data buffer */ +f_read(FIL *fp, /* Pointer to the file object */ + void *buff, /* Pointer to data buffer */ UINT btr, /* Number of bytes to read */ - UINT* br /* Pointer to number of bytes read */ + UINT *br /* Pointer to number of bytes read */ ) { FRESULT res; @@ -3050,24 +2804,19 @@ f_read(FIL* fp, /* Pointer to the file object */ btr = (UINT)remain; /* Truncate btr by remaining bytes */ for (; btr; /* Repeat until all data read */ - rbuff += rcnt, fp->fptr += rcnt, * br += rcnt, btr -= rcnt) { - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - csect = - (BYTE)(fp->fptr / SS(fp->fs) & - (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if (!csect) { /* On the cluster boundary? */ - if (fp->fptr == 0) { /* On the top of the file? */ - clst = fp->sclust; /* Follow from the origin */ - } else { /* Middle or end of the file */ + rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if (!csect) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->sclust; /* Follow from the origin */ + } else { /* Middle or end of the file */ #if _USE_FASTSEEK if (fp->cltbl) - clst = clmt_clust( - fp, fp->fptr); /* Get cluster# from the CLMT */ + clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ else #endif - clst = get_fat( - fp->fs, - fp->clust); /* Follow cluster chain on the FAT */ + clst = get_fat(fp->fs, fp->clust); /* Follow cluster chain on the FAT */ } if (clst < 2) ABORT(fp->fs, FR_INT_ERR); @@ -3079,23 +2828,20 @@ f_read(FIL* fp, /* Pointer to the file object */ if (!sect) ABORT(fp->fs, FR_INT_ERR); sect += csect; - cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Read maximum contiguous sectors directly */ + cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc) { /* Read maximum contiguous sectors directly */ if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ cc = fp->fs->csize - csect; if (disk_read(fp->fs->drv, rbuff, sect, cc) != RES_OK) ABORT(fp->fs, FR_DISK_ERR); -#if !_FS_READONLY && \ - _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if \ - it contains a dirty sector */ +#if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if \ + it contains a dirty sector */ #if _FS_TINY if (fp->fs->wflag && fp->fs->winsect - sect < cc) - mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), - fp->fs->win, SS(fp->fs)); + mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win, SS(fp->fs)); #else if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) - mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, - SS(fp->fs)); + mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); #endif #endif rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ @@ -3105,32 +2851,26 @@ f_read(FIL* fp, /* Pointer to the file object */ if (fp->dsect != sect) { /* Load data sector if not in cache */ #if !_FS_READONLY if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != - RES_OK) + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) ABORT(fp->fs, FR_DISK_ERR); fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, sect, 1) != - RES_OK) /* Fill sector cache */ + if (disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) /* Fill sector cache */ ABORT(fp->fs, FR_DISK_ERR); } #endif fp->dsect = sect; } - rcnt = SS(fp->fs) - - ((UINT)fp->fptr % - SS(fp->fs)); /* Get partial sector data from sector buffer */ + rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ if (rcnt > btr) rcnt = btr; #if _FS_TINY if (move_window(fp->fs, fp->dsect) != FR_OK) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); - mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], - rcnt); /* Pick partial sector */ + mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ #else - mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], - rcnt); /* Pick partial sector */ + mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ #endif } @@ -3143,16 +2883,16 @@ f_read(FIL* fp, /* Pointer to the file object */ /*-----------------------------------------------------------------------*/ FRESULT -f_write(FIL* fp, /* Pointer to the file object */ - const void* buff, /* Pointer to the data to be written */ +f_write(FIL *fp, /* Pointer to the file object */ + const void *buff, /* Pointer to the data to be written */ UINT btw, /* Number of bytes to write */ - UINT* bw /* Pointer to number of bytes written */ + UINT *bw /* Pointer to number of bytes written */ ) { FRESULT res; DWORD clst, sect; UINT wcnt, cc; - const BYTE* wbuff = (const BYTE*)buff; + const BYTE *wbuff = (const BYTE *)buff; BYTE csect; *bw = 0; /* Clear write byte counter */ @@ -3168,27 +2908,22 @@ f_write(FIL* fp, /* Pointer to the file object */ btw = 0; /* File size cannot reach 4GB */ for (; btw; /* Repeat until all data written */ - wbuff += wcnt, fp->fptr += wcnt, * bw += wcnt, btw -= wcnt) { - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - csect = - (BYTE)(fp->fptr / SS(fp->fs) & - (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if (!csect) { /* On the cluster boundary? */ - if (fp->fptr == 0) { /* On the top of the file? */ - clst = fp->sclust; /* Follow from the origin */ - if (clst == 0) /* When no cluster is allocated, */ - clst = create_chain(fp->fs, - 0); /* Create a new cluster chain */ - } else { /* Middle or end of the file */ + wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if (!csect) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->sclust; /* Follow from the origin */ + if (clst == 0) /* When no cluster is allocated, */ + clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ + } else { /* Middle or end of the file */ #if _USE_FASTSEEK if (fp->cltbl) - clst = clmt_clust( - fp, fp->fptr); /* Get cluster# from the CLMT */ + clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ else #endif - clst = create_chain( - fp->fs, fp->clust); /* Follow or stretch cluster - chain on the FAT */ + clst = create_chain(fp->fs, fp->clust); /* Follow or stretch cluster + chain on the FAT */ } if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ @@ -3198,12 +2933,10 @@ f_write(FIL* fp, /* Pointer to the file object */ ABORT(fp->fs, FR_DISK_ERR); fp->clust = clst; /* Update current cluster */ if (fp->sclust == 0) - fp->sclust = - clst; /* Set start cluster if the first write */ + fp->sclust = clst; /* Set start cluster if the first write */ } #if _FS_TINY - if (fp->fs->winsect == fp->dsect && - sync_window(fp->fs)) /* Write-back sector cache */ + if (fp->fs->winsect == fp->dsect && sync_window(fp->fs)) /* Write-back sector cache */ ABORT(fp->fs, FR_DISK_ERR); #else if (fp->flag & FA__DIRTY) { /* Write-back sector cache */ @@ -3216,28 +2949,23 @@ f_write(FIL* fp, /* Pointer to the file object */ if (!sect) ABORT(fp->fs, FR_INT_ERR); sect += csect; - cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Write maximum contiguous sectors directly */ + cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc) { /* Write maximum contiguous sectors directly */ if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ cc = fp->fs->csize - csect; if (disk_write(fp->fs->drv, wbuff, sect, cc) != RES_OK) ABORT(fp->fs, FR_DISK_ERR); #if _FS_MINIMIZE <= 2 #if _FS_TINY - if (fp->fs->winsect - sect < - cc) { /* Refill sector cache if it gets invalidated by the - direct write */ - mem_cpy(fp->fs->win, - wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), - SS(fp->fs)); + if (fp->fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the + direct write */ + mem_cpy(fp->fs->win, wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), SS(fp->fs)); fp->fs->wflag = 0; } #else - if (fp->dsect - sect < - cc) { /* Refill sector cache if it gets invalidated by the - direct write */ - mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), - SS(fp->fs)); + if (fp->dsect - sect < cc) { /* Refill sector cache if it gets invalidated by the + direct write */ + mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); fp->flag &= ~FA__DIRTY; } #endif @@ -3246,35 +2974,29 @@ f_write(FIL* fp, /* Pointer to the file object */ continue; } #if _FS_TINY - if (fp->fptr >= - fp->fsize) { /* Avoid silly cache filling at growing edge */ + if (fp->fptr >= fp->fsize) { /* Avoid silly cache filling at growing edge */ if (sync_window(fp->fs)) ABORT(fp->fs, FR_DISK_ERR); fp->fs->winsect = sect; } #else if (fp->dsect != sect) { /* Fill sector cache with file data */ - if (fp->fptr < fp->fsize && - disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) + if (fp->fptr < fp->fsize && disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) ABORT(fp->fs, FR_DISK_ERR); } #endif fp->dsect = sect; } - wcnt = SS(fp->fs) - - ((UINT)fp->fptr % - SS(fp->fs)); /* Put partial sector into file I/O buffer */ + wcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Put partial sector into file I/O buffer */ if (wcnt > btw) wcnt = btw; #if _FS_TINY if (move_window(fp->fs, fp->dsect) != FR_OK) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); - mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, - wcnt); /* Fit partial sector */ + mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ fp->fs->wflag = 1; #else - mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, - wcnt); /* Fit partial sector */ + mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ fp->flag |= FA__DIRTY; #endif } @@ -3291,12 +3013,12 @@ f_write(FIL* fp, /* Pointer to the file object */ /*-----------------------------------------------------------------------*/ FRESULT -f_sync(FIL* fp /* Pointer to the file object */ +f_sync(FIL *fp /* Pointer to the file object */ ) { FRESULT res; DWORD tm; - BYTE* dir; + BYTE *dir; res = validate(fp); /* Check validity of the object */ if (res == FR_OK) { @@ -3315,8 +3037,8 @@ f_sync(FIL* fp /* Pointer to the file object */ dir = fp->dir_ptr; dir[DIR_Attr] |= AM_ARC; /* Set archive bit */ ST_DWORD(dir + DIR_FileSize, fp->fsize); /* Update file size */ - st_clust(dir, fp->sclust); /* Update start cluster */ - tm = GET_FATTIME(); /* Update updated time */ + st_clust(dir, fp->sclust); /* Update start cluster */ + tm = GET_FATTIME(); /* Update updated time */ ST_DWORD(dir + DIR_WrtTime, tm); ST_WORD(dir + DIR_LstAccDate, 0); fp->flag &= ~FA__WRITTEN; @@ -3336,7 +3058,7 @@ f_sync(FIL* fp /* Pointer to the file object */ /*-----------------------------------------------------------------------*/ FRESULT -f_close(FIL* fp /* Pointer to the file object to be closed */ +f_close(FIL *fp /* Pointer to the file object to be closed */ ) { FRESULT res; @@ -3349,7 +3071,7 @@ f_close(FIL* fp /* Pointer to the file object to be closed */ res = validate(fp); /* Lock volume */ if (res == FR_OK) { #if _FS_REENTRANT - FATFS* fs = fp->fs; + FATFS *fs = fp->fs; #endif #if _FS_LOCK res = dec_lock(fp->lockid); /* Decrement file open counter */ @@ -3371,7 +3093,7 @@ f_close(FIL* fp /* Pointer to the file object to be closed */ #if _FS_RPATH >= 1 #if _VOLUMES >= 2 FRESULT -f_chdrive(const TCHAR* path /* Drive number */ +f_chdrive(const TCHAR *path /* Drive number */ ) { int vol; @@ -3387,7 +3109,7 @@ f_chdrive(const TCHAR* path /* Drive number */ #endif FRESULT -f_chdir(const TCHAR* path /* Pointer to the directory path */ +f_chdir(const TCHAR *path /* Pointer to the directory path */ ) { FRESULT res; @@ -3419,7 +3141,7 @@ f_chdir(const TCHAR* path /* Pointer to the directory path */ #if _FS_RPATH >= 2 FRESULT -f_getcwd(TCHAR* buff, /* Pointer to the directory path */ +f_getcwd(TCHAR *buff, /* Pointer to the directory path */ UINT len /* Size of path */ ) { @@ -3427,21 +3149,20 @@ f_getcwd(TCHAR* buff, /* Pointer to the directory path */ DIR dj; UINT i, n; DWORD ccl; - TCHAR* tp; + TCHAR *tp; FILINFO fno; DEFINE_NAMEBUF; *buff = 0; /* Get logical drive number */ - res = find_volume(&dj.fs, (const TCHAR**)&buff, 0); /* Get current volume */ + res = find_volume(&dj.fs, (const TCHAR **)&buff, 0); /* Get current volume */ if (res == FR_OK) { INIT_BUF(dj); - i = len; /* Bottom of buffer (directory stack base) */ - dj.sclust = dj.fs->cdir; /* Start to follow upper directory from current - directory */ - while ((ccl = dj.sclust) != - 0) { /* Repeat while current directory is a sub-directory */ - res = dir_sdi(&dj, 1); /* Get parent directory */ + i = len; /* Bottom of buffer (directory stack base) */ + dj.sclust = dj.fs->cdir; /* Start to follow upper directory from current + directory */ + while ((ccl = dj.sclust) != 0) { /* Repeat while current directory is a sub-directory */ + res = dir_sdi(&dj, 1); /* Get parent directory */ if (res != FR_OK) break; res = dir_read(&dj, 0); @@ -3467,9 +3188,7 @@ f_getcwd(TCHAR* buff, /* Pointer to the directory path */ fno.lfname = buff; fno.lfsize = i; #endif - get_fileinfo( - &dj, - &fno); /* Get the directory name and push it to the buffer */ + get_fileinfo(&dj, &fno); /* Get the directory name and push it to the buffer */ tp = fno.fname; #if _USE_LFN if (*buff) @@ -3514,7 +3233,7 @@ f_getcwd(TCHAR* buff, /* Pointer to the directory path */ /*-----------------------------------------------------------------------*/ FRESULT -f_lseek(FIL* fp, /* Pointer to the file object */ +f_lseek(FIL *fp, /* Pointer to the file object */ DWORD ofs /* File pointer from top of file */ ) { @@ -3552,8 +3271,7 @@ f_lseek(FIL* fp, /* Pointer to the file object */ if (cl == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); } while (cl == pcl + 1); - if (ulen <= - tlen) { /* Store the length and top of the fragment */ + if (ulen <= tlen) { /* Store the length and top of the fragment */ *tbl++ = ncl; *tbl++ = tcl; } @@ -3576,20 +3294,16 @@ f_lseek(FIL* fp, /* Pointer to the file object */ if (!dsc) ABORT(fp->fs, FR_INT_ERR); dsc += (ofs - 1) / SS(fp->fs) & (fp->fs->csize - 1); - if (fp->fptr % SS(fp->fs) && - dsc != fp->dsect) { /* Refill sector cache if needed */ + if (fp->fptr % SS(fp->fs) && dsc != fp->dsect) { /* Refill sector cache if needed */ #if !_FS_TINY #if !_FS_READONLY - if (fp->flag & - FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != - RES_OK) + if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) ABORT(fp->fs, FR_DISK_ERR); fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != - RES_OK) /* Load current sector */ + if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) /* Load current sector */ ABORT(fp->fs, FR_DISK_ERR); #endif fp->dsect = dsc; @@ -3612,13 +3326,9 @@ f_lseek(FIL* fp, /* Pointer to the file object */ ifptr = fp->fptr; fp->fptr = nsect = 0; if (ofs) { - bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ - if (ifptr > 0 && - (ofs - 1) / bcs >= - (ifptr - 1) / - bcs) { /* When seek to same or following cluster, */ - fp->fptr = (ifptr - 1) & - ~(bcs - 1); /* start from the current cluster */ + bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ + if (ifptr > 0 && (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ + fp->fptr = (ifptr - 1) & ~(bcs - 1); /* start from the current cluster */ ofs -= fp->fptr; clst = fp->clust; } else { /* When seek to back cluster, */ @@ -3638,12 +3348,9 @@ f_lseek(FIL* fp, /* Pointer to the file object */ if (clst != 0) { while (ofs > bcs) { /* Cluster following loop */ #if !_FS_READONLY - if (fp->flag & - FA_WRITE) { /* Check if in write mode or not */ - clst = create_chain( - fp->fs, clst); /* Force stretch if in write mode */ - if (clst == - 0) { /* When disk gets full, clip file size */ + if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ + clst = create_chain(fp->fs, clst); /* Force stretch if in write mode */ + if (clst == 0) { /* When disk gets full, clip file size */ ofs = bcs; break; } @@ -3668,8 +3375,7 @@ f_lseek(FIL* fp, /* Pointer to the file object */ } } } - if (fp->fptr % SS(fp->fs) && - nsect != fp->dsect) { /* Fill sector cache if needed */ + if (fp->fptr % SS(fp->fs) && nsect != fp->dsect) { /* Fill sector cache if needed */ #if !_FS_TINY #if !_FS_READONLY if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ @@ -3678,15 +3384,13 @@ f_lseek(FIL* fp, /* Pointer to the file object */ fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, nsect, 1) != - RES_OK) /* Fill sector cache */ + if (disk_read(fp->fs->drv, fp->buf, nsect, 1) != RES_OK) /* Fill sector cache */ ABORT(fp->fs, FR_DISK_ERR); #endif fp->dsect = nsect; } #if !_FS_READONLY - if (fp->fptr > - fp->fsize) { /* Set file change flag if the file size is extended */ + if (fp->fptr > fp->fsize) { /* Set file change flag if the file size is extended */ fp->fsize = fp->fptr; fp->flag |= FA__WRITTEN; } @@ -3702,12 +3406,12 @@ f_lseek(FIL* fp, /* Pointer to the file object */ /*-----------------------------------------------------------------------*/ FRESULT -f_opendir(DIR* dp, /* Pointer to directory object to create */ - const TCHAR* path /* Pointer to the directory path */ +f_opendir(DIR *dp, /* Pointer to directory object to create */ + const TCHAR *path /* Pointer to the directory path */ ) { FRESULT res; - FATFS* fs; + FATFS *fs; DEFINE_NAMEBUF; if (!dp) @@ -3720,10 +3424,9 @@ f_opendir(DIR* dp, /* Pointer to directory object to create */ INIT_BUF(*dp); res = follow_path(dp, path); /* Follow the path to the directory */ FREE_BUF(); - if (res == FR_OK) { /* Follow completed */ - if (dp->dir) { /* It is not the origin directory itself */ - if (dp->dir[DIR_Attr] & - AM_DIR) /* The object is a sub directory */ + if (res == FR_OK) { /* Follow completed */ + if (dp->dir) { /* It is not the origin directory itself */ + if (dp->dir[DIR_Attr] & AM_DIR) /* The object is a sub directory */ dp->sclust = ld_clust(fs, dp->dir); else /* The object is a file */ res = FR_NO_PATH; @@ -3734,13 +3437,11 @@ f_opendir(DIR* dp, /* Pointer to directory object to create */ #if _FS_LOCK if (res == FR_OK) { if (dp->sclust) { - dp->lockid = - inc_lock(dp, 0); /* Lock the sub directory */ + dp->lockid = inc_lock(dp, 0); /* Lock the sub directory */ if (!dp->lockid) res = FR_TOO_MANY_OPEN_FILES; } else { - dp->lockid = - 0; /* Root directory need not to be locked */ + dp->lockid = 0; /* Root directory need not to be locked */ } } #endif @@ -3760,7 +3461,7 @@ f_opendir(DIR* dp, /* Pointer to directory object to create */ /*-----------------------------------------------------------------------*/ FRESULT -f_closedir(DIR* dp /* Pointer to the directory object to be closed */ +f_closedir(DIR *dp /* Pointer to the directory object to be closed */ ) { FRESULT res; @@ -3768,7 +3469,7 @@ f_closedir(DIR* dp /* Pointer to the directory object to be closed */ res = validate(dp); if (res == FR_OK) { #if _FS_REENTRANT - FATFS* fs = dp->fs; + FATFS *fs = dp->fs; #endif #if _FS_LOCK if (dp->lockid) /* Decrement sub-directory open counter */ @@ -3788,8 +3489,8 @@ f_closedir(DIR* dp /* Pointer to the directory object to be closed */ /*-----------------------------------------------------------------------*/ FRESULT -f_readdir(DIR* dp, /* Pointer to the open directory object */ - FILINFO* fno /* Pointer to file information to return */ +f_readdir(DIR *dp, /* Pointer to the open directory object */ + FILINFO *fno /* Pointer to file information to return */ ) { FRESULT res; @@ -3827,8 +3528,8 @@ f_readdir(DIR* dp, /* Pointer to the open directory object */ /*-----------------------------------------------------------------------*/ FRESULT -f_findnext(DIR* dp, /* Pointer to the open directory object */ - FILINFO* fno /* Pointer to the file information structure */ +f_findnext(DIR *dp, /* Pointer to the open directory object */ + FILINFO *fno /* Pointer to the file information structure */ ) { FRESULT res; @@ -3852,10 +3553,10 @@ f_findnext(DIR* dp, /* Pointer to the open directory object */ /*-----------------------------------------------------------------------*/ FRESULT -f_findfirst(DIR* dp, /* Pointer to the blank directory object */ - FILINFO* fno, /* Pointer to the file information structure */ - const TCHAR* path, /* Pointer to the directory to open */ - const TCHAR* pattern /* Pointer to the matching pattern */ +f_findfirst(DIR *dp, /* Pointer to the blank directory object */ + FILINFO *fno, /* Pointer to the file information structure */ + const TCHAR *path, /* Pointer to the directory to open */ + const TCHAR *pattern /* Pointer to the matching pattern */ ) { FRESULT res; @@ -3875,8 +3576,8 @@ f_findfirst(DIR* dp, /* Pointer to the blank directory object */ /*-----------------------------------------------------------------------*/ FRESULT -f_stat(const TCHAR* path, /* Pointer to the file path */ - FILINFO* fno /* Pointer to file information to return */ +f_stat(const TCHAR *path, /* Pointer to the file path */ + FILINFO *fno /* Pointer to file information to return */ ) { FRESULT res; @@ -3908,15 +3609,14 @@ f_stat(const TCHAR* path, /* Pointer to the file path */ /*-----------------------------------------------------------------------*/ FRESULT -f_getfree( - const TCHAR* path, /* Path name of the logical drive number */ - DWORD* nclst, /* Pointer to a variable to return number of free clusters */ - FATFS** fatfs /* Pointer to return pointer to corresponding file system - object */ - ) +f_getfree(const TCHAR *path, /* Path name of the logical drive number */ + DWORD *nclst, /* Pointer to a variable to return number of free clusters */ + FATFS **fatfs /* Pointer to return pointer to corresponding file system + object */ + ) { FRESULT res; - FATFS* fs; + FATFS *fs; DWORD n, clst, sect, stat; UINT i; BYTE fat, *p; @@ -3986,7 +3686,7 @@ f_getfree( /*-----------------------------------------------------------------------*/ FRESULT -f_truncate(FIL* fp /* Pointer to the file object */ +f_truncate(FIL *fp /* Pointer to the file object */ ) { FRESULT res; @@ -4044,12 +3744,12 @@ f_truncate(FIL* fp /* Pointer to the file object */ /*-----------------------------------------------------------------------*/ FRESULT -f_unlink(const TCHAR* path /* Pointer to the file or directory path */ +f_unlink(const TCHAR *path /* Pointer to the file or directory path */ ) { FRESULT res; DIR dj, sdj; - BYTE* dir; + BYTE *dir; DWORD dclst = 0; DEFINE_NAMEBUF; @@ -4074,26 +3774,20 @@ f_unlink(const TCHAR* path /* Pointer to the file or directory path */ } if (res == FR_OK) { dclst = ld_clust(dj.fs, dir); - if (dclst && - (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-directory ? */ + if (dclst && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-directory ? */ #if _FS_RPATH - if (dclst == - dj.fs->cdir) { /* Is it the current directory? */ + if (dclst == dj.fs->cdir) { /* Is it the current directory? */ res = FR_DENIED; } else #endif { - mem_cpy(&sdj, &dj, - sizeof(DIR)); /* Open the sub-directory */ + mem_cpy(&sdj, &dj, sizeof(DIR)); /* Open the sub-directory */ sdj.sclust = dclst; res = dir_sdi(&sdj, 2); if (res == FR_OK) { - res = dir_read( - &sdj, - 0); /* Read an item (excluding dot entries) */ + res = dir_read(&sdj, 0); /* Read an item (excluding dot entries) */ if (res == FR_OK) - res = - FR_DENIED; /* Not empty? (cannot remove) */ + res = FR_DENIED; /* Not empty? (cannot remove) */ if (res == FR_NO_FILE) res = FR_OK; /* Empty? (can remove) */ } @@ -4101,9 +3795,8 @@ f_unlink(const TCHAR* path /* Pointer to the file or directory path */ } } if (res == FR_OK) { - res = dir_remove(&dj); /* Remove the directory entry */ - if (res == FR_OK && - dclst) /* Remove the cluster chain if exist */ + res = dir_remove(&dj); /* Remove the directory entry */ + if (res == FR_OK && dclst) /* Remove the cluster chain if exist */ res = remove_chain(dj.fs, dclst); if (res == FR_OK) res = sync_fs(dj.fs); @@ -4120,7 +3813,7 @@ f_unlink(const TCHAR* path /* Pointer to the file or directory path */ /*-----------------------------------------------------------------------*/ FRESULT -f_mkdir(const TCHAR* path /* Pointer to the directory path */ +f_mkdir(const TCHAR *path /* Pointer to the directory path */ ) { FRESULT res; @@ -4138,9 +3831,8 @@ f_mkdir(const TCHAR* path /* Pointer to the directory path */ res = FR_EXIST; /* Any object with same name is already existing */ if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NSFLAG] & NS_DOT)) res = FR_INVALID_NAME; - if (res == FR_NO_FILE) { /* Can create a new directory */ - dcl = create_chain( - dj.fs, 0); /* Allocate a cluster for the new directory table */ + if (res == FR_NO_FILE) { /* Can create a new directory */ + dcl = create_chain(dj.fs, 0); /* Allocate a cluster for the new directory table */ res = FR_OK; if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ @@ -4165,8 +3857,7 @@ f_mkdir(const TCHAR* path /* Pointer to the directory path */ if (dj.fs->fs_type == FS_FAT32 && pcl == dj.fs->dirbase) pcl = 0; st_clust(dir + SZ_DIRE, pcl); - for (n = dj.fs->csize; n; - n--) { /* Write dot entries and clear following sectors */ + for (n = dj.fs->csize; n; n--) { /* Write dot entries and clear following sectors */ dj.fs->winsect = dsc++; dj.fs->wflag = 1; res = sync_window(dj.fs); @@ -4176,11 +3867,9 @@ f_mkdir(const TCHAR* path /* Pointer to the directory path */ } } if (res == FR_OK) - res = - dir_register(&dj); /* Register the object to the directoy */ + res = dir_register(&dj); /* Register the object to the directoy */ if (res != FR_OK) { - remove_chain( - dj.fs, dcl); /* Could not register, remove cluster chain */ + remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ } else { dir = dj.dir; dir[DIR_Attr] = AM_DIR; /* Attribute */ @@ -4201,14 +3890,14 @@ f_mkdir(const TCHAR* path /* Pointer to the directory path */ /*-----------------------------------------------------------------------*/ FRESULT -f_chmod(const TCHAR* path, /* Pointer to the file path */ +f_chmod(const TCHAR *path, /* Pointer to the file path */ BYTE attr, /* Attribute bits */ BYTE mask /* Attribute mask to change */ ) { FRESULT res; DIR dj; - BYTE* dir; + BYTE *dir; DEFINE_NAMEBUF; /* Get logical drive number */ @@ -4223,12 +3912,9 @@ f_chmod(const TCHAR* path, /* Pointer to the file path */ dir = dj.dir; if (!dir) { /* Is it a root directory? */ res = FR_INVALID_NAME; - } else { /* File or sub directory */ - mask &= AM_RDO | AM_HID | AM_SYS | - AM_ARC; /* Valid attribute mask */ - dir[DIR_Attr] = - (attr & mask) | - (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + } else { /* File or sub directory */ + mask &= AM_RDO | AM_HID | AM_SYS | AM_ARC; /* Valid attribute mask */ + dir[DIR_Attr] = (attr & mask) | (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ dj.fs->wflag = 1; res = sync_fs(dj.fs); } @@ -4243,8 +3929,8 @@ f_chmod(const TCHAR* path, /* Pointer to the file path */ /*-----------------------------------------------------------------------*/ FRESULT -f_rename(const TCHAR* path_old, /* Pointer to the object to be renamed */ - const TCHAR* path_new /* Pointer to the new name */ +f_rename(const TCHAR *path_old, /* Pointer to the object to be renamed */ + const TCHAR *path_new /* Pointer to the new name */ ) { FRESULT res; @@ -4269,22 +3955,17 @@ f_rename(const TCHAR* path_old, /* Pointer to the object to be renamed */ if (!djo.dir) { /* Is root dir? */ res = FR_NO_FILE; } else { - mem_cpy(buf, djo.dir + DIR_Attr, - 21); /* Save information about object except name */ - mem_cpy(&djn, &djo, - sizeof(DIR)); /* Duplicate the directory object */ - if (get_ldnumber(&path_new) >= - 0) /* Snip drive number off and ignore it */ + mem_cpy(buf, djo.dir + DIR_Attr, 21); /* Save information about object except name */ + mem_cpy(&djn, &djo, sizeof(DIR)); /* Duplicate the directory object */ + if (get_ldnumber(&path_new) >= 0) /* Snip drive number off and ignore it */ res = follow_path(&djn, path_new); /* and make sure if new object name is not conflicting */ else res = FR_INVALID_DRIVE; if (res == FR_OK) - res = - FR_EXIST; /* The new object name is already existing */ - if (res == - FR_NO_FILE) { /* It is a valid path and no name collision */ + res = FR_EXIST; /* The new object name is already existing */ + if (res == FR_NO_FILE) { /* It is a valid path and no name collision */ res = dir_register(&djn); /* Register the new entry */ if (res == FR_OK) { /* Start of critical section where any interruption can @@ -4294,17 +3975,14 @@ f_rename(const TCHAR* path_old, /* Pointer to the object to be renamed */ mem_cpy(dir + 13, buf + 2, 19); dir[DIR_Attr] = buf[0] | AM_ARC; djo.fs->wflag = 1; - if ((dir[DIR_Attr] & AM_DIR) && - djo.sclust != - djn.sclust) { /* Update .. entry in the - sub-directory if needed */ + if ((dir[DIR_Attr] & AM_DIR) && djo.sclust != djn.sclust) { /* Update .. entry in the + sub-directory if needed */ dw = clust2sect(djo.fs, ld_clust(djo.fs, dir)); if (!dw) { res = FR_INT_ERR; } else { res = move_window(djo.fs, dw); - dir = djo.fs->win + - SZ_DIRE * 1; /* Ptr to .. entry */ + dir = djo.fs->win + SZ_DIRE * 1; /* Ptr to .. entry */ if (res == FR_OK && dir[1] == '.') { st_clust(dir, djn.sclust); djo.fs->wflag = 1; @@ -4332,13 +4010,13 @@ f_rename(const TCHAR* path_old, /* Pointer to the object to be renamed */ /*-----------------------------------------------------------------------*/ FRESULT -f_utime(const TCHAR* path, /* Pointer to the file/directory name */ - const FILINFO* fno /* Pointer to the time stamp to be set */ +f_utime(const TCHAR *path, /* Pointer to the file/directory name */ + const FILINFO *fno /* Pointer to the time stamp to be set */ ) { FRESULT res; DIR dj; - BYTE* dir; + BYTE *dir; DEFINE_NAMEBUF; /* Get logical drive number */ @@ -4376,11 +4054,10 @@ f_utime(const TCHAR* path, /* Pointer to the file/directory name */ /*-----------------------------------------------------------------------*/ FRESULT -f_getlabel( - const TCHAR* path, /* Path name of the logical drive number */ - TCHAR* label, /* Pointer to a buffer to return the volume label */ - DWORD* vsn /* Pointer to a variable to return the volume serial number */ - ) +f_getlabel(const TCHAR *path, /* Path name of the logical drive number */ + TCHAR *label, /* Pointer to a buffer to return the volume label */ + DWORD *vsn /* Pointer to a variable to return the volume serial number */ + ) { FRESULT res; DIR dj; @@ -4442,7 +4119,7 @@ f_getlabel( /*-----------------------------------------------------------------------*/ FRESULT -f_setlabel(const TCHAR* label /* Pointer to the volume label to set */ +f_setlabel(const TCHAR *label /* Pointer to the volume label to set */ ) { FRESULT res; @@ -4471,9 +4148,7 @@ f_setlabel(const TCHAR* label /* Pointer to the volume label to set */ #else w = (BYTE)label[i++]; if (IsDBCS1(w)) - w = (j < 10 && i < sl && IsDBCS2(label[i])) - ? w << 8 | (BYTE)label[i++] - : 0; + w = (j < 10 && i < sl && IsDBCS2(label[i])) ? w << 8 | (BYTE)label[i++] : 0; #if _USE_LFN w = ff_convert(ff_wtoupper(ff_convert(w, 1)), 0); #else @@ -4481,18 +4156,16 @@ f_setlabel(const TCHAR* label /* Pointer to the volume label to set */ w -= 0x20; /* To upper ASCII characters */ #ifdef _EXCVT if (w >= 0x80) - w = ExCvt[w - - 0x80]; /* To upper extended characters (SBCS cfg) */ + w = ExCvt[w - 0x80]; /* To upper extended characters (SBCS cfg) */ #else if (!_DF1S && w >= 0x80) w = 0; /* Reject extended characters (ASCII cfg) */ #endif #endif #endif - if (!w || chk_chr("\"*+,.:;<=>\?[]|\x7F", w) || - j >= (UINT)((w >= 0x100) ? 10 : 11)) /* Reject invalid - characters for volume - label */ + if (!w || chk_chr("\"*+,.:;<=>\?[]|\x7F", w) || j >= (UINT)((w >= 0x100) ? 10 : 11)) /* Reject invalid + characters for volume + label */ LEAVE_FF(dj.fs, FR_INVALID_NAME); if (w >= 0x100) vn[j++] = (BYTE)(w >> 8); @@ -4501,8 +4174,7 @@ f_setlabel(const TCHAR* label /* Pointer to the volume label to set */ while (j < 11) vn[j++] = ' '; /* Fill remaining name field */ if (vn[0] == DDEM) - LEAVE_FF(dj.fs, - FR_INVALID_NAME); /* Reject illegal name (heading DDEM) */ + LEAVE_FF(dj.fs, FR_INVALID_NAME); /* Reject illegal name (heading DDEM) */ } /* Set volume label */ @@ -4523,9 +4195,8 @@ f_setlabel(const TCHAR* label /* Pointer to the volume label to set */ } else { /* No volume label is found or error */ if (res == FR_NO_FILE) { res = FR_OK; - if (vn[0]) { /* Create volume label as new */ - res = dir_alloc(&dj, - 1); /* Allocate an entry for volume label */ + if (vn[0]) { /* Create volume label as new */ + res = dir_alloc(&dj, 1); /* Allocate an entry for volume label */ if (res == FR_OK) { mem_set(dj.dir, 0, SZ_DIRE); /* Set volume label */ mem_cpy(dj.dir, vn, 11); @@ -4552,11 +4223,10 @@ f_setlabel(const TCHAR* label /* Pointer to the volume label to set */ #if _USE_FORWARD && _FS_TINY FRESULT -f_forward(FIL* fp, /* Pointer to the file object */ - UINT (*func)(const BYTE*, - UINT), /* Pointer to the streaming function */ - UINT btf, /* Number of bytes to forward */ - UINT* bf /* Pointer to number of bytes forwarded */ +f_forward(FIL *fp, /* Pointer to the file object */ + UINT (*func)(const BYTE *, UINT), /* Pointer to the streaming function */ + UINT btf, /* Number of bytes to forward */ + UINT *bf /* Pointer to number of bytes forwarded */ ) { FRESULT res; @@ -4578,17 +4248,12 @@ f_forward(FIL* fp, /* Pointer to the file object */ if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */ - for (; - btf && - (*func)( - 0, - 0); /* Repeat until all data transferred or stream becomes busy */ - fp->fptr += rcnt, * bf += rcnt, btf -= rcnt) { - csect = (BYTE)(fp->fptr / SS(fp->fs) & - (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - if (!csect) { /* On the cluster boundary? */ - clst = (fp->fptr == 0) ? /* On the top of the file? */ + for (; btf && (*func)(0, 0); /* Repeat until all data transferred or stream becomes busy */ + fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + if (!csect) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ fp->sclust : get_fat(fp->fs, fp->clust); if (clst <= 1) @@ -4605,9 +4270,7 @@ f_forward(FIL* fp, /* Pointer to the file object */ if (move_window(fp->fs, sect) != FR_OK) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); fp->dsect = sect; - rcnt = - SS(fp->fs) - - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ + rcnt = SS(fp->fs) - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ if (rcnt > btf) rcnt = btf; rcnt = (*func)(&fp->fs->win[(WORD)fp->fptr % SS(fp->fs)], rcnt); @@ -4627,21 +4290,20 @@ f_forward(FIL* fp, /* Pointer to the file object */ #define N_FATS 1 /* Number of FATs (1 or 2) */ FRESULT -f_mkfs(const TCHAR* path, /* Logical drive number */ +f_mkfs(const TCHAR *path, /* Logical drive number */ BYTE sfd, /* Partitioning rule 0:FDISK, 1:SFD */ - UINT au /* Size of allocation unit in unit of byte or sector */ + UINT au /* Size of allocation unit in unit of byte or sector */ ) { static const WORD vst[] = { 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 0 }; - static const WORD cst[] = { 32768, 16384, 8192, 4096, 2048, 16384, - 8192, 4096, 2048, 1024, 512 }; + static const WORD cst[] = { 32768, 16384, 8192, 4096, 2048, 16384, 8192, 4096, 2048, 1024, 512 }; int vol; BYTE fmt, md, sys, *tbl, pdrv, part; DWORD n_clst, vs, n, wsect; UINT i; DWORD b_vol, b_fat, b_dir, b_data; /* LBA */ DWORD n_vol, n_rsv, n_fat, n_dir; /* Size */ - FATFS* fs; + FATFS *fs; DSTATUS stat; #if _USE_TRIM DWORD eb[2]; @@ -4658,8 +4320,7 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ return FR_NOT_ENABLED; fs->fs_type = 0; pdrv = LD2PD(vol); /* Physical drive */ - part = - LD2PT(vol); /* Partition (0:auto detect, 1-4:get from partition table)*/ + part = LD2PT(vol); /* Partition (0:auto detect, 1-4:get from partition table)*/ /* Get disk statics */ stat = disk_initialize(pdrv); @@ -4668,8 +4329,7 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; #if _MAX_SS != _MIN_SS /* Get disk sector size */ - if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || - SS(fs) > _MAX_SS || SS(fs) < _MIN_SS) + if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS || SS(fs) < _MIN_SS) return FR_DISK_ERR; #endif if (_MULTI_PARTITION && part) { @@ -4735,8 +4395,7 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ */ if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &n) != RES_OK || !n || n > 32768) n = 1; - n = (b_data + n - 1) & - ~(n - 1); /* Next nearest erase block from current data start */ + n = (b_data + n - 1) & ~(n - 1); /* Next nearest erase block from current data start */ n = (n - b_data) / N_FATS; if (fmt == FS_FAT32) { /* FAT32: Move FAT offset */ n_rsv += n; @@ -4748,8 +4407,7 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ /* Determine number of clusters and final check of validity of the FAT * sub-type */ n_clst = (n_vol - n_rsv - n_fat * N_FATS - n_dir) / au; - if ((fmt == FS_FAT16 && n_clst < MIN_FAT16) || - (fmt == FS_FAT32 && n_clst < MIN_FAT32)) + if ((fmt == FS_FAT16 && n_clst < MIN_FAT16) || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) return FR_MKFS_ABORTED; /* Determine system ID in the partition table */ @@ -4759,9 +4417,7 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ if (fmt == FS_FAT12 && n_vol < 0x10000) { sys = 0x01; /* FAT12(<65536) */ } else { - sys = (n_vol < 0x10000) - ? 0x04 - : 0x06; /* FAT16(<65536) : FAT12/16(>=65536) */ + sys = (n_vol < 0x10000) ? 0x04 : 0x06; /* FAT16(<65536) : FAT12/16(>=65536) */ } } @@ -4785,13 +4441,12 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ tbl[4] = sys; /* System type */ tbl[5] = 254; /* Partition end head */ n = (b_vol + n_vol) / 63 / 255; - tbl[6] = (BYTE)(n >> 2 | 63); /* Partition end sector */ - tbl[7] = (BYTE)n; /* End cylinder */ - ST_DWORD(tbl + 8, 63); /* Partition start in LBA */ - ST_DWORD(tbl + 12, n_vol); /* Partition size in LBA */ - ST_WORD(fs->win + BS_55AA, 0xAA55); /* MBR signature */ - if (disk_write(pdrv, fs->win, 0, 1) != - RES_OK) /* Write it to the MBR */ + tbl[6] = (BYTE)(n >> 2 | 63); /* Partition end sector */ + tbl[7] = (BYTE)n; /* End cylinder */ + ST_DWORD(tbl + 8, 63); /* Partition start in LBA */ + ST_DWORD(tbl + 12, n_vol); /* Partition size in LBA */ + ST_WORD(fs->win + BS_55AA, 0xAA55); /* MBR signature */ + if (disk_write(pdrv, fs->win, 0, 1) != RES_OK) /* Write it to the MBR */ return FR_DISK_ERR; md = 0xF8; } @@ -4805,11 +4460,10 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ 11); /* Boot jump code, OEM name */ i = SS(fs); /* Sector size */ ST_WORD(tbl + BPB_BytsPerSec, i); - tbl[BPB_SecPerClus] = (BYTE)au; /* Sectors per cluster */ - ST_WORD(tbl + BPB_RsvdSecCnt, n_rsv); /* Reserved sectors */ - tbl[BPB_NumFATs] = N_FATS; /* Number of FATs */ - i = (fmt == FS_FAT32) ? 0 - : N_ROOTDIR; /* Number of root directory entries */ + tbl[BPB_SecPerClus] = (BYTE)au; /* Sectors per cluster */ + ST_WORD(tbl + BPB_RsvdSecCnt, n_rsv); /* Reserved sectors */ + tbl[BPB_NumFATs] = N_FATS; /* Number of FATs */ + i = (fmt == FS_FAT32) ? 0 : N_ROOTDIR; /* Number of root directory entries */ ST_WORD(tbl + BPB_RootEntCnt, i); if (n_vol < 0x10000) { /* Number of total sectors */ ST_WORD(tbl + BPB_TotSec16, n_vol); @@ -4824,12 +4478,11 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ if (fmt == FS_FAT32) { ST_DWORD(tbl + BS_VolID32, n); /* VSN */ ST_DWORD(tbl + BPB_FATSz32, n_fat); /* Number of sectors per FAT */ - ST_DWORD(tbl + BPB_RootClus, 2); /* Root directory start cluster (2) */ - ST_WORD(tbl + BPB_FSInfo, 1); /* FSINFO record offset (VBR + 1) */ - ST_WORD(tbl + BPB_BkBootSec, - 6); /* Backup boot record offset (VBR + 6) */ - tbl[BS_DrvNum32] = 0x80; /* Drive number */ - tbl[BS_BootSig32] = 0x29; /* Extended boot signature */ + ST_DWORD(tbl + BPB_RootClus, 2); /* Root directory start cluster (2) */ + ST_WORD(tbl + BPB_FSInfo, 1); /* FSINFO record offset (VBR + 1) */ + ST_WORD(tbl + BPB_BkBootSec, 6); /* Backup boot record offset (VBR + 6) */ + tbl[BS_DrvNum32] = 0x80; /* Drive number */ + tbl[BS_BootSig32] = 0x29; /* Extended boot signature */ mem_cpy(tbl + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ @@ -4842,10 +4495,9 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ "FAT ", 19); /* Volume label, FAT signature */ } - ST_WORD(tbl + BS_55AA, 0xAA55); /* Signature (Offset is fixed here - regardless of sector size) */ - if (disk_write(pdrv, tbl, b_vol, 1) != - RES_OK) /* Write it to the VBR sector */ + ST_WORD(tbl + BS_55AA, 0xAA55); /* Signature (Offset is fixed here + regardless of sector size) */ + if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) /* Write it to the VBR sector */ return FR_DISK_ERR; if (fmt == FS_FAT32) /* Write backup VBR if needed (VBR + 6) */ disk_write(pdrv, tbl, b_vol + 6, 1); @@ -4862,15 +4514,13 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ n |= 0xFFFFFF00; ST_DWORD(tbl + 0, n); /* Reserve cluster #0-1 (FAT32) */ ST_DWORD(tbl + 4, 0xFFFFFFFF); - ST_DWORD(tbl + 8, - 0x0FFFFFFF); /* Reserve cluster #2 for root directory */ + ST_DWORD(tbl + 8, 0x0FFFFFFF); /* Reserve cluster #2 for root directory */ } if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) return FR_DISK_ERR; - mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ - for (n = 1; n < n_fat; - n++) { /* This loop may take a time on FAT32 volume due to many - single sector writes */ + mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ + for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many + single sector writes */ if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) return FR_DISK_ERR; } @@ -4895,9 +4545,8 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ if (fmt == FS_FAT32) { ST_DWORD(tbl + FSI_LeadSig, 0x41615252); ST_DWORD(tbl + FSI_StrucSig, 0x61417272); - ST_DWORD(tbl + FSI_Free_Count, - n_clst - 1); /* Number of free clusters */ - ST_DWORD(tbl + FSI_Nxt_Free, 2); /* Last allocated cluster# */ + ST_DWORD(tbl + FSI_Free_Count, n_clst - 1); /* Number of free clusters */ + ST_DWORD(tbl + FSI_Nxt_Free, 2); /* Last allocated cluster# */ ST_WORD(tbl + BS_55AA, 0xAA55); disk_write(pdrv, tbl, b_vol + 1, 1); /* Write original (VBR + 1) */ disk_write(pdrv, tbl, b_vol + 7, 1); /* Write backup (VBR + 7) */ @@ -4914,7 +4563,7 @@ f_mkfs(const TCHAR* path, /* Logical drive number */ FRESULT f_fdisk(BYTE pdrv, /* Physical drive number */ const DWORD szt[], /* Pointer to the size table for each partitions */ - void* work /* Pointer to the working buffer */ + void *work /* Pointer to the working buffer */ ) { UINT i, n, sz_cyl, tot_cyl, b_cyl, e_cyl, p_cyl; @@ -4944,8 +4593,7 @@ f_fdisk(BYTE pdrv, /* Physical drive number */ p = buf + MBR_Table; b_cyl = 0; for (i = 0; i < 4; i++, p += SZ_PTE) { - p_cyl = - (szt[i] <= 100U) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; + p_cyl = (szt[i] <= 100U) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; if (!p_cyl) continue; s_part = (DWORD)sz_cyl * b_cyl; @@ -4978,10 +4626,7 @@ f_fdisk(BYTE pdrv, /* Physical drive number */ ST_WORD(p, 0xAA55); /* Write it to the MBR */ - return (disk_write(pdrv, buf, 0, 1) != RES_OK || - disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) - ? FR_DISK_ERR - : FR_OK; + return (disk_write(pdrv, buf, 0, 1) != RES_OK || disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) ? FR_DISK_ERR : FR_OK; } #endif /* _MULTI_PARTITION */ @@ -4992,10 +4637,10 @@ f_fdisk(BYTE pdrv, /* Physical drive number */ /* Get a string from the file */ /*-----------------------------------------------------------------------*/ -TCHAR* -f_gets(TCHAR* buff, /* Pointer to the string buffer to read */ +TCHAR * +f_gets(TCHAR *buff, /* Pointer to the string buffer to read */ int len, /* Size of string buffer (characters) */ - FIL* fp /* Pointer to the file object */ + FIL *fp /* Pointer to the file object */ ) { int n = 0; @@ -5072,8 +4717,7 @@ f_gets(TCHAR* buff, /* Pointer to the string buffer to read */ break; /* Break on EOL */ } *p = 0; - return n ? buff - : 0; /* When no data read (eof or error), return with error. */ + return n ? buff : 0; /* When no data read (eof or error), return with error. */ } #if !_FS_READONLY @@ -5084,13 +4728,13 @@ f_gets(TCHAR* buff, /* Pointer to the string buffer to read */ typedef struct { - FIL* fp; + FIL *fp; int idx, nchr; BYTE buf[64]; } putbuff; static void -putc_bfd(putbuff* pb, TCHAR c) +putc_bfd(putbuff *pb, TCHAR c) { UINT bw; int i; @@ -5133,8 +4777,7 @@ putc_bfd(putbuff* pb, TCHAR c) pb->buf[i++] = (BYTE)c; #endif - if (i >= - (int)(sizeof pb->buf) - 3) { /* Write buffered characters to the file */ + if (i >= (int)(sizeof pb->buf) - 3) { /* Write buffered characters to the file */ f_write(pb->fp, pb->buf, (UINT)i, &bw); i = (bw == (UINT)i) ? 0 : -1; } @@ -5144,7 +4787,7 @@ putc_bfd(putbuff* pb, TCHAR c) int f_putc(TCHAR c, /* A character to be output */ - FIL* fp /* Pointer to the file object */ + FIL *fp /* Pointer to the file object */ ) { putbuff pb; @@ -5156,8 +4799,7 @@ f_putc(TCHAR c, /* A character to be output */ putc_bfd(&pb, c); /* Put a character */ if (pb.idx >= 0 /* Flush buffered characters to the file */ - && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK && - (UINT)pb.idx == nw) + && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK && (UINT)pb.idx == nw) return pb.nchr; return EOF; } @@ -5167,8 +4809,8 @@ f_putc(TCHAR c, /* A character to be output */ /*-----------------------------------------------------------------------*/ int -f_puts(const TCHAR* str, /* Pointer to the string to be output */ - FIL* fp /* Pointer to the file object */ +f_puts(const TCHAR *str, /* Pointer to the string to be output */ + FIL *fp /* Pointer to the file object */ ) { putbuff pb; @@ -5181,8 +4823,7 @@ f_puts(const TCHAR* str, /* Pointer to the string to be output */ putc_bfd(&pb, *str++); if (pb.idx >= 0 /* Flush buffered characters to the file */ - && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK && - (UINT)pb.idx == nw) + && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK && (UINT)pb.idx == nw) return pb.nchr; return EOF; } @@ -5192,8 +4833,8 @@ f_puts(const TCHAR* str, /* Pointer to the string to be output */ /*-----------------------------------------------------------------------*/ int -f_printf(FIL* fp, /* Pointer to the file object */ - const TCHAR* fmt, /* Pointer to the format string */ +f_printf(FIL *fp, /* Pointer to the file object */ + const TCHAR *fmt, /* Pointer to the format string */ ... /* Optional arguments... */ ) { @@ -5243,7 +4884,7 @@ f_printf(FIL* fp, /* Pointer to the file object */ d -= 0x20; switch (d) { /* Type is... */ case 'S': /* String */ - p = va_arg(arp, TCHAR*); + p = va_arg(arp, TCHAR *); for (j = 0; p[j]; j++) ; if (!(f & 2)) { @@ -5277,9 +4918,7 @@ f_printf(FIL* fp, /* Pointer to the file object */ } /* Get an argument and put it in numeral */ - v = (f & 4) ? (DWORD)va_arg(arp, long) - : ((d == 'D') ? (DWORD)(long)va_arg(arp, int) - : (DWORD)va_arg(arp, unsigned int)); + v = (f & 4) ? (DWORD)va_arg(arp, long) : ((d == 'D') ? (DWORD)(long)va_arg(arp, int) : (DWORD)va_arg(arp, unsigned int)); if (d == 'D' && (v & 0x80000000)) { v = 0 - v; f |= 8; @@ -5308,8 +4947,7 @@ f_printf(FIL* fp, /* Pointer to the file object */ va_end(arp); if (pb.idx >= 0 /* Flush buffered characters to the file */ - && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK && - (UINT)pb.idx == nw) + && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK && (UINT)pb.idx == nw) return pb.nchr; return EOF; } diff --git a/source/fatfs/ff.h b/source/fatfs/ff.h index 2fe5e6a..7765f70 100644 --- a/source/fatfs/ff.h +++ b/source/fatfs/ff.h @@ -41,8 +41,8 @@ extern PARTITION VolToPart[]; /* Volume - Partition resolution table */ #define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */ #else /* Single partition configuration */ -#define LD2PD(vol) \ - (BYTE)(vol) /* Each logical drive is bound to the same physical drive \ +#define LD2PD(vol) \ + (BYTE)(vol) /* Each logical drive is bound to the same physical drive \ number */ #define LD2PT(vol) 0 /* Find first valid partition or in SFD */ @@ -109,7 +109,7 @@ typedef struct typedef struct { - FATFS* fs; /* Pointer to the related file system object (**do not change + FATFS *fs; /* Pointer to the related file system object (**do not change order**) */ WORD id; /* Owner file system mount ID (**do not change order**) */ BYTE flag; /* Status flags */ @@ -123,11 +123,10 @@ typedef struct DWORD dsect; /* Sector number appearing in buf[] (0:invalid) */ #if !_FS_READONLY DWORD dir_sect; /* Sector number containing the directory entry */ - BYTE* dir_ptr; /* Pointer to the directory entry in the win[] */ + BYTE *dir_ptr; /* Pointer to the directory entry in the win[] */ #endif #if _USE_FASTSEEK - DWORD* - cltbl; /* Pointer to the cluster link map table (Nulled on file open) */ + DWORD *cltbl; /* Pointer to the cluster link map table (Nulled on file open) */ #endif #if _FS_LOCK UINT lockid; /* File lock ID origin from 1 (index of file semaphore table @@ -142,24 +141,24 @@ typedef struct typedef struct { - FATFS* fs; /* Pointer to the owner file system object (**do not change + FATFS *fs; /* Pointer to the owner file system object (**do not change order**) */ WORD id; /* Owner file system mount ID (**do not change order**) */ WORD index; /* Current read/write index number */ DWORD sclust; /* Table start cluster (0:Root dir) */ DWORD clust; /* Current cluster */ DWORD sect; /* Current sector */ - BYTE* dir; /* Pointer to the current SFN entry in the win[] */ - BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ + BYTE *dir; /* Pointer to the current SFN entry in the win[] */ + BYTE *fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ #if _FS_LOCK UINT lockid; /* File lock ID (index of file semaphore table Files[]) */ #endif #if _USE_LFN - WCHAR* lfn; /* Pointer to the LFN working buffer */ + WCHAR *lfn; /* Pointer to the LFN working buffer */ WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ #endif #if _USE_FIND - const TCHAR* pat; /* Pointer to the name matching pattern */ + const TCHAR *pat; /* Pointer to the name matching pattern */ #endif } DIR; @@ -173,7 +172,7 @@ typedef struct BYTE fattrib; /* Attribute */ TCHAR fname[13]; /* Short file name (8.3 format) */ #if _USE_LFN - TCHAR* lfname; /* Pointer to the LFN buffer */ + TCHAR *lfname; /* Pointer to the LFN buffer */ UINT lfsize; /* Size of LFN buffer in TCHAR */ #endif } FILINFO; @@ -181,26 +180,26 @@ typedef struct /* File function return code (FRESULT) */ typedef enum { - FR_OK = 0, /* (0) Succeeded */ - FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ - FR_INT_ERR, /* (2) Assertion failed */ - FR_NOT_READY, /* (3) The physical drive cannot work */ - FR_NO_FILE, /* (4) Could not find the file */ - FR_NO_PATH, /* (5) Could not find the path */ - FR_INVALID_NAME, /* (6) The path name format is invalid */ - FR_DENIED, /* (7) Access denied due to prohibited access or directory full - */ - FR_EXIST, /* (8) Access denied due to prohibited access */ - FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ - FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ - FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ - FR_NOT_ENABLED, /* (12) The volume has no work area */ - FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ - FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ - FR_TIMEOUT, /* (15) Could not get a grant to access the volume within - defined period */ - FR_LOCKED, /* (16) The operation is rejected according to the file sharing - policy */ + FR_OK = 0, /* (0) Succeeded */ + FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ + FR_INT_ERR, /* (2) Assertion failed */ + FR_NOT_READY, /* (3) The physical drive cannot work */ + FR_NO_FILE, /* (4) Could not find the file */ + FR_NO_PATH, /* (5) Could not find the path */ + FR_INVALID_NAME, /* (6) The path name format is invalid */ + FR_DENIED, /* (7) Access denied due to prohibited access or directory full + */ + FR_EXIST, /* (8) Access denied due to prohibited access */ + FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ + FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ + FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ + FR_NOT_ENABLED, /* (12) The volume has no work area */ + FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ + FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ + FR_TIMEOUT, /* (15) Could not get a grant to access the volume within + defined period */ + FR_LOCKED, /* (16) The operation is rejected according to the file sharing + policy */ FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */ FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ @@ -209,52 +208,38 @@ typedef enum { /*--------------------------------------------------------------*/ /* FatFs module application interface */ -FRESULT f_open(FIL* fp, const TCHAR* path, - BYTE mode); /* Open or create a file */ -FRESULT f_close(FIL* fp); /* Close an open file object */ -FRESULT f_read(FIL* fp, void* buff, UINT btr, - UINT* br); /* Read data from a file */ -FRESULT f_write(FIL* fp, const void* buff, UINT btw, - UINT* bw); /* Write data to a file */ -FRESULT f_forward(FIL* fp, UINT (*func)(const BYTE*, UINT), UINT btf, - UINT* bf); /* Forward data to the stream */ -FRESULT f_lseek(FIL* fp, DWORD ofs); /* Move file pointer of a file object */ -FRESULT f_truncate(FIL* fp); /* Truncate file */ -FRESULT f_sync(FIL* fp); /* Flush cached data of a writing file */ -FRESULT f_opendir(DIR* dp, const TCHAR* path); /* Open a directory */ -FRESULT f_closedir(DIR* dp); /* Close an open directory */ -FRESULT f_readdir(DIR* dp, FILINFO* fno); /* Read a directory item */ -FRESULT f_findfirst(DIR* dp, FILINFO* fno, const TCHAR* path, - const TCHAR* pattern); /* Find first file */ -FRESULT f_findnext(DIR* dp, FILINFO* fno); /* Find next file */ -FRESULT f_mkdir(const TCHAR* path); /* Create a sub directory */ -FRESULT f_unlink(const TCHAR* path); /* Delete an existing file or directory */ -FRESULT f_rename(const TCHAR* path_old, - const TCHAR* path_new); /* Rename/Move a file or directory */ -FRESULT f_stat(const TCHAR* path, FILINFO* fno); /* Get file status */ -FRESULT f_chmod(const TCHAR* path, BYTE attr, - BYTE mask); /* Change attribute of the file/dir */ -FRESULT f_utime(const TCHAR* path, - const FILINFO* fno); /* Change times-tamp of the file/dir */ -FRESULT f_chdir(const TCHAR* path); /* Change current directory */ -FRESULT f_chdrive(const TCHAR* path); /* Change current drive */ -FRESULT f_getcwd(TCHAR* buff, UINT len); /* Get current directory */ -FRESULT f_getfree(const TCHAR* path, DWORD* nclst, - FATFS** fatfs); /* Get number of free clusters on the drive */ -FRESULT f_getlabel(const TCHAR* path, TCHAR* label, - DWORD* vsn); /* Get volume label */ -FRESULT f_setlabel(const TCHAR* label); /* Set volume label */ -FRESULT f_mount(FATFS* fs, const TCHAR* path, - BYTE opt); /* Mount/Unmount a logical drive */ -FRESULT f_mkfs(const TCHAR* path, BYTE sfd, - UINT au); /* Create a file system on the volume */ -FRESULT f_fdisk(BYTE pdrv, const DWORD szt[], - void* work); /* Divide a physical drive into some partitions */ -int f_putc(TCHAR c, FIL* fp); /* Put a character to the file */ -int f_puts(const TCHAR* str, FIL* cp); /* Put a string to the file */ -int f_printf(FIL* fp, const TCHAR* str, - ...); /* Put a formatted string to the file */ -TCHAR* f_gets(TCHAR* buff, int len, FIL* fp); /* Get a string from the file */ +FRESULT f_open(FIL *fp, const TCHAR *path, BYTE mode); /* Open or create a file */ +FRESULT f_close(FIL *fp); /* Close an open file object */ +FRESULT f_read(FIL *fp, void *buff, UINT btr, UINT *br); /* Read data from a file */ +FRESULT f_write(FIL *fp, const void *buff, UINT btw, UINT *bw); /* Write data to a file */ +FRESULT f_forward(FIL *fp, UINT (*func)(const BYTE *, UINT), UINT btf, UINT *bf); /* Forward data to the stream */ +FRESULT f_lseek(FIL *fp, DWORD ofs); /* Move file pointer of a file object */ +FRESULT f_truncate(FIL *fp); /* Truncate file */ +FRESULT f_sync(FIL *fp); /* Flush cached data of a writing file */ +FRESULT f_opendir(DIR *dp, const TCHAR *path); /* Open a directory */ +FRESULT f_closedir(DIR *dp); /* Close an open directory */ +FRESULT f_readdir(DIR *dp, FILINFO *fno); /* Read a directory item */ +FRESULT f_findfirst(DIR *dp, FILINFO *fno, const TCHAR *path, const TCHAR *pattern); /* Find first file */ +FRESULT f_findnext(DIR *dp, FILINFO *fno); /* Find next file */ +FRESULT f_mkdir(const TCHAR *path); /* Create a sub directory */ +FRESULT f_unlink(const TCHAR *path); /* Delete an existing file or directory */ +FRESULT f_rename(const TCHAR *path_old, const TCHAR *path_new); /* Rename/Move a file or directory */ +FRESULT f_stat(const TCHAR *path, FILINFO *fno); /* Get file status */ +FRESULT f_chmod(const TCHAR *path, BYTE attr, BYTE mask); /* Change attribute of the file/dir */ +FRESULT f_utime(const TCHAR *path, const FILINFO *fno); /* Change times-tamp of the file/dir */ +FRESULT f_chdir(const TCHAR *path); /* Change current directory */ +FRESULT f_chdrive(const TCHAR *path); /* Change current drive */ +FRESULT f_getcwd(TCHAR *buff, UINT len); /* Get current directory */ +FRESULT f_getfree(const TCHAR *path, DWORD *nclst, FATFS **fatfs); /* Get number of free clusters on the drive */ +FRESULT f_getlabel(const TCHAR *path, TCHAR *label, DWORD *vsn); /* Get volume label */ +FRESULT f_setlabel(const TCHAR *label); /* Set volume label */ +FRESULT f_mount(FATFS *fs, const TCHAR *path, BYTE opt); /* Mount/Unmount a logical drive */ +FRESULT f_mkfs(const TCHAR *path, BYTE sfd, UINT au); /* Create a file system on the volume */ +FRESULT f_fdisk(BYTE pdrv, const DWORD szt[], void *work); /* Divide a physical drive into some partitions */ +int f_putc(TCHAR c, FIL *fp); /* Put a character to the file */ +int f_puts(const TCHAR *str, FIL *cp); /* Put a string to the file */ +int f_printf(FIL *fp, const TCHAR *str, ...); /* Put a formatted string to the file */ +TCHAR *f_gets(TCHAR *buff, int len, FIL *fp); /* Get a string from the file */ #define f_eof(fp) ((int)((fp)->fptr == (fp)->fsize)) #define f_error(fp) ((fp)->err) @@ -276,19 +261,18 @@ DWORD get_fattime(void); #endif /* Unicode support functions */ -#if _USE_LFN /* Unicode - OEM code conversion */ -WCHAR ff_convert(WCHAR chr, - UINT dir); /* OEM-Unicode bidirectional conversion */ -WCHAR ff_wtoupper(WCHAR chr); /* Unicode upper-case conversion */ -#if _USE_LFN == 3 /* Memory functions */ -void* ff_memalloc(UINT msize); /* Allocate memory block */ -void ff_memfree(void* mblock); /* Free memory block */ +#if _USE_LFN /* Unicode - OEM code conversion */ +WCHAR ff_convert(WCHAR chr, UINT dir); /* OEM-Unicode bidirectional conversion */ +WCHAR ff_wtoupper(WCHAR chr); /* Unicode upper-case conversion */ +#if _USE_LFN == 3 /* Memory functions */ +void *ff_memalloc(UINT msize); /* Allocate memory block */ +void ff_memfree(void *mblock); /* Free memory block */ #endif #endif /* Sync functions */ #if _FS_REENTRANT -int ff_cre_syncobj(BYTE vol, _SYNC_t* sobj); /* Create a sync object */ +int ff_cre_syncobj(BYTE vol, _SYNC_t *sobj); /* Create a sync object */ int ff_req_grant(_SYNC_t sobj); /* Lock sync object */ void ff_rel_grant(_SYNC_t sobj); /* Unlock sync object */ int ff_del_syncobj(_SYNC_t sobj); /* Delete a sync object */ @@ -335,25 +319,22 @@ int ff_del_syncobj(_SYNC_t sobj); /* Delete a sync object */ /* Multi-byte word access macros */ #if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ -#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) -#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) -#define ST_WORD(ptr, val) *(WORD*)(BYTE*)(ptr) = (WORD)(val) -#define ST_DWORD(ptr, val) *(DWORD*)(BYTE*)(ptr) = (DWORD)(val) +#define LD_WORD(ptr) (WORD)(*(WORD *)(BYTE *)(ptr)) +#define LD_DWORD(ptr) (DWORD)(*(DWORD *)(BYTE *)(ptr)) +#define ST_WORD(ptr, val) *(WORD *)(BYTE *)(ptr) = (WORD)(val) +#define ST_DWORD(ptr, val) *(DWORD *)(BYTE *)(ptr) = (DWORD)(val) #else /* Use byte-by-byte access to the FAT structure */ -#define LD_WORD(ptr) \ - (WORD)(((WORD) * ((BYTE*)(ptr) + 1) << 8) | (WORD) * (BYTE*)(ptr)) -#define LD_DWORD(ptr) \ - (DWORD)(((DWORD) * ((BYTE*)(ptr) + 3) << 24) | \ - ((DWORD) * ((BYTE*)(ptr) + 2) << 16) | \ - ((WORD) * ((BYTE*)(ptr) + 1) << 8) | *(BYTE*)(ptr)) -#define ST_WORD(ptr, val) \ - *(BYTE*)(ptr) = (BYTE)(val); \ - *((BYTE*)(ptr) + 1) = (BYTE)((WORD)(val) >> 8) -#define ST_DWORD(ptr, val) \ - *(BYTE*)(ptr) = (BYTE)(val); \ - *((BYTE*)(ptr) + 1) = (BYTE)((WORD)(val) >> 8); \ - *((BYTE*)(ptr) + 2) = (BYTE)((DWORD)(val) >> 16); \ - *((BYTE*)(ptr) + 3) = (BYTE)((DWORD)(val) >> 24) +#define LD_WORD(ptr) (WORD)(((WORD) * ((BYTE *)(ptr) + 1) << 8) | (WORD) * (BYTE *)(ptr)) +#define LD_DWORD(ptr) \ + (DWORD)(((DWORD) * ((BYTE *)(ptr) + 3) << 24) | ((DWORD) * ((BYTE *)(ptr) + 2) << 16) | ((WORD) * ((BYTE *)(ptr) + 1) << 8) | *(BYTE *)(ptr)) +#define ST_WORD(ptr, val) \ + *(BYTE *)(ptr) = (BYTE)(val); \ + *((BYTE *)(ptr) + 1) = (BYTE)((WORD)(val) >> 8) +#define ST_DWORD(ptr, val) \ + *(BYTE *)(ptr) = (BYTE)(val); \ + *((BYTE *)(ptr) + 1) = (BYTE)((WORD)(val) >> 8); \ + *((BYTE *)(ptr) + 2) = (BYTE)((DWORD)(val) >> 16); \ + *((BYTE *)(ptr) + 3) = (BYTE)((DWORD)(val) >> 24) #endif #ifdef __cplusplus diff --git a/source/fatfs/sdmmc.c b/source/fatfs/sdmmc.c index d249a57..2c67b45 100644 --- a/source/fatfs/sdmmc.c +++ b/source/fatfs/sdmmc.c @@ -59,12 +59,9 @@ void waitcycles(uint32_t val); //#define DEBUG_SDMMC #ifdef DEBUG_SDMMC -extern uint8_t* topScreen; -extern void DrawHexWithName(unsigned char* screen, const char* str, - unsigned int hex, int x, int y, int color, - int bgcolor); -#define DEBUGPRINT(scr, str, hex, x, y, color, bg) \ - DrawHexWithName(scr, str, hex, x, y, color, bg) +extern uint8_t *topScreen; +extern void DrawHexWithName(unsigned char *screen, const char *str, unsigned int hex, int x, int y, int color, int bgcolor); +#define DEBUGPRINT(scr, str, hex, x, y, color, bg) DrawHexWithName(scr, str, hex, x, y, color, bg) #else #define DEBUGPRINT(...) #endif @@ -80,7 +77,7 @@ extern void DrawHexWithName(unsigned char* screen, const char* str, struct mmcdevice handelNAND; struct mmcdevice handelSD; -mmcdevice* +mmcdevice * getMMCDevice(int drive) { if (drive == 0) @@ -89,13 +86,13 @@ getMMCDevice(int drive) } int -geterror(struct mmcdevice* ctx) +geterror(struct mmcdevice *ctx) { return (ctx->error << 29) >> 31; } void -inittarget(struct mmcdevice* ctx) +inittarget(struct mmcdevice *ctx) { sdmmc_mask16(REG_SDPORTSEL, 0x3, (uint16_t)ctx->devicenumber); setckl(ctx->clk); @@ -107,7 +104,7 @@ inittarget(struct mmcdevice* ctx) } void NO_INLINE -sdmmc_send_command(struct mmcdevice* ctx, uint32_t cmd, uint32_t args) +sdmmc_send_command(struct mmcdevice *ctx, uint32_t cmd, uint32_t args) { bool getSDRESP = (cmd << 15) >> 31; uint16_t flags = (cmd << 15) >> 31; @@ -137,9 +134,9 @@ sdmmc_send_command(struct mmcdevice* ctx, uint32_t cmd, uint32_t args) sdmmc_write16(REG_SDCMD, cmd & 0xFFFF); uint32_t size = ctx->size; - uint16_t* dataPtr = (uint16_t*)ctx->data; + uint16_t *dataPtr = (uint16_t *)ctx->data; #ifdef DATA32_SUPPORT - uint32_t* dataPtr32 = (uint32_t*)ctx->data; + uint32_t *dataPtr32 = (uint32_t *)ctx->data; #endif bool useBuf = (NULL != dataPtr); @@ -233,19 +230,15 @@ sdmmc_send_command(struct mmcdevice* ctx, uint32_t cmd, uint32_t args) sdmmc_write16(REG_SDSTATUS1, 0); if (getSDRESP != 0) { - ctx->ret[0] = - sdmmc_read16(REG_SDRESP0) | (sdmmc_read16(REG_SDRESP1) << 16); - ctx->ret[1] = - sdmmc_read16(REG_SDRESP2) | (sdmmc_read16(REG_SDRESP3) << 16); - ctx->ret[2] = - sdmmc_read16(REG_SDRESP4) | (sdmmc_read16(REG_SDRESP5) << 16); - ctx->ret[3] = - sdmmc_read16(REG_SDRESP6) | (sdmmc_read16(REG_SDRESP7) << 16); + ctx->ret[0] = sdmmc_read16(REG_SDRESP0) | (sdmmc_read16(REG_SDRESP1) << 16); + ctx->ret[1] = sdmmc_read16(REG_SDRESP2) | (sdmmc_read16(REG_SDRESP3) << 16); + ctx->ret[2] = sdmmc_read16(REG_SDRESP4) | (sdmmc_read16(REG_SDRESP5) << 16); + ctx->ret[3] = sdmmc_read16(REG_SDRESP6) | (sdmmc_read16(REG_SDRESP7) << 16); } } int NO_INLINE -sdmmc_sdcard_writesectors(uint32_t sector_no, uint32_t numsectors, uint8_t* in) +sdmmc_sdcard_writesectors(uint32_t sector_no, uint32_t numsectors, uint8_t *in) { if (handelSD.isSDHC == 0) sector_no <<= 9; @@ -263,7 +256,7 @@ sdmmc_sdcard_writesectors(uint32_t sector_no, uint32_t numsectors, uint8_t* in) } int NO_INLINE -sdmmc_sdcard_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t* out) +sdmmc_sdcard_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t *out) { if (handelSD.isSDHC == 0) sector_no <<= 9; @@ -281,7 +274,7 @@ sdmmc_sdcard_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t* out) } int NO_INLINE -sdmmc_nand_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t* out) +sdmmc_nand_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t *out) { if (handelNAND.isSDHC == 0) sector_no <<= 9; @@ -299,8 +292,7 @@ sdmmc_nand_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t* out) return geterror(&handelNAND); } -int NO_INLINE sdmmc_nand_writesectors(uint32_t sector_no, uint32_t numsectors, - uint8_t* in) // experimental +int NO_INLINE sdmmc_nand_writesectors(uint32_t sector_no, uint32_t numsectors, uint8_t *in) // experimental { if (handelNAND.isSDHC == 0) sector_no <<= 9; @@ -319,7 +311,7 @@ int NO_INLINE sdmmc_nand_writesectors(uint32_t sector_no, uint32_t numsectors, } static uint32_t -calcSDSize(uint8_t* csd, int type) +calcSDSize(uint8_t *csd, int type) { uint32_t result = 0; if (type == -1) @@ -389,42 +381,41 @@ InitSD() // sdmmc_write16(REG_SDBLKLEN,0x200); // sdmmc_write16(REG_SDSTOP,0); - *(volatile uint16_t*)0x10006100 &= 0xF7FFu; // SDDATACTL32 - *(volatile uint16_t*)0x10006100 &= 0xEFFFu; // SDDATACTL32 + *(volatile uint16_t *)0x10006100 &= 0xF7FFu; // SDDATACTL32 + *(volatile uint16_t *)0x10006100 &= 0xEFFFu; // SDDATACTL32 #ifdef DATA32_SUPPORT - *(volatile uint16_t*)0x10006100 |= 0x402u; // SDDATACTL32 + *(volatile uint16_t *)0x10006100 |= 0x402u; // SDDATACTL32 #else - *(volatile uint16_t*)0x10006100 |= 0x402u; // SDDATACTL32 + *(volatile uint16_t *)0x10006100 |= 0x402u; // SDDATACTL32 #endif - *(volatile uint16_t*)0x100060D8 = - (*(volatile uint16_t*)0x100060D8 & 0xFFDD) | 2; + *(volatile uint16_t *)0x100060D8 = (*(volatile uint16_t *)0x100060D8 & 0xFFDD) | 2; #ifdef DATA32_SUPPORT - *(volatile uint16_t*)0x10006100 &= 0xFFFFu; // SDDATACTL32 - *(volatile uint16_t*)0x100060D8 &= 0xFFDFu; // SDDATACTL - *(volatile uint16_t*)0x10006104 = 512; // SDBLKLEN32 + *(volatile uint16_t *)0x10006100 &= 0xFFFFu; // SDDATACTL32 + *(volatile uint16_t *)0x100060D8 &= 0xFFDFu; // SDDATACTL + *(volatile uint16_t *)0x10006104 = 512; // SDBLKLEN32 #else - *(volatile uint16_t*)0x10006100 &= 0xFFFDu; // SDDATACTL32 - *(volatile uint16_t*)0x100060D8 &= 0xFFDDu; // SDDATACTL - *(volatile uint16_t*)0x10006104 = 0; // SDBLKLEN32 + *(volatile uint16_t *)0x10006100 &= 0xFFFDu; // SDDATACTL32 + *(volatile uint16_t *)0x100060D8 &= 0xFFDDu; // SDDATACTL + *(volatile uint16_t *)0x10006104 = 0; // SDBLKLEN32 #endif - *(volatile uint16_t*)0x10006108 = 1; // SDBLKCOUNT32 - *(volatile uint16_t*)0x100060E0 &= 0xFFFEu; // SDRESET - *(volatile uint16_t*)0x100060E0 |= 1u; // SDRESET - *(volatile uint16_t*)0x10006020 |= TMIO_MASK_ALL; // SDIR_MASK0 - *(volatile uint16_t*)0x10006022 |= TMIO_MASK_ALL >> 16; // SDIR_MASK1 - *(volatile uint16_t*)0x100060FC |= 0xDBu; // SDCTL_RESERVED7 - *(volatile uint16_t*)0x100060FE |= 0xDBu; // SDCTL_RESERVED8 - *(volatile uint16_t*)0x10006002 &= 0xFFFCu; // SDPORTSEL + *(volatile uint16_t *)0x10006108 = 1; // SDBLKCOUNT32 + *(volatile uint16_t *)0x100060E0 &= 0xFFFEu; // SDRESET + *(volatile uint16_t *)0x100060E0 |= 1u; // SDRESET + *(volatile uint16_t *)0x10006020 |= TMIO_MASK_ALL; // SDIR_MASK0 + *(volatile uint16_t *)0x10006022 |= TMIO_MASK_ALL >> 16; // SDIR_MASK1 + *(volatile uint16_t *)0x100060FC |= 0xDBu; // SDCTL_RESERVED7 + *(volatile uint16_t *)0x100060FE |= 0xDBu; // SDCTL_RESERVED8 + *(volatile uint16_t *)0x10006002 &= 0xFFFCu; // SDPORTSEL #ifdef DATA32_SUPPORT - *(volatile uint16_t*)0x10006024 = 0x20; - *(volatile uint16_t*)0x10006028 = 0x40EE; + *(volatile uint16_t *)0x10006024 = 0x20; + *(volatile uint16_t *)0x10006028 = 0x40EE; #else - *(volatile uint16_t*)0x10006024 = 0x40; // Nintendo sets this to 0x20 - *(volatile uint16_t*)0x10006028 = 0x40EB; // Nintendo sets this to 0x40EE + *(volatile uint16_t *)0x10006024 = 0x40; // Nintendo sets this to 0x20 + *(volatile uint16_t *)0x10006028 = 0x40EB; // Nintendo sets this to 0x40EE #endif - *(volatile uint16_t*)0x10006002 &= 0xFFFCu; ////SDPORTSEL - *(volatile uint16_t*)0x10006026 = 512; // SDBLKLEN - *(volatile uint16_t*)0x10006008 = 0; // SDSTOP + *(volatile uint16_t *)0x10006002 &= 0xFFFCu; ////SDPORTSEL + *(volatile uint16_t *)0x10006026 = 512; // SDBLKLEN + *(volatile uint16_t *)0x10006008 = 0; // SDSTOP inittarget(&handelSD); } @@ -435,51 +426,42 @@ Nand_Init() inittarget(&handelNAND); waitcycles(0xF000); - DEBUGPRINT(topScreen, "0x00000 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x00000 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0, 0); - DEBUGPRINT(topScreen, "0x10701 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10701 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); do { do { sdmmc_send_command(&handelNAND, 0x10701, 0x100000); - DEBUGPRINT(topScreen, "error ", handelNAND.error, 10, 20 + 17 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); - DEBUGPRINT(topScreen, "ret: ", handelNAND.ret[0], 10, 20 + 18 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); - DEBUGPRINT(topScreen, "test ", 3, 10, 20 + 19 * 8, RGB(40, 40, 40), - RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "error ", handelNAND.error, 10, 20 + 17 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "ret: ", handelNAND.ret[0], 10, 20 + 18 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "test ", 3, 10, 20 + 19 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); } while (!(handelNAND.error & 1)); } while ((handelNAND.ret[0] & 0x80000000) == 0); - DEBUGPRINT(topScreen, "0x10602 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10602 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0x10602, 0x0); if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10403 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10403 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0x10403, handelNAND.initarg << 0x10); if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10609 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10609 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0x10609, handelNAND.initarg << 0x10); if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10407 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10407 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); - handelNAND.total_size = calcSDSize((uint8_t*)&handelNAND.ret[0], 0); + handelNAND.total_size = calcSDSize((uint8_t *)&handelNAND.ret[0], 0); handelNAND.clk = 1; setckl(1); @@ -487,8 +469,7 @@ Nand_Init() if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10506 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10506 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); handelNAND.SDOPT = 1; @@ -496,22 +477,19 @@ Nand_Init() if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10506 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10506 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0x10506, 0x3B90100); if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x1040D ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x1040D ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0x1040D, handelNAND.initarg << 0x10); if ((handelNAND.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10410 ", handelNAND.error, 10, 20 + 13 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10410 ", handelNAND.error, 10, 20 + 13 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelNAND, 0x10410, 0x200); if ((handelNAND.error & 0x4)) @@ -531,26 +509,20 @@ SD_Init() // waitcycles(0x3E8); // waitcycles(0xF000); - waitcycles( - 1u << 19); // Card needs a little bit of time to be detected, it seems - if (!(*((volatile uint16_t*)0x1000601c) & TMIO_STAT0_SIGSTATE)) + waitcycles(1u << 19); // Card needs a little bit of time to be detected, it seems + if (!(*((volatile uint16_t *)0x1000601c) & TMIO_STAT0_SIGSTATE)) return -1; // check if card inserted - DEBUGPRINT(topScreen, "0x00000 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x00000 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0, 0); - DEBUGPRINT(topScreen, "0x10408 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10408 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10408, 0x1AA); // uint32_t temp = (handelSD.ret[0] == 0x1AA) << 0x1E; uint32_t temp = (handelSD.error & 0x1) << 0x1E; - DEBUGPRINT(topScreen, "0x10769 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); - DEBUGPRINT(topScreen, "sd ret: ", handelSD.ret[0], 10, 20 + 15 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); - DEBUGPRINT(topScreen, "temp: ", temp, 10, 20 + 16 * 8, RGB(40, 40, 40), - RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10769 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "sd ret: ", handelSD.ret[0], 10, 20 + 15 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "temp: ", temp, 10, 20 + 16 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); // int count = 0; uint32_t temp2 = 0; @@ -588,63 +560,55 @@ SD_Init() handelSD.isSDHC = temp2; // handelSD.isSDHC = (handelSD.ret[0] & 0x40000000); - DEBUGPRINT(topScreen, "0x10602 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10602 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10602, 0); if ((handelSD.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10403 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10403 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10403, 0); if ((handelSD.error & 0x4)) return -1; handelSD.initarg = handelSD.ret[0] >> 0x10; - DEBUGPRINT(topScreen, "0x10609 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10609 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10609, handelSD.initarg << 0x10); if ((handelSD.error & 0x4)) return -1; - handelSD.total_size = calcSDSize((uint8_t*)&handelSD.ret[0], -1); + handelSD.total_size = calcSDSize((uint8_t *)&handelSD.ret[0], -1); handelSD.clk = 1; setckl(1); - DEBUGPRINT(topScreen, "0x10507 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10507 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10507, handelSD.initarg << 0x10); if ((handelSD.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10437 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10437 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10437, handelSD.initarg << 0x10); if ((handelSD.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10446 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10446 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); handelSD.SDOPT = 1; sdmmc_send_command(&handelSD, 0x10446, 0x2); if ((handelSD.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x1040D ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x1040D ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x1040D, handelSD.initarg << 0x10); if ((handelSD.error & 0x4)) return -1; - DEBUGPRINT(topScreen, "0x10410 ", handelSD.error, 10, 20 + 14 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "0x10410 ", handelSD.error, 10, 20 + 14 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); sdmmc_send_command(&handelSD, 0x10410, 0x200); if ((handelSD.error & 0x4)) @@ -657,26 +621,23 @@ SD_Init() int sdmmc_sdcard_init() { - DEBUGPRINT(topScreen, "sdmmc_sdcard_init ", handelSD.error, 10, 20 + 2 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "sdmmc_sdcard_init ", handelSD.error, 10, 20 + 2 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); InitSD(); // SD_Init2(); // Nand_Init(); Nand_Init(); - DEBUGPRINT(topScreen, "nand_res ", nand_res, 10, 20 + 3 * 8, - RGB(40, 40, 40), RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "nand_res ", nand_res, 10, 20 + 3 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); if (SD_Init() != 0) return FALSE; - DEBUGPRINT(topScreen, "sd_res ", sd_res, 10, 20 + 4 * 8, RGB(40, 40, 40), - RGB(208, 208, 208)); + DEBUGPRINT(topScreen, "sd_res ", sd_res, 10, 20 + 4 * 8, RGB(40, 40, 40), RGB(208, 208, 208)); return TRUE; } int -sdmmc_get_cid(int isNand, uint32_t* info) +sdmmc_get_cid(int isNand, uint32_t *info) { - struct mmcdevice* device; + struct mmcdevice *device; if (isNand) device = &handelNAND; else diff --git a/source/fatfs/sdmmc.h b/source/fatfs/sdmmc.h index 7a1dc5c..3b7400d 100644 --- a/source/fatfs/sdmmc.h +++ b/source/fatfs/sdmmc.h @@ -96,9 +96,8 @@ #define TMIO_MASK_ALL 0x837f031d -#define TMIO_MASK_GW \ - (TMIO_STAT1_ILL_ACCESS | TMIO_STAT1_CMDTIMEOUT | TMIO_STAT1_TXUNDERRUN | \ - TMIO_STAT1_RXOVERFLOW | TMIO_STAT1_DATATIMEOUT | TMIO_STAT1_STOPBIT_ERR | \ +#define TMIO_MASK_GW \ + (TMIO_STAT1_ILL_ACCESS | TMIO_STAT1_CMDTIMEOUT | TMIO_STAT1_TXUNDERRUN | TMIO_STAT1_RXOVERFLOW | TMIO_STAT1_DATATIMEOUT | TMIO_STAT1_STOPBIT_ERR | \ TMIO_STAT1_CRCFAIL | TMIO_STAT1_CMD_IDX_ERR) #define TMIO_MASK_READOP (TMIO_STAT1_RXRDY | TMIO_STAT1_DATAEND) @@ -110,7 +109,7 @@ extern "C" { typedef struct mmcdevice { - uint8_t* data; + uint8_t *data; uint32_t size; uint32_t error; uint16_t stat0; @@ -126,21 +125,17 @@ typedef struct mmcdevice } mmcdevice; int sdmmc_sdcard_init(); -int sdmmc_sdcard_readsector(uint32_t sector_no, uint8_t* out); -int sdmmc_sdcard_readsectors(uint32_t sector_no, uint32_t numsectors, - uint8_t* out); -int sdmmc_sdcard_writesector(uint32_t sector_no, uint8_t* in); -int sdmmc_sdcard_writesectors(uint32_t sector_no, uint32_t numsectors, - uint8_t* in); +int sdmmc_sdcard_readsector(uint32_t sector_no, uint8_t *out); +int sdmmc_sdcard_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t *out); +int sdmmc_sdcard_writesector(uint32_t sector_no, uint8_t *in); +int sdmmc_sdcard_writesectors(uint32_t sector_no, uint32_t numsectors, uint8_t *in); -int sdmmc_nand_readsectors(uint32_t sector_no, uint32_t numsectors, - uint8_t* out); -int sdmmc_nand_writesectors(uint32_t sector_no, uint32_t numsectors, - uint8_t* in); +int sdmmc_nand_readsectors(uint32_t sector_no, uint32_t numsectors, uint8_t *out); +int sdmmc_nand_writesectors(uint32_t sector_no, uint32_t numsectors, uint8_t *in); -int sdmmc_get_cid(int isNand, uint32_t* info); +int sdmmc_get_cid(int isNand, uint32_t *info); -mmcdevice* getMMCDevice(int drive); +mmcdevice *getMMCDevice(int drive); void InitSD(); int Nand_Init(); @@ -155,7 +150,7 @@ static inline uint16_t sdmmc_read16(uint16_t reg) { //--------------------------------------------------------------------------------- - return *(volatile uint16_t*)(SDMMC_BASE + reg); + return *(volatile uint16_t *)(SDMMC_BASE + reg); } //--------------------------------------------------------------------------------- @@ -163,7 +158,7 @@ static inline void sdmmc_write16(uint16_t reg, uint16_t val) { //--------------------------------------------------------------------------------- - *(volatile uint16_t*)(SDMMC_BASE + reg) = val; + *(volatile uint16_t *)(SDMMC_BASE + reg) = val; } //--------------------------------------------------------------------------------- @@ -171,7 +166,7 @@ static inline uint32_t sdmmc_read32(uint16_t reg) { //--------------------------------------------------------------------------------- - return *(volatile uint32_t*)(SDMMC_BASE + reg); + return *(volatile uint32_t *)(SDMMC_BASE + reg); } //--------------------------------------------------------------------------------- @@ -179,7 +174,7 @@ static inline void sdmmc_write32(uint16_t reg, uint32_t val) { //--------------------------------------------------------------------------------- - *(volatile uint32_t*)(SDMMC_BASE + reg) = val; + *(volatile uint32_t *)(SDMMC_BASE + reg) = val; } //--------------------------------------------------------------------------------- diff --git a/source/firm/crypto.c b/source/firm/crypto.c index 2451287..67d8e86 100644 --- a/source/firm/crypto.c +++ b/source/firm/crypto.c @@ -7,55 +7,54 @@ /* original version by megazig */ #ifndef __thumb__ -#define BSWAP32(x) \ - { \ - __asm__("eor r1, %1, %1, ror #16\n\t" \ - "bic r1, r1, #0xFF0000\n\t" \ - "mov %0, %1, ror #8\n\t" \ - "eor %0, %0, r1, lsr #8\n\t" \ - : "=r"(x) \ - : "0"(x) \ - : "r1"); \ +#define BSWAP32(x) \ + { \ + __asm__("eor r1, %1, %1, ror #16\n\t" \ + "bic r1, r1, #0xFF0000\n\t" \ + "mov %0, %1, ror #8\n\t" \ + "eor %0, %0, r1, lsr #8\n\t" \ + : "=r"(x) \ + : "0"(x) \ + : "r1"); \ }; -#define ADD_u128_uint32_t(u128_0, u128_1, u128_2, u128_3, uint32_t_0) \ - { \ - __asm__("adds %0, %4\n\t" \ - "addcss %1, %1, #1\n\t" \ - "addcss %2, %2, #1\n\t" \ - "addcs %3, %3, #1\n\t" \ - : "+r"(u128_0), "+r"(u128_1), "+r"(u128_2), "+r"(u128_3) \ - : "r"(uint32_t_0) \ - : "cc"); \ +#define ADD_u128_uint32_t(u128_0, u128_1, u128_2, u128_3, uint32_t_0) \ + { \ + __asm__("adds %0, %4\n\t" \ + "addcss %1, %1, #1\n\t" \ + "addcss %2, %2, #1\n\t" \ + "addcs %3, %3, #1\n\t" \ + : "+r"(u128_0), "+r"(u128_1), "+r"(u128_2), "+r"(u128_3) \ + : "r"(uint32_t_0) \ + : "cc"); \ } #else -#define BSWAP32(x) \ - { \ - x = __builtin_bswap32(x); \ +#define BSWAP32(x) \ + { \ + x = __builtin_bswap32(x); \ } -#define ADD_u128_uint32_t(u128_0, u128_1, u128_2, u128_3, uint32_t_0) \ - { \ - __asm__("mov r4, #0\n\t" \ - "add %0, %0, %4\n\t" \ - "adc %1, %1, r4\n\t" \ - "adc %2, %2, r4\n\t" \ - "adc %3, %3, r4\n\t" \ - : "+r"(u128_0), "+r"(u128_1), "+r"(u128_2), "+r"(u128_3) \ - : "r"(uint32_t_0) \ - : "cc", "r4"); \ +#define ADD_u128_uint32_t(u128_0, u128_1, u128_2, u128_3, uint32_t_0) \ + { \ + __asm__("mov r4, #0\n\t" \ + "add %0, %0, %4\n\t" \ + "adc %1, %1, r4\n\t" \ + "adc %2, %2, r4\n\t" \ + "adc %3, %3, r4\n\t" \ + : "+r"(u128_0), "+r"(u128_1), "+r"(u128_2), "+r"(u128_3) \ + : "r"(uint32_t_0) \ + : "cc", "r4"); \ } #endif /*__thumb__*/ void -aes_setkey(uint8_t keyslot, const void* key, uint32_t keyType, uint32_t mode) +aes_setkey(uint8_t keyslot, const void *key, uint32_t keyType, uint32_t mode) { if (keyslot <= 0x03) return; // Ignore TWL keys for now - uint32_t* key32 = (uint32_t*)key; - *REG_AESCNT = - (*REG_AESCNT & ~(AES_CNT_INPUT_ENDIAN | AES_CNT_INPUT_ORDER)) | mode; + uint32_t *key32 = (uint32_t *)key; + *REG_AESCNT = (*REG_AESCNT & ~(AES_CNT_INPUT_ENDIAN | AES_CNT_INPUT_ORDER)) | mode; *REG_AESKEYCNT = (*REG_AESKEYCNT >> 6 << 6) | keyslot | AES_KEYCNT_WRITE; REG_AESKEYFIFO[keyType] = key32[0]; @@ -75,11 +74,10 @@ aes_use_keyslot(uint8_t keyslot) } void -aes_setiv(const void* iv, uint32_t mode) +aes_setiv(const void *iv, uint32_t mode) { - const uint32_t* iv32 = (const uint32_t*)iv; - *REG_AESCNT = - (*REG_AESCNT & ~(AES_CNT_INPUT_ENDIAN | AES_CNT_INPUT_ORDER)) | mode; + const uint32_t *iv32 = (const uint32_t *)iv; + *REG_AESCNT = (*REG_AESCNT & ~(AES_CNT_INPUT_ENDIAN | AES_CNT_INPUT_ORDER)) | mode; // Word order for IV can't be changed in REG_AESCNT and always default to // reversed @@ -97,9 +95,9 @@ aes_setiv(const void* iv, uint32_t mode) } void -aes_advctr(void* ctr, uint32_t val, uint32_t mode) +aes_advctr(void *ctr, uint32_t val, uint32_t mode) { - uint32_t* ctr32 = (uint32_t*)ctr; + uint32_t *ctr32 = (uint32_t *)ctr; int i; if (mode & AES_INPUT_BE) { @@ -120,9 +118,9 @@ aes_advctr(void* ctr, uint32_t val, uint32_t mode) } void -aes_change_ctrmode(void* ctr, uint32_t fromMode, uint32_t toMode) +aes_change_ctrmode(void *ctr, uint32_t fromMode, uint32_t toMode) { - uint32_t* ctr32 = (uint32_t*)ctr; + uint32_t *ctr32 = (uint32_t *)ctr; int i; if ((fromMode ^ toMode) & AES_CNT_INPUT_ENDIAN) { for (i = 0; i < 4; ++i) @@ -141,20 +139,19 @@ aes_change_ctrmode(void* ctr, uint32_t fromMode, uint32_t toMode) } void -aes_batch(void* dst, const void* src, uint32_t blockCount) +aes_batch(void *dst, const void *src, uint32_t blockCount) { *REG_AESBLKCNT = blockCount << 16; *REG_AESCNT |= AES_CNT_START; - const uint32_t* src32 = (const uint32_t*)src; - uint32_t* dst32 = (uint32_t*)dst; + const uint32_t *src32 = (const uint32_t *)src; + uint32_t *dst32 = (uint32_t *)dst; uint32_t wbc = blockCount; uint32_t rbc = blockCount; while (rbc) { - if (wbc && - ((*REG_AESCNT & 0x1F) <= 0xC)) // There's space for at least 4 ints + if (wbc && ((*REG_AESCNT & 0x1F) <= 0xC)) // There's space for at least 4 ints { *REG_AESWRFIFO = *src32++; *REG_AESWRFIFO = *src32++; @@ -163,8 +160,7 @@ aes_batch(void* dst, const void* src, uint32_t blockCount) wbc--; } - if (rbc && ((*REG_AESCNT & (0x1F << 0x5)) >= - (0x4 << 0x5))) // At least 4 ints available for read + if (rbc && ((*REG_AESCNT & (0x1F << 0x5)) >= (0x4 << 0x5))) // At least 4 ints available for read { *dst32++ = *REG_AESRDFIFO; *dst32++ = *REG_AESRDFIFO; @@ -178,21 +174,17 @@ aes_batch(void* dst, const void* src, uint32_t blockCount) inline void aes_setmode(uint32_t mode) { - *REG_AESCNT = mode | AES_CNT_INPUT_ORDER | AES_CNT_OUTPUT_ORDER | - AES_CNT_INPUT_ENDIAN | AES_CNT_OUTPUT_ENDIAN | - AES_CNT_FLUSH_READ | AES_CNT_FLUSH_WRITE; + *REG_AESCNT = mode | AES_CNT_INPUT_ORDER | AES_CNT_OUTPUT_ORDER | AES_CNT_INPUT_ENDIAN | AES_CNT_OUTPUT_ENDIAN | AES_CNT_FLUSH_READ | AES_CNT_FLUSH_WRITE; } void -aes(void* dst, const void* src, uint32_t blockCount, void* iv, uint32_t mode, - uint32_t ivMode) +aes(void *dst, const void *src, uint32_t blockCount, void *iv, uint32_t mode, uint32_t ivMode) { aes_setmode(mode); uint32_t blocks; while (blockCount != 0) { - if ((mode & AES_ALL_MODES) != AES_ECB_ENCRYPT_MODE && - (mode & AES_ALL_MODES) != AES_ECB_DECRYPT_MODE) + if ((mode & AES_ALL_MODES) != AES_ECB_ENCRYPT_MODE && (mode & AES_ALL_MODES) != AES_ECB_DECRYPT_MODE) aes_setiv(iv, ivMode); blocks = (blockCount >= 0xFFFF) ? 0xFFFF : blockCount; @@ -223,10 +215,10 @@ aes(void* dst, const void* src, uint32_t blockCount, void* iv, uint32_t mode, } void -ncch_getctr(const ncch_h* ncch, uint8_t* ctr, uint8_t type) +ncch_getctr(const ncch_h *ncch, uint8_t *ctr, uint8_t type) { uint32_t version = ncch->version; - const uint8_t* partitionID = ncch->partitionID; + const uint8_t *partitionID = ncch->partitionID; int i; for (i = 0; i < 16; i++) @@ -260,12 +252,12 @@ sha_wait_idle() } void -sha(void* res, const void* src, uint32_t size, uint32_t mode) +sha(void *res, const void *src, uint32_t size, uint32_t mode) { sha_wait_idle(); *REG_SHA_CNT = mode | SHA_CNT_OUTPUT_ENDIAN | SHA_NORMAL_ROUND; - const uint32_t* src32 = (const uint32_t*)src; + const uint32_t *src32 = (const uint32_t *)src; int i; while (size >= 0x40) { sha_wait_idle(); @@ -280,7 +272,7 @@ sha(void* res, const void* src, uint32_t size, uint32_t mode) } sha_wait_idle(); - memcpy((void*)REG_SHA_INFIFO, src32, size); + memcpy((void *)REG_SHA_INFIFO, src32, size); *REG_SHA_CNT = (*REG_SHA_CNT & ~SHA_NORMAL_ROUND) | SHA_FINAL_ROUND; @@ -294,7 +286,7 @@ sha(void* res, const void* src, uint32_t size, uint32_t mode) else if (mode == SHA_1_MODE) hashSize = SHA_1_HASH_SIZE; - memcpy(res, (void*)REG_SHA_HASH, hashSize); + memcpy(res, (void *)REG_SHA_HASH, hashSize); } void @@ -311,19 +303,18 @@ rsa_use_keyslot(uint32_t keyslot) } void -rsa_setkey(uint32_t keyslot, const void* mod, const void* exp, uint32_t mode) +rsa_setkey(uint32_t keyslot, const void *mod, const void *exp, uint32_t mode) { rsa_wait_idle(); - *REG_RSA_CNT = (*REG_RSA_CNT & ~RSA_CNT_KEYSLOTS) | (keyslot << 4) | - RSA_IO_BE | RSA_IO_NORMAL; + *REG_RSA_CNT = (*REG_RSA_CNT & ~RSA_CNT_KEYSLOTS) | (keyslot << 4) | RSA_IO_BE | RSA_IO_NORMAL; uint32_t size = mode * 4; - volatile uint32_t* keyslotCnt = REG_RSA_SLOT0 + (keyslot << 4); + volatile uint32_t *keyslotCnt = REG_RSA_SLOT0 + (keyslot << 4); keyslotCnt[0] &= ~(RSA_SLOTCNT_KEY_SET | RSA_SLOTCNT_WPROTECT); keyslotCnt[1] = mode; - memcpy((void*)REG_RSA_MOD_END - size, mod, size); + memcpy((void *)REG_RSA_MOD_END - size, mod, size); if (exp == NULL) { size -= 4; @@ -333,7 +324,7 @@ rsa_setkey(uint32_t keyslot, const void* mod, const void* exp, uint32_t mode) } *REG_RSA_EXPFIFO = 0x01000100; // 0x00010001 byteswapped } else { - const uint32_t* exp32 = (const uint32_t*)exp; + const uint32_t *exp32 = (const uint32_t *)exp; while (size) { *REG_RSA_EXPFIFO = *exp32++; size -= 4; @@ -348,7 +339,7 @@ rsa_iskeyset(uint32_t keyslot) } void -rsa(void* dst, const void* src, uint32_t size) +rsa(void *dst, const void *src, uint32_t size) { uint32_t keyslot = (*REG_RSA_CNT & RSA_CNT_KEYSLOTS) >> 4; if (rsa_iskeyset(keyslot) == 0) @@ -360,18 +351,18 @@ rsa(void* dst, const void* src, uint32_t size) // Pad the message with zeroes so that it's a multiple of 8 // and write the message with the end aligned with the register uint32_t padSize = ((size + 7) & ~7) - size; - memset((void*)REG_RSA_TXT_END - (size + padSize), 0, padSize); - memcpy((void*)REG_RSA_TXT_END - size, src, size); + memset((void *)REG_RSA_TXT_END - (size + padSize), 0, padSize); + memcpy((void *)REG_RSA_TXT_END - size, src, size); // Start *REG_RSA_CNT |= RSA_CNT_START; rsa_wait_idle(); - memcpy(dst, (void*)REG_RSA_TXT_END - size, size); + memcpy(dst, (void *)REG_RSA_TXT_END - size, size); } int -rsa_verify(const void* data, uint32_t size, const void* sig, uint32_t mode) +rsa_verify(const void *data, uint32_t size, const void *sig, uint32_t mode) { uint8_t dataHash[SHA_256_HASH_SIZE]; sha(dataHash, data, size, SHA_256_MODE); @@ -381,6 +372,5 @@ rsa_verify(const void* data, uint32_t size, const void* sig, uint32_t mode) uint32_t sigSize = mode * 4; rsa(decSig, sig, sigSize); - return memcmp(dataHash, decSig + (sigSize - SHA_256_HASH_SIZE), - SHA_256_HASH_SIZE) == 0; + return memcmp(dataHash, decSig + (sigSize - SHA_256_HASH_SIZE), SHA_256_HASH_SIZE) == 0; } diff --git a/source/firm/crypto.h b/source/firm/crypto.h index e4ea043..baa33f6 100644 --- a/source/firm/crypto.h +++ b/source/firm/crypto.h @@ -7,17 +7,17 @@ #include "headers.h" /**************************AES****************************/ -#define REG_AESCNT ((volatile uint32_t*)0x10009000) -#define REG_AESBLKCNT ((volatile uint32_t*)0x10009004) -#define REG_AESWRFIFO ((volatile uint32_t*)0x10009008) -#define REG_AESRDFIFO ((volatile uint32_t*)0x1000900C) -#define REG_AESKEYSEL ((volatile uint8_t*)0x10009010) -#define REG_AESKEYCNT ((volatile uint8_t*)0x10009011) -#define REG_AESCTR ((volatile uint32_t*)0x10009020) - -#define REG_AESKEYFIFO ((volatile uint32_t*)0x10009100) -#define REG_AESKEYXFIFO ((volatile uint32_t*)0x10009104) -#define REG_AESKEYYFIFO ((volatile uint32_t*)0x10009108) +#define REG_AESCNT ((volatile uint32_t *)0x10009000) +#define REG_AESBLKCNT ((volatile uint32_t *)0x10009004) +#define REG_AESWRFIFO ((volatile uint32_t *)0x10009008) +#define REG_AESRDFIFO ((volatile uint32_t *)0x1000900C) +#define REG_AESKEYSEL ((volatile uint8_t *)0x10009010) +#define REG_AESKEYCNT ((volatile uint8_t *)0x10009011) +#define REG_AESCTR ((volatile uint32_t *)0x10009020) + +#define REG_AESKEYFIFO ((volatile uint32_t *)0x10009100) +#define REG_AESKEYXFIFO ((volatile uint32_t *)0x10009104) +#define REG_AESKEYYFIFO ((volatile uint32_t *)0x10009108) #define AES_CCM_DECRYPT_MODE (0u << 27) #define AES_CCM_ENCRYPT_MODE (1u << 27) @@ -52,10 +52,10 @@ #define AES_KEYY 2 /**************************SHA****************************/ -#define REG_SHA_CNT ((volatile uint32_t*)0x1000A000) -#define REG_SHA_BLKCNT ((volatile uint32_t*)0x1000A004) -#define REG_SHA_HASH ((volatile uint32_t*)0x1000A040) -#define REG_SHA_INFIFO ((volatile uint32_t*)0x1000A080) +#define REG_SHA_CNT ((volatile uint32_t *)0x1000A000) +#define REG_SHA_BLKCNT ((volatile uint32_t *)0x1000A004) +#define REG_SHA_HASH ((volatile uint32_t *)0x1000A040) +#define REG_SHA_INFIFO ((volatile uint32_t *)0x1000A080) #define SHA_CNT_STATE 0x00000003 #define SHA_CNT_UNK2 0x00000004 @@ -80,14 +80,14 @@ #define SHA_1_HASH_SIZE (160 / 8) /**************************RSA****************************/ -#define REG_RSA_CNT ((volatile uint32_t*)0x1000B000) -#define REG_RSA_SLOT0 ((volatile uint32_t*)0x1000B100) -#define REG_RSA_SLOT1 ((volatile uint32_t*)0x1000B110) -#define REG_RSA_SLOT2 ((volatile uint32_t*)0x1000B120) -#define REG_RSA_SLOT3 ((volatile uint32_t*)0x1000B130) -#define REG_RSA_EXPFIFO ((volatile uint32_t*)0x1000B200) -#define REG_RSA_MOD_END ((volatile uint32_t*)0x1000B500) -#define REG_RSA_TXT_END ((volatile uint32_t*)0x1000B900) +#define REG_RSA_CNT ((volatile uint32_t *)0x1000B000) +#define REG_RSA_SLOT0 ((volatile uint32_t *)0x1000B100) +#define REG_RSA_SLOT1 ((volatile uint32_t *)0x1000B110) +#define REG_RSA_SLOT2 ((volatile uint32_t *)0x1000B120) +#define REG_RSA_SLOT3 ((volatile uint32_t *)0x1000B130) +#define REG_RSA_EXPFIFO ((volatile uint32_t *)0x1000B200) +#define REG_RSA_MOD_END ((volatile uint32_t *)0x1000B500) +#define REG_RSA_TXT_END ((volatile uint32_t *)0x1000B900) #define RSA_CNT_START 0x00000001 #define RSA_CNT_KEYSLOTS 0x000000F0 @@ -107,26 +107,23 @@ #define RSA_1024_MODE 0x20 #define RSA_2048_MODE 0x40 -void aes_setkey(uint8_t keyslot, const void* key, uint32_t keyType, - uint32_t mode); +void aes_setkey(uint8_t keyslot, const void *key, uint32_t keyType, uint32_t mode); void aes_use_keyslot(uint8_t keyslot); -void aes(void* dst, const void* src, uint32_t blockCount, void* iv, - uint32_t mode, uint32_t ivMode); +void aes(void *dst, const void *src, uint32_t blockCount, void *iv, uint32_t mode, uint32_t ivMode); -void aes_setiv(const void* iv, uint32_t mode); -void aes_advctr(void* ctr, uint32_t val, uint32_t mode); -void aes_change_ctrmode(void* ctr, uint32_t fromMode, uint32_t toMode); +void aes_setiv(const void *iv, uint32_t mode); +void aes_advctr(void *ctr, uint32_t val, uint32_t mode); +void aes_change_ctrmode(void *ctr, uint32_t fromMode, uint32_t toMode); -void aes_batch(void* dst, const void* src, uint32_t blockCount); +void aes_batch(void *dst, const void *src, uint32_t blockCount); -void sha(void* res, const void* src, uint32_t size, uint32_t mode); +void sha(void *res, const void *src, uint32_t size, uint32_t mode); -void rsa_setkey(uint32_t keyslot, const void* mod, const void* exp, - uint32_t mode); +void rsa_setkey(uint32_t keyslot, const void *mod, const void *exp, uint32_t mode); void rsa_use_keyslot(uint32_t keyslot); -int rsa_verify(const void* data, uint32_t size, const void* sig, uint32_t mode); +int rsa_verify(const void *data, uint32_t size, const void *sig, uint32_t mode); typedef enum { NCCHTYPE_EXHEADER = 1, @@ -134,6 +131,6 @@ typedef enum { NCCHTYPE_ROMFS = 3, } ctr_ncchtypes; -void ncch_getctr(const ncch_h* ncch, uint8_t* ctr, uint8_t type); +void ncch_getctr(const ncch_h *ncch, uint8_t *ctr, uint8_t type); #endif diff --git a/source/firm/fcram.c b/source/firm/fcram.c index 61ea587..6ab1f67 100644 --- a/source/firm/fcram.c +++ b/source/firm/fcram.c @@ -1,3 +1,3 @@ #include "fcram.h" -void* fcram_temp = (void*)0x23000000; +void *fcram_temp = (void *)0x23000000; diff --git a/source/firm/fcram.h b/source/firm/fcram.h index a91b608..e8ac835 100644 --- a/source/firm/fcram.h +++ b/source/firm/fcram.h @@ -8,7 +8,7 @@ #include "../std/unused.h" -extern void* fcram_temp; +extern void *fcram_temp; // Space between most of the locations #define FCRAM_SPACING 0x100000 diff --git a/source/firm/firm.c b/source/firm/firm.c index d6c6950..286437e 100644 --- a/source/firm/firm.c +++ b/source/firm/firm.c @@ -5,24 +5,24 @@ #include "../common.h" -firm_h* firm_loc = (firm_h*)FCRAM_FIRM_LOC; +firm_h *firm_loc = (firm_h *)FCRAM_FIRM_LOC; static uint32_t firm_size = FCRAM_SPACING; firm_section_h firm_proc9; -exefs_h* firm_p9_exefs; +exefs_h *firm_p9_exefs; -firm_h* twl_firm_loc = (firm_h*)FCRAM_TWL_FIRM_LOC; +firm_h *twl_firm_loc = (firm_h *)FCRAM_TWL_FIRM_LOC; static uint32_t twl_firm_size = FCRAM_SPACING * 2; firm_section_h twl_firm_proc9; -exefs_h* twl_firm_p9_exefs; +exefs_h *twl_firm_p9_exefs; -firm_h* agb_firm_loc = (firm_h*)FCRAM_AGB_FIRM_LOC; +firm_h *agb_firm_loc = (firm_h *)FCRAM_AGB_FIRM_LOC; static uint32_t agb_firm_size = FCRAM_SPACING; firm_section_h agb_firm_proc9; -exefs_h* agb_firm_p9_exefs; +exefs_h *agb_firm_p9_exefs; static int update_96_keys = 0; -static volatile uint32_t* const a11_entry = (volatile uint32_t*)0x1FFFFFF8; +static volatile uint32_t *const a11_entry = (volatile uint32_t *)0x1FFFFFF8; void slot0x11key96_init() @@ -30,8 +30,7 @@ slot0x11key96_init() // 9.6 crypto may need us to get the key from somewhere else. // Unless the console already has the key initialized, that is. uint8_t key[AES_BLOCK_SIZE]; - if (read_file(key, PATH_SLOT0X11KEY96, AES_BLOCK_SIZE) || - read_file(key, PATH_ALT_SLOT0X11KEY96, AES_BLOCK_SIZE)) { + if (read_file(key, PATH_SLOT0X11KEY96, AES_BLOCK_SIZE) || read_file(key, PATH_ALT_SLOT0X11KEY96, AES_BLOCK_SIZE)) { // Read key successfully. aes_setkey(0x11, key, AES_KEYNORMAL, AES_INPUT_BE | AES_INPUT_NORMAL); @@ -45,7 +44,7 @@ slot0x11key96_init() } int -decrypt_firm_title(firm_h* dest, ncch_h* ncch, uint32_t* size, void* key) +decrypt_firm_title(firm_h *dest, ncch_h *ncch, uint32_t *size, void *key) { uint8_t firm_iv[16] = { 0 }; uint8_t exefs_key[16] = { 0 }; @@ -54,8 +53,7 @@ decrypt_firm_title(firm_h* dest, ncch_h* ncch, uint32_t* size, void* key) fprintf(BOTTOM_SCREEN, "n"); aes_setkey(0x16, key, AES_KEYNORMAL, AES_INPUT_BE | AES_INPUT_NORMAL); aes_use_keyslot(0x16); - aes(ncch, ncch, *size / AES_BLOCK_SIZE, firm_iv, AES_CBC_DECRYPT_MODE, - AES_INPUT_BE | AES_INPUT_NORMAL); + aes(ncch, ncch, *size / AES_BLOCK_SIZE, firm_iv, AES_CBC_DECRYPT_MODE, AES_INPUT_BE | AES_INPUT_NORMAL); if (ncch->magic != NCCH_MAGIC) return 1; @@ -64,19 +62,18 @@ decrypt_firm_title(firm_h* dest, ncch_h* ncch, uint32_t* size, void* key) ncch_getctr(ncch, exefs_iv, NCCHTYPE_EXEFS); // Get the exefs offset and size from the NCCH - exefs_h* exefs = (exefs_h*)((void*)ncch + ncch->exeFSOffset * MEDIA_UNITS); + exefs_h *exefs = (exefs_h *)((void *)ncch + ncch->exeFSOffset * MEDIA_UNITS); uint32_t exefs_size = ncch->exeFSSize * MEDIA_UNITS; fprintf(BOTTOM_SCREEN, "e"); aes_setkey(0x2C, exefs_key, AES_KEYY, AES_INPUT_BE | AES_INPUT_NORMAL); aes_use_keyslot(0x2C); - aes(exefs, exefs, exefs_size / AES_BLOCK_SIZE, exefs_iv, AES_CTR_MODE, - AES_INPUT_BE | AES_INPUT_NORMAL); + aes(exefs, exefs, exefs_size / AES_BLOCK_SIZE, exefs_iv, AES_CTR_MODE, AES_INPUT_BE | AES_INPUT_NORMAL); // Get the decrypted FIRM // We assume the firm.bin is always the first file - firm_h* firm = (firm_h*)&exefs[1]; // The offset right behind the exefs - // header; the first file. + firm_h *firm = (firm_h *)&exefs[1]; // The offset right behind the exefs + // header; the first file. *size = exefs->fileHeaders[0].size; if (firm->magic != FIRM_MAGIC) @@ -88,7 +85,7 @@ decrypt_firm_title(firm_h* dest, ncch_h* ncch, uint32_t* size, void* key) } int -decrypt_arm9bin(arm9bin_h* header, uint64_t firm_title, uint8_t version) +decrypt_arm9bin(arm9bin_h *header, uint64_t firm_title, uint8_t version) { uint8_t slot = 0x15; @@ -101,32 +98,29 @@ decrypt_arm9bin(arm9bin_h* header, uint64_t firm_title, uint8_t version) slot = 0x16; aes_use_keyslot(0x11); - aes(decrypted_keyx, header->slot0x16keyX, 1, NULL, AES_ECB_DECRYPT_MODE, - 0); - aes_setkey(slot, decrypted_keyx, AES_KEYX, - AES_INPUT_BE | AES_INPUT_NORMAL); + aes(decrypted_keyx, header->slot0x16keyX, 1, NULL, AES_ECB_DECRYPT_MODE, 0); + aes_setkey(slot, decrypted_keyx, AES_KEYX, AES_INPUT_BE | AES_INPUT_NORMAL); } aes_setkey(slot, header->keyy, AES_KEYY, AES_INPUT_BE | AES_INPUT_NORMAL); aes_setiv(header->ctr, AES_INPUT_BE | AES_INPUT_NORMAL); - void* arm9bin = (uint8_t*)header + 0x800; + void *arm9bin = (uint8_t *)header + 0x800; int size = atoi(header->size); aes_use_keyslot(slot); - aes(arm9bin, arm9bin, size / AES_BLOCK_SIZE, header->ctr, AES_CTR_MODE, - AES_INPUT_BE | AES_INPUT_NORMAL); + aes(arm9bin, arm9bin, size / AES_BLOCK_SIZE, header->ctr, AES_CTR_MODE, AES_INPUT_BE | AES_INPUT_NORMAL); if (firm_title == NATIVE_FIRM_TITLEID) - return *(uint32_t*)arm9bin != ARM9BIN_MAGIC; + return *(uint32_t *)arm9bin != ARM9BIN_MAGIC; else if (firm_title == AGB_FIRM_TITLEID || firm_title == TWL_FIRM_TITLEID) - return *(uint32_t*)arm9bin != LGY_ARM9BIN_MAGIC; + return *(uint32_t *)arm9bin != LGY_ARM9BIN_MAGIC; else return 0; } int -decrypt_firm(firm_h* dest, char* path_firmkey, uint32_t* size) +decrypt_firm(firm_h *dest, char *path_firmkey, uint32_t *size) { uint8_t firm_key[AES_BLOCK_SIZE]; @@ -139,7 +133,7 @@ decrypt_firm(firm_h* dest, char* path_firmkey, uint32_t* size) } fprintf(BOTTOM_SCREEN, "d"); - if (decrypt_firm_title(dest, (void*)dest, size, firm_key) != 0) { + if (decrypt_firm_title(dest, (void *)dest, size, firm_key) != 0) { fprintf(BOTTOM_SCREEN, "!"); return 1; } @@ -149,8 +143,7 @@ decrypt_firm(firm_h* dest, char* path_firmkey, uint32_t* size) extern int patch_services(); int -load_firm(firm_h* dest, char* path, char* path_firmkey, uint32_t* size, - uint64_t firm_title) +load_firm(firm_h *dest, char *path, char *path_firmkey, uint32_t *size, uint64_t firm_title) { int status = 0; int firmware_changed = 0; @@ -185,42 +178,34 @@ load_firm(firm_h* dest, char* path, char* path_firmkey, uint32_t* size, fprintf(BOTTOM_SCREEN, "_"); } - struct firm_signature* fsig = get_firm_info(dest); + struct firm_signature *fsig = get_firm_info(dest); // The N3DS firm has an additional encryption layer for ARM9 if (fsig->console == console_n3ds) { // Look for the arm9 section - for (firm_section_h* section = dest->section; - section < dest->section + 4; section++) { + for (firm_section_h *section = dest->section; section < dest->section + 4; section++) { if (section->type == FIRM_TYPE_ARM9) { // Check whether the arm9bin is encrypted. int arm9bin_iscrypt = 0; - uint32_t magic = - *(uint32_t*)((uintptr_t)dest + section->offset + 0x800); + uint32_t magic = *(uint32_t *)((uintptr_t)dest + section->offset + 0x800); if (firm_title == NATIVE_FIRM_TITLEID) arm9bin_iscrypt = (magic != ARM9BIN_MAGIC); - else if (firm_title == AGB_FIRM_TITLEID || - firm_title == TWL_FIRM_TITLEID) + else if (firm_title == AGB_FIRM_TITLEID || firm_title == TWL_FIRM_TITLEID) arm9bin_iscrypt = (magic != LGY_ARM9BIN_MAGIC); if (arm9bin_iscrypt) { // Decrypt the arm9bin. - if (decrypt_arm9bin( - (arm9bin_h*)((uintptr_t)dest + section->offset), - firm_title, fsig->version)) { - fprintf(BOTTOM_SCREEN, - "\nCouldn't decrypt ARM9 FIRM binary.\n" - "Check if you have the needed key at:\n" - " " PATH_SLOT0X11KEY96 "\n"); + if (decrypt_arm9bin((arm9bin_h *)((uintptr_t)dest + section->offset), firm_title, fsig->version)) { + fprintf(BOTTOM_SCREEN, "\nCouldn't decrypt ARM9 FIRM binary.\n" + "Check if you have the needed key at:\n" + " " PATH_SLOT0X11KEY96 "\n"); status = 1; goto exit_error; } firmware_changed = 1; // Decryption of arm9bin performed. } else { - fprintf(BOTTOM_SCREEN, - "_"); - if (firm_title == NATIVE_FIRM_TITLEID && - fsig->version > 0x0F) { + fprintf(BOTTOM_SCREEN, "_"); + if (firm_title == NATIVE_FIRM_TITLEID && fsig->version > 0x0F) { slot0x11key96_init(); // This has to be loaded // regardless, otherwise boot will // fail. @@ -245,8 +230,7 @@ load_firm(firm_h* dest, char* path, char* path_firmkey, uint32_t* size, // Patch the entrypoint to skip arm9loader if (firm_title == NATIVE_FIRM_TITLEID) { dest->a9Entry = 0x0801B01C; - } else if (firm_title == AGB_FIRM_TITLEID || - firm_title == TWL_FIRM_TITLEID) { + } else if (firm_title == AGB_FIRM_TITLEID || firm_title == TWL_FIRM_TITLEID) { dest->a9Entry = 0x0801301C; } // The entrypoints seem to be the same across different FIRM versions, @@ -268,10 +252,10 @@ void __attribute__((naked)) arm11_preboot_halt() *a11_entry = 0; // Don't wait for us // Disables the LCD. - *(volatile uint32_t*)0x10202A44 = 0; - *(volatile uint32_t*)0x10202244 = 0; - *(volatile uint32_t*)0x1020200C = 0; - *(volatile uint32_t*)0x10202014 = 0; + *(volatile uint32_t *)0x10202A44 = 0; + *(volatile uint32_t *)0x10202244 = 0; + *(volatile uint32_t *)0x1020200C = 0; + *(volatile uint32_t *)0x10202014 = 0; while (!*a11_entry) ; @@ -283,20 +267,17 @@ extern void wait(); void boot_firm() { - struct firm_signature* fsig = get_firm_info(firm_loc); + struct firm_signature *fsig = get_firm_info(firm_loc); // Set up the keys needed to boot a few firmwares, due to them being unset, // depending on which firmware you're booting from. // TODO: Don't use the hardcoded offset. - if (update_96_keys && fsig->console == console_n3ds && - fsig->version > 0x0F) { - void* keydata = NULL; + if (update_96_keys && fsig->console == console_n3ds && fsig->version > 0x0F) { + void *keydata = NULL; if (fsig->version == 0x1B || fsig->version == 0x1F) { - keydata = (void*)((uintptr_t)firm_loc + - firm_loc->section[2].offset + 0x89814); + keydata = (void *)((uintptr_t)firm_loc + firm_loc->section[2].offset + 0x89814); } else if (fsig->version == 0x21) { - keydata = (void*)((uintptr_t)firm_loc + - firm_loc->section[2].offset + 0x89A14); + keydata = (void *)((uintptr_t)firm_loc + firm_loc->section[2].offset + 0x89A14); } aes_use_keyslot(0x11); @@ -304,7 +285,7 @@ boot_firm() for (int slot = 0x19; slot < 0x20; slot++) { aes(keyx, keydata, 1, NULL, AES_ECB_DECRYPT_MODE, 0); aes_setkey(slot, keyx, AES_KEYX, AES_INPUT_BE | AES_INPUT_NORMAL); - *(uint8_t*)(keydata + 0xF) += 1; + *(uint8_t *)(keydata + 0xF) += 1; } fprintf(BOTTOM_SCREEN, "Updated keyX keyslots\n"); @@ -313,10 +294,8 @@ boot_firm() fumount(); // Unmount SD. No longer needed. fprintf(BOTTOM_SCREEN, "SD Unmounted.\n"); - for (firm_section_h* section = firm_loc->section; - section < firm_loc->section + 4 && section->address != 0; section++) { - memcpy((void*)section->address, (void*)firm_loc + section->offset, - section->size); + for (firm_section_h *section = firm_loc->section; section < firm_loc->section + 4 && section->address != 0; section++) { + memcpy((void *)section->address, (void *)firm_loc + section->offset, section->size); } fprintf(BOTTOM_SCREEN, "Copied FIRM\n"); @@ -333,26 +312,24 @@ boot_firm() } int -find_proc9(firm_h* firm, firm_section_h* process9, exefs_h** p9exefs) +find_proc9(firm_h *firm, firm_section_h *process9, exefs_h **p9exefs) { - for (firm_section_h* section = firm->section; section < firm->section + 4; - section++) { + for (firm_section_h *section = firm->section; section < firm->section + 4; section++) { if (section->address == 0) break; if (section->type == FIRM_TYPE_ARM9) { - void* arm9section = (void*)firm + section->offset; + void *arm9section = (void *)firm + section->offset; while (arm9section < arm9section + section->size) { if (!memcmp(arm9section, "Process9", 8)) { // Process9 - ncch_h* ncch = (ncch_h*)(arm9section - sizeof(ncch_h)); + ncch_h *ncch = (ncch_h *)(arm9section - sizeof(ncch_h)); if (ncch->magic == NCCH_MAGIC) { // Found Process9 - ncch_ex_h* p9exheader = (ncch_ex_h*)(ncch + 1); - *p9exefs = (exefs_h*)(p9exheader + 1); + ncch_ex_h *p9exheader = (ncch_ex_h *)(ncch + 1); + *p9exefs = (exefs_h *)(p9exheader + 1); process9->address = p9exheader->sci.textCodeSet.address; process9->size = (*p9exefs)->fileHeaders[0].size; - process9->offset = - (void*)((*p9exefs) + 1) - (void*)firm; + process9->offset = (void *)((*p9exefs) + 1) - (void *)firm; fprintf(BOTTOM_SCREEN, "p"); return 0; } @@ -370,34 +347,31 @@ int firm_loaded = 0; int load_firms() { - if (firm_loaded) - return 0; + if (firm_loaded) + return 0; fprintf(BOTTOM_SCREEN, "FIRM load triggered.\n"); fprintf(BOTTOM_SCREEN, "NATIVE_FIRM\n ["); - if (load_firm(firm_loc, PATH_NATIVE_F, PATH_NATIVE_FIRMKEY, &firm_size, - NATIVE_FIRM_TITLEID) != 0) + if (load_firm(firm_loc, PATH_NATIVE_F, PATH_NATIVE_FIRMKEY, &firm_size, NATIVE_FIRM_TITLEID) != 0) return 1; find_proc9(firm_loc, &firm_proc9, &firm_p9_exefs); fprintf(BOTTOM_SCREEN, "]\nTWL_FIRM\n ["); - if (load_firm(twl_firm_loc, PATH_TWL_F, PATH_TWL_FIRMKEY, &twl_firm_size, - TWL_FIRM_TITLEID)) + if (load_firm(twl_firm_loc, PATH_TWL_F, PATH_TWL_FIRMKEY, &twl_firm_size, TWL_FIRM_TITLEID)) fprintf(BOTTOM_SCREEN, " \nTWL_FIRM failed to load.\n"); else find_proc9(twl_firm_loc, &twl_firm_proc9, &twl_firm_p9_exefs); fprintf(BOTTOM_SCREEN, "]\nAGB_FIRM\n ["); - if (load_firm(agb_firm_loc, PATH_AGB_F, PATH_AGB_FIRMKEY, &agb_firm_size, - AGB_FIRM_TITLEID)) + if (load_firm(agb_firm_loc, PATH_AGB_F, PATH_AGB_FIRMKEY, &agb_firm_size, AGB_FIRM_TITLEID)) fprintf(BOTTOM_SCREEN, " \nAGB_FIRM failed to load.\n"); else find_proc9(agb_firm_loc, &agb_firm_proc9, &agb_firm_p9_exefs); - fprintf(BOTTOM_SCREEN, "]\n"); + fprintf(BOTTOM_SCREEN, "]\n"); - firm_loaded = 1; // Loaded. + firm_loaded = 1; // Loaded. return 0; } @@ -406,7 +380,7 @@ void boot_cfw() { fprintf(BOTTOM_SCREEN, "Loading firmware...\n"); - load_firms(); + load_firms(); fprintf(BOTTOM_SCREEN, "Patching firmware...\n"); if (patch_firm_all() != 0) diff --git a/source/firm/firm.h b/source/firm/firm.h index 84f421a..f71dfff 100644 --- a/source/firm/firm.h +++ b/source/firm/firm.h @@ -17,22 +17,22 @@ struct firm_signature enum consoles console; }; -extern firm_h* firm_loc; -extern struct firm_signature* current_firm; +extern firm_h *firm_loc; +extern struct firm_signature *current_firm; extern firm_section_h firm_proc9; -extern exefs_h* firm_p9_exefs; +extern exefs_h *firm_p9_exefs; -extern firm_h* twl_firm_loc; -extern struct firm_signature* current_twl_firm; +extern firm_h *twl_firm_loc; +extern struct firm_signature *current_twl_firm; extern firm_section_h twl_firm_proc9; -extern exefs_h* twl_firm_p9_exefs; +extern exefs_h *twl_firm_p9_exefs; -extern firm_h* agb_firm_loc; -extern struct firm_signature* current_agb_firm; +extern firm_h *agb_firm_loc; +extern struct firm_signature *current_agb_firm; extern firm_section_h agb_firm_proc9; -extern exefs_h* agb_firm_p9_exefs; +extern exefs_h *agb_firm_p9_exefs; -struct firm_signature* get_firm_info(firm_h* firm); +struct firm_signature *get_firm_info(firm_h *firm); void slot0x11key96_init(); int load_firms(); diff --git a/source/firm/headers.h b/source/firm/headers.h index 38a78bd..60c0cca 100644 --- a/source/firm/headers.h +++ b/source/firm/headers.h @@ -86,8 +86,8 @@ typedef struct ncch_ex_h // http://3dbrew.org/wiki/NCCH typedef struct ncch_h { - uint8_t sig[0x100]; // RSA-2048 signature of the NCCH header, using SHA-256. - uint32_t magic; // NCCH + uint8_t sig[0x100]; // RSA-2048 signature of the NCCH header, using SHA-256. + uint32_t magic; // NCCH uint32_t contentSize; // Content size, in media units (1 media unit = 0x200 // bytes) uint8_t partitionID[8]; @@ -149,8 +149,7 @@ typedef struct exefs_file_hash typedef struct exefs_h { - exefs_file_h - fileHeaders[10]; // File headers (10 headers maximum, 16 bytes each) + exefs_file_h fileHeaders[10]; // File headers (10 headers maximum, 16 bytes each) uint8_t reserved[0x20]; exefs_file_hash fileHashes[10]; // File hashes (10 hashes maximum, 32 bytes // each, one for each header), SHA256 over @@ -168,14 +167,13 @@ typedef struct ncsd_h { uint8_t sig[0x100]; // RSA-2048 signature of the NCSD header, using SHA-256. uint32_t magic; // NCSD - uint32_t size; // Size of the NCSD image, in media units (1 media unit = - // 0x200 bytes) + uint32_t size; // Size of the NCSD image, in media units (1 media unit = + // 0x200 bytes) uint8_t mediaID[8]; - uint8_t fsType[8]; // Partitions FS type (0=None, 1=Normal, 3=FIRM, - // 4=AGB_FIRM save) - uint8_t cryptType[8]; // Partitions crypt type - ncsd_partition_table - ptable[8]; // Offset & Length partition table, in media units + uint8_t fsType[8]; // Partitions FS type (0=None, 1=Normal, 3=FIRM, + // 4=AGB_FIRM save) + uint8_t cryptType[8]; // Partitions crypt type + ncsd_partition_table ptable[8]; // Offset & Length partition table, in media units uint8_t spec[0xA0]; } ncsd_h; diff --git a/source/firm/version.c b/source/firm/version.c index 5ecdd48..db96b37 100644 --- a/source/firm/version.c +++ b/source/firm/version.c @@ -3,99 +3,81 @@ // We use the firm's section 0's hash to identify the version struct firm_signature firm_signatures[] = { - {.sig = { 0xEE, 0xE2, 0x81, 0x2E, 0xB9, 0x10, 0x0D, 0x03, 0xFE, 0xA2, 0x3F, - 0x44, 0xB5, 0x1C, 0xB3, 0x5E }, + {.sig = { 0xEE, 0xE2, 0x81, 0x2E, 0xB9, 0x10, 0x0D, 0x03, 0xFE, 0xA2, 0x3F, 0x44, 0xB5, 0x1C, 0xB3, 0x5E }, .version = 0x1F, .version_string = "4.1.0", .console = console_o3ds }, - {.sig = { 0x8C, 0x29, 0xDA, 0x7B, 0xB5, 0x5F, 0xFE, 0x44, 0x1F, 0x66, 0x79, - 0x70, 0x8E, 0xE4, 0x42, 0xE3 }, + {.sig = { 0x8C, 0x29, 0xDA, 0x7B, 0xB5, 0x5F, 0xFE, 0x44, 0x1F, 0x66, 0x79, 0x70, 0x8E, 0xE4, 0x42, 0xE3 }, .version = 0x2A, .version_string = "6.1.0", .console = console_o3ds }, - {.sig = { 0x1D, 0x96, 0x80, 0xD9, 0x0A, 0xA9, 0xDB, 0xE8, 0x29, 0x77, 0xCB, - 0x7D, 0x90, 0x55, 0xB7, 0xF9 }, + {.sig = { 0x1D, 0x96, 0x80, 0xD9, 0x0A, 0xA9, 0xDB, 0xE8, 0x29, 0x77, 0xCB, 0x7D, 0x90, 0x55, 0xB7, 0xF9 }, .version = 0x30, .version_string = "7.2.0", .console = console_o3ds }, - {.sig = { 0x3B, 0x61, 0x2E, 0xBA, 0x42, 0xAE, 0x24, 0x46, 0xAD, 0x60, 0x2F, - 0x7B, 0x52, 0x16, 0x82, 0x91 }, + {.sig = { 0x3B, 0x61, 0x2E, 0xBA, 0x42, 0xAE, 0x24, 0x46, 0xAD, 0x60, 0x2F, 0x7B, 0x52, 0x16, 0x82, 0x91 }, .version = 0x37, .version_string = "8.0.0", .console = console_o3ds }, - {.sig = { 0x3F, 0xBF, 0x14, 0x06, 0x33, 0x77, 0x82, 0xDE, 0xB2, 0x68, 0x83, - 0x01, 0x6B, 0x1A, 0x71, 0x69 }, + {.sig = { 0x3F, 0xBF, 0x14, 0x06, 0x33, 0x77, 0x82, 0xDE, 0xB2, 0x68, 0x83, 0x01, 0x6B, 0x1A, 0x71, 0x69 }, .version = 0x38, .version_string = "9.0.0", .console = console_o3ds }, - {.sig = { 0x5C, 0x6A, 0x51, 0xF3, 0x79, 0x4D, 0x21, 0x91, 0x0B, 0xBB, 0xFD, - 0x17, 0x7B, 0x72, 0x6B, 0x59 }, + {.sig = { 0x5C, 0x6A, 0x51, 0xF3, 0x79, 0x4D, 0x21, 0x91, 0x0B, 0xBB, 0xFD, 0x17, 0x7B, 0x72, 0x6B, 0x59 }, .version = 0x49, .version_string = "9.6.0", .console = console_o3ds }, - {.sig = { 0xF5, 0x7E, 0xC3, 0x86, 0x1F, 0x8D, 0x8E, 0xFB, 0x44, 0x61, 0xF3, - 0x16, 0x51, 0x0A, 0x57, 0x7D }, + {.sig = { 0xF5, 0x7E, 0xC3, 0x86, 0x1F, 0x8D, 0x8E, 0xFB, 0x44, 0x61, 0xF3, 0x16, 0x51, 0x0A, 0x57, 0x7D }, .version = 0x50, .version_string = "10.4.0", .console = console_o3ds }, - {.sig = { 0xE9, 0xAD, 0x74, 0x9D, 0x46, 0x9C, 0x9C, 0xF4, 0x96, 0x9E, 0x1A, - 0x7A, 0xDF, 0x40, 0x2A, 0x82 }, + {.sig = { 0xE9, 0xAD, 0x74, 0x9D, 0x46, 0x9C, 0x9C, 0xF4, 0x96, 0x9E, 0x1A, 0x7A, 0xDF, 0x40, 0x2A, 0x82 }, .version = 0x52, .version_string = "11.0.0", .console = console_o3ds }, - {.sig = { 0x31, 0xCC, 0x46, 0xCD, 0x61, 0x7A, 0xE7, 0x13, 0x7F, 0xE5, 0xFC, - 0x20, 0x46, 0x91, 0x6A, 0xBB }, + {.sig = { 0x31, 0xCC, 0x46, 0xCD, 0x61, 0x7A, 0xE7, 0x13, 0x7F, 0xE5, 0xFC, 0x20, 0x46, 0x91, 0x6A, 0xBB }, .version = 0x04, .version_string = "9.0.0", .console = console_n3ds }, - {.sig = { 0x40, 0x35, 0x6C, 0x9A, 0x24, 0x36, 0x93, 0x7B, 0x76, 0xFE, 0x5D, - 0xB1, 0x4D, 0x05, 0x06, 0x52 }, + {.sig = { 0x40, 0x35, 0x6C, 0x9A, 0x24, 0x36, 0x93, 0x7B, 0x76, 0xFE, 0x5D, 0xB1, 0x4D, 0x05, 0x06, 0x52 }, .version = 0x0F, .version_string = "9.5.0", .console = console_n3ds }, - {.sig = { 0x07, 0xFE, 0x9A, 0x62, 0x3F, 0xDE, 0x54, 0xC1, 0x9B, 0x06, 0x91, - 0xD8, 0x4F, 0x44, 0x9C, 0x21 }, + {.sig = { 0x07, 0xFE, 0x9A, 0x62, 0x3F, 0xDE, 0x54, 0xC1, 0x9B, 0x06, 0x91, 0xD8, 0x4F, 0x44, 0x9C, 0x21 }, .version = 0x1B, .version_string = "10.2.0", .console = console_n3ds }, - {.sig = { 0x1A, 0x56, 0x5C, 0xFF, 0xC9, 0xCC, 0x62, 0xBB, 0x2B, 0xC2, 0x23, - 0xB6, 0x4F, 0x48, 0xD1, 0xCC }, + {.sig = { 0x1A, 0x56, 0x5C, 0xFF, 0xC9, 0xCC, 0x62, 0xBB, 0x2B, 0xC2, 0x23, 0xB6, 0x4F, 0x48, 0xD1, 0xCC }, .version = 0x1F, .version_string = "10.4.0", .console = console_n3ds }, - {.sig = { 0x52, 0x30, 0x0F, 0x55, 0xA2, 0x64, 0x4E, 0xFF, 0x96, 0x90, 0xF0, - 0xE5, 0x6E, 0xC8, 0x2E, 0xB3 }, + {.sig = { 0x52, 0x30, 0x0F, 0x55, 0xA2, 0x64, 0x4E, 0xFF, 0x96, 0x90, 0xF0, 0xE5, 0x6E, 0xC8, 0x2E, 0xB3 }, .version = 0x21, .version_string = "11.0.0", .console = console_n3ds }, - {.sig = { 0xE8, 0xB8, 0x82, 0xF5, 0x8C, 0xC4, 0x1B, 0x24, 0x05, 0x60, 0x6D, - 0xB8, 0x74, 0xF5, 0xE5, 0xDD }, + {.sig = { 0xE8, 0xB8, 0x82, 0xF5, 0x8C, 0xC4, 0x1B, 0x24, 0x05, 0x60, 0x6D, 0xB8, 0x74, 0xF5, 0xE5, 0xDD }, .version = 0x16, .version_string = "6.2.0_TWL", .console = console_o3ds }, - {.sig = { 0x0F, 0x05, 0xC5, 0xF3, 0x60, 0x83, 0x8B, 0x9D, 0xC8, 0x44, 0x3F, - 0xB3, 0x06, 0x4D, 0x30, 0xC7 }, + {.sig = { 0x0F, 0x05, 0xC5, 0xF3, 0x60, 0x83, 0x8B, 0x9D, 0xC8, 0x44, 0x3F, 0xB3, 0x06, 0x4D, 0x30, 0xC7 }, .version = 0x00, .version_string = "9.0.0_TWL", .console = console_n3ds }, - {.sig = { 0x65, 0xB7, 0x55, 0x78, 0x97, 0xE6, 0x5C, 0xD6, 0x11, 0x74, 0x95, - 0xDD, 0x61, 0xE8, 0x08, 0x40 }, + {.sig = { 0x65, 0xB7, 0x55, 0x78, 0x97, 0xE6, 0x5C, 0xD6, 0x11, 0x74, 0x95, 0xDD, 0x61, 0xE8, 0x08, 0x40 }, .version = 0x0B, .version_string = "6.0.0_AGB", .console = console_o3ds }, - {.sig = { 0xAF, 0x81, 0xA1, 0xAB, 0xBA, 0xAC, 0xAC, 0xA7, 0x30, 0xE8, 0xD8, - 0x74, 0x7C, 0x47, 0x1C, 0x5D }, + {.sig = { 0xAF, 0x81, 0xA1, 0xAB, 0xBA, 0xAC, 0xAC, 0xA7, 0x30, 0xE8, 0xD8, 0x74, 0x7C, 0x47, 0x1C, 0x5D }, .version = 0x00, .version_string = "9.0.0_AGB", .console = console_n3ds }, {.version = 0xFF } // Terminate list }; -struct firm_signature* -get_firm_info(firm_h* firm) +struct firm_signature * +get_firm_info(firm_h *firm) { - for (struct firm_signature* signature = firm_signatures; - signature->version != 0xFF; signature++) { + for (struct firm_signature *signature = firm_signatures; signature->version != 0xFF; signature++) { if (memcmp(signature->sig, firm->section[0].hash, 0x10) == 0) { return signature; } diff --git a/source/i2c.c b/source/i2c.c index d371c14..16db5c8 100644 --- a/source/i2c.c +++ b/source/i2c.c @@ -6,9 +6,8 @@ static const struct { uint8_t bus_id, reg_addr; } dev_data[] = { - { 0, 0x4A }, { 0, 0x7A }, { 0, 0x78 }, { 1, 0x4A }, { 1, 0x78 }, - { 1, 0x2C }, { 1, 0x2E }, { 1, 0x40 }, { 1, 0x44 }, { 2, 0xD6 }, - { 2, 0xD0 }, { 2, 0xD2 }, { 2, 0xA4 }, { 2, 0x9A }, { 2, 0xA0 }, + { 0, 0x4A }, { 0, 0x7A }, { 0, 0x78 }, { 1, 0x4A }, { 1, 0x78 }, { 1, 0x2C }, { 1, 0x2E }, { 1, 0x40 }, + { 1, 0x44 }, { 2, 0xD6 }, { 2, 0xD0 }, { 2, 0xD2 }, { 2, 0xA4 }, { 2, 0x9A }, { 2, 0xA0 }, }; uint8_t @@ -25,13 +24,11 @@ i2cGetDeviceRegAddr(uint8_t device_id) //----------------------------------------------------------------------------- -static volatile uint8_t* const reg_data_addrs[] = { - (volatile uint8_t*)(I2C1_REG_OFF + I2C_REG_DATA), - (volatile uint8_t*)(I2C2_REG_OFF + I2C_REG_DATA), - (volatile uint8_t*)(I2C3_REG_OFF + I2C_REG_DATA), +static volatile uint8_t *const reg_data_addrs[] = { + (volatile uint8_t *)(I2C1_REG_OFF + I2C_REG_DATA), (volatile uint8_t *)(I2C2_REG_OFF + I2C_REG_DATA), (volatile uint8_t *)(I2C3_REG_OFF + I2C_REG_DATA), }; -volatile uint8_t* +volatile uint8_t * i2cGetDataReg(uint8_t bus_id) { return reg_data_addrs[bus_id]; @@ -39,13 +36,11 @@ i2cGetDataReg(uint8_t bus_id) //----------------------------------------------------------------------------- -static volatile uint8_t* const reg_cnt_addrs[] = { - (volatile uint8_t*)(I2C1_REG_OFF + I2C_REG_CNT), - (volatile uint8_t*)(I2C2_REG_OFF + I2C_REG_CNT), - (volatile uint8_t*)(I2C3_REG_OFF + I2C_REG_CNT), +static volatile uint8_t *const reg_cnt_addrs[] = { + (volatile uint8_t *)(I2C1_REG_OFF + I2C_REG_CNT), (volatile uint8_t *)(I2C2_REG_OFF + I2C_REG_CNT), (volatile uint8_t *)(I2C3_REG_OFF + I2C_REG_CNT), }; -volatile uint8_t* +volatile uint8_t * i2cGetCntReg(uint8_t bus_id) { return reg_cnt_addrs[bus_id]; @@ -104,8 +99,7 @@ i2cReadRegister(uint8_t dev_id, uint8_t reg) uint8_t dev_addr = i2cGetDeviceRegAddr(dev_id); for (size_t i = 0; i < 8; i++) { - if (i2cSelectDevice(bus_id, dev_addr) && - i2cSelectRegister(bus_id, reg)) { + if (i2cSelectDevice(bus_id, dev_addr) && i2cSelectRegister(bus_id, reg)) { if (i2cSelectDevice(bus_id, dev_addr | 1)) { i2cWaitBusy(bus_id); i2cStop(bus_id, 1); @@ -120,16 +114,13 @@ i2cReadRegister(uint8_t dev_id, uint8_t reg) } int -i2cReadRegisterBuffer(unsigned int dev_id, int reg, uint8_t* buffer, - size_t buf_size) +i2cReadRegisterBuffer(unsigned int dev_id, int reg, uint8_t *buffer, size_t buf_size) { uint8_t bus_id = i2cGetDeviceBusId(dev_id); uint8_t dev_addr = i2cGetDeviceRegAddr(dev_id); size_t j = 0; - while (!i2cSelectDevice(bus_id, dev_addr) || - !i2cSelectRegister(bus_id, reg) || - !i2cSelectDevice(bus_id, dev_addr | 1)) { + while (!i2cSelectDevice(bus_id, dev_addr) || !i2cSelectRegister(bus_id, reg) || !i2cSelectDevice(bus_id, dev_addr | 1)) { i2cWaitBusy(bus_id); *i2cGetCntReg(bus_id) = 0xC5; i2cWaitBusy(bus_id); @@ -160,8 +151,7 @@ i2cWriteRegister(uint8_t dev_id, uint8_t reg, uint8_t data) uint8_t dev_addr = i2cGetDeviceRegAddr(dev_id); for (int i = 0; i < 8; i++) { - if (i2cSelectDevice(bus_id, dev_addr) && - i2cSelectRegister(bus_id, reg)) { + if (i2cSelectDevice(bus_id, dev_addr) && i2cSelectRegister(bus_id, reg)) { i2cWaitBusy(bus_id); *i2cGetDataReg(bus_id) = data; *i2cGetCntReg(bus_id) = 0xC1; diff --git a/source/i2c.h b/source/i2c.h index 0b289f1..e3e9f85 100644 --- a/source/i2c.h +++ b/source/i2c.h @@ -19,8 +19,8 @@ uint8_t i2cGetDeviceBusId(uint8_t device_id); uint8_t i2cGetDeviceRegAddr(uint8_t device_id); -volatile uint8_t* i2cGetDataReg(uint8_t bus_id); -volatile uint8_t* i2cGetCntReg(uint8_t bus_id); +volatile uint8_t *i2cGetDataReg(uint8_t bus_id); +volatile uint8_t *i2cGetCntReg(uint8_t bus_id); void i2cWaitBusy(uint8_t bus_id); int i2cGetResult(uint8_t bus_id); @@ -33,7 +33,6 @@ int i2cSelectRegister(uint8_t bus_id, uint8_t reg); uint8_t i2cReadRegister(uint8_t dev_id, uint8_t reg); int i2cWriteRegister(uint8_t dev_id, uint8_t reg, uint8_t data); -int i2cReadRegisterBuffer(unsigned int dev_id, int reg, uint8_t* buffer, - size_t buf_size); +int i2cReadRegisterBuffer(unsigned int dev_id, int reg, uint8_t *buffer, size_t buf_size); #endif diff --git a/source/input.h b/source/input.h index 28d3cc4..fbe4456 100644 --- a/source/input.h +++ b/source/input.h @@ -18,6 +18,6 @@ #define BUTTON_ANY 0xFFF -#define HID_PAD ((*(volatile uint32_t*)0x10146000) ^ BUTTON_ANY) +#define HID_PAD ((*(volatile uint32_t *)0x10146000) ^ BUTTON_ANY) #endif diff --git a/source/interp.c b/source/interp.c index f9368fa..48b84a7 100644 --- a/source/interp.c +++ b/source/interp.c @@ -1,313 +1,318 @@ #include #include #ifndef LOADER - #include "std/unused.h" - #include "std/memory.h" - #include "firm/firm.h" - #include "config.h" - #include "common.h" +#include "std/unused.h" +#include "std/memory.h" +#include "firm/firm.h" +#include "config.h" +#include "common.h" #endif -#define OP_NOP 0x00 -#define OP_REL 0x01 -#define OP_FIND 0x02 -#define OP_BACK 0x03 -#define OP_FWD 0x04 -#define OP_SET 0x05 -#define OP_TEST 0x06 -#define OP_JMP 0x07 +#define OP_NOP 0x00 +#define OP_REL 0x01 +#define OP_FIND 0x02 +#define OP_BACK 0x03 +#define OP_FWD 0x04 +#define OP_SET 0x05 +#define OP_TEST 0x06 +#define OP_JMP 0x07 #define OP_REWIND 0x08 -#define OP_AND 0x09 -#define OP_TITLE 0x0A -#define OP_NEXT 0xFF +#define OP_AND 0x09 +#define OP_TITLE 0x0A +#define OP_NEXT 0xFF #ifdef LOADER - #define log(a) logstr(a) - #define abort(a) { logstr(a) ; svcBreak(USERBREAK_ASSERT) ; } +#define log(a) logstr(a) +#define abort(a) \ + { \ + logstr(a); \ + svcBreak(USERBREAK_ASSERT); \ + } #else - #define log(a) fprintf(stderr, a) +#define log(a) fprintf(stderr, a) #endif -struct mode { - uint8_t* memory; - uint32_t size; +struct mode +{ + uint8_t *memory; + uint32_t size; }; struct mode modes[19]; int init_bytecode = 0; -int exec_bytecode(uint8_t* bytecode, uint32_t len, int debug) { - if (!init_bytecode) { +int +exec_bytecode(uint8_t *bytecode, uint32_t len, int debug) +{ + if (!init_bytecode) { #ifndef LOADER - modes[0].memory = (uint8_t*)firm_loc; - modes[0].size = FCRAM_SPACING; // NATIVE_FIRM - - modes[1].memory = (uint8_t*)agb_firm_loc; - modes[1].size = FCRAM_SPACING; // AGB_FIRM - - modes[2].memory = (uint8_t*)twl_firm_loc; - modes[2].size = FCRAM_SPACING; // TWL_FIRM - - // NATIVE_FIRM Process9 (This is also the default mode.) - modes[3].memory = (uint8_t*)firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; - modes[3].size = firm_p9_exefs->fileHeaders[0].size; - // AGB_FIRM Process9 - modes[4].memory = (uint8_t*)agb_firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; - modes[4].size = firm_p9_exefs->fileHeaders[0].size; - // TWL_FIRM Process9 - modes[5].memory = (uint8_t*)twl_firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; - modes[5].size = firm_p9_exefs->fileHeaders[0].size; - - // NATIVE_FIRM Sect 0 - modes[6].memory = (uint8_t*)&firm_loc->section[0] + firm_loc->section[0].offset; - modes[6].size = firm_loc->section[0].size; - // NATIVE_FIRM Sect 1 - modes[7].memory = (uint8_t*)&firm_loc->section[1] + firm_loc->section[1].offset; - modes[7].size = firm_loc->section[1].size; - // NATIVE_FIRM Sect 2 - modes[8].memory = (uint8_t*)&firm_loc->section[2] + firm_loc->section[2].offset; - modes[8].size = firm_loc->section[2].size; - // NATIVE_FIRM Sect 3 - modes[9].memory = (uint8_t*)&firm_loc->section[3] + firm_loc->section[3].offset; - modes[9].size = firm_loc->section[3].size; - - // AGB_FIRM Sect 0 - modes[10].memory = (uint8_t*)&agb_firm_loc->section[0] + agb_firm_loc->section[0].offset; - modes[10].size = agb_firm_loc->section[0].size; - // AGB_FIRM Sect 1 - modes[11].memory = (uint8_t*)&agb_firm_loc->section[1] + agb_firm_loc->section[1].offset; - modes[11].size = agb_firm_loc->section[1].size; - // AGB_FIRM Sect 2 - modes[12].memory = (uint8_t*)&agb_firm_loc->section[2] + agb_firm_loc->section[2].offset; - modes[12].size = agb_firm_loc->section[2].size; - // AGB_FIRM Sect 3 - modes[13].memory = (uint8_t*)&agb_firm_loc->section[3] + agb_firm_loc->section[3].offset; - modes[13].size = agb_firm_loc->section[3].size; - - // TWL_FIRM Sect 0 - modes[14].memory = (uint8_t*)&twl_firm_loc->section[0] + twl_firm_loc->section[0].offset; - modes[14].size = twl_firm_loc->section[0].size; - // TWL_FIRM Sect 1 - modes[15].memory = (uint8_t*)&twl_firm_loc->section[1] + twl_firm_loc->section[1].offset; - modes[15].size = twl_firm_loc->section[1].size; - // TWL_FIRM Sect 2 - modes[16].memory = (uint8_t*)&twl_firm_loc->section[2] + twl_firm_loc->section[2].offset; - modes[16].size = twl_firm_loc->section[2].size; - // TWL_FIRM Sect 3 - modes[17].memory = (uint8_t*)&twl_firm_loc->section[3] + twl_firm_loc->section[3].offset; - modes[17].size = twl_firm_loc->section[3].size; + modes[0].memory = (uint8_t *)firm_loc; + modes[0].size = FCRAM_SPACING; // NATIVE_FIRM + + modes[1].memory = (uint8_t *)agb_firm_loc; + modes[1].size = FCRAM_SPACING; // AGB_FIRM + + modes[2].memory = (uint8_t *)twl_firm_loc; + modes[2].size = FCRAM_SPACING; // TWL_FIRM + + // NATIVE_FIRM Process9 (This is also the default mode.) + modes[3].memory = (uint8_t *)firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; + modes[3].size = firm_p9_exefs->fileHeaders[0].size; + // AGB_FIRM Process9 + modes[4].memory = (uint8_t *)agb_firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; + modes[4].size = firm_p9_exefs->fileHeaders[0].size; + // TWL_FIRM Process9 + modes[5].memory = (uint8_t *)twl_firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; + modes[5].size = firm_p9_exefs->fileHeaders[0].size; + + // NATIVE_FIRM Sect 0 + modes[6].memory = (uint8_t *)&firm_loc->section[0] + firm_loc->section[0].offset; + modes[6].size = firm_loc->section[0].size; + // NATIVE_FIRM Sect 1 + modes[7].memory = (uint8_t *)&firm_loc->section[1] + firm_loc->section[1].offset; + modes[7].size = firm_loc->section[1].size; + // NATIVE_FIRM Sect 2 + modes[8].memory = (uint8_t *)&firm_loc->section[2] + firm_loc->section[2].offset; + modes[8].size = firm_loc->section[2].size; + // NATIVE_FIRM Sect 3 + modes[9].memory = (uint8_t *)&firm_loc->section[3] + firm_loc->section[3].offset; + modes[9].size = firm_loc->section[3].size; + + // AGB_FIRM Sect 0 + modes[10].memory = (uint8_t *)&agb_firm_loc->section[0] + agb_firm_loc->section[0].offset; + modes[10].size = agb_firm_loc->section[0].size; + // AGB_FIRM Sect 1 + modes[11].memory = (uint8_t *)&agb_firm_loc->section[1] + agb_firm_loc->section[1].offset; + modes[11].size = agb_firm_loc->section[1].size; + // AGB_FIRM Sect 2 + modes[12].memory = (uint8_t *)&agb_firm_loc->section[2] + agb_firm_loc->section[2].offset; + modes[12].size = agb_firm_loc->section[2].size; + // AGB_FIRM Sect 3 + modes[13].memory = (uint8_t *)&agb_firm_loc->section[3] + agb_firm_loc->section[3].offset; + modes[13].size = agb_firm_loc->section[3].size; + + // TWL_FIRM Sect 0 + modes[14].memory = (uint8_t *)&twl_firm_loc->section[0] + twl_firm_loc->section[0].offset; + modes[14].size = twl_firm_loc->section[0].size; + // TWL_FIRM Sect 1 + modes[15].memory = (uint8_t *)&twl_firm_loc->section[1] + twl_firm_loc->section[1].offset; + modes[15].size = twl_firm_loc->section[1].size; + // TWL_FIRM Sect 2 + modes[16].memory = (uint8_t *)&twl_firm_loc->section[2] + twl_firm_loc->section[2].offset; + modes[16].size = twl_firm_loc->section[2].size; + // TWL_FIRM Sect 3 + modes[17].memory = (uint8_t *)&twl_firm_loc->section[3] + twl_firm_loc->section[3].offset; + modes[17].size = twl_firm_loc->section[3].size; #endif - // Loader (not valid in bootmode) - // modes[18] = { 0, 0 }; + // Loader (not valid in bootmode) + // modes[18] = { 0, 0 }; - init_bytecode = 1; - } + init_bytecode = 1; + } #ifdef LOADER - uint32_t set_mode = 18; + uint32_t set_mode = 18; #else - uint32_t set_mode = 3; + uint32_t set_mode = 3; #endif - struct mode* current_mode = &modes[set_mode]; - - uint32_t offset = 0; - uint8_t test_was_false = 0; - - uint32_t i; - - uint8_t* code = bytecode; - uint8_t* end = code + len; - while (code < end && code >= bytecode) { - switch(*code) { - case OP_NOP: - if (debug) - log("nop\n"); - code++; - test_was_false = 0; - break; - case OP_REL: // Change relativity. + struct mode *current_mode = &modes[set_mode]; + + uint32_t offset = 0; + uint8_t test_was_false = 0; + + uint32_t i; + + uint8_t *code = bytecode; + uint8_t *end = code + len; + while (code < end && code >= bytecode) { + switch (*code) { + case OP_NOP: + if (debug) + log("nop\n"); + code++; + test_was_false = 0; + break; + case OP_REL: // Change relativity. #ifdef LOADER - // Loader doesn't support this. Just treat it like a two-byte NOP. - code += 2; + // Loader doesn't support this. Just treat it like a two-byte NOP. + code += 2; #else - if (debug) - log("rel\n"); - code++; - if (!test_was_false) - current_mode = &modes[*code]; - else - test_was_false = 0; - set_mode = *code; - code++; + if (debug) + log("rel\n"); + code++; + if (!test_was_false) + current_mode = &modes[*code]; + else + test_was_false = 0; + set_mode = *code; + code++; #endif - break; - case OP_FIND: // Find pattern. - if (debug) - log("find\n"); - code += 2; - if (!test_was_false) { - offset = (uint32_t)memfind(current_mode->memory+offset, current_mode->size - offset, code, *(code-1)); - if ((uint8_t*)offset == NULL) { - // Error. Abort. - abort("Find opcode failed.\n"); - } - offset = offset - (uint32_t)current_mode->memory; - } else { - test_was_false = 0; - } - code += *(code-1); - break; - case OP_BACK: - if (debug) - log("back\n"); - code++; - if (!test_was_false) { - if (offset < *code) { - // Went out of bounds. Error. - abort("Back underflowed.\n"); - } - offset -= *code; - } else { - test_was_false = 0; - } - code++; - break; - case OP_FWD: - if (debug) - log("fwd\n"); - code++; - if (!test_was_false) { - offset += *code; - if (offset >= current_mode->size) { - // Went out of bounds. Error. - abort("Fwd overflowed.\n"); - } - } else { - test_was_false = 0; - } - code++; - break; - case OP_SET: // Set data. - if (debug) - log("set\n"); - code += 2; - if (!test_was_false) - memcpy(current_mode->memory+offset, code, *(code-1)); - else - test_was_false = 0; - offset += *(code-1); - code += *(code-1); - break; - case OP_TEST: // Test data. - if (debug) - log("test\n"); - code += 2; - if(memcmp(current_mode->memory+offset, code, *(code-1))) { - test_was_false = 1; - if (debug) - log("false\n"); - } else if (debug) { - log("true\n"); - } - code += *(code-1); - break; - case OP_JMP: // Jump to offset. - if (debug) - log("jmp\n"); - code++; - if (!test_was_false) { - code = bytecode + code[1] + ( code[0] * 0x100 ); - } else { - code += 2; - test_was_false = 0; - } - break; - case OP_REWIND: - if (debug) - log("rewind\n"); - code++; - if (!test_was_false) - offset = 0; - else - test_was_false = 0; - break; - case OP_AND: - if (debug) - log("and\n"); - code += 2; - if (!test_was_false) { - for(i=0; i < *(code-1); i++) { - *(current_mode->memory + offset) &= code[i]; - } - offset += *(code-1); - } else { - test_was_false = 0; - } - code += *(code-1); - break; - case OP_NEXT: - bytecode = code + 1; + break; + case OP_FIND: // Find pattern. + if (debug) + log("find\n"); + code += 2; + if (!test_was_false) { + offset = (uint32_t)memfind(current_mode->memory + offset, current_mode->size - offset, code, *(code - 1)); + if ((uint8_t *)offset == NULL) { + // Error. Abort. + abort("Find opcode failed.\n"); + } + offset = offset - (uint32_t)current_mode->memory; + } else { + test_was_false = 0; + } + code += *(code - 1); + break; + case OP_BACK: + if (debug) + log("back\n"); + code++; + if (!test_was_false) { + if (offset < *code) { + // Went out of bounds. Error. + abort("Back underflowed.\n"); + } + offset -= *code; + } else { + test_was_false = 0; + } + code++; + break; + case OP_FWD: + if (debug) + log("fwd\n"); + code++; + if (!test_was_false) { + offset += *code; + if (offset >= current_mode->size) { + // Went out of bounds. Error. + abort("Fwd overflowed.\n"); + } + } else { + test_was_false = 0; + } + code++; + break; + case OP_SET: // Set data. + if (debug) + log("set\n"); + code += 2; + if (!test_was_false) + memcpy(current_mode->memory + offset, code, *(code - 1)); + else + test_was_false = 0; + offset += *(code - 1); + code += *(code - 1); + break; + case OP_TEST: // Test data. + if (debug) + log("test\n"); + code += 2; + if (memcmp(current_mode->memory + offset, code, *(code - 1))) { + test_was_false = 1; + if (debug) + log("false\n"); + } else if (debug) { + log("true\n"); + } + code += *(code - 1); + break; + case OP_JMP: // Jump to offset. + if (debug) + log("jmp\n"); + code++; + if (!test_was_false) { + code = bytecode + code[1] + (code[0] * 0x100); + } else { + code += 2; + test_was_false = 0; + } + break; + case OP_REWIND: + if (debug) + log("rewind\n"); + code++; + if (!test_was_false) + offset = 0; + else + test_was_false = 0; + break; + case OP_AND: + if (debug) + log("and\n"); + code += 2; + if (!test_was_false) { + for (i = 0; i < *(code - 1); i++) { + *(current_mode->memory + offset) &= code[i]; + } + offset += *(code - 1); + } else { + test_was_false = 0; + } + code += *(code - 1); + break; + case OP_NEXT: + bytecode = code + 1; #ifndef LOADER - set_mode = 3; - current_mode = &modes[set_mode]; + set_mode = 3; + current_mode = &modes[set_mode]; #endif - offset = 0; - test_was_false = 0; - code = bytecode; - break; - case OP_TITLE: - if (debug) - log("title\n"); - // FIXME - NYI - default: + offset = 0; + test_was_false = 0; + code = bytecode; + break; + case OP_TITLE: + if (debug) + log("title\n"); + // FIXME - NYI + default: #ifndef LOADER - // Panic; not proper opcode. - fprintf(stderr, "Invalid opcode. State:\n" - " Relative: %u\n" - " Actual: %x:%u\n" - " Memory: %x\n" - " Actual: %x\n" - " Code Loc: %x\n" - " Actual: %x\n" - " Opcode: %u\n", - set_mode, - current_mode->memory, current_mode->size, - offset, - current_mode->memory + offset, - code - bytecode, - code, - *code); + // Panic; not proper opcode. + fprintf(stderr, "Invalid opcode. State:\n" + " Relative: %u\n" + " Actual: %x:%u\n" + " Memory: %x\n" + " Actual: %x\n" + " Code Loc: %x\n" + " Actual: %x\n" + " Opcode: %u\n", + set_mode, current_mode->memory, current_mode->size, offset, current_mode->memory + offset, code - bytecode, code, *code); #endif - abort("Halting startup.\n"); - break; - } - } + abort("Halting startup.\n"); + break; + } + } - return 0; + return 0; } #ifdef LOADER -int execb(uint64_t tid, uint8_t* search_mem, uint32_t search_len) { +int +execb(uint64_t tid, uint8_t *search_mem, uint32_t search_len) +{ #else -int execb(char* filename) { +int +execb(char *filename) +{ #endif - uint32_t patch_len; + uint32_t patch_len; #ifdef LOADER - char cache_path[] = PATH_LOADER_CACHE "/0000000000000000"; - int len = strlen(cache_path) - 16; + char cache_path[] = PATH_LOADER_CACHE "/0000000000000000"; + int len = strlen(cache_path) - 16; - uint8_t* title_buf = (uint8_t*)&tid; + uint8_t *title_buf = (uint8_t *)&tid; - for(int j = 0; j < 8; j++) { - cache_path[len+(j*2)] = ("0123456789ABCDEF")[(title_buf[j] >> 4) & 0x0f]; - cache_path[len+(j*2)+1] = ("0123456789ABCDEF")[ title_buf[j] & 0x0f]; - } + for (int j = 0; j < 8; j++) { + cache_path[len + (j * 2)] = ("0123456789ABCDEF")[(title_buf[j] >> 4) & 0x0f]; + cache_path[len + (j * 2) + 1] = ("0123456789ABCDEF")[title_buf[j] & 0x0f]; + } - static uint8_t patch_dat[MAX_PATCHSIZE]; + static uint8_t patch_dat[MAX_PATCHSIZE]; - Handle file; - u32 total; + Handle file; + u32 total; // Open file. if (!R_SUCCEEDED(fileOpen(&file, ARCHIVE_SDMC, cache_path, FS_OPEN_READ))) { @@ -315,25 +320,25 @@ int execb(char* filename) { return 0; // No patches. } - log(" patch: "); - log(cache_path); - log("\n"); + log(" patch: "); + log(cache_path); + log("\n"); - u64 file_size; + u64 file_size; - if (!R_SUCCEEDED(FSFILE_GetSize(file, &file_size))) { + if (!R_SUCCEEDED(FSFILE_GetSize(file, &file_size))) { FSFILE_Close(file); // Read to memory. - return 1; - } + return 1; + } - if (file_size > MAX_PATCHSIZE) { - log(" too large (please report)\n"); + if (file_size > MAX_PATCHSIZE) { + log(" too large (please report)\n"); FSFILE_Close(file); // Read to memory. - return 1; - } + return 1; + } // Read file. if (!R_SUCCEEDED(FSFILE_Read(file, &total, 0, patch_dat, file_size))) { @@ -345,70 +350,70 @@ int execb(char* filename) { FSFILE_Close(file); // Done reading in. - // Set memory. - modes[18].memory = search_mem; - modes[18].size = search_len; + // Set memory. + modes[18].memory = search_mem; + modes[18].size = search_len; - log(" exec\n"); + log(" exec\n"); - uint8_t* patch_mem = (uint8_t*)patch_dat; - patch_len = file_size; + uint8_t *patch_mem = (uint8_t *)patch_dat; + patch_len = file_size; #else - struct system_patch* patch; - uint8_t* patch_mem; - // Read patch to scrap memory. + struct system_patch *patch; + uint8_t *patch_mem; + // Read patch to scrap memory. - FILE* f = fopen(filename, "r"); - size_t len = fsize(f); - fread((uint8_t*)FCRAM_PATCH_LOC, 1, len, f); - fclose(f); + FILE *f = fopen(filename, "r"); + size_t len = fsize(f); + fread((uint8_t *)FCRAM_PATCH_LOC, 1, len, f); + fclose(f); - patch = (struct system_patch*)FCRAM_PATCH_LOC; + patch = (struct system_patch *)FCRAM_PATCH_LOC; - // Make sure various bits are correct. - if (memcmp(patch->magic, "AIDA", 4)) { - // Incorrect magic. - return 1; - } + // Make sure various bits are correct. + if (memcmp(patch->magic, "AIDA", 4)) { + // Incorrect magic. + return 1; + } - patch_mem = (uint8_t*)patch + sizeof(struct system_patch) + (patch->depends * 8) + (patch->titles * 8); - patch_len = patch->size; + patch_mem = (uint8_t *)patch + sizeof(struct system_patch) + (patch->depends * 8) + (patch->titles * 8); + patch_len = patch->size; - if (patch->titles != 0) { - // Not an error, per se, but it means this patch is meant for loader, not us. - // Patches intended for use during boot will always be applied to zero titles. - // We should generate a cache for loader in a file intended for titleid. - uint8_t* title_buf = (uint8_t*)patch + sizeof(struct system_patch); + if (patch->titles != 0) { + // Not an error, per se, but it means this patch is meant for loader, not us. + // Patches intended for use during boot will always be applied to zero titles. + // We should generate a cache for loader in a file intended for titleid. + uint8_t *title_buf = (uint8_t *)patch + sizeof(struct system_patch); - fprintf(stderr, "patch: %s\n", patch->name); + fprintf(stderr, "patch: %s\n", patch->name); - for(uint32_t i=0; i < patch->titles; i++, title_buf += 8) { - // FIXME - This is outputting once per boot. We need to detect and nuke the cache. - char cache_path[] = PATH_LOADER_CACHE "/0000000000000000"; - int len = strlen(cache_path) - 16; + for (uint32_t i = 0; i < patch->titles; i++, title_buf += 8) { + // FIXME - This is outputting once per boot. We need to detect and nuke the cache. + char cache_path[] = PATH_LOADER_CACHE "/0000000000000000"; + int len = strlen(cache_path) - 16; - for(int j = 0; j < 8; j++) { - cache_path[len+(j*2)] = ("0123456789ABCDEF")[(title_buf[j] >> 4) & 0x0f]; - cache_path[len+(j*2)+1] = ("0123456789ABCDEF")[ title_buf[j] & 0x0f]; - } + for (int j = 0; j < 8; j++) { + cache_path[len + (j * 2)] = ("0123456789ABCDEF")[(title_buf[j] >> 4) & 0x0f]; + cache_path[len + (j * 2) + 1] = ("0123456789ABCDEF")[title_buf[j] & 0x0f]; + } - fprintf(stderr, " cache: %s\n", &cache_path[len]); + fprintf(stderr, " cache: %s\n", &cache_path[len]); - char reset = 0xFF; + char reset = 0xFF; - FILE* cache = fopen(cache_path, "w"); - fseek(cache, 0, SEEK_END); - fwrite(patch_mem, 1, patch_len, cache); - fwrite(&reset, 1, 1, cache); - fclose(cache); - // Add to cache. - } + FILE *cache = fopen(cache_path, "w"); + fseek(cache, 0, SEEK_END); + fwrite(patch_mem, 1, patch_len, cache); + fwrite(&reset, 1, 1, cache); + fclose(cache); + // Add to cache. + } - return 0; - } + return 0; + } - fprintf(stderr, "Patch: %s\n", patch->name); + fprintf(stderr, "Patch: %s\n", patch->name); #endif - return exec_bytecode(patch_mem, patch_len, 0); + return exec_bytecode(patch_mem, patch_len, 0); } diff --git a/source/interp.h b/source/interp.h index 9f33612..7ce1a5b 100644 --- a/source/interp.h +++ b/source/interp.h @@ -1,7 +1,7 @@ #ifndef __INTERP_H #define __INTERP_H -uint8_t* execb(char* filename); -int exec_bytecode(uint8_t* bytecode, uint32_t len, int debug); +uint8_t *execb(char *filename); +int exec_bytecode(uint8_t *bytecode, uint32_t len, int debug); #endif diff --git a/source/main.c b/source/main.c index 5f7f906..5fbbfc5 100644 --- a/source/main.c +++ b/source/main.c @@ -13,8 +13,7 @@ main() { if (fmount()) { // Failed to mount SD. Bomb out. - fprintf(BOTTOM_SCREEN, "%pFailed to mount SD card.\n", - COLOR(RED, BLACK)); + fprintf(BOTTOM_SCREEN, "%pFailed to mount SD card.\n", COLOR(RED, BLACK)); } load_config(); // Load configuration. diff --git a/source/menu.c b/source/menu.c index f8efbb4..c8575cb 100644 --- a/source/menu.c +++ b/source/menu.c @@ -19,46 +19,46 @@ static struct options_s options[] = { // Patches. { 0, "\x1b[32;40mPatches\x1b[0m", not_option, 0, 0 }, - { OPTION_SIGPATCH, "Signature Patch", boolean_val, 0, 0 }, + { OPTION_SIGPATCH, "Signature Patch", boolean_val, 0, 0 }, - { OPTION_FIRMPROT, "FIRM Protection", boolean_val, 0, 0 }, + { OPTION_FIRMPROT, "FIRM Protection", boolean_val, 0, 0 }, - { OPTION_LOADER, "System Modules", boolean_val, 0, 0 }, - { OPTION_LOADER_CPU_L2, " CPU - L2 cache", boolean_val, 0, 0 }, + { OPTION_LOADER, "System Modules", boolean_val, 0, 0 }, + { OPTION_LOADER_CPU_L2, " CPU - L2 cache", boolean_val, 0, 0 }, { OPTION_LOADER_CPU_800MHZ, " CPU - 800Mhz", boolean_val, 0, 0 }, - { OPTION_LOADER_LANGEMU, " Language Emulation", boolean_val, 0, 0 }, + { OPTION_LOADER_LANGEMU, " Language Emulation", boolean_val, 0, 0 }, - { OPTION_SERVICES, "Service Replacement", boolean_val, 0, 0 }, + { OPTION_SERVICES, "Service Replacement", boolean_val, 0, 0 }, - { OPTION_AADOWNGRADE, "Anti-anti-downgrade", boolean_val, 0, 0 }, + { OPTION_AADOWNGRADE, "Anti-anti-downgrade", boolean_val, 0, 0 }, // space { 0, "", not_option, 0, 0 }, // Patches. { 0, "\x1b[32;40mPatches (Developer)\x1b[0m", not_option, 0, 0 }, - { OPTION_UNITINFO, "Developer UNITINFO", boolean_val, 0, 0 }, - { OPTION_MEMEXEC, "Disable XN on MPU", boolean_val, 0, 0 }, + { OPTION_UNITINFO, "Developer UNITINFO", boolean_val, 0, 0 }, + { OPTION_MEMEXEC, "Disable XN on MPU", boolean_val, 0, 0 }, { OPTION_REPLACE_ALLOCATED_SVC, "Force service replace", boolean_val, 0, 0 }, -// { OPTION_ARM9THREAD, "ARM9 Thread", boolean_val, 0, 0 }, + // { OPTION_ARM9THREAD, "ARM9 Thread", boolean_val, 0, 0 }, // space { 0, "", not_option, 0, 0 }, // Patches. { 0, "\x1b[32;40mOptions\x1b[0m", not_option, 0, 0 }, - { OPTION_AUTOBOOT, "Autoboot", boolean_val, 0, 0 }, - { OPTION_SILENCE, " Stealth mode", boolean_val, 0, 0 }, - { OPTION_TRACE, "Debug pauses during operation", boolean_val, 0, 0 }, + { OPTION_AUTOBOOT, "Autoboot", boolean_val, 0, 0 }, + { OPTION_SILENCE, " Stealth mode", boolean_val, 0, 0 }, + { OPTION_TRACE, "Debug pauses during operation", boolean_val, 0, 0 }, -// { OPTION_TRANSP_BG, "Black -> transparent", boolean_val, 0, 0 }, -// { OPTION_NO_CLEAR_BG, "Preserve framebuffer", boolean_val, 0, 0 }, + // { OPTION_TRANSP_BG, "Black -> transparent", boolean_val, 0, 0 }, + // { OPTION_NO_CLEAR_BG, "Preserve framebuffer", boolean_val, 0, 0 }, - { OPTION_READ_ME, "Hide `Help`", boolean_val, 0, 0 }, + { OPTION_READ_ME, "Hide `Help`", boolean_val, 0, 0 }, -// { IGNORE_PATCH_DEPS, "Ignore dependencies", boolean_val, 0, 0 }, -// { IGNORE_BROKEN_SHIT, "Allow unsafe options", boolean_val, 0, 0 }, + // { IGNORE_PATCH_DEPS, "Ignore dependencies", boolean_val, 0, 0 }, + // { IGNORE_BROKEN_SHIT, "Allow unsafe options", boolean_val, 0, 0 }, // Sentinel. { -1, "", 0, -1, -1 }, // cursor_min and cursor_max are stored in the last two. @@ -94,7 +94,7 @@ wait_key() } void -header(char* append) +header(char *append) { fprintf(stdout, "\x1b[30;42m.corbenik//%s %s\x1b[0m\n", VERSION, append); } @@ -112,48 +112,46 @@ menu_options() // Figure out the max if unset. if (cursor_max == -1) { - cursor_max=0; - while(options[cursor_max].index != -1) + cursor_max = 0; + while (options[cursor_max].index != -1) ++cursor_max; - while(options[cursor_max].allowed == not_option) - --cursor_max; + while (options[cursor_max].allowed == not_option) + --cursor_max; } // Figure out the max if unset. if (cursor_min == -1) { - cursor_min=0; - while(options[cursor_min].allowed == not_option) + cursor_min = 0; + while (options[cursor_min].allowed == not_option) ++cursor_min; - cursor_y = cursor_min; + cursor_y = cursor_min; } header("A:Enter B:Back DPAD:Nav"); int i = 0; while (options[i].index != -1) { // -1 Sentinel. - if (options[i].allowed == boolean_val) { - if (cursor_y == i) - fprintf(TOP_SCREEN, "\x1b[32m>>\x1b[0m "); - else - fprintf(TOP_SCREEN, " "); - - if (need_redraw) - fprintf(TOP_SCREEN, "[%c] %s\n", - (config.options[options[i].index] ? 'X' : ' '), - options[i].name); - else { - // Yes, this is weird. printf does a large number of extra things we - // don't - // want computed at the moment; this is faster. - putc(TOP_SCREEN, '['); - putc(TOP_SCREEN, (config.options[options[i].index] ? 'X' : ' ')); - putc(TOP_SCREEN, ']'); - putc(TOP_SCREEN, '\n'); - } - } else if (options[i].allowed == not_option) { - fprintf(TOP_SCREEN, "%s\n", options[i].name); - } + if (options[i].allowed == boolean_val) { + if (cursor_y == i) + fprintf(TOP_SCREEN, "\x1b[32m>>\x1b[0m "); + else + fprintf(TOP_SCREEN, " "); + + if (need_redraw) + fprintf(TOP_SCREEN, "[%c] %s\n", (config.options[options[i].index] ? 'X' : ' '), options[i].name); + else { + // Yes, this is weird. printf does a large number of extra things we + // don't + // want computed at the moment; this is faster. + putc(TOP_SCREEN, '['); + putc(TOP_SCREEN, (config.options[options[i].index] ? 'X' : ' ')); + putc(TOP_SCREEN, ']'); + putc(TOP_SCREEN, '\n'); + } + } else if (options[i].allowed == not_option) { + fprintf(TOP_SCREEN, "%s\n", options[i].name); + } ++i; } @@ -164,28 +162,27 @@ menu_options() switch (key) { case BUTTON_UP: cursor_y -= 1; - while(options[cursor_y].allowed == not_option && cursor_y >= cursor_min) - cursor_y--; + while (options[cursor_y].allowed == not_option && cursor_y >= cursor_min) + cursor_y--; break; case BUTTON_DOWN: cursor_y += 1; - while(options[cursor_y].allowed == not_option && cursor_y < cursor_max) - cursor_y++; + while (options[cursor_y].allowed == not_option && cursor_y < cursor_max) + cursor_y++; break; case BUTTON_LEFT: cursor_y -= 5; - while(options[cursor_y].allowed == not_option && cursor_y >= cursor_min) - cursor_y--; + while (options[cursor_y].allowed == not_option && cursor_y >= cursor_min) + cursor_y--; break; case BUTTON_RIGHT: cursor_y += 5; - while(options[cursor_y].allowed == not_option && cursor_y < cursor_max) - cursor_y++; + while (options[cursor_y].allowed == not_option && cursor_y < cursor_max) + cursor_y++; break; case BUTTON_A: // TODO - Value options - config.options[options[cursor_y].index] = - !config.options[options[cursor_y].index]; + config.options[options[cursor_y].index] = !config.options[options[cursor_y].index]; break; case BUTTON_B: need_redraw = 1; @@ -206,17 +203,17 @@ menu_options() int menu_info() { - // This menu requres firm to be loaded. Unfortunately. - load_firms(); // Lazy load! + // This menu requres firm to be loaded. Unfortunately. + load_firms(); // Lazy load! clear_screen(TOP_SCREEN); set_cursor(TOP_SCREEN, 0, 0); header("Any:Back"); - struct firm_signature* native = get_firm_info(firm_loc); - struct firm_signature* agb = get_firm_info(agb_firm_loc); - struct firm_signature* twl = get_firm_info(twl_firm_loc); + struct firm_signature *native = get_firm_info(firm_loc); + struct firm_signature *agb = get_firm_info(agb_firm_loc); + struct firm_signature *twl = get_firm_info(twl_firm_loc); fprintf(stdout, "\nNATIVE_FIRM / Firmware:\n" " Version: %s (%x)\n" @@ -224,8 +221,7 @@ menu_info() " Version: %s (%x)\n" "TWL_FIRM / DSi Firmware:\n" " Version: %s (%x)\n", - native->version_string, native->version, agb->version_string, - agb->version, twl->version_string, twl->version); + native->version_string, native->version, agb->version_string, agb->version, twl->version_string, twl->version); while (1) { if (wait_key() & BUTTON_ANY) break; @@ -302,9 +298,7 @@ menu_main() { set_cursor(TOP_SCREEN, 0, 0); - const char* list[] = { "Options", "Patches", "Info", - "Help/Readme", "Reset", "Power off", - "Boot firmware" }; + const char *list[] = { "Options", "Patches", "Info", "Help/Readme", "Reset", "Power off", "Boot firmware" }; int menu_max = 7; header("A:Enter DPAD:Nav"); @@ -345,9 +339,9 @@ menu_main() cursor_y = 0; if (ret == MENU_BOOTME) return MENU_BOOTME; // Boot meh, damnit! - clear_screen(TOP_SCREEN); - if (ret == MENU_OPTIONS) - cursor_y = cursor_min; // Fixup positions + clear_screen(TOP_SCREEN); + if (ret == MENU_OPTIONS) + cursor_y = cursor_min; // Fixup positions return ret; } diff --git a/source/patch/module.c b/source/patch/module.c index 0db54e0..367f9b9 100644 --- a/source/patch/module.c +++ b/source/patch/module.c @@ -5,22 +5,20 @@ PATCH(modules) { // TODO - load other module cxis here - FILE* f = fopen(PATH_MODULES "/loader.cxi", "r"); + FILE *f = fopen(PATH_MODULES "/loader.cxi", "r"); if (!f) { fprintf(stderr, "Module: loader.cxi not found on FS\n"); return 2; } uint32_t size = fsize(f); - fread((uint8_t*)FCRAM_JUNK_LOCATION, 1, size, f); + fread((uint8_t *)FCRAM_JUNK_LOCATION, 1, size, f); fclose(f); // Look for the section that holds all the sysmodules - firm_section_h* sysmodule_section = NULL; - for (firm_section_h* section = firm_loc->section; - section < firm_loc->section + 4; section++) { - if (section->address == 0x1FF00000 && - section->type == FIRM_TYPE_ARM11) { + firm_section_h *sysmodule_section = NULL; + for (firm_section_h *section = firm_loc->section; section < firm_loc->section + 4; section++) { + if (section->address == 0x1FF00000 && section->type == FIRM_TYPE_ARM11) { sysmodule_section = section; break; } @@ -31,19 +29,16 @@ PATCH(modules) return 1; } - ncch_h* module = (ncch_h*)FCRAM_JUNK_LOCATION; - ncch_h* sysmodule = - (ncch_h*)((uint32_t)firm_loc + sysmodule_section->offset); + ncch_h *module = (ncch_h *)FCRAM_JUNK_LOCATION; + ncch_h *sysmodule = (ncch_h *)((uint32_t)firm_loc + sysmodule_section->offset); // Check if we want to replace an existing sysmodule while (sysmodule->magic == NCCH_MAGIC) { if (memcmp(sysmodule->programID, module->programID, 8) == 0) { // Expand firmware module size if needed to accomodate replacement. if (module->contentSize > sysmodule->contentSize) { - uint32_t need_units = - (module->contentSize - sysmodule->contentSize); - fprintf(stderr, "Module: Would grow %d units but NYI\n", - need_units); + uint32_t need_units = (module->contentSize - sysmodule->contentSize); + fprintf(stderr, "Module: Would grow %d units but NYI\n", need_units); continue; // TODO - so in a nutshell, the reason Luma works is because it @@ -65,17 +60,12 @@ PATCH(modules) // Move the remaining modules closer if (module->contentSize < sysmodule->contentSize) { - fprintf(stderr, "Module: Shrink %d units\n", - sysmodule->contentSize - module->contentSize); + fprintf(stderr, "Module: Shrink %d units\n", sysmodule->contentSize - module->contentSize); int remaining_size = - sysmodule_section->size - - (((uint32_t)sysmodule + sysmodule->contentSize * 0x200) - - ((uint32_t)firm_loc + sysmodule_section->offset)); + sysmodule_section->size - (((uint32_t)sysmodule + sysmodule->contentSize * 0x200) - ((uint32_t)firm_loc + sysmodule_section->offset)); // Sysmodule section size - (End location of this sysmodule - // Sysmodule section) => - memmove((uint8_t*)sysmodule + module->contentSize * 0x200, - (uint8_t*)sysmodule + sysmodule->contentSize * 0x200, - remaining_size); + memmove((uint8_t *)sysmodule + module->contentSize * 0x200, (uint8_t *)sysmodule + sysmodule->contentSize * 0x200, remaining_size); // Move end of section to be adjacent } @@ -84,8 +74,7 @@ PATCH(modules) memcpy(sysmodule, module, module->contentSize * 0x200); break; } - sysmodule = - (ncch_h*)((uintptr_t)sysmodule + sysmodule->contentSize * 0x200); + sysmodule = (ncch_h *)((uintptr_t)sysmodule + sysmodule->contentSize * 0x200); } fprintf(stderr, "Module: injected modules.\n"); diff --git a/source/patch/patch_file.h b/source/patch/patch_file.h index 5772e83..ae6f687 100644 --- a/source/patch/patch_file.h +++ b/source/patch/patch_file.h @@ -16,9 +16,9 @@ #include "../common.h" #include "../interp.h" -exefs_h* get_firm_proc9_exefs(); -exefs_h* get_twl_proc9_exefs(); -exefs_h* get_agb_proc9_exefs(); +exefs_h *get_firm_proc9_exefs(); +exefs_h *get_twl_proc9_exefs(); +exefs_h *get_agb_proc9_exefs(); #define PATCH(name) int patch_##name() #elif MODULE diff --git a/source/patch/svc.c b/source/patch/svc.c index e3b01d8..73f9f92 100644 --- a/source/patch/svc.c +++ b/source/patch/svc.c @@ -9,88 +9,79 @@ // Please note that the actual code for services is in `external/service`. -uint32_t* -getSvcAndExceptions(uint8_t* pos, uint32_t size, uint32_t** exceptionsPage) +uint32_t * +getSvcAndExceptions(uint8_t *pos, uint32_t size, uint32_t **exceptionsPage) { uint8_t pattern[] = { 0x00, 0xB0, 0x9C, 0xE5 }; // cpsid aif - *exceptionsPage = (uint32_t*)memfind(pos, size, pattern, 4) - 0xB; + *exceptionsPage = (uint32_t *)memfind(pos, size, pattern, 4) - 0xB; - uint32_t svcOffset = - (-(((*exceptionsPage)[2] & 0xFFFFFF) << 2) & (0xFFFFFF << 2)) - - 8; // Branch offset + 8 for prefetch - uint32_t* svcTable = (uint32_t*)(pos + - *(uint32_t*)(pos + 0xFFFF0008 - svcOffset - - 0xFFF00000 + 8) - - 0xFFF00000); // SVC handler address + uint32_t svcOffset = (-(((*exceptionsPage)[2] & 0xFFFFFF) << 2) & (0xFFFFFF << 2)) - 8; // Branch offset + 8 for prefetch + uint32_t *svcTable = (uint32_t *)(pos + *(uint32_t *)(pos + 0xFFFF0008 - svcOffset - 0xFFF00000 + 8) - 0xFFF00000); // SVC handler address while (*svcTable) svcTable++; // Look for SVC0 (NULL) return svcTable; } -uint32_t* freeSpace = NULL; +uint32_t *freeSpace = NULL; PATCH(services) { // Make sure svcBackdoor is there. - uint8_t* arm11Section1 = (uint8_t*)firm_loc + firm_loc->section[1].offset; - uint32_t* exceptionsPage; - uint32_t* svcTable = getSvcAndExceptions( - arm11Section1, firm_loc->section[1].size, &exceptionsPage); + uint8_t *arm11Section1 = (uint8_t *)firm_loc + firm_loc->section[1].offset; + uint32_t *exceptionsPage; + uint32_t *svcTable = getSvcAndExceptions(arm11Section1, firm_loc->section[1].size, &exceptionsPage); fprintf(stderr, "Svc: table at %x\n", (uint32_t)svcTable); char str[] = PATH_SERVICES "/00.bin"; - char* at = str + (strlen(str) - 6); - // FIXME - This is really slow. Some way to optimize it? + char *at = str + (strlen(str) - 6); + // FIXME - This is really slow. Some way to optimize it? for (uint32_t i = 0; i <= 0xf; i++) { - // Get string for svc. - at[0] = ("0123456789abcdef")[i]; + // Get string for svc. + at[0] = ("0123456789abcdef")[i]; - for (uint32_t j = 0; j < 0xf; j++) { - // This is just hexdump. Nothing complicated. - at[1] = ("0123456789abcdef")[j]; + for (uint32_t j = 0; j < 0xf; j++) { + // This is just hexdump. Nothing complicated. + at[1] = ("0123456789abcdef")[j]; - FILE* data = fopen(str, "r"); - if (!data) - continue; // No file for svc. Move on. + FILE *data = fopen(str, "r"); + if (!data) + continue; // No file for svc. Move on. - uint32_t svc = (i << 4) & j; + uint32_t svc = (i << 4) & j; - // Refuse to replace non-NULL services unless the user says to. - if (svcTable[svc] && !config.options[OPTION_REPLACE_ALLOCATED_SVC]) { - fclose(data); - fprintf(stderr, "Svc: %x non-null, moving on\n", i); - continue; - } + // Refuse to replace non-NULL services unless the user says to. + if (svcTable[svc] && !config.options[OPTION_REPLACE_ALLOCATED_SVC]) { + fclose(data); + fprintf(stderr, "Svc: %x non-null, moving on\n", i); + continue; + } - uint32_t size = fsize(data); - uint8_t* read_to = (void*)FCRAM_JUNK_LOCATION; + uint32_t size = fsize(data); + uint8_t *read_to = (void *)FCRAM_JUNK_LOCATION; - fprintf(stderr, "Svc: %s, %d bytes\n", at, size); + fprintf(stderr, "Svc: %s, %d bytes\n", at, size); - fread(read_to, 1, size, data); + fread(read_to, 1, size, data); - fclose(data); + fclose(data); - if (!freeSpace) { - for (freeSpace = exceptionsPage; *freeSpace != 0xFFFFFFFF; - freeSpace++) - ; - } + if (!freeSpace) { + for (freeSpace = exceptionsPage; *freeSpace != 0xFFFFFFFF; freeSpace++) + ; + } - fprintf(stderr, "Svc: Copy code to %x\n", (uint32_t)freeSpace); + fprintf(stderr, "Svc: Copy code to %x\n", (uint32_t)freeSpace); - memcpy(freeSpace, read_to, size); - svcTable[svc] = - 0xFFFF0000 + ((uint8_t*)freeSpace - (uint8_t*)exceptionsPage); + memcpy(freeSpace, read_to, size); + svcTable[svc] = 0xFFFF0000 + ((uint8_t *)freeSpace - (uint8_t *)exceptionsPage); - freeSpace += - size; // We keep track of this because there's more than 7B free. + freeSpace += size; // We keep track of this because there's more than 7B free. - fprintf(stderr, "Svc: entry set as %x\n", svcTable[svc]); - } + fprintf(stderr, "Svc: entry set as %x\n", svcTable[svc]); + } } return 0; diff --git a/source/patch_format.h b/source/patch_format.h index e699071..2f3c7d8 100644 --- a/source/patch_format.h +++ b/source/patch_format.h @@ -9,21 +9,18 @@ #define NATIVE_FIRM_TITLEID 0x0004013800000002llu // NATIVE_FIRM #define NATIVE_FIRM_N3DS_TITLEID 0x0004013820000002llu // NATIVE_FIRM, n3ds -#define TWL_FIRM_TITLEID 0x0004013000000102llu // TWL_FIRM (DSi Firmware) -#define TWL_FIRM_N3DS_TITLEID \ - 0x0004013020000102llu // TWL_FIRM, n3ds (DSi Firmware) +#define TWL_FIRM_TITLEID 0x0004013000000102llu // TWL_FIRM (DSi Firmware) +#define TWL_FIRM_N3DS_TITLEID 0x0004013020000102llu // TWL_FIRM, n3ds (DSi Firmware) #define AGB_FIRM_TITLEID 0x0004013000000202llu // AGB_FIRM (GBA firmware) #define AGB_FIRM_N3DS_TITLEID 0x0004013020000202llu // AGB_FIRM (GBA firmware) #define LOADER_TITLEID 0x0004013000001302llu // Loader is handled specially. -#define PATCH_MANDATORY (1 << 0) // Patch must be applied for successful boot. -#define PATCH_FAIL_ABORT \ - (1 << 1) // If patch fails to apply, abort and show an error. -#define PATCH_DISABLED \ - (1 << 2) // Do not allow changing this patch's status. With PATCH_MANDATORY, - // this prevents disabling it. +#define PATCH_MANDATORY (1 << 0) // Patch must be applied for successful boot. +#define PATCH_FAIL_ABORT (1 << 1) // If patch fails to apply, abort and show an error. +#define PATCH_DISABLED (1 << 2) // Do not allow changing this patch's status. With PATCH_MANDATORY, + // this prevents disabling it. // You can redefine this in the Makefile, if you'd like. // Recommended names for being silly: @@ -45,14 +42,11 @@ #define PATH_LOADER_CACHE PATH_CFW "/lib/loader" // Cached patch bytecode for loader. -#define PATH_TEMP \ - PATH_CFW "/tmp" // Files that are transient (user can delete them and they - // will be regenerated) -#define PATH_KEYS \ - PATH_CFW "/share/keys" // Keyfiles will be loaded from this dir, and - // additionally the root if not found. -#define PATH_EXEFS \ - PATH_CFW "/lib/exe" // ExeFS overrides, named like '.exefs' +#define PATH_TEMP PATH_CFW "/tmp" // Files that are transient (user can delete them and they + // will be regenerated) +#define PATH_KEYS PATH_CFW "/share/keys" // Keyfiles will be loaded from this dir, and + // additionally the root if not found. +#define PATH_EXEFS PATH_CFW "/lib/exe" // ExeFS overrides, named like '.exefs' #define PATH_NATIVE_F PATH_FIRMWARES "/native" #define PATH_AGB_F PATH_FIRMWARES "/agb" @@ -75,9 +69,8 @@ #define PATH_SLOT0X11KEY96 PATH_KEYS "/11.key" -#define PATH_ALT_SLOT0X11KEY96 \ - "/slot0x11key96.bin" // Hey, your perrogative, buddy. I like cleaned up - // paths. +#define PATH_ALT_SLOT0X11KEY96 "/slot0x11key96.bin" // Hey, your perrogative, buddy. I like cleaned up + // paths. #define PATCH_FLAG_REQUIRE (1 << 0) // Force enable patch unless 'Unsafe Options' is checked. #define PATCH_FLAG_DEVMODE (1 << 1) // Require 'Developer Options' to be checked. @@ -86,23 +79,23 @@ // Structure of a patch file. struct system_patch { - char magic[4]; // "AIDA" for shits and giggles and because we like .hack. - uint8_t version; // Version of the patch itself. + char magic[4]; // "AIDA" for shits and giggles and because we like .hack. + uint8_t version; // Version of the patch itself. - char name[64]; // User-readable name for patch in menu. - char desc[256]; // User-readable description for patch in menu. - uint64_t uuid; // Unique ID for patch. Each unique patch should provide - // a unique ID. + char name[64]; // User-readable name for patch in menu. + char desc[256]; // User-readable description for patch in menu. + uint64_t uuid; // Unique ID for patch. Each unique patch should provide + // a unique ID. - uint32_t flags; // Extra flags for patch. + uint32_t flags; // Extra flags for patch. - uint32_t titles; // How many titles this patch should be applied to (listed later) + uint32_t titles; // How many titles this patch should be applied to (listed later) - uint32_t depends; // How many deps there are. + uint32_t depends; // How many deps there are. - uint32_t size; // Size of the patch bytecode in bytes. + uint32_t size; // Size of the patch bytecode in bytes. - // This stuff needs to be read not as part of the struct, but is technically part of it. + // This stuff needs to be read not as part of the struct, but is technically part of it. // uint64_t tids[titles] // TitleIDs. // uint64_t deps[depends] // Dependencies as uuid refs. diff --git a/source/patcher.c b/source/patcher.c index 4f2d0ad..f4dbb69 100644 --- a/source/patcher.c +++ b/source/patcher.c @@ -28,21 +28,21 @@ wait() int patch_firm_all() { - // Remove cache - f_unlink(PATH_LOADER_CACHE); - f_mkdir(PATH_LOADER_CACHE); - - // Loader only uses TID cache bytecode, so run through these. - execb(PATH_PATCHES "/block_nim_update.vco"); - execb(PATH_PATCHES "/block_eshop_update.vco"); - execb(PATH_PATCHES "/block_cart_update.vco"); - execb(PATH_PATCHES "/errdisp.vco"); - execb(PATH_PATCHES "/friends_ver.vco"); - execb(PATH_PATCHES "/mset_str.vco"); -// execb(PATH_PATCHES "/ns_force_menu.vco"); - execb(PATH_PATCHES "/regionfree.vco"); - execb(PATH_PATCHES "/secinfo_sigs.vco"); - execb(PATH_PATCHES "/ro_sigs.vco"); + // Remove cache + f_unlink(PATH_LOADER_CACHE); + f_mkdir(PATH_LOADER_CACHE); + + // Loader only uses TID cache bytecode, so run through these. + execb(PATH_PATCHES "/block_nim_update.vco"); + execb(PATH_PATCHES "/block_eshop_update.vco"); + execb(PATH_PATCHES "/block_cart_update.vco"); + execb(PATH_PATCHES "/errdisp.vco"); + execb(PATH_PATCHES "/friends_ver.vco"); + execb(PATH_PATCHES "/mset_str.vco"); + // execb(PATH_PATCHES "/ns_force_menu.vco"); + execb(PATH_PATCHES "/regionfree.vco"); + execb(PATH_PATCHES "/secinfo_sigs.vco"); + execb(PATH_PATCHES "/ro_sigs.vco"); // Replace loader? if (config.options[OPTION_LOADER]) { @@ -50,7 +50,7 @@ patch_firm_all() abort("Fatal. Service patch has failed."); } // This requires OPTION_SIGPATCH. - wait(); + wait(); } // Inject services? @@ -58,7 +58,7 @@ patch_firm_all() if (patch_services()) { abort("Fatal. Service patch has failed."); } - wait(); + wait(); } // Use ARM9 hook thread? @@ -66,50 +66,50 @@ patch_firm_all() // Yes. // FIXME - NYI - wait(); + wait(); } // Use builtin signature patcher? if (config.options[OPTION_SIGPATCH]) { // TODO - Patch menu. This is okay-ish for now. - if(execb(PATH_PATCHES "/sig.vco")) { + if (execb(PATH_PATCHES "/sig.vco")) { abort("Fatal. Sigpatch has failed."); } - wait(); + wait(); } if (config.options[OPTION_FIRMPROT]) { - if(execb(PATH_PATCHES "/prot.vco")) { + if (execb(PATH_PATCHES "/prot.vco")) { abort("Fatal. Firmprot has failed."); } - wait(); + wait(); } - if (config.options[OPTION_AADOWNGRADE]) { - if(execb(PATH_PATCHES "/aadowngrade.vco")) { + if (config.options[OPTION_AADOWNGRADE]) { + if (execb(PATH_PATCHES "/aadowngrade.vco")) { abort("Anti-anti-downgrade patch failed."); } - wait(); - } + wait(); + } - if (config.options[OPTION_UNITINFO]) { - if(execb(PATH_PATCHES "/unitinfo.vco")) { + if (config.options[OPTION_UNITINFO]) { + if (execb(PATH_PATCHES "/unitinfo.vco")) { abort("UNITINFO patch failed."); } - wait(); - } + wait(); + } - if (config.options[OPTION_MEMEXEC]) { - if(execb(PATH_PATCHES "/memexec.vco")) { + if (config.options[OPTION_MEMEXEC]) { + if (execb(PATH_PATCHES "/memexec.vco")) { abort("MPU execution patch failed."); } - wait(); - } + wait(); + } return 0; } diff --git a/source/std/abort.h b/source/std/abort.h index 6b74d4c..9bb233b 100644 --- a/source/std/abort.h +++ b/source/std/abort.h @@ -6,11 +6,11 @@ int menu_poweroff(); uint32_t wait_key(); -#define abort(x...) \ - { \ - fprintf(stderr, x); \ - wait_key(); \ - menu_poweroff(); \ +#define abort(x...) \ + { \ + fprintf(stderr, x); \ + wait_key(); \ + menu_poweroff(); \ } #endif diff --git a/source/std/draw.c b/source/std/draw.c index 14a09f6..d8bff70 100644 --- a/source/std/draw.c +++ b/source/std/draw.c @@ -40,7 +40,7 @@ static uint32_t colors[16] = { }; void -clear_disp(uint8_t* screen) +clear_disp(uint8_t *screen) { if (screen == TOP_SCREEN) screen = framebuffers->top_left; @@ -56,7 +56,7 @@ clear_disp(uint8_t* screen) #ifdef BUFFER void -clear_text(uint8_t* screen) +clear_text(uint8_t *screen) { if (screen == TOP_SCREEN) screen = framebuffers->top_left; @@ -78,7 +78,7 @@ clear_text(uint8_t* screen) #endif void -clear_screen(uint8_t* screen) +clear_screen(uint8_t *screen) { clear_disp(screen); #ifdef BUFFER @@ -87,7 +87,7 @@ clear_screen(uint8_t* screen) } void -set_cursor(void* channel, unsigned int x, unsigned int y) +set_cursor(void *channel, unsigned int x, unsigned int y) { if (channel == TOP_SCREEN) { top_cursor_x = x; @@ -106,9 +106,7 @@ clear_screens() } void -draw_character(uint8_t* screen, const char character, const unsigned int buf_x, - const unsigned int buf_y, const uint32_t color_fg, - const uint32_t color_bg) +draw_character(uint8_t *screen, const char character, const unsigned int buf_x, const unsigned int buf_y, const uint32_t color_fg, const uint32_t color_bg) { if (!isprint(character)) return; // Don't output non-printables. @@ -132,9 +130,7 @@ draw_character(uint8_t* screen, const char character, const unsigned int buf_x, unsigned char char_pos = font[character * 8 + y]; for (int x = 7; x >= 0; x--) { - int screen_pos = - (pos_x * height * 3 + (height - y - pos_y - 1) * 3) + - (7 - x) * 3 * height; + int screen_pos = (pos_x * height * 3 + (height - y - pos_y - 1) * 3) + (7 - x) * 3 * height; screen[screen_pos] = color_bg >> 16; screen[screen_pos + 1] = color_bg >> 8; @@ -160,7 +156,7 @@ shut_up() } void -putc(void* buf, const int c) +putc(void *buf, const int c) { if (buf == stdout || buf == stderr) { if (kill_output) @@ -168,15 +164,15 @@ putc(void* buf, const int c) unsigned int width = 0; _UNUSED unsigned int height = 0; - unsigned int* cursor_x = NULL; - unsigned int* cursor_y = NULL; + unsigned int *cursor_x = NULL; + unsigned int *cursor_y = NULL; #ifdef BUFFER - char* colorbuf = NULL; - char* strbuf = NULL; + char *colorbuf = NULL; + char *strbuf = NULL; #else - uint8_t* screen = NULL; + uint8_t *screen = NULL; #endif - unsigned char* color = NULL; + unsigned char *color = NULL; if (buf == TOP_SCREEN) { width = TEXT_TOP_WIDTH; @@ -216,8 +212,7 @@ putc(void* buf, const int c) memset(&strbuf[y * width], 0, width); memset(&colorbuf[y * width], 0, width); strncpy(&strbuf[y * width], &strbuf[(y + 1) * width], width); - strncpy(&colorbuf[y * width], &colorbuf[(y + 1) * width], - width); + strncpy(&colorbuf[y * width], &colorbuf[(y + 1) * width], width); } memset(&strbuf[(height - 1) * width], 0, width); memset(&colorbuf[(height - 1) * width], 0, width); @@ -226,14 +221,14 @@ putc(void* buf, const int c) cursor_y[0]--; #else - clear_disp(buf); - cursor_x[0] = 0; - cursor_y[0] = 0; + clear_disp(buf); + cursor_x[0] = 0; + cursor_y[0] = 0; /* uint32_t col = SCREEN_TOP_HEIGHT * SCREEN_DEPTH; - uint32_t one_c = 8 * SCREEN_DEPTH; - for (unsigned int x = 0; x < width * 8; x++) { - memmove(&screen[x * col + one_c], &screen[x * col + one_c], col - one_c); - } */ + uint32_t one_c = 8 * SCREEN_DEPTH; + for (unsigned int x = 0; x < width * 8; x++) { + memmove(&screen[x * col + one_c], &screen[x * col + one_c], col - one_c); + } */ #endif } @@ -254,13 +249,12 @@ putc(void* buf, const int c) colorbuf[cursor_y[0] * width + cursor_x[0]] = *color; if (cursor_x[0] + 1 < width) { - strbuf[cursor_y[0] * width + cursor_x[0] + 1] = - 0; // Terminate. + strbuf[cursor_y[0] * width + cursor_x[0] + 1] = 0; // Terminate. colorbuf[cursor_y[0] * width + cursor_x[0] + 1] = 0; } #else - draw_character(screen, c, cursor_x[0], cursor_y[0], colors[(*color >> 4) & 0xF], colors[*color & 0xF]); + draw_character(screen, c, cursor_x[0], cursor_y[0], colors[(*color >> 4) & 0xF], colors[*color & 0xF]); #endif cursor_x[0]++; @@ -269,17 +263,17 @@ putc(void* buf, const int c) } } else { // FILE*, not stdin or stdout. - fwrite(&c, 1, 1, (FILE*)buf); + fwrite(&c, 1, 1, (FILE *)buf); } } void -puts(void* buf, const char* string) +puts(void *buf, const char *string) { if ((buf == stdout || buf == stderr) && kill_output) return; - char* ref = (char*)string; + char *ref = (char *)string; while (*ref != '\0') { putc(buf, *ref); @@ -288,7 +282,7 @@ puts(void* buf, const char* string) } void -put_int64(void* channel, int64_t n, int length) +put_int64(void *channel, int64_t n, int length) { char conv[32], out[32]; memset(conv, 0, 32); @@ -319,7 +313,7 @@ put_int64(void* channel, int64_t n, int length) } void -put_uint64(void* channel, uint64_t n, int length) +put_uint64(void *channel, uint64_t n, int length) { char conv[32], out[32]; memset(conv, 0, 32); @@ -341,9 +335,9 @@ put_uint64(void* channel, uint64_t n, int length) } void -put_hexdump(void* channel, unsigned int num) +put_hexdump(void *channel, unsigned int num) { - uint8_t* num_8 = (uint8_t*)# + uint8_t *num_8 = (uint8_t *)# for (int i = 3; i >= 0; i--) { uint8_t high = (num_8[i] >> 4) & 0xf; uint8_t low = num_8[i] & 0xf; @@ -354,19 +348,19 @@ put_hexdump(void* channel, unsigned int num) } void -put_uint(void* channel, unsigned int n, int length) +put_uint(void *channel, unsigned int n, int length) { put_uint64(channel, n, length); } void -put_int(void* channel, int n, int length) +put_int(void *channel, int n, int length) { put_int64(channel, n, length); } void -fflush(void* channel) +fflush(void *channel) { if (channel == TOP_SCREEN) { #ifdef BUFFER @@ -378,12 +372,9 @@ fflush(void* channel) char c = text_buffer_top[y * TEXT_TOP_WIDTH + x]; if (c == 0) break; - uint32_t color_fg = colors[( - (color_buffer_top[y * TEXT_TOP_WIDTH + x] >> 4) & 0x0f)]; - uint32_t color_bg = - colors[(color_buffer_top[y * TEXT_TOP_WIDTH + x] & 0x0f)]; - draw_character(framebuffers->top_left, c, x, y, color_fg, - color_bg); + uint32_t color_fg = colors[((color_buffer_top[y * TEXT_TOP_WIDTH + x] >> 4) & 0x0f)]; + uint32_t color_bg = colors[(color_buffer_top[y * TEXT_TOP_WIDTH + x] & 0x0f)]; + draw_character(framebuffers->top_left, c, x, y, color_fg, color_bg); } } #endif @@ -397,40 +388,35 @@ fflush(void* channel) char c = text_buffer_bottom[y * TEXT_BOTTOM_WIDTH + x]; if (c == 0) break; - uint32_t color_fg = colors[( - (color_buffer_bottom[y * TEXT_BOTTOM_WIDTH + x] >> 4) & - 0x0f)]; - uint32_t color_bg = colors[( - color_buffer_bottom[y * TEXT_BOTTOM_WIDTH + x] & 0x0f)]; - draw_character(framebuffers->bottom, c, x, y, color_fg, - color_bg); + uint32_t color_fg = colors[((color_buffer_bottom[y * TEXT_BOTTOM_WIDTH + x] >> 4) & 0x0f)]; + uint32_t color_bg = colors[(color_buffer_bottom[y * TEXT_BOTTOM_WIDTH + x] & 0x0f)]; + draw_character(framebuffers->bottom, c, x, y, color_fg, color_bg); } } #endif } else { - f_sync(&(((FILE*)channel)->handle)); // Sync to disk. + f_sync(&(((FILE *)channel)->handle)); // Sync to disk. } } int disable_format = 0; void -vfprintf(void* channel, const char* format, va_list ap) +vfprintf(void *channel, const char *format, va_list ap) { if ((channel == stdout || channel == stderr) && kill_output) return; - char* ref = (char*)format; + char *ref = (char *)format; - unsigned char* color; + unsigned char *color; if (channel == TOP_SCREEN) color = &color_top; else if (channel == TOP_SCREEN) color = &color_bottom; while (*ref != '\0') { - if (*ref == 0x1B && *(++ref) == '[' && - (channel == stdout || channel == stderr)) { + if (*ref == 0x1B && *(++ref) == '[' && (channel == stdout || channel == stderr)) { ansi_codes: // Ansi escape code. ++ref; @@ -495,15 +481,15 @@ vfprintf(void* channel, const char* format, va_list ap) break; case 's': // Using puts isn't correct here... - disable_format = 1; // Disable format strings. - fprintf(channel, va_arg(ap, char*)); - disable_format = 0; // Reenable. + disable_format = 1; // Disable format strings. + fprintf(channel, va_arg(ap, char *)); + disable_format = 0; // Reenable. break; case 'c': putc(channel, va_arg(ap, int)); break; case 'p': - puts(channel, va_arg(ap, char*)); + puts(channel, va_arg(ap, char *)); break; case '%': putc(channel, '%'); @@ -533,7 +519,7 @@ vfprintf(void* channel, const char* format, va_list ap) } void -fprintf(void* channel, const char* format, ...) +fprintf(void *channel, const char *format, ...) { // The output suppression is in all the functions to minimize overhead. // Function calls and format conversions take time and we don't just want diff --git a/source/std/draw.h b/source/std/draw.h index 34212aa..f3c7641 100644 --- a/source/std/draw.h +++ b/source/std/draw.h @@ -15,8 +15,7 @@ #define SCREEN_DEPTH 3 #define SCREEN_TOP_SIZE (SCREEN_TOP_WIDTH * SCREEN_TOP_HEIGHT * SCREEN_DEPTH) -#define SCREEN_BOTTOM_SIZE \ - (SCREEN_BOTTOM_WIDTH * SCREEN_BOTTOM_HEIGHT * SCREEN_DEPTH) +#define SCREEN_BOTTOM_SIZE (SCREEN_BOTTOM_WIDTH * SCREEN_BOTTOM_HEIGHT * SCREEN_DEPTH) #define CHARA_HEIGHT 8 #define CHARA_WIDTH 8 @@ -41,32 +40,31 @@ enum screen _UNUSED static struct framebuffers { - uint8_t* top_left; - uint8_t* top_right; - uint8_t* bottom; -}* framebuffers = (struct framebuffers*)0x23FFFE00; + uint8_t *top_left; + uint8_t *top_right; + uint8_t *bottom; +} *framebuffers = (struct framebuffers *)0x23FFFE00; // This is marked unused since it occurs in all files. #define TOP_FB framebuffers->top_left #define BOTTOM_FB framebuffers->bottom -void clear_screen(uint8_t* screen); +void clear_screen(uint8_t *screen); void clear_screens(); -void draw_character(uint8_t* screen, const char character, - const unsigned int pos_x, const unsigned int pos_y, - const uint32_t color_fg, const uint32_t color_bg); +void draw_character(uint8_t *screen, const char character, const unsigned int pos_x, const unsigned int pos_y, const uint32_t color_fg, + const uint32_t color_bg); -#define TOP_SCREEN ((void*)0) -#define BOTTOM_SCREEN ((void*)2) +#define TOP_SCREEN ((void *)0) +#define BOTTOM_SCREEN ((void *)2) #define stdout TOP_SCREEN #define stderr BOTTOM_SCREEN -void putc(void* buf, const int c); -void puts(void* buf, const char* string); -void fflush(void* channel); +void putc(void *buf, const int c); +void puts(void *buf, const char *string); +void fflush(void *channel); -void set_cursor(void* channel, unsigned int x, unsigned int y); +void set_cursor(void *channel, unsigned int x, unsigned int y); // Like printf. Supports the following format specifiers: // %s - char* @@ -81,7 +79,7 @@ void set_cursor(void* channel, unsigned int x, unsigned int y); // Formats are also supported (but are subject to replacement) // %p - unsigned char, changes color of text (will be replaced with ANSI codes // eventually) -void fprintf(void* channel, const char* format, ...); +void fprintf(void *channel, const char *format, ...); #define BLACK 0 #define BLUE 1 diff --git a/source/std/font.h b/source/std/font.h index 259d65a..7b2cfa7 100644 --- a/source/std/font.h +++ b/source/std/font.h @@ -2,177 +2,85 @@ #define __STD_FONT_H static const unsigned char font[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, - 0xbd, 0x99, 0x81, 0x7e, 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e, - 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x10, 0x38, 0x7c, 0xfe, - 0x7c, 0x38, 0x10, 0x00, 0x3c, 0x3c, 0x18, 0xff, 0xe7, 0x18, 0x3c, 0x00, - 0x10, 0x38, 0x7c, 0xfe, 0xee, 0x10, 0x38, 0x00, 0x00, 0x00, 0x18, 0x3c, - 0x3c, 0x18, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, - 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0xff, 0xc3, 0x99, 0xbd, - 0xbd, 0x99, 0xc3, 0xff, 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78, - 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x08, 0x0c, 0x0a, 0x0a, - 0x08, 0x78, 0xf0, 0x00, 0x18, 0x14, 0x1a, 0x16, 0x72, 0xe2, 0x0e, 0x1c, - 0x10, 0x54, 0x38, 0xee, 0x38, 0x54, 0x10, 0x00, 0x80, 0xe0, 0xf8, 0xfe, - 0xf8, 0xe0, 0x80, 0x00, 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00, - 0x18, 0x3c, 0x5a, 0x18, 0x5a, 0x3c, 0x18, 0x00, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x00, 0x66, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x00, - 0x1c, 0x22, 0x38, 0x44, 0x44, 0x38, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x7e, 0x7e, 0x7e, 0x00, 0x18, 0x3c, 0x5a, 0x18, 0x5a, 0x3c, 0x18, 0x7e, - 0x18, 0x3c, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, - 0x5a, 0x3c, 0x18, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, - 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, - 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x24, 0x42, 0xff, 0x42, 0x24, 0x00, 0x00, - 0x00, 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, - 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00, 0x6c, 0x24, 0x24, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, - 0x10, 0x7c, 0xd0, 0x7c, 0x16, 0xfc, 0x10, 0x00, 0x00, 0x66, 0xac, 0xd8, - 0x36, 0x6a, 0xcc, 0x00, 0x38, 0x4c, 0x38, 0x78, 0xce, 0xcc, 0x7a, 0x00, - 0x30, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x60, - 0x60, 0x30, 0x18, 0x00, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00, - 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x30, 0x30, 0xfc, - 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x20, - 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x00, - 0x7c, 0xce, 0xde, 0xf6, 0xe6, 0xe6, 0x7c, 0x00, 0x18, 0x38, 0x78, 0x18, - 0x18, 0x18, 0x7e, 0x00, 0x7c, 0xc6, 0x06, 0x1c, 0x70, 0xc6, 0xfe, 0x00, - 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x1c, 0x3c, 0x6c, 0xcc, - 0xfe, 0x0c, 0x1e, 0x00, 0xfe, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, - 0x7c, 0xc6, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00, 0xfe, 0xc6, 0x0c, 0x18, - 0x30, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00, - 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x20, - 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, - 0x00, 0x7e, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00, - 0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00, 0x7c, 0x82, 0x9e, 0xa6, - 0x9e, 0x80, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, - 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, - 0xc0, 0xc6, 0x7c, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, - 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0xfe, 0x62, 0x68, 0x78, - 0x68, 0x60, 0xf0, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xce, 0xc6, 0x7e, 0x00, - 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x3c, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x3c, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, - 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0xf0, 0x60, 0x60, 0x60, - 0x62, 0x66, 0xfe, 0x00, 0x82, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0x00, - 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0x7c, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, - 0x7c, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x06, 0xfc, 0x66, 0x66, 0x7c, - 0x66, 0x66, 0xe6, 0x00, 0x7c, 0xc6, 0xc0, 0x7c, 0x06, 0xc6, 0x7c, 0x00, - 0x7e, 0x5a, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, - 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x82, 0x00, 0xc6, 0x6c, 0x38, 0x38, - 0x38, 0x6c, 0xc6, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00, - 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00, 0x78, 0x60, 0x60, 0x60, - 0x60, 0x60, 0x78, 0x00, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00, - 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x10, 0x38, 0x6c, 0xc6, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x30, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, - 0x7c, 0xcc, 0x76, 0x00, 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00, 0x1c, 0x0c, 0x0c, 0x7c, - 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, - 0x1c, 0x36, 0x30, 0x78, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x76, 0xcc, - 0xcc, 0x7c, 0x0c, 0x78, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00, - 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x0c, 0x00, 0x1c, - 0x0c, 0x0c, 0xcc, 0x78, 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00, - 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0xcc, 0xfe, - 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0xdc, 0x66, - 0x66, 0x7c, 0x60, 0xf0, 0x00, 0x00, 0x7c, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e, - 0x00, 0x00, 0xde, 0x76, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x7c, 0xc0, - 0x7c, 0x06, 0x7c, 0x00, 0x10, 0x30, 0xfc, 0x30, 0x30, 0x34, 0x18, 0x00, - 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0xc6, 0xc6, - 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, - 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0xcc, 0xcc, - 0xcc, 0x7c, 0x0c, 0xf8, 0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00, - 0x0e, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0e, 0x00, 0x18, 0x18, 0x18, 0x00, - 0x18, 0x18, 0x18, 0x00, 0xe0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xe0, 0x00, - 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, - 0xc6, 0xc6, 0xfe, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, - 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x0e, 0x10, 0x7c, 0xc6, - 0xfe, 0xc0, 0x7c, 0x00, 0x7c, 0x82, 0x38, 0x0c, 0x7c, 0xcc, 0x76, 0x00, - 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, 0xe0, 0x10, 0x78, 0x0c, - 0x7c, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, - 0x00, 0x00, 0x7c, 0xc0, 0xc0, 0x7c, 0x18, 0x70, 0x7c, 0x82, 0x7c, 0xc6, - 0xfe, 0xc0, 0x7c, 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, - 0xe0, 0x10, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, 0x66, 0x00, 0x38, 0x18, - 0x18, 0x18, 0x3c, 0x00, 0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0xe0, 0x10, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0xc6, 0x00, 0x7c, 0xc6, - 0xfe, 0xc6, 0xc6, 0x00, 0x38, 0x38, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, - 0x0e, 0x10, 0xfe, 0x60, 0x78, 0x60, 0xfe, 0x00, 0x00, 0x00, 0x7c, 0x12, - 0x7e, 0xd0, 0x7e, 0x00, 0x7e, 0xc8, 0xc8, 0xfe, 0xc8, 0xc8, 0xce, 0x00, - 0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xc6, 0x00, 0x7c, 0xc6, - 0xc6, 0xc6, 0x7c, 0x00, 0xe0, 0x10, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, - 0x7c, 0x82, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0xe0, 0x10, 0xcc, 0xcc, - 0xcc, 0xcc, 0x76, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8, - 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xc6, 0x00, 0xc6, 0xc6, - 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x7c, 0xd6, 0xd0, 0xd6, 0x7c, 0x18, 0x00, - 0x38, 0x6c, 0x60, 0xf0, 0x60, 0xf2, 0xdc, 0x00, 0x66, 0x3c, 0x18, 0x7e, - 0x18, 0x7e, 0x18, 0x00, 0xf8, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0x06, - 0x0e, 0x1b, 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70, 0x0e, 0x10, 0x78, 0x0c, - 0x7c, 0xcc, 0x76, 0x00, 0x0e, 0x10, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x0e, 0x10, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x0e, 0x10, 0xcc, 0xcc, - 0xcc, 0xcc, 0x76, 0x00, 0x66, 0x98, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x66, 0x98, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0x00, 0x38, 0x0c, 0x3c, 0x34, - 0x00, 0x7e, 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, - 0x30, 0x00, 0x30, 0x60, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfc, - 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00, - 0xc0, 0xc8, 0xd0, 0xfe, 0x46, 0x8c, 0x1e, 0x00, 0xc0, 0xc8, 0xd0, 0xec, - 0x5c, 0xbe, 0x0c, 0x00, 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00, - 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, - 0x6c, 0xd8, 0x00, 0x00, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, - 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0xdb, 0x77, 0xdb, 0xee, - 0xdb, 0x77, 0xdb, 0xee, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, - 0xf8, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x00, 0x00, 0xf8, 0x18, - 0xf8, 0x18, 0x18, 0x18, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0xfe, 0x06, - 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, - 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x18, 0x18, 0xf8, 0x18, - 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, - 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x00, 0x00, 0xff, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, - 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x3f, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, - 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xcc, 0xc8, 0xdc, 0x76, 0x00, - 0x78, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xdc, 0x40, 0xfe, 0x62, 0x60, 0x60, - 0x60, 0x60, 0xf0, 0x00, 0x00, 0x02, 0x7e, 0xec, 0x6c, 0x6c, 0x48, 0x00, - 0xfe, 0x62, 0x30, 0x18, 0x30, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x7e, 0xd0, - 0xc8, 0xc8, 0x70, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xf8, 0x80, - 0x00, 0x00, 0x7e, 0xd8, 0x18, 0x18, 0x10, 0x00, 0x38, 0x10, 0x7c, 0xd6, - 0xd6, 0x7c, 0x10, 0x38, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, - 0x7c, 0xc6, 0xc6, 0xc6, 0x6c, 0x28, 0xee, 0x00, 0x3c, 0x22, 0x18, 0x7c, - 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x66, 0x99, 0x99, 0x66, 0x00, 0x00, - 0x00, 0x06, 0x7c, 0x9e, 0xf2, 0x7c, 0xc0, 0x00, 0x00, 0x00, 0x7c, 0xc0, - 0xf8, 0xc0, 0x7c, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, - 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, - 0x18, 0x00, 0x7e, 0x00, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0x00, - 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0x7c, 0x00, 0x0e, 0x1b, 0x1b, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70, - 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, - 0x76, 0xdc, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x00, - 0xd8, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0xc0, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x6c, 0xfe, + 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x3c, 0x3c, 0x18, 0xff, 0xe7, 0x18, 0x3c, 0x00, 0x10, 0x38, 0x7c, 0xfe, + 0xee, 0x10, 0x38, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, + 0x3c, 0x00, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, + 0x08, 0x0c, 0x0a, 0x0a, 0x08, 0x78, 0xf0, 0x00, 0x18, 0x14, 0x1a, 0x16, 0x72, 0xe2, 0x0e, 0x1c, 0x10, 0x54, 0x38, 0xee, 0x38, 0x54, 0x10, 0x00, 0x80, 0xe0, + 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00, 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00, 0x18, 0x3c, 0x5a, 0x18, 0x5a, 0x3c, 0x18, 0x00, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x00, 0x66, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x00, 0x1c, 0x22, 0x38, 0x44, 0x44, 0x38, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, + 0x7e, 0x00, 0x18, 0x3c, 0x5a, 0x18, 0x5a, 0x3c, 0x18, 0x7e, 0x18, 0x3c, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x5a, 0x3c, 0x18, 0x00, + 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x24, + 0x42, 0xff, 0x42, 0x24, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00, 0x6c, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, + 0x6c, 0x00, 0x10, 0x7c, 0xd0, 0x7c, 0x16, 0xfc, 0x10, 0x00, 0x00, 0x66, 0xac, 0xd8, 0x36, 0x6a, 0xcc, 0x00, 0x38, 0x4c, 0x38, 0x78, 0xce, 0xcc, 0x7a, 0x00, + 0x30, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00, 0x00, 0x66, + 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x20, 0x00, 0x00, 0x00, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x00, 0x7c, 0xce, 0xde, 0xf6, 0xe6, 0xe6, + 0x7c, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x7c, 0xc6, 0x06, 0x1c, 0x70, 0xc6, 0xfe, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, + 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00, 0xfe, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x7c, 0xc6, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00, 0xfe, 0xc6, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x20, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, + 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00, 0x7c, 0x82, 0x9e, 0xa6, 0x9e, 0x80, 0x7c, 0x00, + 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0xfc, 0x66, + 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, + 0xce, 0xc6, 0x7e, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, + 0x78, 0x00, 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x82, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0x00, + 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x7c, 0xc6, + 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x06, 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0xc6, 0xc0, 0x7c, 0x06, 0xc6, 0x7c, 0x00, 0x7e, 0x5a, 0x5a, 0x18, + 0x18, 0x18, 0x3c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, + 0x82, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00, + 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x10, 0x38, + 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x30, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, + 0x7c, 0xcc, 0x76, 0x00, 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00, 0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, + 0x76, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, 0x1c, 0x36, 0x30, 0x78, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x78, + 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x0c, 0x00, 0x1c, 0x0c, 0x0c, 0xcc, 0x78, 0xe0, 0x60, + 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0xcc, 0xfe, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0xdc, 0x66, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0, 0x00, 0x00, 0x7c, 0xcc, 0xcc, 0x7c, + 0x0c, 0x1e, 0x00, 0x00, 0xde, 0x76, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x7c, 0xc0, 0x7c, 0x06, 0x7c, 0x00, 0x10, 0x30, 0xfc, 0x30, 0x30, 0x34, 0x18, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, + 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8, 0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00, 0x0e, 0x18, 0x18, 0x30, + 0x18, 0x18, 0x0e, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0xe0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xe0, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, + 0x0e, 0x10, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, 0x7c, 0x82, 0x38, 0x0c, 0x7c, 0xcc, 0x76, 0x00, 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, 0xe0, 0x10, + 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x7c, 0xc0, 0xc0, 0x7c, 0x18, 0x70, 0x7c, 0x82, 0x7c, 0xc6, + 0xfe, 0xc0, 0x7c, 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, 0xe0, 0x10, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, + 0x3c, 0x00, 0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0xe0, 0x10, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, + 0x38, 0x38, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x0e, 0x10, 0xfe, 0x60, 0x78, 0x60, 0xfe, 0x00, 0x00, 0x00, 0x7c, 0x12, 0x7e, 0xd0, 0x7e, 0x00, 0x7e, 0xc8, + 0xc8, 0xfe, 0xc8, 0xc8, 0xce, 0x00, 0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xe0, 0x10, 0x7c, 0xc6, + 0xc6, 0xc6, 0x7c, 0x00, 0x7c, 0x82, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0xe0, 0x10, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, + 0x0c, 0xf8, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x7c, 0xd6, 0xd0, 0xd6, 0x7c, 0x18, 0x00, + 0x38, 0x6c, 0x60, 0xf0, 0x60, 0xf2, 0xdc, 0x00, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x00, 0xf8, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0x06, 0x0e, 0x1b, + 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70, 0x0e, 0x10, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00, 0x0e, 0x10, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x0e, 0x10, 0x7c, 0xc6, + 0xc6, 0xc6, 0x7c, 0x00, 0x0e, 0x10, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x66, 0x98, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x98, 0xe6, 0xf6, 0xde, 0xce, + 0xc6, 0x00, 0x38, 0x0c, 0x3c, 0x34, 0x00, 0x7e, 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x30, 0x60, 0xc6, 0xc6, 0x7c, 0x00, + 0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00, 0xc0, 0xc8, 0xd0, 0xfe, 0x46, 0x8c, 0x1e, 0x00, 0xc0, 0xc8, + 0xd0, 0xec, 0x5c, 0xbe, 0x0c, 0x00, 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, + 0x6c, 0xd8, 0x00, 0x00, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, + 0xdb, 0xee, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x36, 0x36, + 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, + 0xfe, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, + 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, + 0x36, 0x36, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0xcc, 0xc8, 0xdc, 0x76, 0x00, 0x78, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xdc, 0x40, 0xfe, 0x62, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x02, 0x7e, 0xec, + 0x6c, 0x6c, 0x48, 0x00, 0xfe, 0x62, 0x30, 0x18, 0x30, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x7e, 0xd0, 0xc8, 0xc8, 0x70, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, + 0xf8, 0x80, 0x00, 0x00, 0x7e, 0xd8, 0x18, 0x18, 0x10, 0x00, 0x38, 0x10, 0x7c, 0xd6, 0xd6, 0x7c, 0x10, 0x38, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, + 0x7c, 0xc6, 0xc6, 0xc6, 0x6c, 0x28, 0xee, 0x00, 0x3c, 0x22, 0x18, 0x7c, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x66, 0x99, 0x99, 0x66, 0x00, 0x00, 0x00, 0x06, + 0x7c, 0x9e, 0xf2, 0x7c, 0xc0, 0x00, 0x00, 0x00, 0x7c, 0xc0, 0xf8, 0xc0, 0x7c, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0xfe, 0x00, 0xfe, + 0x00, 0xfe, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0x00, 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, + 0x7c, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0xc0, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/source/std/fs.c b/source/std/fs.c index 1927922..b2dac95 100644 --- a/source/std/fs.c +++ b/source/std/fs.c @@ -33,13 +33,13 @@ fumount(void) return 0; } -FILE* -fopen(const char* filename, const char* mode) +FILE * +fopen(const char *filename, const char *mode) { if (*mode != 'r' && *mode != 'w' && *mode != 'a') return NULL; // Mode not valid. - FILE* fp; + FILE *fp; int i; for (i = 0; i < MAX_FILES_OPEN; i++) { if (!files[i].is_open) { @@ -62,7 +62,7 @@ fopen(const char* filename, const char* mode) } void -fclose(FILE* fp) +fclose(FILE *fp) { f_close(&(fp->handle)); @@ -70,7 +70,7 @@ fclose(FILE* fp) } void -fseek(FILE* fp, int64_t offset, int whence) +fseek(FILE *fp, int64_t offset, int whence) { uint32_t fixed_offset; switch (whence) { @@ -91,25 +91,25 @@ fseek(FILE* fp, int64_t offset, int whence) } size_t -ftell(FILE* fp) +ftell(FILE *fp) { return f_tell(&(fp->handle)); } int -feof(FILE* fp) +feof(FILE *fp) { return f_eof(&(fp->handle)); } size_t -fsize(FILE* fp) +fsize(FILE *fp) { return f_size(&(fp->handle)); } size_t -fwrite(const void* buffer, size_t elementSize, size_t elementCnt, FILE* fp) +fwrite(const void *buffer, size_t elementSize, size_t elementCnt, FILE *fp) { UINT br; if (f_write(&(fp->handle), buffer, elementSize * elementCnt, &br)) @@ -122,7 +122,7 @@ fwrite(const void* buffer, size_t elementSize, size_t elementCnt, FILE* fp) } size_t -fread(void* buffer, size_t elementSize, size_t elementCnt, FILE* fp) +fread(void *buffer, size_t elementSize, size_t elementCnt, FILE *fp) { UINT br; if (f_read(&(fp->handle), buffer, elementSize * elementCnt, &br)) @@ -135,9 +135,9 @@ fread(void* buffer, size_t elementSize, size_t elementCnt, FILE* fp) } size_t -write_file(void* data, char* path, size_t size) +write_file(void *data, char *path, size_t size) { - FILE* temp = fopen(path, "w"); + FILE *temp = fopen(path, "w"); if (!temp) return 0; @@ -150,9 +150,9 @@ write_file(void* data, char* path, size_t size) } size_t -read_file(void* data, char* path, size_t size) +read_file(void *data, char *path, size_t size) { - FILE* temp = fopen(path, "r"); + FILE *temp = fopen(path, "r"); if (!temp) return 0; diff --git a/source/std/fs.h b/source/std/fs.h index a9bfc6f..19b6d12 100644 --- a/source/std/fs.h +++ b/source/std/fs.h @@ -23,23 +23,22 @@ typedef struct int fmount(void); int fumount(void); -FILE* fopen(const char* filename, const char* mode); +FILE *fopen(const char *filename, const char *mode); -void fclose(FILE* fp); +void fclose(FILE *fp); -void fseek(FILE* fp, int64_t offset, int whence); +void fseek(FILE *fp, int64_t offset, int whence); -size_t ftell(FILE* fp); +size_t ftell(FILE *fp); -int feof(FILE* fp); +int feof(FILE *fp); -size_t fsize(FILE* fp); +size_t fsize(FILE *fp); -size_t fwrite(const void* buffer, size_t elementSize, size_t elementCnt, - FILE* fp); -size_t fread(void* buffer, size_t elementSize, size_t elementCnt, FILE* fp); +size_t fwrite(const void *buffer, size_t elementSize, size_t elementCnt, FILE *fp); +size_t fread(void *buffer, size_t elementSize, size_t elementCnt, FILE *fp); -size_t write_file(void* data, char* path, size_t size); -size_t read_file(void* data, char* path, size_t size); +size_t write_file(void *data, char *path, size_t size); +size_t read_file(void *data, char *path, size_t size); #endif diff --git a/source/std/memory.c b/source/std/memory.c index d99292b..f29029b 100644 --- a/source/std/memory.c +++ b/source/std/memory.c @@ -4,9 +4,9 @@ #include int -strlen(const char* string) +strlen(const char *string) { - char* string_end = (char*)string; + char *string_end = (char *)string; while (*string_end) string_end++; return string_end - string; @@ -21,10 +21,10 @@ isprint(char c) } void -memcpy(void* dest, const void* src, size_t size) +memcpy(void *dest, const void *src, size_t size) { - char* destc = (char*)dest; - const char* srcc = (const char*)src; + char *destc = (char *)dest; + const char *srcc = (const char *)src; // If we can align both dest and src together... if ((uintptr_t)srcc % sizeof(size_t) == (uintptr_t)destc % sizeof(size_t)) { @@ -33,10 +33,8 @@ memcpy(void* dest, const void* src, size_t size) *destc++ = *srcc++; } - for (; size >= sizeof(size_t); size -= sizeof(size_t), - destc += sizeof(size_t), - srcc += sizeof(size_t)) { - *(size_t*)destc = *(size_t*)srcc; + for (; size >= sizeof(size_t); size -= sizeof(size_t), destc += sizeof(size_t), srcc += sizeof(size_t)) { + *(size_t *)destc = *(size_t *)srcc; } } @@ -47,7 +45,7 @@ memcpy(void* dest, const void* src, size_t size) } void -memmove(void* dest, const void* src, size_t size) +memmove(void *dest, const void *src, size_t size) { // memcpy does the job of moving backwards just fine if (dest < src || src + size <= dest) { @@ -55,8 +53,8 @@ memmove(void* dest, const void* src, size_t size) } // Moving forward is just a reverse memcpy - char* destc = (char*)dest; - const char* srcc = (const char*)src; + char *destc = (char *)dest; + const char *srcc = (const char *)src; // If we can align both dest and src together... if ((uintptr_t)srcc % sizeof(size_t) == (uintptr_t)destc % sizeof(size_t)) { @@ -67,7 +65,7 @@ memmove(void* dest, const void* src, size_t size) while (size >= sizeof(size_t)) { size -= sizeof(size_t); - *(size_t*)(destc + size) = *(size_t*)(srcc + size); + *(size_t *)(destc + size) = *(size_t *)(srcc + size); } } @@ -78,9 +76,9 @@ memmove(void* dest, const void* src, size_t size) } void -memset(void* dest, const int filler, size_t size) +memset(void *dest, const int filler, size_t size) { - char* destc = (char*)dest; + char *destc = (char *)dest; // Align dest to 4 bytes while ((uintptr_t)destc % sizeof(size_t) && size--) { @@ -88,9 +86,8 @@ memset(void* dest, const int filler, size_t size) } // Set 32 bytes at a time - for (; size >= sizeof(size_t); - size -= sizeof(size_t), destc += sizeof(size_t)) { - *(size_t*)destc = filler; + for (; size >= sizeof(size_t); size -= sizeof(size_t), destc += sizeof(size_t)) { + *(size_t *)destc = filler; } // Finish @@ -100,10 +97,10 @@ memset(void* dest, const int filler, size_t size) } int -memcmp(const void* buf1, const void* buf2, const size_t size) +memcmp(const void *buf1, const void *buf2, const size_t size) { - const char* buf1c = (const char*)buf1; - const char* buf2c = (const char*)buf2; + const char *buf1c = (const char *)buf1; + const char *buf2c = (const char *)buf2; for (size_t i = 0; i < size; i++) { int cmp = buf1c[i] - buf2c[i]; if (cmp) { @@ -115,10 +112,10 @@ memcmp(const void* buf1, const void* buf2, const size_t size) } void -strncpy(void* dest, const void* src, const size_t size) +strncpy(void *dest, const void *src, const size_t size) { - char* destc = (char*)dest; - const char* srcc = (const char*)src; + char *destc = (char *)dest; + const char *srcc = (const char *)src; size_t i; for (i = 0; i < size && srcc[i] != 0; i++) { @@ -130,10 +127,10 @@ strncpy(void* dest, const void* src, const size_t size) } int -strncmp(const void* buf1, const void* buf2, const size_t size) +strncmp(const void *buf1, const void *buf2, const size_t size) { - const char* buf1c = (const char*)buf1; - const char* buf2c = (const char*)buf2; + const char *buf1c = (const char *)buf1; + const char *buf2c = (const char *)buf2; size_t i; for (i = 0; i < size && buf1c[i] != 0 && buf2c[i] != 0; i++) { @@ -152,7 +149,7 @@ strncmp(const void* buf1, const void* buf2, const size_t size) } int -atoi(const char* str) +atoi(const char *str) { int res = 0; while (*str && *str >= '0' && *str <= '9') { @@ -169,11 +166,10 @@ atoi(const char* str) // Quick Search algorithm, adapted from // http://igm.univ-mlv.fr/~lecroq/string/node19.html#SECTION00190 -uint8_t* -memfind(uint8_t* startPos, uint32_t size, const void* pattern, - uint32_t patternSize) +uint8_t * +memfind(uint8_t *startPos, uint32_t size, const void *pattern, uint32_t patternSize) { - const uint8_t* patternc = (const uint8_t*)pattern; + const uint8_t *patternc = (const uint8_t *)pattern; // Preprocessing uint32_t table[ALPHABET_LEN]; diff --git a/source/std/memory.h b/source/std/memory.h index 73cdab8..346be52 100644 --- a/source/std/memory.h +++ b/source/std/memory.h @@ -4,16 +4,15 @@ #include #include -int strlen(const char* string); -void memcpy(void* dest, const void* src, size_t size); -void memmove(void* dest, const void* src, size_t size); -void memset(void* dest, const int filler, size_t size); -int memcmp(const void* buf1, const void* buf2, const size_t size); -void strncpy(void* dest, const void* src, const size_t size); -int strncmp(const void* buf1, const void* buf2, const size_t size); -int atoi(const char* str); -uint8_t* memfind(uint8_t* startPos, uint32_t size, const void* pattern, - uint32_t patternSize); +int strlen(const char *string); +void memcpy(void *dest, const void *src, size_t size); +void memmove(void *dest, const void *src, size_t size); +void memset(void *dest, const int filler, size_t size); +int memcmp(const void *buf1, const void *buf2, const size_t size); +void strncpy(void *dest, const void *src, const size_t size); +int strncmp(const void *buf1, const void *buf2, const size_t size); +int atoi(const char *str); +uint8_t *memfind(uint8_t *startPos, uint32_t size, const void *pattern, uint32_t patternSize); int isprint(char c); #endif diff --git a/source/std/types.h b/source/std/types.h index cea64cf..290a10d 100644 --- a/source/std/types.h +++ b/source/std/types.h @@ -4,8 +4,8 @@ #include #include -#define CFG_BOOTENV *(volatile uint32_t*)0x10010000 -#define HID ~*(volatile uint32_t*)0x10146000 -#define PDN_MPCORE_CFG *(uint8_t*)0x10140FFC +#define CFG_BOOTENV *(volatile uint32_t *)0x10010000 +#define HID ~*(volatile uint32_t *)0x10146000 +#define PDN_MPCORE_CFG *(uint8_t *)0x10140FFC #endif -- 2.39.5