/* vxWorks.h - VxWorks standard definitions header */

/*  Copyright 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1993
    Free Software Foundation, Inc.

    This code was donated by Wind River Systems, Inc. */

/*
modification history
--------------------
01z,05oct90,shl  added copyright notice.
                 made #endif ANSI style.
01y,28sep90,del  added I960 defines.
01x,29may90,del	 moved types to vxTypes.h
01w,09apr90,jcf  added timeout definitions.
01v,24jan90,gae  moved network configuration flags here from makefile's.
01u,01sep88,mcl  definition of INSTR dependent on processor family; added SPARC.
	   +gae  added MC680X0 and defined CPU_FAMILY.
01t,08apr89,dnw  added ifdef to prevent inclusion of vxWorks.h more than once.
01s,22jun88,dnw	 moved READ, WRITE, and UPDATE back here from ioLib.h.
01r,22apr88,gae  oops! forgot some #endif's in 01q.
01q,12apr88,gae  removed QUICK & WAIT; added STD_{IN,OUT,ERR}.
		 fixed #define's of FALSE, TRUE, etc.
		 moved READ, WRITE, and UPDATE to ioLib.h.
01p,04dec87,dnw  added undefine of MC68000 to get around Green Hills bug that
		   pre-defines MC68000.
01o,12nov87,ecs  added type ULONG.
01n,08feb86,dnw  added types INSTR, UINT, USHORT.
01m,14oct85,rdc  added BUS types.
01l,16jul85,jlf  added conditional for NULL and EOF.
01k,24jun85,rdc  installed condtional compile so we can include in
		 assembly language files.  See instructions below.
		 Added System type macro and CPU type macro.
01j,13jun85,dnw  cleaned-up, removed more obsolete stuff to wrs.h
01i,11sep84,jlf  changed name from wrs.h to vxWorks.h.  removed GLOBAL.
01h,03jun84,dnw  removed IGNORE declaration.
01g,09apr84,jlf  added MEMBER_SIZE macro.
01f,14dec83,dnw  added MSB, LSB macros
01e,17nov83,jlf  added STATUS type, for routines which return a status.
01d,13jul83,dnw  added NELEMENTS macro
01c,14May83,dnw  added OFFSET macro
01b,17Feb83,dnw  added stuff from Whitesmiths std.h
01a,15Feb83,dnw  written
*/

#ifndef INCvxWorksh
#define INCvxWorksh

#if	!defined(EOF) || (EOF!=(-1))
#define EOF		(-1)
#endif	

#if	!defined(FALSE) || (FALSE!=0)
#define FALSE		0
#endif	

#if	!defined(TRUE) || (TRUE!=1)
#define TRUE		1
#endif	


#define NONE		(-1)	/* for times when NULL won't do */
#define EOS		'\0'	/* C string terminator */


/* return status values */

#define OK		0
#define ERROR		(-1)

/* timeout defines */

#define NO_WAIT		0
#define WAIT_FOREVER	(-1)

/* low-level I/O input, output, error fd's */

#define	STD_IN	0
#define	STD_OUT	1
#define	STD_ERR	2

/* modes - must match O_RDONLY/O_WRONLY/O_RDWR in ioLib.h! */

#define READ		0
#define WRITE		1
#define UPDATE		2

/* SYSTEM types */

#define V7		1	/* ATT version 7 */
#define SYS_V		2	/* ATT System 5 */
#define BSD_4_2		3	/* Berkeley BSD 4.2 */

/* CPU types */

/* The Green Hills compiler pre-defines "MC68000"!! */
#ifdef MC68000
#undef MC68000
#endif	

#define MC68000		1
#define MC68010		2
#define MC68020		3
#define MC68030		4
#define MC68040		5
#define MC680X0		9

#define SPARC		10

#ifndef I960
#define	I960		20
#endif	

#define	I960KB		21
#define	I960CA		22

#if	CPU==MC68000 || CPU==MC68010 || CPU==MC68020 || CPU==MC68030
#define	CPU_FAMILY	MC680X0
#endif	/* CPU==MC68000 || CPU==MC68010 || CPU==MC68020 || CPU==MC68030 */

#if	CPU==SPARC
#define	CPU_FAMILY	SPARC
#endif	/* CPU==SPARC */

#if 	CPU==I960KB
#define	CPU_FAMILY	I960
#endif	/* 	CPU==I960KB */

#if 	CPU==I960CA
#define	CPU_FAMILY	I960
#endif	/* 	CPU==I960CA */

/* BUS types */

#define VME_BUS		1
#define MULTI_BUS	2

/* network configuration parameters */

#define	INET		/* include internet protocols */
#define	BSD	43	/* BSD 4.3 -like OS */
#define	BSDDEBUG	/* turn on debug */
#define	GATEWAY		/* tables to be initialized for gateway routing */

/* common macros */

#define MSB(x)	(((x) >> 8) & 0xff)	/* most signif byte of 2-byte integer */
#define LSB(x)	((x) & 0xff)		/* least signif byte of 2-byte integer*/

#define OFFSET(structure, member)	/* byte offset of member in structure*/\
		((int) &(((structure *) 0) -> member))

#define MEMBER_SIZE(structure, member)	/* size of a member of a structure */\
		(sizeof (((structure *) 0) -> member))

#define NELEMENTS(array)		/* number of elements in an array */ \
		(sizeof (array) / sizeof ((array) [0]))

#define FOREVER	for (;;)

/* storage class specifier definitions */

#define FAST	register
#define IMPORT	extern
#define LOCAL	static


/* include typedefs - must come after CPU_FAMILY definitions above */

#include "vxTypes.h"

#endif	/* INCvxWorksh */
