1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-16 22:14:23 +03:00
inform7/docs/supervisor-module/2-cps.html
Graham Nelson 1268a0f40e Colonised
2020-04-14 17:56:54 +01:00

327 lines
48 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Copies</title>
<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="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-src/Figures/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="index.html"><span class="selectedlink">supervisor</span></a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Shared Modules</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Copies' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#2">Chapter 2: Conceptual Framework</a></li><li><b>Copies</b></li></ul><p class="purpose">A copy is an instance in the file system of a specific edition of a work.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Creation</a></li><li><a href="#SP5">&#167;5. List of errors</a></li><li><a href="#SP6">&#167;6. Writing</a></li><li><a href="#SP7">&#167;7. Reading source text</a></li><li><a href="#SP8">&#167;8. Going operational</a></li><li><a href="#SP9">&#167;9. Miscellaneous Inbuild commands</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Creation. </b>A "copy" of a work exists in the file system when we've actually got hold of
some edition of it. For some genres, copies will be files; for others,
directories holding a set of files.
</p>
<p class="inwebparagraph">A purist view would be that a copy is simply an edition at a location in the
file system. And so it is. But copies are the main things Inbuild works on,
and we will need to generate data about them, some of which is most usefully
stored here.
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_copy</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_edition</span><span class="plain"> *</span><span class="identifier">edition</span><span class="plain">; </span><span class="comment"> what is this a copy of?</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">location_if_path</span><span class="plain">; </span><span class="comment"> exactly one of these must be non-<code class="display"><span class="extract">NULL</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">location_if_file</span><span class="plain">;</span>
<span class="identifier">general_pointer</span><span class="plain"> </span><span class="identifier">content</span><span class="plain">; </span><span class="comment"> the type of which depends on the work's genre</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">vertex</span><span class="plain">; </span><span class="comment"> head vertex of build graph for this copy</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">source_text_read</span><span class="plain">; </span><span class="comment"> have we attempted to read Inform source text from this?</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">source_text</span><span class="plain">; </span><span class="comment"> the source text we read, if so</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">found_by</span><span class="plain">; </span><span class="comment"> if this was claimed in a search</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">errors_reading_source_text</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">copy_error</span></code></span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inbuild_copy</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inbuild_copy is accessed in 1/ic, 2/nst, 3/bg, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/hdn, 6/inc, 7/ed, 7/ed2, 7/ec and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Copies are created by the managers for the respective genres, usually when
claiming. If you are a manager, do not call this...
</p>
<pre class="display">
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="functiontext">Copies::new_p<button class="popup" onclick="togglePopup('usagePopup67')">...<span class="popuptext" id="usagePopup67">Usage of <b>Copies::new_p</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_edition</span><span class="plain"> *</span><span class="identifier">edition</span><span class="plain">) {</span>
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">copy</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain">);</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain"> = </span><span class="identifier">edition</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">location_if_path</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">location_if_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">content</span><span class="plain"> = </span><span class="identifier">NULL_GENERAL_POINTER</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain"> = </span><span class="functiontext"><a href="3-bg.html#SP3">Graphs::copy_vertex</a></span><span class="plain">(</span><span class="identifier">copy</span><span class="plain">);</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">source_text_read</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">source_text</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">found_by</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">errors_reading_source_text</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">copy_error</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">copy</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>...call one of these:
</p>
<pre class="display">
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="functiontext">Copies::new_in_file<button class="popup" onclick="togglePopup('usagePopup68')">...<span class="popuptext" id="usagePopup68">Usage of <b>Copies::new_in_file</b>:<br>Extension Manager - <a href="4-em.html#SP4">&#167;4</a><br>Pipeline Manager - <a href="4-pm.html#SP3">&#167;3</a><br>Project File Manager - <a href="4-pfm.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_edition</span><span class="plain"> *</span><span class="identifier">edition</span><span class="plain">, </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">copy</span><span class="plain"> = </span><span class="functiontext"><a href="#SP2">Copies::new_p</a></span><span class="plain">(</span><span class="identifier">edition</span><span class="plain">);</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">location_if_file</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">copy</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="functiontext">Copies::new_in_path<button class="popup" onclick="togglePopup('usagePopup69')">...<span class="popuptext" id="usagePopup69">Usage of <b>Copies::new_in_path</b>:<br>Kit Manager - <a href="4-km.html#SP3">&#167;3</a><br>Language Manager - <a href="4-lm.html#SP3">&#167;3</a><br>Project Bundle Manager - <a href="4-pbm.html#SP2">&#167;2</a><br>Template Manager - <a href="4-tm.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_edition</span><span class="plain"> *</span><span class="identifier">edition</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">copy</span><span class="plain"> = </span><span class="functiontext"><a href="#SP2">Copies::new_p</a></span><span class="plain">(</span><span class="identifier">edition</span><span class="plain">);</span>
<span class="identifier">copy</span><span class="plain">-&gt;</span><span class="element">location_if_path</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">copy</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>And then probably follow up by calling this, to attach a pointer to some
additional data specific to your genre:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::set_content<button class="popup" onclick="togglePopup('usagePopup70')">...<span class="popuptext" id="usagePopup70">Usage of <b>Copies::set_content</b>:<br>Language Manager - <a href="4-lm.html#SP3">&#167;3</a><br>Pipeline Manager - <a href="4-pm.html#SP3">&#167;3</a><br>Project Bundle Manager - <a href="4-pbm.html#SP2">&#167;2</a><br>Project File Manager - <a href="4-pfm.html#SP2">&#167;2</a><br>Template Manager - <a href="4-tm.html#SP3">&#167;3</a><br>Extension Services - <a href="5-es.html#SP2">&#167;2</a><br>Kits - <a href="5-ks.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">general_pointer</span><span class="plain"> </span><span class="identifier">ref</span><span class="plain">) {</span>
<span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">content</span><span class="plain"> = </span><span class="identifier">ref</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. List of errors. </b>When copies are found to be malformed, error messages are attached to them
for later reporting. These are stored in a list.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::attach_error<button class="popup" onclick="togglePopup('usagePopup71')">...<span class="popuptext" id="usagePopup71">Usage of <b>Copies::attach_error</b>:<br>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_3">&#167;2.2.3</a>, <a href="5-es.html#SP2_2_3_2">&#167;2.2.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a><br>Kits - <a href="5-ks.html#SP5">&#167;5</a>, <a href="5-ks.html#SP5_1">&#167;5.1</a>, <a href="5-ks.html#SP5_3">&#167;5.3</a><br>Project Services - <a href="5-ps2.html#SP7">&#167;7</a><br>Source Text - <a href="6-st.html#SP1">&#167;1</a>, <a href="6-st.html#SP2">&#167;2</a>, <a href="6-st.html#SP4">&#167;4</a>, <a href="6-st.html#SP12">&#167;12</a><br>Headings - <a href="6-hdn.html#SP13_1">&#167;13.1</a>, <a href="6-hdn.html#SP13_2">&#167;13.2</a>, <a href="6-hdn.html#SP23_1">&#167;23.1</a>, <a href="6-hdn.html#SP24_1">&#167;24.1</a>, <a href="6-hdn.html#SP23_2">&#167;23.2</a>, <a href="6-hdn.html#SP23_3">&#167;23.3</a><br>Inclusions - <a href="6-inc.html#SP3_1">&#167;3.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a>, <a href="6-inc.html#SP7_1">&#167;7.1</a>, <a href="6-inc.html#SP9_1">&#167;9.1</a>, <a href="6-inc.html#SP11">&#167;11</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">copy_error</span><span class="plain"> *</span><span class="identifier">CE</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no copy to attach to"</span><span class="plain">);</span>
<span class="functiontext"><a href="2-ce.html#SP4">CopyErrors::supply_attached_copy</a></span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="reserved">copy_error</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">errors_reading_source_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::list_attached_errors<button class="popup" onclick="togglePopup('usagePopup72')">...<span class="popuptext" id="usagePopup72">Usage of <b>Copies::list_attached_errors</b>:<br><a href="#SP9">&#167;9</a>, Project Services - <a href="5-ps2.html#SP5">&#167;5</a><br>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">copy_error</span><span class="plain"> *</span><span class="identifier">CE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="reserved">copy_error</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">errors_reading_source_text</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d. "</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">++); </span><span class="functiontext"><a href="2-ce.html#SP5">CopyErrors::write</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Writing. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::write_copy<button class="popup" onclick="togglePopup('usagePopup73')">...<span class="popuptext" id="usagePopup73">Usage of <b>Copies::write_copy</b>:<br>Build Graphs - <a href="3-bg.html#SP6">&#167;6</a>, <a href="3-bg.html#SP7">&#167;7</a>, <a href="3-bg.html#SP9_1">&#167;9.1</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="functiontext"><a href="2-edt.html#SP1">Editions::write</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Reading source text. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Copies::source_text_has_been_read<button class="popup" onclick="togglePopup('usagePopup74')">...<span class="popuptext" id="usagePopup74">Usage of <b>Copies::source_text_has_been_read</b>:<br>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no copy"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">source_text_read</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="functiontext">Copies::get_source_text<button class="popup" onclick="togglePopup('usagePopup75')">...<span class="popuptext" id="usagePopup75">Usage of <b>Copies::get_source_text</b>:<br>Inbuild Control - <a href="1-ic.html#SP9">&#167;9</a><br>Extension Manager - <a href="4-em.html#SP8">&#167;8</a><br>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br>Extension Documentation - <a href="7-ed2.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">source_text_read</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">source_text_read</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">feed_t</span><span class="plain"> </span><span class="identifier">id</span><span class="plain"> = </span><span class="identifier">Feeds::begin</span><span class="plain">();</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_READ_SOURCE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Feeds::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">source_text</span><span class="plain"> = </span><span class="identifier">W</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">source_text</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Going operational. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::construct_graph<button class="popup" onclick="togglePopup('usagePopup76')">...<span class="popuptext" id="usagePopup76">Usage of <b>Copies::construct_graph</b>:<br>Inbuild Control - <a href="1-ic.html#SP11">&#167;11</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. Miscellaneous Inbuild commands. </b>This function implements the command-line instruction to <code class="display"><span class="extract">-inspect</span></code>.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::inspect<button class="popup" onclick="togglePopup('usagePopup77')">...<span class="popuptext" id="usagePopup77">Usage of <b>Copies::inspect</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S: "</span><span class="plain">, </span><span class="functiontext"><a href="2-gnr.html#SP1">Genres::name</a></span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">));</span>
<span class="functiontext"><a href="2-edt.html#SP3">Editions::inspect</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">location_if_path</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" at path %p"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">location_if_path</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">location_if_file</span><span class="plain">) {</span>
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Filenames::get_path_to</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">location_if_file</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" in directory %p"</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">LinkedLists::len</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">errors_reading_source_text</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" - %d error"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"s"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">INDENT</span><span class="plain">; </span><span class="functiontext"><a href="#SP5">Copies::list_attached_errors</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">); </span><span class="identifier">OUTDENT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b>And here are <code class="display"><span class="extract">-build</span></code> and <code class="display"><span class="extract">-rebuild</span></code>, though note that <code class="display"><span class="extract">Copies::build</span></code>
is also called by the <code class="display"><span class="extract">core</span></code> module of the Inform 7 compiler to perform
its main task: building an Inform project.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::build<button class="popup" onclick="togglePopup('usagePopup78')">...<span class="popuptext" id="usagePopup78">Usage of <b>Copies::build</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">BM</span><span class="plain">) {</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="functiontext"><a href="3-ib.html#SP5">IncrementalBuild::build</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">BM</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::rebuild<button class="popup" onclick="togglePopup('usagePopup79')">...<span class="popuptext" id="usagePopup79">Usage of <b>Copies::rebuild</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">BM</span><span class="plain">) {</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="functiontext"><a href="3-ib.html#SP5">IncrementalBuild::rebuild</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">BM</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b>Now in quick succession <code class="display"><span class="extract">-graph</span></code>, <code class="display"><span class="extract">-build-needs</span></code>, <code class="display"><span class="extract">-use-needs</span></code>, <code class="display"><span class="extract">-build-missing</span></code>,
<code class="display"><span class="extract">-use-missing</span></code>:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::show_graph<button class="popup" onclick="togglePopup('usagePopup80')">...<span class="popuptext" id="usagePopup80">Usage of <b>Copies::show_graph</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="functiontext"><a href="3-bg.html#SP6">Graphs::describe</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::show_needs<button class="popup" onclick="togglePopup('usagePopup81')">...<span class="popuptext" id="usagePopup81">Usage of <b>Copies::show_needs</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">uses_only</span><span class="plain">) {</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="functiontext"><a href="3-bg.html#SP7">Graphs::show_needs</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">, </span><span class="identifier">uses_only</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::show_missing<button class="popup" onclick="togglePopup('usagePopup82')">...<span class="popuptext" id="usagePopup82">Usage of <b>Copies::show_missing</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">uses_only</span><span class="plain">) {</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext"><a href="3-bg.html#SP8">Graphs::show_missing</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">, </span><span class="identifier">uses_only</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Nothing is missing\n"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b>And here is <code class="display"><span class="extract">-archive</span></code> and <code class="display"><span class="extract">-archive-to N</span></code>:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::archive<button class="popup" onclick="togglePopup('usagePopup83')">...<span class="popuptext" id="usagePopup83">Usage of <b>Copies::archive</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">inbuild_nest</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">BM</span><span class="plain">) {</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NM</span><span class="plain"> = </span><span class="functiontext"><a href="3-bg.html#SP8">Graphs::show_missing</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NM</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Because there are missing resources, -archive is cancelled\n"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">) </span><span class="functiontext"><a href="3-bg.html#SP9">Graphs::archive</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">BM</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>And lastly <code class="display"><span class="extract">-copy-to N</span></code> and <code class="display"><span class="extract">-sync-to N</span></code>:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::copy_to<button class="popup" onclick="togglePopup('usagePopup84')">...<span class="popuptext" id="usagePopup84">Usage of <b>Copies::copy_to</b>:<br>Build Graphs - <a href="3-bg.html#SP9_1">&#167;9.1</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">inbuild_nest</span><span class="plain"> *</span><span class="identifier">destination_nest</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">syncing</span><span class="plain">,</span>
<span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">meth</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">destination_nest</span><span class="plain">)</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">genre</span><span class="plain">, </span><span class="constant">GENRE_COPY_TO_NEST_MTID</span><span class="plain">,</span>
<span class="identifier">C</span><span class="plain">, </span><span class="identifier">destination_nest</span><span class="plain">, </span><span class="identifier">syncing</span><span class="plain">, </span><span class="identifier">meth</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::overwrite_error<button class="popup" onclick="togglePopup('usagePopup85')">...<span class="popuptext" id="usagePopup85">Usage of <b>Copies::overwrite_error</b>:<br>Extension Manager - <a href="4-em.html#SP7">&#167;7</a><br>Kit Manager - <a href="4-km.html#SP6">&#167;6</a><br>Language Manager - <a href="4-lm.html#SP6">&#167;6</a><br>Pipeline Manager - <a href="4-pm.html#SP6">&#167;6</a><br>Template Manager - <a href="4-tm.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">inbuild_nest</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">, </span><span class="string">"%X"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">);</span>
<span class="identifier">Errors::with_text</span><span class="plain">(</span><span class="string">"already present (to overwrite, use -sync-to not -copy-to): '%S'"</span><span class="plain">, </span><span class="identifier">ext</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-edt.html">Back to 'Editions'</a></li><li><a href="2-ce.html">Continue with 'Copy Errors'</a></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
</body>
</html>