The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#ifndef DEFINITIONS
#define DEFINITIONS
/*****************************************************************************/
/* MODULE NAME: Definitions.h MODULE TYPE: (dat) */
/*****************************************************************************/
/* MODULE IMPORTS: */
/*****************************************************************************/
/*****************************************************************************/
/* MODULE INTERFACE: */
/*****************************************************************************/
/* Note: weird names are used here in order to avoid name conflicts! */
typedef unsigned char base;
/* = a BYTE, the BASE for everything (mnemonic: also starts with a "b") */
typedef unsigned int unit;
/* = a machine WORD, the basic UNIT (mnemonic: unit is an anagram of uint!) */
typedef unsigned long longunit;
typedef unsigned short shortunit;
typedef unsigned char N_char;
typedef unsigned int N_int;
typedef unsigned long N_long;
typedef unsigned short N_short;
/* mnemonic 1: the natural numbers, N = { 0, 1, 2, 3, ... } */
/* mnemonic 2: Nnnn = u_N_signed, _N_ot signed */
typedef signed char Z_char;
typedef signed int Z_int;
typedef signed long Z_long;
typedef signed short Z_short;
/* mnemonic 1: the whole numbers, Z = { 0, -1, 1, -2, 2, -3, 3, ... } */
/* mnemonic 2: Zzzz = Ssss_igned */
typedef void *voidptr;
typedef base *baseptr;
typedef unit *unitptr;
typedef longunit *longunitptr;
typedef shortunit *shortunitptr;
typedef unsigned char *N_charptr;
typedef unsigned int *N_intptr;
typedef unsigned long *N_longptr;
typedef unsigned short *N_shortptr;
typedef signed char *Z_charptr;
typedef signed int *Z_intptr;
typedef signed long *Z_longptr;
typedef signed short *Z_shortptr;
#undef FALSE
#define FALSE (0==1)
#undef TRUE
#define TRUE (0==0)
typedef enum { false = FALSE , true = TRUE } boolean;
#define blockdef(name,size) unsigned char name[size]
#define blocktypedef(name,size) typedef unsigned char name[size]
#define and && /* logical (boolean) operators: lower case */
#define or ||
#define not !
#define AND & /* binary (bitwise) operators: UPPER CASE */
#define OR |
#define XOR ^
#define NOT ~
#define SHL <<
#define SHR >>
#ifdef EXTENDED_DEFINITIONS
#define mod % /* arithmetic operators */
#define BELL '\a' /* bell 0x07 */
#define BEL '\a' /* bell 0x07 */
#define BACKSPACE '\b' /* backspace 0x08 */
#define BS '\b' /* backspace 0x08 */
#define TAB '\t' /* tab 0x09 */
#define HT '\t' /* horizontal tab 0x09 */
#define LINEFEED '\n' /* linefeed 0x0A */
#define NEWLINE '\n' /* newline 0x0A */
#define LF '\n' /* linefeed 0x0A */
#define VTAB '\v' /* vertical tab 0x0B */
#define VT '\v' /* vertical tab 0x0B */
#define FORMFEED '\f' /* formfeed 0x0C */
#define NEWPAGE '\f' /* newpage 0x0C */
#define CR '\r' /* carriage return 0x0D */
typedef struct
{
base l;
base h;
} twobases;
typedef struct
{
base a;
base b;
base c;
base d;
} fourbases;
typedef struct
{
unit l;
unit h;
} twounits;
/*******************************/
/* implementation dependent!!! */
/* (assumes int = 2 bytes) */
/*******************************/
typedef union
{
unit x;
twobases z;
} unitreg;
/**********************************************/
/* implementation dependent!!! */
/* (assumes long = 4 bytes and int = 2 bytes) */
/**********************************************/
typedef union
{
longunit x;
twounits y;
fourbases z;
} longunitreg;
#define lobyte(x) (((int)(x)) & 0xFF)
#define hibyte(x) ((((int)(x)) >> 8) & 0xFF)
#endif
/*****************************************************************************/
/* MODULE RESOURCES: */
/*****************************************************************************/
/*****************************************************************************/
/* MODULE IMPLEMENTATION: */
/*****************************************************************************/
/*****************************************************************************/
/* AUTHOR: Steffen Beyer */
/*****************************************************************************/
/* VERSION: 4.0 */
/*****************************************************************************/
/* VERSION HISTORY: */
/*****************************************************************************/
/* 01.11.93 First version (MS C Compiler on PC with DOS) */
/* 29.11.95 First version under UNIX (for Perl modules) */
/* ??.??.?? ??? */
/* 16.02.97 Version 3.0 */
/* 24.03.97 Version 4.0 */
/*****************************************************************************/
/* COPYRIGHT (C) 1993-1997 BY: Steffen Beyer */
/*****************************************************************************/
#endif