a68g-defines.h

     
   1  //! @file a68g-defines.h
   2  //! @author J. Marcel van der Veer
   3  
   4  //! @section Copyright
   5  //!
   6  //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
   7  //! Copyright 2001-2026 J. Marcel van der Veer [algol68g@xs4all.nl].
   8  
   9  //! @section License
  10  //!
  11  //! This program is free software; you can redistribute it and/or modify it 
  12  //! under the terms of the GNU General Public License as published by the 
  13  //! Free Software Foundation; either version 3 of the License, or 
  14  //! (at your option) any later version.
  15  //!
  16  //! This program is distributed in the hope that it will be useful, but 
  17  //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  18  //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
  19  //! more details. You should have received a copy of the GNU General Public 
  20  //! License along with this program. If not, see [http://www.gnu.org/licenses/].
  21  
  22  //! @section Synopsis
  23  //!
  24  //! General macro definitions.
  25  
  26  #if !defined (__A68G_DEFINES_H__)
  27  #define __A68G_DEFINES_H__
  28  
  29  // Constants
  30  
  31  // Memory sizes are in SI units.
  32  
  33  #define A68G_KILO ((size_t) 1000)
  34  #define A68G_MEGA (A68G_KILO * A68G_KILO)
  35  #define A68G_GIGA (A68G_KILO * A68G_MEGA)
  36  #if defined (HAVE_LARGE_STORAGE) && (A68G_LEVEL >= 3)
  37    #define A68G_TERA (A68G_KILO * A68G_GIGA)
  38    #define A68G_PETA (A68G_KILO * A68G_TERA)
  39  #endif
  40  
  41  #if defined (HAVE_LARGE_STORAGE)
  42    #define MAX_MEM_SIZE ((size_t) 2 * A68G_TERA)
  43  #else
  44    #define MAX_MEM_SIZE ((size_t) 2 * A68G_GIGA)
  45  #endif
  46  
  47  #define MEM_OVERHEAD ((size_t) A68G_MEGA)
  48  
  49  #define A68G_TRUE ((BOOL_T) 1)
  50  #define A68G_FALSE ((BOOL_T) 0)
  51  
  52  #define BACKSLASH_CHAR '\\'
  53  #define BLANK_CHAR ' '
  54  #define CR_CHAR '\r'
  55  #define EOF_CHAR (EOF)
  56  #define ERROR_CHAR '*'
  57  #define ESCAPE_CHAR '\033'
  58  #define EXPONENT_CHAR 'e'
  59  #define FLIP_CHAR 'T'
  60  #define FLOP_CHAR 'F'
  61  #define FORMFEED_CHAR '\f'
  62  #define NEWLINE_CHAR '\n'
  63  #define NULL_CHAR '\0'
  64  #define POINT_CHAR '.'
  65  #define QUOTE_CHAR '"'
  66  #define RADIX_CHAR 'r'
  67  #define TAB_CHAR '\t'
  68  
  69  // File extensions
  70  #define BINARY_EXTENSION ".o"
  71  #define PLUGIN_EXTENSION ".so"
  72  #define LISTING_EXTENSION ".l"
  73  #define OBJECT_EXTENSION ".c"
  74  #define PRETTY_EXTENSION ".f"
  75  #define SCRIPT_EXTENSION ""
  76  
  77  // Static options for GCC.
  78  // 
  79  // -fno-stack-protector is needed for Ubuntu etcetera that enforce -fstack-protector-strong 
  80  // which may give an undefined reference to `__stack_chk_fail_local'.
  81  // 
  82  // -Wno-parentheses-equality is needed for OpenBSD.  
  83  
  84  #define A68G_GCC_OPTIONS "-DA68G_OPTIMISE -ggdb -fno-stack-protector -Wno-parentheses-equality"
  85  
  86  // Formats
  87  #define DIGIT_BLANK ((unt) 0x2)
  88  #define DIGIT_NORMAL ((unt) 0x1)
  89  #define INSERTION_BLANK ((unt) 0x20)
  90  #define INSERTION_NORMAL ((unt) 0x10)
  91  
  92  // A68G_SIGALRM_INTERVAL in seconds between checks on elapsed execution time.
  93  #define A68G_SIGALRM_INTERVAL 5
  94  
  95  // MAX_INTERRUPT_RESTART after 'read' or 'write' are interrupted.
  96  // A68G_SIGALARM_INTERVAL * MAX_INTERRUPT_RESTART amounts to 600 seconds 
  97  // before IO times out due to SIGALRM interrupts with option NORESTART.
  98  #define MAX_INTERRUPT_RESTART 120
  99  
 100  #define A68G_DIR ".a68g"
 101  #define A68G_HISTORY_FILE ".a68g.edit.hist"
 102  #define A68G_MAX_LEX_LEVEL (INT_MAX)
 103  #define A68G_NO_FILE ((FILE_T) (-1))
 104  #define A68G_PROTECTION (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)  // -rw-r--r--
 105  #define A68G_READ_ACCESS (O_RDONLY)
 106  #define A68G_WRITE_ACCESS (O_WRONLY)
 107  #define BUFFER_SIZE (A68G_KILO)
 108  #define DEFAULT_WIDTH ((size_t) (-1))
 109  
 110  #define EMBEDDED_FORMAT A68G_TRUE
 111  #define EVEN(k) ((k) % 2 == 0)
 112  #define HIDDEN_TEMP_FILE_NAME ".a68g.tmp"
 113  #define ITEM_NOT_USED (-1)
 114  #define MAX_ERRORS 5
 115  #define MAX_PRIORITY 9
 116  #define MAX_TERM_HEIGTH 24
 117  #define MAX_TERM_WIDTH (BUFFER_SIZE / 2)
 118  #define MOID_ERROR_WIDTH 80
 119  #define MOID_WIDTH 80
 120  #define MONADS "%^&+-~!?"
 121  #define NEWLINE_STRING "\n"
 122  #define NOMADS "></=*"
 123  #define NOT_EMBEDDED_FORMAT A68G_FALSE
 124  #define NOT_PRINTED 1
 125  #define PRIMAL_SCOPE 0
 126  #define SKIP_PATTERN A68G_FALSE
 127  #define SMALL_BUFFER_SIZE 128
 128  #define SNPRINTF_SIZE ((size_t) (BUFFER_SIZE - 1))
 129  #define TRANSPUT_BUFFER_BLOCKED (-1)
 130  #define TRANSPUT_BUFFER_SIZE BUFFER_SIZE
 131  #define WANT_PATTERN A68G_TRUE
 132  
 133  #define A68G_GC_GO 0
 134  #define A68G_GC_SAFE 1
 135  #define A68G_GC_HALT 2
 136  
 137  #define A68G_PEEK_INIT 0x01
 138  #define A68G_PEEK_READ 0x02
 139  #define A68G_PEEK_RESET 0x04
 140  
 141  // Macros
 142  
 143  #define A68G_POSINF_REAL (a68g_posinf_real ())
 144  #define A68G_MININF_REAL (a68g_mininf_real ())
 145  
 146  #if (A68G_LEVEL >= 3)
 147    #define A68G_POSINF_DOUBLE (a68g_posinf_double ())
 148    #define A68G_MININF_DOUBLE (a68g_mininf_double ())
 149  #endif
 150  
 151  #define _SKIP_ {(void) 0;}
 152  
 153  #define BUFCLR(z) {a68g_bufset ((z), 0, BUFFER_SIZE + 1);}
 154  
 155  #define ABS(n) ((n) >= 0 ? (n) : -(n))
 156  
 157  #define MAX(u, v) (((u) > (v) ? (u) : (v)))
 158  #define MAXIMISE(u, v) ((u) = MAX (u, v))
 159  
 160  #define MIN(u, v) (((u) < (v) ? (u) : (v)))
 161  #define MINIMISE(u, v) ((u) = MIN (u, v))
 162  
 163  #define COPY(d, s, n) {\
 164    INT_T _m_k = (INT_T) (n); BYTE_T *_m_u = (BYTE_T *) (d), *_m_v = (BYTE_T *) (s);\
 165    while (_m_k--) {*_m_u++ = *_m_v++;}}
 166  
 167  #define COPY_ALIGNED(d, s, n) {\
 168    INT_T _m_k = (INT_T) (n); A68G_ALIGN_T *_m_u = (A68G_ALIGN_T *) (d), *_m_v = (A68G_ALIGN_T *) (s);\
 169    while (_m_k > 0) {*_m_u++ = *_m_v++; _m_k -= A68G_ALIGNMENT;}}
 170  
 171  #define MOVE(d, s, n) {\
 172    INT_T _m_k = (INT_T) (n); BYTE_T *_m_d = (BYTE_T *) (d), *_m_s = (BYTE_T *) (s);\
 173    if (_m_s < _m_d) {\
 174      _m_d += _m_k; _m_s += _m_k;\
 175      while (_m_k--) {*(--_m_d) = *(--_m_s);}\
 176    } else {\
 177      while (_m_k--) {*(_m_d++) = *(_m_s++);}\
 178    }}
 179  
 180  #define FILL(d, s, n) {\
 181     INT_T _m_k = (INT_T) (n); BYTE_T *_m_u = (BYTE_T *) (d), _m_v = (BYTE_T) (s);\
 182     while (_m_k--) {*_m_u++ = _m_v;}}
 183  
 184  #define FILL_ALIGNED(d, s, n) {\
 185     INT_T _m_k = (INT_T) (n); A68G_ALIGN_T *_m_u = (A68G_ALIGN_T *) (d), _m_v = (A68G_ALIGN_T) (s);\
 186     while (_m_k > 0) {*_m_u++ = _m_v; _m_k -= A68G_ALIGNMENT;}}
 187  
 188  #if defined (A68G_DEBUG)
 189    #define ABEND(p, reason, info) {\
 190      if (p) {\
 191        abend ((char *) reason, (char *) info, (char *) __func__);\
 192      }}
 193  #else
 194    #define ABEND(p, reason, info) {\
 195      if (p) {\
 196        abend ((char *) reason, (char *) info, NO_TEXT);\
 197      }}
 198  #endif
 199  
 200  #if defined (HAVE_CURSES)
 201  #define ASSERT(f) {\
 202    if (!(f)) {\
 203      if (A68G (curses_mode) == A68G_TRUE) {\
 204        (void) attrset (A_NORMAL);\
 205        (void) endwin ();\
 206        A68G (curses_mode) = A68G_FALSE;\
 207      }\
 208      ABEND (A68G_TRUE, ERROR_ASSERTION, __func__)\
 209    }}
 210  #else
 211  #define ASSERT(f) {\
 212    ABEND((!(f)), ERROR_ASSERTION, __func__)\
 213    }
 214  #endif
 215  
 216  // Some macros to overcome the ambiguity in having signed or unt char 
 217  // on various systems. PDP-11s and IBM 370s are still haunting us with this.
 218  
 219  #define IS_ALNUM(c) isalnum ((unt char) (c))
 220  #define IS_ALPHA(c) isalpha ((unt char) (c))
 221  #define IS_CNTRL(c) iscntrl ((unt char) (c))
 222  #define IS_DIGIT(c) isdigit ((unt char) (c))
 223  #define IS_GRAPH(c) isgraph ((unt char) (c))
 224  #define IS_LOWER(c) islower ((unt char) (c))
 225  #define IS_PRINT(c) isprint ((unt char) (c))
 226  #define IS_PUNCT(c) ispunct ((unt char) (c))
 227  #define IS_SPACE(c) isspace ((unt char) (c))
 228  #define IS_UPPER(c) isupper ((unt char) (c))
 229  #define IS_XDIGIT(c) isxdigit ((unt char) (c))
 230  #define TO_LOWER(c) (char) tolower ((unt char) (c))
 231  #define TO_UCHAR(c) ((c) >= 0 ? (int) (c) : (int) (UCHAR_MAX + (int) (c) + 1))
 232  #define TO_UPPER(c) (char) toupper ((unt char) (c))
 233  
 234  // Macro's for fat A68 pointers
 235  
 236  #define ADDRESS(z) (&(((IS_IN_HEAP (z) || IS_IN_COMMON (z)) ? REF_POINTER (z) : A68G_STACK)[REF_OFFSET (z)]))
 237  #define ARRAY_ADDRESS(z) (&(REF_POINTER (z)[REF_OFFSET (z)]))
 238  #define DEREF(mode, expr) ((mode *) ADDRESS (expr))
 239  #define FILE_DEREF(p) DEREF (A68G_FILE, (p))
 240  #define HEAP_ADDRESS(n) ((BYTE_T *) & (A68G_HEAP[n]))
 241  #define IS_IN_FRAME(z) (STATUS (z) & IN_FRAME_MASK)
 242  #define IS_IN_HEAP(z) (STATUS (z) & IN_HEAP_MASK)
 243  #define IS_IN_COMMON(z) (STATUS (z) & IN_COMMON_MASK)
 244  #define IS_IN_STACK(z) (STATUS (z) & IN_STACK_MASK)
 245  #define IS_NIL(p) ((BOOL_T) ((STATUS (&(p)) & NIL_MASK) != 0))
 246  #define LOCAL_ADDRESS(z) (& A68G_STACK[REF_OFFSET (z)])
 247  #define REF_HANDLE(z) (HANDLE (z))
 248  #define REF_OFFSET(z) (OFFSET (z))
 249  #define REF_POINTER(z) (POINTER (REF_HANDLE (z)))
 250  #define REF_SCOPE(z) (SCOPE (z))
 251  #define STACK_ADDRESS(n) ((BYTE_T *) &(A68G_STACK[(n)]))
 252  #define STACK_OFFSET(n) (STACK_ADDRESS (A68G_SP + (int) (n)))
 253  #define STACK_TOP (STACK_ADDRESS (A68G_SP))
 254  
 255  // Miscellaneous macros
 256  
 257  #define IN_PRELUDE(p) (LINE_NUMBER (p) <= 0)
 258  #define EOL(c) ((c) == NEWLINE_CHAR || (c) == NULL_CHAR)
 259  
 260  #define BACKWARD(p) (p = PREVIOUS (p))
 261  #define DEFLEX(p) (DEFLEXED (p) != NO_MOID ? DEFLEXED(p) : (p))
 262  #define FORWARD(p) ((p) = NEXT (p))
 263  #define PM(m) (moid_to_string (m, 132, NO_NODE))
 264  #define SIGN(n) ((n) == 0 ? 0 : ((n) > 0 ? 1 : -1))
 265  #define WIS(p) where_in_source (A68G_STDOUT, (p))
 266  #define WRITE(f, s) io_write_string ((f), (s));
 267  #define WRITELN(f, s) {WRITE ((f), "\n"); WRITE ((f), (s));}
 268  
 269  // Access macros
 270  
 271  #define A(p) ((p)->a)
 272  #define A68G_STANDENV_PROC(p) ((p)->a68g_standenv_proc)
 273  #define ACTION(p) ((p)->action)
 274  #define ACTIVE(p) ((p)->active)
 275  #define ADDR(p) ((p)->addr)
 276  #define ANNOTATION(p) ((p)->annotation)
 277  #define ANONYMOUS(p) ((p)->anonymous)
 278  #define APPEND(p) ((p)->append)
 279  #define APPLICATIONS(p) ((p)->applications)
 280  #define AP_INCREMENT(p) ((p)->ap_increment)
 281  #define ARGSIZE(p) ((p)->argsize)
 282  #define ARRAY(p) ((p)->array)
 283  #define ATTRIBUTE(p) ((p)->attribute)
 284  #define B(p) ((p)->b)
 285  #define BEGIN(p) ((p)->begin)
 286  #define BIN(p) ((p)->bin)
 287  #define BITS_PER_SAMPLE(p) ((p)->bits_per_sample)
 288  #define BLUE(p) ((p)->blue)
 289  #define BODY(p) ((p)->body)
 290  #define BSTATE(p) ((p)->bstate)
 291  #define BYTES(p) ((p)->bytes)
 292  #define CAST(p) ((p)->cast)
 293  #define CAT(p) ((p)->cat)
 294  #define CHANNEL(p) ((p)->channel)
 295  #define CHAR_IN_LINE(p) ((p)->char_in_line)
 296  #define CHAR_MOOD(p) ((p)->char_mood)
 297  #define CMD(p) ((p)->cmd)
 298  #define CMD_ROW(p) ((p)->cmd_row)
 299  #define CODE(p) ((p)->code)
 300  #define CODEX(p) ((p)->codex)
 301  #define COLLECT(p) ((p)->collect)
 302  #define COMPILED(p) ((p)->compiled)
 303  #define COMPILE_NAME(p) ((p)->compile_name)
 304  #define COMPILE_NODE(p) ((p)->compile_node)
 305  #define COMPRESS(p) ((p)->compress)
 306  #define CONNECTION(p) ((p)->connection)
 307  #define CONSTANT(p) ((p)->constant)
 308  #define COUNT(p) ((p)->count)
 309  #define CROSS_REFERENCE_SAFE(p) ((p)->cross_reference_safe)
 310  #define CUR_PTR(p) ((p)->cur_ptr)
 311  #define DATA(p) ((p)->data)
 312  #define DATA_SIZE(p) ((p)->data_size)
 313  #define DATE(p) ((p)->date)
 314  #define DEF(p) ((p)->def)
 315  #define DEFLEXED(p) ((p)->deflexed_mode)
 316  #define DERIVATE(p) ((p)->derivate)
 317  #define DEVICE(p) ((p)->device)
 318  #define DEVICE_HANDLE(p) ((p)->device_handle)
 319  #define DEVICE_MADE(p) ((p)->device_made)
 320  #define DEVICE_OPENED(p) ((p)->device_opened)
 321  #define DIAGNOSTICS(p) ((p)->diagnostics)
 322  #define DIGITS(p) ((p)->digits)
 323  #define DIGITS_COMPL(p) ((p)->digits_compl)
 324  #define DIM(p) ((p)->dim)
 325  #define DISPLAY(p) ((p)->display)
 326  #define DRAW(p) ((p)->draw)
 327  #define DRAW_MOOD(p) ((p)->draw_mood)
 328  #define DUMP(p) ((p)->dump)
 329  #define DYNAMIC_LINK(p) ((p)->dynamic_link)
 330  #define DYNAMIC_SCOPE(p) ((p)->dynamic_scope)
 331  #define D_NAME(p) ((p)->d_name)
 332  #define ELEM_SIZE(p) ((p)->elem_size)
 333  #define END(p) ((p)->end)
 334  #define END_OF_FILE(p) ((p)->end_of_file)
 335  #define ENVIRON(p) ((p)->fp_environ)
 336  #define EQUIVALENT(p) ((p)->equivalent_mode)
 337  #define EQUIVALENT_MODE(p) ((p)->equivalent_mode)
 338  #define ERROR_COUNT(p) ((p)->error_count)
 339  #define RENDEZ_VOUS(p) ((p)->rendez_vous)
 340  #define EXPR(p) ((p)->expr)
 341  #define F(p) ((p)->f)
 342  #define FACTOR(p) ((p)->factor)
 343  #define FD(p) ((p)->fd)
 344  #define FIELD_OFFSET(p) ((p)->field_offset)
 345  #define FILENAME(p) ((p)->filename)
 346  #define FILES(p) ((p)->files)
 347  #define FILE_BINARY_NAME(p) (FILES (p).binary.name)
 348  #define FILE_BINARY_OPENED(p) (FILES (p).binary.opened)
 349  #define FILE_BINARY_WRITEMOOD(p) (FILES (p).binary.writemood)
 350  #define FILE_DIAGS_FD(p) (FILES (p).diags.fd)
 351  #define FILE_DIAGS_NAME(p) (FILES (p).diags.name)
 352  #define FILE_DIAGS_OPENED(p) (FILES (p).diags.opened)
 353  #define FILE_DIAGS_WRITEMOOD(p) (FILES (p).diags.writemood)
 354  #define FILE_END_MENDED(p) ((p)->file_end_mended)
 355  #define FILE_ENTRY(p) ((p)->file_entry)
 356  #define FILE_GENERIC_NAME(p) (FILES (p).generic_name)
 357  #define FILE_INITIAL_NAME(p) (FILES (p).initial_name)
 358  #define FILE_PLUGIN_NAME(p) (FILES (p).plugin.name)
 359  #define FILE_PLUGIN_OPENED(p) (FILES (p).plugin.opened)
 360  #define FILE_PLUGIN_WRITEMOOD(p) (FILES (p).plugin.writemood)
 361  #define FILE_LISTING_FD(p) (FILES (p).listing.fd)
 362  #define FILE_LISTING_NAME(p) (FILES (p).listing.name)
 363  #define FILE_LISTING_OPENED(p) (FILES (p).listing.opened)
 364  #define FILE_LISTING_WRITEMOOD(p) (FILES (p).listing.writemood)
 365  #define FILE_OBJECT_FD(p) (FILES (p).object.fd)
 366  #define FILE_OBJECT_NAME(p) (FILES (p).object.name)
 367  #define FILE_OBJECT_OPENED(p) (FILES (p).object.opened)
 368  #define FILE_OBJECT_WRITEMOOD(p) (FILES (p).object.writemood)
 369  #define FILE_PATH(p) (FILES (p).path)
 370  #define FILE_PRETTY_FD(p) (FILES (p).pretty.fd)
 371  #define FILE_PRETTY_NAME(p) (FILES (p).pretty.name)
 372  #define FILE_PRETTY_OPENED(p) (FILES (p).pretty.opened)
 373  #define FILE_PRETTY_WRITEMOOD(p) (FILES (p).pretty.writemood)
 374  #define FILE_SCRIPT_NAME(p) (FILES (p).script.name)
 375  #define FILE_SCRIPT_OPENED(p) (FILES (p).script.opened)
 376  #define FILE_SCRIPT_WRITEMOOD(p) (FILES (p).script.writemood)
 377  #define FILE_SOURCE_FD(p) (FILES (p).source.fd)
 378  #define FILE_SOURCE_NAME(p) (FILES (p).source.name)
 379  #define FILE_SOURCE_OPENED(p) (FILES (p).source.opened)
 380  #define FILE_SOURCE_WRITEMOOD(p) (FILES (p).source.writemood)
 381  #define FIND(p) ((p)->find)
 382  #define FORMAT(p) ((p)->format)
 383  #define FORMAT_END_MENDED(p) ((p)->format_end_mended)
 384  #define FORMAT_ERROR_MENDED(p) ((p)->format_error_mended)
 385  #define FRAME(p) ((p)->frame)
 386  #define FRAME_LEVEL(p) ((p)->frame_level)
 387  #define FRAME_NO(p) ((p)->frame_no)
 388  #define FRAME_POINTER(p) ((p)->frame_pointer)
 389  #define FUNCTION(p) ((p)->function)
 390  #define G(p) ((p)->g)
 391  #define GINFO(p) ((p)->genie)
 392  #define GET(p) ((p)->get)
 393  #define GLOBAL_PROP(p) ((p)->global_prop)
 394  #define GPARENT(p) (PARENT (GINFO (p)))
 395  #define GREEN(p) ((p)->green)
 396  #define H(p) ((p)->h)
 397  #define HANDLE(p) ((p)->handle)
 398  #define HAS_ROWS(p) ((p)->has_rows)
 399  #define HEAP(p) ((p)->heap)
 400  #define HEAP_POINTER(p) ((p)->heap_pointer)
 401  // #define H_ADDR(p) ((p)->h_addr) only available with __USE_MISC allowing ancient features (4.3BSD and SysV). 
 402  #define H_ADDR(p) ((p)->h_addr_list[0]) 
 403  #define H_LENGTH(p) ((p)->h_length)
 404  #define ID(p) ((p)->id)
 405  #define IDENTIFICATION(p) ((p)->identification)
 406  #define IDENTIFIERS(p) ((p)->identifiers)
 407  #define IDF(p) ((p)->idf)
 408  #define IM(z) (VALUE (&(z)[1]))
 409  #define IN(p) ((p)->in)
 410  #define INDEX(p) ((p)->index)
 411  #define INDICANTS(p) ((p)->indicants)
 412  #define INFO(p) ((p)->info)
 413  #define INITIALISE_ANON(p) ((p)->initialise_anon)
 414  #define INITIALISE_FRAME(p) ((p)->initialise_frame)
 415  #define INI_PTR(p) ((p)->ini_ptr)
 416  #define INS_MODE(p) ((p)->ins_mode)
 417  #define IN_CMD(p) ((p)->in_cmd)
 418  #define IN_FORBIDDEN(p) ((p)->in_forbidden)
 419  #define IN_PREFIX(p) ((p)->in_prefix)
 420  #define IN_PROC(p) ((p)->in_proc)
 421  #define IN_TEXT(p) ((p)->in_text)
 422  #define IS_COMPILED(p) ((p)->is_compiled)
 423  #define IS_OPEN(p) ((p)->is_open)
 424  #define IS_TMP(p) ((p)->is_tmp)
 425  #define JUMP_STAT(p) ((p)->jump_stat)
 426  #define JUMP_TO(p) ((p)->jump_to)
 427  #define K(q) ((q)->k)
 428  #define LABELS(p) ((p)->labels)
 429  #define LAST(p) ((p)->last)
 430  #define LAST_LINE(p) ((p)->last_line)
 431  #define LESS(p) ((p)->less)
 432  #define LEVEL(p) ((p)->level)
 433  #define LEX_LEVEL(p) (LEVEL (TABLE (p)))
 434  #define LINBUF(p) ((p)->linbuf)
 435  #define LINE(p) ((p)->line)
 436  #define LINE_APPLIED(p) ((p)->line_applied)
 437  #define LINE_DEFINED(p) ((p)->line_defined)
 438  #define LINE_END_MENDED(p) ((p)->line_end_mended)
 439  #define LINE_NUMBER(p) (NUMBER (LINE (INFO (p))))
 440  #define LINSIZ(p) ((p)->linsiz)
 441  #define LIST(p) ((p)->list)
 442  #define ln(x) (log (x))
 443  #define LOCALE(p) ((p)->locale)
 444  #define LOC_ASSIGNED(p) ((p)->loc_assigned)
 445  #define LOWER_BOUND(p) ((p)->lower_bound)
 446  #define LWB(p) ((p)->lower_bound)
 447  #define MARKER(p) ((p)->marker)
 448  #define MATCH(p) ((p)->match)
 449  #define MODIFIED(p) ((p)->modified)
 450  #define MOID(p) ((p)->type)
 451  #define MORE(p) ((p)->more)
 452  #define MSGS(p) ((p)->msgs)
 453  #define MULTIPLE(p) ((p)->multiple_mode)
 454  #define MULTIPLE_MODE(p) ((p)->multiple_mode)
 455  #define M_EO(p) ((p)->m_eo)
 456  #define M_MATCH(p) ((p)->match)
 457  #define M_SO(p) ((p)->m_so)
 458  #define NAME(p) ((p)->name)
 459  #define NEED_DNS(p) ((p)->need_dns)
 460  #define NEGATE(p) ((p)->negate)
 461  #define NEST(p) ((p)->nest)
 462  #define NEW_FILE(p) ((p)->new_file)
 463  #define NEXT(p) ((p)->next)
 464  #define NEXT_NEXT(p) (NEXT (NEXT (p)))
 465  #define NEXT_NEXT_NEXT(p) (NEXT (NEXT_NEXT (p)))
 466  #define NEXT_SUB(p) (NEXT (SUB (p)))
 467  #define NF(p) ((p)->nf)
 468  #define NODE(p) ((p)->node)
 469  #define NODE_DEFINED(p) ((p)->node_defined)
 470  #define NODE_PACK(p) ((p)->pack)
 471  #define NON_LOCAL(p) ((p)->non_local)
 472  #define NCHAR_IN_LINE(p) (CHAR_IN_LINE (INFO (p)))
 473  #define NPRAGMENT(p) (PRAGMENT (INFO (p)))
 474  #define NPRAGMENT_TYPE(p) (PRAGMENT_TYPE (INFO (p)))
 475  #define NSYMBOL(p) (SYMBOL (INFO (p)))
 476  #define NUM(p) ((p)->num)
 477  #define NUMBER(p) ((p)->number)
 478  #define NUM_CHANNELS(p) ((p)->num_channels)
 479  #define NUM_MATCH(p) ((p)->num_match)
 480  #define NUM_SAMPLES(p) ((p)->num_samples)
 481  #define OFFSET(p) ((p)->offset)
 482  #define OPENED(p) ((p)->opened)
 483  #define OPEN_ERROR_MENDED(p) ((p)->open_error_mended)
 484  #define OPEN_EXCLUSIVE(p) ((p)->open_exclusive)
 485  #define OPER(p) ((p)->oper)
 486  #define OPERATORS(p) ((p)->operators)
 487  #define OPTIONS(p) ((p)->options)
 488  #define OPTION_BACKTRACE(p) (OPTIONS (p).backtrace)
 489  #define OPTION_BRACKETS(p) (OPTIONS (p).brackets)
 490  #define OPTION_CHECK_ONLY(p) (OPTIONS (p).check_only)
 491  #define OPTION_CLOCK(p) (OPTIONS (p).clock)
 492  #define OPTION_COMPILE(p) (OPTIONS (p).compile)
 493  #define OPTION_COMPILE_CHECK(p) (OPTIONS (p).compile_check)
 494  #define OPTION_CONSERVATIVE_GC(p) (OPTIONS (p).conservative_gc)
 495  #define OPTION_CROSS_REFERENCE(p) (OPTIONS (p).cross_reference)
 496  #define OPTION_DEBUG(p) (OPTIONS (p).debug)
 497  #define OPTION_FOLD(p) (OPTIONS (p).fold)
 498  #define OPTION_INDENT(p) (OPTIONS (p).indent)
 499  #define OPTION_KEEP(p) (OPTIONS (p).keep)
 500  #define OPTION_LICENSE(p) (OPTIONS (p).license)
 501  #define OPTION_LIST(p) (OPTIONS (p).list)
 502  #define OPTION_LOCAL(p) (OPTIONS (p).local)
 503  #define OPTION_MOID_LISTING(p) (OPTIONS (p).moid_listing)
 504  #define OPTION_NODEMASK(p) (OPTIONS (p).nodemask)
 505  #define OPTION_NO_NOTICES(p) (OPTIONS (p).no_notices)
 506  #define OPTION_NO_WARNINGS(p) (OPTIONS (p).no_warnings)
 507  #define OPTION_OBJECT_LISTING(p) (OPTIONS (p).object_listing)
 508  #define OPTION_OPT_LEVEL(p) (OPTIONS (p).opt_level)
 509  #define OPTION_PORTCHECK(p) (OPTIONS (p).portcheck)
 510  #define OPTION_PRAGMAT_SEMA(p) (OPTIONS (p).pragmat_sema)
 511  #define OPTION_PRETTY(p) (OPTIONS (p).pretty)
 512  #define OPTION_QUIET(p) (OPTIONS (p).quiet)
 513  #define OPTION_REDUCTIONS(p) (OPTIONS (p).reductions)
 514  #define OPTION_REGRESSION_TEST(p) (OPTIONS (p).regression_test)
 515  #define OPTION_RERUN(p) (OPTIONS (p).rerun)
 516  #define OPTION_RESTART(p) (OPTIONS (p).restart)
 517  #define OPTION_RUN(p) (OPTIONS (p).run)
 518  #define OPTION_RUN_SCRIPT(p) (OPTIONS (p).run_script)
 519  #define OPTION_SOURCE_LISTING(p) (OPTIONS (p).source_listing)
 520  #define OPTION_STANDARD_PRELUDE_LISTING(p) (OPTIONS (p).standard_prelude_listing)
 521  #define OPTION_STATISTICS_LISTING(p) (OPTIONS (p).statistics_listing)
 522  #define OPTION_STRICT(p) (OPTIONS (p).strict)
 523  #define OPTION_STROPPING(p) (OPTIONS (p).stropping)
 524  #define OPTION_TIME_LIMIT(p) (OPTIONS (p).time_limit)
 525  #define OPTION_TRACE(p) (OPTIONS (p).trace)
 526  #define OPTION_TREE_LISTING(p) (OPTIONS (p).tree_listing)
 527  #define OPTION_UNUSED(p) (OPTIONS (p).unused)
 528  #define OPTION_VERBOSE(p) (OPTIONS (p).verbose)
 529  #define OPTION_VERSION(p) (OPTIONS (p).version)
 530  #define OUT(p) ((p)->out)
 531  #define OUTER(p) ((p)->outer)
 532  #define P(q) ((q)->p)
 533  #define PACK(p) ((p)->pack)
 534  #define PAGE_END_MENDED(p) ((p)->page_end_mended)
 535  #define A68G_PAGE_SIZE(p) ((p)->page_size)
 536  #define PARAMETERS(p) ((p)->parameters)
 537  #define PARAMETER_LEVEL(p) ((p)->parameter_level)
 538  #define GSL_PARAMS(p) ((p)->params)
 539  #define PARENT(p) ((p)->parent)
 540  #define PARTIAL_LOCALE(p) ((p)->partial_locale)
 541  #define PARTIAL_PROC(p) ((p)->partial_proc)
 542  #define PATTERN(p) ((p)->pattern)
 543  #define PERM(p) ((p)->perm)
 544  #define PERMS(p) ((p)->perms)
 545  #define IDF_ROW(p) ((p)->idf_row)
 546  #define PHASE(p) ((p)->phase)
 547  #define PLOTTER(p) ((p)->plotter)
 548  #define PLOTTER_PARAMS(p) ((p)->plotter_params)
 549  #define POINTER(p) ((p)->pointer)
 550  #define PORTABLE(p) ((p)->portable)
 551  #define POS(p) ((p)->pos)
 552  #define PRAGMENT(p) ((p)->pragment)
 553  #define PRAGMENT_TYPE(p) ((p)->pragment_type)
 554  #define PRECMD(p) ((p)->precmd)
 555  #define PREVIOUS(p) ((p)->previous)
 556  #define PRINT_STATUS(p) ((p)->print_status)
 557  #define PRIO(p) ((p)->priority)
 558  #define PROCEDURE(p) ((p)->procedure)
 559  #define PROCEDURE_LEVEL(p) ((p)->procedure_level)
 560  #define PROCESSED(p) ((p)->processed)
 561  #define PROC_FRAME(p) ((p)->proc_frame)
 562  #define PROC_OPS(p) ((p)->proc_ops)
 563  #define GPROP(p) (GINFO (p)->propagator)
 564  #define PROP(p) ((p)->propagator)
 565  #define PS(p) ((p)->ps)
 566  #define PUT(p) ((p)->put)
 567  #define P_PROTO(p) ((p)->p_proto)
 568  #define R(p) ((p)->r)
 569  #define RE(z) (VALUE (&(z)[0]))
 570  #define READ_MOOD(p) ((p)->read_mood)
 571  #define RED(p) ((p)->red)
 572  #define REPL(p) ((p)->repl)
 573  #define RESERVED(p) ((p)->reserved)
 574  #define RESET(p) ((p)->reset)
 575  #define RESULT(p) ((p)->result)
 576  #define RE_NSUB(p) ((p)->re_nsub)
 577  #define RLIM_CUR(p) ((p)->rlim_cur)
 578  #define RLIM_MAX(p) ((p)->rlim_max)
 579  #define RM_EO(p) ((p)->rm_eo)
 580  #define RM_SO(p) ((p)->rm_so)
 581  #define ROWED(p) ((p)->rowed)
 582  #define S(p) ((p)->s)
 583  #define SAMPLE_RATE(p) ((p)->sample_rate)
 584  #define SCAN_STATE_C(p) ((p)->scan_state.save_c)
 585  #define SCAN_STATE_L(p) ((p)->scan_state.save_l)
 586  #define SCAN_STATE_S(p) ((p)->scan_state.save_s)
 587  #define SCALE_ROW(p) ((p)->scale_row)
 588  #define SCAN(p) ((p)->scan)
 589  #define SCAN_ERROR(c, u, v, txt) if (c) {scan_error (u, v, txt);}
 590  #define SCAN_ERROR_INFO(c, u, v, txt, info) if (c) {scan_error_info (u, v, txt, info);}
 591  #define SCAN_WARNING(c, u, v, txt) if (c) {scan_warning (u, v, txt);}
 592  #define SCOPE(p) ((p)->scope)
 593  #define SCOPE_ASSIGNED(p) ((p)->scope_assigned)
 594  #define SEARCH(p) ((p)->search)
 595  #define SELECT(p) ((p)->select)
 596  #define SEQUENCE(p) ((p)->sequence)
 597  #define SET(p) ((p)->set)
 598  #define SHIFT(p) ((p)->shift)
 599  #define SHORT_ID(p) ((p)->short_id)
 600  #define SIN_ADDR(p) ((p)->sin_addr)
 601  #define SIN_FAMILY(p) ((p)->sin_family)
 602  #define SIN_PORT(p) ((p)->sin_port)
 603  #define SIZE(p) ((p)->size)
 604  #define SIZE1(p) ((p)->size1)
 605  #define SIZE2(p) ((p)->size2)
 606  #define SIZE_COMPL(p) ((p)->size_compl)
 607  #define SLICE(p) ((p)->slice)
 608  #define SLICE_OFFSET(p) ((p)->slice_offset)
 609  #define SO(p) ((p)->so)
 610  #define SORT(p) ((p)->sort)
 611  #define SOURCE(p) ((p)->source)
 612  #define SOURCE_SCAN(p) ((p)->source_scan)
 613  #define SPAN(p) ((p)->span)
 614  #define STACK(p) ((p)->stack)
 615  #define STACK_POINTER(p) ((p)->stack_pointer)
 616  #define STACK_USED(p) ((p)->stack_used)
 617  #define STANDENV_MOID(p) ((p)->standenv_moid)
 618  #define START(p) ((p)->start)
 619  #define STATIC_LINK(p) ((p)->static_link)
 620  #define STATUS(p) ((p)->status)
 621  #define STATUS_IM(z) (STATUS (&(z)[1]))
 622  #define STATUS_RE(z) (STATUS (&(z)[0]))
 623  #define STR(p) ((p)->str)
 624  #define STREAM(p) ((p)->stream)
 625  #define STRING(p) ((p)->string)
 626  #define STRPOS(p) ((p)->strpos)
 627  #define ST_MODE(p) ((p)->st_mode)
 628  #define ST_MTIME(p) ((p)->st_mtime)
 629  #define SUB(p) ((p)->sub)
 630  #define SUBSET(p) ((p)->subset)
 631  #define SUB_MOID(p) (SUB (MOID (p)))
 632  #define SUB_NEXT(p) (SUB (NEXT (p)))
 633  #define SUB_SUB(p) (SUB (SUB (p)))
 634  #define SWAP(p) ((p)->swap)
 635  #define SYMBOL(p) ((p)->symbol)
 636  #define SYNC(p) ((p)->sync)
 637  #define SYNC_INDEX(p) ((p)->sync_index)
 638  #define SYNC_LINE(p) ((p)->sync_line)
 639  #define S_PORT(p) ((p)->s_port)
 640  #define TABLE(p) ((p)->symbol_table)
 641  #define TABS(p) ((p)->tabs)
 642  #define TAG_LEX_LEVEL(p) (LEVEL (TAG_TABLE (p)))
 643  #define TAG_TABLE(p) ((p)->symbol_table)
 644  #define TAX(p) ((p)->tag)
 645  #define TAX_GC(p) ((p)->tag_gc)
 646  #define TERM(p) ((p)->term)
 647  #define TERMINATOR(p) ((p)->terminator)
 648  #define TEXT(p) ((p)->text)
 649  #define THREAD_ID(p) ((p)->thread_id)
 650  #define THREAD_STACK_OFFSET(p) ((p)->thread_stack_offset)
 651  #define TMP_FILE(p) ((p)->tmp_file)
 652  #define TMP_TEXT(p) ((p)->tmp_text)
 653  #define TM_HOUR(p) ((p)->tm_hour)
 654  #define TM_ISDST(p) ((p)->tm_isdst)
 655  #define TM_MDAY(p) ((p)->tm_mday)
 656  #define TM_MIN(p) ((p)->tm_min)
 657  #define TM_MON(p) ((p)->tm_mon)
 658  #define TM_SEC(p) ((p)->tm_sec)
 659  #define TM_WDAY(p) ((p)->tm_wday)
 660  #define TM_YEAR(p) ((p)->tm_year)
 661  #define TOF(p) ((p)->tof)
 662  #define TOP_LINE(p) ((p)->top_line)
 663  #define TOP_MOID(p) ((p)->top_moid)
 664  #define TOP_NODE(p) ((p)->top_node)
 665  #define TOP_REFINEMENT(p) ((p)->top_refinement)
 666  #define TRANS(p) ((p)->trans)
 667  #define TRANSIENT(p) ((p)->transient)
 668  #define TRANSPUT_BUFFER(p) ((p)->transput_buffer)
 669  #define TRANSPUT_ERROR_MENDED(p) ((p)->transput_error_mended)
 670  #define TREE_LISTING_SAFE(p) ((p)->tree_listing_safe)
 671  #define TRIM(p) ((p)->trim)
 672  #define TUPLE(p) ((p)->tuple)
 673  #define TV_SEC(p) ((p)->tv_sec)
 674  #define TV_USEC(p) ((p)->tv_usec)
 675  #define UNDO(p) ((p)->undo)
 676  #define UNDO_LINE(p) ((p)->undo_line)
 677  #define UNION_OFFSET (SIZE_ALIGNED (A68G_UNION))
 678  #define UNIT(p) ((p)->unit)
 679  #define UPB(p) ((p)->upper_bound)
 680  #define UPPER_BOUND(p) ((p)->upper_bound)
 681  #define USE(p) ((p)->use)
 682  #define VAL(p) ((p)->val)
 683  #define VALUE(p) ((p)->value)
 684  #define VALUE_ERROR_MENDED(p) ((p)->value_error_mended)
 685  #define WARNING_COUNT(p) ((p)->warning_count)
 686  #define WHERE(p) ((p)->where)
 687  #define IS_FLEXETY_ROW(m) (IS_FLEX (m) || IS_ROW (m) || m == M_STRING)
 688  #define IS_COERCION(p) ((p)->is_coercion)
 689  #define IS_FLEX(m) IS ((m), FLEX_SYMBOL)
 690  #define IS_LITERALLY(p, s) (strcmp (NSYMBOL (p), s) == 0)
 691  #define IS_NEW_LEXICAL_LEVEL(p) ((p)->is_new_lexical_level)
 692  #define ISNT(p, s) (! IS (p, s))
 693  #define IS(p, s) ((void *) (p) == NO_REF ? A68G_FALSE : ATTRIBUTE (p) == (s))
 694  #define IS_PROC(m) IS ((m), PROC_SYMBOL)
 695  #define IS_REF_FLEX(m) (IS (m, REF_SYMBOL) && IS (SUB (m), FLEX_SYMBOL))
 696  #define IS_REF(m) IS ((m), REF_SYMBOL)
 697  #define IS_ROW(m) IS ((m), ROW_SYMBOL)
 698  #define IS_STRUCT(m) IS ((m), STRUCT_SYMBOL)
 699  #define IS_UNION(m) IS ((m), UNION_SYMBOL)
 700  #define WINDOW_X_SIZE(p) ((p)->window_x_size)
 701  #define WINDOW_Y_SIZE(p) ((p)->window_y_size)
 702  #define WRITE_MOOD(p) ((p)->write_mood)
 703  #define X(p) ((p)->x)
 704  #define X_COORD(p) ((p)->x_coord)
 705  #define Y(p) ((p)->y)
 706  #define YOUNGEST_ENVIRON(p) ((p)->youngest_environ)
 707  #define Y_COORD(p) ((p)->y_coord)
 708  
 709  #endif
     


© 2002-2026 J.M. van der Veer (jmvdveer@xs4all.nl)