/* * MakeChannel.C * * (internal routine) */ #include "lib.h" short DUseSignal = -1; void * MakeChannel(ior, host) IOSTD *ior; char *host; { CHANN *chan = AllocMem(sizeof(CHANN), MEMF_PUBLIC|MEMF_CLEAR); /* Name, Pri */ chan->port.mp_Node.ln_Type = NT_MSGPORT; if (DUseSignal >= 0) chan->port.mp_SigBit = DUseSignal; else chan->port.mp_SigBit = AllocSignal(-1); chan->port.mp_SigTask = FindTask(NULL); NewList(&chan->port.mp_MsgList); NewList(&chan->rdylist); chan->chan = (long)ior->io_Unit; ior->io_Offset = (long)chan; if (host) { char buf[sizeof(DNETPORTNAME)+32]; sprintf(buf, "%s%s", DNETPORTNAME, host); ior->io_Message.mn_ReplyPort = FindPort(buf); } chan->dnetport = ior->io_Message.mn_ReplyPort; return((void *)chan); } void DeleteChannel(_chan) void *_chan; { CHANN *chan = (CHANN *)_chan; if (chan->port.mp_SigBit != DUseSignal) FreeSignal(chan->port.mp_SigBit); FreeMem(chan, sizeof(CHANN)); }