
/*
 *
 */

typedef struct LWP {
    struct MinNode Node;
    long    Bytes;	    /*	total allocated bytes	*/
    long    Pc; 	    /*	program ctr	*/
    long    Sp; 	    /*	sp on entry	*/
    long    Regs[10];	    /*	D234567 A2356	*/
    long    Aux[4];	    /*	aux reg save	*/
    struct MinList List;    /*	event list	*/
} LWP;

#define RB_A5	8

static struct MinList LReadyList = { (struct MinNode *)&LReadyList.mlh_Tail, NULL, (struct MinNode *)&LReadyList.mlh_Head };
static struct MinList LWaitList  = { (struct MinNode *)&LWaitList.mlh_Tail, NULL, (struct MinNode *)&LWaitList.mlh_Head };

_CLWPStart(pardesc, argSize, varSize, startPC)
{
    long bytes = argSize + varSize + 4 + sizeof(LWP);
    LWP *lwp;

    if (lwp = AllocMem(bytes, MEMF_PUBLIC)) {
	lwp->Bytes = bytes;
	lwp->Pc = startPC;
	lwp->Regs[RB_A5] = (long)lwp + sizeof(LWP) + varSize;
	*(long *)((char *)lwp + sizeof(LWP) + varSize) = (long)lwp + 1;
	NewList(&lwp->List);
	AddTail(&LReadyList, &lwp->Node);
    }
}

