<ulclass="toc"><li><ahref="M-dpiti.html#SP1">§1. Data packages</a></li><li><ahref="M-dpiti.html#SP2">§2. Kinds and values</a></li><li><ahref="M-dpiti.html#SP5">§5. Enumerations and instances</a></li><li><ahref="M-dpiti.html#SP6">§6. Properties of instances</a></li><li><ahref="M-dpiti.html#SP7">§7. Constants</a></li><li><ahref="M-dpiti.html#SP9">§9. Global variables</a></li><li><ahref="M-dpiti.html#SP10">§10. Metadata</a></li><li><ahref="M-dpiti.html#SP11">§11. Append and Link</a></li><li><ahref="M-dpiti.html#SP12">§12. Nop</a></li></ul><hrclass="tocbar">
<pclass="commentary firstcommentary"><aid="SP1"class="paragraph-anchor"></a><b>§1. Data packages. </b>To recap: a file of textual inter has a brief global section at the top, and
is not <spanclass="extract"><spanclass="extract-syntax">_code</span></span>. Note that, in particular, the <spanclass="extract"><spanclass="extract-syntax">main</span></span> package is always a
<pclass="commentary firstcommentary"><aid="SP2"class="paragraph-anchor"></a><b>§2. Kinds and values. </b>Inter is a very loosely typed language, in the sense that it is possible
<pclass="commentary">The <spanclass="extract"><spanclass="extract-syntax">NAME</span></span>, like all names, goes into the owning package's symbol table;
other packages wanting to use this kind will have to have an <spanclass="extract"><spanclass="extract-syntax">external</span></span>
<ulclass="items"><li>(a) <spanclass="extract"><spanclass="extract-syntax">unchecked</span></span>, meaning that absolutely any data can be referred to by this type;
</li><li>(b) <spanclass="extract"><spanclass="extract-syntax">int32</span></span>, <spanclass="extract"><spanclass="extract-syntax">int16</span></span>, <spanclass="extract"><spanclass="extract-syntax">int8</span></span>, <spanclass="extract"><spanclass="extract-syntax">int2</span></span>, for numerical data stored in these numbers
</li><li>(i) <spanclass="extract"><spanclass="extract-syntax">description of K</span></span>, meaning that data must be a description which either
matches or does not match values of kind <spanclass="extract"><spanclass="extract-syntax">K</span></span>;
</li><li>(j) <spanclass="extract"><spanclass="extract-syntax">struct</span></span>, which is similar to <spanclass="extract"><spanclass="extract-syntax">list of K</span></span>, but which has entries which do
<pclass="commentary firstcommentary"><aid="SP3"class="paragraph-anchor"></a><b>§3. </b>In the remainder of this specification, <spanclass="extract"><spanclass="extract-syntax">VALUE</span></span> means either the name of
<pclass="commentary">A literal <spanclass="extract"><spanclass="extract-syntax">int32</span></span>, <spanclass="extract"><spanclass="extract-syntax">int16</span></span>, <spanclass="extract"><spanclass="extract-syntax">int8</span></span>, or <spanclass="extract"><spanclass="extract-syntax">int2</span></span> can be written as any of the
</li><li>(b) a hexadecimal imteger prefixed with <spanclass="extract"><spanclass="extract-syntax">0x</span></span>, which can write the digits
<spanclass="extract"><spanclass="extract-syntax">A</span></span> to <spanclass="extract"><spanclass="extract-syntax">F</span></span> in either upper or lower case form, but cannot take a minus sign;
</li><li>(c) a binary integer prefixed with <spanclass="extract"><spanclass="extract-syntax">0b</span></span>, which cannot take a minus sign.
<pclass="commentary">For example, <spanclass="extract"><spanclass="extract-syntax">-231</span></span>, <spanclass="extract"><spanclass="extract-syntax">0x21BC</span></span> and <spanclass="extract"><spanclass="extract-syntax">0b1001001</span></span> are all valid. If the literal
<pclass="commentary">A literal <spanclass="extract"><spanclass="extract-syntax">list</span></span> is writtem in braces: <spanclass="extract"><spanclass="extract-syntax">{ V1, V2, ..., Vn }</span></span>, where <spanclass="extract"><spanclass="extract-syntax">V1</span></span>,
<spanclass="extract"><spanclass="extract-syntax">V2</span></span> and so on must all be acceptable literals for the entry kind of the
list. For example, <spanclass="extract"><spanclass="extract-syntax">{ 2, 3, 5, 7, 11, 13, 17, 19 }</span></span>. The same notation is
also accepted for a <spanclass="extract"><spanclass="extract-syntax">struct</span></span>, a <spanclass="extract"><spanclass="extract-syntax">column</span></span> or a <spanclass="extract"><spanclass="extract-syntax">table</span></span>. For example:
time. For example, if we do not yet know the value of <spanclass="extract"><spanclass="extract-syntax">X</span></span>, we can write
<spanclass="extract"><spanclass="extract-syntax">sum{ X, 1 }</span></span> to mean <spanclass="extract"><spanclass="extract-syntax">X+1</span></span>. A present, addition is the only operation
<pclass="commentary">A literal <spanclass="extract"><spanclass="extract-syntax">text</span></span> is written in double quotes, <spanclass="extract"><spanclass="extract-syntax">"like so"</span></span>. All characters
writtem <spanclass="extract"><spanclass="extract-syntax">\t</span></span>, and newline (10), written <spanclass="extract"><spanclass="extract-syntax">\n</span></span>. In addition, <spanclass="extract"><spanclass="extract-syntax">\"</span></span> denotes a
literal double-quote, and <spanclass="extract"><spanclass="extract-syntax">\\</span></span> a literal backslash, but these are the only
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">r"text"</span></span> makes a literal real number: the text is required to take the
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">dw"text"</span></span> is meaningful only for interactive fiction, and represents the
command parser dictionary entry for the word <spanclass="extract"><spanclass="extract-syntax">text</span></span>. This is equivalent
to the Inform 6 constant <spanclass="extract"><spanclass="extract-syntax">'text//'</span></span>. <spanclass="extract"><spanclass="extract-syntax">dwp"text"</span></span> is the same, but pluralised,
equivalent to Inform 6 <spanclass="extract"><spanclass="extract-syntax">'text//p'</span></span>. Again, these can be stored in an <spanclass="extract"><spanclass="extract-syntax">int32</span></span>.
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">&"text"</span></span> makes a literal value called a "glob". This is not a respectful
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">^"text"</span></span> is not really a value at all, and is called a "divider". This
<pclass="commentary">Inform generates <spanclass="extract"><spanclass="extract-syntax">undef</span></span> values to represent missing entries in tables,
<pclass="commentary firstcommentary"><aid="SP4"class="paragraph-anchor"></a><b>§4. </b>Kinds have "default values": if some piece of storage has to hold a value
<pclass="commentary">This can be controlled using <spanclass="extract"><spanclass="extract-syntax">defaultvalue KIND = VALUE</span></span>. For example,
<pclass="commentary firstcommentary"><aid="SP5"class="paragraph-anchor"></a><b>§5. Enumerations and instances. </b>As noted above, some kinds marked as <spanclass="extract"><spanclass="extract-syntax">enum</span></span> are enumerated. This means
<pclass="commentary">This creates a new <spanclass="extract"><spanclass="extract-syntax">enum</span></span> kind <spanclass="extract"><spanclass="extract-syntax">K1_room</span></span>. Values of this are a subset of
the values for its parent, <spanclass="extract"><spanclass="extract-syntax">K_object</span></span>: thus, an instance of <spanclass="extract"><spanclass="extract-syntax">K1_room</span></span> is
automatically also an instance of <spanclass="extract"><spanclass="extract-syntax">K_object</span></span>. This new subkind can itself
<pclass="commentary firstcommentary"><aid="SP6"class="paragraph-anchor"></a><b>§6. Properties of instances. </b>A "property" is a named value attached to all instances of a given kind,
<pclass="commentary">which declares that <spanclass="extract"><spanclass="extract-syntax">NAME</span></span> is a property whose value has the given <spanclass="extract"><spanclass="extract-syntax">KIND</span></span>;
<pclass="commentary">where <spanclass="extract"><spanclass="extract-syntax">OWNER</span></span> can either be the name of a whole kind, in which case this sets
<pclass="commentary firstcommentary"><aid="SP7"class="paragraph-anchor"></a><b>§7. Constants. </b>A constant definition assigns a name to a given value: where that name is
<pclass="commentary">does not make <spanclass="extract"><spanclass="extract-syntax">C_favourite</span></span> a new possible colour: it's only a synonym for
the existing <spanclass="extract"><spanclass="extract-syntax">C_green</span></span>.
<pclass="commentary firstcommentary"><aid="SP8"class="paragraph-anchor"></a><b>§8. </b>If a constant needs to refer to a function, we seem to run into the limitation
<pclass="commentary">defines the constant <spanclass="extract"><spanclass="extract-syntax">R_101</span></span>. Note that <spanclass="extract"><spanclass="extract-syntax">R_101_B</span></span> is not a value, because
package names are not values; but <spanclass="extract"><spanclass="extract-syntax">R_101</span></span> on the other hand is a value, and
<pclass="commentary firstcommentary"><aid="SP9"class="paragraph-anchor"></a><b>§9. Global variables. </b>Variables are like properties, except that each exists only as a single
<spanclass="plain-syntax">The given value is just the initial state; at run-time, it can be changed to</span>
<spanclass="plain-syntax">another value (</span><spanclass="reserved-syntax">of</span><spanclass="plain-syntax"> the same </span><spanclass="reserved-syntax">kind</span><spanclass="plain-syntax">). For example,</span>
<pclass="commentary firstcommentary"><aid="SP10"class="paragraph-anchor"></a><b>§10. Metadata. </b>This provides important semantic markup, even though it has no direct effect on
the code generated. Metadata is specified by constant definitions, but
where the symbol name begins with the magic character <spanclass="extract"><spanclass="extract-syntax">^</span></span>. For example:
<pclass="commentary firstcommentary"><aid="SP11"class="paragraph-anchor"></a><b>§11. Append and Link. </b>Two rather ugly constructs are currently needed in order to implement very
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">append NAME "RAW I6 CODE"</span></span> tells Inter to add the given raw code to whatever
it compiles as the definition (in I6) of whatever the symbol <spanclass="extract"><spanclass="extract-syntax">NAME</span></span> refers to.
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">link STAGE "SEGMENT" "PART" "CONTENT" "OTHER"</span></span> tells Inter that it needs
<spanclass="extract"><spanclass="extract-syntax">SEGMENT</span></span>, at heading <spanclass="extract"><spanclass="extract-syntax">PART</span></span>; the <spanclass="extract"><spanclass="extract-syntax">STAGE</span></span> must be one of <spanclass="extract"><spanclass="extract-syntax">early</span></span>, <spanclass="extract"><spanclass="extract-syntax">before</span></span>,
<spanclass="extract"><spanclass="extract-syntax">instead</span></span> or <spanclass="extract"><spanclass="extract-syntax">after</span></span>. For example:
<pclass="commentary firstcommentary"><aid="SP12"class="paragraph-anchor"></a><b>§12. Nop. </b>The "nop" statement has no textual representation. It does nothing, and exists