15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License Version 1.1 (the "License"); you may not use this file
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * except in compliance with the License. You may obtain a copy of
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License at http://www.mozilla.org/MPL/
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * implied. See the License for the specific language governing
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * rights and limitations under the License.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is the Netscape Portable Runtime (NSPR).
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is Netscape
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Communications Corporation.  Portions created by Netscape are
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1998-2000 Netscape Communications Corporation.  All
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Rights Reserved.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s):
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * terms of the GNU General Public License Version 2 or later (the
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "GPL"), in which case the provisions of the GPL are applicable
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * instead of those above.  If you wish to allow use of your
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * version of this file only under the terms of the GPL and not to
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * allow others to use your version of this file under the MPL,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicate your decision by deleting the provisions above and
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * replace them with the notice and other provisions required by
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GPL.  If you do not delete the provisions above, a recipient
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may use your version of this file under either the MPL or the
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GPL.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File:                prtypes.h
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Description: Definitions of NSPR's basic types
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Prototypes and macros used to make up for deficiencies in ANSI environments
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** that we have found.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Since we do not wrap <stdlib.h> and all the other standard headers, authors
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of portable code will not know in general that they need these definitions.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Instead of requiring these authors to find the dependent uses in their code
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** and take the following steps only in those C files, we take steps once here
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for all C files.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**/
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef prtypes_h___
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define prtypes_h___
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef MDCPUCFG
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include MDCPUCFG
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prcpucfg.h"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h>
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_EXTERN
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_IMPLEMENT
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      These are only for externally visible routines and globals.  For
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      internal routines, just use "extern" for type checking and that
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      will not export internal cross-file or forward-declared symbols.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Define a macro for declaring procedures return types. We use this to
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      deal with windoze specific type hackery for DLL definitions. Use
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      PR_EXTERN when the prototype for the method is declared. Use
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      PR_IMPLEMENT for the implementation of the method.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Example:
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   in dowhim.h
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**     PR_EXTERN( void ) DoWhatIMean( void );
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   in dowhim.c
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**     PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) __declspec(dllimport) __type
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(XP_BEOS)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(dllexport) __type
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN16)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL        __cdecl
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WINDLL)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type _cdecl _export _loadds
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type _cdecl _export _loadds
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type _export
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type _export
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type _cdecl _export _loadds
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type _export
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type _export
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK             __cdecl __loadds
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* this must be .EXE */
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type _cdecl _export
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type _cdecl _export
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type _export
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type _export
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type _cdecl _export
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type _cdecl _export
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type _export
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type _export
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK             __cdecl __loadds
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _WINDLL */
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(XP_MAC)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(export) __type
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(export) __type
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(export) __type
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(export) __type
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(export) __type
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(export) __type
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(export) __type
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(export) __type
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* Unix */
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_NSPR_BUILD_)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_API(__type) PR_EXPORT(__type)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_API(__type) PR_IMPORT(__type)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_BEGIN_MACRO
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_END_MACRO
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Macro body brackets so that macros with compound statement definitions
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      behave syntactically more like functions when called.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_MACRO  do {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_MACRO    } while (0)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_BEGIN_EXTERN_C
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_END_EXTERN_C
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Macro shorthands for conditional C++ extern block delimiters.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_EXTERN_C       extern "C" {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_EXTERN_C         }
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_EXTERN_C
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_EXTERN_C
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_BIT
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_BITMASK
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Bit masking macros.  XXX n must be <= 31 to be portable
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BIT(n)       ((PRUint32)1 << (n))
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BITMASK(n)   (PR_BIT(n) - 1)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_ROUNDUP
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_MIN
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_MAX
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_ABS
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Commonly used macros for operations on compatible types.
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MAX(x,y)     ((x)>(y)?(x):(y))
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_ABS(x)       ((x)<0?-(x):(x))
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_BEGIN_EXTERN_C
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint8
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt8
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int8 types are known to be 8 bits each. There is no type that
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      is equivalent to a plain "char".
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_BYTE == 1
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char PRUint8;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Some cfront-based C++ compilers do not like 'signed char' and
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** issue the warning message:
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**     warning: "signed" not implemented (ignored)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** For these compilers, we have to define PRInt8 as plain 'char'.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Make sure that plain 'char' is indeed signed under these compilers.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (defined(HPUX) && defined(__cplusplus) \
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        && !defined(__GNUC__) && __cplusplus < 199707L) \
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    || (defined(SCO) && defined(__cplusplus) \
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        && !defined(__GNUC__) && __cplusplus == 1L)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef char PRInt8;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef signed char PRInt8;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt8/PRUint8
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS:      PR_INT8_MAX
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_INT8_MIN
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_UINT8_MAX
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION:
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  The maximum and minimum values of a PRInt8 or PRUint8.
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT8_MAX 127
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT8_MIN (-128)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT8_MAX 255U
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint16
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt16
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int16 types are known to be 16 bits each.
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_SHORT == 2
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned short PRUint16;
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef short PRInt16;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt16/PRUint16
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS:      PR_INT16_MAX
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_INT16_MIN
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_UINT16_MAX
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION:
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  The maximum and minimum values of a PRInt16 or PRUint16.
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT16_MAX 32767
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT16_MIN (-32768)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT16_MAX 65535U
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint32
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt32
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int32 types are known to be 32 bits each.
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_INT == 4
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int PRUint32;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int PRInt32;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32(x)  x
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32(x) x ## U
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif PR_BYTES_PER_LONG == 4
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUint32;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRInt32;
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32(x)  x ## L
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32(x) x ## UL
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt32/PRUint32
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS:      PR_INT32_MAX
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_INT32_MIN
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_UINT32_MAX
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION:
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  The maximum and minimum values of a PRInt32 or PRUint32.
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32_MAX PR_INT32(2147483647)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32_MIN (-PR_INT32_MAX - 1)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32_MAX PR_UINT32(4294967295)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint64
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt64
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int64 types are known to be 64 bits each. Care must be used when
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      declaring variables of type PRUint64 or PRInt64. Different hardware
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      architectures and even different compilers have varying support for
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      64 bit values. The only guaranteed portability requires the use of
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      the LL_ macros (see prlong.h).
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_LONG_LONG
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_LONG == 8
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRInt64;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUint64;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN16)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef __int64 PRInt64;
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned __int64 PRUint64;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN32) && !defined(__GNUC__)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef __int64  PRInt64;
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned __int64 PRUint64;
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long long PRInt64;
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long long PRUint64;
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* PR_BYTES_PER_LONG == 8 */
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else  /* !HAVE_LONG_LONG */
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct {
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef IS_LITTLE_ENDIAN
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRUint32 lo, hi;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRUint32 hi, lo;
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PRInt64;
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PRUint64;
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* !HAVE_LONG_LONG */
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUintn
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRIntn
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The PRIntn types are most appropriate for automatic variables. They are
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      guaranteed to be at least 16 bits, though various architectures may
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      define them to be wider (e.g., 32 or even 64 bits). These types are
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      never valid for fields of a structure.
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_INT >= 2
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int PRIntn;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int PRUintn;
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error 'sizeof(int)' not sufficient for platform use
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRFloat64
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  NSPR's floating point type is always 64 bits.
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef double          PRFloat64;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRSize
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for representing the size of objects.
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef size_t PRSize;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PROffset32, PROffset64
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for representing byte offsets from some location.
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt32 PROffset32;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PROffset64;
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRPtrDiff
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for pointer difference. Variables of this type are suitable
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      for storing a pointer or pointer sutraction.
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ptrdiff_t PRPtrdiff;
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUptrdiff
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for pointer difference. Variables of this type are suitable
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      for storing a pointer or pointer sutraction.
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUptrdiff;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRBool
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      for clarity of target type in assignments and actual arguments. Use
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      juast as you would C int-valued conditions.
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRIntn PRBool;
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_TRUE 1
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_FALSE 0
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRPackedBool
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  Use PRPackedBOol within structs where bitfields are not desireable
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      but minimum and consistant overhead matters.
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint8 PRPackedBool;
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Status code used by some routines that have a single point of failure or
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** special status return.
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef MOZ_UNICODE
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * EXPERIMENTAL: This type may be removed in a future release.
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __PRUNICHAR__
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __PRUNICHAR__
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32) || defined(XP_MAC)
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef wchar_t PRUnichar;
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint16 PRUnichar;
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* MOZ_UNICODE */
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** WARNING: The undocumented data types PRWord and PRUword are
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** only used in the garbage collection and arena code.  Do not
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** use PRWord and PRUword in new code.
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A PRWord is an integer that is the same size as a void*.
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** It implements the notion of a "word" in the Java Virtual
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Machine.  (See Sec. 3.4 "Words", The Java Virtual Machine
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Specification, Addison-Wesley, September 1996.
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** http://java.sun.com/docs/books/vmspec/index.html.)
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRWord;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUword;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(NO_NSPR_10_SUPPORT)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********* ???????????????? FIX ME       ??????????????????????????? *****/
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************** Some old definitions until pr=>ds transition is done ***/
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************** Also, we are still using NSPR 1.0. GC ******************/
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Fundamental NSPR macros, used nearly everywhere.
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PUBLIC_API		PR_IMPLEMENT
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro body brackets so that macros with compound statement definitions
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** behave syntactically more like functions when called.
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_MACRO        do {
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_MACRO          } while (0)
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro shorthands for conditional C++ extern block delimiters.
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NSPR_BEGIN_EXTERN_C
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef NSPR_BEGIN_EXTERN_C
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NSPR_END_EXTERN_C
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef NSPR_END_EXTERN_C
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_EXTERN_C     extern "C" {
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_EXTERN_C       }
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_EXTERN_C
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_EXTERN_C
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef XP_MAC
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "protypes.h"
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "obsolete/protypes.h"
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********* ????????????? End Fix me ?????????????????????????????? *****/
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NO_NSPR_10_SUPPORT */
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_END_EXTERN_C
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* prtypes_h___ */
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
524