summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorRozelette <Rozelette@users.noreply.github.com>2021-04-19 16:44:12 -0500
committerGitHub <noreply@github.com>2021-04-19 17:44:12 -0400
commite97f10a6fa573e8b817ed03a4674d52b1818dafa (patch)
tree25821c9094c4aea2f1ad167c6227d2d2afbcd3f2 /src/code
parent768ca0839b862f1eff09661d9b20af51f70a738e (diff)
sys_slowly OK (#101)
* sys_slowly OK * Feedback * rename type member
Diffstat (limited to 'src/code')
-rw-r--r--src/code/sys_slowly.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c
new file mode 100644
index 000000000..60baad68c
--- /dev/null
+++ b/src/code/sys_slowly.c
@@ -0,0 +1,44 @@
+#include <ultra64.h>
+#include <global.h>
+
+#define SLOWLY_STATUS_DONE (1 << 0)
+#define SLOWLY_STATUS_STARTED (1 << 1)
+
+void Slowly_Main(SlowlyTask* slowly) {
+ slowly->status |= SLOWLY_STATUS_STARTED;
+
+ switch (slowly->callbackArgCount) {
+ case SLOWLY_CALLBACK_NO_ARGS:
+ slowly->callback0();
+ break;
+ case SLOWLY_CALLBACK_ONE_ARG:
+ slowly->callback1(slowly->callbackArg0);
+ break;
+ case SLOWLY_CALLBACK_TWO_ARGS:
+ slowly->callback2(slowly->callbackArg0, slowly->callbackArg1);
+ break;
+ }
+
+ slowly->status |= SLOWLY_STATUS_DONE;
+}
+
+void Slowly_ThreadEntry(SlowlyTask* slowly) {
+ Slowly_Main(slowly);
+}
+
+void Slowly_Start(SlowlyTask* slowly, void* stack, void (*callback)(), void* callbackArg0, void* callbackArg1) {
+ bzero(slowly, sizeof(SlowlyTask));
+
+ slowly->callbackArgCount = SLOWLY_CALLBACK_TWO_ARGS;
+ slowly->status = 0;
+ slowly->callback0 = callback;
+ slowly->callbackArg0 = callbackArg0;
+ slowly->callbackArg1 = callbackArg1;
+
+ osCreateThread(&slowly->thread, Z_THREAD_ID_SLOWLY, Slowly_ThreadEntry, slowly, stack, Z_PRIORITY_SLOWLY);
+ osStartThread(&slowly->thread);
+}
+
+void Slowly_Stop(SlowlyTask* slowly) {
+ osDestroyThread(&slowly->thread);
+}