#ifndef OS_H
#define OS_H
/*
**
**	$Id: os.h,v 1.876 1996/08/13 03:11:08 chris Exp $
**	$Revision: 1.876 $
**
**	$Filename: include/os.h $
**	$Author: chris $
**	$Date: 1996/08/13 03:11:08 $
**	$Portability: AMIGADOS $
**
**	Bindet die entsprechende OS-abhängige Headerdatei ein. Diese Datei
**	MUSS von ALLEN Modulen als erstes eingebunden werden, noch vor
**	etwaigen #ifdefs.
**
**	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF RELOG AG.
**
**	COPYRIGHT (C) 1992-1996 BY RELOG AG, ZUERICH. ALL RIGHTS RESERVED.
**	NO PART OF THIS SOFTWARE MAY BE COPIED, REPRODUCED, OR TRANSMITTED
**	IN ANY FORM OR BY ANY MEANS,  WITHOUT THE PRIOR WRITTEN PERMISSION
**	OF RELOG AG.
**
*/

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

#include <stdlib.h>
#include <stdarg.h>
#include <string.h>


/*
**	Datentypen
*/

#ifndef FAR
#define FAR								/* Far-Attribut */
#endif

/*	Aus exec/types.h:
typedef void				VOID;
typedef unsigned short		BOOL;
 define TRUE				1
 define FALSE				0
*/

typedef signed char			S8;			/*  8 bit mit Vorzeichen */
typedef unsigned char		U8;			/*  8 bit ohne Vorzeichen */
typedef signed short		S16;		/* 16 bit mit Vorzeichen */
typedef unsigned short		U16;		/*  8 bit ohne Vorzeichen */
typedef signed long			S32;		/* 32 bit mit Vorzeichen */
typedef unsigned long		U32;		/* 32 bit ohne Vorzeichen */

typedef unsigned char 		*LPBYTE;	/* Pointer to application memory */
typedef VOID				*LPVOID;	/* Far pointer to void */

typedef VOID				(*CSS_CALLBACK)( U16, U32 );


#ifndef NULL
#define NULL			((VOID *)0L)
#endif


#ifndef GET_U16
#define GET_U16(a)		(*(U16 *)(a))
#endif


/****************************************************************************
**	Lists and nodes
*/

typedef struct _Node
{
	struct _Node	*Succ;
	struct _Node	*Pred;
} IC_NODE;


typedef struct
{
	IC_NODE	*Head;
	IC_NODE	*Tail;
	IC_NODE	*TailPred;
} IC_LIST;

#define NEW_LIST(l) IC_LIST l = { (VOID *)&l.Tail, NULL, (VOID *)&l.Head }

#define DOLIST(list, node) \
	for (node=(VOID *)(list)->Head; ((IC_NODE *)(node))->Succ; \
	(node) = (VOID *)(((IC_NODE *)(node))->Succ))

#define ISLISTEMPTY(l)	(((l)->TailPred) == (IC_NODE *)(l))
#define NEWLIST(l)		{(l)->Head = (IC_NODE *)&(l)->Tail; (l)->Tail = NULL; (l)->TailPred = (IC_NODE *)&(l)->Head; }
#define ADDHEAD(l,n)	{IC_NODE *_s=(l)->Head; (l)->Head=(n); (n)->Succ=_s; (n)->Pred=(IC_NODE *)&(l)->Head; _s->Pred=(n);}
#define ADDTAIL(l,n)	{IC_NODE *_p=(l)->TailPred; (l)->TailPred=(n); (n)->Succ=(IC_NODE *)&(l)->Tail; (n)->Pred=_p; _p->Succ=(n);}
#define REMOVE(n)		{IC_NODE *_s=(n)->Succ, *_p=(n)->Pred; _p->Succ=_s; _s->Pred=_p;}


#endif	/* OS_H */

