
/*
 *  CreateUniquePort(name, pri)
 *  DeleteUniquePort(port)
 */

#include <exec/types.h>
#include <typdefs.h>

typedef struct MsgPort PORT;

PORT *
CreateUniquePort(name, priority)
char *name;
{
    register int n = 0;
    register char *ptr;
    register PORT *port;
    char buf[64];

    Forbid();
    if (ptr = name) {
	strcpy(buf, name);
	while (FindPort(buf))
	    sprintf(buf, "%s.%d\n", name, ++n);
	if (ptr = AllocMem(strlen(buf)+1, MEMF_PUBLIC)) {
	    strcpy(ptr, buf);
	} else {
	    Permit();
	    return(NULL);
	}
    }
    if (!(port = CreatePort(ptr, priority)) && ptr)
	FreeMem(ptr, strlen(ptr)+1);
    Permit();
    return(port);
}

DeleteUniquePort(port)
register PORT *port;
{
    register char *name;

    RemPort(port);
    if (name = port->mp_Node.ln_Name) {
	FreeMem(name, strlen(name)+1);
	port->mp_Node.ln_Name = NULL;
    }
    DeletePort(port);
}

