1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/supervisor-module/3-bs2.html

233 lines
23 KiB
HTML
Raw Normal View History

2020-02-27 13:18:25 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
2020-04-14 19:56:54 +03:00
<title>Build Steps</title>
2020-03-19 02:11:25 +02:00
<meta name="viewport" content="width=device-width initial-scale=1">
2020-02-27 13:18:25 +02:00
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
2020-03-19 02:11:25 +02:00
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
2020-04-14 19:56:54 +03:00
2020-02-27 13:18:25 +02:00
</head>
<body>
2020-03-19 02:11:25 +02:00
<nav role="navigation">
2020-04-14 19:56:54 +03:00
<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>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
</ul><h2>Compiler Webs</h2><ul>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="index.html"><span class="selectedlink">supervisor</span></a></li>
</ul><h2>Inform7 Modules</h2><ul>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
<li><a href="../problems-module/index.html">problems</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../index-module/index.html">index</a></li>
2020-04-14 19:56:54 +03:00
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
2020-04-14 19:56:54 +03:00
</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>
2020-03-19 02:11:25 +02:00
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
2020-04-14 19:56:54 +03:00
</ul>
2020-03-19 02:11:25 +02:00
</nav>
<main role="main">
2020-04-14 19:56:54 +03:00
<!--Weave of 'Build Steps' 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#3">Chapter 3: Incremental Builds</a></li><li><b>Build Steps</b></li></ul><p class="purpose">A build step is a task which exercises one of the build skills.</p>
2020-02-27 13:18:25 +02:00
2020-03-30 14:23:06 +03:00
<ul class="toc"><li><a href="#SP1">&#167;1. Build skills</a></li><li><a href="#SP3">&#167;3. Build steps</a></li><li><a href="#SP5">&#167;5. Execution</a></li></ul><hr class="tocbar">
2020-02-27 13:18:25 +02:00
2020-03-30 14:23:06 +03:00
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Build skills. </b>A "skill" is a single atomic task which we know how to perform. For example,
assimilating a binary for a kit is a skill.
</p>
<p class="inwebparagraph">Each different skill is an instance of:
</p>
2020-02-27 13:18:25 +02:00
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_skill</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">;</span>
<span class="identifier">METHOD_CALLS</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">build_skill</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">build_skill</span><span class="plain"> *</span><span class="functiontext">BuildSteps::new_skill<button class="popup" onclick="togglePopup('usagePopup146')">...<span class="popuptext" id="usagePopup146">Usage of <b>BuildSteps::new_skill</b>:<br>Inter Skill - <a href="3-is.html#SP1">&#167;1</a><br>Inform7 Skill - <a href="3-is2.html#SP1">&#167;1</a><br>Inform6 Skill - <a href="3-is3.html#SP1">&#167;1</a><br>Inblorb Skill - <a href="3-is4.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">build_skill</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">build_skill</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">ENABLE_METHOD_CALLS</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">S</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure build_skill is private to this section.</p>
2020-03-30 14:23:06 +03:00
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Skills provide two method functions: one constructs a shell command to
perform the skill, and the other performs the skill directly by calling some
function within the current executable. These methods are optional, and if
one is absent then the skill can't be performed that way.
</p>
2020-02-27 13:18:25 +02:00
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">BUILD_SKILL_COMMAND_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">BUILD_SKILL_INTERNAL_MTID</span>
</pre>
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BUILD_SKILL_COMMAND_MTID</span><span class="plain">,</span>
<span class="reserved">build_skill</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_step</span><span class="plain"> *</span><span class="identifier">BS</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</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="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BUILD_SKILL_INTERNAL_MTID</span><span class="plain">,</span>
<span class="reserved">build_skill</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_step</span><span class="plain"> *</span><span class="identifier">BS</span><span class="plain">, </span><span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">meth</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
2020-03-30 14:23:06 +03:00
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Build steps. </b>These are essentially just skills, but with a docket of contextual data. The
2020-04-14 19:56:54 +03:00
idea is that a function outside the <code class="display"><span class="extract">supervisor</span></code> module can carry out a skill
2020-03-30 14:23:06 +03:00
for us using only the contextual information in this structure, without having
to access any of <code class="display"><span class="extract">inbuild</span></code>'s variables directly.
</p>
2020-02-27 13:18:25 +02:00
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_step</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_skill</span><span class="plain"> *</span><span class="identifier">what_to_do</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<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"> what to do it to</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">search_path</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">inbuild_nest</span></code></span>
2020-02-27 13:18:25 +02:00
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">for_vm</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_architecture</span><span class="plain"> *</span><span class="identifier">for_arch</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">for_release</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">associated_copy</span><span class="plain">; </span><span class="comment"> e.g., the Inform project causing this work</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">build_step</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-14 19:56:54 +03:00
<p class="endnote">The structure build_step is accessed in 2/cps, 3/bg, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/km, 5/ks, 5/ps2, 6/hdn, 6/inc and here.</p>
2020-02-27 13:18:25 +02:00
2020-03-30 14:23:06 +03:00
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>We build scripts for a vertex by attaching one step at a time to it:
</p>
2020-02-27 13:18:25 +02:00
<pre class="display">
2020-04-14 19:56:54 +03:00
<span class="reserved">build_step</span><span class="plain"> *</span><span class="functiontext">BuildSteps::attach<button class="popup" onclick="togglePopup('usagePopup147')">...<span class="popuptext" id="usagePopup147">Usage of <b>BuildSteps::attach</b>:<br>Kits - <a href="5-ks.html#SP13_1">&#167;13.1</a><br>Project Services - <a href="5-ps2.html#SP4">&#167;4</a></span></button></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="reserved">build_skill</span><span class="plain"> *</span><span class="identifier">to_do</span><span class="plain">, </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">search</span><span class="plain">,</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">inter_architecture</span><span class="plain"> *</span><span class="identifier">arch</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">assoc</span><span class="plain">) {</span>
<span class="reserved">build_step</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">build_step</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">what_to_do</span><span class="plain"> = </span><span class="identifier">to_do</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain"> = </span><span class="identifier">vertex</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">search_path</span><span class="plain"> = </span><span class="identifier">search</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">for_vm</span><span class="plain"> = </span><span class="identifier">VM</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">for_arch</span><span class="plain"> = </span><span class="identifier">arch</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">VM</span><span class="plain">) &amp;&amp; (</span><span class="identifier">arch</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">for_arch</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_architecture</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">for_release</span><span class="plain"> = </span><span class="identifier">rel</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">associated_copy</span><span class="plain"> = </span><span class="identifier">assoc</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="3-bs.html#SP1">BuildScripts::add_step</a></span><span class="plain">(</span><span class="identifier">vertex</span><span class="plain">-&gt;</span><span class="element">script</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">S</span><span class="plain">;</span>
<span class="plain">}</span>
2020-03-30 14:23:06 +03:00
</pre>
<p class="inwebparagraph"></p>
2020-02-27 13:18:25 +02:00
2020-03-30 14:23:06 +03:00
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Execution. </b>Note that this prints a log of shell commands generated to <code class="display"><span class="extract">stdout</span></code> when
we are running inside Inbuild at the command line, but not when we are running
inside the <code class="display"><span class="extract">inform7</span></code> executable, where we are silent throughout.
</p>
<pre class="display">
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">BuildSteps::execute<button class="popup" onclick="togglePopup('usagePopup148')">...<span class="popuptext" id="usagePopup148">Usage of <b>BuildSteps::execute</b>:<br>Build Scripts - <a href="3-bs.html#SP2">&#167;2</a></span></button></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="reserved">build_step</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">BM</span><span class="plain">) {</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">);</span>
2020-03-30 14:23:06 +03:00
&lt;<span class="cwebmacro">Work out a shell command, and perhaps print or call it</span> <span class="cwebmacronumber">5.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Perform the skill internally if that's called for</span> <span class="cwebmacronumber">5.2</span>&gt;<span class="character">;</span>
2020-03-11 02:21:09 +02:00
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"Build failed at '%S'\n"</span><span class="plain">, </span><span class="identifier">command</span><span class="plain">);</span>
2020-03-11 02:21:09 +02:00
<span class="plain">#</span><span class="identifier">endif</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
2020-03-30 14:23:06 +03:00
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5_1"></a><b>&#167;5.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Work out a shell command, and perhaps print or call it</span> <span class="cwebmacronumber">5.1</span>&gt; =
</code></p>
2020-02-27 13:18:25 +02:00
2020-03-30 14:23:06 +03:00
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">what_to_do</span><span class="plain">, </span><span class="constant">BUILD_SKILL_COMMAND_MTID</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">BM</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">rv</span><span class="plain"> = </span><span class="functiontext"><a href="#SP6">BuildSteps::shell</a></span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">BM</span><span class="plain">);</span>
2020-03-30 14:23:06 +03:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP5">&#167;5</a>.</p>
<p class="inwebparagraph"><a id="SP5_2"></a><b>&#167;5.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Perform the skill internally if that's called for</span> <span class="cwebmacronumber">5.2</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BM</span><span class="plain">-&gt;</span><span class="element">methodology</span><span class="plain"> == </span><span class="constant">INTERNAL_METHODOLOGY</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">returned</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">returned</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">what_to_do</span><span class="plain">, </span><span class="constant">BUILD_SKILL_INTERNAL_MTID</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">BM</span><span class="plain">);</span>
2020-03-30 14:23:06 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">returned</span><span class="plain"> != </span><span class="identifier">TRUE</span><span class="plain">) </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP5">&#167;5</a>.</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>This prints a shell command to <code class="display"><span class="extract">stdout</span></code> (except when inside <code class="display"><span class="extract">inform7</span></code>)
and also executes it if the methodology allows, returning the result. Note
that shell commands return 0 to indicate happiness.
</p>
<pre class="display">
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">BuildSteps::shell<button class="popup" onclick="togglePopup('usagePopup149')">...<span class="popuptext" id="usagePopup149">Usage of <b>BuildSteps::shell</b>:<br><a href="#SP5_1">&#167;5.1</a>, Extension Manager - <a href="4-em.html#SP7">&#167;7</a><br>Pipeline Manager - <a href="4-pm.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</span><span class="plain">, </span><span class="reserved">build_methodology</span><span class="plain"> *</span><span class="identifier">BM</span><span class="plain">) {</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
2020-03-11 02:21:09 +02:00
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"%S\n"</span><span class="plain">, </span><span class="identifier">command</span><span class="plain">);</span>
2020-03-11 02:21:09 +02:00
<span class="plain">#</span><span class="identifier">endif</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BM</span><span class="plain">-&gt;</span><span class="element">methodology</span><span class="plain"> == </span><span class="constant">SHELL_METHODOLOGY</span><span class="plain">)</span>
<span class="identifier">rv</span><span class="plain"> = (</span><span class="identifier">Shell::run</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)?</span><span class="identifier">TRUE:FALSE</span><span class="plain">;</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="3-bs.html">Back to 'Build Scripts'</a></li><li><a href="3-is.html">Continue with 'Inter Skill'</a></li></ul><hr class="tocbar">
<!--End of weave-->
2020-04-14 19:56:54 +03:00
<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">
2020-03-19 02:11:25 +02:00
</main>
2020-02-27 13:18:25 +02:00
</body>
</html>