#include "f/f_pc/f_pc_pause.h" #include "f/f_pc/f_pc_base.h" #include "f/f_pc/f_pc_layer_iter.h" #include "f/f_pc/f_pc_node.h" // f_pc_node::g_fpcNd_type extern s32 g_fpcNd_type; #ifdef NON_MATCHING s32 fpcPause_IsEnable(void* pProcess, u8 flag) { base_process_class* pProc = (base_process_class*)pProcess; // extra addic/subfe? return (pProc->mPauseFlag & flag) == flag; } #else asm s32 fpcPause_IsEnable(void* pProcess, u8 flag) { nofralloc #include "f/f_pc/asm/80023844.s" } #endif s32 fpcPause_Enable(void* pProcess, u8 flag) { base_process_class* pProc = (base_process_class*)pProcess; pProc->mPauseFlag |= flag; if (fpcBs_Is_JustOfType(g_fpcNd_type, pProc->mSubType)) { process_node_class* pNode = (process_node_class*)pProc; fpcLyIt_OnlyHere(&pNode->mLayer, (fpcLyIt_OnlyHereFunc)fpcPause_Enable, (void*)(flag & 0xFF)); } return 1; } s32 fpcPause_Disable(void* pProcess, u8 flag) { base_process_class* pProc = (base_process_class*)pProcess; pProc->mPauseFlag &= (0xFF - flag) & 0xFF; if (fpcBs_Is_JustOfType(g_fpcNd_type, pProc->mSubType)) { process_node_class* pNode = (process_node_class*)pProc; fpcLyIt_OnlyHere(&pNode->mLayer, (fpcLyIt_OnlyHereFunc)fpcPause_Disable, (void*)flag); } return 1; } void fpcPause_Init(void* pProcess) { base_process_class* pProc = (base_process_class*)pProcess; pProc->mPauseFlag = 0; }