This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-goldedplus/goldlib/gall/gdefs.h
2005-10-20 00:12:33 +00:00

222 lines
6.2 KiB
C++

// This may look like C code, but it is really -*- C++ -*-
// ------------------------------------------------------------------
// The Goldware Library
// Copyright (C) 1990-1999 Odinn Sorensen
// Copyright (C) 1999-2000 Alexander S. Aganichev
// ------------------------------------------------------------------
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this program; if not, write to the Free
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
// MA 02111-1307, USA
// ------------------------------------------------------------------
// $Id$
// ------------------------------------------------------------------
// Basic definitions and types.
// ------------------------------------------------------------------
#ifndef __goldall_h
#define __goldall_h
// ------------------------------------------------------------------
#include <cstddef>
#include <gcmpall.h>
#ifdef _MSC_VER
#include <windows.h>
#include <limits.h>
#else
#include <stdint.h>
#endif
// ------------------------------------------------------------------
// Disable some MS Visual C warnings
#if defined(_MSC_VER)
//
// C4786: 'identifier' : identifier was truncated to 'number'
// characters in the debug information
//
// C4800: 'type' : forcing value to bool 'true' or 'false'
// (performance warning)
//
// C4065: switch statement contains 'default' but no 'case' labels
//
// C4200: nonstandard extension used : zero-sized array in struct/union
//
#pragma warning(disable: 4200 4786 4800 4065)
#endif
// ------------------------------------------------------------------
// Define portability and shorthand notation
// GCC after 2.95.x have "and", "not", and "or" predefined
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
#ifndef and
#define not !
#define and &&
#define or ||
#endif
#endif
#ifndef true
#define true 1
#define false 0
#endif
#define NO 0
#define YES 1
#define ALWAYS 2
#define ASK 2
#define GAUTO 3
#define MAYBE 4
#define NUL ((char)'\x00') // Common ASCII control codes
#define BEL '\x07'
#define BS '\x08'
#define HT '\x09'
#define LF '\x0A'
#define FF '\x0C'
#define CR '\x0D'
#define ESC '\x1B'
#ifdef __UNIX__
#define NL "\r\n"
#else
#define NL "\n"
#endif
// ------------------------------------------------------------------
// Special character constants
#define CTRL_A '\x01' // FidoNet kludge line char
#define SOFTCR '\x8D' // "Soft" carriage-return
// ------------------------------------------------------------------
// Supplements for the built-in types
#ifdef _MSC_VER
#if (UCHAR_MAX == 0xFF)
typedef signed char int8_t;
typedef unsigned char uint8_t;
#else
#error Don't know how to define 8 bit integers
#endif
#if (USHRT_MAX == 0xFFFF)
typedef signed short int16_t;
typedef unsigned short uint16_t;
#else
#error Don't know how to define 16 bit integers
#endif
#if (UINT_MAX == 0xFFFFFFFF)
typedef signed int int32_t;
typedef unsigned int uint32_t;
#else
#error Don't know how to define 32 bit integers
#endif
typedef int8_t sbyte;
typedef uint8_t byte;
typedef int8_t schar;
typedef uint8_t uchar;
typedef int16_t sword;
typedef uint16_t word;
typedef int16_t sshort;
typedef uint16_t ushort;
typedef int32_t sdword;
typedef uint32_t dword;
typedef int32_t slong;
typedef uint32_t ulong;
#endif //#ifdef _MSC_VER
typedef uint8_t bit;
typedef signed int sint;
typedef unsigned int uint;
typedef uint32_t time32_t; /* 32-bit time_t type */
// ------------------------------------------------------------------
// Common function-pointer types
typedef void (*VfvCP)();
typedef int (*IfvCP)();
typedef int (*IfcpCP)(char*);
// ------------------------------------------------------------------
// Function pointer for stdlib qsort(), bsearch() compare functions
typedef int (*StdCmpCP)(const void*, const void*);
// ------------------------------------------------------------------
// Utility templates
template <class T> inline bool in_range(T a, T b, T c) { return (a >= b) and (a <= c); }
template <class T> inline T absolute(T a) { return a < 0 ? -a : a; }
template <class T> inline int compare_two(T a, T b) { return a < b ? -1 : a > b ? 1 : 0; }
template <class T> inline T minimum_of_two(T a, T b) { return (a < b) ? a : b; }
template <class T> inline T maximum_of_two(T a, T b) { return (a > b) ? a : b; }
template <class T> inline int zero_or_one(T e) { return e ? 1 : 0; }
template <class T> inline bool make_bool(T a) { return a ? true : false; }
// ------------------------------------------------------------------
// Handy macro for safe casting. Public domain by Bob Stout
// ------------------------------------------------------------------
//
// Example of CAST macro at work
//
// union {
// char ch[4];
// int i[2];
// } my_union;
//
// long longvar;
//
// longvar = (long)my_union; // Illegal cast
// longvar = CAST(long, my_union); // Legal cast
//
// ------------------------------------------------------------------
#define CAST(new_type,old_object) (*((new_type *)&(old_object)))
// ------------------------------------------------------------------
// Get size of structure member
#define sizeofmember(__struct, __member) sizeof(((__struct*)0)->__member)
// ------------------------------------------------------------------
// Legacy defines
#define RngV in_range
#define AbsV absolute
#define CmpV compare_two
#define MinV minimum_of_two
#define MaxV maximum_of_two
// ------------------------------------------------------------------
#endif
// ------------------------------------------------------------------