1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-16 23:30:44 +03:00

Adopted unstable new I6 to experiment with singular/plural noun detection

This commit is contained in:
Graham Nelson 2024-02-26 22:51:15 +00:00
parent b6a7130952
commit 81053713c3
49 changed files with 233 additions and 131 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6X35 'Krypton' (11 February 2024)
[Version](notes/versioning.md): 10.2.0-beta+6X36 'Krypton' (26 February 2024)
## About Inform
@ -180,7 +180,7 @@ Stable versions of the following are periodically copied into this repository,
but this is not where development on them is done, and no pull requests will
be accepted. (Note that these are not git submodules.)
* inform6 - The Inform 6 compiler (used by I7 as a code generator). - __1642__ - from [https://github.com/DavidKinder/Inform6], maintained by [David Kinder](https://github.com/DavidKinder)
* inform6 - The Inform 6 compiler (used by I7 as a code generator). - __1643__ - from [https://github.com/DavidKinder/Inform6], maintained by [David Kinder](https://github.com/DavidKinder)
* inform6/Tests/Assistants/dumb-frotz - A dumb-terminal Z-machine interpreter. - unversioned: modified from [Alembic Petrofsky's 1998 Teletype port of Frotz](https://github.com/sussman/ircbot-collection/tree/master/dumb-frotz)
* inform6/Tests/Assistants/dumb-glulx/glulxe - A dumb-terminal Glulx interpreter. - __0.6.1__ - [erkyrath/glulxe](https://github.com/erkyrath/glulxe), maintained by [Andrew Plotkin](https://github.com/erkyrath)
* inform6/Tests/Assistants/dumb-glulx/cheapglk - A basic Glk implementation to support dumb-glulxe. - __1.0.6.__ - [erkyrath/cheapglk](https://github.com/erkyrath/cheapglk), maintained by [Andrew Plotkin](https://github.com/erkyrath)

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 11 February 2024
Build Number: 6X35
Build Date: 26 February 2024
Build Number: 6X36

View file

@ -3879,18 +3879,25 @@ if it was a match because of inadequate input).
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">threshold</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_flags_of_noun</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">w</span><span class="plain-syntax">-&gt;#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">) &amp; </span><span class="constant-syntax">$$01110100</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_flags_of_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RelevantNounBits</span><span class="plain-syntax">(</span><span class="identifier-syntax">w</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NextWord</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Refers</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">wn</span><span class="plain-syntax">-1)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">threshold</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">w</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_flags_of_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_flags_of_noun</span><span class="plain-syntax"> | ((</span><span class="identifier-syntax">w</span><span class="plain-syntax">-&gt;#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">) &amp; </span><span class="constant-syntax">$$01110100</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_flags_of_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_flags_of_noun</span><span class="plain-syntax"> | (</span><span class="identifier-syntax">RelevantNounBits</span><span class="plain-syntax">(</span><span class="identifier-syntax">w</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NextWord</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">threshold</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">MMbyPN</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">RelevantNounBits</span><span class="plain-syntax"> </span><span class="identifier-syntax">w</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">w</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> = </span><span class="identifier-syntax">w</span><span class="plain-syntax">-&gt;#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">b</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">$$10000</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">$$01110000</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">$$01110100</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP56" class="paragraph-anchor"></a><b>&#167;56. Refers. </b><span class="extract"><span class="extract-syntax">Refers</span></span> works out whether the word at number wnum can refer to the object
<span class="extract"><span class="extract-syntax">obj</span></span>, returning true or false. The standard method is to see if the word
@ -4046,7 +4053,7 @@ Manual}, 4th edition.
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0:</span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">n</span><span class="plain-syntax">:</span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NextWordStopped</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">w</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="reserved-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">THEN1__WD</span><span class="plain-syntax"> </span><span class="reserved-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMA_WORD</span><span class="plain-syntax"> </span><span class="reserved-syntax">or</span><span class="plain-syntax"> -1) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">w</span><span class="plain-syntax">-&gt;#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">) &amp; </span><span class="constant-syntax">$$00000100</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">RelevantNounBits</span><span class="plain-syntax">(</span><span class="identifier-syntax">w</span><span class="plain-syntax">)) &amp; </span><span class="constant-syntax">$$00000100</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parser_action</span><span class="plain-syntax"> = ##</span><span class="identifier-syntax">PluralFound</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">outcome</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -217,6 +217,7 @@ we will need for the code we are compiling. But this seems a good time to make i
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"!%% -Cu\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"!%% $ZCODE_LESS_DICT_DATA=1;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"!%% $LONG_DICT_FLAG_BUG=0;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"!%% $DICT_IMPLICIT_SINGULAR=1;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">omit_ur</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"!%% $OMIT_UNUSED_ROUTINES=1;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
</pre>

View file

@ -79,8 +79,8 @@ small resource folder called its "bundle". (This includes English.)
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> instance name, e.g., "German language"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl_instance</span><span class="plain-syntax">; </span><span class="comment-syntax"> instance, e.g., "German language"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iso_code</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "fr" or "de"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">translated_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "Français" or "Deutsch"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">native_cue</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "en français" or "in deutscher Sprache"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">translated_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "Deutsch"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">native_cue</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "in deutscher Sprache"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">belongs_to</span><span class="plain-syntax">; </span><span class="comment-syntax"> if it does belong to an extension</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax">; </span><span class="comment-syntax"> which person text substitutions are written from</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Preform_loaded</span><span class="plain-syntax">; </span><span class="comment-syntax"> has a Preform syntax definition been read for this?</span>

View file

@ -21,8 +21,8 @@ typedef struct inform_language {
struct wording instance_name; /* instance name, e.g., "German language" */
struct instance *nl_instance; /* instance, e.g., "German language" */
struct text_stream *iso_code; /* e.g., "fr" or "de" */
struct text_stream *translated_name; /* e.g., "Français" or "Deutsch" */
struct text_stream *native_cue; /* e.g., "en français" or "in deutscher Sprache" */
struct text_stream *translated_name; /* e.g., "Deutsch" */
struct text_stream *native_cue; /* e.g., "in deutscher Sprache" */
struct inform_extension *belongs_to; /* if it does belong to an extension */
int adaptive_person; /* which person text substitutions are written from */
int Preform_loaded; /* has a Preform syntax definition been read for this? */

View file

@ -1,6 +1,6 @@
# Inform 6
This is Inform 6.42, copyright (c) Graham Nelson 1993 - 2024, a compiler for
This is Inform 6.43, copyright (c) Graham Nelson 1993 - 2024, a compiler for
interactive fiction (text adventure games).
Release notes, manuals, executables and more are available from

View file

@ -26,6 +26,21 @@ listed. So instead, this is a general thank-you to everybody who has made this r
specific ones to Graham Nelson for permitting it in the first place, and to Andrew Plotkin, who is responsible
for most of the actual changes to the compiler code.
<h2>Inform 6.43</h2>
These are the changes delivered in version 6.42 of the Inform compiler.
<h3>Features added</h3>
<ul>
<li><p>A new dictionary flag has been introduced, "singular", which is set for any non that is not a plural.
This can be explicitly set or not set in a dictionary word with the <tt>'//s'</tt> syntax, i.e. <tt>'word//s'</tt> to set it,
or <tt>'word//~s'</tt> to not set it.
</ul>
<h3>Bugs fixed</h3>
<ul>
<li><p>Dictionary flags were being set incorrectly when <tt>$DICT_WORD_SIZE</tt> was set sufficiently large.
</ul>
<h2>Inform 6.42</h2>
These are the changes delivered in version 6.42 of the Inform compiler.
@ -135,7 +150,7 @@ and <tt>buffer_screen</tt>, are now supported.
<h3>Bugs fixed</h3>
<ul>
<li><p>The Glulx build-in function <b>random(x)</b> built-in function now follows the DM4 specification: if <b>x</b>
<li><p>The Glulx <b>random(x)</b> built-in function now follows the DM4 specification: if <b>x</b>
is positive, the function returns the result of <tt>1+(@random x)</tt>; if zero or negative, <tt>@setrandom x</tt> is called.
<li><p>In several places (local variable declarations, action names and the <tt>Switches</tt> directive) the compiler would
accept quoted strings and then ignore the quotes. This is now an error.

View file

@ -3,7 +3,7 @@
/* likewise global variables, which are in some ways a */
/* simpler form of the same thing. */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "asm" : The Inform assembler */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -2,7 +2,7 @@
/* "bpatch" : Keeps track of, and finally acts on, backpatch markers, */
/* correcting symbol values not known at compilation time */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "chars" : Character set mappings and the Z-machine alphabet table */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "directs" : Directives (# commands) */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -2,7 +2,7 @@
/* "errors" : Warnings, errors and fatal errors */
/* (with error throwback code for RISC OS machines) */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "expressc" : The expression code generator */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "expressp" : The expression parser */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */
@ -863,7 +863,7 @@ static int evaluate_term(const token_data *t, assembly_operand *o)
o->type = LONG_CONSTANT_OT;
else
o->type = CONSTANT_OT;
o->value = dictionary_add(t->text, 0x80, 0, 0);
o->value = dictionary_add(t->text, NOUN_DFLAG, 0, 0);
return(TRUE);
case DQ_TT:
/* Create as a static string */
@ -964,20 +964,20 @@ static int evaluate_term(const token_data *t, assembly_operand *o)
to expect one-byte fields, even though the compiler
generates a dictionary with room for two. */
case dict_par1_SC:
o->type = BYTECONSTANT_OT;
o->marker = 0;
v = DICT_ENTRY_FLAG_POS+1;
break;
o->value = DICT_ENTRY_FLAG_POS+1;
set_constant_ot(o);
return TRUE;
case dict_par2_SC:
o->type = BYTECONSTANT_OT;
o->marker = 0;
v = DICT_ENTRY_FLAG_POS+3;
break;
o->value = DICT_ENTRY_FLAG_POS+3;
set_constant_ot(o);
return TRUE;
case dict_par3_SC:
o->type = BYTECONSTANT_OT;
o->marker = 0;
v = DICT_ENTRY_FLAG_POS+5;
break;
o->value = DICT_ENTRY_FLAG_POS+5;
set_constant_ot(o);
return TRUE;
case lowest_attribute_number_SC:
case lowest_action_number_SC:

View file

@ -7,7 +7,7 @@
/* routines in "inform.c", since they are tied up with ICL */
/* settings and are very host OS-dependent. */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* Header file for Inform: Z-machine ("Infocom" format) compiler */
/* */
/* Inform 6.42 */
/* Inform 6.43 */
/* */
/* This header file and the others making up the Inform source code are */
/* copyright (c) Graham Nelson 1993 - 2024 */
@ -31,8 +31,8 @@
/* ------------------------------------------------------------------------- */
/* For releases, set to the release date in the form "1st January 2000" */
#define RELEASE_DATE "10th February 2024"
#define RELEASE_NUMBER 1642
#define RELEASE_DATE "in development"
#define RELEASE_NUMBER 1643
#define GLULX_RELEASE_NUMBER 38
#define VNUMBER RELEASE_NUMBER
@ -1281,6 +1281,26 @@ typedef struct operator_s
only; in Glulx, the range can
change) */
/* ------------------------------------------------------------------------- */
/* Dictionary flags (for #dict_par1) */
/* ------------------------------------------------------------------------- */
#define NONE_DFLAG 0
#define VERB_DFLAG 1 /* used as a verb (in verb grammar) */
#define META_DFLAG 2 /* used as a meta verb (always with VERB) */
#define METAVERB_DFLAG (VERB_DFLAG|META_DFLAG)
#define PLURAL_DFLAG 4 /* plural (set by '//p') */
#define PREP_DFLAG 8 /* used as a preposition (in verb grammar) */
#define SING_DFLAG 16 /* singular (set by '//s') */
/* (DICT_IMPLICIT_SINGULAR sets this for all
non-plural nouns) */
#define BIT5_DFLAG 32 /* not used */
#define BIT6_DFLAG 64 /* set for verbs, for historical reasons only --
not used */
#define NOUN_DFLAG 128 /* used as a noun (set by '//n') */
/* (set for every word that appears outside
of verb grammar) */
/* ------------------------------------------------------------------------- */
/* Symbol flag definitions (in no significant order) */
/* ------------------------------------------------------------------------- */
@ -2586,6 +2606,7 @@ extern int NUM_ATTR_BYTES, GLULX_OBJECT_EXT_BYTES;
extern int WARN_UNUSED_ROUTINES, OMIT_UNUSED_ROUTINES;
extern int STRIP_UNREACHABLE_LABELS;
extern int OMIT_SYMBOL_TABLE;
extern int DICT_IMPLICIT_SINGULAR;
extern int LONG_DICT_FLAG_BUG;
extern int TRANSCRIPT_FORMAT;

View file

@ -2,7 +2,7 @@
/* "inform" : The top level of Inform: switches, pathnames, filenaming */
/* conventions, ICL (Inform Command Line) files, main */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "lexer" : Lexical analyser */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "memory" : Memory management and ICL memory setting commands */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */
@ -270,6 +270,7 @@ int WARN_UNUSED_ROUTINES; /* 0: no, 1: yes except in system files, 2: yes always
int OMIT_UNUSED_ROUTINES; /* 0: no, 1: yes */
int STRIP_UNREACHABLE_LABELS; /* 0: no, 1: yes (default) */
int OMIT_SYMBOL_TABLE; /* 0: no, 1: yes */
int DICT_IMPLICIT_SINGULAR; /* 0: no, 1: yes */
int LONG_DICT_FLAG_BUG; /* 0: no bug, 1: bug (default for historic reasons) */
int TRANSCRIPT_FORMAT; /* 0: classic, 1: prefixed */
@ -319,6 +320,7 @@ static void list_memory_sizes(void)
printf("| %25s = %-7d |\n","OMIT_UNUSED_ROUTINES",OMIT_UNUSED_ROUTINES);
printf("| %25s = %-7d |\n","STRIP_UNREACHABLE_LABELS",STRIP_UNREACHABLE_LABELS);
printf("| %25s = %-7d |\n","OMIT_SYMBOL_TABLE",OMIT_SYMBOL_TABLE);
printf("| %25s = %-7d |\n","DICT_IMPLICIT_SINGULAR",DICT_IMPLICIT_SINGULAR);
printf("| %25s = %-7d |\n","LONG_DICT_FLAG_BUG",LONG_DICT_FLAG_BUG);
printf("+--------------------------------------+\n");
}
@ -353,6 +355,7 @@ extern void set_memory_sizes(void)
WARN_UNUSED_ROUTINES = 0;
STRIP_UNREACHABLE_LABELS = 1;
OMIT_SYMBOL_TABLE = 0;
DICT_IMPLICIT_SINGULAR = 0;
LONG_DICT_FLAG_BUG = 1;
TRANSCRIPT_FORMAT = 0;
@ -511,6 +514,14 @@ static void explain_parameter(char *command)
into the game file.\n");
return;
}
if (strcmp(command,"DICT_IMPLICIT_SINGULAR")==0)
{
printf(
" DICT_IMPLICIT_SINGULAR, if set to 1, will cause dict words in noun \n\
context to have the '//s' flag if the '//p' flag is not set. \n\
retained.\n");
return;
}
if (strcmp(command,"LONG_DICT_FLAG_BUG")==0)
{
printf(
@ -933,6 +944,12 @@ extern void memory_command(char *command)
if (OMIT_SYMBOL_TABLE > 1 || OMIT_SYMBOL_TABLE < 0)
OMIT_SYMBOL_TABLE = 1;
}
if (strcmp(command,"DICT_IMPLICIT_SINGULAR")==0)
{
DICT_IMPLICIT_SINGULAR=j, flag=1;
if (DICT_IMPLICIT_SINGULAR > 1 || DICT_IMPLICIT_SINGULAR < 0)
DICT_IMPLICIT_SINGULAR = 1;
}
if (strcmp(command,"LONG_DICT_FLAG_BUG")==0)
{
LONG_DICT_FLAG_BUG=j, flag=1;

View file

@ -6,7 +6,7 @@
/* checks syntax and translates such directives into */
/* specifications for the object-maker. */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */
@ -1308,7 +1308,7 @@ the names \"%s\" and \"%s\" actually refer to the same property",
if ((!individual_property) &&
(property_number==1) && (token_type == DQ_TT))
{ AO.value = dictionary_add(token_text, 0x80, 0, 0);
{ AO.value = dictionary_add(token_text, NOUN_DFLAG, 0, 0);
AO.type = LONG_CONSTANT_OT;
AO.marker = DWORD_MV;
}
@ -1573,7 +1573,7 @@ the names \"%s\" and \"%s\" actually refer to the same property",
if ((!individual_property) &&
(property_number==1) && (token_type == DQ_TT))
{ AO.value = dictionary_add(token_text, 0x80, 0, 0);
{ AO.value = dictionary_add(token_text, NOUN_DFLAG, 0, 0);
AO.type = CONSTANT_OT;
AO.marker = DWORD_MV;
}

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "states" : Statement translator */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "symbols" : The symbols table; creating stock of reserved words */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "syntax" : Syntax analyser and compiler */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -3,7 +3,7 @@
/* of dynamic memory, gluing together all the required */
/* tables. */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -1,7 +1,7 @@
/* ------------------------------------------------------------------------- */
/* "text" : Text translation, the abbreviations optimiser, the dictionary */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */
@ -1847,17 +1847,12 @@ extern void optimise_abbreviations(void)
/* ------------------------------------------------------------------------- */
/* */
/* Further notes about the data fields... */
/* The flags are currently: */
/* bit 0: word is used as a verb (in verb grammar) */
/* bit 1: word is used as a meta verb */
/* bit 2: word is plural (set by '//p') */
/* bit 3: word is used as a preposition (in verb grammar) */
/* bit 6: set for all verbs, but not used by the parser? */
/* bit 7: word is used as a noun (set for every word that appears in */
/* code or in an object property) */
/* */
/* The flags in the first field are as defined in header.h */
/* (*_DFLAG values). */
/* */
/* In grammar version 2, the third field (adjectivenumber) is unused (and */
/* zero). */
/* zero). It may be omitted entirely with the ZCODE_LESS_DICT_DATA option. */
/* */
/* The compiler generates special constants #dict_par1, #dict_par2, */
/* #dict_par3 to refer to the byte offsets of the three fields. In */
@ -1943,25 +1938,32 @@ static void dictionary_prepare_z(char *dword, uchar *optresult)
{
case '~':
if (!dword[j+1])
error_named("'//~' with no flag character (pn) in dict word", dword);
error_named("'//~' with no flag character (psn) in dict word", dword);
negflag = !negflag;
break;
case 'p':
if (!negflag)
prepared_dictflags_pos |= 4;
prepared_dictflags_pos |= PLURAL_DFLAG;
else
prepared_dictflags_neg |= 4;
prepared_dictflags_neg |= PLURAL_DFLAG;
negflag = FALSE;
break;
case 's':
if (!negflag)
prepared_dictflags_pos |= SING_DFLAG;
else
prepared_dictflags_neg |= SING_DFLAG;
negflag = FALSE;
break;
case 'n':
if (!negflag)
prepared_dictflags_pos |= 128;
prepared_dictflags_pos |= NOUN_DFLAG;
else
prepared_dictflags_neg |= 128;
prepared_dictflags_neg |= NOUN_DFLAG;
negflag = FALSE;
break;
default:
error_named("Expected flag character (pn~) after '//' in dict word", dword);
error_named("Expected flag character (psn~) after '//' in dict word", dword);
break;
}
}
@ -2072,25 +2074,32 @@ static void dictionary_prepare_g(char *dword, uchar *optresult)
switch(dword[j]) {
case '~':
if (!dword[j+1])
error_named("'//~' with no flag character (pn) in dict word", dword);
error_named("'//~' with no flag character (psn) in dict word", dword);
negflag = !negflag;
break;
case 'p':
if (!negflag)
prepared_dictflags_pos |= 4;
prepared_dictflags_pos |= PLURAL_DFLAG;
else
prepared_dictflags_neg |= 4;
prepared_dictflags_neg |= PLURAL_DFLAG;
negflag = FALSE;
break;
case 's':
if (!negflag)
prepared_dictflags_pos |= SING_DFLAG;
else
prepared_dictflags_neg |= SING_DFLAG;
negflag = FALSE;
break;
case 'n':
if (!negflag)
prepared_dictflags_pos |= 128;
prepared_dictflags_pos |= NOUN_DFLAG;
else
prepared_dictflags_neg |= 128;
prepared_dictflags_neg |= NOUN_DFLAG;
negflag = FALSE;
break;
default:
error_named("Expected flag character (pn~) after '//' in dict word", dword);
error_named("Expected flag character (psn~) after '//' in dict word", dword);
break;
}
}
@ -2293,6 +2302,14 @@ extern int dictionary_add(char *dword, int flag1, int flag2, int flag3)
flag1 &= (~prepared_dictflags_neg);
flag1 |= prepared_dictflags_pos;
if (DICT_IMPLICIT_SINGULAR) {
/* If we have //n but not //p, that implies //s. Unless //s is
explicitly forbidden. */
if ((flag1 & NOUN_DFLAG) && !(flag1 & PLURAL_DFLAG) && !(prepared_dictflags_neg & SING_DFLAG)) {
flag1 |= SING_DFLAG;
}
}
if (root == VACANT)
{ root = 0; goto CreateEntry;
}
@ -2657,22 +2674,28 @@ static void recursively_show_z(int node, int level)
}
flags = (int) p[res];
if (flags & 128)
if (flags & NOUN_DFLAG)
printf("noun ");
else
printf(" ");
if (flags & 4)
if (flags & PLURAL_DFLAG)
printf("p ");
else
printf(" ");
if (flags & 8)
if (flags & SING_DFLAG)
printf("s ");
else
printf(" ");
if (flags & PREP_DFLAG)
{ if (grammar_version_number == 1)
printf("preposition:%d ", (int) p[res+2]);
else
printf("preposition ");
}
if ((flags & 3) == 3) printf("metaverb:%d ", (int) p[res+1]);
else if ((flags & 3) == 1) printf("verb:%d ", (int) p[res+1]);
if ((flags & METAVERB_DFLAG) == METAVERB_DFLAG)
printf("metaverb:%d ", (int) p[res+1]);
else if ((flags & METAVERB_DFLAG) == VERB_DFLAG)
printf("verb:%d ", (int) p[res+1]);
printf("\n");
}
@ -2718,19 +2741,24 @@ static void recursively_show_g(int node, int level)
if (level >= 2) {
for (i=0; i<DICT_ENTRY_BYTE_LENGTH; i++) printf("%02x ",p[i]);
}
if (flags & 128)
if (flags & NOUN_DFLAG)
printf("noun ");
else
printf(" ");
if (flags & 4)
if (flags & PLURAL_DFLAG)
printf("p ");
else
printf(" ");
if (flags & 8)
{ printf("preposition ");
}
if ((flags & 3) == 3) printf("metaverb:%d ", verbnum);
else if ((flags & 3) == 1) printf("verb:%d ", verbnum);
if (flags & SING_DFLAG)
printf("s ");
else
printf(" ");
if (flags & PREP_DFLAG)
printf("preposition ");
if ((flags & METAVERB_DFLAG) == METAVERB_DFLAG)
printf("metaverb:%d ", verbnum);
else if ((flags & METAVERB_DFLAG) == VERB_DFLAG)
printf("verb:%d ", verbnum);
printf("\n");
}

View file

@ -3,7 +3,7 @@
/* by the compiler (e.g. DefArt) which the program doesn't */
/* provide */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */

View file

@ -2,7 +2,7 @@
/* "verbs" : Manages actions and grammar tables; parses the directives */
/* Verb and Extend. */
/* */
/* Part of Inform 6.42 */
/* Part of Inform 6.43 */
/* copyright (c) Graham Nelson 1993 - 2024 */
/* */
/* ------------------------------------------------------------------------- */
@ -482,7 +482,7 @@ static int make_adjective(char *English_word)
adjective_sort_code+i*DICT_WORD_BYTES) == 0)
return(0xff-i);
adjectives[no_adjectives]
= dictionary_add(English_word,8,0,0xff-no_adjectives);
= dictionary_add(English_word,PREP_DFLAG,0,0xff-no_adjectives);
return(0xff-no_adjectives++);
}
@ -750,7 +750,7 @@ static int grammar_line(int verbnum, int line)
bytecode = make_adjective(token_text);
else
{ bytecode = 0x42;
wordcode = dictionary_add(token_text, 8, 0, 0);
wordcode = dictionary_add(token_text, PREP_DFLAG, 0, 0);
}
}
else if ((token_type==DIR_KEYWORD_TT)&&(token_value==NOUN_DK))
@ -1031,7 +1031,7 @@ extern void make_verb(void)
for (i=0, pos=0; i<no_given; i++) {
char *wd = English_verbs_given+pos;
dictionary_add(wd,
0x41 + ((meta_verb_flag)?0x02:0x00),
VERB_DFLAG + BIT6_DFLAG + ((meta_verb_flag)?META_DFLAG:NONE_DFLAG),
(glulx_mode)?(0xffff-Inform_verb):(0xff-Inform_verb), 0);
register_verb(wd, Inform_verb);
pos += (strlen(wd) + 1);

View file

@ -1 +1 @@
Inform 6.42 for MacOS (10th February 2024)
Inform 6.43 for MacOS (in development)

View file

@ -1 +1 @@
b609342c382ff58ae8cfa84b57c2e7ac
e0b71aa005ffdef9007d53f7a88aa904

View file

@ -1,10 +1,10 @@
Total memory consumption was 139588K = 136 MB
Total memory consumption was 139593K = 136 MB
---- was used for 2127404 objects, in 374859 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2127510 objects, in 374866 frames in 0 x 800K = 0K = 0 MB:
30.2% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.4% text_stream_array 4926 x 100 = 492600 objects, 27743232 bytes
17.7% linked_list 45409 objects, 25429040 bytes
19.4% text_stream_array 4927 x 100 = 492700 objects, 27748864 bytes
17.7% linked_list 45410 objects, 25429600 bytes
9.9% inter_symbol_array 134 x 1024 = 137216 objects, 14274752 bytes
9.7% inter_error_stash_array 106 x 1024 = 108544 objects, 13897024 bytes
7.4% parse_node 133803 objects, 10704240 bytes
@ -19,10 +19,10 @@ Total memory consumption was 139588K = 136 MB
1.3% package_request 21353 objects, 1879064 bytes
1.2% vocabulary_entry_array 164 x 100 = 16400 objects, 1842048 bytes
1.1% dict_entry_array 501 x 100 = 50100 objects, 1619232 bytes
1.0% inter_symbols_table 26887 objects, 1505672 bytes
1.0% inter_symbols_table 26889 objects, 1505784 bytes
1.0% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
1.0% i6_schema_array 24 x 100 = 2400 objects, 1440768 bytes
0.9% inter_package 26887 objects, 1290576 bytes
0.9% inter_package 26889 objects, 1290672 bytes
0.7% map_data 677 objects, 1137360 bytes
0.7% id_body 980 objects, 1121120 bytes
0.7% adjective_meaning 208 objects, 1030016 bytes
@ -42,7 +42,7 @@ Total memory consumption was 139588K = 136 MB
0.1% compilation_subtask 3388 objects, 271040 bytes
0.1% inference_subject 672 objects, 263424 bytes
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.1% vanilla_function 3823 objects, 244672 bytes
0.1% vanilla_function 3824 objects, 244736 bytes
0.1% binary_predicate 330 objects, 174240 bytes
0.1% hierarchy_location 1191 objects, 171504 bytes
0.1% linguistic_stock_item 3338 objects, 160224 bytes
@ -262,9 +262,9 @@ Total memory consumption was 139588K = 136 MB
---- loop_over_scope 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
100.0% was used for memory not allocated for objects:
99.9% was used for memory not allocated for objects:
62.3% text stream storage 89190196 bytes in 512730 claims
62.3% text stream storage 89194148 bytes in 512749 claims
3.8% dictionary storage 5497920 bytes in 7767 claims
---- sorting 2624 bytes in 531 claims
5.0% source text 7200000 bytes in 3 claims
@ -272,7 +272,7 @@ Total memory consumption was 139588K = 136 MB
0.1% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
3.1% inter symbols storage 4572416 bytes in 28261 claims
3.1% inter symbols storage 4572672 bytes in 28263 claims
11.7% inter bytecode storage 16757556 bytes in 15 claims
4.3% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims
@ -282,5 +282,5 @@ Total memory consumption was 139588K = 136 MB
---- code generation workspace for objects 3528 bytes in 19 claims
0.1% emitter array storage 281184 bytes in 2006 claims
-136.-6% was overhead - -195282744 bytes = -190705K = -186 MB
-136.-6% was overhead - -195289208 bytes = -190712K = -186 MB

View file

@ -1,11 +1,11 @@
100.0% in inform7 run
67.9% in compilation to Inter
45.8% in //Sequence::undertake_queued_tasks//
4.4% in //MajorNodes::pre_pass//
3.7% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.4% in //RTKindConstructors::compile//
1.4% in //RTPhrasebook::compile_entries//
67.5% in compilation to Inter
46.1% in //Sequence::undertake_queued_tasks//
4.1% in //MajorNodes::pre_pass//
3.8% in //MajorNodes::pass_1//
1.9% in //ImperativeDefinitions::assess_all//
1.5% in //RTKindConstructors::compile//
1.5% in //RTPhrasebook::compile_entries//
1.1% in //Sequence::lint_inter//
0.7% in //Sequence::undertake_queued_tasks//
0.3% in //CompletionModule::compile//
@ -13,17 +13,16 @@
0.3% in //MajorNodes::pass_2//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //World::stage_V//
5.3% not specifically accounted for
27.6% in running Inter pipeline
8.9% in step 14/15: generate inform6 -> auto.inf
7.0% in step 5/15: load-binary-kits
5.9% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
0.3% in step 11/15: eliminate-redundant-labels
4.6% not specifically accounted for
27.4% in running Inter pipeline
9.1% in step 14/15: generate inform6 -> auto.inf
6.8% in step 5/15: load-binary-kits
6.1% in step 6/15: make-synoptic-module
1.9% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
1.9% not specifically accounted for
4.1% in supervisor
0.4% not specifically accounted for
0.8% not specifically accounted for

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture16Kit",
"version": "10.2.0-beta+6X35"
"version": "10.2.0-beta+6X36"
},
"compatibility": "16-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture32Kit",
"version": "10.2.0-beta+6X35"
"version": "10.2.0-beta+6X36"
},
"compatibility": "32-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6X35"
"version": "10.2.0-beta+6X36"
},
"needs": [ {
"need": {

View file

@ -3769,12 +3769,12 @@ if it was a match because of inadequate input).
}
threshold = 1;
dict_flags_of_noun = (w->#dict_par1) & $$01110100;
dict_flags_of_noun = RelevantNounBits(w);
w = NextWord();
while (Refers(obj, wn-1)) {
threshold++;
if (w)
dict_flags_of_noun = dict_flags_of_noun | ((w->#dict_par1) & $$01110100);
dict_flags_of_noun = dict_flags_of_noun | (RelevantNounBits(w));
w = NextWord();
}
@ -3782,6 +3782,13 @@ if it was a match because of inadequate input).
jump MMbyPN;
];
[ RelevantNounBits w b;
if (w == 0) return 0;
b = w->#dict_par1;
if (b & $$10000) return b & $$01110000;
return b & $$01110100;
];
@h Refers.
|Refers| works out whether the word at number wnum can refer to the object
|obj|, returning true or false. The standard method is to see if the word
@ -3933,7 +3940,7 @@ Manual}, 4th edition.
for (i=0:i<n:i++) {
w = NextWordStopped();
if (w == 0 or THEN1__WD or COMMA_WORD or -1) break;
if ((w->#dict_par1) & $$00000100) {
if ((RelevantNounBits(w)) & $$00000100) {
parser_action = ##PluralFound;
outcome = true;
}

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6X35"
"version": "10.2.0-beta+6X36"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6X35"
"version": "10.2.0-beta+6X36"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6X35"
"version": "10.2.0-beta+6X36"
},
"needs": [ {
"need": {

View file

@ -1,6 +1,7 @@
!% -Cu
!% $ZCODE_LESS_DICT_DATA=1;
!% $LONG_DICT_FLAG_BUG=0;
!% $DICT_IMPLICIT_SINGULAR=1;
!% $OMIT_UNUSED_ROUTINES=1;
#ifndef VN_1642;
#message fatalerror "Inform 7 generates code requiring Inform 6.42 or later";
@ -15,7 +16,7 @@ Constant Budger = 32738;
Constant Danza = (2 + 34);
Constant Sahara = (Danza + Bidger + 1);
#Ifdef TARGET_ZCODE;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 166;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 167;
Global max_z_object;
#Ifdef Z__Region;
[ OC__Cl obj cla j a n objflag;

View file

@ -1,6 +1,7 @@
!% -Cu
!% $ZCODE_LESS_DICT_DATA=1;
!% $LONG_DICT_FLAG_BUG=0;
!% $DICT_IMPLICIT_SINGULAR=1;
!% $OMIT_UNUSED_ROUTINES=1;
#ifndef VN_1642;
#message fatalerror "Inform 7 generates code requiring Inform 6.42 or later";
@ -26,7 +27,7 @@ Class K_mica
class K_stone
;
#Ifdef TARGET_ZCODE;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 166;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 167;
Global max_z_object;
#Ifdef Z__Region;
[ OC__Cl obj cla j a n objflag;

View file

@ -1,6 +1,7 @@
!% -Cu
!% $ZCODE_LESS_DICT_DATA=1;
!% $LONG_DICT_FLAG_BUG=0;
!% $DICT_IMPLICIT_SINGULAR=1;
!% $OMIT_UNUSED_ROUTINES=1;
#ifndef VN_1642;
#message fatalerror "Inform 7 generates code requiring Inform 6.42 or later";
@ -11,7 +12,7 @@ Global or_tmp_var;
Constant Banana = 2;
Constant Peach = Banana;
#Ifdef TARGET_ZCODE;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 166;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 167;
Global max_z_object;
#Ifdef Z__Region;
[ OC__Cl obj cla j a n objflag;

View file

@ -1,6 +1,7 @@
!% -Cu
!% $ZCODE_LESS_DICT_DATA=1;
!% $LONG_DICT_FLAG_BUG=0;
!% $DICT_IMPLICIT_SINGULAR=1;
!% $OMIT_UNUSED_ROUTINES=1;
#ifndef VN_1642;
#message fatalerror "Inform 7 generates code requiring Inform 6.42 or later";
@ -9,7 +10,7 @@ Constant Grammar__Version 2;
Global debug_flag;
Global or_tmp_var;
#Ifdef TARGET_ZCODE;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 166;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 167;
Global max_z_object;
#Ifdef Z__Region;
[ OC__Cl obj cla j a n objflag;

View file

@ -1,6 +1,7 @@
!% -Cu
!% $ZCODE_LESS_DICT_DATA=1;
!% $LONG_DICT_FLAG_BUG=0;
!% $DICT_IMPLICIT_SINGULAR=1;
!% $OMIT_UNUSED_ROUTINES=1;
#ifndef VN_1642;
#message fatalerror "Inform 7 generates code requiring Inform 6.42 or later";
@ -11,7 +12,7 @@ Global or_tmp_var;
Constant I_green = 1;
Constant I_red = 17;
#Ifdef TARGET_ZCODE;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 166;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 167;
Global max_z_object;
#Ifdef Z__Region;
[ OC__Cl obj cla j a n objflag;

View file

@ -1,6 +1,7 @@
!% -Cu
!% $ZCODE_LESS_DICT_DATA=1;
!% $LONG_DICT_FLAG_BUG=0;
!% $DICT_IMPLICIT_SINGULAR=1;
!% $OMIT_UNUSED_ROUTINES=1;
#ifndef VN_1642;
#message fatalerror "Inform 7 generates code requiring Inform 6.42 or later";
@ -9,7 +10,7 @@ Constant Grammar__Version 2;
Global debug_flag;
Global or_tmp_var;
#Ifdef TARGET_ZCODE;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 166;
#OrigSource "inter/final-module/Chapter 4/Final Inform 6.w" 167;
Global max_z_object;
#Ifdef Z__Region;
[ OC__Cl obj cla j a n objflag;

View file

@ -144,6 +144,7 @@ See the Inform 6 Technical Manual for more on these oddities.
WRITE("!%% -Cu\n");
WRITE("!%% $ZCODE_LESS_DICT_DATA=1;\n");
WRITE("!%% $LONG_DICT_FLAG_BUG=0;\n");
WRITE("!%% $DICT_IMPLICIT_SINGULAR=1;\n");
if (omit_ur) WRITE("!%% $OMIT_UNUSED_ROUTINES=1;\n");
CodeGen::deselect(gen, saved);

View file

@ -1,7 +1,7 @@
Morgue Office
The Facts Were These
An Interactive Fiction
Release 1 / Serial number 150512 / Inform 7 build 6M22 (I6/v6.33 lib 6/12N) SD
Release 1 / Serial number 160428 / Inform 7 v10.2.0 / D
Morgue Office
This is not the Morgue itself; this is only its outer office. The familiar room full of silver drawers and cold air lies beyond.
@ -11,7 +11,7 @@
> > Morgue Office
(Testing.)
>[1] test dollars
>[1] test monetary
(Testing.)
>[2] drop all

View file

@ -165,11 +165,11 @@ After each instance of the multiply-giving action, we need to clear the variable
The player carries a knitted cap. The price of the knitted cap is $2.
Test me with "test dollars / purloin three dollars / test multi-line / purloin three dollars / purloin pie / purloin cap / test specificity / purloin three dollars / test largesse / test mixed-gift".
Test me with "test monetary / purloin three dollars / test multi-line / purloin three dollars / purloin pie / purloin cap / test specificity / purloin three dollars / test largesse / test mixed-gift".
Test multi-line with "give dollar and pie to attendant. give dollars and cap to attendant".
Test dollars with "drop all / give dollar to Morgue Attendant / give dollars to Morgue Attendant / get dollars / give dollars to morgue attendant / purloin three dollars / drop dollars / give dollars to Morgue Attendant".
Test monetary with "drop all / give dollar to Morgue Attendant / give dollars to Morgue Attendant / get dollars / give dollars to morgue attendant / purloin three dollars / drop dollars / give dollars to Morgue Attendant".
Test specificity with "give three dollars to Morgue Attendant".