/*****************************************************************************
 *                                                                           *
 * Module : PROCESS.C                                                        *
 *                                                                           *
 * Création d'un process...                                                  *
 *                                                                           *
 *****************************************************************************/


#include <proto/exec.h>
#include <proto/dos.h>
#include <dos/dostags.h>

#include  "process.h"


static LONG termSig;

static struct Task * parentTask;


static void __asm TermCode( register __d0 LONG return_code )
{
    Signal( parentTask, 1 << termSig );
}


BOOL StartProcess( struct Task * parent
                 , STRPTR name
                 , ipfct fp
                 , LONG priority
                 , ULONG stacksize 
                 )
{
    BOOL result = FALSE;

    parentTask = parent;

    if ( ( termSig = AllocSignal( -1 ) ) != -1 )
        {
        if ( CreateNewProcTags( NP_Name,      name
                              , NP_Priority,  priority
                              , NP_StackSize, stacksize
                              , NP_Entry,     fp
                              , NP_ExitCode,  TermCode
                              , TAG_END 
                              ) != NULL 
           ) 
            result = TRUE;
        else 
            FreeSignal( termSig );
        }
    return( result );
}


void WaitProcess( void )
{
    Wait( 1 << termSig );
    FreeSignal( termSig );
}
