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