⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 host.h

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 H
字号:
/*
 * C compiler file mip/host.h
 * Copyright (C) Codemist Ltd., 1988
 * Copyright (C) Acorn Computers Ltd., 1988.
 */

/*
 * RCS $Revision: 1.60 $  Codemist 11
 * Checkin $Date: 1998/05/11 10:33:34 $
 * Revising $Author: dcleland $
 */

/* AM memo, July 1990: in principle there should be no tests of         */
/* COMPILING_ON_<machine>, but only COMPILING_ON_<operating system> or  */
/* COMPILING_ON_<manufacturer> (for special features).                  */
/* Accordingly COMPILING_ON_<machine> is deprecated.                    */

/*
 * This file deals with peculiarities of the host system under which the
 * compiler is compiled AND peculiarities of the host system under which
 * the compiler will run (hence it might need further explication in the
 * unlikely event that we wish to cross-compile the compiler (repeatedly
 * as opposed to once-off bootstrap)).   It is now loaded first and can
 * therefore not depend on TARGET_xxx parameterisations, these are now
 * done in target.h or, if systematic, in mip/defaults.h.
 * The correct mechanism for host->target dependencies (e.g. if compiling
 * on unix then make a unix compiler, else a homebrew object file version)
 * is via the options.h file, along the lines of:
 *   #ifdef COMPILING_ON_UNIX
 *   #  define TARGET_IS_UNIX
 *   #endif
 * The intent is that most of the pecularities should be linked to
 * COMPILING_ON_machine and/or COMPILING_ON_system.  Further NO OTHER FILE
 * should refer to magic names like 'unix', '__arm' etc., but go via
 * the COMPILING_xxx flags defined here in terms of these.
 * The aim is that this file should suffice for all host dependencies
 * and thus all COMPILING_ON_xxx tests outwith are suspect.  However,
 * the #include file munger clearly needs to so depend.
 */


/* The easiest way to ensure that host.h and angel.h cannot clash is
 * to ensure that if angel.h has been included that host.h itself
 * checks this flag and pretends it has already been included.
 */
#ifdef DO_NOT_INCLUDE_HOST_H
#define _host_LOADED 1
#endif

#ifndef _host_LOADED
#define _host_LOADED 1

#include <stdio.h>
#include <stddef.h>     /* for xsyn.c (and more?) and offsetof test below */
#include <stdlib.h>     /* for EXIT_FAILURE test below */

#ifndef SEEK_SET
#  define SEEK_SET  0
#endif
#ifndef SEEK_CUR
#  define SEEK_CUR  1
#endif
#ifndef SEEK_END
#  define SEEK_END  2
#endif

#ifdef __STDC__

#define BELL      '\a'
typedef void                  /* newline to fool the topcc tool */
             *VoidStar;
typedef const void
             *ConstVoidStar;
#define safe_tolower(ch)      tolower(ch)  /* see comment below */
#define safe_toupper(ch)      toupper(ch)  /* see comment below */

#else  /* ! __STDC__ */

#define BELL      '\007'
typedef char *VoidStar;
#define  ConstVoidStar VoidStar
/*
 * not all C libraries define tolower() and toupper() over all character
 * values. BSD Unix, for example, defines tolower() only over UC chars.
 */
#define safe_tolower(ch)      (isupper(ch) ? tolower(ch) : ch)
#define safe_toupper(ch)      (islower(ch) ? toupper(ch) : ch)

#endif /* ! __STDC__ */

/* The following for the benefit of compiling on SunOS */
#ifndef offsetof
#  define offsetof(T, member)  ((char *)&(((T *)0)->member) - (char *)0)
#endif

#ifdef unix                   /* A temporary sop to older compilers */
#  ifndef __unix              /* (good for long-term portability?)  */
#    define __unix    1
#  endif
#endif

#ifdef __unix
/* Generic unix -- hopefully a split into other variants will not be    */
/* needed.  However, beware the 'bsd' test above and safe_toupper etc.  */
/* which cope with backwards (pre-posix/X/open) unix compatility.       */
#  define COMPILING_ON_UNIX     1
#endif
#ifdef __helios
/* start improving parameterisation.  Maybe we should also set          */
/* COMPILING_ON_UNIX and use HELIOS as a special subcase?               */
#  define COMPILING_ON_HELIOS   1
#endif
#ifdef __acorn
#  define COMPILING_ON_ACORN_KIT  1
#endif
#ifdef __riscos
#  define COMPILING_ON_RISC_OS  1
#endif
#ifdef __arm
#  define COMPILING_ON_ARM      1  /* dying: unix/riscos/acorn suffice  */
#endif
#ifdef __ibm370
#  ifndef COMPILING_ON_UNIX
#     define __mvs 1               /* a hack to be removed soon        */
#  endif
#endif
#ifdef __mvs
#  define COMPILING_ON_MVS      1
#endif
#if defined(_WIN32)
#  define COMPILING_ON_WIN32    1
#  define COMPILING_ON_WINDOWS  1
#endif
#if defined(_CONSOLE)
#  define COMPILING_ON_WINDOWS_CONSOLE 1
#  define COMPILING_ON_WINDOWS 1
#endif
#ifdef _MSDOS
#  define COMPILING_ON_MSDOS    1
#endif
#ifdef __WATCOMC__
#  define COMPILING_ON_MSDOS    1
#endif
#ifdef _MSC_VER
#  define COMPILING_ON_MSDOS    1
#  define COMPILING_ON_WINDOWS  1
#  if defined(__cplusplus)
#    define IMPLEMENT_BOOL_AS_INT 1 /* VC++ doesn't have 'bool' (yet) */
#  endif
#endif
#ifdef macintosh
#  define COMPILING_ON_MACINTOSH 1 /* for dependencies on how Macintosh handles filenames, etc. */
#  define COMPILING_ON_MPW 1      /* for dependencies on how MPW handles arguments, i/o, etc. */
#endif
/* The '(defined(__sparc) && defined(P_tmpdir)                     */
/* && !defined(__svr4__))' is to detect gcc on SunOS.              */
/* C++ compilers don't have to define __STDC__                     */
/* __SVR4 detects Solaris 2.x under SparcWorks. */
#if (defined(__sparc) && defined(P_tmpdir))
#  if defined(__svr4__) || defined(__SVR4)
#    define COMPILING_ON_SOLARIS
#    if defined(__SVR4)
        /* SparcWorks C++ 4.2 doesn't have 'bool' */
#       define IMPLEMENT_BOOL_AS_INT 1
#    endif
#  else
#    define COMPILING_ON_SUNOS
#  endif
#endif
#ifdef __hppa
#  define COMPILING_ON_HPUX
#endif

/*
 * The following typedefs may need alteration for obscure host machines.
 */
#if defined(__alpha) && defined(__osf__) /* =========================== */
/* Under OSF the alpha has 64-bit pointers and 64-bit longs.            */
typedef                int   int32;
typedef unsigned       int   unsigned32;
/* IPtr and UPtr are 'ints of same size as pointer'.  Do not use in     */
/* new code.  Currently only used within 'ncc'.                         */
typedef          long  int   IPtr;
typedef unsigned long  int   UPtr;

#else /* all hosts except alpha under OSF ============================= */

typedef          long  int   int32;
typedef unsigned long  int   unsigned32;
/* IPtr and UPtr are 'ints of same size as pointer'.  Do not use in     */
/* new code.  Currently only used within 'ncc'.                         */
#define IPtr int32
#define UPtr unsigned32
#endif /* ============================================================= */

typedef          short int   int16;
typedef unsigned short int   unsigned16;
typedef   signed       char  int8;
typedef unsigned       char  unsigned8;
/*
 * HGB 22-July-97 - signedxx synomyms for intxx
 */
typedef int32 signed32;
typedef int16 signed16;
typedef int8 signed8;

/* The following code defines the 'bool' type to be 'int' under C       */
/* and real 'bool' under C++.  It also avoids warnings such as          */
/* C++ keyword 'bool' used as identifier.  It can be overridden by      */
/* defining IMPLEMENT_BOOL_AS_ENUM or IMPLEMENT_BOOL_AS_INT.            */
#undef _bool
#undef _bool_defined
#ifdef IMPLEMENT_BOOL_AS_ENUM
#  if defined(true) || defined(false)
#    error implement bool as enum but true or false already defined
#  endif
   enum _bool { _false, _true };
#  define _bool enum _bool
#  define _bool_defined 1
#elif defined(IMPLEMENT_BOOL_AS_INT) || !defined(__cplusplus)
   typedef int _bool;
#  define _false 0
#  define _true 1
#  define _bool_defined 1
#endif

#ifdef _bool_defined
#  if defined(_MSC_VER) || defined(__CC_NORCROFT) /* When using MS Visual C/C++ v4.2 */
#    define bool _bool /* avoids "'bool' is reserved word" warning      */
#  else
     typedef _bool bool;
#  endif
/* if true and false are already defined assume they will work          */
#  if !defined(true) && !defined(false)
#    define true _true
#    define false _false
#  elif !(defined(true) && defined(false))
#    error only one of true and false defined
#  endif
#endif

#define YES   true
#define NO    false
#undef TRUE             /* some OSF headers define as 1                 */
#define TRUE  true
#undef FALSE            /* some OSF headers define as 1                 */
#define FALSE false

/* 'uint' conflicts with some Unixen sys/types.h, so we now don't define it */
typedef unsigned8  uint8;
typedef unsigned16 uint16;
typedef unsigned32 uint32;

typedef unsigned   Uint;
typedef unsigned8  Uint8;
typedef unsigned16 Uint16;
typedef unsigned32 Uint32;

#ifdef ALPHA_TASO_SHORT_ON_OSF /* was __alpha && __osf.                 */
/* The following sets ArgvType for 64-bit pointers so that              */
/* DEC Unix (OSF) cc can be used with the -xtaso_short compiler option  */
/* to force pointers to be 32-bit.  Not currently used since most/all   */
/* ARM tools accept 32 or 64 bit pointers transparently.  See IPtr.     */
#pragma pointer_size (save)
#pragma pointer_size (long)
typedef char *ArgvType;
#pragma pointer_size (restore)
#else
typedef char *ArgvType;
#endif

/*
 * Rotate macros
 */
#define ROL_32(val, n) \
((((unsigned32)(val) << (n)) | ((unsigned32)(val) >> (32-(n)))) & 0xFFFFFFFFL)
#define ROR_32(val, n) \
((((unsigned32)(val) >> (n)) | ((unsigned32)(val) << (32-(n)))) & 0xFFFFFFFFL)

/* For many hosts, this can be defined as just ((int32)val)>>(n) */
#define signed_rightshift_(val, n) \
((int32)(val)>=0 ? (val)>>(n) : ~((~(val))>>(n)))

/* The following two lines are a safety play against using ncc with a   */
/* vendor supplied library, many of which refuse to accept "wb".  POSIX */
/* and other unix standards require "wb" and "w" to have the same       */
/* effect and so the following is safe.                                 */
#ifdef COMPILING_ON_UNIX
#  define FOPEN_WB     "w"
#  define FOPEN_RB     "r"
#  define FOPEN_RWB    "r+"
#  ifndef __STDC__                     /* caveat RISCiX... */
#    define remove(file) unlink(file)  /* a horrid hack, but probably best? */
#  endif
#else
#  define FOPEN_WB     "wb"
#  define FOPEN_RB     "rb"
#  define FOPEN_RWB    "rb+"
#endif

#ifdef COMPILING_ON_HPUX
/* HPUX defines FILENAME_MAX as 14 !!! */
#  include <stdio.h>
#  undef FILENAME_MAX
#  define FILENAME_MAX 256
#endif

#ifndef FILENAME_MAX
#  define FILENAME_MAX 256
#endif

#if (!defined(__STDC__) && !defined(__cplusplus)) || \
    defined(COMPILING_ON_SUNOS)
/* Use bcopy rather than memmove, as memmove is not available.     */
/* There does not seem to be a header for bcopy.                   */
void bcopy(const char *src, char *dst, int length);
#  define memmove(d,s,l) bcopy(s,d,l)

/* BSD/SUN don't have strtoul(), but then strtol() doesn't barf on */
/* overflow as required by ANSI... This bodge is horrid.           */
#  define strtoul(s, ptr, base) strtol(s, ptr, base)

/* strtod is present in the C-library but is not in stdlib.h       */
extern double strtod(const char *str, char **ptr);
#endif

#ifdef __CC_NORCROFT
#  ifndef COMPILING_ON_UNIX     /* suppress if maybe non-norcroft lib */
#    define LIBRARY_IS_NORCROFT 1
#  endif
#  ifdef LIBRARY_IS_ALIEN       /* unify with the 3 previous lines?   */
#    undef LIBRARY_IS_NORCROFT
#  endif
#endif

#ifdef LIBRARY_IS_NORCROFT
/*
 * Calls to all non-ansi functions are removable by macros here.
 */
#ifdef __cplusplus
extern "C" {
#endif
/* These routines have no floating point abilities.                     */
extern int _vfprintf(FILE *stream, const char *format, __va_list arg);
extern int _vsprintf(char *s, const char *format, __va_list arg);
extern int _fprintf(FILE *stream, const char *format, ...);
extern int _sprintf(char *s, const char *format, ...);
#ifdef __cplusplus
}
#endif
#else /* LIBRARY_IS_NORCROFT */
#  define _vfprintf vfprintf
#  define _vsprintf vsprintf
#  define _fprintf fprintf
#  define _sprintf sprintf
#endif /* LIBRARY_IS_NORCROFT */

#ifdef COMPILING_ON_MVS

#define HOST_USES_CCOM_INTERFACE 1
#define EXIT_warn                4
#define EXIT_error               8
#define EXIT_fatal              12
#define EXIT_syserr             16

#else  /* ! COMPILING_ON_MVS */

#define EXIT_warn                0
#define EXIT_error               1
#define EXIT_fatal               1

#ifdef  COMPILING_ON_UNIX
#  define EXIT_syserr            100
#else
#  define EXIT_syserr            1
#endif

#endif /* ! COMPILING_ON_MVS */

/* For systems that do not define EXIT_SUCCESS and EXIT_FAILURE */
#ifndef EXIT_SUCCESS
#  define EXIT_SUCCESS           0
#endif
#ifndef EXIT_FAILURE
#  define EXIT_FAILURE           EXIT_error
#endif

#ifdef COMPILING_ON_MPW
#  include <CursorCtl.h>
#  define UPDATE_PROGRESS()     SpinCursor(1)
#endif

#ifndef UPDATE_PROGRESS
#  define UPDATE_PROGRESS() ((void)0)
#endif

#ifndef IGNORE
#define IGNORE(x) (x = x)  /* Silence compiler warnings for unused arguments */
#endif

/* Define endian-ness of host */

#if defined(__sparc) || defined(macintosh)
#  define HOST_ENDIAN_BIG
#elif defined(__acorn) || defined(__mvs) || defined(_WIN32) || \
  (defined(__alpha) && defined(__osf__))
#  define HOST_ENDIAN_LITTLE
#else
#  define HOST_ENDIAN_UNKNOWN
#endif

#endif

/* end of host.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -