mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 00:24:22 +03:00
501 lines
71 KiB
HTML
501 lines
71 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Definitions Template</title>
|
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
|
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<script>
|
|
MathJax = {
|
|
tex: {
|
|
inlineMath: '$', '$'], ['\\(', '\\)'
|
|
},
|
|
svg: {
|
|
fontCache: 'global'
|
|
}
|
|
};
|
|
</script>
|
|
<script type="text/javascript" id="MathJax-script" async
|
|
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
|
</script>
|
|
|
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body class="commentary-font">
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-assets/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../index.html">home</a></li>
|
|
</ul><h2>Compiler</h2><ul>
|
|
<li><a href="../structure.html">structure</a></li>
|
|
<li><a href="../inbuildn.html">inbuild</a></li>
|
|
<li><a href="../inform7n.html">inform7</a></li>
|
|
<li><a href="../intern.html">inter</a></li>
|
|
<li><a href="../services.html">services</a></li>
|
|
<li><a href="../secrets.html">secrets</a></li>
|
|
</ul><h2>Other Tools</h2><ul>
|
|
<li><a href="../inblorbn.html">inblorb</a></li>
|
|
<li><a href="../indocn.html">indoc</a></li>
|
|
<li><a href="../inform6.html">inform6</a></li>
|
|
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
|
</ul><h2>Resources</h2><ul>
|
|
<li><a href="../extensions.html">extensions</a></li>
|
|
<li><a href="../kits.html">kits</a></li>
|
|
</ul><h2>Repository</h2><ul>
|
|
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
|
</ul><h2>Related Projects</h2><ul>
|
|
<li><a href="../../../inweb/index.html">inweb</a></li>
|
|
<li><a href="../../../intest/index.html">intest</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
<!--Weave of 'Definitions Template' generated by Inweb-->
|
|
<div class="breadcrumbs">
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">BasicInformKit</a></li><li><b>Definitions Template</b></li></ul></div>
|
|
<p class="purpose">Miscellaneous constant definitions, usually providing symbolic names for otherwise inscrutable numbers, which are used throughout the template layer.</p>
|
|
|
|
<ul class="toc"><li><a href="S-dfn.html#SP1">§1. Identification</a></li><li><a href="S-dfn.html#SP2">§2. Nothing</a></li><li><a href="S-dfn.html#SP3">§3. Powers of Two</a></li><li><a href="S-dfn.html#SP4">§4. Text Styles</a></li><li><a href="S-dfn.html#SP5">§5. Colour Numbers</a></li><li><a href="S-dfn.html#SP6">§6. Window Numbers</a></li><li><a href="S-dfn.html#SP7">§7. Paragraphing Flags</a></li><li><a href="S-dfn.html#SP8">§8. Descriptors in the Language of Play</a></li><li><a href="S-dfn.html#SP9">§9. Auxiliary file structure</a></li><li><a href="S-dfn.html#SP10">§10. Scope Searching Reasons</a></li><li><a href="S-dfn.html#SP11">§11. Token Types</a></li><li><a href="S-dfn.html#SP12">§12. GPR Return Values</a></li><li><a href="S-dfn.html#SP13">§13. List Styles</a></li><li><a href="S-dfn.html#SP14">§14. Lengths Of Time</a></li><li><a href="S-dfn.html#SP15">§15. Empty Text</a></li><li><a href="S-dfn.html#SP16">§16. Empty Table</a></li><li><a href="S-dfn.html#SP17">§17. Empty Set</a></li><li><a href="S-dfn.html#SP18">§18. Template Attributes</a></li><li><a href="S-dfn.html#SP19">§19. Template Properties</a></li><li><a href="S-dfn.html#SP20">§20. Formal Parameters</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Identification. </b></p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASICINFORMKIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SERIAL_COMMA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">SERIAL_COMMA_CFGF</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Nothing. </b>This is defined automatically by the Inform 6 compiler, but not by other final
|
|
compilation platforms (such as C).
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="reserved-syntax">nothing</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Powers of Two. </b>I6 lacks support for logical shifts, and the Z-machine opcodes which bear
|
|
on this are not always well supported, so the I6 library has traditionally
|
|
used a lookup table for the values of \(2^{15-n}\) where \(0\leq n \leq 11\).
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">PowersOfTwo_TB</span>
|
|
<span class="plain-syntax"> --> </span><span class="constant-syntax">$$100000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$010000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$001000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000100000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000010000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000001000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000000100000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000000010000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000000001000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000000000100</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000000000010</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$000000000001</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">IncreasingPowersOfTwo_TB</span>
|
|
<span class="plain-syntax"> --> </span><span class="constant-syntax">$$0000000000000001</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000000000010</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000000000100</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000000001000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000000010000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000000100000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000001000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000010000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000000100000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000001000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000010000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0000100000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0001000000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0010000000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$0100000000000000</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">$$1000000000000000</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Text Styles. </b>These are the styles of text distinguished by the template layer, though
|
|
they are not required to look different from each other on any given VM.
|
|
The codes are independent of the VM targetted, though in fact they are
|
|
equal to Glulx style numbers as conventionally used. (The Z-machine renders
|
|
some as roman, some as bold, but for instance makes <span class="extract"><span class="extract-syntax">HEADER_VMSTY</span></span> and
|
|
<span class="extract"><span class="extract-syntax">SUBHEADER_VMSTY</span></span> indistinguishable to the eye.) Glulx's system of styles
|
|
is one of its weakest points from an IF author's perspective, since it is
|
|
all but impossible to achieve the text effects one might want — boldface,
|
|
for instance, or red text — and text rendering is almost the only area
|
|
in which it is clearly inferior to the Z-machine, which it was designed
|
|
to replace. Still, using these styles when we can will get the most out of
|
|
it, and for unornamental works Glulx is fine in practice.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NORMAL_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEADER_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SUBHEADER_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALERT_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOTE_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BLOCKQUOTE_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">7</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INPUT_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Colour Numbers. </b>These are traditional colour names: quite who it was who thought that azure
|
|
was the same colour as cyan is now unclear. Colour is, again, not easy to
|
|
arrange on Glulx, but there is some workaround code.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_DEFAULT</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_BLACK</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_RED</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_GREEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_YELLOW</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_BLUE</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_MAGENTA</span><span class="plain-syntax"> = </span><span class="constant-syntax">7</span><span class="plain-syntax">; </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_PURPLE</span><span class="plain-syntax"> = </span><span class="constant-syntax">7</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_CYAN</span><span class="plain-syntax"> = </span><span class="constant-syntax">8</span><span class="plain-syntax">; </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_AZURE</span><span class="plain-syntax"> = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CLR_WHITE</span><span class="plain-syntax"> = </span><span class="constant-syntax">9</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Window Numbers. </b>Although Glulx can support elaborate tessalations of windows on screen (if
|
|
the complexity of handling this can be mastered), the Z-machine has much
|
|
more limited resources in general, so the template layer assumes a simple
|
|
screen model: there are just two screen areas, the scrolling main window
|
|
in which commands are typed and responses printed, and the fixed status
|
|
line bar at the top of the screen.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN_ALL</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">Both windows at once</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN_STATUS</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN_MAIN</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Paragraphing Flags. </b>I am not sure many dictionaries would countenance "to paragraph" as a
|
|
verb, but never mind: the reference here is to the algorithm used to place
|
|
paragraph breaks within text, which uses bitmaps composed of the following.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_COMPLETED</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_SUPPRESSPROMPTSKIP</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax"> = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_CONTENTEXPECTED</span><span class="plain-syntax"> = </span><span class="constant-syntax">16</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Descriptors in the Language of Play. </b>The following constants are used in the <span class="extract"><span class="extract-syntax">LanguageDescriptors</span></span> table found
|
|
in the definition of the language of play.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">POSSESS_PK</span><span class="plain-syntax"> = </span><span class="constant-syntax">$100</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFART_PK</span><span class="plain-syntax"> = </span><span class="constant-syntax">$101</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEFART_PK</span><span class="plain-syntax"> = </span><span class="constant-syntax">$102</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">LIGHTED_PK</span><span class="plain-syntax"> = </span><span class="constant-syntax">$103</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">UNLIGHTED_PK</span><span class="plain-syntax"> = </span><span class="constant-syntax">$104</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Auxiliary file structure. </b>The I7 kind of value "auxiliary-file" is an <span class="extract"><span class="extract-syntax">--></span></span> array, holding a memory
|
|
structure containing information about external files. The following
|
|
constants specify memory offsets and values. Note the safety value stored
|
|
as the first word of the structure: this helps protect the routines below
|
|
from accidents.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_MAGIC</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">First word holds a safety constant</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_MAGIC_VALUE</span><span class="plain-syntax"> = </span><span class="constant-syntax">16339</span><span class="plain-syntax">; </span><span class="comment-syntax">Should be first word of any valid file structure</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">One of the following:</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_CLOSED</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">Currently closed, or perhaps doesn't exist</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_OPEN_FOR_READ</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_OPEN_FOR_WRITE</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_OPEN_FOR_APPEND</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_ERRONEOUS</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_BINARY</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="comment-syntax">False for text files (I7 default), true for binary</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STREAM</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">; </span><span class="comment-syntax">Stream for an open file (meaningless otherwise)</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_FILENAME</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">; </span><span class="comment-syntax">Packed address of constant string</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_IFID_OF_OWNER</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">; </span><span class="comment-syntax">UUID_ARRAY if owned by this project, or</span>
|
|
<span class="plain-syntax"> </span><span class="comment-syntax">string array of IFID of owner, or NULL to leave open</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_RESOURCE_ID</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">; </span><span class="comment-syntax">Only for internal files, identified by Blorb resource</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Scope Searching Reasons. </b>The parser makes use of a mechanism for searching through the objects currently
|
|
"in scope", which basically means visible to the actor who would perform the
|
|
action envisaged by the command being parsed. It is sometimes useful to
|
|
behave differently depending on why this scope searching is being done, so
|
|
the following constants enumerate the possibilities.
|
|
</p>
|
|
|
|
<p class="commentary">I6's <span class="extract"><span class="extract-syntax">EACH_TURN_REASON</span></span>, <span class="extract"><span class="extract-syntax">REACT_BEFORE_REASON</span></span> and <span class="extract"><span class="extract-syntax">REACT_AFTER_REASON</span></span>
|
|
have been removed from this list as no longer meaningful; hence the lacuna
|
|
in numbering.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARSING_REASON</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TALKING_REASON</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">EACH_TURN_REASON</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOPOVERSCOPE_REASON</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TESTSCOPE_REASON</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Token Types. </b>Tokens are the indecomposable pieces of a grammar line making up a possible
|
|
reading of a command; some are literal words, others stand for "any named
|
|
object in scope", and so on. The following codes identify the possibilities.
|
|
The <span class="extract"><span class="extract-syntax">*_TOKEN</span></span> constants must not be altered without modifying the I6 compiler
|
|
to match (so, basically, they must not be altered at all).
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ILLEGAL_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">Types of grammar token: illegal</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ELEMENTARY_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> (one of those below)</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREPOSITION_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. 'into'</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ROUTINE_FILTER_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. noun=CagedCreature</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ATTR_FILTER_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. edible</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SCOPE_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. scope=Spells</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_TT</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">; </span><span class="comment-syntax"> a general parsing routine</span>
|
|
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">The elementary grammar tokens, and</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">HELD_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">the numbers compiled by I6 to</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="comment-syntax">encode them</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIHELD_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIEXCEPT_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIINSIDE_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CREATURE_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SPECIAL_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">7</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMBER_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOPIC_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">9</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ENDIT_TOKEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">15</span><span class="plain-syntax">; </span><span class="comment-syntax">Value used to mean "end of grammar line"</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. GPR Return Values. </b>GRP stands for "General Parsing Routine", an I6 routine which acts as a
|
|
grammar token: again, see the {\it Inform Designer's Manual}, 4th edition,
|
|
for details.
|
|
</p>
|
|
|
|
<p class="commentary">In Library 6/11, <span class="extract"><span class="extract-syntax">GPR_NOUN</span></span> is defined as <span class="extract"><span class="extract-syntax">$ff00</span></span>, but this would fail on
|
|
Glulx: it needs to be <span class="extract"><span class="extract-syntax">$ffffff00</span></span> on 32-bit virtual machines. It appears that
|
|
<span class="extract"><span class="extract-syntax">GPR_NOUN</span></span> to <span class="extract"><span class="extract-syntax">GPR_CREATURE</span></span>, though documented in the old {\it Inform
|
|
Translator's Manual}, were omitted when this was consolidated into the DM4,
|
|
so that they effectively disappeared from view. But they might still be
|
|
useful for implementing inflected forms of nouns, so we have retained them
|
|
here regardless.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_FAIL</span><span class="plain-syntax"> = -1; </span><span class="comment-syntax">Return values from General Parsing</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_PREPOSITION</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">Routines</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_NUMBER</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIPLE</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_REPARSE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">REPARSE_CODE</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> = -256; </span><span class="comment-syntax">Reparse, but as </span><span class="extract"><span class="extract-syntax">NOUN_TOKEN</span></span><span class="comment-syntax"> this time</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_HELD</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">And so on</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTI</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIHELD</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIEXCEPT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIINSIDE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_CREATURE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. List Styles. </b>These constants make up bitmaps of the options in use when listing objects.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEWLINE_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000000000001</span><span class="plain-syntax">; </span><span class="comment-syntax">New-line after each entry</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDENT_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000000000010</span><span class="plain-syntax">; </span><span class="comment-syntax">Indent each entry by depth</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">FULLINV_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000000000100</span><span class="plain-syntax">; </span><span class="comment-syntax">Full inventory information after entry</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ENGLISH_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000000001000</span><span class="plain-syntax">; </span><span class="comment-syntax">English sentence style, with commas and and</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RECURSE_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000000010000</span><span class="plain-syntax">; </span><span class="comment-syntax">Recurse downwards with usual rules</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALWAYS_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000000100000</span><span class="plain-syntax">; </span><span class="comment-syntax">Always recurse downwards</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TERSE_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000001000000</span><span class="plain-syntax">; </span><span class="comment-syntax">More terse English style</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARTINV_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000010000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Only brief inventory information after entry</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFART_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000000100000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Use the definite article in list</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WORKFLAG_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000001000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">At top level (only), only list objects</span>
|
|
<span class="plain-syntax"> </span><span class="comment-syntax">which have the "workflag" attribute</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ISARE_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000010000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Print " is" or " are" before list</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONCEAL_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0000100000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Omit objects with "concealed" or "scenery":</span>
|
|
<span class="plain-syntax"> </span><span class="comment-syntax">if WORKFLAG_BIT also set, then does not</span>
|
|
<span class="plain-syntax"> </span><span class="comment-syntax">apply at top level, but does lower down</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOARTICLE_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0001000000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Print no articles, definite or not</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTRAINDENT_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0010000000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7: extra indentation of 1 level</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CFIRSTART_BIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$$0100000000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Capitalise first article in list</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. Lengths Of Time. </b>Inform measures time in minutes.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">QUARTER_HOUR</span><span class="plain-syntax"> = </span><span class="constant-syntax">15</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">HALF_HOUR</span><span class="plain-syntax"> = </span><span class="constant-syntax">30</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ONE_HOUR</span><span class="plain-syntax"> = </span><span class="constant-syntax">60</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TWELVE_HOURS</span><span class="plain-syntax"> = </span><span class="constant-syntax">720</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TWENTY_FOUR_HOURS</span><span class="plain-syntax"> = </span><span class="constant-syntax">1440</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. Empty Text. </b>The I6 compiler does not optimise string compilation: if it needs to compile
|
|
the (packed, read-only) string <span class="extract"><span class="extract-syntax">"exemplum"</span></span> twice, it will compile two copies.
|
|
This is slightly wasteful on memory, though in practice the loss is not
|
|
enough for us to care. But we do want to avoid this in I7 because, to make
|
|
string-sorting algorithms more efficient, we want direct numerical comparison
|
|
of packed addresses to be equivalent to string comparison: and that means
|
|
the text "exemplum" has to be compiled once and once only. There's a
|
|
general mechanism for this in Inform, but the single case most often needed
|
|
is the empty text, since this is the default value for text variables
|
|
and properties: we give it a name as follows.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_TEXT_PACKED</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">;</span>
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_TEXT_VALUE</span><span class="plain-syntax"> --> </span><span class="identifier-syntax">CONSTANT_PACKED_TEXT_STORAGE</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_TEXT_PACKED</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. Empty Table. </b>Similarly: the default value for the "table" kind of value, a Table
|
|
containing no rows and no columns.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">TheEmptyTable</span><span class="plain-syntax"> --> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. Empty Set. </b>The falsity proposition describes the empty set of objects, and is the
|
|
zero value for the "description" kind of value.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">Prop_Falsity</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</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>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. Template Attributes. </b>An I6 attribute is equivalent to an I7 "either/or property", though the
|
|
latter are not always translated into I6 attributes because the Z-machine
|
|
has only a limited number of attributes to use. Here, we define attributes
|
|
used by the template.
|
|
</p>
|
|
|
|
<p class="commentary">Many concepts in I6 correspond directly to their successors in I7, even if
|
|
details may vary. (Value properties are a case in point.) Attributes are
|
|
the opposite of this: indeed, no I6 concept is more fragmented in its I7
|
|
equivalents. All but one of the old I6 library attributes are still used
|
|
(the <span class="extract"><span class="extract-syntax">general</span></span> attribute, for miscellaneous use, has been removed: it more
|
|
often invited abuse than use); and a few new attributes have been added.
|
|
But they are used for a variety of purposes. Some do correspond exactly to
|
|
either/or properties in I7, but others are a sort of signature for I7
|
|
kinds. (So that for I7 use they are read-only.) Others still are used by
|
|
the template layer as part of the implementation of services for I7, but
|
|
are not visible to I7 source text as storage.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">absent</span><span class="plain-syntax">; </span><span class="comment-syntax">Used to mark objects removed from play</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">animate</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "person"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">clothing</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "wearable"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">concealed</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "undescribed"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "container"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">door</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "door"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">edible</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "edible" vs "inedible"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">enterable</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "enterable"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">light</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "lighted" vs "dark"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">lockable</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "lockable"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">locked</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "locked"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">moved</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "handled"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "switched on" vs "switched off"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">open</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "open" vs "closed"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">openable</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "openable"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">scenery</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "scenery"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">static</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "fixed in place" vs "portable"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "supporter"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">switchable</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "device"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">talkable</span><span class="plain-syntax">; </span><span class="comment-syntax">Not currently used by I7, but retained for possible future use</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">transparent</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "transparent" vs "opaque"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">visited</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "visited"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">worn</span><span class="plain-syntax">; </span><span class="comment-syntax">marks that an object tree edge represents wearing</span>
|
|
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">male</span><span class="plain-syntax">; </span><span class="comment-syntax">not directly used by I7, but available for languages with genders</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">female</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "female" vs "male"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">neuter</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "neuter"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">pluralname</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "plural-named"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">ambigpluralname</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "ambiguously plural"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "proper-named"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">remove_proper</span><span class="plain-syntax">; </span><span class="comment-syntax">remember to remove proper again when using ChangePlayer next</span>
|
|
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">privately_named</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">mentioned</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushable</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7</span>
|
|
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">mark_as_room</span><span class="plain-syntax">; </span><span class="comment-syntax">Used in I7 to speed up testing "ofclass K1_room"</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">mark_as_thing</span><span class="plain-syntax">; </span><span class="comment-syntax">Used in I7 to speed up testing "ofclass K2_thing"</span>
|
|
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">workflag</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "marked for listing", but basically temporary workspace</span>
|
|
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">workflag2</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7 and also temporary workspace</span>
|
|
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">list_filter_permits</span><span class="plain-syntax"> = </span><span class="identifier-syntax">privately_named</span><span class="plain-syntax">; </span><span class="comment-syntax">another I7 listwriter convenience</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. Template Properties. </b>As remarked above, these more often correspond to value properties in I7.
|
|
To an experienced I6 user, though, the death toll of abolished I6
|
|
properties in I7 is breathtaking: in alphabetical order, <span class="extract"><span class="extract-syntax">after</span></span>,
|
|
<span class="extract"><span class="extract-syntax">cant_go</span></span>, <span class="extract"><span class="extract-syntax">daemon</span></span>, <span class="extract"><span class="extract-syntax">each_turn</span></span>, <span class="extract"><span class="extract-syntax">invent</span></span>, <span class="extract"><span class="extract-syntax">life</span></span>, <span class="extract"><span class="extract-syntax">number</span></span>, <span class="extract"><span class="extract-syntax">orders</span></span>,
|
|
<span class="extract"><span class="extract-syntax">react_after</span></span>, <span class="extract"><span class="extract-syntax">react_before</span></span>, <span class="extract"><span class="extract-syntax">time_left</span></span>, <span class="extract"><span class="extract-syntax">time_out</span></span>, <span class="extract"><span class="extract-syntax">when_closed</span></span>,
|
|
<span class="extract"><span class="extract-syntax">when_off</span></span>, <span class="extract"><span class="extract-syntax">when_on</span></span>, <span class="extract"><span class="extract-syntax">when_open</span></span>. In May 2008, the direction properties
|
|
<span class="extract"><span class="extract-syntax">n_to</span></span>, <span class="extract"><span class="extract-syntax">s_to</span></span>, <span class="extract"><span class="extract-syntax">e_to</span></span>, ..., <span class="extract"><span class="extract-syntax">out_to</span></span> joined the list of the missing.
|
|
</p>
|
|
|
|
<p class="commentary">The losses are numerous because of the shift from I6's object orientation
|
|
to I7's rule orientation: information about the behaviour of objects is no
|
|
longer thought of as data attached to them. At that, it could have been
|
|
worse: a few unused I6 library properties have been retained for possible
|
|
future use.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">add_to_scope</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to place component parts in scope</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">article</span><span class="plain-syntax"> </span><span class="string-syntax">"a"</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement articles</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">capacity</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "carrying capacity"</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">component_child</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7: forest structure holding "part of" relation</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">component_parent</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">component_sibling</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "description"</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">door_dir</span><span class="plain-syntax">; </span><span class="comment-syntax">used to implement two-sided doors, but holds direction object, not a property</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">door_to</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement two-sided doors</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">found_in</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement two-sided doors and backdrops</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">initial</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "initial description"</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">list_together</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement "grouping together" activity</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">map_region</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_name</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement "Understand... as..." grammars</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement plural names for duplicate objects</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">regional_found_in</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">room_index</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7: storage for route-finding</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">short_name</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "printed name"</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved_short_name</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">cache for ChangePlayer</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">vector</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7: storage for route-finding</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">with_key</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "matching key"</span>
|
|
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">KD_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">Instance count of the kind of the current object</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK1_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">These are instance counts within kinds K1, K2, ...</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK2_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">and it is efficient to declare the common ones with Property</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK4_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">since this results in a slightly smaller story file</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK5_Count</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK6_Count</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK8_Count</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK3_Count</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK1_link</span><span class="plain-syntax">; </span><span class="comment-syntax">These are for linked lists used to make searches faster</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK2_link</span><span class="plain-syntax">; </span><span class="comment-syntax">and again it's memory-efficient to declare the common ones</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK5_link</span><span class="plain-syntax">; </span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK6_link</span><span class="plain-syntax">; </span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK8_link</span><span class="plain-syntax">; </span>
|
|
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">articles</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the parser</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammar</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the parser</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">inside_description</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the locale code</span>
|
|
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">short_name_indef</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the listmaker</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. Formal Parameters. </b>These are needed for efficient run-time ambiguity resolution.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_rv</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par0</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par1</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par2</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par3</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par4</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par5</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par6</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par7</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">unicode_temp</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<nav role="progress"><div class="progresscontainer">
|
|
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">dfn</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-utl.html">utl</a></li><li class="progresssection"><a href="S-prg.html">prg</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-srt.html">srt</a></li><li class="progresssection"><a href="S-tbl.html">tbl</a></li><li class="progresssection"><a href="S-mst.html">mst</a></li><li class="progresssection"><a href="S-rlb.html">rlb</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-flx.html">flx</a></li><li class="progresssection"><a href="S-blc.html">blc</a></li><li class="progresssection"><a href="S-txt.html">txt</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-rgx.html">rgx</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-cmb.html">cmb</a></li><li class="progresssection"><a href="S-rlt.html">rlt</a></li><li class="progresssection"><a href="S-rlt2.html">rlt2</a></li><li class="progresssection"><a href="S-prp.html">prp</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
|
</nav><!--End of weave-->
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|