amiga-libnix2/sources/amiga/misc/CreatePort.c

42 lines
1.1 KiB
C

#include <exec/ports.h>
#include <exec/memory.h>
#include <clib/alib_protos.h>
#include <proto/exec.h>
#define NEWLIST(l) ((l)->lh_Head = (struct Node *)&(l)->lh_Tail, \
/*(l)->lh_Tail = NULL,*/ \
(l)->lh_TailPred = (struct Node *)&(l)->lh_Head)
struct MsgPort *CreatePort(CONST_STRPTR name,LONG pri)
{ APTR SysBase = *(APTR *)4L;
struct MsgPort *port = NULL;
UBYTE portsig;
if ((BYTE)(portsig=AllocSignal(-1)) >= 0) {
if (!(port=AllocMem(sizeof(*port),MEMF_CLEAR|MEMF_PUBLIC)))
FreeSignal(portsig);
else {
port->mp_Node.ln_Type = NT_MSGPORT;
port->mp_Node.ln_Pri = pri;
port->mp_Node.ln_Name = name;
/* done via AllocMem
port->mp_Flags = PA_SIGNAL;
*/
port->mp_SigBit = portsig;
port->mp_SigTask = FindTask(NULL);
NEWLIST(&port->mp_MsgList);
if (port->mp_Node.ln_Name)
AddPort(port);
}
}
return port;
}
VOID DeletePort(struct MsgPort *port)
{ APTR SysBase = *(APTR *)4L;
if (port->mp_Node.ln_Name)
RemPort(port);
FreeSignal(port->mp_SigBit); FreeMem(port,sizeof(*port));
}