/* ------------------------------------------------------------------------- */
/* Header file for Inform: Z-machine ("Infocom" format) compiler */
/* */
-/* Inform 6.40 */
+/* Inform 6.41 */
/* */
/* This header file and the others making up the Inform source code are */
/* copyright (c) Graham Nelson 1993 - 2022 */
/* ------------------------------------------------------------------------- */
/* For releases, set to the release date in the form "1st January 2000" */
-#define RELEASE_DATE "in development"
-#define RELEASE_NUMBER 1640
+#define RELEASE_DATE "22nd July 2022"
+#define RELEASE_NUMBER 1641
#define GLULX_RELEASE_NUMBER 38
-#define MODULE_VERSION_NUMBER 1
#define VNUMBER RELEASE_NUMBER
/* N indicates an intermediate release for Inform 7 */
#ifndef GlulxCode_Extension
#define GlulxCode_Extension ".ulx"
#endif
-#ifndef Module_Extension
-#define Module_Extension ".m5"
-#endif
#ifndef ICL_Extension
#define ICL_Extension ".icl"
#endif
#define V7Code_Extension ""
#define V8Code_Extension ""
#define GlulxCode_Extension ""
-#define Module_Extension ""
#define ICL_Extension ""
#endif
#ifndef Code_Directory
#define Code_Directory "games"
#endif
-#ifndef Module_Directory
-#define Module_Directory "modules"
-#endif
#ifndef ICL_Directory
#define ICL_Directory ""
#endif
#ifndef Code_Directory
#define Code_Directory ""
#endif
-#ifndef Module_Directory
-#define Module_Directory ""
-#endif
#ifndef ICL_Directory
#define ICL_Directory ""
#endif
int32 orig_beg_char_number;
} debug_location_beginning;
-#define MAX_KEYWORD_GROUP_SIZE (119)
+#define MAX_KEYWORD_GROUP_SIZE (159)
typedef struct keyword_group_s
{ char *keywords[MAX_KEYWORD_GROUP_SIZE+1]; /* empty-string-terminated */
/* ------------------------------------------------------------------------- */
/* Internal numbers representing assemble-able Z-opcodes */
+/* (Must match opcodes_table_z[] and opcode_list_z[]) */
/* ------------------------------------------------------------------------- */
#define je_zc 0
/* ------------------------------------------------------------------------- */
/* Internal numbers representing assemble-able Glulx opcodes */
+/* (Must match opcodes_table_g[] and opcode_list_g[]) */
+/* */
+/* This is not a complete list. It only needs to include opcodes that are */
+/* directly created by the compiler or listed in the operator tables. */
/* ------------------------------------------------------------------------- */
#define nop_gc 0
#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 dload_gm 2
+#define dstore_gm 3
#define SYMBOL_TT 0 /* value = index in symbol table */
#define MAIN_MV 10 /* "Main" routine */
#define SYMBOL_MV 11 /* Forward ref to unassigned symbol */
-/* Additional marker values used in module backpatch areas: */
+/* Additional marker values used in module backpatch areas (most are
+ obsolete). */
/* (In Glulx, OBJECT_MV and VARIABLE_MV are used in backpatching, even
without modules.) */
#define LARGEST_BPATCH_MV 17 /* 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 32-35 were used only for module import/export. */
/* 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. */
+/* BRANCH_MV must 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
+#define BRANCHMAX_MV 102 /* 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
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 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 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 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 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 int32 *global_initial_value;
extern arrayinfo *arrays;
-extern void make_global(int array_flag, int name_only);
+extern void make_global(void);
extern void set_variable_value(int i, int32 v);
+extern void make_array(void);
extern void check_globals(void);
extern int32 begin_table_array(void);
extern int32 begin_word_array(void);
extern int sequence_point_follows;
extern int uses_unicode_features, uses_memheap_features,
uses_acceleration_features, uses_float_features,
- uses_extundo_features;
+ uses_extundo_features, uses_double_features;
extern debug_location statement_debug_location;
extern int execution_never_reaches_here;
extern variableinfo *variables;
zmachine_backpatch_size;
extern int backpatch_marker, backpatch_error_flag;
+extern char *describe_mv(int mval);
+
extern int32 backpatch_value(int32 value);
extern void backpatch_zmachine_image_z(void);
extern void backpatch_zmachine_image_g(void);
#define FORERRORS_SIZE (512)
extern char *forerrors_buff;
extern int forerrors_pointer;
-extern int no_errors, no_warnings, no_suppressed_warnings,
- no_link_errors, no_compiler_errors;
+extern int no_errors, no_warnings, no_suppressed_warnings, no_compiler_errors;
extern ErrorPosition ErrorReport;
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);
OBJECT_BYTE_LENGTH, DICT_ENTRY_BYTE_LENGTH, DICT_ENTRY_FLAG_POS;
extern int32 MAXINTWORD;
-extern int asm_trace_level, expr_trace_level,
- linker_trace_level, tokens_trace_level;
+extern int asm_trace_level, expr_trace_level, tokens_trace_level;
extern int
concise_switch,
obsolete_switch, optabbrevs_trace_setting,
transcript_switch, statistics_switch, optimise_switch,
version_set_switch, nowarnings_switch, hash_switch,
- memory_map_setting, module_switch,
- define_DEBUG_switch, define_USE_MODULES_switch, define_INFIX_switch,
+ memory_map_setting,
+ define_DEBUG_switch, define_INFIX_switch,
runtime_error_checking_switch,
list_verbs_setting, list_dict_setting, list_objects_setting,
list_symbols_setting;
extern int32 requested_glulx_version;
extern int error_format, store_the_text, asm_trace_setting,
- expr_trace_setting, linker_trace_setting, tokens_trace_setting,
+ expr_trace_setting, tokens_trace_setting,
bpatch_trace_setting, symdef_trace_setting,
double_space_setting, trace_fns_setting, character_set_setting,
character_set_unicode;
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);
#ifdef ARCHIMEDES
extern char *riscos_file_type(void);
misc_keywords, directive_keywords, trace_keywords, system_constants,
opcode_macros;
-/* ------------------------------------------------------------------------- */
-/* Extern definitions for "linker" */
-/* ------------------------------------------------------------------------- */
-
-extern uchar *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" */
/* ------------------------------------------------------------------------- */