added concrete implementations of putc(), getc(), getchar() and gets()
[tangerine.git] / rom / exec / childstatus.c
bloba8321181599b3db92d592c31fcb3c59ce98bec58
1 /*
2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 $Id$
5 Find out the status of a child task.
6 */
7 #include "exec_intern.h"
8 #include <proto/exec.h>
10 /*****************************************************************************
12 NAME */
14 AROS_LH1(ULONG, ChildStatus,
16 /* SYNOPSIS */
17 AROS_LHA(APTR, tid, D0),
19 /* LOCATION */
20 struct ExecBase *, SysBase, 125, Exec)
22 /* FUNCTION
23 Return the status of a child task. This allows the Task to
24 determine whether a particular child task is still running or not.
26 INPUTS
27 tid -- The ID of the task to examine. Note that this is _NOT_
28 a task pointer.
30 RESULT
31 One of the CHILD_* values.
33 NOTES
35 EXAMPLE
37 BUGS
39 SEE ALSO
41 INTERNALS
43 *****************************************************************************/
45 AROS_LIBFUNC_INIT
47 struct Task *this;
48 struct ETask *et;
49 struct ETask *child;
50 ULONG status = CHILD_NOTFOUND;
52 this = FindTask(NULL);
53 if ((this->tc_Flags & TF_ETASK) == 0)
54 return CHILD_NOTNEW;
56 et = this->tc_UnionETask.tc_ETask;
58 /* Sigh... */
59 Forbid();
61 /* Search through the running tasks list */
62 ForeachNode(&et->et_Children, child)
64 if (child->et_UniqueID == (ULONG)tid)
66 status = CHILD_ACTIVE;
67 break;
71 ForeachNode(&et->et_TaskMsgPort.mp_MsgList, child)
73 if (child->et_UniqueID == (ULONG)tid)
75 status = CHILD_EXITED;
76 break;
80 Permit();
81 return status;
83 AROS_LIBFUNC_EXIT
84 } /* ChildStatus */