/*
 *  This file is part of ixemul.library for the Amiga.
 *  Copyright (C) 1991, 1992  Markus M. Wild
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public
 *  License along with this library; if not, write to the Free
 *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *  $Id: createport.c,v 1.2 1994/06/19 15:09:29 rluebbert Exp $
 *
 *  $Log: createport.c,v $
 *  Revision 1.2  1994/06/19  15:09:29  rluebbert
 *  *** empty log message ***
 *
 */

#define _KERNEL
#include "ixemul.h"
#include "kprintf.h"

#include <string.h>

#include <exec/ports.h>

struct MsgPort *
CreatePort(unsigned char *name, long pri)
{
  int sigBit;
  struct MsgPort *port;
  
  if ((sigBit = AllocSignal(-1)) == -1) return 0;
  
  port = (struct MsgPort *) kmalloc (sizeof (struct MsgPort));
  if (! port)
    {
      FreeSignal (sigBit);
      errno = ENOMEM;
      KPRINTF (("&errno = %lx, errno = %ld\n", &errno, errno));
      return 0;
    }
    
  memset(port, 0, sizeof (struct MsgPort));
  
  port->mp_Node.ln_Name = (char *) name;
  port->mp_Node.ln_Pri = pri;
  port->mp_Node.ln_Type = NT_MSGPORT;
  
  port->mp_Flags = PA_SIGNAL;
  port->mp_SigBit = sigBit;
  port->mp_SigTask = FindTask (0);
  
  if (name)
    AddPort (port);
  else
    NewList (&(port->mp_MsgList));  
  return port;
}
