<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. Responses</a></li><li><ahref="M-dpiti.html#SP11">§11. Metadata</a></li><li><ahref="M-dpiti.html#SP12">§12. Append and Link</a></li><li><ahref="M-dpiti.html#SP13">§13. Nop</a></li></ul><hrclass="tocbar">
<pclass="commentary firstcommentary"><aid="SP1"></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"></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"></a><b>§3. </b>In the remainder of this specification, <spanclass="extract"><spanclass="extract-syntax">VALUE</span></span> means either the name of
a defined <spanclass="extract"><spanclass="extract-syntax">constant</span></span> (see below), or else a literal.
<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">This can be controlled using <spanclass="extract"><spanclass="extract-syntax">defaultvalue KIND = VALUE</span></span>. For example,
<pclass="commentary firstcommentary"><aid="SP5"></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"></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"></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">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"></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"></a><b>§10. Responses. </b>A "response" is a special sort of property belonging to a function rather than
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">NAME</span></span> provides a unique symbol name identifying this specific response; this
<pclass="commentary firstcommentary"><aid="SP11"></a><b>§11. Metadata. </b>This has no effect on the code generated, and is simply semantic markup for
<pclass="commentary">Here <spanclass="extract"><spanclass="extract-syntax">KEY</span></span> must be a (public) symbol whose name begins with a backtick, and
<spanclass="extract"><spanclass="extract-syntax">VALUE</span></span> must be literal text. For example:
<pclass="commentary firstcommentary"><aid="SP12"></a><b>§12. 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="SP13"></a><b>§13. Nop. </b>The "nop" statement has no textual representation. It does nothing, and exists