summaryrefslogtreecommitdiff
path: root/src/f_pc/f_pc_fstcreate_req.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/f_pc/f_pc_fstcreate_req.cpp')
-rw-r--r--src/f_pc/f_pc_fstcreate_req.cpp110
1 files changed, 40 insertions, 70 deletions
diff --git a/src/f_pc/f_pc_fstcreate_req.cpp b/src/f_pc/f_pc_fstcreate_req.cpp
index b5e36b5007..fdfa83bc1f 100644
--- a/src/f_pc/f_pc_fstcreate_req.cpp
+++ b/src/f_pc/f_pc_fstcreate_req.cpp
@@ -6,93 +6,63 @@
#include "f_pc/f_pc_fstcreate_req.h"
#include "dol2asm.h"
#include "dolphin/types.h"
-
-//
-// Types:
-//
-
-struct layer_class {};
-
-struct fast_create_request {};
-
-struct create_request_method_class {};
-
-struct create_request {};
-
-struct base_process_class {};
-
-//
-// Forward References:
-//
-
-void fpcFCtRq_Do(fast_create_request*);
-static bool fpcFCtRq_Delete(fast_create_request*);
-void fpcFCtRq_Request(layer_class*, s16, int (*)(void*, void*), void*, void*);
-
-extern "C" void fpcFCtRq_Do__FP19fast_create_request();
-extern "C" static bool fpcFCtRq_Delete__FP19fast_create_request();
-extern "C" void fpcFCtRq_Request__FP11layer_classsPFPvPv_iPvPv();
-
-//
-// External References:
-//
-
-void fpcBs_MakeOfId();
-void fpcBs_Create(s16, unsigned int, void*);
-void fpcBs_SubCreate(base_process_class*);
-void fpcCtRq_Cancel(create_request*);
-void fpcCtRq_Create(layer_class*, u32, create_request_method_class*);
-void fpcLy_SetCurrentLayer(layer_class*);
-void fpcLd_Use(s16);
-
-extern "C" void fpcBs_MakeOfId__Fv();
-extern "C" void fpcBs_Create__FsUiPv();
-extern "C" void fpcBs_SubCreate__FP18base_process_class();
-extern "C" void fpcCtRq_Cancel__FP14create_request();
-extern "C" void fpcCtRq_Create__FP11layer_classUlP27create_request_method_class();
-extern "C" void fpcLy_SetCurrentLayer__FP11layer_class();
-extern "C" void fpcLd_Use__Fs();
-extern "C" void _savegpr_26();
-extern "C" void _restgpr_26();
+#include "f_pc/f_pc_load.h"
//
// Declarations:
//
/* 80023A48-80023A98 0050+00 s=1 e=3 z=52 None .text fpcFCtRq_Do__FP19fast_create_request */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcFCtRq_Do(fast_create_request* param_0) {
- nofralloc
-#include "asm/f_pc/f_pc_fstcreate_req/fpcFCtRq_Do__FP19fast_create_request.s"
+s32 fpcFCtRq_Do(fast_create_request* pFstCreateReq) {
+ if (pFstCreateReq->mpFastCreateFunc != NULL &&
+ pFstCreateReq->mpFastCreateFunc(pFstCreateReq->mBase.mpRes,
+ pFstCreateReq->mpFastCreateData) == 0) {
+ return 3;
+ } else {
+ return 4;
+ }
}
-#pragma pop
/* 80023A98-80023AA0 0008+00 s=1 e=0 z=0 None .text fpcFCtRq_Delete__FP19fast_create_request
*/
-static bool fpcFCtRq_Delete(fast_create_request* param_0) {
- return true;
+s32 fpcFCtRq_Delete(fast_create_request* pFstCreateReq) {
+ return 1;
}
/* ############################################################################################## */
/* 803A3AE0-803A3AF0 000C+04 s=1 e=0 z=0 None .data submethod$2214 */
-SECTION_DATA static void* submethod[3 + 1 /* padding */] = {
- (void*)fpcFCtRq_Do__FP19fast_create_request,
- (void*)NULL,
- (void*)fpcFCtRq_Delete__FP19fast_create_request,
- /* padding */
+create_request_method_class submethod = {
+ (cPhs__Handler)fpcFCtRq_Do,
NULL,
+ (process_method_func)fpcFCtRq_Delete
};
/* 80023AA0-80023B70 00D0+00 s=0 e=3 z=43 None .text
* fpcFCtRq_Request__FP11layer_classsPFPvPv_iPvPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcFCtRq_Request(layer_class* param_0, s16 param_1, int (*)(void*, void*), void* param_3,
- void* param_4) {
- nofralloc
-#include "asm/f_pc/f_pc_fstcreate_req/fpcFCtRq_Request__FP11layer_classsPFPvPv_iPvPv.s"
+base_process_class* fpcFCtRq_Request(layer_class* pLayer, s16 pProcTypeID,
+ fstCreateFunc pFastCreateFunc, void* pFastCreateData,
+ void* pData) {
+ if (!fpcLd_Use(pProcTypeID)) {
+ return NULL;
+ } else {
+ fast_create_request* request =
+ (fast_create_request*)fpcCtRq_Create(pLayer, 0x50, &submethod);
+ if (request != NULL) {
+ base_process_class* proc;
+ fpcLy_SetCurrentLayer(pLayer);
+ proc = fpcBs_Create(pProcTypeID, fpcBs_MakeOfId(), pData);
+ if (proc != NULL) {
+ proc->mpCtRq = (struct create_request*)request;
+ request->mBase.mpRes = proc;
+ request->mBase.mBsPcId = proc->mBsPcId;
+ if (fpcBs_SubCreate(proc) == 2) {
+ request->mpFastCreateFunc = pFastCreateFunc;
+ request->mpFastCreateData = pFastCreateData;
+ return proc;
+ }
+ }
+ fpcCtRq_Cancel(&request->mBase);
+ }
+ return NULL;
+ }
}
-#pragma pop