зеркало из https://github.com/mozilla/pjs.git
289 строки
6.2 KiB
C
289 строки
6.2 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
platform.h
|
|
Cross-Platform Core Types
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Platform-specific defines
|
|
|
|
XP_WIN XP_IS_WIN XP_WIN_ARG(X)
|
|
XP_MAC XP_IS_MAC XP_MAC_ARG(X)
|
|
XP_UNIX XP_IS_UNIX XP_UNIX_ARG(X)
|
|
XP_CPLUSPLUS XP_IS_CPLUSPLUS
|
|
defined iff always defined defined to nothing
|
|
on that platform as 0 or 1 or X
|
|
|
|
Also Bool, Int32, Int16, Int, Uint32, Uint16, Uint, and nil
|
|
And TRUE, FALSE, ON, OFF, YES, NO
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
#ifndef _XP_Core_
|
|
|
|
#ifndef _platform_h_
|
|
#define _platform_h_
|
|
|
|
/* Suppress the old file in dual environments */
|
|
#define _XP_Core_
|
|
/* Suppress obsolete NS prototypes */
|
|
#define PROTOTYPES_H
|
|
|
|
|
|
/* which system are we on, get the base macro defined */
|
|
|
|
#if defined(macintosh) || defined(__MWERKS__) || defined(applec)
|
|
#ifndef macintosh
|
|
#define macintosh 1
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(__unix) || defined(unix) || defined(UNIX) || defined(XP_UNIX)
|
|
#ifndef unix
|
|
#define unix 1
|
|
#endif
|
|
#endif
|
|
|
|
#if !defined(macintosh) && !defined(_WINDOWS) && !defined(unix)
|
|
/* #error xp library can't determine system type */
|
|
#endif
|
|
|
|
/* flush out all the system macros */
|
|
|
|
#ifdef macintosh
|
|
# define XP_MAC 1
|
|
# define XP_IS_MAC 1
|
|
# define XP_MAC_ARG(x) x
|
|
#else
|
|
# define XP_IS_MAC 0
|
|
# define XP_MAC_ARG(x)
|
|
#endif
|
|
|
|
#ifdef _WINDOWS
|
|
# define XP_WIN
|
|
# define XP_IS_WIN 1
|
|
# define XP_WIN_ARG(x) x
|
|
#if defined(_WIN32) || defined(WIN32)
|
|
# define XP_WIN32
|
|
#else
|
|
# define XP_WIN16
|
|
#endif
|
|
#else
|
|
# define XP_IS_WIN 0
|
|
# define XP_WIN_ARG(x)
|
|
#endif
|
|
|
|
#ifdef unix
|
|
# ifndef XP_UNIX
|
|
# define XP_UNIX
|
|
# endif
|
|
# define XP_IS_UNIX 1
|
|
# define XP_UNIX_ARG(x) x
|
|
#else
|
|
# define XP_IS_UNIX 0
|
|
# define XP_UNIX_ARG(x)
|
|
#endif
|
|
|
|
/* what language do we have? */
|
|
|
|
#if defined(__cplusplus)
|
|
# define XP_CPLUSPLUS
|
|
# define XP_IS_CPLUSPLUS 1
|
|
#else
|
|
# define XP_IS_CPLUSPLUS 0
|
|
#endif
|
|
|
|
#if defined(DEBUG) || !defined(XP_CPLUSPLUS)
|
|
#define XP_REQUIRES_FUNCTIONS
|
|
#endif
|
|
|
|
/*
|
|
language macros
|
|
|
|
If C++ code includes a prototype for a function *compiled* in C, it needs to be
|
|
wrapped in extern "C" for the linking to work properly. On the Mac, all code is
|
|
being compiled in C++ so this isn't necessary, and Unix compiles it all in C. So
|
|
only Windows actually will make use of the defined macros.
|
|
*/
|
|
|
|
#if defined(XP_CPLUSPLUS)
|
|
# define XP_BEGIN_PROTOS extern "C" {
|
|
# define XP_END_PROTOS }
|
|
#else
|
|
# define XP_BEGIN_PROTOS
|
|
# define XP_END_PROTOS
|
|
#endif
|
|
|
|
/* simple common types */
|
|
|
|
#ifdef XP_WIN
|
|
#ifndef RESOURCE_STR
|
|
#include "prtypes.h"
|
|
#endif /* RESOURCE_STR */
|
|
#else /* XP_WIN */
|
|
#include "prtypes.h"
|
|
#endif /* XP_WIN */
|
|
|
|
#ifdef XP_MAC
|
|
#include <Types.h>
|
|
typedef char BOOL;
|
|
typedef char Bool;
|
|
typedef char XP_Bool;
|
|
#elif defined(XP_WIN)
|
|
typedef int Bool;
|
|
typedef int XP_Bool;
|
|
#else
|
|
typedef char Bool;
|
|
typedef char XP_Bool;
|
|
#endif
|
|
|
|
#ifdef XP_WIN
|
|
#ifndef BOOL
|
|
#define BOOL Bool
|
|
#endif
|
|
#ifndef TRUE
|
|
#define FALSE 0
|
|
#define TRUE !FALSE
|
|
#endif
|
|
#define MIN(a, b) min((a), (b))
|
|
#endif
|
|
|
|
#if defined(XP_UNIX) && !defined(MIN)
|
|
#define MIN(a,b) (((a)<(b))?(a):(b))
|
|
#endif
|
|
|
|
#ifndef FALSE
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
/* disable the TRUE redefinition warning
|
|
* TRUE is defined by windows.h in the MSVC
|
|
* development environment, and creates a
|
|
* nasty warning for every file. The only
|
|
* way to turn it off is to disable all
|
|
* macro redefinition warnings or to not
|
|
* define TRUE here
|
|
*/
|
|
#if !defined(TRUE) && !defined(XP_WIN)
|
|
#define TRUE !FALSE
|
|
#endif
|
|
|
|
#define YES 1
|
|
#define NO 0
|
|
|
|
#define ON 1
|
|
#define OFF 0
|
|
|
|
#ifndef nil
|
|
#define nil 0
|
|
#endif
|
|
|
|
#ifndef NULL
|
|
#define NULL 0
|
|
#endif
|
|
|
|
#ifndef TRACEMSG
|
|
#ifdef DEBUG
|
|
#define TRACEMSG(msg) do { if(MKLib_trace_flag) XP_Trace msg; } while (0)
|
|
#else
|
|
#define TRACEMSG(msg)
|
|
#endif /* DEBUG */
|
|
#endif /* TRACEMSG */
|
|
|
|
#define _INT16
|
|
#define _UINT16
|
|
#define _INT32
|
|
#define _UINT32
|
|
|
|
typedef int intn;
|
|
|
|
/* function classifications */
|
|
|
|
#define PUBLIC
|
|
#define MODULE_PRIVATE
|
|
#define PRIVATE static
|
|
|
|
/* common typedefs */
|
|
typedef struct _XP_List XP_List;
|
|
|
|
/* standard system headers */
|
|
|
|
#if !defined(RC_INVOKED)
|
|
#include <assert.h>
|
|
#include <ctype.h>
|
|
#ifdef __sgi
|
|
# include <float.h>
|
|
#endif
|
|
#ifdef XP_UNIX
|
|
#include <stdarg.h>
|
|
#endif
|
|
#include <limits.h>
|
|
#include <locale.h>
|
|
#if defined(XP_WIN) && defined(XP_CPLUSPLUS) && defined(_MSC_VER) && _MSC_VER >= 1020
|
|
/* math.h under MSVC 4.2 needs C++ linkage when C++. */
|
|
extern "C++" {
|
|
#include <math.h>
|
|
}
|
|
#else
|
|
#include <math.h>
|
|
#endif
|
|
#include <setjmp.h>
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#endif
|
|
|
|
|
|
|
|
#define CR '\015'
|
|
#define LF '\012'
|
|
#define VTAB '\013'
|
|
#define FF '\014'
|
|
#define TAB '\011'
|
|
#define CRLF "\015\012" /* A CR LF equivalent string */
|
|
|
|
#ifdef XP_MAC
|
|
# define LINEBREAK "\015"
|
|
# define LINEBREAK_LEN 1
|
|
#else
|
|
# ifdef XP_WIN
|
|
# define LINEBREAK "\015\012"
|
|
# define LINEBREAK_LEN 2
|
|
# else
|
|
# ifdef XP_UNIX
|
|
# define LINEBREAK "\012"
|
|
# define LINEBREAK_LEN 1
|
|
# endif /* XP_UNIX */
|
|
# endif /* XP_WIN */
|
|
#endif /* XP_MAC */
|
|
|
|
#ifndef _xp_observer_h_
|
|
typedef int NS_Error;
|
|
#endif /* _xp_observer_h_ */
|
|
|
|
#endif /* _platform_h_ */
|
|
|
|
#endif /* _XP_Core_ */
|