diff options
| author | Luke Street <luke.street@encounterpc.com> | 2023-09-10 00:42:26 -0400 |
|---|---|---|
| committer | Luke Street <luke.street@encounterpc.com> | 2023-09-10 00:48:55 -0400 |
| commit | adb95b135c3d7498eba29bbd9728d345eed5a407 (patch) | |
| tree | 655575b939c12067569263171b68c079b1a232c8 /src/f_pc/f_pc_priority.cpp | |
| parent | 81ac53f1317dafb3506ae3ed8b2820d40645c3c8 (diff) | |
Import project
Original repository: https://github.com/encounter/ww
Diffstat (limited to 'src/f_pc/f_pc_priority.cpp')
| -rw-r--r-- | src/f_pc/f_pc_priority.cpp | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/f_pc/f_pc_priority.cpp b/src/f_pc/f_pc_priority.cpp new file mode 100644 index 00000000..ee0a5715 --- /dev/null +++ b/src/f_pc/f_pc_priority.cpp @@ -0,0 +1,161 @@ +// +// Generated by dtk +// Translation Unit: f_pc_priority.cpp +// + +#include "f_pc/f_pc_priority.h" +#include "f_pc/f_pc_base.h" +#include "f_pc/f_pc_layer.h" + +/* 8003FC08-8003FC28 .text fpcPi_IsInQueue__FP22process_priority_class */ +s32 fpcPi_IsInQueue(process_priority_class* i_procPriority) { + return cTg_IsUse(&i_procPriority->mBase); +} + +/* 8003FC28-8003FC60 .text fpcPi_QueueTo__FP22process_priority_class */ +s32 fpcPi_QueueTo(process_priority_class* i_procPriority) { + cTg_SingleCut(&i_procPriority->mBase); + fpcLy_CancelQTo(&i_procPriority->mMtdTag); + return 1; +} + +static node_list_class l_fpcPi_Queue; + +/* 8003FC60-8003FCEC .text fpcPi_ToQueue__FP22process_priority_class */ +s32 fpcPi_ToQueue(process_priority_class* i_procPriority) { + u32 layer = i_procPriority->mInfoQ.mLayer; + + if (cTg_Addition(&l_fpcPi_Queue, &i_procPriority->mBase)) { + if (layer != 0xFFFFFFFD) { + layer_class* pLayer = fpcLy_Layer(layer); + + if (!fpcLy_ToCancelQ(pLayer, &i_procPriority->mMtdTag)) { + cTg_SingleCut(&i_procPriority->mBase); + return 0; + } + } + + return 1; + } + + return 0; +} + +/* 8003FCEC-8003FD40 .text fpcPi_GetFromQueue__Fv */ +process_priority_class* fpcPi_GetFromQueue() { + process_priority_class* i_procPriority = (process_priority_class*)cTg_GetFirst(&l_fpcPi_Queue); + + if (i_procPriority != NULL) { + base_process_class* pProc = (base_process_class*)i_procPriority->mBase.mpTagData; + process_priority_class* pProcPi = &pProc->mPi; + fpcLy_CancelQTo(&pProcPi->mMtdTag); + return pProcPi; + } + + return NULL; +} + +/* 8003FD40-8003FD8C .text fpcPi_Delete__FP22process_priority_class */ +s32 fpcPi_Delete(process_priority_class* i_procPriority) { + static process_priority_queue_info crear = { + 0xFFFFFFFF, + 0xFFFF, + 0xFFFF, + }; + + fpcPi_QueueTo(i_procPriority); + i_procPriority->mInfoQ.mLayer = crear.mLayer; + i_procPriority->mInfoQ.mListID = crear.mListID; + i_procPriority->mInfoQ.mListPrio = crear.mListPrio; + return 1; +} + +/* 8003FD8C-8003FDC0 .text fpcPi_IsNormal__FUiUsUs */ +s32 fpcPi_IsNormal(unsigned int i_layer, u16 i_listID, u16 i_priority) { + if ((i_layer < 0xFFFFFFFE) && (i_listID < 0xFFFE) && (i_priority < 0xFFFE)) + return 1; + + return 0; +} + +/* 8003FDC0-8003FF00 .text fpcPi_Change__FP22process_priority_classUiUsUs */ +s32 fpcPi_Change(process_priority_class* i_procPriority, unsigned int i_layer, u16 i_listID, u16 i_priority) { + base_process_class* pProc = (base_process_class*)i_procPriority->mBase.mpTagData; + BOOL changed = 0; + + if (pProc->mInitState == 3) + return 0; + + if (!fpcPi_IsNormal(i_layer, i_listID, i_priority)) + return 0; + + i_procPriority->mInfoQ.mLayer = i_procPriority->mInfoCurr.mLayer; + i_procPriority->mInfoQ.mListID = i_procPriority->mInfoCurr.mListID; + i_procPriority->mInfoQ.mListPrio = i_procPriority->mInfoCurr.mListPrio; + + if (i_layer != 0xFFFFFFFD && i_procPriority->mInfoCurr.mLayer != i_layer) { + i_procPriority->mInfoQ.mLayer = i_layer; + changed = 1; + } + + if (i_listID != 0xFFFD && i_procPriority->mInfoCurr.mListID != i_listID) { + i_procPriority->mInfoQ.mListID = i_listID; + changed = 1; + } + + if (i_priority != 0xFFFD && i_procPriority->mInfoCurr.mListPrio != i_priority) { + i_procPriority->mInfoQ.mListPrio = i_priority; + changed = 1; + } + + if (pProc->mInitState == 0 || pProc->mInitState == 1) { + i_procPriority->mInfoCurr.mLayer = i_procPriority->mInfoQ.mLayer; + i_procPriority->mInfoCurr.mListID = i_procPriority->mInfoQ.mListID; + i_procPriority->mInfoCurr.mListPrio = i_procPriority->mInfoQ.mListPrio; + return 1; + } + + if (changed == 1) + return fpcPi_ToQueue(i_procPriority); + else + return 0; +} + +/* 8003FF00-8003FF94 .text fpcPi_Handler__Fv */ +s32 fpcPi_Handler() { + process_priority_class* i_procPriority; + while (i_procPriority = fpcPi_GetFromQueue()) { + base_process_class* pProc = (base_process_class*)i_procPriority->mBase.mpTagData; + layer_management_tag_class* pLayerTag = &pProc->mLyTg; + line_tag* pLineTag = &pProc->mLnTg; + if (fpcLyTg_Move(pLayerTag, i_procPriority->mInfoQ.mLayer, i_procPriority->mInfoQ.mListID, + i_procPriority->mInfoQ.mListPrio) == 1) { + fpcLnTg_Move(pLineTag, i_procPriority->mInfoCurr.mListID); + i_procPriority->mInfoCurr.mLayer = i_procPriority->mInfoQ.mLayer; + i_procPriority->mInfoCurr.mListID = i_procPriority->mInfoQ.mListID; + i_procPriority->mInfoCurr.mListPrio = i_procPriority->mInfoQ.mListPrio; + } else { + return 0; + } + } + + return 1; +} + +/* 8003FF94-8004003C .text fpcPi_Init__FP22process_priority_classPvUiUsUs */ +s32 fpcPi_Init(process_priority_class* i_procPriority, void* i_data, unsigned int i_layer, u16 i_listID, + u16 i_priority) { + if (!fpcPi_IsNormal(i_layer, i_listID, i_priority)) + return 0; + + i_procPriority->mInfoQ.mLayer = i_layer; + i_procPriority->mInfoQ.mListID = i_listID; + i_procPriority->mInfoQ.mListPrio = i_priority; + + i_procPriority->mInfoCurr.mLayer = i_procPriority->mInfoQ.mLayer; + i_procPriority->mInfoCurr.mListID = i_procPriority->mInfoQ.mListID; + i_procPriority->mInfoCurr.mListPrio = i_procPriority->mInfoQ.mListPrio; + cTg_Create(&i_procPriority->mBase, i_data); + fpcMtdTg_Init(&i_procPriority->mMtdTag, (process_method_tag_func)fpcPi_Delete, i_procPriority); + return 1; +} |
