diff options
| author | lepelog <lepelog@users.noreply.github.com> | 2021-04-01 12:06:29 +0200 |
|---|---|---|
| committer | lepelog <lepelog@users.noreply.github.com> | 2021-04-01 12:06:29 +0200 |
| commit | 53c6aa6c8b50d95e89f64db70d0cc08fb4111a93 (patch) | |
| tree | 20ce5067caef7892c2c9bb043b10918c15dd7868 /src/f_pc/f_pc_stdcreate_req.cpp | |
| parent | 87bc0e711b4fb2f990f3c37ca681be1fc027d554 (diff) | |
ported over f_pc
Diffstat (limited to 'src/f_pc/f_pc_stdcreate_req.cpp')
| -rw-r--r-- | src/f_pc/f_pc_stdcreate_req.cpp | 225 |
1 files changed, 89 insertions, 136 deletions
diff --git a/src/f_pc/f_pc_stdcreate_req.cpp b/src/f_pc/f_pc_stdcreate_req.cpp index c41ae83353..16f12625d3 100644 --- a/src/f_pc/f_pc_stdcreate_req.cpp +++ b/src/f_pc/f_pc_stdcreate_req.cpp @@ -6,75 +6,9 @@ #include "f_pc/f_pc_stdcreate_req.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct standard_create_request_class {}; - -struct request_of_phase_process_class {}; - -struct layer_class {}; - -struct create_request_method_class {}; - -struct base_process_class {}; - -// -// Forward References: -// - -void fpcSCtRq_phase_Load(standard_create_request_class*); -void fpcSCtRq_phase_CreateProcess(standard_create_request_class*); -void fpcSCtRq_phase_SubCreateProcess(standard_create_request_class*); -void fpcSCtRq_phase_IsComplete(standard_create_request_class*); -void fpcSCtRq_phase_PostMethod(standard_create_request_class*); -static s32 fpcSCtRq_phase_Done(standard_create_request_class*); -void fpcSCtRq_Handler(standard_create_request_class*); -static bool fpcSCtRq_Delete(standard_create_request_class*); -bool fpcSCtRq_Cancel(standard_create_request_class*); -void fpcSCtRq_Request(layer_class*, s16, int (*)(void*, void*), void*, void*); - -extern "C" void fpcSCtRq_phase_Load__FP29standard_create_request_class(); -extern "C" void fpcSCtRq_phase_CreateProcess__FP29standard_create_request_class(); -extern "C" void fpcSCtRq_phase_SubCreateProcess__FP29standard_create_request_class(); -extern "C" void fpcSCtRq_phase_IsComplete__FP29standard_create_request_class(); -extern "C" void fpcSCtRq_phase_PostMethod__FP29standard_create_request_class(); -extern "C" static s32 fpcSCtRq_phase_Done__FP29standard_create_request_class(); -extern "C" void fpcSCtRq_Handler__FP29standard_create_request_class(); -extern "C" static bool fpcSCtRq_Delete__FP29standard_create_request_class(); -extern "C" bool fpcSCtRq_Cancel__FP29standard_create_request_class(); -extern "C" void fpcSCtRq_Request__FP11layer_classsPFPvPv_iPvPv(); - -// -// External References: -// - -void fpcBs_Is_JustOfType(int, int); -void fpcBs_Create(s16, unsigned int, void*); -void fpcBs_SubCreate(base_process_class*); -void fpcCtRq_Create(layer_class*, u32, create_request_method_class*); -void fpcLy_IsCreatingMesg(layer_class*); -void fpcLy_SetCurrentLayer(layer_class*); -void fpcLd_Free(s16); -void fpcLd_Load(s16); -void cPhs_Set(request_of_phase_process_class*, int (**)(void*)); -void cPhs_Do(request_of_phase_process_class*, void*); - -extern "C" void fpcBs_Is_JustOfType__Fii(); -extern "C" void fpcBs_Create__FsUiPv(); -extern "C" void fpcBs_SubCreate__FP18base_process_class(); -extern "C" void fpcCtRq_Create__FP11layer_classUlP27create_request_method_class(); -extern "C" void fpcLy_IsCreatingMesg__FP11layer_class(); -extern "C" void fpcLy_SetCurrentLayer__FP11layer_class(); -extern "C" void fpcLd_Free__Fs(); -extern "C" void fpcLd_Load__Fs(); -extern "C" void cPhs_Set__FP30request_of_phase_process_classPPFPv_i(); -extern "C" void cPhs_Do__FP30request_of_phase_process_classPv(); -extern "C" void _savegpr_27(); -extern "C" void _restgpr_27(); -extern "C" extern u8 g_fpcNd_type[4 + 4 /* padding */]; +#include "f_pc/f_pc_load.h" +#include "f_pc/f_pc_base.h" +#include "f_pc/f_pc_node.h" // // Declarations: @@ -82,115 +16,134 @@ extern "C" extern u8 g_fpcNd_type[4 + 4 /* padding */]; /* 80023B70-80023BC4 0054+00 s=1 e=0 z=5 None .text * fpcSCtRq_phase_Load__FP29standard_create_request_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_phase_Load(standard_create_request_class* param_0) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_phase_Load__FP29standard_create_request_class.s" +s32 fpcSCtRq_phase_Load(standard_create_request_class* pStdCreateReq) { + switch (fpcLd_Load(pStdCreateReq->mLoadID)) { + case 0: + return cPhs_ZERO_e; + case 4: + return 2; + case 5: + default: + return cPhs_ERROR_e; + } } -#pragma pop /* 80023BC4-80023C2C 0068+00 s=1 e=0 z=9 None .text * fpcSCtRq_phase_CreateProcess__FP29standard_create_request_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_phase_CreateProcess(standard_create_request_class* param_0) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_phase_CreateProcess__FP29standard_create_request_class.s" +s32 fpcSCtRq_phase_CreateProcess(standard_create_request_class* pStdCreateReq) { + fpcLy_SetCurrentLayer(pStdCreateReq->mBase.mpLayer); + pStdCreateReq->mBase.mpRes = + fpcBs_Create(pStdCreateReq->mLoadID, pStdCreateReq->mBase.mBsPcId, pStdCreateReq->unk_0x54); + if (pStdCreateReq->mBase.mpRes == NULL) { + fpcLd_Free(pStdCreateReq->mLoadID); + return cPhs_ERROR_e; + } else { + pStdCreateReq->mBase.mpRes->mpCtRq = (struct create_request*)pStdCreateReq; + return 2; + } } -#pragma pop /* 80023C2C-80023C64 0038+00 s=1 e=0 z=3 None .text * fpcSCtRq_phase_SubCreateProcess__FP29standard_create_request_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* param_0) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_phase_SubCreateProcess__FP29standard_create_request_class.s" +s32 fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* pStdCreateReq) { + fpcLy_SetCurrentLayer(pStdCreateReq->mBase.mpLayer); + return fpcBs_SubCreate(pStdCreateReq->mBase.mpRes); } -#pragma pop /* 80023C64-80023CBC 0058+00 s=1 e=0 z=14 None .text * fpcSCtRq_phase_IsComplete__FP29standard_create_request_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_phase_IsComplete(standard_create_request_class* param_0) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_phase_IsComplete__FP29standard_create_request_class.s" +s32 fpcSCtRq_phase_IsComplete(standard_create_request_class* pStdCreateReq) { + process_node_class* procNode = (process_node_class*)pStdCreateReq->mBase.mpRes; + if (fpcBs_Is_JustOfType(g_fpcNd_type, procNode->mBase.mSubType) == 1) { + if (fpcLy_IsCreatingMesg(&procNode->mLayer) == 1) { + return cPhs_ZERO_e; + } + } + return 2; } -#pragma pop /* 80023CBC-80023D0C 0050+00 s=1 e=0 z=5 None .text * fpcSCtRq_phase_PostMethod__FP29standard_create_request_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_phase_PostMethod(standard_create_request_class* param_0) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_phase_PostMethod__FP29standard_create_request_class.s" +s32 fpcSCtRq_phase_PostMethod(standard_create_request_class* pStdCreateReq) { + if (pStdCreateReq->unk_0x58 != NULL && + pStdCreateReq->unk_0x58(pStdCreateReq->mBase.mpRes, pStdCreateReq->unk_0x5C) == 0) { + return cPhs_ZERO_e; + } else { + return 2; + } } -#pragma pop /* 80023D0C-80023D14 0008+00 s=1 e=0 z=0 None .text * fpcSCtRq_phase_Done__FP29standard_create_request_class */ -static s32 fpcSCtRq_phase_Done(standard_create_request_class* param_0) { +s32 fpcSCtRq_phase_Done(standard_create_request_class* param_0) { return 2; } /* 80023D14-80023D84 0070+00 s=1 e=0 z=2 None .text * fpcSCtRq_Handler__FP29standard_create_request_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_Handler(standard_create_request_class* param_0) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_Handler__FP29standard_create_request_class.s" +s32 fpcSCtRq_Handler(standard_create_request_class* pStdCreateReq) { + s32 result = cPhs_Do(&pStdCreateReq->unk_0x48, pStdCreateReq); + switch (result) { + case 2: + return fpcSCtRq_Handler(pStdCreateReq); + case 4: + return 4; + case 1: + case 5: + default: + return result; + } } -#pragma pop /* 80023D84-80023D8C 0008+00 s=1 e=0 z=0 None .text * fpcSCtRq_Delete__FP29standard_create_request_class */ -static bool fpcSCtRq_Delete(standard_create_request_class* param_0) { - return true; +s32 fpcSCtRq_Delete(standard_create_request_class* param_0) { + return 1; } /* 80023D8C-80023D94 0008+00 s=1 e=0 z=1 None .text * fpcSCtRq_Cancel__FP29standard_create_request_class */ -bool fpcSCtRq_Cancel(standard_create_request_class* param_0) { - return true; +s32 fpcSCtRq_Cancel(standard_create_request_class* param_0) { + return 1; } /* ############################################################################################## */ /* 803A3AF0-803A3AFC 000C+00 s=1 e=0 z=0 None .data submethod$2261 */ -SECTION_DATA static void* submethod[3] = { - (void*)fpcSCtRq_Handler__FP29standard_create_request_class, - (void*)fpcSCtRq_Cancel__FP29standard_create_request_class, - (void*)fpcSCtRq_Delete__FP29standard_create_request_class, +static create_request_method_class submethod = { + (cPhs__Handler)fpcSCtRq_Handler, + (process_method_func)fpcSCtRq_Cancel, + (process_method_func)fpcSCtRq_Delete, }; /* 803A3AFC-803A3B18 001C+00 s=1 e=0 z=0 None .data method$2262 */ -SECTION_DATA static void* method[7] = { - (void*)fpcSCtRq_phase_Load__FP29standard_create_request_class, - (void*)fpcSCtRq_phase_CreateProcess__FP29standard_create_request_class, - (void*)fpcSCtRq_phase_SubCreateProcess__FP29standard_create_request_class, - (void*)fpcSCtRq_phase_IsComplete__FP29standard_create_request_class, - (void*)fpcSCtRq_phase_PostMethod__FP29standard_create_request_class, - (void*)fpcSCtRq_phase_Done__FP29standard_create_request_class, - (void*)NULL, +static cPhs__Handler method[7] = { + (cPhs__Handler)fpcSCtRq_phase_Load, + (cPhs__Handler)fpcSCtRq_phase_CreateProcess, + (cPhs__Handler)fpcSCtRq_phase_SubCreateProcess, + (cPhs__Handler)fpcSCtRq_phase_IsComplete, + (cPhs__Handler)fpcSCtRq_phase_PostMethod, + (cPhs__Handler)fpcSCtRq_phase_Done, + NULL, }; /* 80023D94-80023E28 0094+00 s=0 e=12 z=1 None .text * fpcSCtRq_Request__FP11layer_classsPFPvPv_iPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void fpcSCtRq_Request(layer_class* param_0, s16 param_1, int (*)(void*, void*), void* param_3, - void* param_4) { - nofralloc -#include "asm/f_pc/f_pc_stdcreate_req/fpcSCtRq_Request__FP11layer_classsPFPvPv_iPvPv.s" +s32 fpcSCtRq_Request(layer_class* param_1, s16 pProcName, stdCreateFunc param_3, void* param_4, + void* param_5) { + if (pProcName >= 0x7FFF) { + return -1; + } else { + standard_create_request_class* request = + (standard_create_request_class*)fpcCtRq_Create(param_1, 0x60, &submethod); + if (request == NULL) { + return -1; + } else { + cPhs_Set(&request->unk_0x48, method); + request->mLoadID = pProcName; + request->unk_0x58 = param_3; + request->unk_0x5C = param_4; + request->unk_0x54 = param_5; + return request->mBase.mBsPcId; + } + } } -#pragma pop |
