1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 08:34:22 +03:00
inform7/docs/if-module/1-im.html
2019-04-22 15:42:10 +01:00

224 lines
19 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Booklet Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of '1/im' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">if</a></li><li><a href="index.html#1">Chapter 1: Starting Up</a></li><li><b>IF Module</b></li></ul><p class="purpose">Setting up the use of this module.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Predeclarations</a></li><li><a href="#SP2">&#167;2. Introduction</a></li><li><a href="#SP4">&#167;4. The beginning</a></li><li><a href="#SP5">&#167;5. The end</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Predeclarations. </b></p>
<pre class="display">
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">action_meaning</span><span class="plain">, </span><span class="reserved">action_pattern</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_action_name</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_action_pattern</span><span class="plain">, </span><span class="reserved">action_pattern</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_grammar_verb</span><span class="plain">, </span><span class="reserved">grammar_verb</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_named_action_pattern</span><span class="plain">, </span><span class="reserved">named_action_pattern</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_scene</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Introduction. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">IF_MODULE</span><span class="plain"> </span><span class="identifier">TRUE</span>
</pre>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>To begin with, this module needs to allocate memory:
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">action_name_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">auxiliary_file_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">backdrop_found_in_notice_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">cached_understanding_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">command_index_entry_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">connected_submap_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">door_dir_notice_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">door_to_notice_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">EPS_map_level_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">grammar_line_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">grammar_verb_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">loop_over_scope_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">map_data_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">named_action_pattern_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">noun_filter_token_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">parse_name_notice_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">parsing_data_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">parsing_pp_data_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">regions_data_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">reserved_command_verb_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">rubric_holder_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">scene_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">short_name_notice_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">slash_gpr_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">spatial_data_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">action_name_list_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">action_pattern_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">ap_optional_clause_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">scene_connector_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">understanding_item_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">understanding_reference_array_MT</span>
</pre>
<pre class="display">
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">auxiliary_file</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">backdrop_found_in_notice</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">cached_understanding</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">command_index_entry</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">connected_submap</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">door_dir_notice</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">door_to_notice</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">EPS_map_level</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">grammar_line</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">grammar_verb</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">loop_over_scope</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">map_data</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">named_action_pattern</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">noun_filter_token</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">parse_name_notice</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">parsing_data</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">parsing_pp_data</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">regions_data</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">reserved_command_verb</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">rubric_holder</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">scene</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">short_name_notice</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">slash_gpr</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">spatial_data</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">action_name_list</span><span class="plain">, 1000)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">action_pattern</span><span class="plain">, 100)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">ap_optional_clause</span><span class="plain">, 400)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">scene_connector</span><span class="plain">, 1000)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">understanding_item</span><span class="plain">, 100)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">understanding_reference</span><span class="plain">, 100)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">action_meaning</span><span class="plain">, </span><span class="reserved">action_pattern</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_action_name</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_action_pattern</span><span class="plain">, </span><span class="reserved">action_pattern</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_grammar_verb</span><span class="plain">, </span><span class="reserved">grammar_verb</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_named_action_pattern</span><span class="plain">, </span><span class="reserved">named_action_pattern</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_scene</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. The beginning. </b>(The client doesn't need to call the start and end routines, because the
foundation module does that automatically.)
</p>
<pre class="display">
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">action_pattern</span><span class="plain"> *, </span><span class="functiontext">PL::Actions::Patterns::log</span><span class="plain">)</span>
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">grammar_verb</span><span class="plain"> *, </span><span class="functiontext">PL::Parsing::Verbs::log</span><span class="plain">)</span>
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">grammar_line</span><span class="plain"> *, </span><span class="functiontext">PL::Parsing::Lines::log</span><span class="plain">)</span>
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">action_name_list</span><span class="plain"> *, </span><span class="functiontext">PL::Actions::Lists::log</span><span class="plain">)</span>
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *, </span><span class="functiontext">PL::Actions::log</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">IFModule::start</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Register this module's stream writers</span> <span class="cwebmacronumber">4.1</span>&gt;<span class="character">;</span>
&lt;<span class="cwebmacro">Register this module's debugging log aspects</span> <span class="cwebmacronumber">4.3</span>&gt;<span class="character">;</span>
&lt;<span class="cwebmacro">Register this module's debugging log writers</span> <span class="cwebmacronumber">4.4</span>&gt;<span class="character">;</span>
&lt;<span class="cwebmacro">Register this module's command line switches</span> <span class="cwebmacronumber">4.5</span>&gt;<span class="character">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function IFModule::start appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Register this module's stream writers</span> <span class="cwebmacronumber">4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_2"></a><b>&#167;4.2. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">GRAMMAR_DA</span>
<span class="definitionkeyword">enum</span> <span class="constant">GRAMMAR_CONSTRUCTION_DA</span>
</pre>
<p class="inwebparagraph"><a id="SP4_3"></a><b>&#167;4.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Register this module's debugging log aspects</span> <span class="cwebmacronumber">4.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Log::declare_aspect</span><span class="plain">(</span><span class="constant">GRAMMAR_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"grammar"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">Log::declare_aspect</span><span class="plain">(</span><span class="constant">GRAMMAR_CONSTRUCTION_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"grammar construction"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_4"></a><b>&#167;4.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Register this module's debugging log writers</span> <span class="cwebmacronumber">4.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">, </span><span class="functiontext">PL::Actions::Patterns::log</span><span class="plain">);</span>
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'G'</span><span class="plain">, </span><span class="functiontext">PL::Parsing::Verbs::log</span><span class="plain">);</span>
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'g'</span><span class="plain">, </span><span class="functiontext">PL::Parsing::Lines::log</span><span class="plain">);</span>
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'L'</span><span class="plain">, </span><span class="functiontext">PL::Actions::Lists::log</span><span class="plain">);</span>
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'l'</span><span class="plain">, </span><span class="functiontext">PL::Actions::log</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_5"></a><b>&#167;4.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Register this module's command line switches</span> <span class="cwebmacronumber">4.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. The end. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">IFModule::end</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function IFModule::end appears nowhere else.</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 1: Starting Up.)</i></li><li><i>(This section ends Chapter 1: Starting Up.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>