
<h2>Geavanceerd gebruik van OEF</h2>

<h3>Verberg de naam van een plaatje</h3>
Als de oefening vraagt om een willekeurige afbeelding te herkennen,
geeft de naam van zo'n bestand vaan een aanwijzing.
Om de naam te verbergen:
<pre>\img{\imagedir/picture.jpg alt="picture"}</pre>

In het browservenster zal de computervaardige leerling kunnen zien:
<pre>&lt;img src="een_willekeurige_naam" alt="picture"></pre>

De echte bestands naam is dus verborgen voor de leerling.

<p><b>Opmerking</b>.
Het direct gebruik van het WIMS commando <em>rename</em> voor dit doel wordt
niet aangeraden: de oefening zal dan onder omstandigheden niet meer functioneren.
</p>
<h3>Oefeningen met meerdere stappen</h3>
Een "multi-step" oefening kan met het commando <span class="tt wims_code_variable">\steps</span>
worden geactiveerd.
<br>Bijvoorbeeld:<br>

<pre>\steps{choice 1, reply 1
choice 2, reply 2, reply 3
choice 3
}</pre>

Hier zal de oefening een 3-tal stappen geven, zo kan de eerste stap
een meerkeuze vraag [ choice 1 ] en een open_antwoord [ reply 1 ] verwachten.
De tweede stap zal ook een meerkeuze [ choice 2 ] en een tweetal open_antwoorden verwachten [reply 2 , reply 3].
De derde en laatste stap is weer een meerkeuze vraag [ choice 3 ] .
<p>
De sleutels van het commando <span class="tt wims_code_variable">\steps</span>
accepteerd parameters [gedefinieerde variabelen] als ook condities !
<br>
De default instelling van <span class="tt wims_code_variable">\steps</span> is dat een fout in een bepaalde stap de
oefening beeindigd, en dat voor de resterende stappen het cijfer 0 wordt gegeven.
Er is de mogelijkheid om hiervan af te wijken.
<p>
Het volgnummer van een stap wordt opgeslagen in de variabele <span class="tt wims_code_variable">\step</span>,
en is oproepbaar in het <em>statement</em> van de OEF.
De eerste stap geeft dus <span class="tt wims_code_words">\step = 1</span>
Als de leerling bezig is met de tweede stap in de OEF wordt de variabele <span class="tt wims_code_words">\step = 2</span> enz.
</p><p>
Om met multi-step OEF's nog interactiever te reageren op de antwoorden van leerlingen,
is het commando <span class="tt wims_code_words">\nextstep{...}</span>.
De sleutel die dit commando accepteerd is vergelijkbaar met <span class="tt wims_code_words">\steps{...}</span>
Beide commando's mogen niet door elkaar gebruikt worden.
</p>

<h3>Het if-statement en for loops</h3>

Beschikbare commando's:

<pre>
\if{condition}{conditie_is_waar_inhoud}
\if{condition}{conditie_is_waar_inhoud}{zo_niet_dan_dit}
\ifval{condition}{conditie_is_waar_inhoud}
\ifval{condition}{conditie_is_waar_inhoud}{zo_niet_dan_dit}
\for{var=n1 to n2}{loop_inhoud}
\while{condition}{loop_inhoud} (alleen in het <span class="tt wims_code_words">main</span> gedeelte van OEF)
</pre>

Als deze commando's [behalve de while loop] kunnen overal in OEF worden aangeroepen:
in het <span class="tt wims_code_words">main</span> gedeelte van een OEF script, in het <span class="tt wims_code_words">\statement{}</span>,
in de <span class="tt wims_code_words">\hint{}</span>,
de <span class="tt wims_code_words">\solution{}</span> en <span class="tt wims_code_words">\feedback{}</span>
Uitzondering is de <span class="tt wims_code_words">\while{}{}</span> loop: deze kan alleen worden gebruikt bij de variabele definities/declaraties in het main gedeelte van een OEF script
<a id="special"></a>

<h3>cpp codering</h3>

Dit systeem is niet beschikbaar vanuit het Createxo hulpmiddel.<br>
Via Modtool kunt U dit systeem inzetten voor het compact produceren van random
oefeningen in OEF of Deductio.
<p>
Dit <span class="tt">cpp</span> systeem maakt hergebruik van overeenkomstige code mogelijk:
diverse OEF scripten kunnen deze gemeenschappelijke code aanroepen [compile time].
En op deze manier is "bulk productie" van oefeningen mogelijk.
</p><p>
Om dit systeem te gebruikem moet er eerst een subdirectory src/cpp worden aangemaakt,
waarin alle *.cpp scripten worden geplaatst.
U kunt gebruik maken van preproccessor statements als <span class="tt wims_code_words">#include</span> of <span class="tt wims_code_words">#if</span>.
(Lees de cpp handleiding voor meer details van de te gebruiken syntax.)
</p><p>
De eerste regel van een *.cpp bestand moet een lijst van targets definieren,
zoals
</p>
<pre>
target=oefening_1 oefening_2 oefening_3 ...
</pre>
Deze regel zorgt ervoor dat het cpp systeem in de <em>src directory</em> de volgende OEF scripten aanmaakt:
oefening_1.oef oefening_2.oef oefening_3.oef ...

Wanneer de file <em>oefening_1</em> wordt gegenereerd, het
predicaat <span class="tt">#TARGET</span> wordt defenieerd als <em>oefening_1</em>.
(en een macro <em>TARGET_oefening_1</em> wordt eveneens aangemaakt.)
Hiertoe kan in de cpp code worden vermeld:
<pre>
#if defined TARGET_oefening_1
 \title{Opdracht 1}
 \integer{v1=3}
 \text{t1=dit is target 1}
#endif
#if defined TARGET_oefening_2
 \title{Opdracht 2}
 \integer{v1=5}
 \text{t1=dit is target 2}
#endif
</pre>
zodat de inhoud target afhankelijk kan worden.
<p>
The name of the file (in the example,
<span class="tt wims_code_words">targ1</span>, ...)
is available by the variable
<span class="tt wims_code_words">OEFFILE</span>.
In the following example, the title of the exercise will be
<span class="tt wims_code_words">oefening_1</span>
</p>
<pre>
#if defined TARGET_oefening_1
 \title{OEFFILE}
 \integer{v1=3}
 \text{t1=dit is target 1}
#endif
</pre>
<p>
Alle include bestanden met een uitgang <span class="tt">*.inc</span> moeten ook in de directory src/cpp worden geplaatst.
</p><p>
De regel
<pre>
#include "common.inc"
</pre>
zal de inhoud van de file genaamd common.inc invoegen in het corresponderende OEF script.
Let op: om beveiligins redenen is het niet mogelijk het pad naar een include file aan te geven.
Ze moeten in dezelde directory worden geplaatst als de cpp bestanden.
<p>
Opmerking:<br>
De cpp processor raakt in de war als er een oneven aantal aanhalingstekens worden gebruikt.<br>
U kunt gewone opmerkingen bij de code beschermen door (<span class="tt">/* ... */</span>).
</p>
<div class="wims_warning">
<span class="wims_warning">$wims_name_warning</span> : Alle commando's beginnende met een "#", zoals in
<span class="tt">#include</span>, de <span class="tt">#</span> moet het eerste teken zijn op een regel.
Een <span class="tt">#</span> is hier geen kommentaar teken.
</div>

<h3>oefenv en debug</h3>
De speciale omgevings variabele <span class="tt wims_code_variable">\oefenv</span> kan worden gebruikt om het gecompileerde OEF
script te testen.
<p>
Op dit moment is alleen de variabele <span class="tt wims_code_words">debug</span> actief binnen <span class="tt wims_code_variable">\oefenv</span> in de
volgende situaties:
</p>
<ol>
<li>OEF wordt uitgevoerd binnen het hulpmiddel Createxo.
<li>OEF wordt uitgevoerd door de ontwikkelaar zelf binnen het hulpmiddel Modtool
<li>OEF is een script binnen een klas [klasse oefening] en als ze wordt uitgevoerd door de supervisor van de klas
</ol>
Opmerking: in al deze gevallen zal het door uw OEF gedefinieerde goede antwoord worden getoond in het invulveld.
<p>
De syntax voor het aanroepen van de debug info is :
</p>
<pre>
\if{debug iswordof \oefenv}{de gewenste debug informatie }
</pre>
Deze info wordt automatisch getoond als de oefening wordt getest.
Wanneer de oefening in gebruik is door een leerling, wordt deze niet getoond.
