Implement a Makefile for Inform.
[inform.git] / header.h
diff --git a/header.h b/header.h
deleted file mode 100644 (file)
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 <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <string.h>
-#include <time.h>
-#include <limits.h>
-#include <math.h>
-
-#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 <proto/exec.h>
-#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 <CursorCtl.h>
-#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 <sys/types.h>
-#include <unistd.h>
-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 <unistd.h>
-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);
-
-/* ========================================================================= */