add comment
[AROS.git] / rom / task / execfuncs.c
blobdb2d96a0e416a2e1fa532dfdac299008f2d34846
1 /*
2 Copyright © 2015, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define DEBUG 0
8 #include <aros/debug.h>
9 #include <aros/symbolsets.h>
11 #include <proto/exec.h>
12 #include <proto/kernel.h>
14 #include "taskres_intern.h"
16 extern struct TaskResBase *internTaskResBase;
18 void TaskResAddTask(struct Task *task)
20 struct TaskListEntry *newEntry;
23 TODO:
24 if the list is locked, defer tasks addition until it is unlocked
26 if ((newEntry = AllocMem(sizeof(struct TaskListEntry), MEMF_CLEAR)) != NULL)
28 newEntry->tle_Task = task;
29 AddTail(&internTaskResBase->trb_TaskList, &newEntry->tle_Node);
33 AROS_LH3(APTR, AddTask,
34 AROS_LHA(struct Task *, task, A1),
35 AROS_LHA(APTR, initialPC, A2),
36 AROS_LHA(APTR, finalPC, A3),
37 struct ExecBase *, SysBase, 47, Task)
39 AROS_LIBFUNC_INIT
41 APTR newTask;
43 D(bug("[TaskRes] AddTask()\n"));
45 newTask = AROS_CALL3(APTR, internTaskResBase->trb_AddTask,
46 AROS_LCA(struct Task *, task, A1),
47 AROS_LCA(APTR, initialPC, A2),
48 AROS_LCA(APTR, finalPC, A3),
49 struct ExecBase *, SysBase);
51 if (newTask)
52 TaskResAddTask(newTask);
54 return newTask;
56 AROS_LIBFUNC_EXIT
59 AROS_LH4(APTR, NewAddTask,
60 AROS_LHA(struct Task *, task, A1),
61 AROS_LHA(APTR, initialPC, A2),
62 AROS_LHA(APTR, finalPC, A3),
63 AROS_LHA(struct TagItem *, tagList, A4),
64 struct ExecBase *, SysBase, 176, Task)
66 AROS_LIBFUNC_INIT
68 APTR newTask;
70 D(bug("[TaskRes] NewAddTask()\n"));
72 newTask = AROS_CALL4(APTR, internTaskResBase->trb_NewAddTask,
73 AROS_LCA(struct Task *, task, A1),
74 AROS_LCA(APTR, initialPC, A2),
75 AROS_LCA(APTR, finalPC, A3),
76 AROS_LCA(struct TagItem *, tagList, A4),
77 struct ExecBase *, SysBase);
79 if (newTask)
80 TaskResAddTask(newTask);
82 return newTask;
84 AROS_LIBFUNC_EXIT
87 AROS_LH1(void, RemTask,
88 AROS_LHA(struct Task *, task, A1),
89 struct ExecBase *, SysBase, 48, Task)
91 AROS_LIBFUNC_INIT
93 struct TaskListEntry *tmpEntry;
95 D(bug("[TaskRes] RemTask()\n"));
97 AROS_CALL1(APTR, internTaskResBase->trb_RemTask,
98 AROS_LCA(struct Task *, task, A1),
99 struct ExecBase *, SysBase);
101 ForeachNode(&internTaskResBase->trb_TaskList, tmpEntry)
103 if (tmpEntry->tle_Task == task)
106 TODO:
107 if the list is locked flag the entry to be removed,
108 else remove it immediately
110 Remove(&tmpEntry->tle_Node);
111 FreeMem(tmpEntry, sizeof(struct TaskListEntry));
112 break;
116 return;
118 AROS_LIBFUNC_EXIT