home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / libnix-0.8-src.lha / libnix-0.8 / sources / amiga / misc / CreatePort.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  1.2 KB  |  58 lines

  1. #include <exec/ports.h>
  2. #include <exec/memory.h>
  3. #ifdef __GNUC__
  4. #include <inline/exec.h>
  5. #else
  6. #include <clib/exec_protos.h>
  7. #endif
  8. #include <clib/alib_protos.h>
  9.  
  10. extern inline void NewList(struct List *list)
  11. {
  12.    LONG *p;
  13.  
  14.    list->lh_TailPred=(struct Node*)list;
  15.    ((LONG *)list)++;
  16.    p=(LONG *)list; *--p=(LONG)list;
  17. }
  18.  
  19. struct MsgPort *CreatePort(STRPTR name,LONG pri)
  20. {
  21.   struct MsgPort *port;
  22.   UBYTE portsig;
  23.  
  24.   if ((BYTE)(portsig=AllocSignal(-1)) < 0)
  25.     return NULL;
  26.   if (!(port=AllocMem(sizeof(struct MsgPort),MEMF_CLEAR|MEMF_PUBLIC)))
  27.     FreeSignal((ULONG)portsig);
  28.   else
  29.   {
  30.     port->mp_Node.ln_Type=NT_MSGPORT;
  31.     port->mp_Node.ln_Pri=pri;
  32.     port->mp_Node.ln_Name=name;
  33.     /* done via AllocMem :)
  34.     port->mp_Flags=PA_SIGNAL;
  35.     */
  36.     port->mp_SigBit=portsig;
  37.     port->mp_SigTask=FindTask(NULL);
  38.     if (port->mp_Node.ln_Name)
  39.       AddPort(port);
  40.     else
  41.       NewList(&port->mp_MsgList);
  42.   }
  43.   return port;
  44. }
  45.  
  46. void DeletePort(struct MsgPort *port)
  47. {
  48.    int i;
  49.  
  50.    if (port->mp_Node.ln_Name != NULL)
  51.      RemPort(port);
  52.    i=-1;
  53.    port->mp_Node.ln_Type=i;
  54.    port->mp_MsgList.lh_Head=(struct Node *)i;
  55.    FreeSignal(port->mp_SigBit);
  56.    FreeMem(port,sizeof(struct MsgPort));
  57. }
  58.