/* $Header$ */
/* sh.types.h: Do the necessary typedefs for each system.
 *             Up till now I avoided making this into a separate file
 *	       But I just wanted to eliminate the whole mess from sh.h
 *	       In reality this should not be here! It is OS and MACHINE
 *	       dependent, even between different revisions of OS's...
 *	       Ideally there should be a way in c, to find out if something
 *	       was typedef'ed, but unfortunately we rely in cpp kludges.
 *	       Someday, this file will be removed... 
 *						
 *						christos
 */
/*-
 * Copyright (c) 1980, 1991 The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */
#ifndef _h_sh_types
#define _h_sh_types


/***
 *** LynxOS 2.1
 ***/
#ifdef Lynx
# ifndef _SIGMASK_T
#  define _SIGMASK_T
    typedef long sigmask_t;
# endif /* _SIGMASK_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif

/***
 *** MachTen 
 ***/
#ifdef __MACHTEN__
# ifndef _PID_T
#  define _PID_T
# endif
#endif


/***
 *** Suns running sunos3.x - sunos4.1.x
 ***/
#if (defined(sun) || defined(__sun__)) && SYSVREL == 0
/* This used to be long, but lint dissagrees... */
# ifndef _SIGMASK_T
#  define _SIGMASK_T
    typedef int sigmask_t;
# endif /* _SIGMASK_T */
# ifndef _PTR_T
#  define _PTR_T 
#   ifdef __GNUC__
    typedef void * ptr_t;
#   else
    typedef char * ptr_t;
#   endif /* __GNUC__ */
# endif /* _PTR_T */
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef __sys_stdtypes_h
#  define __sys_stdtypes_h
#   ifndef __lucid
     typedef int pid_t;
     typedef unsigned int speed_t;
#   endif
# endif /* __sys_stdtypes.h */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
# ifndef _SPEED_T
#  define _SPEED_T
# endif /* _SPEED_T */
# ifndef SUNOS4
#  ifndef MACH
#   ifndef _UID_T
#    define _UID_T
      typedef int uid_t;
#   endif /* _UID_T */
#   ifndef _GID_T
#    define _GID_T
      typedef int gid_t;
#   endif /* _GID_T */
#  endif /* !MACH */
# endif /* !SUNOS4 */
#endif /* (sun || __sun__) && SYSVREL == 0 */


/***
 *** Hp's running hpux 7.0 or 8.0
 ***/
#ifdef __hpux
# ifndef _SIZE_T
#  define _SIZE_T
    typedef unsigned int size_t;
# endif /* _SIZE_T */

# ifndef _PTR_T
#  define _PTR_T 
    typedef void * ptr_t;
# endif /* _PTR_T */

# ifndef _PID_T
#  define _PID_T
    typedef long pid_t;
# endif /* _PID_T */

# ifndef _SIGMASK_T
#  define _SIGMASK_T
    typedef long sigmask_t;
# endif /* _SIGMASK_T */
  
# ifndef _SPEED_T
   /* I thought POSIX was supposed to protect all typedefs! */
#  define _SPEED_T
# endif /* _SPEED_T */

extern uid_t getuid(), geteuid();
extern gid_t getgid(), getegid();
extern sigmask_t sigblock();
extern sigmask_t sigsetmask();
extern pid_t getpid();
extern pid_t fork();
extern void perror();
extern void _exit();
extern void abort();
extern void qsort();
extern void free();
extern unsigned int alarm();
extern unsigned int sleep();
# if HPUXVERSION < 800	/* XXX: Not true for 8.0 */
extern void sigpause();
extern sigmask_t sigspace();
extern int lstat();
extern int readlink();
extern int sigvector();
extern int gethostname();
extern int ioctl();
extern int nice();
extern char *sbrk();
# endif /* HPUXVERSION < 800 */
#endif /* __hpux */

#if defined(_MINIX) || defined(__EMX__) || defined(COHERENT)
typedef char * caddr_t;
#endif /* _MINIX || __EMX__ || COHERENT */

/***
 *** hp9000s500 running hpux-5.2
 ***/
#ifdef hp9000s500
# ifndef _PTR_T
#  define _PTR_T
    typedef char * ptr_t;
# endif /* _PTR_T */
#endif /* hp9000s500 */

/***
 *** Data General AViiON 88000 or Pentium, running dgux 5.4R3 or R4.11
 ***/
#ifdef DGUX
# ifndef _SIZE_T
#  define _SIZE_T size_t
    typedef unsigned int size_t;
# endif /* _SIZE_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* DGUX */


/***
 *** Intel 386, ISC 386/ix v2.0.2
 ***/
#ifdef ISC202
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* ISC202 */

/***
 *** a PFU/Fujitsu A-xx computer SX/A Edition 60 or later
 ***/
#ifdef SXA
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* SXA */

/***
 *** a stellar 2600, running stellix 2.3
 ***/
#ifdef stellar
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* stellar */

/***
 *** BSD systems, pre and post 4.3
 ***/
#ifdef BSD
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* BSD */


/***
 *** BSD RENO advertises itself as POSIX, but
 *** it is missing speed_t 
 ***/
#ifdef RENO
# ifndef _SPEED_T
#  define _SPEED_T
   typedef unsigned int speed_t; 
# endif /* _SPEED_T */
#endif /* RENO */


/***
 *** NeXT OS 3.x
 ***/ 
#ifdef NeXT
# ifndef _SPEED_T
#  define _SPEED_T
   typedef unsigned int speed_t; 
# endif /* _SPEED_T */
#endif /* NeXT */

/***
 *** Utah's HPBSD
 *** some posix & 4.4 BSD changes (pid_t is a short)
 ***/
#ifdef HPBSD
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* HPBSD */


/***
 *** Pyramid, BSD universe
 *** In addition to the size_t
 ***/
#ifdef pyr
# ifndef _PID_T
#  define _PID_T
   typedef short pid_t;
# endif /* _PID_T */
#endif /* pyr */


/***
 *** rs6000, ibm370, ps2, rt: running flavors of aix.
 ***/
#ifdef IBMAIX
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef aiws
#  ifndef _PID_T
#   define _PID_T
#  endif /* _PID_T */
# endif /* !aiws */
# ifdef _IBMR2
#  ifndef _SPEED_T 
#   define _SPEED_T
#  endif /* _SPEED_T */
# endif /* _IBMR2 */
#endif /* IBMAIX */


/***
 *** Ultrix...
 ***/
#if defined(ultrix) || defined(__ultrix)
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* ultrix || __ultrix */


/***
 *** Silicon graphics IRIS4D running IRIX3_3
 ***/
#if defined(IRIS4D) && defined(IRIX3_3)
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* IRIS4D && IRIX3_3 */


/***
 *** Sequent
 ***/
#ifdef sequent
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* sequent */

/***
 *** Apple AUX.
 ***/
#ifdef OREO
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* OREO */

/***
 *** Intel 386, Hypercube
 ***/
#ifdef INTEL
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* INTEL */

/***
 *** Concurrent (Masscomp) running RTU 4.1A & RTU 5.0. 
 **** [RTU 6.0 from mike connor]
 *** Added, DAS DEC-90.
 ***/
#ifdef	masscomp
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifdef RTU6
#  ifndef _PID_T
#   define _PID_T
#  endif /* _PID_T */
#  ifndef _SPEED_T
#   define _SPEED_T
#  endif /* _SPEED_T */
#endif /* RTU6 */
#endif	/* masscomp */

/***
 *** Encore multimax running umax 4.2
 ***/
#ifdef	ns32000
# ifdef __TYPES_DOT_H__
#  ifndef _SIZE_T
#   define _SIZE_T
#  endif /* _SIZE_T */
# endif /* __TYPES_DOT_H__ */
#endif	/* ns32000 */

/***
 *** Silicon Graphics IRIS 3000
 ***
 ***/
#ifdef IRIS3D
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* IRIS3D */

/* 
 * Motorola MPC running R32V2 (sysV88)
 */
#ifdef sysV88
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* sysV88 */
 
/* 
 * Amdahl running UTS (Sys V3)
 */
#ifdef uts
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* uts */

/* 
 * Tektronix 4300 running UTek 4.0 (BSD 4.2)
 */
#ifdef UTek
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef _UID_T
#  define _UID_T
   typedef int uid_t;
# endif /* _UID_T */
# ifndef _GID_T
#  define _GID_T
   typedef int gid_t;
# endif /* _GID_T */
#endif /* UTek */

/* 
 * Tektronix XD88/10 running UTekV (Sys V3)
 */
#ifdef UTekV
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* UTekV*/

/*
 * UnixPC aka u3b1
 */
#ifdef UNIXPC
# ifdef types_h
#  ifndef _SIZE_T
#   define _SIZE_T
#  endif /* _SIZE_T */
# endif /* types_h */
#endif /* UNIXPC */

/*
 * NS32000 OPUS
 */
#ifdef OPUS
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* OPUS */

/*
 * BBN Butterfly gp1000
 */
#ifdef butterfly
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* butterfly */

/*
 * Convex
 */
#ifdef convex
# if defined(__SIZE_T) && !defined(_SIZE_T)
#  define _SIZE_T
# endif /* __SIZE_T && !_SIZE_T */
#endif /* convex */

/*
 * Alliant FX-2800/FX-80
 */
#ifdef alliant
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
# ifdef mc68000
   typedef int   pid_t; /* FX-80 */
# else
   typedef short pid_t;	/* FX-2800 */
# endif 
#endif /* alliant */

/*
 * DNIX
 */
#ifdef DNIX
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* DNIX */

/*
 *  Apollo running Domain/OS SR10.3 or greater
 */
#ifdef apollo
# ifndef _PID_T
#  define _PID_T
   typedef int pid_t;	/* Older versions might not like that */
# endif /* _PID_T */
#endif /* apollo */

/*
 *  Vax running VMS_POSIX
 */
#ifdef _VMS_POSIX
# ifndef _SIZE_T
#  define _SIZE_T
# endif /* _SIZE_T */
#endif /* _VMS_POSIX */

/***
 *** a pdp/11, running 2BSD
 ***/
#ifdef pdp11
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* pdp11 */

/***
 *** a Harris, running CX/UX
 ***/
#ifdef _CX_UX
# ifndef _PID_T
#  define _PID_T
# endif /* _PID_T */
#endif /* _CX_UX */

/***
 *** Catch all for non POSIX and/or non ANSI systems.
 *** Systems up to spec *should* define these automatically
 *** I am open to suggestions on how to do this correctly!
 ***/

#ifndef __STDC__

# ifndef _SIZE_T
#  define _SIZE_T
   typedef int size_t;		/* As sun comments ??? : meaning I take it */
# endif /* _SIZE_T */		/* Until we make the world ANSI... */

#endif  /* ! __STDC__ */

#ifndef POSIX

# ifndef _PID_T
#  define _PID_T
    typedef int pid_t;
# endif /* _PID_T */

# ifndef _SPEED_T
#  define _SPEED_T
    typedef unsigned int speed_t;
# endif /* _SPEED_T */

# ifndef _PTR_T
#  define _PTR_T 
    typedef char * ptr_t;
#endif /* _PTR_T */

# ifndef _IOCTL_T
#  define _IOCTL_T
    typedef char * ioctl_t;	/* Third arg of ioctl */
# endif /* _IOCTL_T */

#endif /* ! POSIX */



/***
 *** This is our own junk types.
 ***/
#ifndef _PTR_T
# define _PTR_T 
    typedef void * ptr_t;
#endif /* _PTR_T */

#ifndef _SIGMASK_T
# define _SIGMASK_T
    typedef int sigmask_t;
#endif /* _SIGMASK_T */

#ifndef _IOCTL_T
# define _IOCTL_T
    typedef void * ioctl_t;	/* Third arg of ioctl */
#endif /* _IOCTL_T */

#endif /* _h_sh_types */
