/* %Z%%M% %I% %E% */

/*
 * Copyright (c) 1993, 1995 by Wayne C. Gramlich.
 * All rights reserved.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * for any purpose is hereby granted without fee provided that the above
 * copyright notice and this permission are retained.  The author makes
 * no representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 */

/*
 * This file implements the address base type operations in ANSI-C.
 */

#ifndef ERROR_EXPORTS_H
#include "error_exports.h"
#endif

#ifndef STHEADERS_H
#include "stheaders.h"
#endif

#ifndef UNIX_ASSERT_H
#include "unix_assert.h"
#endif

unsigned address__one = 1;

unsigned address__zero = 0;

unsigned address___initial = 0;

extern module___object address__module__object;
extern type___reference address_type_ref;

static object___object address_initial_object = {
	"",				/* Package name */
	"address",			/* Type name */
	"??",				/* Object name */
	(type___reference *)0,		/*XXX: Fix me */
	(int *)0,			/* Size of unsigned object */
	0,				/* Static needs count */
	(need___entry *)0,		/*XXX: Fix me Static needs */
	0,				/* Parameter needs count */
	(need___entry *)0,		/* Parameter needs */
	(void **)&address___initial,	/* Object pointer */
	(instantiation___object *)0	/* Instantiation list */
};
static object___object *object_list[1] = {
	&address_initial_object,
};

void
address__external__initialize(void)
{
	address__module__object.object_count = 1;
	address__module__object.objects = object_list;
}

unsigned
address__add(
	unsigned	left,
	unsigned	right)
{
	return left + right;
}

unsigned
address__and(
	unsigned	left,
	unsigned	right)
{
	return left & right;
}

unsigned
address__character_convert(
	unsigned	arg)
{
	return arg;
}

unsigned
address__copy(
	unsigned	arg)
{
	return arg;
}

unsigned
address__divide(
	unsigned	left,
	unsigned	right)
{
	return left / right;
}

unsigned
address__equal(
	unsigned	left,
	unsigned	right)
{
	return left == right;
}

unsigned
address__greater_than(
	unsigned	left,
	unsigned	right)
{
	return left > right;
}

unsigned
address__hash(
	unsigned	arg)
{
	return arg;
}

unsigned
address__left_shift(
	unsigned	left,
	unsigned	right)
{
	return left << right;
}

unsigned
address__less_than(
	unsigned	left,
	unsigned	right)
{
	return left < right;
}

unsigned
address__minus(
	unsigned	arg)
{
	return -arg;
}

unsigned
address__multiply(
	unsigned	left,
	unsigned	right)
{
	return left * right;
}

unsigned
address__not(
	unsigned	arg)
{
	return ~arg;
}

unsigned
address__or(
	unsigned	left,
	unsigned	right)
{
	return left | right;
}

unsigned
address__power(
	unsigned	left,
	unsigned	right)
{
	error_fatal("address__power not implemented yet");
	return 0;
}

unsigned
address__remainder(
	unsigned	left,
	unsigned	right)
{
	return left % right;
}

unsigned
address__right_shift(
	unsigned	left,
	unsigned	right)
{
	return left >> right;
}

unsigned
address__subtract(
	unsigned	left,
	unsigned	right)
{
	return left - right;
}

unsigned
address__unsigned_convert(
	unsigned	arg)
{
	return arg;
}

unsigned
address__xor(
	unsigned	left,
	unsigned	right)
{
	return left ^ right;
}

