X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=header.h;fp=header.h;h=0000000000000000000000000000000000000000;hb=81ffe9a7de1db0b3a318a053b38882d1b7ab304c;hp=3faa6a45849413cca2b28404f26b1e35a245a5a8;hpb=d1090135a32de7b38b48c55d4e21f95da4c405bc;p=inform.git diff --git a/header.h b/header.h deleted file mode 100644 index 3faa6a4..0000000 --- a/header.h +++ /dev/null @@ -1,2819 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* Header file for Inform: Z-machine ("Infocom" format) compiler */ -/* */ -/* Copyright (c) Graham Nelson 1993 - 2018 */ -/* */ -/* This file is part of Inform. */ -/* */ -/* Inform is free software: you can redistribute it and/or modify */ -/* it under the terms of the GNU General Public License as published by */ -/* the Free Software Foundation, either version 3 of the License, or */ -/* (at your option) any later version. */ -/* */ -/* Inform 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 General Public License for more details. */ -/* */ -/* You should have received a copy of the GNU General Public License */ -/* along with Inform. If not, see https://gnu.org/licenses/ */ -/* */ -/* *** To compile this program in one of the existing ports, you must */ -/* at least change the machine definition (on the next page). */ -/* In most cases no other work will be needed. *** */ -/* */ -/* Contents: */ -/* */ -/* Machine/host OS definitions (in alphabetical order) */ -/* Default definitions */ -/* Standard ANSI inclusions, macro definitions, structures */ -/* Definitions of internal code numbers */ -/* Extern declarations for linkage (in alphabetical order of file) */ -/* */ -/* ------------------------------------------------------------------------- */ - -#define RELEASE_DATE "28th June 2018" -#define RELEASE_NUMBER 1634 -#define GLULX_RELEASE_NUMBER 38 -#define MODULE_VERSION_NUMBER 1 -#define VNUMBER RELEASE_NUMBER - -/* N indicates an intermediate release for Inform 7 */ -/*#define RELEASE_SUFFIX "N"*/ - -/* ------------------------------------------------------------------------- */ -/* Our host machine or OS for today is... */ -/* */ -/* [ Inform should compile (possibly with warnings) and work safely */ -/* if you just: */ -/* */ -/* #define AMIGA - for the Commodore Amiga under SAS/C */ -/* #define ARCHIMEDES - for Acorn RISC OS machines under Norcroft C */ -/* #define ATARIST - for the Atari ST */ -/* #define BEOS - for the BeBox */ -/* #define LINUX - for Linux under gcc (essentially as Unix) */ -/* #define MACOS - for the Apple Mac with OS X (another Unix) */ -/* #define MAC_CLASSIC - for the Apple Mac under Think C or Codewarrior */ -/* #define MAC_MPW - for MPW under Codewarrior (and maybe Think C) */ -/* #define OS2 - for OS/2 32-bit mode under IBM's C Set++ */ -/* #define PC - for 386+ IBM PCs, eg. Microsoft Visual C/C++ */ -/* #define PC_QUICKC - for small IBM PCs under QuickC */ -/* #define PC_WIN32 - for Borland C++ or Microsoft Visual C++ */ -/* #define UNIX - for Unix under gcc (or big IBM PC under djgpp) */ -/* #define VMS - for VAX or ALPHA under DEC C, but not VAX C */ -/* */ -/* In most cases executables are already available at */ -/* http://www.ifarchive.org/, and these are sometimes enhanced with */ -/* e.g. windowed interfaces whose source is not archived with the */ -/* main Inform source.] */ -/* */ -/* (If no machine is defined, then cautious #defines will be made. In */ -/* most cases, porting to a new machine is a matter of carefully filling */ -/* out a block of definitions like those below.) */ -/* ------------------------------------------------------------------------- */ - -/* #define UNIX */ - -/* ------------------------------------------------------------------------- */ -/* The first task is to include the ANSI header files, and typedef */ -/* suitable 32-bit integer types. */ -/* ------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef VAX -#if SCHAR_MAX >= 0x7FFFFFFFL && SCHAR_MIN <= -0x7FFFFFFFL - typedef signed char int32; - typedef unsigned char uint32; -#elif SHRT_MAX >= 0x7FFFFFFFL && SHRT_MIN <= -0x7FFFFFFFL - typedef signed short int int32; - typedef unsigned short int uint32; -#elif INT_MAX >= 0x7FFFFFFFL && INT_MIN <= -0x7FFFFFFFL - typedef signed int int32; - typedef unsigned int uint32; -#elif LONG_MAX >= 0x7FFFFFFFL && LONG_MIN <= -0x7FFFFFFFL - typedef signed long int int32; - typedef unsigned long int uint32; -#else -#error No type large enough to support 32-bit integers. -#endif -#else - /* VAX C does not provide these limit constants, contrary to ANSI */ - typedef int int32; - typedef unsigned int uint32; -#endif - -/* ------------------------------------------------------------------------- */ -/* The next part of this file contains blocks of definitions, one for */ -/* each port, of machine or OS-dependent constants needed by Inform. */ -/* */ -/* 1. MACHINE_STRING should be set to the name of the machine or OS. */ -/* */ -/* 2. Some miscellaneous #define options (set if the constant is */ -/* defined, otherwise not set): */ -/* */ -/* USE_TEMPORARY_FILES - use scratch files for workspace, not memory, */ -/* by default */ -/* PROMPT_INPUT - prompt input (don't use Unix-style command line) */ -/* TIME_UNAVAILABLE - don't use ANSI time routines to work out today's */ -/* date */ -/* CHAR_IS_UNSIGNED - if on your compiler the type "char" is unsigned */ -/* by default, you should define this */ -/* HAS_REALPATH - the POSIX realpath() function is available to */ -/* find the absolute path to a file */ -/* */ -/* 3. An estimate of the typical amount of memory likely to be free */ -/* should be given in DEFAULT_MEMORY_SIZE. */ -/* For most modern machines, HUGE_SIZE is the appropriate setting, but */ -/* some older micros may benefit from SMALL_SIZE. */ -/* ------------------------------------------------------------------------- */ - -#define LARGE_SIZE 1 -#define SMALL_SIZE 2 -#define HUGE_SIZE 3 - -/* ------------------------------------------------------------------------- */ -/* 4. Filenaming definitions: */ -/* */ -/* It's assumed that the host OS has the concept of subdirectories and */ -/* has "pathnames", that is, filenames giving a chain of subdirectories */ -/* divided by the FN_SEP (filename separator) character: e.g. for Unix */ -/* FN_SEP is defined below as '/' and a typical name is */ -/* "users/graham/jigsaw.z5". */ -/* White space is not allowed in filenames, and nor is the special */ -/* character FN_ALT, which unless defined here will be a comma and will */ -/* be used to separate alternative locations in a path variable. */ -/* */ -/* If NO_FILE_EXTENSIONS is undefined then the OS allows "file extensions" */ -/* of 1 to 3 alphanumeric characters like ".txt" (for text files), ".z5" */ -/* (for game files), etc., to indicate the file's type (and, crucially, */ -/* regards the same filename but with different extensions -- e.g., */ -/* "frog.amp" and "frog.lil" -- as being different names). */ -/* (The file extensions defined below are widely accepted, so please use */ -/* them unless there's a good reason why not.) */ -/* */ -/* You should then define STANDARD_DIRECTORIES (you can define it anyway) */ -/* in which case Inform will expect by default that files are sorted out */ -/* by being put into suitable directories (e.g., a "games" directory for */ -/* story files). */ -/* */ -/* If it's convenient for your port you can alter the detailed definitions */ -/* which these broad settings make. Be careful if NO_FILE_EXTENSIONS */ -/* is set without STANDARD_DIRECTORIES, as then Inform may */ -/* overwrite its source with object code. */ -/* */ -/* 5. Filenames (or code related to filenames) for the three temporary */ -/* files. These only exist during compilation (and only if -F1 is set). */ -/* Temporary_Name is the body of a filename to use */ -/* (if you don't set this, it becomes "Inftemp") and Temporary_Directory */ -/* is the directory path for the files to go in (which can be altered on */ -/* the command line). On some multi-tasking OSs these filenames ought to */ -/* include a number uniquely identifying the process: to indicate this, */ -/* define INCLUDE_TASK_ID and provide some code... */ -/* */ -/* #define INCLUDE_TASK_ID */ -/* #ifdef INFORM_FILE */ -/* static int32 unique_task_id(void) */ -/* { ...some code returning your task ID... */ -/* } */ -/* #endif */ -/* */ -/* 6. Any other definitions specific to the OS or machine. */ -/* (In particular DEFAULT_ERROR_FORMAT is 0 on most machines and 1 on PCs; */ -/* it controls the style of error messages, which is important for some */ -/* error-throwback debugging tools.) */ -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* The blocks now follow in alphabetical order. */ -/* ------------------------------------------------------------------------- */ -/* AMIGA block */ -/* ------------------------------------------------------------------------- */ -#ifdef AMIGA -/* 1 */ -#define MACHINE_STRING "Amiga" -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP '/' -/* 5 */ -#define __USE_SYSBASE -#include -#define INCLUDE_TASK_ID -#define Temporary_Directory "T:" -#ifdef MAIN_INFORM_FILE -static int32 unique_task_id(void) -{ return (int32)FindTask(NULL); -} -#endif -#endif -/* ------------------------------------------------------------------------- */ -/* ARCHIMEDES block: Acorn/RISC OS settings */ -/* ------------------------------------------------------------------------- */ -#ifdef ARCHIMEDES -/* 1 */ -#define MACHINE_STRING "RISC OS" -/* 2 */ -#define CHAR_IS_UNSIGNED -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP '.' -#define STANDARD_DIRECTORIES -#define NO_FILE_EXTENSIONS -#define Source_Directory "inform" -#define ICL_Directory "ICL" -/* 5 */ -#define ENABLE_TEMPORARY_PATH -#define Temporary_Directory "ram:" -/* 6 */ -#define ARC_THROWBACK -#endif -/* ------------------------------------------------------------------------- */ -/* Atari ST block */ -/* ------------------------------------------------------------------------- */ -#ifdef ATARIST -/* 1 */ -#define MACHINE_STRING "Atari ST" -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP '/' -/* 5 */ -#ifndef TOSFS -#define Temporary_Directory "/tmp" -#define INCLUDE_TASK_ID -#ifdef MAIN_INFORM_FILE -static int32 unique_task_id(void) -{ return (int32)getpid(); -} -#endif -#endif -#endif -/* ------------------------------------------------------------------------- */ -/* BEOS block */ -/* ------------------------------------------------------------------------- */ -#ifdef BEOS -/* 1 */ -#define MACHINE_STRING "BeOS" -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP '/' -#define FILE_EXTENSIONS -/* 5 */ -#define Temporary_Directory "/tmp" -#endif -/* ------------------------------------------------------------------------- */ -/* LINUX block */ -/* ------------------------------------------------------------------------- */ -#ifdef LINUX -/* 1 */ -#define MACHINE_STRING "Linux" -/* 2 */ -#define HAS_REALPATH -/* 3 */ -#define DEFAULT_MEMORY_SIZE HUGE_SIZE -/* 4 */ -#define FN_SEP '/' -/* 5 */ -#define Temporary_Directory "/tmp" -/* 6 */ -#define PATHLEN 8192 -#endif -/* ------------------------------------------------------------------------- */ -/* Macintosh block */ -/* ------------------------------------------------------------------------- */ -#ifdef MAC_MPW -#define MAC_CLASSIC -#endif - -#ifdef MAC_CLASSIC -/* 1 */ -#ifdef MAC_MPW -#define MACHINE_STRING "Macintosh Programmer's Workshop" -#else -#define MACHINE_STRING "Macintosh" -#endif -/* 2 */ -#ifdef MAC_FACE -#define EXTERNAL_SHELL -#endif -#ifndef MAC_FACE -#ifndef MAC_MPW -#define PROMPT_INPUT -#endif -#endif -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP ':' -#ifdef MAC_MPW -#define Include_Extension ".h" -#endif -/* 6 */ -#ifdef MAC_FACE -#include "TB Inform.h" -#endif -#ifdef MAC_MPW -#include -#define DEFAULT_ERROR_FORMAT 2 -#endif -#endif -/* ------------------------------------------------------------------------- */ -/* OS/2 block */ -/* ------------------------------------------------------------------------- */ -#ifdef OS2 -/* 1 */ -#define MACHINE_STRING "OS/2" -/* 2 */ -#define CHAR_IS_UNSIGNED -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP '/' -#endif -/* ------------------------------------------------------------------------- */ -/* MACOS block */ -/* ------------------------------------------------------------------------- */ -#ifdef MACOS -/* 1 */ -#define MACHINE_STRING "MacOS" -/* 2 */ -#define HAS_REALPATH -/* 3 */ -#define DEFAULT_MEMORY_SIZE HUGE_SIZE -/* 4 */ -#define FN_SEP '/' -/* 5 */ -#define Temporary_Directory "/tmp" -#define INCLUDE_TASK_ID -#define _POSIX_C_SOURCE 199506L -#define _XOPEN_SOURCE 500 -#ifdef MAIN_INFORM_FILE -#include -#include -static int32 unique_task_id(void) -{ return (int32)getpid(); -} -#endif -/* 6 */ -#define PATHLEN 8192 -#endif -/* ------------------------------------------------------------------------- */ -/* PC and PC_QUICKC block */ -/* ------------------------------------------------------------------------- */ -#ifdef PC_QUICKC -#define PC -#endif - -#ifdef PC -/* 1 */ -#define MACHINE_STRING "PC" -/* 2 */ -#define USE_TEMPORARY_FILES -/* 3 */ -#ifdef PC_QUICKC -#define DEFAULT_MEMORY_SIZE SMALL_SIZE -#else -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -#endif -/* 4 */ -#define FN_SEP '\\' -/* 6 */ -#define DEFAULT_ERROR_FORMAT 1 -#endif -/* ------------------------------------------------------------------------- */ -/* PC_WIN32 block */ -/* ------------------------------------------------------------------------- */ -#ifdef PC_WIN32 -/* 1 */ -#define MACHINE_STRING "Win32" -/* 2 */ -#define HAS_REALPATH -/* 3 */ -#define DEFAULT_MEMORY_SIZE HUGE_SIZE -/* 4 */ -#define FN_SEP '\\' -/* 6 */ -#define DEFAULT_ERROR_FORMAT 1 -#define PATHLEN 512 -#ifdef _MSC_VER /* Microsoft Visual C++ */ -#define snprintf _snprintf -#define isnan _isnan -#define isinf(x) (!_isnan(x) && !_finite(x)) -#endif -#endif -/* ------------------------------------------------------------------------- */ -/* UNIX block */ -/* ------------------------------------------------------------------------- */ -#ifdef UNIX -/* 1 */ -#ifndef MACHINE_STRING -#define MACHINE_STRING "Unix" -#endif -/* 2 */ -#define HAS_REALPATH -/* 3 */ -#define DEFAULT_MEMORY_SIZE HUGE_SIZE -/* 4 */ -#define FN_SEP '/' -/* 5 */ -#define PATHLEN 512 -#define Temporary_Directory "/tmp" -#define INCLUDE_TASK_ID -#ifdef MAIN_INFORM_FILE -#include -static int32 unique_task_id(void) -{ return (int32)getpid(); -} -#endif -#endif -/* ------------------------------------------------------------------------- */ -/* VMS (Dec VAX and Alpha) block */ -/* ------------------------------------------------------------------------- */ -#ifdef __VMS -#define VMS -#endif - -#ifdef VMS -/* 1 */ -#ifdef __ALPHA -#define MACHINE_STRING "Alpha/VMS" -#else -#define MACHINE_STRING "VAX/VMS" -#endif -/* 2 */ -#define CHAR_IS_UNSIGNED -/* 3 */ -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -/* 4 */ -#define FN_SEP '/' -#define Code_Extension ".zip" -#define V4Code_Extension ".zip" -#define V5Code_Extension ".zip" -#define V6Code_Extension ".zip" -#define V7Code_Extension ".zip" -#define V8Code_Extension ".zip" -#endif -/* ========================================================================= */ -/* Default settings: */ -/* ------------------------------------------------------------------------- */ - -#ifndef NO_FILE_EXTENSIONS -#define FILE_EXTENSIONS -#endif - -#ifndef Transcript_File -#ifdef FILE_EXTENSIONS -#define Transcript_File "gametext.txt" -#else -#define Transcript_File "gametext" -#endif -#endif -#ifndef Debugging_File -#ifdef FILE_EXTENSIONS -#define Debugging_File "gameinfo.dbg" -#else -#define Debugging_File "gamedebug" -#endif -#endif - -#ifdef FILE_EXTENSIONS -#ifndef Source_Extension -#define Source_Extension ".inf" -#endif -#ifndef Include_Extension -#define Include_Extension ".h" -#endif -#ifndef Code_Extension -#define Code_Extension ".z3" -#endif -#ifndef V4Code_Extension -#define V4Code_Extension ".z4" -#endif -#ifndef V5Code_Extension -#define V5Code_Extension ".z5" -#endif -#ifndef V6Code_Extension -#define V6Code_Extension ".z6" -#endif -#ifndef V7Code_Extension -#define V7Code_Extension ".z7" -#endif -#ifndef V8Code_Extension -#define V8Code_Extension ".z8" -#endif -#ifndef GlulxCode_Extension -#define GlulxCode_Extension ".ulx" -#endif -#ifndef Module_Extension -#define Module_Extension ".m5" -#endif -#ifndef ICL_Extension -#define ICL_Extension ".icl" -#endif - -#else - -#define Source_Extension "" -#define Include_Extension "" -#define Code_Extension "" -#define V4Code_Extension "" -#define V5Code_Extension "" -#define V6Code_Extension "" -#define V7Code_Extension "" -#define V8Code_Extension "" -#define GlulxCode_Extension "" -#define Module_Extension "" -#define ICL_Extension "" -#endif - -#ifdef STANDARD_DIRECTORIES -#ifndef Source_Directory -#define Source_Directory "source" -#endif -#ifndef Include_Directory -#define Include_Directory "library" -#endif -#ifndef Code_Directory -#define Code_Directory "games" -#endif -#ifndef Module_Directory -#define Module_Directory "modules" -#endif -#ifndef Temporary_Directory -#define Temporary_Directory "" -#endif -#ifndef ICL_Directory -#define ICL_Directory "" -#endif - -#else - -#ifndef Source_Directory -#define Source_Directory "" -#endif -#ifndef Include_Directory -#define Include_Directory "" -#endif -#ifndef Code_Directory -#define Code_Directory "" -#endif -#ifndef Module_Directory -#define Module_Directory "" -#endif -#ifndef Temporary_Directory -#define Temporary_Directory "" -#endif -#ifndef ICL_Directory -#define ICL_Directory "" -#endif -#endif - -#ifndef FN_SEP -#define FN_SEP '/' -#endif - -#ifndef FN_ALT -#define FN_ALT ',' -#endif - -#ifndef PATHLEN -#define PATHLEN 128 -#endif - -#ifndef Temporary_File -#define Temporary_File "Inftemp" -#endif - -#ifndef DEFAULT_ERROR_FORMAT -#define DEFAULT_ERROR_FORMAT 0 -#endif - -#ifndef DEFAULT_MEMORY_SIZE -#define DEFAULT_MEMORY_SIZE LARGE_SIZE -#endif - -#ifndef CHAR_IS_UNSIGNED - typedef unsigned char uchar; -#else - typedef char uchar; -#endif - -#if defined(__GNUC__) || defined(__clang__) -#define NORETURN __attribute__((__noreturn__)) -#endif /* defined(__GNUC__) || defined(__clang__) */ - -#ifndef NORETURN -#define NORETURN -#endif - -/* ------------------------------------------------------------------------- */ -/* A macro (rather than constant) definition: */ -/* ------------------------------------------------------------------------- */ - -#ifdef PC_QUICKC - void _huge * halloc(long, size_t); - void hfree(void *); -#define subtract_pointers(p1,p2) (long)((char _huge *)p1-(char _huge *)p2) -#else -#define subtract_pointers(p1,p2) (((char *) p1)-((char *) p2)) -#endif - -/* ------------------------------------------------------------------------- */ -/* SEEK_SET is a constant which should be defined in the ANSI header files */ -/* but which is not present in some implementations: it's used as a */ -/* parameter for "fseek", defined in "stdio". In pre-ANSI C, the value */ -/* 0 was used as a parameter instead, hence the definition below. */ -/* ------------------------------------------------------------------------- */ - -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif - -/* ------------------------------------------------------------------------- */ -/* A large block of #define'd constant values follows. */ -/* ------------------------------------------------------------------------- */ - -#define TRUE -1 -#define FALSE 0 - -/* These checked the glulx_mode global during development, but are no - longer needed. */ -#define ASSERT_ZCODE() (0) -#define ASSERT_GLULX() (0) - - -#define ReadInt32(ptr) \ - ( (((int32)(((uchar *)(ptr))[0])) << 24) \ - | (((int32)(((uchar *)(ptr))[1])) << 16) \ - | (((int32)(((uchar *)(ptr))[2])) << 8) \ - | (((int32)(((uchar *)(ptr))[3])) ) ) - -#define ReadInt16(ptr) \ - ( (((int32)(((uchar *)(ptr))[0])) << 8) \ - | (((int32)(((uchar *)(ptr))[1])) ) ) - -#define WriteInt32(ptr, val) \ - ((ptr)[0] = (uchar)(((int32)(val)) >> 24), \ - (ptr)[1] = (uchar)(((int32)(val)) >> 16), \ - (ptr)[2] = (uchar)(((int32)(val)) >> 8), \ - (ptr)[3] = (uchar)(((int32)(val)) ) ) - -#define WriteInt16(ptr, val) \ - ((ptr)[0] = (uchar)(((int32)(val)) >> 8), \ - (ptr)[1] = (uchar)(((int32)(val)) ) ) - -/* ------------------------------------------------------------------------- */ -/* If your compiler doesn't recognise \t, and you use ASCII, you could */ -/* define T_C as (char) 9; failing that, it _must_ be defined as ' ' */ -/* (space) and is _not_ allowed to be 0 or any recognisable character. */ -/* ------------------------------------------------------------------------- */ - -#define TAB_CHARACTER '\t' - -/* ------------------------------------------------------------------------- */ -/* Maxima. */ -/* ------------------------------------------------------------------------- */ - -#define MAX_ERRORS 100 -#define MAX_IDENTIFIER_LENGTH 32 -#define MAX_ABBREV_LENGTH 64 -#define MAX_DICT_WORD_SIZE 40 -#define MAX_DICT_WORD_BYTES (40*4) -#define MAX_NUM_ATTR_BYTES 39 -#define MAX_VERB_WORD_SIZE 120 - -#define VENEER_CONSTRAINT_ON_CLASSES_Z 256 -#define VENEER_CONSTRAINT_ON_IP_TABLE_SIZE_Z 128 -#define VENEER_CONSTRAINT_ON_CLASSES_G 32768 -#define VENEER_CONSTRAINT_ON_IP_TABLE_SIZE_G 32768 -#define VENEER_CONSTRAINT_ON_CLASSES \ - (glulx_mode ? VENEER_CONSTRAINT_ON_CLASSES_G \ - : VENEER_CONSTRAINT_ON_CLASSES_Z) -#define VENEER_CONSTRAINT_ON_IP_TABLE_SIZE \ - (glulx_mode ? VENEER_CONSTRAINT_ON_IP_TABLE_SIZE_G \ - : VENEER_CONSTRAINT_ON_IP_TABLE_SIZE_Z) - -#define GLULX_HEADER_SIZE 36 -/* Number of bytes in the header. */ -#define GLULX_STATIC_ROM_SIZE 24 -/* Number of bytes in the Inform-specific block right after the header. */ -#define GPAGESIZE 256 -/* All Glulx memory boundaries must be multiples of GPAGESIZE. */ - -/* ------------------------------------------------------------------------- */ -/* Structure definitions (there are a few others local to files) */ -/* ------------------------------------------------------------------------- */ - -typedef struct assembly_operand_t -{ int type; - int32 value; - int symtype; /* 6.30 */ - int symflags; /* 6.30 */ - int marker; -} assembly_operand; - -#define INITAOTV(aop, typ, val) ((aop)->type=(typ), (aop)->value=(val), (aop)->marker=0, (aop)->symtype=0, (aop)->symflags=0) -#define INITAOT(aop, typ) INITAOTV(aop, typ, 0) -#define INITAO(aop) INITAOTV(aop, 0, 0) - -#define MAX_LINES_PER_VERB 32 -typedef struct verbt { - int lines; - int l[MAX_LINES_PER_VERB]; -} verbt; - -typedef struct prop { - uchar l, num; - assembly_operand ao[32]; -} prop; - -/* Only one of this object. */ -typedef struct fpropt { - uchar atts[6]; - int l; - prop pp[64]; -} fpropt; - -typedef struct objecttz { - uchar atts[6]; - int parent, next, child; - int propsize; -} objecttz; - -typedef struct propg { - int num; - int continuation; - int flags; - int32 datastart; - int32 datalen; -} propg; - -/* Only one of this object. */ -typedef struct fproptg { - uchar atts[MAX_NUM_ATTR_BYTES]; - int numprops; - propg *props; - int propdatasize; - assembly_operand *propdata; - int32 finalpropaddr; -} fproptg; - -typedef struct objecttg { - /* attributes are stored in a separate array */ - int32 shortname; - int32 parent, next, child; - int32 propaddr; - int32 propsize; -} objecttg; - -typedef struct maybe_file_position_S -{ int valid; - fpos_t position; -} maybe_file_position; - -typedef struct debug_location_s -{ int32 file_index; - int32 beginning_byte_index; - int32 end_byte_index; - int32 beginning_line_number; - int32 end_line_number; - int32 beginning_character_number; - int32 end_character_number; - int32 orig_file_index; - int32 orig_beg_line_number; - int32 orig_beg_char_number; - /* We only track the beginning #origsource location, not the end. */ -} debug_location; - -typedef struct debug_locations_s -{ debug_location location; - struct debug_locations_s *next; - int reference_count; -} debug_locations; - -typedef struct brief_location_s -{ int32 file_index; - int32 line_number; - int32 orig_file_index; - int32 orig_line_number; -} brief_location; - -typedef struct debug_location_beginning_s -{ debug_locations *head; - int32 beginning_byte_index; - int32 beginning_line_number; - int32 beginning_character_number; - int32 orig_file_index; - int32 orig_beg_line_number; - int32 orig_beg_char_number; -} debug_location_beginning; - -typedef struct keyword_group_s -{ char *keywords[120]; - int change_token_type; - int enabled; - int case_sensitive; -} keyword_group; - -typedef struct token_data_s -{ char *text; - int32 value; /* ###-long */ - int type; - int symtype; /* 6.30 */ - int symflags; /* 6.30 */ - int marker; - debug_location location; -} token_data; - -typedef struct FileId_s /* Source code file identifier: */ -{ char *filename; /* The filename (after translation) */ - FILE *handle; /* Handle of file (when open), or - NULL when closed */ - int is_input; /* Is this a source file that we are - parsing? If not, this is an - origsource filename (and handle - is NULL). */ -} FileId; - -typedef struct ErrorPosition_s -{ int file_number; - char *source; - int line_number; - int main_flag; - int orig_file; - char *orig_source; - int32 orig_line; - int32 orig_char; -} ErrorPosition; - -/* A memory block can hold at most ALLOC_CHUNK_SIZE * 72: */ - -extern int ALLOC_CHUNK_SIZE; - -typedef struct memory_block_s -{ int chunks; - int extent_of_last; - uchar *chunk[72]; - int write_pos; -} memory_block; - -/* This serves for both Z-code and Glulx instructions. Glulx doesn't use - the text, store_variable_number, branch_label_number, or branch_flag - fields. */ -typedef struct assembly_instruction_t -{ int internal_number; - int store_variable_number; - int32 branch_label_number; - int branch_flag; - char *text; - int operand_count; - assembly_operand operand[8]; -} assembly_instruction; - -typedef struct expression_tree_node_s -{ - /* Data used in tree construction */ - - int up, down, right; - int operator_number; /* Only meaningful for non-leaves */ - assembly_operand value; /* Only meaningful for leaves */ - - /* Attributes synthesised during code generation */ - - int must_produce_value; /* e.g. FALSE in a void context */ - - int label_after; /* -1, or "put this label after code" */ - int to_expression; /* TRUE if a condition used as numeric val */ - int true_label; /* On condition "true", jump to this (or keep - going if -1) */ - int false_label; /* Likewise if the condition is "false". */ - -} expression_tree_node; - -typedef struct operator_s -{ int precedence; /* Level 0 to 13 (13 is highest) */ - int token_type; /* Lexical token type */ - int token_value; /* Lexical token value */ - int usage; /* Infix (IN_U), prefix or postfix */ - int associativity; /* Left (L_A), right (R_A) - or 0 for "it is an error to - implicitly associate this" */ - int requires_lvalue; /* TRUE if the first operand must - be an "lvalue" (the name of some - storage object, such as a variable - or an array entry) */ - int opcode_number_z; /* Translation number (see below) */ - int opcode_number_g; /* Translation number (see below) */ - int side_effect; /* TRUE if evaluating the operator - has potential side-effects in - terms of changing the Z-machine */ - int negation; /* 0 for an unconditional operator, - otherwise the negation operator */ - char *description; /* Text describing the operator - for error messages and tracing */ -} operator; - -/* The translation number of an operator is as follows: - - Z-code: - an internal opcode number if the operator can be translated - directly to a single Z-machine opcode; - 400+n if it can be translated to branch opcode n; - 800+n if to the negated form of branch opcode n; - (using n = 200, 201 for two conditions requiring special - translation) - -1 otherwise - Glulx: - an internal opcode number if the operator can be translated - directly to a single Glulx opcode; - FIRST_CC to LAST_CC if it is a condition; - -1 otherwise */ - -/* ------------------------------------------------------------------------- */ -/* Assembly operand types. */ -/* ------------------------------------------------------------------------- */ - -/* For Z-machine... */ - -#define LONG_CONSTANT_OT 0 /* General constant */ -#define SHORT_CONSTANT_OT 1 /* Constant in range 0 to 255 */ -#define VARIABLE_OT 2 /* Variable (global, local or sp) */ -#define OMITTED_OT 3 /* Value used in type field to indicate - that no operand is supplied */ -#define EXPRESSION_OT 4 /* Meaning: to determine this value, run code - equivalent to the expression tree whose - root node-number is the value given */ - -/* For Glulx... */ - -/* #define OMITTED_OT 3 */ /* Same as above */ -/* #define EXPRESSION_OT 4 */ /* Same as above */ -#define CONSTANT_OT 5 /* Four-byte constant */ -#define HALFCONSTANT_OT 6 /* Two-byte constant */ -#define BYTECONSTANT_OT 7 /* One-byte constant */ -#define ZEROCONSTANT_OT 8 /* Constant zero (no bytes of data) */ -#define SYSFUN_OT 9 /* System function value */ -#define DEREFERENCE_OT 10 /* Value at this address */ -#define GLOBALVAR_OT 11 /* Global variable */ -#define LOCALVAR_OT 12 /* Local variable or sp */ - -/* ------------------------------------------------------------------------- */ -/* Internal numbers representing assemble-able Z-opcodes */ -/* ------------------------------------------------------------------------- */ - -#define je_zc 0 -#define jl_zc 1 -#define jg_zc 2 -#define dec_chk_zc 3 -#define inc_chk_zc 4 -#define jin_zc 5 -#define test_zc 6 -#define or_zc 7 -#define and_zc 8 -#define test_attr_zc 9 -#define set_attr_zc 10 -#define clear_attr_zc 11 -#define store_zc 12 -#define insert_obj_zc 13 -#define loadw_zc 14 -#define loadb_zc 15 -#define get_prop_zc 16 -#define get_prop_addr_zc 17 -#define get_next_prop_zc 18 -#define add_zc 19 -#define sub_zc 20 -#define mul_zc 21 -#define div_zc 22 -#define mod_zc 23 -#define call_zc 24 -#define storew_zc 25 -#define storeb_zc 26 -#define put_prop_zc 27 -#define sread_zc 28 -#define print_char_zc 29 -#define print_num_zc 30 -#define random_zc 31 -#define push_zc 32 -#define pull_zc 33 -#define split_window_zc 34 -#define set_window_zc 35 -#define output_stream_zc 36 -#define input_stream_zc 37 -#define sound_effect_zc 38 -#define jz_zc 39 -#define get_sibling_zc 40 -#define get_child_zc 41 -#define get_parent_zc 42 -#define get_prop_len_zc 43 -#define inc_zc 44 -#define dec_zc 45 -#define print_addr_zc 46 -#define remove_obj_zc 47 -#define print_obj_zc 48 -#define ret_zc 49 -#define jump_zc 50 -#define print_paddr_zc 51 -#define load_zc 52 -#define not_zc 53 -#define rtrue_zc 54 -#define rfalse_zc 55 -#define print_zc 56 -#define print_ret_zc 57 -#define nop_zc 58 -#define save_zc 59 -#define restore_zc 60 -#define restart_zc 61 -#define ret_popped_zc 62 -#define pop_zc 63 -#define quit_zc 64 -#define new_line_zc 65 -#define show_status_zc 66 -#define verify_zc 67 -#define call_2s_zc 68 -#define call_vs_zc 69 -#define aread_zc 70 -#define call_vs2_zc 71 -#define erase_window_zc 72 -#define erase_line_zc 73 -#define set_cursor_zc 74 -#define get_cursor_zc 75 -#define set_text_style_zc 76 -#define buffer_mode_zc 77 -#define read_char_zc 78 -#define scan_table_zc 79 -#define call_1s_zc 80 -#define call_2n_zc 81 -#define set_colour_zc 82 -#define throw_zc 83 -#define call_vn_zc 84 -#define call_vn2_zc 85 -#define tokenise_zc 86 -#define encode_text_zc 87 -#define copy_table_zc 88 -#define print_table_zc 89 -#define check_arg_count_zc 90 -#define call_1n_zc 91 -#define catch_zc 92 -#define piracy_zc 93 -#define log_shift_zc 94 -#define art_shift_zc 95 -#define set_font_zc 96 -#define save_undo_zc 97 -#define restore_undo_zc 98 -#define draw_picture_zc 99 -#define picture_data_zc 100 -#define erase_picture_zc 101 -#define set_margins_zc 102 -#define move_window_zc 103 -#define window_size_zc 104 -#define window_style_zc 105 -#define get_wind_prop_zc 106 -#define scroll_window_zc 107 -#define pop_stack_zc 108 -#define read_mouse_zc 109 -#define mouse_window_zc 110 -#define push_stack_zc 111 -#define put_wind_prop_zc 112 -#define print_form_zc 113 -#define make_menu_zc 114 -#define picture_table_zc 115 -#define print_unicode_zc 116 -#define check_unicode_zc 117 - - -/* ------------------------------------------------------------------------- */ -/* Internal numbers representing assemble-able Glulx opcodes */ -/* ------------------------------------------------------------------------- */ - -#define nop_gc 0 -#define add_gc 1 -#define sub_gc 2 -#define mul_gc 3 -#define div_gc 4 -#define mod_gc 5 -#define neg_gc 6 -#define bitand_gc 7 -#define bitor_gc 8 -#define bitxor_gc 9 -#define bitnot_gc 10 -#define shiftl_gc 11 -#define sshiftr_gc 12 -#define ushiftr_gc 13 -#define jump_gc 14 -#define jz_gc 15 -#define jnz_gc 16 -#define jeq_gc 17 -#define jne_gc 18 -#define jlt_gc 19 -#define jge_gc 20 -#define jgt_gc 21 -#define jle_gc 22 -#define jltu_gc 23 -#define jgeu_gc 24 -#define jgtu_gc 25 -#define jleu_gc 26 -#define call_gc 27 -#define return_gc 28 -#define catch_gc 29 -#define throw_gc 30 -#define tailcall_gc 31 -#define copy_gc 32 -#define copys_gc 33 -#define copyb_gc 34 -#define sexs_gc 35 -#define sexb_gc 36 -#define aload_gc 37 -#define aloads_gc 38 -#define aloadb_gc 39 -#define aloadbit_gc 40 -#define astore_gc 41 -#define astores_gc 42 -#define astoreb_gc 43 -#define astorebit_gc 44 -#define stkcount_gc 45 -#define stkpeek_gc 46 -#define stkswap_gc 47 -#define stkroll_gc 48 -#define stkcopy_gc 49 -#define streamchar_gc 50 -#define streamnum_gc 51 -#define streamstr_gc 52 -#define gestalt_gc 53 -#define debugtrap_gc 54 -#define getmemsize_gc 55 -#define setmemsize_gc 56 -#define jumpabs_gc 57 -#define random_gc 58 -#define setrandom_gc 59 -#define quit_gc 60 -#define verify_gc 61 -#define restart_gc 62 -#define save_gc 63 -#define restore_gc 64 -#define saveundo_gc 65 -#define restoreundo_gc 66 -#define protect_gc 67 -#define glk_gc 68 -#define getstringtbl_gc 69 -#define setstringtbl_gc 70 -#define getiosys_gc 71 -#define setiosys_gc 72 -#define linearsearch_gc 73 -#define binarysearch_gc 74 -#define linkedsearch_gc 75 -#define callf_gc 76 -#define callfi_gc 77 -#define callfii_gc 78 -#define callfiii_gc 79 -#define streamunichar_gc 80 -#define mzero_gc 81 -#define mcopy_gc 82 -#define malloc_gc 83 -#define mfree_gc 84 -#define accelfunc_gc 85 -#define accelparam_gc 86 -#define numtof_gc 87 -#define ftonumz_gc 88 -#define ftonumn_gc 89 -#define ceil_gc 90 -#define floor_gc 91 -#define fadd_gc 92 -#define fsub_gc 93 -#define fmul_gc 94 -#define fdiv_gc 95 -#define fmod_gc 96 -#define sqrt_gc 97 -#define exp_gc 98 -#define log_gc 99 -#define pow_gc 100 -#define sin_gc 101 -#define cos_gc 102 -#define tan_gc 103 -#define asin_gc 104 -#define acos_gc 105 -#define atan_gc 106 -#define atan2_gc 107 -#define jfeq_gc 108 -#define jfne_gc 109 -#define jflt_gc 110 -#define jfle_gc 111 -#define jfgt_gc 112 -#define jfge_gc 113 -#define jisnan_gc 114 -#define jisinf_gc 115 - -/* ------------------------------------------------------------------------- */ -/* Index numbers into the keyword group "opcode_macros_g" (see "lexer.c") */ -/* ------------------------------------------------------------------------- */ - -#define pull_gm 0 -#define push_gm 1 - - -#define SYMBOL_TT 0 /* value = index in symbol table */ -#define NUMBER_TT 1 /* value = the number */ -#define DQ_TT 2 /* no value */ -#define SQ_TT 3 /* no value */ -#define SEP_TT 4 /* value = the _SEP code */ -#define EOF_TT 5 /* no value */ - -#define STATEMENT_TT 100 /* a statement keyword */ -#define SEGMENT_MARKER_TT 101 /* with/has/class etc. */ -#define DIRECTIVE_TT 102 /* a directive keyword */ -#define CND_TT 103 /* in/has/etc. */ -#define SYSFUN_TT 105 /* built-in function */ -#define LOCAL_VARIABLE_TT 106 /* local variable */ -#define OPCODE_NAME_TT 107 /* opcode name */ -#define MISC_KEYWORD_TT 108 /* keyword like "char" used in - syntax for a statement */ -#define DIR_KEYWORD_TT 109 /* keyword like "meta" used in - syntax for a directive */ -#define TRACE_KEYWORD_TT 110 /* keyword used in debugging */ -#define SYSTEM_CONSTANT_TT 111 /* such as "code_offset" */ -#define OPCODE_MACRO_TT 112 /* fake opcode for compatibility */ - -#define OP_TT 200 /* value = operator no */ -#define ENDEXP_TT 201 /* no value */ -#define SUBOPEN_TT 202 /* ( used for subexpr */ -#define SUBCLOSE_TT 203 /* ) used to close subexp */ -#define LARGE_NUMBER_TT 204 /* constant not in range 0-255 */ -#define SMALL_NUMBER_TT 205 /* constant in range 0-255 */ -/* In Glulx, that's the range -0x8000 to 0x7fff instead. */ -#define VARIABLE_TT 206 /* variable name */ -#define DICTWORD_TT 207 /* literal 'word' */ -#define ACTION_TT 208 /* action name */ - -#define VOID_CONTEXT 1 -#define CONDITION_CONTEXT 2 -#define CONSTANT_CONTEXT 3 -#define QUANTITY_CONTEXT 4 -#define ACTION_Q_CONTEXT 5 -#define ASSEMBLY_CONTEXT 6 -#define ARRAY_CONTEXT 7 -#define FORINIT_CONTEXT 8 -#define RETURN_Q_CONTEXT 9 - -#define LOWEST_SYSTEM_VAR_NUMBER 249 /* globals 249 to 255 are used - in compiled code (Z-code - only; in Glulx, the range can - change) */ - -/* ------------------------------------------------------------------------- */ -/* Symbol flag definitions (in no significant order) */ -/* ------------------------------------------------------------------------- */ - -#define UNKNOWN_SFLAG 1 -#define REPLACE_SFLAG 2 -#define USED_SFLAG 4 -#define DEFCON_SFLAG 8 -#define STUB_SFLAG 16 -#define IMPORT_SFLAG 32 -#define EXPORT_SFLAG 64 -#define ALIASED_SFLAG 128 - -#define CHANGE_SFLAG 256 -#define SYSTEM_SFLAG 512 -#define INSF_SFLAG 1024 -#define UERROR_SFLAG 2048 -#define ACTION_SFLAG 4096 -#define REDEFINABLE_SFLAG 8192 -#define STAR_SFLAG 16384 - -/* ------------------------------------------------------------------------- */ -/* Symbol type definitions */ -/* ------------------------------------------------------------------------- */ - -#define ROUTINE_T 1 -#define LABEL_T 2 -#define GLOBAL_VARIABLE_T 3 -#define ARRAY_T 4 -#define CONSTANT_T 5 -#define ATTRIBUTE_T 6 -#define PROPERTY_T 7 -#define INDIVIDUAL_PROPERTY_T 8 -#define OBJECT_T 9 -#define CLASS_T 10 -#define FAKE_ACTION_T 11 - -/* ------------------------------------------------------------------------- */ -/* Statusline_flag values */ -/* ------------------------------------------------------------------------- */ - -#define SCORE_STYLE 0 -#define TIME_STYLE 1 - -/* ------------------------------------------------------------------------- */ -/* Inform keyword definitions */ -/* ------------------------------------------------------------------------- */ - -/* Index numbers into the keyword group "directives" (see "lexer.c") */ - -#define ABBREVIATE_CODE 0 -#define ARRAY_CODE 1 -#define ATTRIBUTE_CODE 2 -#define CLASS_CODE 3 -#define CONSTANT_CODE 4 -#define DEFAULT_CODE 5 -#define DICTIONARY_CODE 6 -#define END_CODE 7 -#define ENDIF_CODE 8 -#define EXTEND_CODE 9 -#define FAKE_ACTION_CODE 10 -#define GLOBAL_CODE 11 -#define IFDEF_CODE 12 -#define IFNDEF_CODE 13 -#define IFNOT_CODE 14 -#define IFV3_CODE 15 -#define IFV5_CODE 16 -#define IFTRUE_CODE 17 -#define IFFALSE_CODE 18 -#define IMPORT_CODE 19 -#define INCLUDE_CODE 20 -#define LINK_CODE 21 -#define LOWSTRING_CODE 22 -#define MESSAGE_CODE 23 -#define NEARBY_CODE 24 -#define OBJECT_CODE 25 -#define ORIGSOURCE_CODE 26 -#define PROPERTY_CODE 27 -#define RELEASE_CODE 28 -#define REPLACE_CODE 29 -#define SERIAL_CODE 30 -#define SWITCHES_CODE 31 -#define STATUSLINE_CODE 32 -#define STUB_CODE 33 -#define SYSTEM_CODE 34 -#define TRACE_CODE 35 -#define UNDEF_CODE 36 -#define VERB_CODE 37 -#define VERSION_CODE 38 -#define ZCHARACTER_CODE 39 - -#define OPENBLOCK_CODE 100 -#define CLOSEBLOCK_CODE 101 - -/* Index numbers into the keyword group "statements" (see "lexer.c") */ - -#define BOX_CODE 0 -#define BREAK_CODE 1 -#define CONTINUE_CODE 2 -#define SDEFAULT_CODE 3 -#define DO_CODE 4 -#define ELSE_CODE 5 -#define FONT_CODE 6 -#define FOR_CODE 7 -#define GIVE_CODE 8 -#define IF_CODE 9 -#define INVERSION_CODE 10 -#define JUMP_CODE 11 -#define MOVE_CODE 12 -#define NEW_LINE_CODE 13 -#define OBJECTLOOP_CODE 14 -#define PRINT_CODE 15 -#define PRINT_RET_CODE 16 -#define QUIT_CODE 17 -#define READ_CODE 18 -#define REMOVE_CODE 19 -#define RESTORE_CODE 20 -#define RETURN_CODE 21 -#define RFALSE_CODE 22 -#define RTRUE_CODE 23 -#define SAVE_CODE 24 -#define SPACES_CODE 25 -#define STRING_CODE 26 -#define STYLE_CODE 27 -#define SWITCH_CODE 28 -#define UNTIL_CODE 29 -#define WHILE_CODE 30 - -#define ASSIGNMENT_CODE 100 -#define FUNCTION_CODE 101 - -/* Index numbers into the keyword group "conditions" (see "lexer.c") */ - -#define HAS_COND 0 -#define HASNT_COND 1 -#define IN_COND 2 -#define NOTIN_COND 3 -#define OFCLASS_COND 4 -#define OR_COND 5 -#define PROVIDES_COND 6 - -/* Index numbers into the keyword group "segment_markers" (see "lexer.c") */ - -#define CLASS_SEGMENT 0 -#define HAS_SEGMENT 1 -#define PRIVATE_SEGMENT 2 -#define WITH_SEGMENT 3 - -/* Index numbers into the keyword group "misc_keywords" (see "lexer.c") */ - -#define CHAR_MK 0 -#define NAME_MK 1 -#define THE_MK 2 -#define A_MK 3 -#define AN_MK 4 -#define CAP_THE_MK 5 -#define NUMBER_MK 6 -#define ROMAN_MK 7 -#define REVERSE_MK 8 -#define BOLD_MK 9 -#define UNDERLINE_MK 10 -#define FIXED_MK 11 -#define ON_MK 12 -#define OFF_MK 13 -#define TO_MK 14 -#define ADDRESS_MK 15 -#define STRING_MK 16 -#define OBJECT_MK 17 -#define NEAR_MK 18 -#define FROM_MK 19 -#define PROPERTY_MK 20 -#define CAP_A_MK 21 - -/* Index numbers into the keyword group "directive_keywords" (see "lexer.c") */ - -#define ALIAS_DK 0 -#define LONG_DK 1 -#define ADDITIVE_DK 2 -#define SCORE_DK 3 -#define TIME_DK 4 -#define NOUN_DK 5 -#define HELD_DK 6 -#define MULTI_DK 7 -#define MULTIHELD_DK 8 -#define MULTIEXCEPT_DK 9 -#define MULTIINSIDE_DK 10 -#define CREATURE_DK 11 -#define SPECIAL_DK 12 -#define NUMBER_DK 13 -#define SCOPE_DK 14 -#define TOPIC_DK 15 -#define REVERSE_DK 16 -#define META_DK 17 -#define ONLY_DK 18 -#define REPLACE_DK 19 -#define FIRST_DK 20 -#define LAST_DK 21 -#define STRING_DK 22 -#define TABLE_DK 23 -#define BUFFER_DK 24 -#define DATA_DK 25 -#define INITIAL_DK 26 -#define INITSTR_DK 27 -#define WITH_DK 28 -#define PRIVATE_DK 29 -#define HAS_DK 30 -#define CLASS_DK 31 -#define ERROR_DK 32 -#define FATALERROR_DK 33 -#define WARNING_DK 34 -#define TERMINATING_DK 35 - -/* Index numbers into the keyword group "trace_keywords" (see "lexer.c") */ - -#define DICTIONARY_TK 0 -#define SYMBOLS_TK 1 -#define OBJECTS_TK 2 -#define VERBS_TK 3 -#define ASSEMBLY_TK 4 -#define EXPRESSIONS_TK 5 -#define LINES_TK 6 -#define TOKENS_TK 7 -#define LINKER_TK 8 -#define ON_TK 9 -#define OFF_TK 10 - -/* Index numbers into the keyword group "system_constants" (see "lexer.c") */ - -#define NO_SYSTEM_CONSTANTS 62 - -#define adjectives_table_SC 0 -#define actions_table_SC 1 -#define classes_table_SC 2 -#define identifiers_table_SC 3 -#define preactions_table_SC 4 -#define version_number_SC 5 -#define largest_object_SC 6 -#define strings_offset_SC 7 -#define code_offset_SC 8 -#define dict_par1_SC 9 -#define dict_par2_SC 10 -#define dict_par3_SC 11 -#define actual_largest_object_SC 12 -#define static_memory_offset_SC 13 -#define array_names_offset_SC 14 -#define readable_memory_offset_SC 15 -#define cpv__start_SC 16 -#define cpv__end_SC 17 -#define ipv__start_SC 18 -#define ipv__end_SC 19 -#define array__start_SC 20 -#define array__end_SC 21 - -#define lowest_attribute_number_SC 22 -#define highest_attribute_number_SC 23 -#define attribute_names_array_SC 24 - -#define lowest_property_number_SC 25 -#define highest_property_number_SC 26 -#define property_names_array_SC 27 - -#define lowest_action_number_SC 28 -#define highest_action_number_SC 29 -#define action_names_array_SC 30 - -#define lowest_fake_action_number_SC 31 -#define highest_fake_action_number_SC 32 -#define fake_action_names_array_SC 33 - -#define lowest_routine_number_SC 34 -#define highest_routine_number_SC 35 -#define routines_array_SC 36 -#define routine_names_array_SC 37 -#define routine_flags_array_SC 38 - -#define lowest_global_number_SC 39 -#define highest_global_number_SC 40 -#define globals_array_SC 41 -#define global_names_array_SC 42 -#define global_flags_array_SC 43 - -#define lowest_array_number_SC 44 -#define highest_array_number_SC 45 -#define arrays_array_SC 46 -#define array_names_array_SC 47 -#define array_flags_array_SC 48 - -#define lowest_constant_number_SC 49 -#define highest_constant_number_SC 50 -#define constants_array_SC 51 -#define constant_names_array_SC 52 - -#define lowest_class_number_SC 53 -#define highest_class_number_SC 54 -#define class_objects_array_SC 55 - -#define lowest_object_number_SC 56 -#define highest_object_number_SC 57 - -#define oddeven_packing_SC 58 - -#define grammar_table_SC 59 /* Glulx-only */ -#define dictionary_table_SC 60 /* Glulx-only */ -#define dynam_string_table_SC 61 /* Glulx-only */ - - -/* Index numbers into the keyword group "system_functions" (see "lexer.c") */ - -#define NUMBER_SYSTEM_FUNCTIONS 12 - -#define CHILD_SYSF 0 -#define CHILDREN_SYSF 1 -#define ELDER_SYSF 2 -#define ELDEST_SYSF 3 -#define INDIRECT_SYSF 4 -#define PARENT_SYSF 5 -#define RANDOM_SYSF 6 -#define SIBLING_SYSF 7 -#define YOUNGER_SYSF 8 -#define YOUNGEST_SYSF 9 -#define METACLASS_SYSF 10 -#define GLK_SYSF 11 /* Glulx-only */ - -/* Index numbers into the operators group "separators" (see "lexer.c") */ - -#define NUMBER_SEPARATORS 49 - -#define ARROW_SEP 0 -#define DARROW_SEP 1 -#define DEC_SEP 2 -#define MINUS_SEP 3 -#define INC_SEP 4 -#define PLUS_SEP 5 -#define TIMES_SEP 6 -#define DIVIDE_SEP 7 -#define REMAINDER_SEP 8 -#define LOGOR_SEP 9 -#define ARTOR_SEP 10 -#define LOGAND_SEP 11 -#define ARTAND_SEP 12 -#define LOGNOT_SEP 13 -#define NOTEQUAL_SEP 14 -#define ARTNOT_SEP 15 -#define CONDEQUALS_SEP 16 -#define SETEQUALS_SEP 17 -#define GE_SEP 18 -#define GREATER_SEP 19 -#define LE_SEP 20 -#define LESS_SEP 21 -#define OPENB_SEP 22 -#define CLOSEB_SEP 23 -#define COMMA_SEP 24 -#define PROPADD_SEP 25 -#define PROPNUM_SEP 26 -#define MPROPADD_SEP 27 -#define MPROPNUM_SEP 28 -#define MESSAGE_SEP 29 -#define PROPERTY_SEP 30 -#define SUPERCLASS_SEP 31 -#define COLON_SEP 32 -#define AT_SEP 33 -#define SEMICOLON_SEP 34 -#define OPEN_SQUARE_SEP 35 -#define CLOSE_SQUARE_SEP 36 -#define OPEN_BRACE_SEP 37 -#define CLOSE_BRACE_SEP 38 -#define DOLLAR_SEP 39 -#define NBRANCH_SEP 40 -#define BRANCH_SEP 41 -#define HASHADOLLAR_SEP 42 -#define HASHGDOLLAR_SEP 43 -#define HASHNDOLLAR_SEP 44 -#define HASHRDOLLAR_SEP 45 -#define HASHWDOLLAR_SEP 46 -#define HASHHASH_SEP 47 -#define HASH_SEP 48 - -#define UNARY_MINUS_SEP 100 -#define POST_INC_SEP 101 -#define POST_DEC_SEP 102 - -/* ------------------------------------------------------------------------- */ -/* Internal numbers used to refer to operators (in expressions) */ -/* (must correspond to entries in the operators table in "express.c") */ -/* ------------------------------------------------------------------------- */ - -#define NUM_OPERATORS 68 - -#define PRE_U 1 -#define IN_U 2 -#define POST_U 3 - -#define R_A 1 -#define L_A 2 - -#define COMMA_OP 0 -#define SETEQUALS_OP 1 -#define LOGAND_OP 2 -#define LOGOR_OP 3 -#define LOGNOT_OP 4 - -#define ZERO_OP 5 -#define NONZERO_OP 6 -#define CONDEQUALS_OP 7 -#define NOTEQUAL_OP 8 -#define GE_OP 9 -#define GREATER_OP 10 -#define LE_OP 11 -#define LESS_OP 12 -#define HAS_OP 13 -#define HASNT_OP 14 -#define IN_OP 15 -#define NOTIN_OP 16 -#define OFCLASS_OP 17 -#define PROVIDES_OP 18 -#define NOTOFCLASS_OP 19 -#define NOTPROVIDES_OP 20 -#define OR_OP 21 - -#define PLUS_OP 22 -#define MINUS_OP 23 -#define TIMES_OP 24 -#define DIVIDE_OP 25 -#define REMAINDER_OP 26 -#define ARTAND_OP 27 -#define ARTOR_OP 28 -#define ARTNOT_OP 29 -#define ARROW_OP 30 -#define DARROW_OP 31 -#define UNARY_MINUS_OP 32 -#define INC_OP 33 -#define POST_INC_OP 34 -#define DEC_OP 35 -#define POST_DEC_OP 36 -#define PROP_ADD_OP 37 -#define PROP_NUM_OP 38 -#define MPROP_ADD_OP 39 -#define MPROP_NUM_OP 40 -#define FCALL_OP 41 -#define MESSAGE_OP 42 -#define PROPERTY_OP 43 -#define SUPERCLASS_OP 44 - -#define ARROW_SETEQUALS_OP 45 -#define DARROW_SETEQUALS_OP 46 -#define MESSAGE_SETEQUALS_OP 47 -#define PROPERTY_SETEQUALS_OP 48 - -#define ARROW_INC_OP 49 -#define DARROW_INC_OP 50 -#define MESSAGE_INC_OP 51 -#define PROPERTY_INC_OP 52 - -#define ARROW_DEC_OP 53 -#define DARROW_DEC_OP 54 -#define MESSAGE_DEC_OP 55 -#define PROPERTY_DEC_OP 56 - -#define ARROW_POST_INC_OP 57 -#define DARROW_POST_INC_OP 58 -#define MESSAGE_POST_INC_OP 59 -#define PROPERTY_POST_INC_OP 60 - -#define ARROW_POST_DEC_OP 61 -#define DARROW_POST_DEC_OP 62 -#define MESSAGE_POST_DEC_OP 63 -#define PROPERTY_POST_DEC_OP 64 - -#define PROP_CALL_OP 65 -#define MESSAGE_CALL_OP 66 - -#define PUSH_OP 67 /* Glulx only */ - -/* ------------------------------------------------------------------------- */ -/* The five types of compiled array */ -/* ------------------------------------------------------------------------- */ - -#define BYTE_ARRAY 0 -#define WORD_ARRAY 1 -#define STRING_ARRAY 2 -#define TABLE_ARRAY 3 -#define BUFFER_ARRAY 4 - -/* ------------------------------------------------------------------------- */ -/* Internal numbers used to refer to veneer routines */ -/* (must correspond to entries in the table in "veneer.c") */ -/* ------------------------------------------------------------------------- */ - -#define VENEER_ROUTINES 48 - -#define Box__Routine_VR 0 - -#define R_Process_VR 1 -#define DefArt_VR 2 -#define InDefArt_VR 3 -#define CDefArt_VR 4 -#define CInDefArt_VR 5 -#define PrintShortName_VR 6 -#define EnglishNumber_VR 7 -#define Print__Pname_VR 8 - -#define WV__Pr_VR 9 -#define RV__Pr_VR 10 -#define CA__Pr_VR 11 -#define IB__Pr_VR 12 -#define IA__Pr_VR 13 -#define DB__Pr_VR 14 -#define DA__Pr_VR 15 -#define RA__Pr_VR 16 -#define RL__Pr_VR 17 -#define RA__Sc_VR 18 -#define OP__Pr_VR 19 -#define OC__Cl_VR 20 - -#define Copy__Primitive_VR 21 -#define RT__Err_VR 22 -#define Z__Region_VR 23 -#define Unsigned__Compare_VR 24 -#define Metaclass_VR 25 -#define CP__Tab_VR 26 -#define Cl__Ms_VR 27 -#define RT__ChT_VR 28 -#define RT__ChR_VR 29 -#define RT__ChG_VR 30 -#define RT__ChGt_VR 31 -#define RT__ChPS_VR 32 -#define RT__ChPR_VR 33 -#define RT__TrPS_VR 34 -#define RT__ChLDB_VR 35 -#define RT__ChLDW_VR 36 -#define RT__ChSTB_VR 37 -#define RT__ChSTW_VR 38 -#define RT__ChPrintC_VR 39 -#define RT__ChPrintA_VR 40 -#define RT__ChPrintS_VR 41 -#define RT__ChPrintO_VR 42 - -/* Glulx-only veneer routines */ -#define OB__Move_VR 43 -#define OB__Remove_VR 44 -#define Print__Addr_VR 45 -#define Glk__Wrap_VR 46 -#define Dynam__String_VR 47 - -/* ------------------------------------------------------------------------- */ -/* Run-time-error numbers (must correspond with RT__Err code in veneer) */ -/* ------------------------------------------------------------------------- */ - -#define IN_RTE 2 -#define HAS_RTE 3 -#define PARENT_RTE 4 -#define ELDEST_RTE 5 -#define CHILD_RTE 6 -#define YOUNGER_RTE 7 -#define SIBLING_RTE 8 -#define CHILDREN_RTE 9 -#define YOUNGEST_RTE 10 -#define ELDER_RTE 11 -#define OBJECTLOOP_RTE 12 -#define OBJECTLOOP2_RTE 13 -#define GIVE_RTE 14 -#define REMOVE_RTE 15 -#define MOVE1_RTE 16 -#define MOVE2_RTE 17 -/* 18 = creating a loop in object tree */ -/* 19 = giving a non-existent attribute */ -#define DBYZERO_RTE 20 -#define PROP_ADD_RTE 21 -#define PROP_NUM_RTE 22 -#define PROPERTY_RTE 23 -/* 24 = reading with -> out of range */ -/* 25 = reading with --> out of range */ -/* 26 = writing with -> out of range */ -/* 27 = writing with --> out of range */ -#define ABOUNDS_RTE 28 -/* similarly 29, 30, 31 */ -#define OBJECTLOOP_BROKEN_RTE 32 -/* 33 = print (char) out of range */ -/* 34 = print (address) out of range */ -/* 35 = print (string) out of range */ -/* 36 = print (object) out of range */ - -/* ------------------------------------------------------------------------- */ -/* Z-region areas (used to refer to module positions in markers) */ -/* ------------------------------------------------------------------------- */ - -#define LOW_STRINGS_ZA 1 -#define PROP_DEFAULTS_ZA 2 -#define OBJECT_TREE_ZA 3 -#define PROP_ZA 4 -#define CLASS_NUMBERS_ZA 5 -#define INDIVIDUAL_PROP_ZA 6 -#define DYNAMIC_ARRAY_ZA 7 /* Z-code only */ -#define GRAMMAR_ZA 8 -#define ACTIONS_ZA 9 -#define PREACTIONS_ZA 10 -#define ADJECTIVES_ZA 11 -#define DICTIONARY_ZA 12 -#define ZCODE_ZA 13 -#define STATIC_STRINGS_ZA 14 -#define LINK_DATA_ZA 15 - -#define SYMBOLS_ZA 16 - -#define ARRAY_ZA 17 /* Glulx only */ -#define GLOBALVAR_ZA 18 /* Glulx only */ - -/* ------------------------------------------------------------------------- */ -/* "Marker values", used for backpatching and linkage */ -/* ------------------------------------------------------------------------- */ - -#define NULL_MV 0 /* Null */ - -/* Marker values used in backpatch areas: */ - -#define DWORD_MV 1 /* Dictionary word address */ -#define STRING_MV 2 /* Static string */ -#define INCON_MV 3 /* "Hardware" constant (table address) */ -#define IROUTINE_MV 4 /* Call to internal routine */ -#define VROUTINE_MV 5 /* Call to veneer routine */ -#define ARRAY_MV 6 /* Ref to internal array address */ -#define NO_OBJS_MV 7 /* Ref to number of game objects */ -#define INHERIT_MV 8 /* Inherited property value */ -#define INHERIT_INDIV_MV 9 /* Inherited indiv property value */ -#define MAIN_MV 10 /* "Main" routine */ -#define SYMBOL_MV 11 /* Forward ref to unassigned symbol */ - -/* Additional marker values used in module backpatch areas: */ -/* (In Glulx, OBJECT_MV and VARIABLE_MV are used in backpatching, even - without modules.) */ - -#define VARIABLE_MV 12 /* Global variable */ -#define IDENT_MV 13 /* Property identifier number */ -#define INDIVPT_MV 14 /* Individual prop table address */ -#define ACTION_MV 15 /* Action number */ -#define OBJECT_MV 16 /* Ref to internal object number */ - -#define LARGEST_BPATCH_MV 16 /* Larger marker values are never written - to backpatch tables */ - -/* Value indicating an imported symbol record: */ - -#define IMPORT_MV 32 - -/* Values indicating an exported symbol record: */ - -#define EXPORT_MV 33 /* Defined ordinarily */ -#define EXPORTSF_MV 34 /* Defined in a system file */ -#define EXPORTAC_MV 35 /* Action name */ - -/* Values used only in branch backpatching: */ -/* ###-I've rearranged these, so that BRANCH_MV can be last; Glulx uses the - whole range from BRANCH_MV to BRANCHMAX_MV. */ - -#define LABEL_MV 36 /* Ditto: marks "jump" operands */ -#define DELETED_MV 37 /* Ditto: marks bytes deleted from code */ -#define BRANCH_MV 38 /* Used in "asm.c" for routine coding */ -#define BRANCHMAX_MV 58 /* In fact, the range BRANCH_MV to - BRANCHMAX_MV all means the same thing. - The position within the range means - how far back from the label to go - to find the opmode byte to modify. */ - -/* ========================================================================= */ -/* Initialisation extern definitions */ -/* */ -/* Note that each subsystem in Inform provides four routines to keep */ -/* track of variables and data structures: */ -/* */ -/* init_*_vars should set variables to initial values (they must */ -/* not be initialised directly in their declarations */ -/* as Inform may need to compile several times in a */ -/* row) */ -/* */ -/* *_begin_pass any variable/array initialisation that needs to */ -/* happen at the start of the pass through the source */ -/* */ -/* *_allocate_arrays should use my_malloc/my_calloc (see memory.c) */ -/* to allocate any arrays or workspace needed */ -/* */ -/* *_free_arrays should use my_free to free all memory allocated */ -/* (with one exception in "text.c") */ -/* */ -/* ========================================================================= */ - - /* > READ INFORM SOURCE */ - - /* My Source Book */ - -extern void init_arrays_vars(void); /* arrays: construct tableaux */ -extern void init_asm_vars(void); /* asm: assemble even rare or v6 codes */ -extern void init_bpatch_vars(void); /* bpatch: backpatches code */ -extern void init_chars_vars(void); /* chars: translate character sets */ -extern void init_directs_vars(void); /* directs: ponder directives */ -extern void init_errors_vars(void); /* errors: issue diagnostics */ -extern void init_expressc_vars(void); /* expressc: compile expressions */ -extern void init_expressp_vars(void); /* expressp: parse expressions */ -extern void init_files_vars(void); /* files: handle files */ - /* void init_vars(void); inform: decide what to do */ -extern void init_lexer_vars(void); /* lexer: lexically analyse source */ -extern void init_linker_vars(void); /* linker: link in pre-compiled module */ -extern void init_memory_vars(void); /* memory: manage memory settings */ -extern void init_objects_vars(void); /* objects: cultivate object tree */ -extern void init_states_vars(void); /* states: translate statements to code*/ -extern void init_symbols_vars(void); /* symbols: construct symbols table */ -extern void init_syntax_vars(void); /* syntax: parse the program */ -extern void init_tables_vars(void); /* tables: glue tables into the output */ -extern void init_text_vars(void); /* text: encode text and dictionary */ -extern void init_veneer_vars(void); /* veneer: compile a layer of code */ -extern void init_verbs_vars(void); /* verbs: lay out grammar */ - -extern void files_begin_prepass(void); /* These routines initialise just */ -extern void lexer_begin_prepass(void); /* enough to begin loading source */ - -extern void arrays_begin_pass(void); -extern void asm_begin_pass(void); -extern void bpatch_begin_pass(void); -extern void chars_begin_pass(void); -extern void directs_begin_pass(void); -extern void errors_begin_pass(void); -extern void expressc_begin_pass(void); -extern void expressp_begin_pass(void); -extern void files_begin_pass(void); - /* void begin_pass(void); */ -extern void lexer_begin_pass(void); -extern void linker_begin_pass(void); -extern void memory_begin_pass(void); -extern void objects_begin_pass(void); -extern void states_begin_pass(void); -extern void symbols_begin_pass(void); -extern void syntax_begin_pass(void); -extern void tables_begin_pass(void); -extern void text_begin_pass(void); -extern void veneer_begin_pass(void); -extern void verbs_begin_pass(void); - -extern void lexer_endpass(void); -extern void linker_endpass(void); - -extern void arrays_allocate_arrays(void); -extern void asm_allocate_arrays(void); -extern void bpatch_allocate_arrays(void); -extern void chars_allocate_arrays(void); -extern void directs_allocate_arrays(void); -extern void errors_allocate_arrays(void); -extern void expressc_allocate_arrays(void); -extern void expressp_allocate_arrays(void); -extern void files_allocate_arrays(void); - /* void allocate_arrays(void); */ -extern void lexer_allocate_arrays(void); -extern void linker_allocate_arrays(void); -extern void memory_allocate_arrays(void); -extern void objects_allocate_arrays(void); -extern void states_allocate_arrays(void); -extern void symbols_allocate_arrays(void); -extern void syntax_allocate_arrays(void); -extern void tables_allocate_arrays(void); -extern void text_allocate_arrays(void); -extern void veneer_allocate_arrays(void); -extern void verbs_allocate_arrays(void); - -extern void arrays_free_arrays(void); -extern void asm_free_arrays(void); -extern void bpatch_free_arrays(void); -extern void chars_free_arrays(void); -extern void directs_free_arrays(void); -extern void errors_free_arrays(void); -extern void expressc_free_arrays(void); -extern void expressp_free_arrays(void); -extern void files_free_arrays(void); - /* void free_arrays(void); */ -extern void lexer_free_arrays(void); -extern void linker_free_arrays(void); -extern void memory_free_arrays(void); -extern void objects_free_arrays(void); -extern void states_free_arrays(void); -extern void symbols_free_arrays(void); -extern void syntax_free_arrays(void); -extern void tables_free_arrays(void); -extern void text_free_arrays(void); -extern void veneer_free_arrays(void); -extern void verbs_free_arrays(void); - -/* ========================================================================= */ -/* Remaining extern definitions are given by file in alphabetical order */ -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "arrays" */ -/* ------------------------------------------------------------------------- */ - -extern int no_globals, no_arrays; -extern int dynamic_array_area_size; -extern int *dynamic_array_area; -extern int32 *global_initial_value; -extern int32 *array_symbols; -extern int *array_sizes, *array_types; - -extern void make_global(int array_flag, int name_only); -extern void set_variable_value(int i, int32 v); -extern void check_globals(void); -extern int32 begin_table_array(void); -extern int32 begin_word_array(void); -extern void array_entry(int32 i, assembly_operand VAL); -extern void finish_array(int32 i); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "asm" */ -/* ------------------------------------------------------------------------- */ - -extern memory_block zcode_area; -extern int32 zmachine_pc; - -extern int32 no_instructions; -extern int sequence_point_follows; -extern int uses_unicode_features, uses_memheap_features, - uses_acceleration_features, uses_float_features; -extern debug_location statement_debug_location; -extern int execution_never_reaches_here; -extern int *variable_usage; -extern int next_label, no_sequence_points; -extern int32 *variable_tokens; -extern assembly_instruction AI; -extern int32 *named_routine_symbols; - -extern void print_operand(assembly_operand o); -extern char *variable_name(int32 i); -extern void set_constant_ot(assembly_operand *AO); -extern int is_constant_ot(int otval); -extern int is_variable_ot(int otval); -extern void assemblez_instruction(assembly_instruction *a); -extern void assembleg_instruction(assembly_instruction *a); -extern void assemble_label_no(int n); -extern void assemble_jump(int n); -extern void define_symbol_label(int symbol); -extern int32 assemble_routine_header(int no_locals, int debug_flag, - char *name, int embedded_flag, int the_symbol); -extern void assemble_routine_end(int embedded_flag, debug_locations locations); - -extern void assemblez_0(int internal_number); -extern void assemblez_0_to(int internal_number, assembly_operand o1); -extern void assemblez_0_branch(int internal_number, int label, int flag); -extern void assemblez_1(int internal_number, assembly_operand o1); -extern void assemblez_1_to(int internal_number, - assembly_operand o1, assembly_operand st); -extern void assemblez_1_branch(int internal_number, - assembly_operand o1, int label, int flag); -extern void assemblez_objcode(int internal_number, - assembly_operand o1, assembly_operand st, - int label, int flag); -extern void assemblez_2(int internal_number, - assembly_operand o1, assembly_operand o2); -extern void assemblez_2_to(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand st); -extern void assemblez_2_branch(int internal_number, - assembly_operand o1, assembly_operand o2, - int label, int flag); -extern void assemblez_3(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3); -extern void assemblez_3_branch(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, int label, int flag); -extern void assemblez_3_to(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand st); -extern void assemblez_4(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand o4); -extern void assemblez_5(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand o4, - assembly_operand o5); -extern void assemblez_6(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand o4, - assembly_operand o5, assembly_operand o6); -extern void assemblez_4_branch(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand o4, - int label, int flag); -extern void assemblez_4_to(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand o4, - assembly_operand st); -extern void assemblez_5_to(int internal_number, - assembly_operand o1, assembly_operand o2, - assembly_operand o3, assembly_operand o4, - assembly_operand o5, assembly_operand st); - -extern void assemblez_inc(assembly_operand o1); -extern void assemblez_dec(assembly_operand o1); -extern void assemblez_store(assembly_operand o1, assembly_operand o2); -extern void assemblez_jump(int n); - -extern void assembleg_0(int internal_number); -extern void assembleg_1(int internal_number, assembly_operand o1); -extern void assembleg_2(int internal_number, assembly_operand o1, - assembly_operand o2); -extern void assembleg_3(int internal_number, assembly_operand o1, - assembly_operand o2, assembly_operand o3); -extern void assembleg_4(int internal_number, assembly_operand o1, - assembly_operand o2, assembly_operand o3, assembly_operand o4); -extern void assembleg_5(int internal_number, assembly_operand o1, - assembly_operand o2, assembly_operand o3, assembly_operand o4, - assembly_operand o5); -extern void assembleg_0_branch(int internal_number, - int label); -extern void assembleg_1_branch(int internal_number, - assembly_operand o1, int label); -extern void assembleg_2_branch(int internal_number, - assembly_operand o1, assembly_operand o2, int label); -extern void assembleg_call_1(assembly_operand oaddr, assembly_operand o1, - assembly_operand odest); -extern void assembleg_call_2(assembly_operand oaddr, assembly_operand o1, - assembly_operand o2, assembly_operand odest); -extern void assembleg_call_3(assembly_operand oaddr, assembly_operand o1, - assembly_operand o2, assembly_operand o3, assembly_operand odest); -extern void assembleg_inc(assembly_operand o1); -extern void assembleg_dec(assembly_operand o1); -extern void assembleg_store(assembly_operand o1, assembly_operand o2); -extern void assembleg_jump(int n); - -extern void parse_assembly(void); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "bpatch" */ -/* ------------------------------------------------------------------------- */ - -extern memory_block zcode_backpatch_table, zmachine_backpatch_table; -extern int32 zcode_backpatch_size, zmachine_backpatch_size; -extern int backpatch_marker, backpatch_error_flag; - -extern int32 backpatch_value(int32 value); -extern void backpatch_zmachine_image_z(void); -extern void backpatch_zmachine_image_g(void); -extern void backpatch_zmachine(int mv, int zmachine_area, int32 offset); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "chars" */ -/* ------------------------------------------------------------------------- */ - -extern uchar source_to_iso_grid[]; -extern int32 iso_to_unicode_grid[]; -extern int character_digit_value[]; -extern uchar alphabet[3][27]; -extern int alphabet_modified; -extern int zscii_defn_modified; -extern int zscii_high_water_mark; -extern char alphabet_used[]; -extern int iso_to_alphabet_grid[]; -extern int zscii_to_alphabet_grid[]; -extern int textual_form_length; - -extern int iso_to_unicode(int iso); -extern int unicode_to_zscii(int32 u); -extern int32 zscii_to_unicode(int z); -extern int32 text_to_unicode(char *text); -extern void zscii_to_text(char *text, int zscii); -extern char *name_of_iso_set(int s); -extern void change_character_set(void); -extern void new_alphabet(char *text, int alphabet); -extern void new_zscii_character(int32 unicode, int plus_flag); -extern void new_zscii_finished(void); -extern void map_new_zchar(int32 unicode); -extern void make_lower_case(char *str); -extern void make_upper_case(char *str); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "directs" */ -/* ------------------------------------------------------------------------- */ - -extern brief_location routine_starts_line; - -extern int no_routines, no_named_routines, no_locals, no_termcs; -extern int terminating_characters[]; - -extern int parse_given_directive(int internal_flag); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "errors" */ -/* ------------------------------------------------------------------------- */ - -extern char *forerrors_buff; -extern int forerrors_pointer; -extern int no_errors, no_warnings, no_suppressed_warnings, - no_link_errors, no_compiler_errors; - -extern ErrorPosition ErrorReport; - -extern void fatalerror(char *s) NORETURN; -extern void fatalerror_named(char *s1, char *s2) NORETURN; -extern void memory_out_error(int32 size, int32 howmany, char *name) NORETURN; -extern void memoryerror(char *s, int32 size) NORETURN; -extern void error(char *s); -extern void error_named(char *s1, char *s2); -extern void error_numbered(char *s1, int val); -extern void error_named_at(char *s1, char *s2, brief_location report_line); -extern void ebf_error(char *s1, char *s2); -extern void char_error(char *s, int ch); -extern void unicode_char_error(char *s, int32 uni); -extern void no_such_label(char *lname); -extern void warning(char *s); -extern void warning_numbered(char *s1, int val); -extern void warning_named(char *s1, char *s2); -extern void dbnu_warning(char *type, char *name, brief_location report_line); -extern void uncalled_routine_warning(char *type, char *name, brief_location report_line); -extern void obsolete_warning(char *s1); -extern void link_error(char *s); -extern void link_error_named(char *s1, char *s2); -extern int compiler_error(char *s); -extern int compiler_error_named(char *s1, char *s2); -extern void print_sorry_message(void); - -#ifdef ARC_THROWBACK -extern int throwback_switch; - -extern void throwback(int severity, char * error); -extern void throwback_start(void); -extern void throwback_end(void); -#endif - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "expressc" */ -/* ------------------------------------------------------------------------- */ - -extern int vivc_flag; -extern operator operators[]; - -extern assembly_operand stack_pointer, temp_var1, temp_var2, temp_var3, - temp_var4, zero_operand, one_operand, two_operand, three_operand, - four_operand, valueless_operand; - -assembly_operand code_generate(assembly_operand AO, int context, int label); -assembly_operand check_nonzero_at_runtime(assembly_operand AO1, int label, - int rte_number); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "expressp" */ -/* ------------------------------------------------------------------------- */ - -extern int system_function_usage[]; -extern expression_tree_node *ET; - -extern int z_system_constant_list[]; -extern int glulx_system_constant_list[]; - -extern int32 value_of_system_constant(int t); -extern void clear_expression_space(void); -extern void show_tree(assembly_operand AO, int annotate); -extern assembly_operand parse_expression(int context); -extern int test_for_incdec(assembly_operand AO); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "files" */ -/* ------------------------------------------------------------------------- */ - -extern int total_files; -extern int current_input_file; -extern int total_input_files; -extern FileId *InputFiles; - -extern FILE *Temp1_fp, *Temp2_fp, *Temp3_fp; -extern char Temp1_Name[], Temp2_Name[], Temp3_Name[]; -extern int32 total_chars_read; - -extern void open_temporary_files(void); -extern void check_temp_files(void); -extern void remove_temp_files(void); - -extern void open_transcript_file(char *what_of); -extern void write_to_transcript_file(char *text); -extern void close_transcript_file(void); -extern void abort_transcript_file(void); - -extern void nullify_debug_file_position(maybe_file_position *position); - -extern void begin_debug_file(void); - -extern void debug_file_printf(const char*format, ...); -extern void debug_file_print_with_entities(const char*string); -extern void debug_file_print_base_64_triple - (uchar first, uchar second, uchar third); -extern void debug_file_print_base_64_pair(uchar first, uchar second); -extern void debug_file_print_base_64_single(uchar first); - -extern void write_debug_location(debug_location location); -extern void write_debug_locations(debug_locations locations); -extern void write_debug_optional_identifier(int32 symbol_index); -extern void write_debug_symbol_backpatch(int32 symbol_index); -extern void write_debug_symbol_optional_backpatch(int32 symbol_index); -extern void write_debug_object_backpatch(int32 object_number); -extern void write_debug_packed_code_backpatch(int32 offset); -extern void write_debug_code_backpatch(int32 offset); -extern void write_debug_global_backpatch(int32 offset); -extern void write_debug_array_backpatch(int32 offset); -extern void write_debug_grammar_backpatch(int32 offset); - -extern void begin_writing_debug_sections(void); -extern void write_debug_section(const char*name, int32 beginning_address); -extern void end_writing_debug_sections(int32 end_address); - -extern void write_debug_undef(int32 symbol_index); - -extern void end_debug_file(void); - -extern void add_to_checksum(void *address); - -extern void load_sourcefile(char *story_name, int style); -extern int file_load_chars(int file_number, char *buffer, int length); -extern void close_all_source(void); -extern int register_orig_sourcefile(char *filename); - -extern void output_file(void); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "inform" */ -/* ------------------------------------------------------------------------- */ - -extern char Code_Name[]; -extern int endofpass_flag; - -extern int version_number, instruction_set_number, extend_memory_map; -extern int32 scale_factor, length_scale_factor; - -extern int WORDSIZE, INDIV_PROP_START, - OBJECT_BYTE_LENGTH, DICT_ENTRY_BYTE_LENGTH, DICT_ENTRY_FLAG_POS; -extern int32 MAXINTWORD; - -extern int asm_trace_level, line_trace_level, expr_trace_level, - linker_trace_level, tokens_trace_level; - -extern int - bothpasses_switch, concise_switch, - economy_switch, frequencies_switch, - ignore_switches_switch, listobjects_switch, debugfile_switch, - listing_switch, memout_switch, printprops_switch, - offsets_switch, percentages_switch, obsolete_switch, - transcript_switch, statistics_switch, optimise_switch, - version_set_switch, nowarnings_switch, hash_switch, - memory_map_switch, module_switch, temporary_files_switch, - define_DEBUG_switch, define_USE_MODULES_switch, define_INFIX_switch, - runtime_error_checking_switch; - -extern int oddeven_packing_switch; - -extern int glulx_mode, compression_switch; -extern int32 requested_glulx_version; - -extern int error_format, store_the_text, asm_trace_setting, - double_space_setting, trace_fns_setting, character_set_setting, - character_set_unicode; - -extern char Debugging_Name[]; -extern char Transcript_Name[]; -extern char Language_Name[]; -extern char Charset_Map[]; - -extern char banner_line[]; - -extern void select_version(int vn); -extern void switches(char *, int); -extern int translate_in_filename(int last_value, char *new_name, char *old_name, - int same_directory_flag, int command_line_flag); -extern void translate_out_filename(char *new_name, char *old_name); -extern int translate_link_filename(int last_value, - char *new_name, char *old_name); -extern void translate_temp_filename(int i); - -#ifdef ARCHIMEDES -extern char *riscos_file_type(void); -#endif - -/* For the benefit of the MAC_FACE port these are declared extern, though - unused outside "inform" in the compiler itself */ - -extern void allocate_arrays(void); -extern void free_arrays(void); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "lexer" */ -/* ------------------------------------------------------------------------- */ - -extern int hash_printed_since_newline; -extern int total_source_line_count; -extern int dont_enter_into_symbol_table; -extern int return_sp_as_variable; -extern int next_token_begins_syntax_line; -extern char **local_variable_texts; - -extern int32 token_value; -extern int token_type; -extern char *token_text; - -extern debug_location get_token_location(void); -extern debug_locations get_token_locations(void); -extern debug_location_beginning get_token_location_beginning(void); -extern void discard_token_location(debug_location_beginning beginning); -extern debug_locations get_token_location_end(debug_location_beginning beginning); - -extern void describe_token(token_data t); - -extern void construct_local_variable_tables(void); -extern void declare_systemfile(void); -extern int is_systemfile(void); -extern void report_errors_at_current_line(void); -extern debug_location get_current_debug_location(void); -extern debug_location get_error_report_debug_location(void); -extern int32 get_current_line_start(void); -extern void set_origsource_location(char *source, int32 line, int32 charnum); -extern brief_location get_brief_location(ErrorPosition *errpos); -extern void export_brief_location(brief_location loc, ErrorPosition *errpos); -extern brief_location blank_brief_location; - -extern void put_token_back(void); -extern void get_next_token(void); -extern void restart_lexer(char *lexical_source, char *name); - -extern keyword_group directives, statements, segment_markers, - conditions, system_functions, local_variables, opcode_names, - misc_keywords, directive_keywords, trace_keywords, system_constants, - opcode_macros; - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "linker" */ -/* ------------------------------------------------------------------------- */ - -extern memory_block link_data_area; -extern int32 link_data_size; -extern char current_module_filename[]; - -extern char *describe_mv(int mval); -extern void write_link_marker(int zmachine_area, int32 offset, - assembly_operand op); -extern void flush_link_data(void); -extern void import_symbol(int32 symbol_number); -extern void export_symbol(int32 symbol_number); -extern void export_symbol_name(int32 i); -extern void link_module(char *filename); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "memory" */ -/* ------------------------------------------------------------------------- */ - -extern int32 malloced_bytes; - -extern int MAX_QTEXT_SIZE, MAX_SYMBOLS, HASH_TAB_SIZE, MAX_DICT_ENTRIES, - MAX_OBJECTS, MAX_ACTIONS, MAX_ADJECTIVES, MAX_ABBREVS, - MAX_STATIC_DATA, MAX_PROP_TABLE_SIZE, SYMBOLS_CHUNK_SIZE, - MAX_EXPRESSION_NODES, MAX_LABELS, MAX_LINESPACE, - MAX_LOW_STRINGS, MAX_CLASSES, MAX_VERBS, - MAX_VERBSPACE, MAX_ARRAYS, MAX_INCLUSION_DEPTH, - MAX_SOURCE_FILES; - -extern int32 MAX_STATIC_STRINGS, MAX_ZCODE_SIZE, MAX_LINK_DATA_SIZE, - MAX_TRANSCRIPT_SIZE, MAX_INDIV_PROP_TABLE_SIZE, - MAX_NUM_STATIC_STRINGS, MAX_UNICODE_CHARS, - MAX_STACK_SIZE, MEMORY_MAP_EXTENSION; - -extern int32 MAX_OBJ_PROP_COUNT, MAX_OBJ_PROP_TABLE_SIZE; -extern int MAX_LOCAL_VARIABLES, MAX_GLOBAL_VARIABLES; -extern int DICT_WORD_SIZE, DICT_CHAR_SIZE, DICT_WORD_BYTES; -extern int ZCODE_HEADER_EXT_WORDS, ZCODE_HEADER_FLAGS_3; -extern int NUM_ATTR_BYTES, GLULX_OBJECT_EXT_BYTES; -extern int WARN_UNUSED_ROUTINES, OMIT_UNUSED_ROUTINES; - -/* These macros define offsets that depend on the value of NUM_ATTR_BYTES. - (Meaningful only for Glulx.) */ -/* GOBJFIELD: word offsets of various elements in the object structure. */ -#define GOBJFIELD_CHAIN() (1+((NUM_ATTR_BYTES)/4)) -#define GOBJFIELD_NAME() (2+((NUM_ATTR_BYTES)/4)) -#define GOBJFIELD_PROPTAB() (3+((NUM_ATTR_BYTES)/4)) -#define GOBJFIELD_PARENT() (4+((NUM_ATTR_BYTES)/4)) -#define GOBJFIELD_SIBLING() (5+((NUM_ATTR_BYTES)/4)) -#define GOBJFIELD_CHILD() (6+((NUM_ATTR_BYTES)/4)) - -extern void *my_malloc(int32 size, char *whatfor); -extern void my_realloc(void *pointer, int32 oldsize, int32 size, - char *whatfor); -extern void *my_calloc(int32 size, int32 howmany, char *whatfor); -extern void my_recalloc(void *pointer, int32 size, int32 oldhowmany, - int32 howmany, char *whatfor); -extern void my_free(void *pointer, char *whatitwas); - -extern void set_memory_sizes(int size_flag); -extern void adjust_memory_sizes(void); -extern void memory_command(char *command); -extern void print_memory_usage(void); - -extern void initialise_memory_block(memory_block *MB); -extern void deallocate_memory_block(memory_block *MB); -extern int read_byte_from_memory_block(memory_block *MB, int32 index); -extern void write_byte_to_memory_block(memory_block *MB, - int32 index, int value); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "objects" */ -/* ------------------------------------------------------------------------- */ - -extern int no_attributes, no_properties; -extern int no_individual_properties; -extern int individuals_length; -extern uchar *individuals_table; -extern int no_classes, no_objects; -extern objecttz *objectsz; -extern objecttg *objectsg; -extern uchar *objectatts; -extern int *class_object_numbers; -extern int32 *class_begins_at; - -extern int32 *prop_default_value; -extern int *prop_is_long; -extern int *prop_is_additive; -extern char *properties_table; -extern int properties_table_size; - -extern void make_attribute(void); -extern void make_property(void); -extern void make_object(int nearby_flag, - char *textual_name, int specified_parent, int specified_class, - int instance_of); -extern void make_class(char *metaclass_name); -extern int object_provides(int obj, int id); -extern void list_object_tree(void); -extern void write_the_identifier_names(void); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "symbols" */ -/* ------------------------------------------------------------------------- */ - -extern int no_named_constants; -extern int no_symbols; -extern int32 **symbs; -extern int32 *svals; -extern int *smarks; -extern brief_location *slines; -extern int *sflags; -#ifdef VAX - extern char *stypes; -#else - extern signed char *stypes; -#endif -extern maybe_file_position *symbol_debug_backpatch_positions; -extern maybe_file_position *replacement_debug_backpatch_positions; -extern int32 *individual_name_strings; -extern int32 *attribute_name_strings; -extern int32 *action_name_strings; -extern int32 *array_name_strings; -extern int track_unused_routines; -extern int df_dont_note_global_symbols; -extern uint32 df_total_size_before_stripping; -extern uint32 df_total_size_after_stripping; - -extern char *typename(int type); -extern int hash_code_from_string(char *p); -extern int strcmpcis(char *p, char *q); -extern int symbol_index(char *lexeme_text, int hashcode); -extern void end_symbol_scope(int k); -extern void describe_symbol(int k); -extern void list_symbols(int level); -extern void assign_marked_symbol(int index, int marker, int32 value, int type); -extern void assign_symbol(int index, int32 value, int type); -extern void issue_unused_warnings(void); -extern void add_symbol_replacement_mapping(int original, int renamed); -extern int find_symbol_replacement(int *value); -extern void df_note_function_start(char *name, uint32 address, - int embedded_flag, brief_location source_line); -extern void df_note_function_end(uint32 endaddress); -extern void df_note_function_symbol(int symbol); -extern void locate_dead_functions(void); -extern uint32 df_stripped_address_for_address(uint32); -extern uint32 df_stripped_offset_for_code_offset(uint32, int *); -extern void df_prepare_function_iterate(void); -extern uint32 df_next_function_iterate(int *); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "syntax" */ -/* ------------------------------------------------------------------------- */ - -extern int no_syntax_lines; - -extern void panic_mode_error_recovery(void); -extern void get_next_token_with_directives(void); -extern int parse_directive(int internal_flag); -extern void parse_program(char *source); -extern int32 parse_routine(char *source, int embedded_flag, char *name, - int veneer_flag, int r_symbol); -extern void parse_code_block(int break_label, int continue_label, - int switch_rule); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "states" */ -/* ------------------------------------------------------------------------- */ - -extern void match_close_bracket(void); -extern void parse_statement(int break_label, int continue_label); -extern int parse_label(void); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "tables" */ -/* ------------------------------------------------------------------------- */ - -extern uchar *zmachine_paged_memory; -extern int32 - code_offset, actions_offset, preactions_offset, - dictionary_offset, strings_offset, adjectives_offset, - variables_offset, class_numbers_offset, individuals_offset, - identifier_names_offset, prop_defaults_offset, prop_values_offset, - static_memory_offset, array_names_offset, attribute_names_offset, - action_names_offset, fake_action_names_offset, - routine_names_offset, routines_array_offset, routine_flags_array_offset, - global_names_offset, global_flags_array_offset, - array_flags_array_offset, constant_names_offset, constants_array_offset; -extern int32 - arrays_offset, object_tree_offset, grammar_table_offset, - abbreviations_offset; /* For Glulx */ - -extern int32 Out_Size, Write_Code_At, Write_Strings_At; -extern int32 RAM_Size, Write_RAM_At; /* For Glulx */ - -extern int release_number, statusline_flag; -extern int flags2_requirements[]; -extern int serial_code_given_in_program; -extern char serial_code_buffer[]; - -extern void construct_storyfile(void); -extern void write_serial_number(char *buffer); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "text" */ -/* ------------------------------------------------------------------------- */ - -extern uchar *low_strings, *low_strings_top; -extern char *all_text, *all_text_top; - -extern int no_abbreviations; -extern int abbrevs_lookup_table_made, is_abbreviation; -extern uchar *abbreviations_at; -extern int *abbrev_values; -extern int *abbrev_quality; -extern int *abbrev_freqs; - -extern int32 total_chars_trans, total_bytes_trans, - zchars_trans_in_last_string; -extern int put_strings_in_low_memory; -extern int dict_entries; -extern uchar *dictionary, *dictionary_top; -extern int *final_dict_order; - -extern memory_block static_strings_area; -extern int32 static_strings_extent; - -/* And now, a great many declarations for dealing with Glulx string - compression. */ - -extern int32 no_strings, no_dynamic_strings; -extern int no_unicode_chars; - -#define MAX_DYNAMIC_STRINGS (64) - -typedef struct unicode_usage_s unicode_usage_t; -struct unicode_usage_s { - int32 ch; - unicode_usage_t *next; -}; - -extern unicode_usage_t *unicode_usage_entries; - -/* This is the maximum number of (8-bit) bytes that can encode a single - Huffman entity. Four should be plenty, unless someone starts encoding - an ideographic language. */ -#define MAXHUFFBYTES (4) - -typedef struct huffbitlist_struct { - uchar b[MAXHUFFBYTES]; -} huffbitlist_t; -typedef struct huffentity_struct { - int count; - int type; - union { - int branch[2]; - unsigned char ch; - int val; - } u; - int depth; - int32 addr; - huffbitlist_t bits; -} huffentity_t; - -extern huffentity_t *huff_entities; - -extern int32 compression_table_size, compression_string_size; -extern int32 *compressed_offsets; -extern int no_huff_entities; -extern int huff_abbrev_start, huff_dynam_start, huff_unicode_start; -extern int huff_entity_root; - -extern void compress_game_text(void); - -/* end of the Glulx string compression stuff */ - -extern void ao_free_arrays(void); -extern int32 compile_string(char *b, int in_low_memory, int is_abbrev); -extern uchar *translate_text(uchar *p, uchar *p_limit, char *s_text); -extern void optimise_abbreviations(void); -extern void make_abbreviation(char *text); -extern void show_dictionary(void); -extern void word_to_ascii(uchar *p, char *result); -extern void write_dictionary_to_transcript(void); -extern void sort_dictionary(void); -extern void dictionary_prepare(char *dword, uchar *optresult); -extern int dictionary_add(char *dword, int x, int y, int z); -extern void dictionary_set_verb_number(char *dword, int to); -extern int compare_sorts(uchar *d1, uchar *d2); -extern void copy_sorts(uchar *d1, uchar *d2); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "veneer" */ -/* ------------------------------------------------------------------------- */ - -extern int veneer_mode; -extern int32 veneer_routine_address[]; - -extern void compile_initial_routine(void); -extern assembly_operand veneer_routine(int code); -extern void compile_veneer(void); - -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "verbs" */ -/* ------------------------------------------------------------------------- */ - -extern int no_adjectives, no_Inform_verbs, no_grammar_token_routines, - no_fake_actions, no_actions, no_grammar_lines, no_grammar_tokens, - grammar_version_number; -extern int32 grammar_version_symbol; -extern verbt *Inform_verbs; -extern uchar *grammar_lines; -extern int32 grammar_lines_top; -extern int32 *action_byte_offset, - *grammar_token_routine, - *adjectives; - -extern void find_the_actions(void); -extern void make_fake_action(void); -extern assembly_operand action_of_name(char *name); -extern void make_verb(void); -extern void extend_verb(void); -extern void list_verb_table(void); - -/* ========================================================================= */