<pclass="commentary firstcommentary"><aid="SP1"class="paragraph-anchor"></a><b>§1. Textual, Binary, Memory. </b>Inter code has three representations: as a binary file, as a textual file,
<pclass="commentary firstcommentary"><aid="SP2"class="paragraph-anchor"></a><b>§2. Global statements. </b>These statements must appear first in the file, and must be unindented.
<pclass="commentary firstcommentary"><aid="SP3"class="paragraph-anchor"></a><b>§3. </b><spanclass="extract"><spanclass="extract-syntax">version NUMBER</span></span> indicates that the file was written in that version of
<pclass="commentary firstcommentary"><aid="SP4"class="paragraph-anchor"></a><b>§4. </b><spanclass="extract"><spanclass="extract-syntax">packagetype NAME</span></span> declares that <spanclass="extract"><spanclass="extract-syntax">NAME</span></span> is the name of a type of package.
<pclass="commentary">For example, <spanclass="extract"><spanclass="extract-syntax">packagetype _adjective</span></span> creates <spanclass="extract"><spanclass="extract-syntax">_adjective</span></span> as a possible type
<pclass="commentary">The first two package types must be <spanclass="extract"><spanclass="extract-syntax">_plain</span></span> and <spanclass="extract"><spanclass="extract-syntax">_code</span></span>, in that order.
<pclass="commentary firstcommentary"><aid="SP5"class="paragraph-anchor"></a><b>§5. </b><spanclass="extract"><spanclass="extract-syntax">pragma TARGET "WHATEVER"</span></span> does not change the meaning of the inter file;
<pclass="commentary firstcommentary"><aid="SP6"class="paragraph-anchor"></a><b>§6. </b><spanclass="extract"><spanclass="extract-syntax">primitive PRIMITIVE IN -> OUT</span></span> defines a new code statement — if inter
<pclass="commentary">defines the primitive <spanclass="extract"><spanclass="extract-syntax">!move</span></span> as something which consumes two values and
<pclass="commentary firstcommentary"><aid="SP7"class="paragraph-anchor"></a><b>§7. Package declarations. </b>After the global area, an inter file should declare a package called <spanclass="extract"><spanclass="extract-syntax">main</span></span>,
<pclass="commentary">The statement <spanclass="extract"><spanclass="extract-syntax">package NAME TYPE</span></span> declares a new package, and the <spanclass="extract"><spanclass="extract-syntax">TYPE</span></span>
must be one of those declared by <spanclass="extract"><spanclass="extract-syntax">packagetype</span></span> statements in the global area.
<pclass="commentary">Here, <spanclass="extract"><spanclass="extract-syntax">main</span></span> contains two sub-packages, <spanclass="extract"><spanclass="extract-syntax">m1_RBLK1</span></span> and <spanclass="extract"><spanclass="extract-syntax">m1_RBLK2</span></span>, and
<pclass="commentary firstcommentary"><aid="SP8"class="paragraph-anchor"></a><b>§8. </b>After the declaration line, a package definition continues with a set
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">private</span><spanclass="plain-syntax"> TYPE NAME</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">public</span><spanclass="plain-syntax"> TYPE NAME</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">external</span><spanclass="plain-syntax"> TYPE NAME </span><spanclass="reserved-syntax">--></span><spanclass="plain-syntax"> SYMBOL</span>
<pclass="commentary"><spanclass="extract"><spanclass="extract-syntax">private</span></span> means that the meaning and existence of <spanclass="extract"><spanclass="extract-syntax">NAME</span></span> are invisible
from outside the current package; <spanclass="extract"><spanclass="extract-syntax">public</span></span> means that other packages are
allowed to refer to <spanclass="extract"><spanclass="extract-syntax">NAME</span></span>; and <spanclass="extract"><spanclass="extract-syntax">external</span></span> means that this package is
making just such a reference, and that <spanclass="extract"><spanclass="extract-syntax">NAME</span></span> in this package is equivalent
to <spanclass="extract"><spanclass="extract-syntax">SYMBOL</span></span>, defined elsewhere. It is possible that <spanclass="extract"><spanclass="extract-syntax">SYMBOL</span></span> points only to
another symbol which is also <spanclass="extract"><spanclass="extract-syntax">external</span></span>, so that we then have to follow
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">package</span><spanclass="plain-syntax"> main _plain</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">package</span><spanclass="plain-syntax"> A _plain</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">external</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">misc</span><spanclass="plain-syntax"> S </span><spanclass="reserved-syntax">--></span><spanclass="plain-syntax"> /main/B/T</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">package</span><spanclass="plain-syntax"> B _plain</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">external</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">misc</span><spanclass="plain-syntax"> T </span><spanclass="reserved-syntax">--></span><spanclass="plain-syntax"> /main/B/S</span>
<pclass="commentary">The run of <spanclass="extract"><spanclass="extract-syntax">symbol</span></span> declarations at the top of a module can become quite
<pclass="commentary">Convention. A conspicuous feature of inter code generated by Inform is that
many symbols have the form <spanclass="extract"><spanclass="extract-syntax">P_Name</span></span>, where <spanclass="extract"><spanclass="extract-syntax">P</span></span> is some prefix letter showing
with the prefix <spanclass="extract"><spanclass="extract-syntax">K</span></span> (<spanclass="extract"><spanclass="extract-syntax">K_number</span></span>, <spanclass="extract"><spanclass="extract-syntax">K_text</span></span>, and so on), while variables
begin with <spanclass="extract"><spanclass="extract-syntax">V</span></span>, instances with <spanclass="extract"><spanclass="extract-syntax">I</span></span>, properties with <spanclass="extract"><spanclass="extract-syntax">P</span></span>, and so on. This
<pclass="commentary firstcommentary"><aid="SP9"class="paragraph-anchor"></a><b>§9. </b>Where a local symbol is being equated with an external one, the <spanclass="extract"><spanclass="extract-syntax">SYMBOL</span></span>
<pclass="commentary">means "the symbol <spanclass="extract"><spanclass="extract-syntax">AllowInShowme</span></span> in package <spanclass="extract"><spanclass="extract-syntax">template</span></span> inside package
<pclass="commentary firstcommentary"><aid="SP10"class="paragraph-anchor"></a><b>§10. </b>Optionally, a <spanclass="extract"><spanclass="extract-syntax">private</span></span> or <spanclass="extract"><spanclass="extract-syntax">public</span></span> symbol can also specify a name it
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">private</span><spanclass="plain-syntax"> TYPE NAME </span><spanclass="element-syntax">`TRANSLATION</span><spanclass="plain-syntax">`</span>
<pclass="commentary">Symbols tabulated as <spanclass="extract"><spanclass="extract-syntax">external</span></span> cannot be marked in this way, but of course
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">package</span><spanclass="plain-syntax"> main _plain</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">package</span><spanclass="plain-syntax"> A _plain</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">external</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">misc</span><spanclass="plain-syntax"> S </span><spanclass="reserved-syntax">--></span><spanclass="plain-syntax"> /main/B/T</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">package</span><spanclass="plain-syntax"> B _plain</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">symbol</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">public</span><spanclass="plain-syntax"></span><spanclass="reserved-syntax">misc</span><spanclass="plain-syntax"> T </span><spanclass="element-syntax">`FancyName</span><spanclass="plain-syntax">`</span>
<pclass="commentary">would result in the names <spanclass="extract"><spanclass="extract-syntax">S</span></span> and <spanclass="extract"><spanclass="extract-syntax">T</span></span> both being compiled to the name
<spanclass="extract"><spanclass="extract-syntax">FancyName</span></span> in the final code.
<pclass="commentary firstcommentary"><aid="SP11"class="paragraph-anchor"></a><b>§11. Symbol annotations. </b>A useful feature of inter is that short-term or inessential metadata can
<pclass="commentary">The annotation, <spanclass="extract"><spanclass="extract-syntax">__hex</span></span>, simply means that the natural way to print the
<pclass="commentary">would create the annotation <spanclass="extract"><spanclass="extract-syntax">__plugh</span></span> as a possibility, if it didn't already
one. The annotation can be any of: <spanclass="extract"><spanclass="extract-syntax">IFDEF_PLM</span></span>, <spanclass="extract"><spanclass="extract-syntax">IFNDEF_PLM</span></span>, <spanclass="extract"><spanclass="extract-syntax">IFNOT_PLM</span></span>,