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:
parent
b6a7130952
commit
81053713c3
|
@ -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)
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: beta
|
||||
Build Date: 11 February 2024
|
||||
Build Number: 6X35
|
||||
Build Date: 26 February 2024
|
||||
Build Number: 6X36
|
||||
|
|
|
@ -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">->#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">) & </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">->#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">) & </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">->#</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"> & </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"> & </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"> & </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>§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"><</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">->#</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax">) & </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">)) & </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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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? */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* ------------------------------------------------------------------------- */
|
||||
/* "asm" : The Inform assembler */
|
||||
/* */
|
||||
/* Part of Inform 6.42 */
|
||||
/* Part of Inform 6.43 */
|
||||
/* copyright (c) Graham Nelson 1993 - 2024 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* ------------------------------------------------------------------------- */
|
||||
/* "directs" : Directives (# commands) */
|
||||
/* */
|
||||
/* Part of Inform 6.42 */
|
||||
/* Part of Inform 6.43 */
|
||||
/* copyright (c) Graham Nelson 1993 - 2024 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* ------------------------------------------------------------------------- */
|
||||
/* "lexer" : Lexical analyser */
|
||||
/* */
|
||||
/* Part of Inform 6.42 */
|
||||
/* Part of Inform 6.43 */
|
||||
/* copyright (c) Graham Nelson 1993 - 2024 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* ------------------------------------------------------------------------- */
|
||||
/* "states" : Statement translator */
|
||||
/* */
|
||||
/* Part of Inform 6.42 */
|
||||
/* Part of Inform 6.43 */
|
||||
/* copyright (c) Graham Nelson 1993 - 2024 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1 +1 @@
|
|||
Inform 6.42 for MacOS (10th February 2024)
|
||||
Inform 6.43 for MacOS (in development)
|
||||
|
|
|
@ -1 +1 @@
|
|||
b609342c382ff58ae8cfa84b57c2e7ac
|
||||
e0b71aa005ffdef9007d53f7a88aa904
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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": {
|
||||
|
|
|
@ -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": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "BasicInformKit",
|
||||
"version": "10.2.0-beta+6X35"
|
||||
"version": "10.2.0-beta+6X36"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "CommandParserKit",
|
||||
"version": "10.2.0-beta+6X35"
|
||||
"version": "10.2.0-beta+6X36"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "EnglishLanguageKit",
|
||||
"version": "10.2.0-beta+6X35"
|
||||
"version": "10.2.0-beta+6X36"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "WorldModelKit",
|
||||
"version": "10.2.0-beta+6X35"
|
||||
"version": "10.2.0-beta+6X36"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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".
|
||||
|
||||
|
|
Loading…
Reference in a new issue