<snapdata remixID="10201762"><project name="snap4thymio-2.6-DataSprite" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="true" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Thymio" idx="1" x="0" y="-2.842170943040401e-14" heading="90" scale="1" volume="100" pan="0" rotation="2" draggable="true" costume="1" color="80,80,80,1" pen="tip" id="8"><costumes><list id="9"><item><costume name="thymio-II" center-x="55" center-y="55.5" image="data:image/png;base64,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" id="10"/></item></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables><variable name="tab0"><l>0</l></variable><variable name="tab1"><l>0</l></variable><variable name="tab2"><l>Got a PUT request at M_motor_timed</l></variable></variables><scripts><script x="14" y="14"><custom-block s="$robot initialise le Thymio %n URL %s"><l>1</l><l>localhost</l><comment w="157" collapsed="false">Initialise et execute le programme indispensable pour contrôler le thymio selectionné à distance et donc les programmes ci-dessous</comment></custom-block><block s="doForever"><script><block s="doSetVar"><l>capteurs</l><custom-block s="$robot mettre à jour les capteurs"></custom-block></block><custom-block s="$robot affichage des capteurs Thymio"></custom-block><custom-block s="$robot contrôle le robot au clavier"></custom-block></script></block></script><script x="15" y="137"><custom-block s="$robot joue le thème de Mario"></custom-block></script><script x="260" y="102.66666666666663"><custom-block s="$robot Von Koch, niveau: %n taille: %n"><l>3</l><l>4</l></custom-block></script><script x="209" y="134.66666666666663"><custom-block s="$robot joue la suite de Syracuse N= %n octave %n"><l>15</l><l>3</l></custom-block></script><comment x="13.333335876464844" y="172.66666666666688" w="418" collapsed="false">Ecrire, compiler puis executer un programme directement sur le Thymio de son choix</comment><script x="14" y="226.00000000000003"><custom-block s="$robot Compile le code Aseba suivant: %s pour le lancer sur le thymio %n"><custom-block s="$robot $gearBig DEMO: Thymio Explorateur"></custom-block><l>1</l></custom-block></script><script x="12" y="275"><custom-block s="$robot $gearBig DEMO: RouleBalle"></custom-block></script><script x="182" y="273"><custom-block s="$robot $gearBig DEMO : Thymio suit notre main"></custom-block></script><script x="235.95703125" y="300"><custom-block s="$robot $gearBig LOGO: Dessine une fleur"></custom-block></script><script x="12.95703125" y="300"><custom-block s="$robot $gearBig DEMO: Thymio Suit la ligne"></custom-block></script></scripts></sprite><sprite name="Data" idx="2" x="-234.99999999999932" y="177.66480446927372" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="0,40.39199999999995,183.6,1" pen="tip" id="42"><wear><costume name="" center-x="0" center-y="0" image="data:image/png;base64,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" id="43"/></wear><costumes><list struct="atomic" id="44"></list></costumes><sounds><list struct="atomic" id="45"></list></sounds><blocks></blocks><variables><variable name="myCostume"><ref id="43"></ref></variable><variable name="myProperties"><list id="48"><item><list struct="atomic" id="49">type,empty</list></item><item><list struct="atomic" id="50">width,470</list></item><item><list struct="atomic" id="51">height,350</list></item><item><list struct="atomic" id="52">backColorRed,255</list></item><item><list struct="atomic" id="53">backColorGreen,225</list></item><item><list struct="atomic" id="54">backColorBlue,205</list></item><item><list struct="atomic" id="55">leftOffset,77</list></item><item><list struct="atomic" id="56">upperOffset,30</list></item><item><list struct="atomic" id="57">lowerOffset,37</list></item><item><list struct="atomic" id="58">title,Capteur d&apos;accélération en X</list></item><item><list struct="atomic" id="59">titleHeight,20</list></item><item><list struct="atomic" id="60">xLabel,temps (s)</list></item><item><list struct="atomic" id="61">xLabelHeight,15</list></item><item><list struct="atomic" id="62">yLabel,valeurs du capteur</list></item><item><list struct="atomic" id="63">yLabelHeight,15</list></item><item><list struct="atomic" id="64">xLeft,0</list></item><item><list struct="atomic" id="65">xRight,20</list></item><item><list struct="atomic" id="66">yLower,-20</list></item><item><list struct="atomic" id="67">yUpper,25</list></item><item><list struct="atomic" id="68">lineStyle,continuous</list></item><item><list struct="atomic" id="69">lineWidth,1</list></item><item><list struct="atomic" id="70">lineColorRed,0</list></item><item><list struct="atomic" id="71">lineColorGreen,0</list></item><item><list struct="atomic" id="72">lineColorBlue,0</list></item><item><list struct="atomic" id="73">datapointStyle,x_ex</list></item><item><list struct="atomic" id="74">datapointWidth,8</list></item><item><list id="75"><item><l>datapointConnected</l></item><item><bool>true</bool></item></list></item><item><list struct="atomic" id="76">datapointColorRed,0</list></item><item><list struct="atomic" id="77">datapointColorGreen,0</list></item><item><list struct="atomic" id="78">datapointColorBlue,0</list></item><item><list struct="atomic" id="79">scalesPrecision,3</list></item><item><list struct="atomic" id="80">scalesTextheight,12</list></item><item><list struct="atomic" id="81">scalesNumberXintervals,10</list></item><item><list struct="atomic" id="82">minValue,0</list></item><item><list struct="atomic" id="83">maxValue,0</list></item><item><list struct="atomic" id="84">columns,0</list></item><item><list struct="atomic" id="85">rows,0</list></item></list></variable><variable name="myData"><list struct="atomic" id="86"></list></variable></variables><scripts><script x="20" y="28"><block s="show"></block></script><script x="89" y="28"><block s="hide"></block></script><script x="150" y="26"><custom-block s="$storage Nettoyer Data"></custom-block></script><script x="17.7255859375" y="71"><custom-block s="$robot mise à jour automatique des capteurs"></custom-block></script><script x="275" y="70"><custom-block s="$storage export %s to CSV file %txt"><block var="data0"/><l>Tableau acquisition</l></custom-block></script><script x="276" y="32"><block var="data0"/></script><script x="328" y="31"><block var="data1"/></script><script x="378.83333333333337" y="31"><block var="data2"/></script><script x="18" y="115"><custom-block s="$storage Graphique temps réel : capteurs de sol"></custom-block></script><script x="280" y="114.66666666666652"><custom-block s="$storage Graphique temps réel : 3 capteurs accélération"></custom-block></script><script x="18" y="160.66666666666654"><custom-block s="$storage Etiquette : Titre %txt abscisses %txt ordonnées %txt"><l>Capteur de distance frontal du thymio</l><l>temps (s)</l><l>valeur du capteur</l></custom-block><custom-block s="$storage Acquisition graphique temps réel de %cmdRing en %n points en continu avec ymin %n et ymax %n"><block s="reifyReporter"><autolambda><custom-block s="$robot prox.horizontal[ %n ]"><l>2</l></custom-block></autolambda><list></list></block><l>150</l><l>0</l><l>4800</l></custom-block></script><script x="17" y="263.66666666666663"><custom-block s="$storage Etiquette : Titre %txt abscisses %txt ordonnées %txt"><l>Capteur d&apos;accélération en X</l><l>temps (s)</l><l>valeurs du capteur</l></custom-block><custom-block s="$storage Acquisition numérique plus précise mais ASYNCHRONE de %cmdRing pendant %n secondes avec ymin %n et ymax %n"><block s="reifyReporter"><autolambda><custom-block s="$robot acc[ %n ]"><l>0</l></custom-block></autolambda><list></list></block><l>12</l><l>-20</l><l>25</l></custom-block></script></scripts></sprite><watcher scope="Thymio" var="tab0" style="normal" x="2.8006525099044666e-8" y="2.8006521546330987e-8" color="243,118,29" hidden="true"/><watcher scope="Thymio" var="tab1" style="normal" x="2.8006525099044666e-8" y="8.682024343897865e-8" color="243,118,29" hidden="true"/><watcher var="asebacode" style="normal" x="0" y="0" color="243,118,29" hidden="true"/><watcher scope="Thymio" var="tab2" style="normal" x="0.0020148031171629555" y="0.009268094342232303" color="243,118,29" hidden="true"/><watcher var="data0" style="normal" x="3.729166666666515" y="11.560417412499973" color="243,118,29" hidden="true"/><watcher var="data1" style="normal" x="3.729166666666515" y="19.391668158333324" color="243,118,29" hidden="true"/><watcher var="chrono (ms)" style="normal" x="3.729166666666515" y="35.054169650000006" color="243,118,29" hidden="true"/><watcher var="capteurs" style="normal" x="14.916666666666742" y="14.916666666666679" color="243,118,29" hidden="true"/><watcher var="node" style="normal" x="14.916666666666742" y="46.24166964999998" color="243,118,29" hidden="true"/></sprites></stage><hidden></hidden><headers><reportRandom></reportRandom><reportMonadic></reportMonadic><doDeclareVariables></doDeclareVariables></headers><code><string>&lt;#1&gt;</string><number>&lt;#1&gt;</number><tempvars_delim>&#xD;var </tempvars_delim><delim>,</delim><doIf>if &lt;#1&gt; then&#xD;    &lt;#2&gt;&#xD;end</doIf><doIfElse>if &lt;#1&gt; then&#xD;    &lt;#2&gt;&#xD;else &#xD;    &lt;#3&gt;&#xD;end</doIfElse><doReport>return &lt;#1&gt;</doReport><reportSum>(&lt;#1&gt; + &lt;#2&gt;)</reportSum><reportDifference>(&lt;#1&gt; - &lt;#2&gt;)</reportDifference><reportProduct>(&lt;#1&gt; * &lt;#2&gt;)</reportProduct><reportQuotient>(&lt;#1&gt; / &lt;#2&gt;)</reportQuotient><reportModulus>(&lt;#1&gt; % &lt;#2&gt;)</reportModulus><reportRandom></reportRandom><reportMonadic>&lt;#1&gt;(&lt;#2&gt;)</reportMonadic><reportLessThan>(&lt;#1&gt; &lt; &lt;#2&gt;)</reportLessThan><reportEquals>(&lt;#1&gt; == &lt;#2&gt;)</reportEquals><reportGreaterThan>(&lt;#1&gt; &gt; &lt;#2&gt;)</reportGreaterThan><reportAnd>(&lt;#1&gt; and &lt;#2&gt;)</reportAnd><reportOr>(&lt;#1&gt; or &lt;#2&gt;)</reportOr><reportNot>(not &lt;#1&gt;)</reportNot><reportBoolean>0</reportBoolean><reportStringSize>(&lt;#1&gt;.length)</reportStringSize><doSetVar>&lt;#1&gt; = &lt;#2&gt;</doSetVar><doChangeVar>&lt;#1&gt; += &lt;#2&gt;</doChangeVar><doShowVar>print &lt;#1&gt;</doShowVar><doDeclareVariables>var &lt;#1&gt;</doDeclareVariables><reportNewList>[&lt;#1&gt;]</reportNewList><reportListLength>len(&lt;#1&gt;)</reportListLength><reportListItem>&lt;#2&gt;[&lt;#1&gt;]</reportListItem><doAddToList>&lt;#2&gt;.append(&lt;#1&gt;)</doAddToList><doUntil>while (not(&lt;#1&gt;)) do&#xD;    &lt;#2&gt;&#xD;end</doUntil><doRepeat>for i in 1:&lt;#1&gt; do&#xD;    &lt;#2&gt;&#xD;end</doRepeat><doFor>for &lt;#1&gt; in &lt;#2&gt;:&lt;#3&gt; do&#xD;    &lt;#4&gt;&#xD;end</doFor></code><blocks><block-definition s="$robot jouer le son système %&apos;nb&apos;" type="command" category="sound"><header></header><code>call sound.system(&lt;#1&gt;)</code><translations></translations><inputs><input type="%n">3</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>A_sound_system</l><l>/</l><block var="nb"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot jouer le son SD %&apos;nb&apos;" type="command" category="sound"><header></header><code>call sound.play(&lt;#1&gt;)</code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>A_sound_play</l><l>/</l><block var="nb"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot enregistrer le son %&apos;nb&apos;" type="command" category="sound"><header></header><code>call sound.record(&lt;#1&gt;)</code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>A_sound_record</l><l>/</l><block var="nb"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot rejouer le son %&apos;nb&apos;" type="command" category="sound"><header></header><code>call sound.replay(&lt;#1&gt;)</code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>A_sound_replay</l><l>/</l><block var="nb"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot jouer la note %&apos;f&apos; Hz durant %&apos;d&apos; ms" type="command" category="sound"><header></header><code>call sound.freq(&lt;#1&gt;,&lt;#2&gt;)</code><translations></translations><inputs><input type="%n">440</input><input type="%n">1000</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>A_sound_freq</l><l>/</l><block var="f"/><l>/</l><block s="reportQuotient"><block s="reportProduct"><block var="d"/><l>60</l></block><l>1000</l></block></list></block><l></l><list></list></custom-block></block><block s="doWait"><block s="reportQuotient"><block var="d"/><l>1000</l></block></block></script></block-definition><block-definition s="$robot leds.prox.h( %&apos;led1&apos; %&apos;led2&apos; %&apos;led3&apos; %&apos;led4&apos; %&apos;led5&apos; %&apos;led6&apos; %&apos;led7&apos; %&apos;led8&apos; )" type="command" category="looks"><header></header><code>call leds.prox.h(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;,&lt;#4&gt;,&lt;#5&gt;,&lt;#6&gt;,&lt;#7&gt;,&lt;#8&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_prox_h</l><l>/</l><block var="led1"/><l>/</l><block var="led2"/><l>/</l><block var="led3"/><l>/</l><block var="led4"/><l>/</l><block var="led5"/><l>/</l><block var="led6"/><l>/</l><block var="led7"/><l>/</l><block var="led8"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot leds.buttons( %&apos;led1&apos; %&apos;led2&apos; %&apos;led3&apos; %&apos;led4&apos; )" type="command" category="looks"><header></header><code>call leds.buttons(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;,&lt;#4&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_buttons</l><l>/</l><block var="led1"/><l>/</l><block var="led2"/><l>/</l><block var="led3"/><l>/</l><block var="led4"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot moteur(s) Vg %&apos;lspeed&apos; Vd %&apos;rspeed&apos;" type="command" category="motion"><header></header><code>motor.left.target=&lt;#1&gt;&#xD;motor.right.target=&lt;#2&gt;</code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>M_motor_both</l><l>/</l><block var="lspeed"/><l>/</l><block var="rspeed"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot leds.circle( %&apos;led1&apos; %&apos;led2&apos; %&apos;led3&apos; %&apos;led4&apos; %&apos;led5&apos; %&apos;led6&apos; %&apos;led7&apos; %&apos;led8&apos; )" type="command" category="looks"><header></header><code>call leds.circle(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;,&lt;#4&gt;,&lt;#5&gt;,&lt;#6&gt;,&lt;#7&gt;,&lt;#8&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_circle</l><l>/</l><block var="led1"/><l>/</l><block var="led2"/><l>/</l><block var="led3"/><l>/</l><block var="led4"/><l>/</l><block var="led5"/><l>/</l><block var="led6"/><l>/</l><block var="led7"/><l>/</l><block var="led8"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot leds.temperature R %&apos;led1&apos; B %&apos;led2&apos;" type="command" category="looks"><header></header><code>call leds.temperature(&lt;#1&gt;,&lt;#2&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_temperature</l><l>/</l><block var="led1"/><l>/</l><block var="led2"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot leds.rc( %&apos;led&apos; )" type="command" category="looks"><header></header><code>call leds.rc(&lt;#1&gt;)</code><translations></translations><inputs><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_rc</l><l>/</l><block var="led"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot leds.sound( %&apos;led&apos; )" type="command" category="looks"><header></header><code>call leds.sound(&lt;#1&gt;)</code><translations></translations><inputs><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_sound</l><l>/</l><block var="led"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot avancer de %&apos;distance&apos; cm" type="command" category="motion"><header></header><code>tab0[compteur] = 200   #! Avance &lt;#1&gt; cm&#xD;tab1[compteur] = 200&#xD;tab2[compteur] = (av*&lt;#1&gt;)+avb&#xD;compteur += 1</code><translations></translations><inputs><input type="%n">10</input></inputs><script><custom-block s="$robot avancer à la vitesse %n pendant %n ms"><l>200</l><block s="reportSum"><block s="reportProduct"><l>155.0942</l><block var="distance"/></block><l>32.2130</l></block></custom-block></script></block-definition><block-definition s="$robot tourner $turnLeft de %&apos;angle&apos; °" type="command" category="motion"><header></header><code>tab0[compteur] = -200  #! Tourne gauche de &lt;#1&gt; degre(s)&#xD;tab1[compteur] = 200&#xD;tab2[compteur] = tg*&lt;#1&gt;+tgb&#xD;compteur += 1</code><translations></translations><inputs><input type="%n">90</input></inputs><script><custom-block s="$robot tourner $turnLeft à la vitesse %n pendant %n ms"><l>200</l><block s="reportSum"><block s="reportProduct"><l>12.9659</l><block var="angle"/></block><l>33.1600</l></block></custom-block></script></block-definition><block-definition s="$robot tourner $turnRight de %&apos;angle&apos; °" type="command" category="motion"><header></header><code>tab0[compteur] = 200   #! Tourne droite de &lt;#1&gt; degre(s)&#xD;tab1[compteur] = -200&#xD;tab2[compteur] = td*&lt;#1&gt;+tdb&#xD;compteur += 1</code><translations></translations><inputs><input type="%n">90</input></inputs><script><custom-block s="$robot tourner $turnRight à la vitesse %n pendant %n ms"><l>200</l><block s="reportSum"><block s="reportProduct"><l>12.8125</l><block var="angle"/></block><l>13.3286</l></block></custom-block></script></block-definition><block-definition s="$robot $gearBig onevent prox (10Hz loop) %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent prox&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig map to Aseba" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doMapValueCode"><l><option>String</option></l><l>&lt;#1&gt;</l></block><block s="doMapValueCode"><l><option>Number</option></l><l>&lt;#1&gt;</l></block><block s="doMapListCode"><l><option>delimiter</option></l><l><option>variables</option></l><l>&#xD;var </l></block><block s="doMapListCode"><l><option>delimiter</option></l><l><option>collection</option></l><l>,</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doIf"><l/><script></script></block></script><list></list></block><l><option>code</option></l><l>if &lt;#1&gt; then&#xD;    &lt;#2&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doIfElse"><l/><script></script><script></script></block></script><list></list></block><l><option>code</option></l><l>if &lt;#1&gt; then&#xD;    &lt;#2&gt;&#xD;else &#xD;    &lt;#3&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reportIfElse"><l/><l></l><l></l></block><l><option>code</option></l><l>if &lt;#1&gt; then&#xD;    &lt;#2&gt;&#xD;else &#xD;    &lt;#3&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doUntil"><l/><script></script></block></script><list></list></block><l><option>code</option></l><l>while (not(&lt;#1&gt;)) do&#xD;    &lt;#2&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doRepeat"><l>10</l><script></script></block></script><list></list></block><l><option>code</option></l><l>for i in 1:&lt;#1&gt; do&#xD;    &lt;#2&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doFor"><l>i</l><l>1</l><l>10</l><script></script></block></script><list></list></block><l><option>code</option></l><l>for &lt;#1&gt; in &lt;#2&gt;:&lt;#3&gt; do&#xD;    &lt;#4&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; + &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportDifference"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; - &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><custom-block s="- %n"><l></l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>(- &lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; * &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; / &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportModulus"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; % &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportLessThan"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; &lt; &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; == &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l></l></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; &gt; &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportAnd"><l/><l/></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; and &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportOr"><l/><l/></block></autolambda><list></list></block><l><option>code</option></l><l>(&lt;#1&gt; or &lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><block s="reportNot"><l/></block></autolambda><list></list></block><l><option>code</option></l><l>(not &lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><custom-block s="$robot $gearBig BIN %s &gt;&gt; %s"><block var="i"/><l>1</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>&lt;#1&gt; &gt;&gt; &lt;#2&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><autolambda><custom-block s="$robot $gearBig BIN %s &lt;&lt; %s"><block var="i"/><l>1</l></custom-block></autolambda><list></list></block><l><option>code</option></l><l>&lt;#1&gt; &lt;&lt; &lt;#2&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><script></script><list></list></block><l><option>code</option></l><l>0b&lt;#1&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><script><custom-block s="$robot $gearBig call math.min( %s , %s , %s )"><l>motor.left.target</l><l>motor.left.target</l><l>vmax</l></custom-block></script><list></list></block><l><option>code</option></l><l>call math.min(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><script><custom-block s="$robot $gearBig call math.max( %s , %s , %s )"><l>motor.right.target</l><l>motor.right.target</l><l>vmax</l></custom-block></script><list></list></block><l><option>code</option></l><l>call math.max(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>a</l></list></block></script><list></list></block><l><option>code</option></l><l>var &lt;#1&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doSetVar"><l></l><l>0</l></block></script><list></list></block><l><option>code</option></l><l>&lt;#1&gt; = &lt;#2&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig DIM mettre %s [ %n ] à %n"><l></l><l></l><l></l></custom-block></script><list></list></block><l><option>code</option></l><l>&lt;#1&gt;[&lt;#2&gt;] = &lt;#3&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><block s="doChangeVar"><l></l><l>1</l></block></script><list></list></block><l><option>code</option></l><l>&lt;#1&gt; += &lt;#2&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyPredicate"><script><custom-block s="$robot $gearBig mettre %s à un nombre aléatoire (0-32)"><l></l></custom-block></script><list></list></block><l><option>code</option></l><l>call math.rand(&lt;#1&gt;)&#xD;&lt;#1&gt; = abs &lt;#1&gt;&#xD;&lt;#1&gt; = &lt;#1&gt; % 20</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot $gearBig event.args [ %s ]"><l></l></custom-block><l><option>code</option></l><l>event.args[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportNewList"><list></list></block></autolambda><list></list></block><l><option>code</option></l><l>[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><l><option>code</option></l><l>&lt;#2&gt;[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>commentaire de code aseba</l></custom-block></script><list></list></block><l><option>code</option></l><l>##! &lt;#1&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig Retour à la ligne dans le code aseba"></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>100</l><l>100</l></custom-block></script><list></list></block><l><option>code</option></l><l>motor.left.target=&lt;#1&gt;&#xD;motor.right.target=&lt;#2&gt;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot avancer de %n cm"><l>10</l></custom-block></script><list></list></block><l><option>code</option></l><l>tab0[compteur] = 200   #! Avance &lt;#1&gt; cm&#xD;tab1[compteur] = 200&#xD;tab2[compteur] = (av*&lt;#1&gt;)+avb&#xD;compteur += 1</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot tourner $turnRight de %n °"><l>90</l></custom-block></script><list></list></block><l><option>code</option></l><l>tab0[compteur] = 200   #! Tourne droite de &lt;#1&gt; degre(s)&#xD;tab1[compteur] = -200&#xD;tab2[compteur] = td*&lt;#1&gt;+tdb&#xD;compteur += 1</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot tourner $turnLeft de %n °"><l>90</l></custom-block></script><list></list></block><l><option>code</option></l><l>tab0[compteur] = -200  #! Tourne gauche de &lt;#1&gt; degre(s)&#xD;tab1[compteur] = 200&#xD;tab2[compteur] = tg*&lt;#1&gt;+tgb&#xD;compteur += 1</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot avancer à la vitesse %n pendant %n ms"><l>200</l><l>1000</l></custom-block></script><list></list></block><l><option>code</option></l><l>tab0[compteur] = &lt;#1&gt;   #! Avance à la vitesse &lt;#1&gt;&#xD;tab1[compteur] = &lt;#1&gt;   #! pendant &lt;#2&gt; ms&#xD;tab2[compteur] = &lt;#2&gt;&#xD;compteur += 1</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot tourner $turnRight à la vitesse %n pendant %n ms"><l>100</l><l>1000</l></custom-block></script><list></list></block><l><option>code</option></l><l>tab0[compteur] = &lt;#1&gt;    #! Tourne droite à la vitesse &lt;#1&gt;&#xD;tab1[compteur] = -&lt;#1&gt;   #! pendant &lt;#2&gt; ms&#xD;tab2[compteur] = &lt;#2&gt;&#xD;compteur += 1</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot tourner $turnLeft à la vitesse %n pendant %n ms"><l>100</l><l>1000</l></custom-block></script><list></list></block><l><option>code</option></l><l>tab0[compteur] = -&lt;#1&gt;    #! Tourne droite à la vitesse &lt;#1&gt;&#xD;tab1[compteur] = &lt;#1&gt;     #! pendant &lt;#2&gt; ms&#xD;tab2[compteur] = &lt;#2&gt;&#xD;compteur += 1</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot prox.horizontal[ %n ]"><l>2</l></custom-block><l><option>code</option></l><l>prox.horizontal[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot prox.ground.reflected[ %n ]"><l>0</l></custom-block><l><option>code</option></l><l>prox.ground.reflected[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot prox.ground.delta[ %n ]"><l>0</l></custom-block><l><option>code</option></l><l>prox.ground.delta[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot prox.ground.ambiant[ %n ]"><l>0</l></custom-block><l><option>code</option></l><l>prox.ground.ambiant[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot temperature"></custom-block><l><option>code</option></l><l>temperature</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot acc[ %n ]"><l>0</l></custom-block><l><option>code</option></l><l>acc[&lt;#1&gt;]</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot mic.intensity"></custom-block><l><option>code</option></l><l>mic.intensity</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot $gearBig rc5.address"></custom-block><l><option>code</option></l><l>rc5.address</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot $gearBig rc5.command"></custom-block><l><option>code</option></l><l>rc5.command</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>3000</l></custom-block></script><list></list></block><l><option>code</option></l><l>timer.period[&lt;#1&gt;] = &lt;#2&gt;</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot button.backward"></custom-block><l><option>code</option></l><l>button.backward</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot button.center"></custom-block><l><option>code</option></l><l>button.center</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot button.forward"></custom-block><l><option>code</option></l><l>button.forward</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot button.left"></custom-block><l><option>code</option></l><l>button.left</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot button.right"></custom-block><l><option>code</option></l><l>button.right</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot motor.left.target"></custom-block><l><option>code</option></l><l>motor.left.target</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot motor.right.target"></custom-block><l><option>code</option></l><l>motor.right.target</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot motor.left.speed"></custom-block><l><option>code</option></l><l>motor.left.speed</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot motor.right.speed"></custom-block><l><option>code</option></l><l>motor.right.speed</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot prox.comm.rx"></custom-block><l><option>code</option></l><l>prox.comm.rx</l></block><block s="doMapCodeOrHeader"><custom-block s="$robot prox.comm.tx"></custom-block><l><option>code</option></l><l>prox.comm.tx</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.prox.h( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.prox.h(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;,&lt;#4&gt;,&lt;#5&gt;,&lt;#6&gt;,&lt;#7&gt;,&lt;#8&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.buttons( %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.buttons(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;,&lt;#4&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.circle(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;,&lt;#4&gt;,&lt;#5&gt;,&lt;#6&gt;,&lt;#7&gt;,&lt;#8&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.temperature R %n B %n"><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.temperature(&lt;#1&gt;,&lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.rc( %n )"><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.rc(&lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.sound( %n )"><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.sound(&lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.top( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.top(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.bottom.left( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.bottom.left(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.bottom.right( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.bottom.right(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot leds.prox.v( %n %n )"><l>0</l><l>0</l></custom-block></script><list></list></block><l><option>code</option></l><l>call leds.prox.v(&lt;#1&gt;,&lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot jouer le son système %n"><l>3</l></custom-block></script><list></list></block><l><option>code</option></l><l>call sound.system(&lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot jouer le son SD %n"><l>1</l></custom-block></script><list></list></block><l><option>code</option></l><l>call sound.play(&lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot enregistrer le son %n"><l>1</l></custom-block></script><list></list></block><l><option>code</option></l><l>call sound.record(&lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot rejouer le son %n"><l>1</l></custom-block></script><list></list></block><l><option>code</option></l><l>call sound.replay(&lt;#1&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>440</l><l>1</l></custom-block></script><list></list></block><l><option>code</option></l><l>call sound.freq(&lt;#1&gt;,&lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent prox (10Hz loop) %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent prox&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent motor (100Hz loop) %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent motor&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent buttons (20Hz loop) %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent buttons&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent acc (16Hz loop) %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent acc&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent temperature (1Hz loop) %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent temperature&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent $arrowUpOutline button.forward %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent button.forward&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent $arrowLeftOutline button.left %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent button.left&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent $ellipse button.center %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent button.center&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent $arrowDownOutline button.backward %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent button.backward&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent $arrowRightOutline button.right %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent button.right&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent rc5 %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent rc5&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent mic %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent mic&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent tap %cs"><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent tap&#xD;    &lt;#1&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent timer %n %cs"><l>0</l><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent timer&lt;#1&gt;&#xD;    &lt;#2&gt;&#xD;</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig Quand %s faire %cs"><l></l><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>when &lt;#1&gt; do&#xD;    &lt;#2&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig Tant que %s répète %cs"><l></l><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>while &lt;#1&gt; do&#xD;    &lt;#2&gt;&#xD;end</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig emit %txt ( %s )"><l></l><l></l></custom-block></script><list></list></block><l><option>code</option></l><l>emit &lt;#1&gt;(&lt;#2&gt;)</l></block><block s="doMapCodeOrHeader"><block s="reifyScript"><script><custom-block s="$robot $gearBig onevent %txt %cs"><l></l><script></script></custom-block></script><list></list></block><l><option>code</option></l><l>&#xD;onevent &lt;#1&gt;&#xD;    &lt;#2&gt;&#xD;</l></block></script></block-definition><block-definition s="$robot $gearBig ##! %&apos;commentaire&apos;" type="command" category="other"><header></header><code>##! &lt;#1&gt;</code><translations></translations><inputs><input type="%txt">commentaire de code aseba</input></inputs></block-definition><block-definition s="$robot prox.horizontal[ %&apos;nb&apos; ]" type="reporter" category="sensing"><header></header><code>prox.horizontal[&lt;#1&gt;]</code><translations></translations><inputs><input type="%n" readonly="true">2<options>0&#xD;1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="nb"/><l>18</l></block><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot prox.ground.reflected[ %&apos;nb&apos; ]" type="reporter" category="sensing"><header></header><code>prox.ground.reflected[&lt;#1&gt;]</code><translations></translations><inputs><input type="%n" readonly="true">0<options>0&#xD;1</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="nb"/><l>16</l></block><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot prox.ground.delta[ %&apos;nb&apos; ]" type="reporter" category="sensing"><header></header><code>prox.ground.delta[&lt;#1&gt;]</code><translations></translations><inputs><input type="%n" readonly="true">0<options>0&#xD;1</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="nb"/><l>16</l></block><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot $gearBig onevent motor (100Hz loop) %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent motor&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent buttons (20Hz loop) %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent buttons&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent acc (16Hz loop) %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent acc&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent temperature (1Hz loop) %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent temperature&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent $arrowUpOutline button.forward %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent button.forward&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent $arrowLeftOutline button.left %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent button.left&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent $ellipse button.center %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent button.center&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent $arrowDownOutline button.backward %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent button.backward&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent $arrowRightOutline button.right %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent button.right&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent rc5 %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent rc5&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent mic %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent mic&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig onevent tap %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent tap&#xD;    &lt;#1&gt;&#xD;</code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot prox.ground.ambiant[ %&apos;nb&apos; ]" type="reporter" category="sensing"><header></header><code>prox.ground.delta[&lt;#1&gt;]</code><translations></translations><inputs><input type="%n" readonly="true">0<options>0&#xD;1</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="nb"/><l>16</l></block><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot temperature" type="reporter" category="sensing"><header></header><code>temperature</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>25</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot acc[ %&apos;nb&apos; ]" type="reporter" category="sensing"><header></header><code>acc[&lt;#1&gt;]</code><translations></translations><inputs><input type="%n" readonly="true">0<options>0&#xD;1&#xD;2</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="nb"/><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="capteurs"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="nb"/><l>1</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="capteurs"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="nb"/><l>2</l></block><script><block s="doReport"><block s="reportListItem"><l>3</l><block var="capteurs"/></block></block></script></block></script></block-definition><block-definition s="$robot mic.intensity" type="reporter" category="sensing"><header></header><code>mic.intensity</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>4</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot leds.top( %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; )" type="command" category="looks"><header></header><code>call leds.top(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_top</l><l>/</l><block var="r"/><l>/</l><block var="g"/><l>/</l><block var="b"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot $gearBig nombre aléatoire entre 0 et 32" type="reporter" category="operators"><header></header><code>rand</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportRandom"><l>0</l><l>32</l></block></block></script></block-definition><block-definition s="$robot $gearBig mettre %&apos;rand&apos; à un nombre aléatoire (0-32)" type="command" category="variables"><header></header><code>call math.rand(&lt;#1&gt;)&#xD;&lt;#1&gt; = abs &lt;#1&gt;&#xD;&lt;#1&gt; = &lt;#1&gt; % 20</code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="$robot leds.bottom.left( %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; )" type="command" category="looks"><header></header><code>call leds.bottom.left(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_bottom_left</l><l>/</l><block var="r"/><l>/</l><block var="g"/><l>/</l><block var="b"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot leds.bottom.right( %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; )" type="command" category="looks"><header></header><code>call leds.bottom.right(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_bottom_right</l><l>/</l><block var="r"/><l>/</l><block var="g"/><l>/</l><block var="b"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot $gearBig DIM variables %&apos;tab&apos; length %&apos;taille&apos; avec %&apos;liste&apos;" type="command" category="other"><header></header><code>var &lt;#1&gt;[&lt;#2&gt;] = &lt;#3&gt;</code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>tab</l><block var="liste"/></block><block s="doReport"><block var="tab"/></block></script></block-definition><block-definition s="$robot $gearBig DIM mettre %&apos;liste&apos; [ %&apos;nb&apos; ] à %&apos;value&apos;" type="command" category="variables"><header></header><code>&lt;#1&gt;[&lt;#2&gt;] = &lt;#3&gt;</code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input></inputs></block-definition><block-definition s="- %&apos;nb&apos;" type="reporter" category="operators"><header></header><code>(- &lt;#1&gt;)</code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportDifference"><l></l><block var="nb"/></block></block></script></block-definition><block-definition s="$robot $gearBig Définir le minuteur %&apos;timer&apos; à une période de %&apos;time&apos; millisecondes" type="command" category="sensing"><header></header><code>timer.period[&lt;#1&gt;] = &lt;#2&gt;</code><translations></translations><inputs><input type="%s">0<options>0&#xD;1</options></input><input type="%n">0</input></inputs></block-definition><block-definition s="$robot $gearBig onevent timer %&apos;nb&apos; %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent timer&lt;#1&gt;&#xD;    &lt;#2&gt;&#xD;</code><translations></translations><inputs><input type="%n">0<options>0&#xD;1</options></input><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig Retour à la ligne dans le code aseba" type="command" category="other"><header></header><code>&#xD;</code><translations></translations><inputs></inputs></block-definition><block-definition s="$robot $gearBig LOGO Setup variables" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>thymioHTTP SnapToAseba</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>LOGO Like Presentation header</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>CARRIE Nathalie et  VERHILLE Arnaud pour l&apos;IREM de la Réunion</l></custom-block><block s="doDeclareVariables"><list><l>compteur</l><l>i</l><l>bufmax</l><l>j</l><l>av</l><l>avb</l><l>td</l><l>tdb</l><l>tg</l><l>tgb</l><l>k</l><l>l</l></list></block><custom-block s="$robot $gearBig DIM variables %s length %s avec %s"><block var="tab0"/><l>128</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></list></block></custom-block><custom-block s="$robot $gearBig DIM variables %s length %s avec %s"><block var="tab1"/><l>128</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></list></block></custom-block><custom-block s="$robot $gearBig DIM variables %s length %s avec %s"><block var="tab2"/><l>128</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></list></block></custom-block><block s="doSetVar"><l>bufmax</l><l>128</l></block><custom-block s="$robot $gearBig ##! %txt"><l>mic.threshold est la limite pour lancer un  évènement mic</l></custom-block><block s="doSetVar"><l>mic.threshold</l><l>250</l></block><custom-block s="$robot $gearBig ##! %txt"><l>C&apos;est le compteur programme mouvement</l></custom-block><block s="doSetVar"><l>compteur</l><l>0</l></block><custom-block s="$robot $gearBig ##! %txt"><l>Calibration: facteurs multiplicatifs à ajuster pour CHAQUE Thymio !</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>temps (ms) = av * distance (cm)+avb</l></custom-block><block s="doSetVar"><l>av</l><l>155</l></block><block s="doSetVar"><l>avb</l><l>32</l></block><custom-block s="$robot $gearBig ##! %txt"><l>Les rotations d&apos;angle fonctionnent de la même façon</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>temps(ms) = td * angle(°) + tdb</l></custom-block><block s="doSetVar"><l>td</l><l>13</l></block><block s="doSetVar"><l>tdb</l><l>10</l></block><block s="doSetVar"><l>tg</l><l>13</l></block><block s="doSetVar"><l>tgb</l><l>10</l></block><custom-block s="$robot $gearBig Retour à la ligne dans le code aseba"></custom-block></script><list></list></block></block></script></block-definition><block-definition s="$robot avancer à la vitesse %&apos;vitesse&apos; pendant %&apos;temps&apos; ms" type="command" category="motion"><header></header><code>tab0[compteur] = &lt;#1&gt;   #! Avance à la vitesse &lt;#1&gt;&#xD;tab1[compteur] = &lt;#1&gt;   #! pendant &lt;#2&gt; ms&#xD;tab2[compteur] = &lt;#2&gt;&#xD;compteur += 1</code><translations></translations><inputs><input type="%n">200</input><input type="%n">1000</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>M_motor_timed</l><l>/</l><block var="vitesse"/><l>/</l><block var="vitesse"/><l>/</l><block var="temps"/></list></block><l></l><list></list></custom-block></block><block s="doWait"><l>0.2</l></block><block s="doIfElse"><custom-block s="$robot actif?"></custom-block><script><block s="doWaitUntil"><block s="reportNot"><custom-block s="$robot actif?"></custom-block></block></block></script><script><custom-block s="$robot avancer à la vitesse %n pendant %n ms"><block var="vitesse"/><block var="temps"/></custom-block></script></block></script></block-definition><block-definition s="$robot tourner $turnRight à la vitesse %&apos;vitesse&apos; pendant %&apos;temps&apos; ms" type="command" category="motion"><header></header><code>tab0[compteur] = &lt;#1&gt;    #! Tourne droite à la vitesse &lt;#1&gt;&#xD;tab1[compteur] = -&lt;#1&gt;   #! pendant &lt;#2&gt; ms&#xD;tab2[compteur] = &lt;#2&gt;&#xD;compteur += 1</code><translations></translations><inputs><input type="%n">200</input><input type="%n">1000</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>M_motor_timed</l><l>/</l><block var="vitesse"/><l>/</l><custom-block s="- %n"><block var="vitesse"/></custom-block><l>/</l><block var="temps"/></list></block><l></l><list></list></custom-block></block><block s="doWait"><l>0.2</l></block><block s="doIfElse"><custom-block s="$robot actif?"></custom-block><script><block s="doWaitUntil"><block s="reportNot"><custom-block s="$robot actif?"></custom-block></block></block></script><script><custom-block s="$robot tourner $turnRight à la vitesse %n pendant %n ms"><block var="vitesse"/><block var="temps"/></custom-block></script></block></script></block-definition><block-definition s="$robot tourner $turnLeft à la vitesse %&apos;vitesse&apos; pendant %&apos;temps&apos; ms" type="command" category="motion"><header></header><code>tab0[compteur] = -&lt;#1&gt;    #! Tourne droite à la vitesse &lt;#1&gt;&#xD;tab1[compteur] = &lt;#1&gt;     #! pendant &lt;#2&gt; ms&#xD;tab2[compteur] = &lt;#2&gt;&#xD;compteur += 1</code><translations></translations><inputs><input type="%n">200</input><input type="%n">1000</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>M_motor_timed</l><l>/</l><custom-block s="- %n"><block var="vitesse"/></custom-block><l>/</l><block var="vitesse"/><l>/</l><block var="temps"/></list></block><l></l><list></list></custom-block></block><block s="doWait"><l>0.2</l></block><block s="doIfElse"><custom-block s="$robot actif?"></custom-block><script><block s="doWaitUntil"><block s="reportNot"><custom-block s="$robot actif?"></custom-block></block></block></script><script><custom-block s="$robot tourner $turnLeft à la vitesse %n pendant %n ms"><block var="vitesse"/><block var="temps"/></custom-block></script></block></script></block-definition><block-definition s="$robot $gearBig rc5.address" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="$robot $gearBig rc5.command" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="$robot $gearBig call math.min( %&apos;a&apos; , %&apos;b&apos; , %&apos;res&apos; )" type="command" category="operators"><header></header><code>call math.min(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="$robot $gearBig call math.max( %&apos;a&apos; , %&apos;b&apos; , %&apos;res&apos; )" type="command" category="operators"><header></header><code>call math.max(&lt;#1&gt;,&lt;#2&gt;,&lt;#3&gt;)</code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="$robot $gearBig BIN %&apos;a&apos; &gt;&gt; %&apos;b&apos;" type="reporter" category="operators"><header></header><code>&lt;#1&gt; &gt;&gt; &lt;#2&gt;</code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="$robot $gearBig BIN %&apos;a&apos; &lt;&lt; %&apos;b&apos;" type="reporter" category="operators"><header></header><code>&lt;#1&gt; &lt;&lt; &lt;#2&gt;</code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="$robot $gearBig Quand %&apos;test&apos; faire %&apos;script&apos;" type="command" category="control"><header></header><code>when &lt;#1&gt; do&#xD;    &lt;#2&gt;&#xD;end</code><translations></translations><inputs><input type="%s"></input><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig Tant que %&apos;test&apos; répète %&apos;script&apos;" type="command" category="control"><header></header><code>while &lt;#1&gt; do&#xD;    &lt;#2&gt;&#xD;end</code><translations></translations><inputs><input type="%s"></input><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot leds.prox.v( %&apos;led1&apos; %&apos;led2&apos; )" type="command" category="looks"><header></header><code>call leds.prox.v(&lt;#1&gt;,&lt;#2&gt;)</code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>HTTP</l></list></block><block s="doSetVar"><l>HTTP</l><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><block var="node"/><l>V_leds_prox_v</l><l>/</l><block var="led1"/><l>/</l><block var="led2"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="listify %&apos;jsonString&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:os dados JSON _ em formato de lista&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>jsonString</l></list><l>return listify(JSON.parse(jsonString));&#xD;&#xD;function listify(jsonObject) {&#xD;  if (jsonObject instanceof Array) {&#xD;    return new List(jsonObject.map(function(eachElement) { return listify(eachElement)}));&#xD;  } else if (jsonObject instanceof Object) {&#xD;    return new List(Object.keys(jsonObject).map(function(eachKey) { return new List([eachKey,listify(jsonObject[eachKey])])} ))&#xD;  } else {&#xD;    return jsonObject&#xD;  }&#xD;}</l></block><list><block var="jsonString"/></list></block></block></script></block-definition><block-definition s="value at key %&apos;key&apos; of %&apos;lst&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o valor com chave _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>each item</l><block var="lst"/><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="each item"/></block><block var="key"/></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="each item"/></block></block></script></block></script></block></script></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="%&apos;method&apos; url: %&apos;url&apos; send: %&apos;payload&apos; headers: %&apos;headers&apos;" type="reporter" category="sensing"><header></header><code></code><translations>pt:a resposta a _ de _ enviando _ e cabeçalhos _&#xD;</translations><inputs><input type="%s" readonly="true">GET<options>GET&#xD;POST&#xD;PUT&#xD;DELETE</options></input><input type="%s">https://snap.berkeley.edu</input><input type="%s"></input><input type="%mult%l" readonly="true"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>method</l><l>url</l><l>data</l><l>headers</l><l>proc</l></list><l>var response, i, header;&#xD;if (!proc.httpRequest) {&#xD;  proc.httpRequest = new XMLHttpRequest();&#xD;  proc.httpRequest.open(method, url, true);&#xD;  proc.assertType(headers, &apos;list&apos;);&#xD;  for (i = 1; i &lt;= headers.length(); i += 1) {&#xD;    header = headers.at(i);&#xD;    proc.assertType(header, &apos;list&apos;);&#xD;    proc.httpRequest.setRequestHeader(&#xD;      header.at(1),&#xD;      header.at(2)&#xD;    );&#xD;  }&#xD;  proc.httpRequest.send(data || null);&#xD;} else if (proc.httpRequest.readyState === 4) {&#xD;  response = proc.httpRequest.responseText;&#xD;  proc.httpRequest = null;&#xD;  return response;&#xD;}&#xD;proc.pushContext(&apos;doYield&apos;);&#xD;proc.pushContext();</l></block><list><block var="method"/><block var="url"/><block var="payload"/><block var="headers"/></list></block></block></script></block-definition><block-definition s="key: %&apos;key&apos; value: %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:um par (chave: _ , valor: _ )&#xD;</translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="key"/><block var="value"/></list></block></block></script></block-definition><block-definition s="current location" type="reporter" category="sensing"><comment x="0" y="0" w="200" collapsed="false">Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements.  Works only if the user allows snap.berkeley.edu access to location data.  Some browsers also require an HTTPS connection to Snap!.</comment><header></header><code></code><translations>pt:a localização actual do dispositivo&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>proc</l></list><l>if (!proc.geostarted) {&#xD;  var geo = navigator.geolocation;&#xD;  var cords = [];&#xD;  var options = {&#xD;    enableHighAccuracy: false,&#xD;  };&#xD;&#xD;  function success(pos) {&#xD;    console.log(pos);&#xD;    proc.geocords = [pos.coords.latitude,&#xD;                     pos.coords.longitude,&#xD;                     pos.coords.accuracy];&#xD;  }&#xD;&#xD;  function error(err) {&#xD;    alert("ERROR " + err.code + ": " + err.message);&#xD;  }&#xD;  proc.geostarted = true;&#xD;  proc.geocords = null;&#xD;  console.log("starting geolocation")&#xD;  geo.getCurrentPosition(success, error, options);&#xD;} else if (proc.geocords) {&#xD;  var cords = proc.geocords;&#xD;  proc.geostarted = null;&#xD;  proc.geocords = null;&#xD;  console.log("returning");&#xD;  return new List(cords);&#xD;} else {&#xD;  console.log("yielding");&#xD;  proc.pushContext(&apos;doYield&apos;);&#xD;  proc.pushContext();&#xD;}</l></block><list></list></block></block></script></block-definition><block-definition s="$robot Compile le code Aseba suivant: %&apos;asebacode&apos; pour le lancer sur le thymio %&apos;nb&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n">1</input></inputs><script><block s="doReport"><custom-block s="%s url: %s send: %s headers: %mult%l"><l>POST</l><block s="reportJoinWords"><list><l>http://localhost:3000/nodes/code</l><l>/</l><block var="nb"/></list></block><block var="asebacode"/><list><custom-block s="key: %s value: %s"><l>Content-Type</l><l>text/plain</l></custom-block></list></custom-block></block></script></block-definition><block-definition s="$robot initialise le Thymio %&apos;nb&apos; URL %&apos;host&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%s">localhost</input></inputs><script><block s="doSetVar"><l>node</l><block s="reportJoinWords"><list><l>http://</l><block var="host"/><l>:3000/nodes/</l></list></block></block><custom-block s="$robot $gearBig map to Aseba"></custom-block><block s="doSetVar"><l>asebacode</l><block s="reportMappedCode"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>Basic Thymio Motion AESL</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>David J Sherman - david.sherman@inria.fr</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Nathalie Carrie - IREM de la Réunion</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Arnaud Verhille - gist974arobasegmailpointcom</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>This AESL program defines high-level behaviors for the Thymio-II robot that enable</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>it to cooperate with programs like Snap! using Nodejs and thymioHTTP REST API</l></custom-block><block s="doDeclareVariables"><list><l>motorbusy</l><l>i</l><l>r</l><l>g</l><l>b</l></list></block><block s="doSetVar"><l>motorbusy</l><l>0</l></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doSetVar"><l>mic.threshold</l><l>12</l></block><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block><custom-block s="$robot jouer le son système %n"><l>3</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>MOTOR THYMIO EVENTS</l></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>M_motor_both</l><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>M_motor_timed</l><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block></custom-block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block></custom-block><block s="doSetVar"><l>motorbusy</l><l>1</l></block></script></custom-block><custom-block s="$robot $gearBig onevent timer %n %cs"><l>0</l><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block><block s="doSetVar"><l>motorbusy</l><l>0</l></block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>0</l></custom-block></script></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>LED THYMIO EVENTS</l></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_prox_h</l><script><custom-block s="$robot leds.prox.h( %n %n %n %n %n %n %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>3</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>4</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>5</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>6</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>7</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_circle</l><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>3</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>4</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>5</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>6</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>7</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_top</l><script><custom-block s="$robot leds.top( %n %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_bottom_left</l><script><custom-block s="$robot leds.bottom.left( %n %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_bottom_right</l><script><custom-block s="$robot leds.bottom.right( %n %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_prox_v</l><script><custom-block s="$robot leds.prox.v( %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_buttons</l><script><custom-block s="$robot leds.buttons( %n %n %n %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>2</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>3</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_rc</l><script><custom-block s="$robot leds.rc( %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_temperature</l><script><custom-block s="$robot leds.temperature R %n B %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>V_leds_sound</l><script><custom-block s="$robot leds.sound( %n )"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>SOUND THYMIO EVENTS</l></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>A_sound_system</l><script><custom-block s="$robot jouer le son système %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>A_sound_play</l><script><custom-block s="$robot jouer le son SD %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>A_sound_replay</l><script><custom-block s="$robot rejouer le son %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>A_sound_record</l><script><custom-block s="$robot enregistrer le son %n"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>A_sound_freq</l><script><custom-block s="$robot jouer la note %n Hz durant %n ms"><custom-block s="$robot $gearBig event.args [ %s ]"><l>0</l></custom-block><custom-block s="$robot $gearBig event.args [ %s ]"><l>1</l></custom-block></custom-block></script></custom-block><custom-block s="$robot $gearBig onevent %txt %cs"><l>ping</l><script><custom-block s="$robot $gearBig mettre %s à un nombre aléatoire (0-32)"><block var="r"/></custom-block><custom-block s="$robot $gearBig mettre %s à un nombre aléatoire (0-32)"><block var="g"/></custom-block><custom-block s="$robot $gearBig mettre %s à un nombre aléatoire (0-32)"><block var="b"/></custom-block><custom-block s="$robot leds.top( %n %n %n )"><block var="r"/><block var="g"/><block var="b"/></custom-block></script></custom-block></script><list></list></block></block></block><custom-block s="$robot Compile le code Aseba suivant: %s pour le lancer sur le thymio %n"><block var="asebacode"/><block var="nb"/></custom-block></script></block-definition><block-definition s="$robot mettre à jour les capteurs" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>temp</l></list></block><block s="doSetVar"><l>temp</l><custom-block s="listify %mlt"><custom-block s="%s url: %s send: %s headers: %mult%l"><l>GET</l><block var="node"/><l></l><list></list></custom-block></custom-block></block><block s="doIfElse"><block s="reportIsA"><block var="temp"/><l><option>list</option></l></block><script><block s="doReport"><block var="temp"/></block></script><script><block s="doReport"><block var="capteurs"/></block></script></block></script><scripts><comment x="244" y="117.19999999999999" w="311" collapsed="false">       ##! 10 Hz THYMIO REPORTER&#xD;        R_state[0] = acc[0]&#xD;        R_state[1] = acc[1]&#xD;        R_state[2] = acc[2]&#xD;        R_state[3] = mic.intensity&#xD;        R_state[4] = button.backward&#xD;        R_state[5] = button.center&#xD;        R_state[6] = button.forward&#xD;        R_state[7] = button.left&#xD;        R_state[8] = button.right&#xD;        R_state[9] = motor.left.target&#xD;        R_state[10] = motor.right.target&#xD;        R_state[11] = motor.left.speed&#xD;        R_state[12] = motor.right.speed&#xD;        R_state[13] = prox.comm.rx&#xD;        R_state[14] = prox.comm.tx&#xD;        R_state[15] = prox.ground.delta[0]&#xD;        R_state[16] = prox.ground.delta[1]&#xD;        R_state[17] = prox.horizontal[0]&#xD;        R_state[18] = prox.horizontal[1]&#xD;        R_state[19] = prox.horizontal[2]&#xD;        R_state[20] = prox.horizontal[3]&#xD;        R_state[21] = prox.horizontal[4]&#xD;        R_state[22] = prox.horizontal[5]&#xD;        R_state[23] = prox.horizontal[6]&#xD;        R_state[24] = temperature&#xD;        R_state[25] = motorbusy&#xD;</comment></scripts></block-definition><block-definition s="$robot affichage des capteurs Thymio" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>capteurs</l><custom-block s="$robot mettre à jour les capteurs"></custom-block></block><block s="doWarp"><script><block s="clear"></block><block s="up"></block><block s="doSwitchToCostume"><l>thymio-II</l></block><block s="setScale"><l>100</l></block><block s="setHeading"><l>90</l></block><block s="gotoXY"><l>110</l><l>-130</l></block><block s="write"><block s="reportJoinWords"><list><l>AccelX </l><custom-block s="$robot acc[ %n ]"><l>0</l></custom-block></list></block><l>16</l></block><block s="gotoXY"><l>110</l><l>-145</l></block><block s="write"><block s="reportJoinWords"><list><l>AccelY </l><custom-block s="$robot acc[ %n ]"><l>1</l></custom-block></list></block><l>16</l></block><block s="gotoXY"><l>110</l><l>-160</l></block><block s="write"><block s="reportJoinWords"><list><l>AccelZ </l><custom-block s="$robot acc[ %n ]"><l>2</l></custom-block></list></block><l>16</l></block><block s="gotoXY"><l>-90</l><l>70</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>0</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-55</l><l>100</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>1</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-10</l><l>110</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>2</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>45</l><l>100</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>3</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>80</l><l>70</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>4</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-70</l><l>-100</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>5</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>60</l><l>-100</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.horizontal[ %n ]"><l>6</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-40</l><l>70</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.ground.reflected[ %n ]"><l>0</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>20</l><l>70</l></block><block s="write"><block s="reportJoinWords"><list><custom-block s="$robot prox.ground.reflected[ %n ]"><l>1</l></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>110</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Son </l><custom-block s="$robot mic.intensity"></custom-block></list></block><l>24</l></block><block s="gotoXY"><l>-220</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Temp </l><custom-block s="$robot temperature"></custom-block></list></block><l>24</l></block><block s="gotoXY"><l>0</l><l>0</l></block></script></block></script></block-definition><block-definition s="$robot contrôle le robot au clavier" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportKeyPressed"><l><option>up arrow</option></l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>300</l><l>300</l></custom-block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>down arrow</option></l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>right arrow</option></l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>150</l><l>-150</l></custom-block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>left arrow</option></l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>-150</l><l>150</l></custom-block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>space</option></l></block><script><custom-block s="$robot jouer le son système %n"><l>4</l></custom-block></script></block></script></block-definition><block-definition s="$robot actif?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>capteurs</l><custom-block s="$robot mettre à jour les capteurs"></custom-block></block><block s="doIfElse"><block s="reportListItem"><l>26</l><block var="capteurs"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="$robot $gearBig onevent %&apos;eventname&apos; %&apos;script&apos;" type="command" category="control"><header></header><code>&#xD;onevent &lt;#1&gt;&#xD;    &lt;#2&gt;&#xD;</code><translations></translations><inputs><input type="%txt"></input><input type="%cs"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$robot $gearBig emit %&apos;eventname&apos; ( %&apos;variable&apos; )" type="command" category="control"><header></header><code>emit &lt;#1&gt;(&lt;#2&gt;)</code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input></inputs></block-definition><block-definition s="$robot $gearBig event.args [ %&apos;nb&apos; ]" type="reporter" category="variables"><header></header><code>event.args[&lt;#1&gt;]</code><translations></translations><inputs><input type="%s">0<options>0&#xD;1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6&#xD;7</options></input></inputs><script><block s="doReport"><block s="reifyScript"><script></script><list></list></block></block></script></block-definition><block-definition s="$robot Von Koch, niveau: %&apos;level&apos; taille: %&apos;size&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">2</input><input type="%n">5</input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="level"/><l>1</l></block><script><custom-block s="$robot avancer de %n cm"><block var="size"/></custom-block></script><script><custom-block s="$robot Von Koch, niveau: %n taille: %n"><block s="reportDifference"><block var="level"/><l>1</l></block><block s="reportProduct"><block var="size"/><l>0.75</l></block></custom-block><custom-block s="$robot tourner $turnLeft de %n °"><l>60</l></custom-block><custom-block s="$robot Von Koch, niveau: %n taille: %n"><block s="reportDifference"><block var="level"/><l>1</l></block><block s="reportProduct"><block var="size"/><l>0.75</l></block></custom-block><custom-block s="$robot tourner $turnRight de %n °"><l>120</l></custom-block><custom-block s="$robot Von Koch, niveau: %n taille: %n"><block s="reportDifference"><block var="level"/><l>1</l></block><block s="reportProduct"><block var="size"/><l>0.75</l></block></custom-block><custom-block s="$robot tourner $turnLeft de %n °"><l>60</l></custom-block><custom-block s="$robot Von Koch, niveau: %n taille: %n"><block s="reportDifference"><block var="level"/><l>1</l></block><block s="reportProduct"><block var="size"/><l>0.75</l></block></custom-block></script></block></script></block-definition><block-definition s="$robot button.backward" type="reporter" category="sensing"><header></header><code>button.backward</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>5</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot button.center" type="reporter" category="sensing"><header></header><code>button.center</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>6</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot button.forward" type="reporter" category="sensing"><header></header><code>button.forward</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>7</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot button.left" type="reporter" category="sensing"><header></header><code>button.left</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>8</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot button.right" type="reporter" category="sensing"><header></header><code>button.right</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>9</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot motor.left.target" type="reporter" category="sensing"><header></header><code>motor.left.target</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>10</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot motor.right.target" type="reporter" category="sensing"><header></header><code>motor.right.target</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>11</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot motor.left.speed" type="reporter" category="sensing"><header></header><code>motor.left.speed</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>12</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot motor.right.speed" type="reporter" category="sensing"><header></header><code>motor.right.speed</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>13</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot prox.comm.rx" type="reporter" category="sensing"><header></header><code>prox.comm.rx</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>14</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot prox.comm.tx" type="reporter" category="sensing"><header></header><code>prox.comm.tx</code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>15</l><block var="capteurs"/></block></block></script></block-definition><block-definition s="$robot $gearBig LOGO timer0: Execute mouvement" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reifyScript"><script><custom-block s="$robot $gearBig Retour à la ligne dans le code aseba"></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Gestion de la boucle d&apos;action</l></custom-block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>100</l></custom-block><block s="doSetVar"><l>compteur</l><l>0</l></block><custom-block s="$robot $gearBig onevent timer %n %cs"><l>0</l><script><block s="doIfElse"><block s="reportOr"><block s="reportGreaterThan"><block var="compteur"/><block s="reportDifference"><block var="bufmax"/><l>1</l></block></block><block s="reportEquals"><block s="reportListItem"><block var="compteur"/><block var="tab2"/></block><l>0</l></block></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>0</l></custom-block><block s="doSetVar"><l>compteur</l><l>0</l></block></script><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><block s="reportListItem"><block var="compteur"/><block var="tab0"/></block><block s="reportListItem"><block var="compteur"/><block var="tab1"/></block></custom-block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><block s="reportListItem"><block var="compteur"/><block var="tab2"/></block></custom-block></script></block><block s="doChangeVar"><l>compteur</l><l>1</l></block></script></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Relancer le programme avec le bouton avant</l></custom-block><custom-block s="$robot $gearBig onevent $arrowUpOutline button.forward %cs"><script><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>100</l></custom-block><block s="doSetVar"><l>compteur</l><l>0</l></block></script></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Stopper le programme avec le bouton central</l></custom-block><custom-block s="$robot $gearBig onevent $ellipse button.center %cs"><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>0</l></custom-block><block s="doSetVar"><l>compteur</l><l>0</l></block></script></custom-block><custom-block s="$robot $gearBig Retour à la ligne dans le code aseba"></custom-block></script><list></list></block></block></script></block-definition><block-definition s="$robot joue le thème de Mario" type="command" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>659</l><l>150</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>659</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>659</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>523</l><l>100</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>659</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>784</l><l>550</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>392</l><l>575</l></custom-block><block s="doRepeat"><l>2</l><script><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>523</l><l>450</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>392</l><l>400</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>329</l><l>500</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>440</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>494</l><l>330</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>466</l><l>150</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>392</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>370</l><l>200</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>659</l><l>200</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>783</l><l>150</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>880</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>698</l><l>150</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>783</l><l>350</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>659</l><l>300</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>523</l><l>150</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>587</l><l>150</l></custom-block><custom-block s="$robot jouer la note %n Hz durant %n ms"><l>493</l><l>500</l></custom-block></script></block></script></block-definition><block-definition s="suite de Syracuse pour N = %&apos;N&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s">15</input></inputs><script><block s="doDeclareVariables"><list><l>U</l></list></block><block s="doSetVar"><l>U</l><block s="reportNewList"><list><block var="N"/></list></block></block><block s="doUntil"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="U"/></block><l>3</l></block><block s="reportAnd"><block s="reportEquals"><block s="reportListItem"><l><option>last</option></l><block var="U"/></block><l>1</l></block><block s="reportAnd"><block s="reportEquals"><block s="reportListItem"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="U"/></block><l>1</l></block><block var="U"/></block><l>2</l></block><block s="reportEquals"><block s="reportListItem"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="U"/></block><l>2</l></block><block var="U"/></block><l>4</l></block></block></block></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block s="reportListItem"><l><option>last</option></l><block var="U"/></block><l>2</l></block><l>0</l></block><script><block s="doAddToList"><block s="reportQuotient"><block s="reportListItem"><l><option>last</option></l><block var="U"/></block><l>2</l></block><block var="U"/></block></script><script><block s="doAddToList"><block s="reportSum"><block s="reportProduct"><l>3</l><block s="reportListItem"><l><option>last</option></l><block var="U"/></block></block><l>1</l></block><block var="U"/></block></script></block></script></block><block s="doReport"><block var="U"/></block></script></block-definition><block-definition s="$robot joue la suite de Syracuse N= %&apos;N&apos; octave %&apos;octave&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">15</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>notefreq</l><l>notes</l><l>freq</l></list></block><block s="doSetVar"><l>notefreq</l><block s="reportNewList"><list><block s="reportNewList"><list><l>130.81</l><l>138.59</l><l>146.83</l><l>155.56</l><l>164.81</l><l>174.61</l><l>185</l><l>196</l><l>207.65</l><l>220</l><l>233.08</l><l>246.94</l></list></block><block s="reportNewList"><list><l>261.63</l><l>277.18</l><l>293.66</l><l>311.13</l><l>329.63</l><l>349.23</l><l>369.99</l><l>392</l><l>415.3</l><l>440</l><l>466.16</l><l>493.88</l></list></block><block s="reportNewList"><list><l>523.25</l><l>554.37</l><l>587.33</l><l>622.25</l><l>659.26</l><l>698.46</l><l>739.99</l><l>783.99</l><l>830.61</l><l>880</l><l>932.33</l><l>987.77</l></list></block></list></block></block><block s="doSetVar"><l>notes</l><block s="reportModulus"><custom-block s="suite de Syracuse pour N = %s"><block var="N"/></custom-block><l>12</l></block></block><block s="doSetVar"><l>freq</l><l>0</l></block><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="notes"/></block><script><custom-block s="$robot jouer la note %n Hz durant %n ms"><block s="reportListItem"><block s="reportListItem"><block var="i"/><block var="notes"/></block><block s="reportListItem"><block var="octave"/><block var="notefreq"/></block></block><l>1000</l></custom-block></script></block></script></block-definition><block-definition s="$robot selectionne Thymio %&apos;nb&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s">1</input></inputs><script><block s="doReport"><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><l>http://localhost:3000/nodes/select</l><l>/</l><block var="nb"/></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot ping thymio" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><custom-block s="%s url: %s send: %s headers: %mult%l"><l>PUT</l><block s="reportJoinWords"><list><l>http://localhost:3000/nodes/ping</l></list></block><l></l><list></list></custom-block></block></script></block-definition><block-definition s="$robot $gearBig DEMO: Thymio Explorateur" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportMappedCode"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>thymioHTTP SnapToAseba</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Thymio: Comportement Explorateur</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>CARRIE Nathalie et  VERHILLE Arnaud pour l&apos;IREM de la Réunion</l></custom-block><block s="doDeclareVariables"><list><l>i</l><l>j</l><l>temp</l><l>temp2</l><l>speed</l><l>vmin</l><l>vmax</l><l>led_state</l><l>fixed</l><l>led_pulse</l></list></block><block s="doSetVar"><l>speed</l><l>200</l></block><block s="doSetVar"><l>vmin</l><l>-600</l></block><block s="doSetVar"><l>vmax</l><l>600</l></block><block s="doSetVar"><l>led_state</l><l>0</l></block><block s="doSetVar"><l>i</l><l>0</l></block><custom-block s="$robot $gearBig Définir le minuteur %s à une période de %n millisecondes"><l>0</l><l>20</l></custom-block><custom-block s="$robot jouer le son système %n"><l>3</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Algorithme d&apos;évitement de Breintenberg </l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig onevent prox (10Hz loop) %cs"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="speed"/><l>0</l></block><script><block s="doSetVar"><l>temp</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>0</l></custom-block><l>1</l></block><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>1</l></custom-block><l>2</l></block></block><block s="reportSum"><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>2</l></custom-block><l>3</l></block><block s="reportSum"><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>3</l></custom-block><l>1</l></block><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>4</l></custom-block><l>1</l></block></block></block></block></block><block s="doSetVar"><l>temp2</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>0</l></custom-block><l>-4</l></block><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>1</l></custom-block><l>-3</l></block></block><block s="reportSum"><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>3</l></custom-block><l>3</l></block><block s="reportProduct"><custom-block s="$robot prox.horizontal[ %n ]"><l>4</l></custom-block><l>4</l></block></block></block></block><custom-block s="$robot moteur(s) Vg %n Vd %n"><block s="reportDifference"><block var="speed"/><block s="reportQuotient"><block s="reportSum"><block var="temp"/><block var="temp2"/></block><block s="reportQuotient"><l>2000</l><block var="speed"/></block></block></block><block s="reportDifference"><block var="speed"/><block s="reportQuotient"><block s="reportDifference"><block var="temp"/><block var="temp2"/></block><block s="reportQuotient"><l>2000</l><block var="speed"/></block></block></block></custom-block></script><script><block s="doIf"><block s="reportLessThan"><block var="speed"/><l>0</l></block><script><block s="doSetVar"><l>temp</l><block s="reportQuotient"><l>-300</l><block var="speed"/></block></block><custom-block s="$robot moteur(s) Vg %n Vd %n"><block s="reportQuotient"><block s="reportSum"><block var="speed"/><custom-block s="$robot prox.horizontal[ %n ]"><l>6</l></custom-block></block><block var="temp"/></block><block s="reportQuotient"><block s="reportSum"><block var="speed"/><custom-block s="$robot prox.horizontal[ %n ]"><l>5</l></custom-block></block><block var="temp"/></block></custom-block><custom-block s="$robot $gearBig call math.min( %s , %s , %s )"><l>motor.left.target</l><l>motor.left.target</l><block var="vmax"/></custom-block><custom-block s="$robot $gearBig call math.max( %s , %s , %s )"><l>motor.left.target</l><l>motor.left.target</l><block var="vmin"/></custom-block><custom-block s="$robot $gearBig call math.min( %s , %s , %s )"><l>motor.right.target</l><l>motor.right.target</l><block var="vmax"/></custom-block><custom-block s="$robot $gearBig call math.max( %s , %s , %s )"><l>motor.right.target</l><l>motor.right.target</l><block var="vmin"/></custom-block></script></block></script></block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Detecte le bord de la table</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><block s="doIfElse"><block s="reportOr"><block s="reportLessThan"><custom-block s="$robot prox.ground.reflected[ %n ]"><l>0</l></custom-block><l>130</l></block><block s="reportLessThan"><custom-block s="$robot prox.ground.reflected[ %n ]"><l>1</l></custom-block><l>130</l></block></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block><custom-block s="$robot leds.bottom.left( %n %n %n )"><l>32</l><l>0</l><l>0</l></custom-block><custom-block s="$robot leds.bottom.right( %n %n %n )"><l>32</l><l>0</l><l>0</l></custom-block></script><script><custom-block s="$robot leds.bottom.left( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="$robot leds.bottom.right( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block></script></block></script></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Gestion des boutons</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig onevent $arrowUpOutline button.forward %cs"><script><custom-block s="$robot $gearBig ##! %txt"><l>Augmente la vitesse</l></custom-block><block s="doChangeVar"><l>speed</l><l>50</l></block><block s="doIf"><block s="reportGreaterThan"><block var="speed"/><l>500</l></block><script><block s="doSetVar"><l>speed</l><l>500</l></block></script></block></script></custom-block><custom-block s="$robot $gearBig onevent $arrowDownOutline button.backward %cs"><script><custom-block s="$robot $gearBig ##! %txt"><l>Diminue la vitesse</l></custom-block><block s="doSetVar"><l>speed</l><block s="reportDifference"><block var="speed"/><l>50</l></block></block><block s="doIf"><block s="reportLessThan"><block var="speed"/><l>-300</l></block><script><block s="doSetVar"><l>speed</l><l>-300</l></block></script></block></script></custom-block><custom-block s="$robot $gearBig onevent $ellipse button.center %cs"><script><custom-block s="$robot $gearBig ##! %txt"><l>Stopper le robot</l></custom-block><block s="doSetVar"><l>speed</l><l>0</l></block><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block></script></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Animation LED timer0</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>####################################</l></custom-block><custom-block s="$robot $gearBig onevent timer %n %cs"><l>0</l><script><custom-block s="$robot $gearBig ##! %txt"><l>Variation de couleurs du Thymio</l></custom-block><block s="doSetVar"><l>led_pulse</l><block s="reportSum"><block var="led_pulse"/><l>1</l></block></block><block s="doIfElse"><block s="reportGreaterThan"><block var="led_pulse"/><l>0</l></block><script><custom-block s="$robot leds.top( %n %n %n )"><block var="led_pulse"/><block var="led_pulse"/><l>0</l></custom-block><block s="doIf"><block s="reportGreaterThan"><block var="led_pulse"/><l>40</l></block><script><block s="doSetVar"><l>led_pulse</l><l>-64</l></block></script></block></script><script><block s="doSetVar"><l>temp</l><block s="reportQuotient"><custom-block s="- %n"><block var="led_pulse"/></custom-block><l>2</l></block></block><custom-block s="$robot leds.top( %n %n %n )"><block var="temp"/><block var="temp"/><l>0</l></custom-block></script></block><custom-block s="$robot $gearBig ##! %txt"><l>Animation leds cercle à 20Hz</l></custom-block><block s="doIf"><block s="reportEquals"><block var="i"/><l>0</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>32</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>1</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>32</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>2</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>32</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>3</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>32</l><l>0</l><l>0</l><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>4</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l><l>32</l><l>0</l><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>5</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>32</l><l>0</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>6</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>32</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>7</l></block><script><custom-block s="$robot leds.circle( %n %n %n %n %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>0</l><l>32</l></custom-block></script></block><block s="doIfElse"><block s="reportLessThan"><block var="i"/><l>7</l></block><script><block s="doChangeVar"><l>i</l><l>1</l></block></script><script><block s="doSetVar"><l>i</l><l>0</l></block></script></block></script></custom-block></script><list></list></block></block></block></script></block-definition><block-definition s="$robot $gearBig DEMO: RouleBalle" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportMappedCode"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>thymioHTTP SnapToAseba</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Thymio roule sur une balle</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>http://wiki.thymio.org/fr:thymioballeinverse</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>CARRIE Nathalie et  VERHILLE Arnaud pour l&apos;IREM de la Réunion</l></custom-block><block s="doDeclareVariables"><list><l>accTamponPos0</l><l>accTamponPos1</l><l>sumacc0</l><l>sumacc1</l></list></block><custom-block s="$robot $gearBig DIM variables %s length %s avec %s"><block var="tab0"/><l>4</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l></list></block></custom-block><custom-block s="$robot $gearBig DIM variables %s length %s avec %s"><block var="tab1"/><l>4</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l></list></block></custom-block><block s="doSetVar"><l>accTamponPos0</l><l>0</l></block><block s="doSetVar"><l>accTamponPos1</l><l>0</l></block><custom-block s="$robot jouer le son système %n"><l>3</l></custom-block><custom-block s="$robot $gearBig onevent acc (16Hz loop) %cs"><script><custom-block s="$robot $gearBig ##! %txt"><l>ici on prend la mesure de l&apos;accéléromètre qui donne l&apos;inclinaison latérale</l></custom-block><custom-block s="$robot $gearBig DIM mettre %s [ %n ] à %n"><block var="tab0"/><block var="accTamponPos0"/><block s="reportDifference"><custom-block s="$robot acc[ %n ]"><l>0</l></custom-block><l>2</l></block></custom-block><block s="doSetVar"><l>accTamponPos0</l><block s="reportModulus"><block s="reportSum"><block var="accTamponPos0"/><l>1</l></block><l>4</l></block></block><block s="doSetVar"><l>sumacc0</l><block s="reportSum"><block s="reportSum"><block s="reportListItem"><l>0</l><block var="tab0"/></block><block s="reportListItem"><l>1</l><block var="tab0"/></block></block><block s="reportSum"><block s="reportListItem"><l>2</l><block var="tab0"/></block><block s="reportListItem"><l>3</l><block var="tab0"/></block></block></block></block><custom-block s="$robot $gearBig ##! %txt"><l>ici on prend la mesure de l&apos;accéléromètre qui donne l&apos;inclinaison frontale</l></custom-block><custom-block s="$robot $gearBig DIM mettre %s [ %n ] à %n"><block var="tab1"/><block var="accTamponPos1"/><custom-block s="$robot acc[ %n ]"><l>1</l></custom-block></custom-block><block s="doSetVar"><l>accTamponPos1</l><block s="reportModulus"><block s="reportSum"><block var="accTamponPos1"/><l>1</l></block><l>4</l></block></block><block s="doSetVar"><l>sumacc1</l><block s="reportSum"><block s="reportSum"><block s="reportListItem"><l>0</l><block var="tab1"/></block><block s="reportListItem"><l>1</l><block var="tab1"/></block></block><block s="reportSum"><block s="reportListItem"><l>2</l><block var="tab1"/></block><block s="reportListItem"><l>3</l><block var="tab1"/></block></block></block></block><custom-block s="$robot $gearBig ##! %txt"><l>acc0 donne une rotation, acc1 donne l&apos;avancement</l></custom-block><custom-block s="$robot moteur(s) Vg %n Vd %n"><block s="reportSum"><block s="reportProduct"><block var="sumacc0"/><l>15</l></block><block s="reportProduct"><block var="sumacc1"/><l>15</l></block></block><block s="reportSum"><block s="reportProduct"><custom-block s="- %n"><block var="sumacc0"/></custom-block><l>15</l></block><block s="reportProduct"><block var="sumacc1"/><l>15</l></block></block></custom-block></script></custom-block></script><list></list></block></block></block></script></block-definition><block-definition s="$robot $gearBig DEMO: Thymio Suit la ligne" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportMappedCode"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>thymioHTTP SnapToAseba</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Thymio suit la ligne</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>CARRIE Nathalie et  VERHILLE Arnaud pour l&apos;IREM de la Réunion</l></custom-block><custom-block s="$robot jouer le son système %n"><l>3</l></custom-block><custom-block s="$robot $gearBig onevent prox (10Hz loop) %cs"><script><custom-block s="$robot $gearBig ##! %txt"><l>Suivre la ligne</l></custom-block><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="$robot prox.ground.delta[ %n ]"><l>1</l></custom-block><l>400</l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>-100</l><l>400</l></custom-block><custom-block s="$robot leds.buttons( %n %n %n %n )"><l>0</l><l>0</l><l>0</l><l>32</l></custom-block></script><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="$robot prox.ground.delta[ %n ]"><l>0</l></custom-block><l>400</l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>400</l><l>-100</l></custom-block><custom-block s="$robot leds.buttons( %n %n %n %n )"><l>0</l><l>32</l><l>0</l><l>0</l></custom-block></script><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>300</l><l>300</l></custom-block><custom-block s="$robot leds.buttons( %n %n %n %n )"><l>32</l><l>0</l><l>0</l><l>0</l></custom-block></script></block></script></block><custom-block s="$robot $gearBig ##! %txt"><l>Ne pas tomber de la table !!</l></custom-block><block s="doIfElse"><block s="reportAnd"><block s="reportLessThan"><custom-block s="$robot prox.ground.delta[ %n ]"><l>0</l></custom-block><l>5</l></block><block s="reportLessThan"><custom-block s="$robot prox.ground.delta[ %n ]"><l>1</l></custom-block><l>5</l></block></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>0</l></custom-block><custom-block s="$robot leds.bottom.left( %n %n %n )"><l>32</l><l>0</l><l>0</l></custom-block><custom-block s="$robot leds.bottom.right( %n %n %n )"><l>32</l><l>0</l><l>0</l></custom-block></script><script><custom-block s="$robot leds.bottom.left( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="$robot leds.bottom.right( %n %n %n )"><l>0</l><l>0</l><l>0</l></custom-block></script></block></script></custom-block></script><list></list></block></block></block></script></block-definition><block-definition s="$robot $gearBig DEMO : Thymio suit notre main" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportMappedCode"><block s="reifyScript"><script><custom-block s="$robot $gearBig ##! %txt"><l>thymioHTTP SnapToAseba</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>Thymio suit notre main</l></custom-block><custom-block s="$robot $gearBig ##! %txt"><l>CARRIE Nathalie et  VERHILLE Arnaud pour l&apos;IREM de la Réunion</l></custom-block><custom-block s="$robot jouer le son système %n"><l>3</l></custom-block><custom-block s="$robot $gearBig onevent prox (10Hz loop) %cs"><script><block s="doIf"><block s="reportGreaterThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>2</l></custom-block><l>2000</l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>350</l><l>350</l></custom-block></script></block><block s="doIf"><block s="reportGreaterThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>0</l></custom-block><l>2000</l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>0</l><l>500</l></custom-block></script></block><block s="doIf"><block s="reportGreaterThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>4</l></custom-block><l>2000</l></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>500</l><l>0</l></custom-block></script></block><block s="doIf"><block s="reportAnd"><block s="reportAnd"><block s="reportLessThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>0</l></custom-block><l>1000</l></block><block s="reportLessThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>1</l></custom-block><l>1000</l></block></block><block s="reportAnd"><block s="reportLessThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>3</l></custom-block><l>1000</l></block><block s="reportLessThan"><custom-block s="$robot prox.horizontal[ %n ]"><l>4</l></custom-block><l>1000</l></block></block></block><script><custom-block s="$robot moteur(s) Vg %n Vd %n"><l>100</l><l>100</l></custom-block></script></block></script></custom-block></script><list></list></block></block></block></script></block-definition><block-definition s="$robot $gearBig LOGO: Dessine une fleur" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportMappedCode"><custom-block s="$robot $gearBig LOGO Setup variables"></custom-block></block><block s="reportMappedCode"><block s="reifyScript"><script><block s="doFor"><l>k</l><l>1</l><l>12</l><script><custom-block s="$robot tourner $turnRight de %n °"><l>35</l></custom-block><block s="doFor"><l>j</l><l>1</l><l>4</l><script><custom-block s="$robot avancer de %n cm"><l>5</l></custom-block><custom-block s="$robot tourner $turnLeft de %n °"><l>90</l></custom-block></script></block></script></block></script><list></list></block></block><block s="reportMappedCode"><custom-block s="$robot $gearBig LOGO timer0: Execute mouvement"></custom-block></block></list></block></block></script></block-definition><block-definition s="$storage new ( temporary? %&apos;temporary&apos; ) DataSprite" type="reporter" category="control"><comment w="149.7511425525115" collapsed="false">creates a temporary or static DataSprite with the required local variables, JS-code copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs><input type="%b">true</input></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l><l>copy</l></list></block><block s="doWarp"><script><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parent.parent.addNewSprite();</l></block><list></list></block><block s="doSetVar"><l>newSprite</l><block s="reportListItem"><l><option>last</option></l><block s="reportGet"><l><option>other sprites</option></l></block></block></block><block s="doIf"><block var="temporary"/><script><block s="doSetVar"><l>copy</l><block s="newClone"><block var="newSprite"/></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parent.parent.removeSprite(this);</l></block><list></list></block></script><list></list></block><list></list></block><block s="doSetVar"><l>newSprite</l><block var="copy"/></block></script></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doForEach"><l>item</l><block s="reportNewList"><list><l>myCostume</l><l>myProperties</l><l>myData</l></list></block><script><block s="doRun"><block s="reportJSFunction"><list><l>name</l></list><l>if ((typeof name) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + name);&#xD;}&#xD;if (name != "") this.addVariable(name, false);</l></block><list><block var="item"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block><block s="doSetVar"><l>myData</l><custom-block s="$storage new table"></custom-block></block><custom-block s="$storage set properties"></custom-block><block s="gotoXY"><block s="reportRandom"><l>-100</l><l>-50</l></block><block s="reportRandom"><l>100</l><l>150</l></block></block><custom-block s="$storage new costume width %n height %n color %n %n %n"><l>350</l><l>300</l><l>255</l><l>225</l><l>205</l></custom-block><block s="doReport"><block var="newSprite"/></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="$storage new costume width %&apos;w&apos; height %&apos;h&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><comment x="0" y="0" w="111.66666666666667" collapsed="false">creates an empty costume of the specified size and color</comment><header></header><code></code><translations></translations><inputs><input type="%n">350</input><input type="%n">300</input><input type="%n">255</input><input type="%n">225</input><input type="%n">205</input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="myProperties"/><l><option>list</option></l></block></block><script><custom-block s="$storage set properties"></custom-block></script></block><custom-block s="$storage set property %s to %s"><l>width</l><block var="w"/></custom-block><custom-block s="$storage set property %s to %s"><l>height</l><block var="h"/></custom-block><custom-block s="$storage set property %s to %s"><l>backColorRed</l><block var="r"/></custom-block><custom-block s="$storage set property %s to %s"><l>backColorGreen</l><block var="g"/></custom-block><custom-block s="$storage set property %s to %s"><l>backColorBlue</l><block var="b"/></custom-block><block s="doSetVar"><l>myCostume</l><block s="evaluate"><block s="reportJSFunction"><list><l>w</l><l>h</l><l>r</l><l>g</l><l>b</l></list><l>var newCostume=new Costume();&#xD;newCostume.contents.width = w;&#xD;newCostume.contents.height = h;&#xD;var ctx = newCostume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.strokeStyle = new Color(0,0,0).toString();&#xD;ctx.fillRect(0,0,w,h);&#xD;ctx.strokeRect(0,0,w,h);&#xD;ctx.closePath();&#xD;ctx.fill();&#xD;ctx.stroke();&#xD;return newCostume;</l></block><list><block var="w"/><block var="h"/><block var="r"/><block var="g"/><block var="b"/></list></block></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="$storage set labels title %&apos;newTitle&apos; x-label %&apos;newXLabel&apos; y-label %&apos;newYLabel&apos;" type="command" category="looks"><comment w="90" collapsed="false">sets the labels of the diagrams of a DataSprite</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doWarp"><script><custom-block s="$storage set property %s to %s"><l>title</l><block var="newTitle"/></custom-block><custom-block s="$storage set property %s to %s"><l>xLabel</l><block var="newXLabel"/></custom-block><custom-block s="$storage set property %s to %s"><l>yLabel</l><block var="newYLabel"/></custom-block><custom-block s="$storage set offsets"></custom-block></script></block></script></block-definition><block-definition s="$storage set property %&apos;name&apos; to %&apos;value&apos;" type="command" category="lists"><comment x="0" y="0" w="91.66666666666667" collapsed="false">sets the value of an existing property or inserts it anew</comment><header></header><code></code><translations></translations><inputs><input type="%s">width<options>type of data&#xD;width&#xD;height&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;leftOffset&#xD;upperOffset&#xD;lowerOffset&#xD;title&#xD;titleHeight&#xD;xLabel&#xD;xLabelHeight&#xD;yLabel&#xD;yLabelHeight&#xD;xLeft&#xD;xRight&#xD;yLower&#xD;yUpper&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;datapointStyle&#xD;datapointWidth&#xD;datapointConnected&#xD;datapointColorRed&#xD;datapointColorGreen&#xD;datapointColorBlue&#xD;scalesPrecision&#xD;scalesTextheight&#xD;scalesNumberXintervals&#xD;minValue&#xD;maxValue&#xD;columns&#xD;rows</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>done</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doReplaceInList"><l>2</l><l/><block var="value"/></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doIf"><block s="reportNot"><block var="done"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="value"/></list></block><block var="myProperties"/></block></script></block><block s="doIf"><block s="reportOr"><block s="reportOr"><block s="reportEquals"><l>name</l><l>titleHeight</l></block><block s="reportOr"><block s="reportEquals"><l>name</l><l>xLabelHeight</l></block><block s="reportEquals"><l>name</l><l>yLabelHeight</l></block></block></block><block s="reportEquals"><l>name</l><l>scalesTextheight</l></block></block><script><custom-block s="$storage set offsets"></custom-block></script></block></script></block></script></block-definition><block-definition s="$storage property %&apos;name&apos;" type="reporter" category="lists"><comment w="95" collapsed="false">reads the value of an existing property</comment><header></header><code></code><translations></translations><inputs><input type="%s">width<options>type of data&#xD;width&#xD;height&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;leftOffset&#xD;upperOffset&#xD;lowerOffset&#xD;title&#xD;titleHeight&#xD;xLabel&#xD;xLabelHeight&#xD;yLabel&#xD;yLabelHeight&#xD;xLeft&#xD;xRight&#xD;yLower&#xD;yUpper&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;datapointStyle&#xD;datapointWidth&#xD;datapointConnected&#xD;datapointColorRed&#xD;datapointColorGreen&#xD;datapointColorBlue&#xD;scalesPrecision&#xD;scalesTextheight&#xD;scalesNumberXintervals&#xD;minValue&#xD;maxValue&#xD;columns&#xD;rows</options></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><l>not found</l></block><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doSetVar"><l>result</l><block s="reportListItem"><l>2</l><l/></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$storage set offsets" type="command" category="looks"><comment x="0" y="0" w="187.1666676666667" collapsed="false">sets the distances of the diagram axes from the edges of the DataSprite</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><custom-block s="$storage property %s"><l>title</l></custom-block></block><l>0</l></block><script><custom-block s="$storage set property %s to %s"><l>upperOffset</l><l>0</l></custom-block></script><script><custom-block s="$storage set property %s to %s"><l>upperOffset</l><block s="reportSum"><custom-block s="$storage property %s"><l>titleHeight</l></custom-block><l>10</l></block></custom-block></script></block><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><custom-block s="$storage property %s"><l>xLabel</l></custom-block></block><l>0</l></block><script><custom-block s="$storage set property %s to %s"><l>lowerOffset</l><l>20</l></custom-block></script><script><custom-block s="$storage set property %s to %s"><l>lowerOffset</l><block s="reportSum"><custom-block s="$storage property %s"><l>xLabelHeight</l></custom-block><block s="reportSum"><custom-block s="$storage property %s"><l>scalesTextheight</l></custom-block><l>10</l></block></block></custom-block></script></block><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><custom-block s="$storage property %s"><l>yLabel</l></custom-block></block><l>0</l></block><script><custom-block s="$storage set property %s to %s"><l>leftOffset</l><l>60</l></custom-block></script><script><custom-block s="$storage set property %s to %s"><l>leftOffset</l><block s="reportSum"><custom-block s="$storage property %s"><l>yLabelHeight</l></custom-block><block s="reportSum"><custom-block s="$storage property %s"><l>scalesTextheight</l></custom-block><l>50</l></block></block></custom-block></script></block></script></block></script></block-definition><block-definition s="$storage set ranges to x [ %&apos;xl&apos; %&apos;xr&apos; ] y [ %&apos;yl&apos; %&apos;yu&apos; ]" type="command" category="looks"><comment x="0" y="0" w="103.33333333333333" collapsed="false">sets the ranges for the axes of the diagrams of a DataSprit</comment><header></header><code></code><translations></translations><inputs><input type="%n">-10</input><input type="%n">10</input><input type="%n">-10</input><input type="%n">10</input></inputs><script><block s="doWarp"><script><custom-block s="$storage set property %s to %s"><l>xLeft</l><block var="xl"/></custom-block><custom-block s="$storage set property %s to %s"><l>xRight</l><block var="xr"/></custom-block><custom-block s="$storage set property %s to %s"><l>yLower</l><block var="yl"/></custom-block><custom-block s="$storage set property %s to %s"><l>yUpper</l><block var="yu"/></custom-block><custom-block s="$storage set offsets"></custom-block></script></block></script></block-definition><block-definition s="$storage attributes %&apos;costumeProperty&apos;" type="reporter" category="looks"><comment w="255.66666866666685" collapsed="false">reads property groups of a DataSprite (especially for the shortened call of JavaScript functions)</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">labels<options>ranges&#xD;labels&#xD;back-color&#xD;offsets&#xD;line-attributes&#xD;datapoint-attributes&#xD;scale-attributes&#xD;data-attributes</options></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>costumeProperty</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="costumeProperty"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>ranges</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>xLeft</l></custom-block><custom-block s="$storage property %s"><l>xRight</l></custom-block><custom-block s="$storage property %s"><l>yLower</l></custom-block><custom-block s="$storage property %s"><l>yUpper</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>labels</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>title</l></custom-block><custom-block s="$storage property %s"><l>xLabel</l></custom-block><custom-block s="$storage property %s"><l>yLabel</l></custom-block><custom-block s="$storage property %s"><l>titleHeight</l></custom-block><custom-block s="$storage property %s"><l>xLabelHeight</l></custom-block><custom-block s="$storage property %s"><l>yLabelHeight</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>back-color</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>backColorRed</l></custom-block><custom-block s="$storage property %s"><l>backColorGreen</l></custom-block><custom-block s="$storage property %s"><l>backColorBlue</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>offsets</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>leftOffset</l></custom-block><custom-block s="$storage property %s"><l>upperOffset</l></custom-block><custom-block s="$storage property %s"><l>lowerOffset</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>line-attributes</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>lineStyle</l></custom-block><custom-block s="$storage property %s"><l>lineWidth</l></custom-block><custom-block s="$storage property %s"><l>lineColorRed</l></custom-block><custom-block s="$storage property %s"><l>lineColorGreen</l></custom-block><custom-block s="$storage property %s"><l>datapointColorBlue</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>datapoint-attributes</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>datapointStyle</l></custom-block><custom-block s="$storage property %s"><l>datapointWidth</l></custom-block><custom-block s="$storage property %s"><l>datapointConnected</l></custom-block><custom-block s="$storage property %s"><l>datapointColorRed</l></custom-block><custom-block s="$storage property %s"><l>datapointColorGreen</l></custom-block><custom-block s="$storage property %s"><l>datapointColorBlue</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>scale-attributes</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>scalesPrecision</l></custom-block><custom-block s="$storage property %s"><l>scalesTextheight</l></custom-block><custom-block s="$storage property %s"><l>scalesNumberXintervals</l></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="costumeProperty"/><l>data-attributes</l></block><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage property %s"><l>columns</l></custom-block><custom-block s="$storage property %s"><l>rows</l></custom-block><custom-block s="$storage property %s"><l>minValue</l></custom-block><custom-block s="$storage property %s"><l>maxValue</l></custom-block></list></block></block></script></block></script></block></script></block-definition><block-definition s="$storage add scales" type="command" category="looks"><comment x="0" y="0" w="198.33333333333334" collapsed="false">draws and labels the axes of a DataSprite</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>scaleattributes</l><l>labels</l><l>offsets</l><l>ranges</l><l>backcolor</l></list><l>function xTOxp(x){return x0+(x*diagramWidth/(xRight-xLeft));}&#xD;function yTOyp(y){return y0-(y*diagramHeight/(yUpper-yLower));}&#xD;function xpTOx(xp){return (xp-x0)*(xRight-xLeft)/diagramWidth;}&#xD;function ypTOy(yp){return (y0-yp)*(yUpper-yLower)/diagramHeight;}&#xD;&#xD;function drawScales()&#xD;{&#xD;  var dx=(xRight-xLeft)/xIntervals, delta=xTOxp(dx)-x0, xpos=x0;&#xD;  var w,text;&#xD;&#xD;  while(xpos&gt;=0){xpos=xpos-delta;}&#xD;  while(xpos&lt;0){xpos=xpos+delta;}&#xD;  var x=xpTOx(xpos);&#xD;  ctx.lineWidth = 1;&#xD;  ctx.fillStyle = new Color(0,0,0).toString();&#xD;  ctx.strokeStyle = new Color(0,0,0).toString();&#xD;  ctx.font = ""+textheight+"px sans-serif";&#xD;  while(xpos&lt;=diagramWidth){&#xD;    text=x.toPrecision(n);&#xD;    w= ctx.measureText(text).width;&#xD;    ctx.moveTo(xpos+leftOffset,diagramHeight-3+upperOffset);&#xD;    ctx.lineTo(xpos+leftOffset,diagramHeight+upperOffset);&#xD;    ctx.moveTo(xpos+leftOffset,1+upperOffset);&#xD;    ctx.lineTo(xpos+leftOffset,3+upperOffset);&#xD;    if(xpos&lt;diagramWidth-10){ctx.fillText(text,xpos-w/2+leftOffset,diagramHeight+textheight+3+upperOffset);}&#xD;    xpos=xpos+delta;&#xD;    x=xpTOx(xpos);&#xD;  }    &#xD;  var dy=(yUpper-yLower)/10, delta=y0-yTOyp(dy), ypos=y0;&#xD;  while(ypos&gt;=0){ypos=ypos-delta;}&#xD;  ypos=ypos+delta;&#xD;  var y=ypTOy(ypos);&#xD;  while(ypos&lt;=diagramHeight){&#xD;    text=y.toPrecision(n);&#xD;    w= ctx.measureText(text).width;&#xD;    ctx.moveTo(1+leftOffset,ypos+upperOffset);&#xD;    ctx.lineTo(3+leftOffset,ypos+upperOffset);&#xD;    ctx.moveTo(rightCostumeEdge-3,ypos+upperOffset);&#xD;    ctx.lineTo(rightCostumeEdge,ypos+upperOffset);&#xD;    if(ypos&gt;10){ctx.fillText(text,leftOffset-25-w/2,ypos+3+upperOffset);}&#xD;    ypos=ypos+delta;&#xD;    y=ypTOy(ypos);&#xD;  }    &#xD;}&#xD;&#xD;//variables&#xD;var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;// to ensure the correct type "Number" to number parameters&#xD;var xLeft = Number(ranges.at(1)), xRight = Number(ranges.at(2)), yLower = Number(ranges.at(3)), yUpper = Number(ranges.at(4));&#xD;var upperOffset = Number(offsets.at(2)), lowerOffset = Number(offsets.at(3)), leftOffset = Number(offsets.at(1)),&#xD;    n=Number(scaleattributes.at(1)), textheight=Number(scaleattributes.at(2)),xIntervals=Number(scaleattributes.at(3));&#xD;&#xD;var rightCostumeEdge=costume.contents.width, lowerCostumeEdge=costume.contents.height,&#xD;    diagramWidth=rightCostumeEdge-leftOffset, diagramHeight=lowerCostumeEdge-lowerOffset-upperOffset;&#xD;var x0=xLeft/(xLeft-xRight)*diagramWidth, y0=yUpper/(yUpper-yLower)*diagramHeight,w;&#xD;var r=backcolor.at(1), g=backcolor.at(2), b=backcolor.at(3);&#xD;&#xD;//clear label regions&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.strokeStyle = new Color(0,0,0).toString();&#xD;ctx.lineWidth=1;&#xD;ctx.fillRect(0,0,rightCostumeEdge,upperOffset-1);&#xD;ctx.fillRect(0,0,leftOffset-1,lowerCostumeEdge);&#xD;ctx.fillRect(0,lowerCostumeEdge-lowerOffset+1,rightCostumeEdge,lowerCostumeEdge);&#xD;ctx.strokeRect(0,0,rightCostumeEdge,lowerCostumeEdge);&#xD;&#xD;//draw labels&#xD;ctx.fillStyle = new Color(0,0,0).toString();&#xD;if(upperOffset&gt;0){&#xD;  ctx.moveTo(0,upperOffset); ctx.lineTo(rightCostumeEdge-1,upperOffset);&#xD;  ctx.font = ""+labels.at(4)+"px sans-serif";&#xD;  var w= ctx.measureText(labels.at(1)).width;&#xD;  ctx.fillText(labels.at(1),rightCostumeEdge/2-w/2,22);&#xD;&#xD;}&#xD;ctx.moveTo(leftOffset,lowerCostumeEdge-lowerOffset);&#xD;ctx.lineTo(rightCostumeEdge,lowerCostumeEdge-lowerOffset);&#xD;if(labels.at(2).length&gt;0){&#xD;  ctx.font = ""+labels.at(5)+"px sans-serif";&#xD;  w= ctx.measureText(labels.at(2)).width;&#xD;  ctx.fillText(labels.at(2),diagramWidth/2+leftOffset-w/2,lowerCostumeEdge-6);&#xD;}&#xD;ctx.moveTo(leftOffset,upperOffset);&#xD;ctx.lineTo(leftOffset,lowerCostumeEdge-lowerOffset);&#xD;if(labels.at(3).length&gt;0){&#xD;  ctx.font = ""+labels.at(6)+"px sans-serif";&#xD;  w= ctx.measureText(labels.at(3)).width;&#xD;  ctx.rotate(-Math.PI/2);  &#xD;  ctx.fillText(labels.at(3),-w/2-lowerCostumeEdge/2,17);&#xD;  ctx.rotate(Math.PI/2);  &#xD;}&#xD;&#xD;drawScales();&#xD;&#xD;ctx.closePath();&#xD;ctx.fill();&#xD;ctx.stroke();&#xD;    &#xD;&#xD;</l></block><list><block var="myCostume"/><custom-block s="$storage attributes %txt"><l>scale-attributes</l></custom-block><custom-block s="$storage attributes %txt"><l>labels</l></custom-block><custom-block s="$storage attributes %txt"><l>offsets</l></custom-block><custom-block s="$storage attributes %txt"><l>ranges</l></custom-block><custom-block s="$storage attributes %txt"><l>back-color</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="$storage %&apos;n&apos; new data of ranges %&apos;xmin&apos; to %&apos;xmax&apos; and %&apos;ymin&apos; to %&apos;ymax&apos;" type="reporter" category="lists"><comment w="98.21917808219185" collapsed="false">creates new random data in the specified ranges</comment><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n">-5</input><input type="%n">5</input><input type="%n">-5</input><input type="%n">5</input></inputs><script><block s="doDeclareVariables"><list><l>new data</l><l>x</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>new data</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block><custom-block s="random"></custom-block></block><block var="xmin"/></block></block><block s="doAddToList"><block s="reportNewList"><list><block var="x"/><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportQuotient"><block var="ymax"/><l>2</l></block><custom-block s="random"></custom-block></block></block></list></block><block var="new data"/></block></script></block><block s="doReport"><block var="new data"/></block></script></block></script></block-definition><block-definition s="$storage add dataplot number/number %&apos;data&apos;" type="command" category="looks"><comment x="0" y="0" w="132.5" collapsed="false">draws the data points of a two-dimensional table with numerical values</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$storage property %s"><l>type of data</l></custom-block><l>table</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSayFor"><l>ERROR: impossible</l><l>2</l></block><block s="doSetVar"><l>source</l><l></l></block></script></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIf"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>ranges</l><l>offsets</l><l>labels</l><l>lineattributes</l><l>dataattributes</l><l>data</l></list><l>function xTOxp(x){return x0+(x*diagramWidth/(xRight-xLeft));}&#xD;function yTOyp(y){return y0-(y*diagramHeight/(yUpper-yLower));}&#xD;function xpTOx(xp){return (xp-x0)*(xRight-xLeft)/diagramWidth;}&#xD;function ypTOy(yp){return (y0-yp)*(yUpper-yLower)/diagramHeight;}&#xD;function round(x,n){return Math.round(x*Math.pow(10,n))/Math.pow(10,n);}&#xD;function randomInt(min,max){return Math.floor(Math.random()*(max-min+1)+min);}&#xD;&#xD;&#xD;function plotData(){&#xD;  var i=0,linewidth=lineattributes.at(2),linestyle=1,datawidth=dataattributes.at(2),datastyle=1,&#xD;      connected=dataattributes.at(3);&#xD;  var arraydata=data.asArray(),xpos,ypos,xpOld,ypOld,w;&#xD;  if(lineattributes.at(1).trim()==&apos;continuous&apos;) linestyle = 1;&#xD;    else if(lineattributes.at(1).trim()==&apos;dashed&apos;) linestyle = 2;&#xD;      else if(lineattributes.at(1).trim()==&apos;dash-dot&apos;) linestyle = 3;&#xD;        else if(lineattributes.at(1).trim()==&apos;dot-dot&apos;) linestyle = 4;&#xD;  if(dataattributes.at(1).trim()== &apos;o circle&apos;) datastyle=1;&#xD;  else if(dataattributes.at(1).trim()== &apos;._point&apos;) datastyle=2;  &#xD;       else if(dataattributes.at(1).trim()==&apos;*_asterix&apos;) datastyle=3;&#xD;            else if(dataattributes.at(1).trim()== &apos;+_plus&apos;) datastyle=4;&#xD;                 else if(dataattributes.at(1).trim()== &apos;x_ex&apos;) datastyle=5;&#xD;                      else if(dataattributes.at(1).trim()== &apos;square&apos;) datastyle=6;&#xD;                           else if(dataattributes.at(1).trim()== &apos;triangle&apos;) datastyle=7;&#xD;                                else if(dataattributes.at(1).trim()== &apos;none&apos;) datastyle=8;&#xD;                                     else datastyle=1;&#xD;  ctx.strokeStyle=new Color(0,0,0).toString();&#xD;  ctx.fillStyle=new Color(dataattributes.at(4),dataattributes.at(5),dataattributes.at(6)).toString();&#xD;  ctx.lineWidth = linewidth;&#xD;  if(linestyle==2){ctx.setLineDash([10,5]);}&#xD;  else if(linestyle==3){ctx.setLineDash([10,2,1,2]);}    &#xD;       else if(linestyle==4){ctx.setLineDash([1,2]);}&#xD;            else{ctx.setLineDash([]);}&#xD;  if(arraydata.length&gt;0){&#xD;    xpOld= xTOxp(arraydata[0].at(1));&#xD;    ypOld=yTOyp(arraydata[0].at(2));&#xD;    }&#xD;  while(i&lt;arraydata.length){&#xD;    xpos=xTOxp(arraydata[i].at(1));&#xD;    ypos=yTOyp(arraydata[i].at(2));&#xD;    if(connected &amp;&amp; i&gt;0){&#xD;       ctx.beginPath();&#xD;       ctx.moveTo(xpOld+leftOffset,ypOld+upperOffset);&#xD;       ctx.lineTo(xpos+leftOffset,ypos+upperOffset);&#xD;       ctx.closePath();&#xD;       ctx.fill();&#xD;       ctx.stroke();     &#xD;       }&#xD;     ctx.beginPath();&#xD;     if(datastyle==1){&#xD;       ctx.arc(xpos+leftOffset,ypos+upperOffset,datawidth/2,0,6.283185307179586476925286766559);&#xD;       }&#xD;     if(datastyle==2){&#xD;       ctx.arc(xpos+leftOffset,ypos+upperOffset,2,0,6.283185307179586476925286766559);&#xD;       }&#xD;     if(datastyle==3){&#xD;       ctx.font = ""+datawidth+"px sans-serif";&#xD;       w= ctx.measureText("*").width;&#xD;       ctx.fillText("*",xpos+leftOffset-w/2,ypos+upperOffset+datawidth/2);&#xD;       }&#xD;     if(datastyle==4){&#xD;       ctx.font = ""+datawidth+"px sans-serif";&#xD;       w= ctx.measureText("+").width;&#xD;       ctx.fillText("+",xpos+leftOffset-w/2,ypos+upperOffset+datawidth/2);&#xD;       }&#xD;   if(datastyle==5){&#xD;      ctx.font = ""+datawidth+"px sans-serif";&#xD;      w= ctx.measureText("X").width;&#xD;      ctx.fillText("X",xpos+leftOffset-w/2,ypos+upperOffset+datawidth/2);&#xD;      }&#xD;   if(datastyle==6){&#xD;       ctx.fillRect(xpos+leftOffset-datawidth/2,ypos+upperOffset-datawidth/2,datawidth,datawidth);&#xD;       ctx.strokeRect(xpos+leftOffset-datawidth/2,ypos+upperOffset-datawidth/2,datawidth,datawidth);&#xD;       }&#xD;   if(datastyle==7){&#xD;       ctx.moveTo(xpos+leftOffset,ypos+upperOffset-datawidth/2);&#xD;       ctx.lineTo(xpos+leftOffset-datawidth/2,ypos+upperOffset+datawidth/2);&#xD;       ctx.lineTo(xpos+leftOffset+datawidth/2,ypos+upperOffset+datawidth/2);&#xD;       ctx.lineTo(xpos+leftOffset,ypos+upperOffset-datawidth/2);&#xD;        }&#xD;   if(datastyle==0){&#xD;       ctx.moveTo(xpos+leftOffset,ypos+upperOffset);&#xD;       ctx.lineTo(xpos+leftOffset,ypos+upperOffset+1);&#xD;        }&#xD;    ctx.closePath();&#xD;    ctx.fill();&#xD;    ctx.stroke();&#xD;    xpOld=xpos; ypOld=ypos;&#xD;    i=i+1;&#xD;&#xD;    }&#xD;    ctx.setLineDash([]);&#xD;  }&#xD;&#xD;// to ensure the correct type "Number" to number parameters&#xD;xLeft = Number(ranges.at(1));&#xD;xRight = Number(ranges.at(2));&#xD;yLower = Number(ranges.at(3));&#xD;yUpper = Number(ranges.at(4));&#xD;upperOffset = Number(offsets.at(2));&#xD;lowerOffset = Number(offsets.at(3));&#xD;leftOffset = Number(offsets.at(1));&#xD;&#xD;var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var rightCostumeEdge=costume.contents.width, lowerCostumeEdge=costume.contents.height,&#xD;    diagramWidth=rightCostumeEdge-leftOffset, diagramHeight=lowerCostumeEdge-lowerOffset-upperOffset;&#xD;var x0=xLeft/(xLeft-xRight)*diagramWidth, y0=yUpper/(yUpper-yLower)*diagramHeight;&#xD;&#xD;plotData();       &#xD;&#xD;   </l></block><list><block var="myCostume"/><custom-block s="$storage attributes %txt"><l>ranges</l></custom-block><custom-block s="$storage attributes %txt"><l>offsets</l></custom-block><custom-block s="$storage attributes %txt"><l>labels</l></custom-block><custom-block s="$storage attributes %txt"><l>line-attributes</l></custom-block><custom-block s="$storage attributes %txt"><l>datapoint-attributes</l></custom-block><block var="source"/></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block></script></block-definition><block-definition s="$storage regression line parameters of %&apos;data&apos;" type="reporter" category="lists"><comment w="121.66666666666667" collapsed="false">calculates the parameters of a regression line</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>meanX</l><l>meanY</l><l>denominator</l><l>numerator</l><l>m</l><l>b</l></list></block><block s="doWarp"><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="data"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="data"/></block></block><l>2</l></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var meanX,meanY,sumX=0,sumY=0,numerator=0,denominator=0,m,b;&#xD;i=1;&#xD;while(i &lt;= data.length()) {&#xD;  sumX=sumX+Number(data.at(i).at(1));&#xD;  sumY=sumY+Number(data.at(i).at(2));&#xD;  i++;&#xD;  }&#xD;meanX=sumX/data.length();&#xD;meanY=sumY/data.length();&#xD;i=1;&#xD;while(i &lt;= data.length()) {&#xD;  numerator=numerator+(data.at(i).at(1)-meanX)*(data.at(i).at(2)-meanY);&#xD;  denominator=denominator+(data.at(i).at(1)-meanX)*(data.at(i).at(1)-meanX);&#xD;  i++;&#xD;  }&#xD;m=numerator/denominator;&#xD;b=meanY-m*meanX;&#xD;return new List([m,b]);     </l></block><list><block var="data"/></list></block></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage add FITS or RGB image min/max %&apos;min&apos; %&apos;max&apos; gray? %&apos;gray&apos; log? %&apos;log&apos;" type="command" category="looks"><comment w="99.16666666666667" collapsed="false">generates an image from the FITS data of the DataSprite</comment><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">32757</input><input type="%b">true</input><input type="%b">false</input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$storage property %s"><l>type of data</l></custom-block><l>FITS</l></block><script><custom-block s="$storage new costume width %n height %n color %n %n %n"><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>height</l></custom-block><l>255</l><l>225</l><l>205</l></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>pixels</l></list><l>  var i, k,&#xD;    ctx = costume.contents.getContext(&apos;2d&apos;),&#xD;    src = pixels.asArray(),&#xD;    dta = ctx.createImageData(costume.width(), costume.height());&#xD;  for (i = 0; i &lt; src.length; i += 1) {&#xD;    px = src[i].asArray();&#xD;    for (k = 0; k &lt; 4; k += 1) {&#xD;      dta.data[(i * 4) + k] = px[k];&#xD;    }&#xD;  }&#xD;  ctx.putImageData(dta, 0, 0);</l></block><list><block var="myCostume"/><custom-block s="$storage pixels from FITS data %s min %n max %n gray? %b log? %b"><l>myData</l><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$storage property %s"><l>type of data</l></custom-block><l>RGB</l></block><script><custom-block s="$storage new costume width %n height %n color %n %n %n"><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>height</l></custom-block><l>255</l><l>225</l><l>205</l></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>pixels</l></list><l>  var i, k,&#xD;    ctx = costume.contents.getContext(&apos;2d&apos;),&#xD;    src = pixels.asArray(),&#xD;    dta = ctx.createImageData(costume.width(), costume.height());&#xD;  for (i = 0; i &lt; src.length; i += 1) {&#xD;    px = src[i].asArray();&#xD;    for (k = 0; k &lt; 4; k += 1) {&#xD;      dta.data[(i * 4) + k] = px[k];&#xD;    }&#xD;  }&#xD;  ctx.putImageData(dta, 0, 0);</l></block><list><block var="myCostume"/><custom-block s="$storage pixels from RGB data %s min %n max %n gray? %b log? %b"><l>myData</l><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script><script><block s="doSayFor"><l>ERROR: impossible!</l><l>2</l></block></script></block></script></block></script></block></script></block-definition><block-definition s="$storage pixels from FITS data %&apos;data&apos; min %&apos;min&apos; max %&apos;max&apos; gray? %&apos;gray&apos; log? %&apos;log&apos;" type="reporter" category="looks"><comment w="131.66666666666669" collapsed="false">calculates the pixels of a costume from the FITS data</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">0</input><input type="%n">32757</input><input type="%b">true</input><input type="%b">false</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>gray</l><l>log</l></list><l>var result=[], i=1, n, value, interval = (max-min)/8;&#xD;while(i&lt;= data.length()) {&#xD;  value = data.at(i);&#xD;  n = value;&#xD;  if(value&lt;=min) n=min+1;&#xD;  if(value&gt;max) n =max;&#xD;  if(log) n = Math.round(Math.log(n-min)/Math.log(max-min)*255);&#xD;  else n = Math.round((n-min)/(max-min)*255);&#xD;  if(gray) result.push(new List([n,n,n,255]));&#xD;  else { // result.push(new List([n,255-n,Math.round(255-n/2),255]));&#xD;    if(value&lt;=min) {result.push(new List([0,0,0,255]));}&#xD;       else if(value&lt;min+interval) result.push(new List([0,0,n,255]));&#xD;            else if(value&lt;min+2*interval) result.push(new List([0,n,n,255]));&#xD;                 else if(value&lt;min+3*interval) result.push(new List([n,0,n,255]));&#xD;                      else if(value&lt;min+4*interval) result.push(new List([0,n,0,255]));&#xD;                           else if(value&lt;min+5*interval) result.push(new List([n,0,0,n]));&#xD;                                else if(value&lt;min+6*interval) result.push(new List([n,n/2,0,255]));&#xD;                                     else if(value&lt;min+7*interval) result.push(new List([n,n,0,255]));&#xD;                                          else if(value&lt;min+8*interval) result.push(new List([n,n,n,255]));&#xD;                                               else result.push(new List([255,255,255,255]));&#xD;     }&#xD;  i = i+1;&#xD;  }&#xD;return new List(result);</l></block><list><block var="source"/><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></list></block></block></script></block></script></block-definition><block-definition s="$storage image value of myData at %&apos;x&apos; %&apos;y&apos;" type="reporter" category="sensing"><comment w="132.5" collapsed="false">reads the data value at the position (x/y) of an image stored in myData</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><script><block s="doSetVar"><l>x</l><block s="reportRound"><block var="x"/></block></block><block s="doSetVar"><l>y</l><block s="reportRound"><block var="y"/></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$storage property %s"><l>width</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$storage property %s"><l>height</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><l>-1</l></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$storage property %s"><l>width</l></custom-block></block></block><block var="myData"/></block></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage draw line from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment w="90" collapsed="false">draws a line on present costume using line properties</comment><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n">10</input><input type="%n">100</input><input type="%n">50</input></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x1,y1);&#xD;ctx.lineTo(x2,y2);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="myCostume"/><block var="x1"/><block var="y1"/><block var="x2"/><block var="y2"/><custom-block s="$storage property %s"><l>lineWidth</l></custom-block><custom-block s="$storage property %s"><l>lineColorRed</l></custom-block><custom-block s="$storage property %s"><l>lineColorGreen</l></custom-block><custom-block s="$storage property %s"><l>datapointColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="$storage %&apos;selection&apos; column %&apos;x&apos; and %&apos;y&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">calculates the ranges, the covariance or the correlation between two columns of a table&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">ranges<options>ranges&#xD;covariance&#xD;correlation</options></input><input type="%n">1</input><input type="%n">2</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>selection</l><l>table</l><l>x</l><l>y</l></list><l>var xmin,xmax,ymin,ymax,meanx, meany,cov,corr,varx,vary,i,valx,valy;&#xD;if(table.contents.length&lt;1) return "bad data";&#xD;xmin=Number(table.at(1).at(x));&#xD;xmax=xmin;&#xD;ymin=Number(table.at(1).at(y));&#xD;ymax=ymin;&#xD;meanx=xmin; meany=ymin;&#xD;i=2;&#xD;while(i&lt;=table.contents.length){&#xD;  valx=Number(table.at(i).at(x));&#xD;  valy=Number(table.at(i).at(y));&#xD;  if(valx&lt;xmin) xmin=valx;&#xD;  if(valx&gt;xmax) xmax=valx;&#xD;  if(valy&lt;ymin) ymin=valy;&#xD;  if(valy&gt;ymax) ymax=valy;&#xD;  meanx=Number(meanx)+valx;&#xD;  meany=Number(meany)+valy;&#xD;  i++;&#xD;  }&#xD;meanx=meanx/(i-1);&#xD;meany=meany/(i-1);&#xD;if(selection=="ranges")&#xD;  return new List([xmin,xmax,ymin,ymax]);&#xD;&#xD;i=1; cov=0; corr=0; varx=0; vary=0;&#xD;while(i&lt;=table.contents.length){&#xD;  valx=Number(table.at(i).at(x));&#xD;  valy=Number(table.at(i).at(y));&#xD;  cov = Number(cov)+(valx-meanx)*(valy-meany);&#xD;  varx = Number(varx) +(valx-meanx)*(valx-meanx);&#xD;  vary = Number(vary) +(valy-meany)*(valy-meany);&#xD;  i++;&#xD;  }&#xD;varx=Math.sqrt(varx);&#xD;vary=Math.sqrt(vary);&#xD;corr = cov/(varx*vary);&#xD;cov=cov/(i-2);&#xD;if(selection=="covariance")&#xD;  return cov;&#xD;if(selection=="correlation")&#xD;  return corr;&#xD;return "unknown"</l></block><list><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block><block var="source"/><block var="x"/><block var="y"/></list></block></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage affine transformation of %&apos;imagedata&apos; w %&apos;w&apos; h %&apos;h&apos; by %&apos;originalPoints&apos; --&gt; %&apos;imagePoints&apos;" type="reporter" category="operators"><comment w="90" collapsed="false">applies an affine transformation to an image</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>a11</l><l>a12</l><l>a13</l><l>a21</l><l>a22</l><l>a23</l><l>S</l><l>P1</l><l>P2</l><l>P3</l><l>Q1</l><l>Q2</l><l>Q3</l></list></block><block s="doWarp"><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="imagedata"/><l>vector</l></custom-block><script><block s="doSetVar"><l>P1</l><block s="reportListItem"><l>1</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>P2</l><block s="reportListItem"><l>2</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>P3</l><block s="reportListItem"><l>3</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>Q1</l><block s="reportListItem"><l>1</l><block var="imagePoints"/></block></block><block s="doSetVar"><l>Q2</l><block s="reportListItem"><l>2</l><block var="imagePoints"/></block></block><block s="doSetVar"><l>Q3</l><block s="reportListItem"><l>3</l><block var="imagePoints"/></block></block><block s="doSetVar"><l>S</l><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="P2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="P3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="P1"/></block></block></block></block></block></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="S"/><l>0</l></block></block><script><block s="doSetVar"><l>a11</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q2"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q3"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q1"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a12</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q3"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q1"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q2"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a21</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q2"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q3"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q1"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a22</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q3"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q1"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q2"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a13</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a23</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block></block></block></block><block var="S"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a11</l><l>a12</l><l>a13</l><l>a21</l><l>a22</l><l>a23</l><l>w</l><l>h</l><l>data</l></list><l>var x,y,xnew,ynew,value,newdata=[];&#xD;for(var i=1;i&lt;=data.contents.length;i++) newdata.push(0);&#xD;for(var y=1;y&lt;=h;y++)&#xD;  for(var x=1;x&lt;=w;x++){&#xD;    value= data.at(x+(y-1)*w);&#xD;    xnew=Math.round(a11*x+a12*y+a13);&#xD;    ynew=Math.round(a21*x+a22*y+a23);&#xD;    if((xnew&gt;0) &amp;&amp; (xnew&lt;=w) &amp;&amp; (ynew&gt;0) &amp;&amp; (ynew&lt;=h)) newdata[xnew-1+(ynew-1)*w-1] = value; &#xD;}&#xD;return new List(newdata);</l></block><list><block var="a11"/><block var="a12"/><block var="a13"/><block var="a21"/><block var="a22"/><block var="a23"/><block var="w"/><block var="h"/><block var="imagedata"/></list></block></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage add histogram of %&apos;data&apos; with %&apos;n&apos; groups" type="command" category="looks"><comment w="90" collapsed="false">draws a histogram of the data</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">100</input></inputs><script><block s="doDeclareVariables"><list><l>histogramdata</l><l>ranges</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportOr"><block s="reportEquals"><custom-block s="$storage property %s"><l>type of data</l></custom-block><l>table</l></block><block s="reportEquals"><custom-block s="$storage property %s"><l>type of data</l></custom-block><l>FITS</l></block></block><block s="reportEquals"><custom-block s="$storage property %s"><l>columns</l></custom-block><l>1</l></block></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSayFor"><l>ERROR: wrong data format</l><l>2</l></block></script></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>vector</l></custom-block><script><block s="doSetVar"><l>histogramdata</l><custom-block s="$storage histogram data from %l with %n groups"><block var="source"/><block var="n"/></custom-block></block><block s="doSetVar"><l>ranges</l><custom-block s="$storage %txt column %n and %n of %s"><l>ranges</l><l>1</l><l>2</l><block var="histogramdata"/></custom-block></block><custom-block s="$storage set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><block var="ranges"/></block><block s="reportListItem"><l>2</l><block var="ranges"/></block><l>0</l><block s="reportProduct"><l>1.1</l><block s="reportListItem"><l>4</l><block var="ranges"/></block></block></custom-block><custom-block s="$storage set line attributes style %s width %n color %n %n %n"><l>continuous</l><l>1</l><l>255</l><l>0</l><l>0</l></custom-block><custom-block s="$storage set scale attributes precision %n textheight %n number of intervalls x-axis %n"><l>5</l><l>10</l><l>5</l></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>ranges</l><l>offsets</l><l>lineattributes</l><l>data</l></list><l>function xTOxp(x){return x0+(x*diagramWidth/(xRight-xLeft));}&#xD;function yTOyp(y){return y0-(y*diagramHeight/(yUpper-yLower));}&#xD;function xpTOx(xp){return (xp-x0)*(xRight-xLeft)/diagramWidth;}&#xD;function ypTOy(yp){return (y0-yp)*(yUpper-yLower)/diagramHeight;}&#xD;&#xD;function plotHistogram(){&#xD;  var i=0,linestyle=1, arraydata=data.asArray(), xpos=5, deltaX=(diagramWidth-1)/data.contents.length;&#xD;  ctx.strokeStyle=new Color(0,0,0).toString();&#xD;  ctx.fillStyle=new Color(lineattributes.at(3),lineattributes.at(4),lineattributes.at(5)).toString();&#xD;  ctx.lineWidth = lineattributes.at(2);&#xD;  if(deltaX&lt;1) deltaX=1;&#xD;  while(i&lt;arraydata.length){&#xD;    ypos=yTOyp(arraydata[i].at(2));&#xD;    ctx.beginPath();&#xD;    ctx.fillRect(xpos+leftOffset,ypos+upperOffset,deltaX,y0);&#xD;    ctx.strokeRect(xpos+leftOffset,ypos+upperOffset,deltaX,y0);&#xD;    ctx.closePath();&#xD;    ctx.fill();&#xD;    ctx.stroke();     &#xD;    i=i+1;&#xD;    xpos=xpos+deltaX&#xD;    }&#xD;  }&#xD;&#xD;// to ensure the correct type "Number" to number parameters&#xD;xLeft = Number(ranges.at(1));&#xD;xRight = Number(ranges.at(2));&#xD;yLower = Number(ranges.at(3));&#xD;yUpper = Number(ranges.at(4));&#xD;leftOffset = Number(offsets.at(1));&#xD;upperOffset = Number(offsets.at(2));&#xD;lowerOffset = Number(offsets.at(3));&#xD;&#xD;var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var rightCostumeEdge=costume.contents.width, lowerCostumeEdge=costume.contents.height,&#xD;    diagramWidth=rightCostumeEdge-leftOffset, diagramHeight=lowerCostumeEdge-lowerOffset-upperOffset;&#xD;var x0=xLeft/(xLeft-xRight)*diagramWidth, y0=yUpper/(yUpper-yLower)*diagramHeight;&#xD;&#xD;plotHistogram();       &#xD; </l></block><list><block var="myCostume"/><custom-block s="$storage attributes %txt"><l>ranges</l></custom-block><custom-block s="$storage attributes %txt"><l>offsets</l></custom-block><custom-block s="$storage attributes %txt"><l>line-attributes</l></custom-block><block var="histogramdata"/></list></block><custom-block s="$storage add scales"></custom-block><block s="doSwitchToCostume"><block var="myCostume"/></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage histogram data from %&apos;data&apos; with %&apos;n&apos; groups" type="reporter" category="lists"><comment w="90" collapsed="false">calculates the data for a histogram</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n">10</input></inputs><script><block s="doDeclareVariables"><list><l>min</l><l>max</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="data"/><l>vector</l></custom-block><script><block s="doSetVar"><l>min</l><custom-block s="$storage %txt of %l"><l>min</l><block var="data"/></custom-block></block><block s="doSetVar"><l>max</l><custom-block s="$storage %txt of %l"><l>max</l><block var="data"/></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>n</l></list><l>var delta=(max-min)/n, result=new Array(n), h=min+delta/2;&#xD;for(var i=0;i&lt;n;i++){&#xD;  result[i]=new List([h,0]);&#xD;  h=h+delta;&#xD;  }&#xD;for(var i=1;i&lt;=data.length();i++){&#xD;  h=Math.ceil((data.at(i)-min)/delta);&#xD;  if(h&lt;1) h=1;&#xD;  else if(h&gt;n) h=n;&#xD;  result[h-1]=new List([result[h-1].at(1),Number(result[h-1].at(2))+1]);&#xD;  }&#xD;return new List(result);</l></block><list><block var="data"/><block var="min"/><block var="max"/><block var="n"/></list></block></block></script><script><block s="doReport"><l>wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage copy of table %&apos;table&apos;" type="reporter" category="lists"><comment w="73.33333333333334" collapsed="false">reports a copy of a table</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportOr"><custom-block s="$storage is %s a %s ?"><block var="table"/><l>vector</l></custom-block><custom-block s="$storage is %s a %s ?"><block var="table"/><l>table</l></custom-block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>function listCopy(item){&#xD;  var theCopy;&#xD;  if(item instanceof List){&#xD;    theCopy = new List();&#xD;    for(var i=1;i&lt;=item.length();i++) theCopy.add(listCopy(item.at(i)));&#xD;    }&#xD;  else theCopy = item;&#xD;  return theCopy;&#xD;  }&#xD;return listCopy(data);</l></block><list><block var="table"/></list></block></block></script><script><block s="doReport"><l>ERROR: only lists supported</l></block></script></block></script></block-definition><block-definition s="$storage round %&apos;x&apos; to %&apos;n&apos; digits" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n">2</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportRound"><block s="reportProduct"><block var="x"/><block s="reportMonadic"><l><option>10^</option></l><block var="n"/></block></block></block><block s="reportMonadic"><l><option>10^</option></l><block var="n"/></block></block></block></script></block-definition><block-definition s="$storage RGB of costume at %&apos;x&apos; %&apos;y&apos;" type="reporter" category="sensing"><comment w="216.74657534246577" collapsed="false">reads the RGB value at the position (x/y) of the costume, JS-code copied from Snap!-code.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var pixel = ctx.getImageData(x,y,1,1);&#xD;return new List(new Array(pixel.data[0],pixel.data[1],pixel.data[2]));&#xD;</l></block><list><block var="myCostume"/><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="$storage set RGB of costume at %&apos;x&apos; %&apos;y&apos; to %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="sensing"><comment w="90" collapsed="false">sets the RGB value al (x|y) on costume</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%n">255</input><input type="%n">180</input><input type="%n">100</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l><l>x</l><l>y</l><l>costume</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = 1;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x,y);&#xD;ctx.lineTo(x+1,y);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="r"/><block var="g"/><block var="b"/><block var="x"/><block var="y"/><block var="myCostume"/></list></block></script></block-definition><block-definition s="$storage add graph %&apos;aFunction&apos;" type="command" category="looks"><comment x="0" y="0" w="150" collapsed="false">draws the graph of a function</comment><header></header><code></code><translations></translations><inputs><input type="%s">"ringifieded" operator or polynom</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>ranges</l><l>offsets</l><l>lineattributes</l><l>aFunction</l><l>proc</l></list><l>function xTOxp(x){return x0+(x*diagramWidth/(xRight-xLeft));}&#xD;function yTOyp(y){return y0-(y*diagramHeight/(yUpper-yLower));}&#xD;function xpTOx(xp){return (xp-x0)*(xRight-xLeft)/diagramWidth;}&#xD;function ypTOy(yp){return (y0-yp)*(yUpper-yLower)/diagramHeight;}&#xD;function round(x,n){return Math.round(x*Math.pow(10,n))/Math.pow(10,n);}&#xD;function randomInt(min,max){return Math.floor(Math.random()*(max-min+1)+min);}&#xD;&#xD;function myFunction(f,x){&#xD;if(f instanceof List){&#xD;    var grade = f.length(),result;&#xD;    if(grade==0) return 0;&#xD;    else if(grade==1) return Number(f.at(1));&#xD;         else{&#xD;           result=Number(f.at(1))*Number(x)+Number(f.at(2));&#xD;           for(var i=3;i&lt;=grade;i++) result = result*Number(x)+Number(f.at(i));&#xD;           return result;&#xD;           }&#xD;    } &#xD;  else return proc.reportAtomicMap(f,new List([x])).at(1); //copied from Snap!-code&#xD;  }&#xD;&#xD;function plotFunction(f,r,g,b,){&#xD;  var xpos,ypos,x,y,xpOld,ypOld,plottedDots=0,missingDots=0,style=1, modus = 1;&#xD;  //firstLineattribute=lineattributes.at(1).split(" ")[0];&#xD;  if(lineattributes.at(1).trim()==&apos;continuous&apos;) style = 1;&#xD;    else if(lineattributes.at(1).trim()==&apos;dashed&apos;) style = 2;&#xD;      else if(lineattributes.at(1).trim()==&apos;dash-dot&apos;) style = 3;&#xD;        else if(lineattributes.at(1).trim()==&apos;dot-dot&apos;) style = 4;&#xD;  ctx.beginPath();&#xD;  ctx.strokeStyle=new Color(r,g,b).toString();&#xD;  ctx.fillStyle=new Color(r,g,b).toString();&#xD;  ctx.lineWidth = lineattributes.at(2);&#xD;  xpOld=0;&#xD;  x=xpTOx(xpOld);&#xD;  y=myFunction(f,x);&#xD;  ypOld=yTOyp(y);&#xD;  xpos=1;&#xD;  while(xpos&lt;=diagramWidth){&#xD;    x=xpTOx(xpos);&#xD;    y=myFunction(f,x);&#xD;    ypos=yTOyp(y);&#xD;    if(modus&gt;0) {&#xD;      ctx.moveTo(xpOld+leftOffset,ypOld+upperOffset);&#xD;      ctx.lineTo(xpos+leftOffset,ypos+upperOffset);&#xD;      if(style&gt;1) plottedDots++;&#xD;      }&#xD;    else missingDots++;&#xD;    xpOld=xpos; ypOld=ypos;&#xD;    xpos=xpos+1;&#xD;    if(style==2){&#xD;      if((modus==1) &amp;&amp; (plottedDots&gt;3)) {modus = 0; plottedDots=0; missingDots=0;}&#xD;      else if((modus==0) &amp;&amp; (missingDots&gt;2)) {modus = 1; plottedDots=0; missingDots=0;}&#xD;      }&#xD;    if(style==3){&#xD;      if((modus==1) &amp;&amp; (plottedDots&gt;3)) {modus = 0; plottedDots=0; missingDots=0;}&#xD;      else if((modus==0) &amp;&amp; (missingDots&gt;0)) {modus = 2; plottedDots=0; missingDots=0;}&#xD;           else if((modus==2) &amp;&amp; (plottedDots&gt;0)) {modus = -1; plottedDots=0; missingDots=0;}&#xD;                else if((modus==-1) &amp;&amp; (missingDots&gt;0)) {modus = 1; plottedDots=0; missingDots=0;}&#xD;      }&#xD;    if(style==4){&#xD;      if((modus==1) &amp;&amp; (plottedDots&gt;0)) {modus = 0; plottedDots=0; missingDots=0;}&#xD;      else if((modus==0) &amp;&amp; (missingDots&gt;0)) {modus = 1; plottedDots=0; missingDots=0;}&#xD;      }&#xD;    }&#xD;  ctx.closePath();&#xD;  //ctx.fill();&#xD;  ctx.stroke();&#xD; &#xD;}&#xD;&#xD;// to ensure the correct type "Number" to number parameters&#xD;xLeft = Number(ranges.at(1));&#xD;xRight = Number(ranges.at(2));&#xD;yLower = Number(ranges.at(3));&#xD;yUpper = Number(ranges.at(4));&#xD;upperOffset = Number(offsets.at(2));&#xD;lowerOffset = Number(offsets.at(3));&#xD;leftOffset = Number(offsets.at(1));&#xD;&#xD;var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var rightCostumeEdge=costume.contents.width, lowerCostumeEdge=costume.contents.height,&#xD;    diagramWidth=rightCostumeEdge-leftOffset, diagramHeight=lowerCostumeEdge-lowerOffset-upperOffset;&#xD;var x0=xLeft/(xLeft-xRight)*diagramWidth, y0=yUpper/(yUpper-yLower)*diagramHeight;&#xD;&#xD;&#xD;plotFunction(aFunction,Number(lineattributes.at(3)),Number(lineattributes.at(4)),Number(lineattributes.at(5)));</l></block><list><block var="myCostume"/><custom-block s="$storage attributes %txt"><l>ranges</l></custom-block><custom-block s="$storage attributes %txt"><l>offsets</l></custom-block><custom-block s="$storage attributes %txt"><l>line-attributes</l></custom-block><block var="aFunction"/></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="$storage %&apos;data&apos; by mouse" type="reporter" category="sensing"><comment w="146.66666666666669" collapsed="false">obtaining data with the mouse</comment><header></header><code></code><translations></translations><inputs><input type="%txt">image-value<options>image-value&#xD;image-coordinates&#xD;graph-coordinates&#xD;slice-data&#xD;line-data&#xD;circle-data&#xD;brightness</options></input></inputs><script><block s="doDeclareVariables"><list><l>h</l><l>result</l><l>i</l><l>m</l><l>pixel</l><l>dist</l><l>dx</l><l>dy</l><l>points</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>x</l><l>y</l><l>p1</l><l>p2</l><l>w</l><l>h</l><l>secondCostume</l><l>ok</l><l>xold</l><l>yold</l><l>radius</l><l>sumOfValues</l><l>value</l><l>center</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>data</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>image-value</l></block><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportRound"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block></block><l>1</l></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block s="reportRound"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block></block><l>1</l></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$storage property %s"><l>width</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$storage property %s"><l>height</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><l>-1</l></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$storage property %s"><l>width</l></custom-block></block></block><block var="myData"/></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>image-coordinates</l></block><script><block s="doReport"><block s="reportNewList"><list><block s="reportSum"><block s="reportRound"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block></block><l>1</l></block><block s="reportSum"><block s="reportRound"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block></block><l>1</l></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>graph-coordinates</l></block><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportRound"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block></block><l>1</l></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block s="reportRound"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block></block><l>1</l></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$storage property %s"><l>width</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><block s="reportDifference"><custom-block s="$storage property %s"><l>height</l></custom-block><custom-block s="$storage property %s"><l>lowerOffset</l></custom-block></block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><custom-block s="$storage property %s"><l>leftOffset</l></custom-block></block><block s="reportLessThan"><block var="y"/><custom-block s="$storage property %s"><l>upperOffset</l></custom-block></block></block></block><script><block s="doReport"><block s="reportNewList"><list><l>outside</l><l></l></list></block></block></script><script><block s="doReport"><block s="reportNewList"><list><custom-block s="$storage %n to %txt"><block var="x"/><l>x</l></custom-block><custom-block s="$storage %n to %txt"><block var="y"/><l>y</l></custom-block></list></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>slice-data</l></block><script><block s="doSwitchToCostume"><block var="myCostume"/></block><block s="doSetVar"><l>points</l><custom-block s="$storage %txt by mouse"><l>line-data</l></custom-block></block><block s="doSetVar"><l>x1</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="points"/></block></block></block><block s="doSetVar"><l>y1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="points"/></block></block></block><block s="doSetVar"><l>x2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block var="points"/></block></block></block><block s="doSetVar"><l>y2</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="points"/></block></block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>dist</l><block s="reportRound"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="x1"/><block var="x2"/></block><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block><block s="reportProduct"><block s="reportDifference"><block var="y1"/><block var="y2"/></block><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></block></block></block></block><block s="doSetVar"><l>dx</l><block s="reportQuotient"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><block var="dist"/></block></block><block s="doSetVar"><l>dy</l><block s="reportQuotient"><block s="reportDifference"><block var="y2"/><block var="y1"/></block><block var="dist"/></block></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block var="dist"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="i"/><custom-block s="$storage image value of myData at %n %n"><block s="reportSum"><block var="x1"/><block s="reportProduct"><block var="i"/><block var="dx"/></block></block><block s="reportSum"><block var="y1"/><block s="reportProduct"><block var="i"/><block var="dy"/></block></block></custom-block></list></block><block var="result"/></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>line-data</l></block><script><block s="doSetVar"><l>w</l><custom-block s="$storage property %s"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$storage property %s"><l>height</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="$storage copy of costume %obj"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><custom-block s="$storage set line attributes style %s width %n color %n %n %n"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doSetVar"><l>p1</l><custom-block s="$storage %txt by mouse"><l>image-coordinates</l></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p1"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p1"/></block></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doSetVar"><l>p2</l><custom-block s="$storage %txt by mouse"><l>image-coordinates</l></custom-block></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="p2"/></block><block var="xold"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="p2"/></block><block var="yold"/></block></block></block><script><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doSetVar"><l>myCostume</l><custom-block s="$storage copy of costume %obj"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p2"/></block></block><block s="doSwitchToCostume"><block var="myCostume"/></block><custom-block s="$storage draw line from %n %n to %n %n"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doReport"><block s="reportNewList"><list><block var="p1"/><block var="p2"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>circle-data</l></block><script><block s="doSetVar"><l>w</l><custom-block s="$storage property %s"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$storage property %s"><l>height</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="$storage copy of costume %obj"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><custom-block s="$storage set line attributes style %s width %n color %n %n %n"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doSetVar"><l>p1</l><custom-block s="$storage %txt by mouse"><l>image-coordinates</l></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p1"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p1"/></block></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doSetVar"><l>p2</l><custom-block s="$storage %txt by mouse"><l>image-coordinates</l></custom-block></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="p2"/></block><block var="xold"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="p2"/></block><block var="yold"/></block></block></block><script><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doSetVar"><l>myCostume</l><custom-block s="$storage copy of costume %obj"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p2"/></block></block><block s="doSetVar"><l>radius</l><block s="reportRound"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block></block></block><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></block></block></block></block></block></block><custom-block s="$storage set line attributes style %s width %n color %n %n %n"><l>continuous</l><l>3</l><l>255</l><l>255</l><l>0</l></custom-block><custom-block s="$storage draw line from %n %n to %n %n"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>1</l></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>1</l></block><block s="reportListItem"><l>2</l><block var="p1"/></block></custom-block><custom-block s="$storage set line attributes style %s width %n color %n %n %n"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><custom-block s="$storage draw circle center %n %n radius %n"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block var="radius"/></custom-block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block><block s="doIf"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doReport"><block s="reportNewList"><list><block var="p1"/><block var="radius"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>brightness</l></block><script><block s="doSetVar"><l>h</l><custom-block s="$storage %txt by mouse"><l>circle-data</l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>xpos</l><l>ypos</l><l>r</l><l>width</l><l>height</l></list><l>&#xD;function imageValue(x,y){&#xD;  if((x&gt;width)||(x&lt;1)||(y&gt;height)||(y&lt;1)) return 0;&#xD;  else return data.at(x+(y-1)*width);&#xD;  }&#xD; &#xD;var sumOfValues=0,points=0,y=ypos-r,x;&#xD;while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;  x=xpos-r;&#xD;  while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;    if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;      sumOfValues=sumOfValues+imageValue(Math.round(x),Math.round(y));&#xD;      points++;&#xD;      }&#xD;    x++;&#xD;  }&#xD;  y++;&#xD;}&#xD;return new List([sumOfValues,points]);    </l></block><list><block var="myData"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="h"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="h"/></block></block><block s="reportListItem"><l>2</l><block var="h"/></block><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>height</l></custom-block></list></block></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;pos&apos; to %&apos;coordinate&apos;" type="reporter" category="sensing"><comment w="122.66666666666669" collapsed="false">conversion of coordinates</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%txt">xp<options>xp&#xD;yp&#xD;x&#xD;y</options></input></inputs><script><block s="doDeclareVariables"><list><l>x0</l><l>diagramWidth</l><l>y0</l><l>diagramHeight</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>coordinate</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="coordinate"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="coordinate"/><l>xp</l></block><script><block s="doSetVar"><l>diagramWidth</l><block s="reportDifference"><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>leftOffset</l></custom-block></block></block><block s="doSetVar"><l>x0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="$storage property %s"><l>xLeft</l></custom-block><block var="diagramWidth"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>xLeft</l></custom-block><custom-block s="$storage property %s"><l>xRight</l></custom-block></block></block></block><block s="doReport"><block s="reportSum"><block s="reportSum"><block var="x0"/><block s="reportQuotient"><block s="reportProduct"><block var="pos"/><block var="diagramWidth"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>xRight</l></custom-block><custom-block s="$storage property %s"><l>xLeft</l></custom-block></block></block></block><custom-block s="$storage property %s"><l>leftOffset</l></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="coordinate"/><l>yp</l></block><script><block s="doSetVar"><l>diagramHeight</l><block s="reportDifference"><block s="reportDifference"><custom-block s="$storage property %s"><l>height</l></custom-block><custom-block s="$storage property %s"><l>upperOffset</l></custom-block></block><custom-block s="$storage property %s"><l>lowerOffset</l></custom-block></block></block><block s="doSetVar"><l>y0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="$storage property %s"><l>yUpper</l></custom-block><block var="diagramHeight"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>yUpper</l></custom-block><custom-block s="$storage property %s"><l>yLower</l></custom-block></block></block></block><block s="doReport"><block s="reportSum"><block s="reportDifference"><block var="y0"/><block s="reportQuotient"><block s="reportProduct"><block var="pos"/><block var="diagramHeight"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>yUpper</l></custom-block><custom-block s="$storage property %s"><l>yLower</l></custom-block></block></block></block><custom-block s="$storage property %s"><l>upperOffset</l></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="coordinate"/><l>x</l></block><script><block s="doSetVar"><l>diagramWidth</l><block s="reportDifference"><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>leftOffset</l></custom-block></block></block><block s="doSetVar"><l>x0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="$storage property %s"><l>xLeft</l></custom-block><block var="diagramWidth"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>xLeft</l></custom-block><custom-block s="$storage property %s"><l>xRight</l></custom-block></block></block></block><block s="doReport"><block s="reportQuotient"><block s="reportProduct"><block s="reportDifference"><block s="reportDifference"><block var="pos"/><custom-block s="$storage property %s"><l>leftOffset</l></custom-block></block><block var="x0"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>xRight</l></custom-block><custom-block s="$storage property %s"><l>xLeft</l></custom-block></block></block><block var="diagramWidth"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="coordinate"/><l>y</l></block><script><block s="doSetVar"><l>diagramHeight</l><block s="reportDifference"><block s="reportDifference"><custom-block s="$storage property %s"><l>height</l></custom-block><custom-block s="$storage property %s"><l>upperOffset</l></custom-block></block><custom-block s="$storage property %s"><l>lowerOffset</l></custom-block></block></block><block s="doSetVar"><l>y0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="$storage property %s"><l>yUpper</l></custom-block><block var="diagramHeight"/></block><block s="reportDifference"><custom-block s="$storage property %s"><l>yUpper</l></custom-block><custom-block s="$storage property %s"><l>yLower</l></custom-block></block></block></block><block s="doReport"><block s="reportQuotient"><block s="reportProduct"><block s="reportDifference"><block var="y0"/><block s="reportDifference"><block var="pos"/><custom-block s="$storage property %s"><l>upperOffset</l></custom-block></block></block><block s="reportDifference"><custom-block s="$storage property %s"><l>yUpper</l></custom-block><custom-block s="$storage property %s"><l>yLower</l></custom-block></block></block><block var="diagramHeight"/></block></block></script></block></script></block></script></block-definition><block-definition s="$storage new table" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">creates a new empty table</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="$storage %&apos;selection&apos; of %&apos;column&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">determines a property of a list</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">min<options>min&#xD;max&#xD;number&#xD;sum&#xD;mean&#xD;median&#xD;variance&#xD;standard-deviation</options></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>help</l></list></block><block s="doWarp"><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="column"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="selection"/><l>median</l></block><script><block s="doSetVar"><l>help</l><custom-block s="$storage sort %s by column %n ascending %b"><block var="column"/><l>1</l><l><bool>true</bool></l></custom-block></block><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block s="reportListAttribute"><l><option>length</option></l><block var="help"/></block><l>2</l></block><l>1</l></block><script><block s="doReport"><block s="reportListItem"><block s="reportRound"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="help"/></block><l>2</l></block></block><block var="help"/></block></block></script><script><block s="doReport"><block s="reportQuotient"><block s="reportSum"><block s="reportListItem"><block s="reportDifference"><block s="reportRound"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="help"/></block><l>2</l></block></block><l>1</l></block><block var="help"/></block><block s="reportListItem"><block s="reportRound"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="help"/></block><l>2</l></block></block><block var="help"/></block></block><l>2</l></block></block></script></block></script><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>aList</l></list><l>var min=10000000,max=-min,sum=0,mean,n=0,isNumber,c;&#xD;var i=1,k,value;&#xD;while(i &lt;= aList.length()) {&#xD;  value = aList.at(i);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else{&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    if(min&gt;value) min=value;&#xD;    if(max&lt;value) max=value;&#xD;    sum=Number(sum)+Number(value);&#xD;    n++;&#xD;    }&#xD;  i++;&#xD;  }&#xD;if(n&gt;0) mean=sum/n; else mean=NaN;&#xD;return new List([min,max,n,sum,mean]);     </l></block><list><block var="column"/></list></block></block><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>min</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>max</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>number</l></block><script><block s="doReport"><block s="reportListItem"><l>3</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>sum</l></block><script><block s="doReport"><block s="reportListItem"><l>4</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>mean</l></block><script><block s="doReport"><block s="reportListItem"><l>5</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="selection"/><l>variance</l></block><block s="reportEquals"><block var="selection"/><l>standard-deviation</l></block></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>aList</l><l>mean</l></list><l>var n=0,isNumber,c,variance=0;&#xD;var i=1,k,value;&#xD;while(i&lt;= aList.contents.length) {&#xD;  value = aList.at(i);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else{&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    variance = Number(variance) +(Number(value)-Number(mean))*(Number(value)-Number(mean));&#xD;    n++;&#xD;    }&#xD;  i++;&#xD;  }&#xD;if(n&gt;0) variance=variance/n; else variance=NaN;&#xD;return variance;     </l></block><list><block var="column"/><block s="reportListItem"><l>5</l><block var="result"/></block></list></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>variance</l></block><script><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>standard-deviation</l></block><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block var="result"/></block></block></script></block></script></block><block s="doReport"><l>ERROR: unknown option</l></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage sort %&apos;table&apos; by column %&apos;n&apos; ascending %&apos;ascending&apos;" type="reporter" category="lists"><comment w="115.29680365296798" collapsed="false">sorts a list, JS-code copied from Snap!-library</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">1</input><input type="%b">true</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><block s="reportOr"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><block s="reportIsA"><block var="source"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doIfElse"><block var="ascending"/><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><block var="n"/><l/></block><block s="reportListItem"><block var="n"/><l/></block></block></autolambda><list></list></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><block s="reportListItem"><block var="n"/><l/></block><block s="reportListItem"><block var="n"/><l/></block></block></autolambda><list></list></block></list></block></block></script></block></script><script><block s="doIfElse"><block var="ascending"/><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><l></l><l></l></block></autolambda><list></list></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l></l></block></autolambda><list></list></block></list></block></block></script></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage select rows of %&apos;table&apos; where column %&apos;n&apos; is %&apos;op&apos; %&apos;value&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">determines the rows of a table with certain properties</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">1</input><input type="%txt" readonly="true">smaller-than<options>smaller-than&#xD;greater-than&#xD;equal-to&#xD;different-from</options></input><input type="%s">123</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doSetVar"><l>op</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="op"/><l><option>whitespace</option></l></block></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>smaller-than</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></autolambda><list></list></block><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>greater-than</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></autolambda><list></list></block><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>equal-to</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></autolambda><list></list></block><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>different-from</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></block></autolambda><list></list></block><block var="source"/></block></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;selection&apos; of column %&apos;k&apos; of %&apos;table&apos; grouped by column %&apos;n&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">determines group properties</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">mean<options>min&#xD;max&#xD;number&#xD;sum&#xD;mean</options></input><input type="%n">2</input><input type="%s">myData</input><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>copy</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doSetVar"><l>copy</l><custom-block s="$storage sort %s by column %n ascending %b"><block var="source"/><block var="n"/><l><bool>true</bool></l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>aTable</l><l>compaircolumn</l><l>operation</l><l>groupcolumn</l></list><l>var min,max,sum,mean,n,result,i,value,oldvalue,newvalue,stored=false;&#xD;&#xD;function isNumber(val){&#xD;  var ok,k,c;&#xD;  if(typeof(val)=="number") ok=true;&#xD;  else{&#xD;    if(typeof(val)=="string"){&#xD;      ok=true; k=0;&#xD;      while((k&lt;val.length) &amp;&amp; ok){&#xD;        c=val.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;)) ok=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else ok=false;&#xD;     }&#xD;  return ok;&#xD;  }&#xD;&#xD;result=new List();&#xD;result.add(new List([&apos;value&apos;,operation]));&#xD;if(aTable.contents.length==0) return result;&#xD;&#xD;value = aTable.at(1).at(compaircolumn);&#xD;if(isNumber(value)){value=Number(value); min=value;&#xD;max=value; sum=value;}&#xD;n=1;&#xD;newvalue = aTable.at(1).at(groupcolumn);&#xD;if(isNumber(newvalue)) newvalue=Number(newvalue);&#xD;oldvalue=newvalue;&#xD;i=2;&#xD;while(i&lt;=aTable.length()) {&#xD;  stored=false;&#xD;  newvalue=aTable.at(i).at(groupcolumn);&#xD;  if(isNumber(newvalue)) newvalue=Number(newvalue);&#xD;  if(newvalue==oldvalue){&#xD;    value=aTable.at(i).at(compaircolumn);&#xD;    if(isNumber(value)){if(min&gt;value) min=value; if(max&lt;value) max=value; sum=Number(sum)+Number(value);}&#xD;    n++;&#xD;    }&#xD;   else{&#xD;     if(operation==&apos;min&apos;) result.add(new List([oldvalue,min]));&#xD;     if(operation==&apos;max&apos;) result.add(new List([oldvalue,max]));&#xD;     if(operation==&apos;number&apos;) result.add(new List([oldvalue,n]));&#xD;     if(operation==&apos;sum&apos;) result.add(new List([oldvalue,sum]));&#xD;     if(operation==&apos;mean&apos;) result.add(new List([oldvalue,1.0*sum/n]));&#xD;     if(isNumber(value)){value=Number(value); min=value; max=value; sum=value;}&#xD;     n=1;&#xD;     oldvalue=newvalue;&#xD;     stored=true;&#xD;     }&#xD;  i++;&#xD;  }&#xD;if(!stored){&#xD;     if(operation==&apos;min&apos;) result.add(new List([oldvalue,min]));&#xD;     if(operation==&apos;max&apos;) result.add(new List([oldvalue,max]));&#xD;     if(operation==&apos;number&apos;) result.add(new List([oldvalue,n]));&#xD;     if(operation==&apos;sum&apos;) result.add(new List([oldvalue,sum]));&#xD;     if(operation==&apos;mean&apos;) result.add(new List([oldvalue,1.0*sum/n]));&#xD;  }&#xD;return result; </l></block><list><block var="copy"/><block var="k"/><block var="selection"/><block var="n"/></list></block></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage apply convolution kernel %&apos;kernel&apos; to %&apos;data&apos;" type="reporter" category="lists"><comment w="98.33333333333333" collapsed="false">applies a convolution to a table with FITS or RBG values</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>w</l><l>h</l><l>t</l><l>m</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportAnd"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><custom-block s="$storage is %s a %s ?"><block var="kernel"/><l>matrix</l></custom-block></block><script><block s="doSetVar"><l>h</l><block s="reportListAttribute"><l><option>length</option></l><block var="kernel"/></block></block><block s="doSetVar"><l>w</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="kernel"/></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block var="w"/><block var="h"/></block></block><block s="reportOr"><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block var="w"/></block><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="h"/><l>2</l></block></block></block><block var="h"/></block></block></block><script><block s="doReport"><l>ERROR: wrong kernel</l></block></script><script><block s="doSetVar"><l>m</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>number</option></l></block><script><block s="doSetVar"><l>t</l><l>FITS</l></block></script><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>t</l><l>RGB</l></block></script><script><block s="doReport"><l>ERROR wrong data format</l></block></script></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>kernel</l><l>data</l><l>width</l><l>height</l><l>typeOfData</l><l>mIndex</l><l>kWidth</l></list><l>function getValue(x,y){&#xD;  return (data.at(x+(y-1)*width));&#xD;  }&#xD;&#xD;function getKernelValue(x,y){&#xD;  return (kernel.at(y).at(x));&#xD;}&#xD;&#xD;var result=[],x,y,value,r,g,b,s;&#xD;&#xD;for(var y=1; y&lt;=height;y++)&#xD;  for(var x=1;x&lt;=width;x++){&#xD;    if(typeOfData==&apos;FITS&apos;) value = 0; &#xD;      else if(typeOfData==&apos;RGB&apos;){r=0;g=0;b=0;s=0};&#xD;    for(var ky=1;ky&lt;=kWidth;ky++)&#xD;      for(var kx=1;kx&lt;=kWidth;kx++)&#xD;         if((y-mIndex+ky&gt;0) &amp;&amp; (y-mIndex+ky&lt;=height) &amp;&amp; (x-mIndex+kx&gt;0) &amp;&amp; (x-mIndex+kx&lt;=width)){&#xD;           if(typeOfData==&apos;FITS&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;             else if(typeOfData==&apos;RGB&apos;){&#xD;                    r = r + getValue(x-mIndex+kx,y-mIndex+ky).at(1)*getKernelValue(kx,ky);&#xD;                    g = g + getValue(x-mIndex+kx,y-mIndex+ky).at(2)*getKernelValue(kx,ky);&#xD;                    b = b + getValue(x-mIndex+kx,y-mIndex+ky).at(3)*getKernelValue(kx,ky);&#xD;                    s = s + getValue(x-mIndex+kx,y-mIndex+ky).at(4)*getKernelValue(kx,ky);&#xD;                    }&#xD;           }&#xD;    if(typeOfData==&apos;FITS&apos;) result.push(value); &#xD;      else if(typeOfData==&apos;RGB&apos;) result.push(new List([r,g,b,s]));&#xD;    }&#xD;return new List(result);</l></block><list><block var="kernel"/><block var="source"/><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>height</l></custom-block><block var="t"/><block var="m"/><block var="w"/></list></block></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage compress data %&apos;data&apos; with factor %&apos;n&apos; by averaging" type="reporter" category="lists"><comment w="90" collapsed="false">reduces the data volume of a table by averaging</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l><l>h2</l><l>i</l><l>j</l><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="source"/></block><l>0</l></block><block s="reportGreaterThan"><block var="n"/><l>0</l></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>n</l></list><l>function mean(d,n){&#xD;  var sum=0;&#xD;  for(var i=1;i&lt;=d.length();i++){&#xD;    sum=sum+Number(d.at(i).at(n));&#xD;    }&#xD;  return sum/d.length();&#xD;  }&#xD;&#xD;function mean2(d){&#xD;  var sum=0;&#xD;  for(var i=1;i&lt;=d.length();i++){&#xD;    sum=sum+Number(d.at(i));&#xD;    }&#xD;  return sum/d.length();&#xD;  }&#xD;&#xD;var result=new List(),i,j,h1,h2;&#xD;n=Math.round(n);&#xD;if(data.at(1) instanceof List){&#xD;  i=1;&#xD;  while(i&lt;=data.length()-n+1){&#xD;    h1 = new List();&#xD;    h1.add(data.at(i));&#xD;    j=1;&#xD;    while(j&lt;=n-1){&#xD;      h1.add(data.at(i+j));&#xD;      j++;&#xD;      }&#xD;    j=1;&#xD;    h2=new List();&#xD;    while(j&lt;=h1.at(1).length()){&#xD;      h2.add(mean(h1,j));&#xD;      j++;&#xD;      }&#xD;    result.add(h2);&#xD;    i=i+n;&#xD;    }&#xD;  }&#xD;else{&#xD;  i=1;&#xD;  while(i&lt;=data.length()-n+1){&#xD;    h1 = new List();&#xD;    h1.add(data.at(i));&#xD;    j=1;&#xD;    while(j&lt;=n-1){&#xD;      h1.add(data.at(i+j));&#xD;      j++;&#xD;      }&#xD;    result.add(mean2(h1));&#xD;    i=i+n;&#xD;    }&#xD;}&#xD;return result;</l></block><list><block var="source"/><block var="n"/></list></block></block></script><script><block s="doReport"><l>ERROR: impossible operation</l></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage write string %&apos;theString&apos; to file %&apos;filename&apos;" type="command" category="operators"><comment w="101.5753424657534" collapsed="false">stores a string in a file, copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>filename</l></list><l>var ide = this.parent.parent;&#xD;if(isString(data)){&#xD;  ide.saveFileAs(data,&#xD;  &apos;text/plain;charset=utf-8&apos;,&#xD;  filename);&#xD;  };</l></block><list><block var="theString"/><block var="filename"/></list></block></script></block-definition><block-definition s="$storage export %&apos;table&apos; to CSV file %&apos;filename&apos;" type="command" category="lists"><comment x="0" y="0" w="284.7945205479452" collapsed="false">stores a table in a CSV file, JS-code copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>filename</l></list><l>function toCSV(data){&#xD;  var items=data.itemsArray(),rows = [];&#xD;    &#xD;    function encodeCell(atomicValue) {&#xD;        var string = atomicValue.toString(),cell;&#xD;        if (string.indexOf(&apos;\"&apos;) ===  -1 &amp;&amp;&#xD;                (string.indexOf(&apos;\n&apos;) === -1) &amp;&amp;&#xD;                (string.indexOf(&apos;\,&apos;) === -1)) {&#xD;            return string;&#xD;        }&#xD;        cell = [&apos;\"&apos;];&#xD;        string.split(&apos;&apos;).forEach(function (letter) {cell.push(letter);&#xD;            if (letter === &apos;\"&apos;) {cell.push(letter);}&#xD;        });&#xD;        cell.push(&apos;\"&apos;);&#xD;        return cell.join(&apos;&apos;);&#xD;   }&#xD;&#xD;  if (items.some(function (any) {return any instanceof List; })) {&#xD;     items.forEach(function (item) {&#xD;       if (item instanceof List) {&#xD;         rows.push(item.itemsArray().map(encodeCell).join(&apos;,&apos;));&#xD;       } else {rows.push(encodeCell(item));}&#xD;      });&#xD;    return rows.join(&apos;\n&apos;);&#xD;  }&#xD;  return items.map(encodeCell).join(&apos;,&apos;);&#xD;}&#xD;&#xD;var ide = this.parent.parent;&#xD;ide.saveFileAs(toCSV(data),&apos;text/csv;charset=utf-8&apos;,filename);</l></block><list><block var="source"/><block var="filename"/></list></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage read file with filepicker" type="reporter" category="lists"><comment w="291.3698630136987" collapsed="false">loads the contents of a file, JS-code copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ready</l></list></block><block s="doSetVar"><l>ready</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var inp = document.createElement(&apos;input&apos;), ide = this.parent.parent, result=0, done=false;&#xD;&#xD;  function userImport() {&#xD;&#xD;        function txtOnlyMsg(ftype, anyway) {&#xD;            ide.confirm(&#xD;                localize(&#xD;                    &apos;Snap! can only import "text" files.\n&apos; +&#xD;                        &apos;You selected a file of type "&apos; +&#xD;                        ftype +&#xD;                        &apos;".&apos;&#xD;                ) + &apos;\n\n&apos; + localize(&apos;Open anyway?&apos;),&#xD;                &apos;Unable to import&apos;,&#xD;                anyway // callback&#xD;            );&#xD;        }&#xD;&#xD;        function readText(aFile) {&#xD;            var frd = new FileReader(),&#xD;                ext = aFile.name.split(&apos;.&apos;).pop().toLowerCase();&#xD;&#xD;            function isTextFile(aFile) {&#xD;                // special cases for Windows&#xD;                // check the file extension for text-like-ness&#xD;                return aFile.type.indexOf(&apos;text&apos;) !== -1 ||&#xD;                    contains([&apos;txt&apos;, &apos;csv&apos;, &apos;xml&apos;, &apos;json&apos;, &apos;tsv&apos;], ext);&#xD;            }&#xD;&#xD;            function isType(aFile, string) {&#xD;                return aFile.type.indexOf(string) !== -1 || (ext === string);&#xD;            }&#xD;&#xD;            frd.onloadend = function (e) {&#xD;                done=true;&#xD;                if (isType(aFile, &apos;csv&apos;)) {result=Process.prototype.parseCSV(e.target.result);}&#xD;                else if (isType(aFile, &apos;json&apos;)) { result=Process.prototype.parseJSON(e.target.result);}&#xD;                     else { result=e.target.result;}&#xD;            };&#xD;&#xD;            if (isTextFile(aFile)) {&#xD;                frd.readAsText(aFile);&#xD;            } else {&#xD;               txtOnlyMsg(&#xD;                    aFile.type,&#xD;                    function () {frd.readAsText(aFile); }&#xD;                );&#xD;            }&#xD;        }&#xD;&#xD;        document.body.removeChild(inp);&#xD;        ide.filePicker = null;&#xD;        if (inp.files.length &gt; 0) {&#xD;            readText(inp.files[inp.files.length - 1]);&#xD;        }&#xD;    }&#xD;&#xD;    if (ide.filePicker) {&#xD;        document.body.removeChild(ide.filePicker);&#xD;        ide.filePicker = null;&#xD;    }&#xD;    inp.type = &apos;file&apos;;&#xD;    inp.style.color = "transparent";&#xD;    inp.style.backgroundColor = "transparent";&#xD;    inp.style.border = "none";&#xD;    inp.style.outline = "none";&#xD;    inp.style.position = "absolute";&#xD;    inp.style.top = "0px";&#xD;    inp.style.left = "0px";&#xD;    inp.style.width = "0px";&#xD;    inp.style.height = "0px";&#xD;    inp.style.display = "none";&#xD;    inp.addEventListener(&#xD;        "change",&#xD;        userImport,&#xD;        false&#xD;    );&#xD;    document.body.appendChild(inp);&#xD;    ide.filePicker = inp;&#xD;    inp.click();&#xD;return function(){return new List([done,result]);};</l></block><list></list></block></block><block s="doWaitUntil"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="ready"/><list></list></block></block></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="ready"/><list></list></block></block></block></script></block-definition><block-definition s="$storage normalize %&apos;data&apos; by %&apos;choice&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">normalizes a table by dividing it by the mean value</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%s">mean<options>mean&#xD;max&#xD;number&#xD;sum&#xD;median</options></input></inputs><script><block s="doDeclareVariables"><list><l>divisor</l><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>mean</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %txt of %l"><l>mean</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>max</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %txt of %l"><l>max</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>number</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %txt of %l"><l>number</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>sum</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %txt of %l"><l>sum</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>median</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %txt of %l"><l>median</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="choice"/><l><option>number</option></l></block><script><block s="doSetVar"><l>divisor</l><block var="choice"/></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script></block></script></block></script></block><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="divisor"/><l>0</l></block></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><block var="divisor"/></block></autolambda><list></list></block><block var="source"/></block></block></script><script><block s="doReport"><l>ERROR: divisor is 0</l></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage set properties" type="command" category="variables"><comment w="140.33333433333345" collapsed="false">sets the default values of the properties of a DataSprite</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>myProperties</l><custom-block s="$storage new table"></custom-block></block><custom-block s="$storage set property %s to %s"><l>type of data</l><l>empty</l></custom-block><custom-block s="$storage set property %s to %s"><l>width</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>height</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>backColorRed</l><l>255</l></custom-block><custom-block s="$storage set property %s to %s"><l>backColorGreen</l><l>225</l></custom-block><custom-block s="$storage set property %s to %s"><l>backColorBlue</l><l>205</l></custom-block><custom-block s="$storage set property %s to %s"><l>leftOffset</l><l>60</l></custom-block><custom-block s="$storage set property %s to %s"><l>upperOffset</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>lowerOffset</l><l>20</l></custom-block><custom-block s="$storage set property %s to %s"><l>title</l><l></l></custom-block><custom-block s="$storage set property %s to %s"><l>titleHeight</l><l>20</l></custom-block><custom-block s="$storage set property %s to %s"><l>xLabel</l><l></l></custom-block><custom-block s="$storage set property %s to %s"><l>xLabelHeight</l><l>15</l></custom-block><custom-block s="$storage set property %s to %s"><l>yLabel</l><l></l></custom-block><custom-block s="$storage set property %s to %s"><l>yLabelHeight</l><l>15</l></custom-block><custom-block s="$storage set property %s to %s"><l>xLeft</l><l>-10</l></custom-block><custom-block s="$storage set property %s to %s"><l>xRight</l><l>10</l></custom-block><custom-block s="$storage set property %s to %s"><l>yLower</l><l>-10</l></custom-block><custom-block s="$storage set property %s to %s"><l>yUpper</l><l>10</l></custom-block><custom-block s="$storage set property %s to %s"><l>lineStyle</l><l>continuous</l></custom-block><custom-block s="$storage set property %s to %s"><l>lineWidth</l><l>1</l></custom-block><custom-block s="$storage set property %s to %s"><l>lineColorRed</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>lineColorGreen</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>lineColorBlue</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>datapointStyle</l><l>square</l></custom-block><custom-block s="$storage set property %s to %s"><l>datapointWidth</l><l>5</l></custom-block><custom-block s="$storage set property %s to %s"><l>datapointConnected</l><block s="reportBoolean"><l><bool>false</bool></l></block></custom-block><custom-block s="$storage set property %s to %s"><l>datapointColorRed</l><l>255</l></custom-block><custom-block s="$storage set property %s to %s"><l>datapointColorGreen</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>datapointColorBlue</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>scalesPrecision</l><l>3</l></custom-block><custom-block s="$storage set property %s to %s"><l>scalesTextheight</l><l>12</l></custom-block><custom-block s="$storage set property %s to %s"><l>scalesNumberXintervals</l><l>10</l></custom-block><custom-block s="$storage set property %s to %s"><l>minValue</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>maxValue</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>columns</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>rows</l><l>0</l></custom-block></script></block></script></block-definition><block-definition s="$storage copy of costume %&apos;costume&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l></list><l>return costume.copy();</l></block><list><block var="costume"/></list></block></block></script></block-definition><block-definition s="$storage draw rectangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment w="90" collapsed="false">draws a rectangle on present costume using line properties</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">200</input><input type="%n">50</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="x1"/><block var="x2"/></block><script><block s="doSetVar"><l>x</l><block var="x2"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block></script><script><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x2"/><block var="x1"/></block></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block var="y2"/><block var="y1"/></block><script><block s="doSetVar"><l>y</l><block var="y2"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></script><script><block s="doSetVar"><l>y</l><block var="y1"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>w</l><l>h</l><l>width</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = width;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.strokeRect(x1,y1,w,h);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="myCostume"/><block var="x"/><block var="y"/><block var="w"/><block var="h"/><custom-block s="$storage property %s"><l>lineWidth</l></custom-block><custom-block s="$storage property %s"><l>lineColorRed</l></custom-block><custom-block s="$storage property %s"><l>lineColorGreen</l></custom-block><custom-block s="$storage property %s"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="$storage pixels from RGB data %&apos;data&apos; min %&apos;min&apos; max %&apos;max&apos; gray? %&apos;gray&apos; log? %&apos;log&apos;" type="reporter" category="looks"><comment w="131.66666666666669" collapsed="false">calculates the pixels of a costume from the RGB data</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">0</input><input type="%n">32757</input><input type="%b"></input><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>gray</l><l>log</l></list><l>var result=[], i=1, n, value, interval = (max-min)/8;&#xD;while(i&lt;= data.length()) {&#xD;  value = (data.at(i).at(1)+data.at(i).at(2)+data.at(i).at(3))/3;&#xD;  n = value;&#xD;  if(value&lt;=min) n=min+1;&#xD;  if(value&gt;max) n =max;&#xD;  if(log) n = Math.round(Math.log(n-min)/Math.log(max-min)*255);&#xD;  else n = Math.round((n-min)/(max-min)*255);&#xD;  if(gray) result.push(new List([n,n,n,255]));&#xD;  else { // result.push(new List([n,255-n,Math.round(255-n/2),255]));&#xD;    if(value&lt;=min) {result.push(new List([0,0,0,255]));}&#xD;       else if(value&lt;min+interval) result.push(new List([0,0,n,255]));&#xD;            else if(value&lt;min+2*interval) result.push(new List([0,n,n,255]));&#xD;                 else if(value&lt;min+3*interval) result.push(new List([n,0,n,255]));&#xD;                      else if(value&lt;min+4*interval) result.push(new List([0,n,0,255]));&#xD;                           else if(value&lt;min+5*interval) result.push(new List([n,0,0,n]));&#xD;                                else if(value&lt;min+6*interval) result.push(new List([n,n/2,0,255]));&#xD;                                     else if(value&lt;min+7*interval) result.push(new List([n,n,0,255]));&#xD;                                          else if(value&lt;min+8*interval) result.push(new List([n,n,n,255]));&#xD;                                               else result.push(new List([255,255,255,255]));&#xD;     }&#xD;  i = i+1;&#xD;  }&#xD;return new List(result);</l></block><list><block var="source"/><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></list></block></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage setting %&apos;which&apos;" type="reporter" category="sensing"><header></header><code></code><translations>pt:o valor da configuração _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;User&#xD;Presentation mode&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Visible palette</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    ide = stage.parentThatIsA(IDE_Morph),&#xD;    world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        return ide.projectNotes;&#xD;    case &apos;Project name&apos;:&#xD;        return ide.projectName;&#xD;    case &apos;User&apos;:&#xD;        return ide.cloud.username;&#xD;    case &apos;Presentation mode&apos;:&#xD;        return ide.isAppMode;&#xD;    case &apos;Language&apos;:&#xD;        return SnapTranslator.language;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        return SyntaxElementMorph.prototype.scale;&#xD;    case &apos;Stage size&apos;:&#xD;        return new List([StageMorph.prototype.dimensions.x,&#xD;                                   StageMorph.prototype.dimensions.y]);&#xD;    case &apos;Stage scale&apos;:&#xD;       return stage.scale;&#xD;    case &apos;Retina display support&apos;:&#xD;        return isRetinaEnabled();&#xD;    case &apos;Long form input dialog&apos;:&#xD;        return InputSlotDialogMorph.prototype.isLaunchingExpanded;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        return BlockLabelPlaceHolderMorph.prototype.plainLabel;&#xD;    case &apos;Input sliders&apos;:&#xD;        return MorphicPreferences.useSliderForInput;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        return ArgMorph.prototype.executeOnSliderEdit;&#xD;    case &apos;Clicking sound&apos;:&#xD;        return !!BlockMorph.prototype.snapSound;&#xD;    case &apos;Turbo mode&apos;:&#xD;        return stage.isFastTracked;&#xD;    case &apos;Flat design&apos;:&#xD;        return MorphicPreferences.isFlat;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        return world.keyboardReceiver instanceof ScriptFocusMorph;&#xD;    case &apos;Visible stepping&apos;:&#xD;        return Process.prototype.enableSingleStepping;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        return stage.isThreadSafe;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        return StageMorph.prototype.frameRate &gt; 0;&#xD;    case &apos;Flat line ends&apos;:&#xD;        return SpriteMorph.prototype.useFlatLineEnds;&#xD;    case &apos;Codification support&apos;:&#xD;        return StageMorph.prototype.enableCodeMapping;&#xD;    case &apos;Inheritance support&apos;:&#xD;        return StageMorph.prototype.enableInheritance;&#xD;    default: return which;&#xD;    case &apos;Visible palette&apos;:&#xD;        return ide.currentCategory;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="$storage set flag %&apos;which&apos; to %&apos;tf&apos;" type="command" category="sensing"><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Presentation mode&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support</options></input><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>tf</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph),&#xD;        thisObj = this;&#xD;&#xD;if (tf != !!tf) return;&#xD;&#xD;try{&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Presentation mode&apos;:&#xD;        if (tf != ide.isAppMode) ide.toggleAppMode();&#xD;        break;&#xD;    case &apos;Retina display support&apos;:&#xD;        if (tf != isRetinaEnabled()) ide.toggleRetina();&#xD;        break;&#xD;    case &apos;Long form input dialog&apos;:&#xD;        if (tf != InputSlotDialogMorph.prototype.isLaunchingExpanded)&#xD;            ide.toggleLongFormInputDialog();&#xD;        break;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        if (tf != BlockLabelPlaceHolderMorph.prototype.plainLabel)&#xD;            ide.togglePlainPrototypeLabels();&#xD;        break;&#xD;    case &apos;Input sliders&apos;:&#xD;        MorphicPreferences.useSliderForInput = tf;&#xD;        break;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        ArgMorph.prototype.executeOnSliderEdit = tf;&#xD;        break;&#xD;    case &apos;Clicking sound&apos;:&#xD;        if (tf != !!BlockMorph.prototype.snapSound)&#xD;            BlockMorph.prototype.toggleSnapSound();&#xD;        break;&#xD;    case &apos;Turbo mode&apos;:&#xD;        if (tf != stage.isFastTracked)&#xD;            ide.toggleFastTracking();&#xD;        break;&#xD;    case &apos;Flat design&apos;:&#xD;        if (tf == MorphicPreferences.isFlat) break;&#xD;        if (tf)&#xD;            ide.flatDesign();&#xD;        else&#xD;            ide.defaultDesign();&#xD;        break;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        if (tf != (world.keyboardReceiver instanceof ScriptFocusMorph)) {&#xD;            thisObj.scripts.toggleKeyboardEntry();&#xD;        };&#xD;        break;&#xD;    case &apos;Visible stepping&apos;:&#xD;        if (tf != Process.prototype.enableSingleStepping)&#xD;            ide.toggleSingleStepping();&#xD;        break;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        stage.isThreadSafe = tf;&#xD;        break;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        if (tf != (StageMorph.prototype.frameRate &gt; 0))&#xD;            ide.toggleVariableFrameRate();&#xD;        break;&#xD;    case &apos;Flat line ends&apos;:&#xD;        SpriteMorph.prototype.useFlatLineEnds = tf;&#xD;        break;&#xD;    case &apos;Codification support&apos;:&#xD;        if (tf != StageMorph.prototype.enableCodeMapping) {&#xD;            StageMorph.prototype.enableCodeMapping = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Inheritance support&apos;:&#xD;        if (tf != StageMorph.prototype.enableInheritance) {&#xD;            StageMorph.prototype.enableInheritance = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;};&#xD;}&#xD;finally {&#xD;ide.savingPreferences = false;&#xD;};&#xD;</l></block><list><block var="which"/><block var="tf"/></list></block></script></block-definition><block-definition s="$storage set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Visible palette</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>value</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;try {&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        ide.projectNotes = value;&#xD;        break;&#xD;    case &apos;Project name&apos;:&#xD;        ide.setProjectName(value);&#xD;        break;&#xD;    case &apos;Language&apos;:&#xD;        ide.setLanguage(value);&#xD;        break;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        if (!isNaN(value)) ide.setBlocksScale(Math.min(value, 12));&#xD;        break;&#xD;    case &apos;Stage size&apos;:&#xD;        if ((value instanceof List) &amp;&amp; value.length()==2&#xD;                       &amp;&amp; !isNaN(value.at(1)) &amp;&amp; !isNaN(value.at(2)))&#xD;            ide.setStageExtent(new Point(value.at(1), value.at(2)));&#xD;        break;&#xD;    case &apos;Stage scale&apos;:&#xD;        ide.toggleStageSize(value != 1, Math.max(0.1, value));&#xD;        break;&#xD;    case &apos;Visible palette&apos;:&#xD;        ide.currentCategory = value.toLowerCase();&#xD;        ide.categories.children.forEach(function (each) {&#xD;                each.refresh();&#xD;        });&#xD;        ide.refreshPalette(true);&#xD;        break;&#xD;};&#xD;}&#xD;finally {ide.savingPreferences = true;&#xD;};</l></block><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="$storage set image value of myData at %&apos;x&apos; %&apos;y&apos; to %&apos;value&apos;" type="command" category="sensing"><comment w="90" collapsed="false">sets the value at (x|y) in myData</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%n">255</input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><script><block s="doSetVar"><l>x</l><block s="reportRound"><block var="x"/></block></block><block s="doSetVar"><l>y</l><block s="reportRound"><block var="y"/></block></block><block s="doIf"><block s="reportAnd"><block s="reportAnd"><block s="reportLessThan"><block var="x"/><block s="reportSum"><custom-block s="$storage property %s"><l>width</l></custom-block><l>1</l></block></block><block s="reportLessThan"><block var="y"/><block s="reportSum"><custom-block s="$storage property %s"><l>height</l></custom-block><l>1</l></block></block></block><block s="reportAnd"><block s="reportGreaterThan"><block var="x"/><l>0</l></block><block s="reportGreaterThan"><block var="y"/><l>0</l></block></block></block><script><block s="doReplaceInList"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$storage property %s"><l>width</l></custom-block></block></block><block var="myData"/><block var="value"/></block></script></block></script><script><block s="doSayFor"><l>ERROR: wrong data format</l><l>2</l></block></script></block></script></block></script></block-definition><block-definition s="$storage matrix/vec %&apos;a&apos; %&apos;op&apos; matrix/vec %&apos;b&apos;" type="reporter" category="operators"><comment w="90" collapsed="false">operations with scalars, vectors and matrices</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">*<options>+&#xD;-&#xD;*</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>h</l><l>h1</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>op</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="op"/><l> </l></block></block></block><block s="doIfElse"><block s="reportIsA"><block var="a"/><l><option>number</option></l></block><script><block s="doIfElse"><block s="reportIsA"><block var="b"/><l><option>number</option></l><comment w="119.45205479452062" collapsed="true">number number operation</comment></block><script><block s="doReport"><custom-block s="$storage %s %s vec %l"><block var="a"/><l>*</l><block var="b"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>vector</l><comment w="119.45205479452062" collapsed="true">number vector operation</comment></custom-block><script><block s="doReport"><custom-block s="$storage %s %s vec %l"><block var="a"/><l>*</l><block var="b"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>matrix</l><comment w="119.45205479452062" collapsed="true">number matrix operation</comment></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><block var="a"/><l></l></block></autolambda><list></list></block><l/></block></autolambda><list></list></block><block var="b"/></block></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="a"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportIsA"><block var="b"/><l><option>number</option></l><comment w="119.45205479452062" collapsed="true">vector number operation</comment></block><script><block s="doReport"><custom-block s="$storage %s %s vec %l"><block var="b"/><block var="op"/><block var="a"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>vector</l><comment w="119.45205479452062" collapsed="true">vector vector operation</comment></custom-block><script><block s="doReport"><custom-block s="$storage %s %s vec %l"><block var="b"/><block var="op"/><block var="a"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>matrix</l><comment w="119.45205479452062" collapsed="true">vector matrix operation</comment></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="a"/></block><l><option>number</option></l></block><block s="reportEquals"><block var="op"/><l>*</l></block></block><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="a"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="b"/></block></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vector</l><l>matrix</l></list><l>var result=new List(),sum;&#xD;for(var i=1;i&lt;=matrix.at(1).length();i++){&#xD;  sum=0;&#xD;  for(var j=1;j&lt;=vector.length();j++)&#xD;    sum=sum+vector.at(j)*matrix.at(j).at(i);&#xD;  result.add(sum);&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="a"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportIsA"><block var="b"/><l><option>number</option></l><comment w="119.45205479452062" collapsed="true">matrix number operation</comment></block><script><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><block var="b"/><l></l></block></autolambda><list></list></block><l/></block></autolambda><list></list></block><block var="a"/></block></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>vector</l><comment w="119.45205479452062" collapsed="true">matrix vector operation</comment></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="b"/></block><l><option>list</option></l></block><block s="reportEquals"><block var="op"/><l>*</l></block></block><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="a"/></block></block><block s="reportListAttribute"><l><option>length</option></l><block var="b"/></block></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>matrix</l><l>vector</l></list><l>var result=new List(),sum;&#xD;for(var i=1;i&lt;=matrix.length();i++){&#xD;  sum=0;&#xD;  for(var j=1;j&lt;=vector.length();j++)&#xD;    sum=sum+matrix.at(i).at(j)*vector.at(j);&#xD;  result.add(sum);&#xD;  }&#xD;return result;</l></block><list><block var="a"/><custom-block s="$storage transpose %l"><block var="b"/></custom-block></list></block></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>matrix</l><comment w="119.45205479452062" collapsed="true">matrix matrix operation</comment></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l><l>op</l></list><l>var result=new List(),rowsA=a.length(),rowsB=b.length(),colsA=a.at(1).length();&#xD;var colsB=b.at(1).length(),row,sum;&#xD;if(op=="+"){&#xD;  if((rowsA==rowsB) &amp;&amp; (colsA==colsB)){&#xD;    for(var i=1;i&lt;=rowsA;i++){&#xD;      row=new List();&#xD;      for(j=1;j&lt;=colsA;j++)&#xD;        row.add(Number(a.at(i).at(j))+Number(b.at(i).at(j)));&#xD;      result.add(row);&#xD;      }&#xD;    return result;&#xD;    }&#xD;  else return "ERROR: different dimensions";       &#xD;  }&#xD;&#xD;if(op=="-"){&#xD;  if((rowsA==rowsB) &amp;&amp; (colsA==colsB)){&#xD;    for(var i=1;i&lt;=rowsA;i++){&#xD;      row=new List();&#xD;      for(j=1;j&lt;=colsA;j++)&#xD;        row.add(Number(a.at(i).at(j))-Number(b.at(i).at(j)));&#xD;      result.add(row);&#xD;      }&#xD;    return result;&#xD;    }&#xD;  else return "ERROR: different dimensions";       &#xD;  }&#xD;&#xD;if(op=="*"){&#xD;  if(colsA==rowsB){&#xD;    for(var i=1;i&lt;=rowsA;i++){&#xD;       row=new List();&#xD;       for(j=1;j&lt;=colsB;j++){&#xD;         sum=0;&#xD;         for(k=1;k&lt;=colsA;k++)&#xD;           sum=sum+(Number(a.at(i).at(k))*Number(b.at(k).at(j)));&#xD;         row.add(sum);&#xD;         }&#xD;       result.add(row);&#xD;       }&#xD;      return result;&#xD;    }&#xD;  else return "ERROR: wrong dimensions";       &#xD;  }&#xD;&#xD;return "ERROR: wrong operation";</l></block><list><block var="a"/><block var="b"/><block var="op"/></list></block></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script></block></script></block-definition><block-definition s="$storage transpose %&apos;data&apos;" type="reporter" category="operators"><comment w="103.01369863013697" collapsed="false">creates the transpose of a vector or a matrix</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="doReport"><block var="data"/></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="data"/><l>vector</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vector</l></list><l>var result= new List();&#xD;if(vector.at(1) instanceof List){&#xD;  for(i=1;i&lt;=vector.length();i++)&#xD;    result.add(vector.at(i).at(1));&#xD;  }&#xD;else{&#xD;  for(i=1;i&lt;=vector.length();i++)&#xD;    result.add(new List([vector.at(i)]));&#xD;  }&#xD;return result;</l></block><list><block var="data"/></list></block></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="data"/><l>matrix</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>matrix</l></list><l>var result= new List(), width=matrix.at(1).length();&#xD;for(var i=1;i&lt;=width;i++) result.add(new List());&#xD;for(var i=1;i&lt;=matrix.length();i++)&#xD;  for(var j=1;j&lt;=width;j++)&#xD;    result.at(j).add(matrix.at(i).at(j));&#xD;return result;</l></block><list><block var="data"/></list></block></block></script><script><block s="doReport"><l>ERROR: not transposable</l></block></script></block></script></block></script></block></script><script><block s="doReport"><l>ERROR: not transposable</l></block></script></block></script><scripts><script x="324.0684961506852" y="567.8447518584474"><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>item</l><block var="table"/><script><block s="doAddToList"><block s="reportNewList"><list><block var="item"/></list></block><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></scripts></block-definition><block-definition s="$storage new %&apos;n&apos; -dim vector" type="reporter" category="operators"><comment w="90" collapsed="false">creates a random two dimensional vector</comment><header></header><code></code><translations></translations><inputs><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doAddToList"><block s="reportRandom"><l>-9</l><l>9</l></block><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$storage %&apos;a&apos; %&apos;op&apos; vec %&apos;b&apos;" type="reporter" category="operators"><comment w="106.43835616438362" collapsed="false">fast vector operations</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">*<options>+&#xD;-&#xD;*&#xD;X</options></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>transposed</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>op</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="op"/><l> </l></block></block></block><block s="doIfElse"><block s="reportIsA"><block var="a"/><l><option>number</option></l></block><script><block s="doIfElse"><block s="reportIsA"><block var="b"/><l><option>number</option></l></block><script><block s="doIf"><block s="reportEquals"><block var="op"/><l>+</l></block><script><block s="doReport"><block s="reportSum"><block var="a"/><block var="b"/></block></block></script><comment w="90" collapsed="false">number number operation</comment></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>-</l></block><script><block s="doReport"><block s="reportDifference"><block var="a"/><block var="b"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doReport"><block s="reportProduct"><block var="a"/><block var="b"/></block></block></script></block><block s="doReport"><l>ERROR: illegal operation</l></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="b"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>scalar</l><l>vector</l></list><l>//scalar*vector&#xD;var result=new List();&#xD;scalar=Number(scalar);&#xD;for(var i=1;i&lt;=vector.length();i++){&#xD;  result.add(scalar*Number(vector.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><custom-block s="$storage transpose %l"><block var="b"/></custom-block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>scalar</l><l>vector</l></list><l>//scalar*vector&#xD;var result=new List();&#xD;vscalar = Number(scalar);&#xD;for(var i=1;i&lt;=vector.length();i++){&#xD;  result.add(scalar*Number(vector.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script><comment w="90" collapsed="false">number vector operation</comment></block></script></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="a"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportIsA"><block var="b"/><l><option>number</option></l></block><script><block s="doReport"><custom-block s="$storage %s %s vec %l"><block var="b"/><block var="op"/><block var="a"/></custom-block><comment w="90" collapsed="false">vector number operation.</comment></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="b"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="a"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="b"/></block></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="a"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>a</l><custom-block s="$storage transpose %l"><block var="a"/></custom-block></block><block s="doSetVar"><l>transposed</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>transposed</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>+</l></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>vector1</l><l>vector2</l></list><l>//vector+vector&#xD;var result=new List();&#xD;for(var i=1;i&lt;=vector1.length();i++){&#xD;  result.add(Number(vector1.at(i))+Number(vector2.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block><block s="doIf"><block var="transposed"/><script><block s="doSetVar"><l>result</l><custom-block s="$storage transpose %l"><block var="result"/></custom-block></block></script></block><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>-</l></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>vector1</l><l>vector2</l></list><l>//vector-vector&#xD;var result=new List();&#xD;for(var i=1;i&lt;=vector1.length();i++){&#xD;  result.add(Number(vector1.at(i))-Number(vector2.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block><block s="doIf"><block var="transposed"/><script><block s="doSetVar"><l>result</l><custom-block s="$storage transpose %l"><block var="result"/></custom-block></block></script></block><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>vector1</l><l>vector2</l></list><l>//vector*vector&#xD;var result=0;&#xD;for(var i=1;i&lt;=vector1.length();i++){&#xD;  result=result+Number(vector1.at(i))*Number(vector2.at(i));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block><block s="doReport"><block var="result"/></block></script></block><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>X</l></block><script><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="a"/></block><l>3</l></block><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="b"/></block><l>3</l></block></block><script><block s="doSetVar"><l>result</l><block s="reportNewList"><list><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="a"/></block><block s="reportListItem"><l>3</l><block var="b"/></block></block><block s="reportProduct"><block s="reportListItem"><l>3</l><block var="a"/></block><block s="reportListItem"><l>2</l><block var="b"/></block></block></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>3</l><block var="a"/></block><block s="reportListItem"><l>1</l><block var="b"/></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="a"/></block><block s="reportListItem"><l>3</l><block var="b"/></block></block></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="a"/></block><block s="reportListItem"><l>2</l><block var="b"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="a"/></block><block s="reportListItem"><l>1</l><block var="b"/></block></block></block></list></block></block></script></block><block s="doIf"><block var="transposed"/><script><block s="doSetVar"><l>result</l><custom-block s="$storage transpose %l"><block var="result"/></custom-block></block></script></block><block s="doReport"><block var="result"/></block></script><script><block s="doReport"><l>ERROR: wrong dimension of vectors</l></block></script></block></script><script><block s="doReport"><l>ERROR: different length of vectors</l></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script><comment w="90" collapsed="false">vector vector operation.</comment></block></script></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script></block-definition><block-definition s="$storage is %&apos;data&apos; a %&apos;choice&apos; ?" type="predicate" category="operators"><comment w="108.49315068493155" collapsed="false">test on vector or matrix</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">vector<options>vector&#xD;matrix&#xD;table</options></input></inputs><script><block s="doDeclareVariables"><list><l>width</l><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>vector</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="data"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else if(row.length()!=1) result=false;&#xD;       else if(Number.isNaN(row.at(1))) result=false;&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="data"/></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><l></l><l><option>number</option></l></block></block></autolambda><list></list></block><block var="data"/></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>matrix</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,j,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(width==1) result=false;&#xD;    if(row.length()!=width) result=false;&#xD;    else&#xD;    {&#xD;      j=1;&#xD;      while(result &amp;&amp; (j&lt;=row.length()))&#xD;      {&#xD;        if(Number.isNaN(row.at(j))) result=false;&#xD;        j++;&#xD;      }&#xD;    }&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="data"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>table</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(row.length()!=width) result=false;&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="data"/></list></block></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block-definition><block-definition s="$storage new %&apos;n&apos; x %&apos;m&apos; -matrix" type="reporter" category="operators"><comment w="70.13698630136993" collapsed="false">creates a new 3x3 random matrix</comment><header></header><code></code><translations></translations><inputs><input type="%n">3</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>row</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><custom-block s="$storage new table"></custom-block></block><block s="doRepeat"><block var="m"/><script><block s="doSetVar"><l>row</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doAddToList"><block s="reportRandom"><l>-9</l><l>9</l></block><block var="row"/></block></script></block><block s="doAddToList"><block var="row"/><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$storage delete %&apos;choice&apos; %&apos;n&apos; of %&apos;table&apos;" type="command" category="lists"><comment x="0" y="0" w="85" collapsed="false">deletes a row or column of a table</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">row<options>row&#xD;column</options></input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>target</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>target</l><block var="myData"/></block></script><script><block s="doSetVar"><l>target</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="target"/><l>table</l></custom-block><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>row</l></block><script><block s="doDeleteFromList"><block var="n"/><block var="target"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>column</l></block><script><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="target"/></block><l>0</l></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="target"/></block></block><l>1</l></block><block s="reportEquals"><block var="n"/><l>1</l></block></block><script><block s="doDeleteFromList"><l><option>all</option></l><block var="target"/></block></script><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>n</l></list><l>for(var i=1;i&lt;=data.length();i++)&#xD;   data.put(data.at(i).remove(n));</l></block><list><block var="target"/><block var="n"/></list></block></script></block></script></block></script></block></script><script><block s="doSayFor"><l>ERROR: only data in tables are deletable</l><l>2</l></block></script></block></script></block></script></block-definition><block-definition s="$storage add %&apos;choice&apos; %&apos;newContent&apos; to %&apos;table&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">adds a row, a column, or  column headers to a table</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">row<options>row&#xD;column&#xD;column headers</options></input><input type="%s"></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>tablewidth</l><l>item</l><l>target</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>target</l><block var="myData"/></block></script><script><block s="doSetVar"><l>target</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="target"/><l>table</l></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>newContent</l><l>choice</l></list><l>var tablewidth,item;&#xD;if(choice=="row"){&#xD;  if(data.length()==0) &#xD;    if(newContent instanceof List) data.add(newContent);&#xD;    else data.add(new List([newContent]));&#xD;  else{&#xD;    tablewidth=data.at(1).length();&#xD;    if(newContent instanceof List){&#xD;      item=new List();&#xD;      for(var i=1;i&lt;=tablewidth;i++)&#xD;        if(i&gt;newContent.length()) item.add("");&#xD;        else item.add(newContent.at(i));&#xD;      data.add(item);&#xD;      }&#xD;    else{&#xD;      item=new List([newContent]);&#xD;      for(var i=1;i&lt;tablewidth;i++) item.add("");&#xD;      data.add(item);&#xD;      }&#xD;    }&#xD;  }  &#xD;if(choice=="column"){&#xD;  if(!(newContent instanceof List)) newContent = new List([newContent]);&#xD;  if(data.length()==0)&#xD;    for(var i=1;i&lt;=newContent.length();i++) data.add(new List([newContent.at(i)]));&#xD;  else for(var i=1; i&lt;= data.length();i++)&#xD;         if(i&gt;newContent.length()) data.at(i).add("");&#xD;         else data.at(i).add(newContent.at(i));&#xD;&#xD;  }&#xD;if(choice=="column headers"){&#xD;  if(data.length()==0) &#xD;    if(newContent instanceof List) data.add(newContent);&#xD;    else data.add(new List([newContent]));&#xD;  else{&#xD;    tablewidth=data.at(1).length();&#xD;    if(newContent instanceof List){&#xD;      item=new List();&#xD;      for(var i=1;i&lt;=tablewidth;i++)&#xD;        if(i&gt;newContent.length()) item.add("");&#xD;        else item.add(newContent.at(i));&#xD;      }&#xD;    else{&#xD;      item=new List([newContent]);&#xD;      for(var i=1;i&lt;tablewidth;i++) item.add("");&#xD;      }&#xD;    data.add(item,1);&#xD;    }&#xD;  }</l></block><list><block var="target"/><block var="newContent"/><block var="choice"/></list></block></script><script><block s="doSayFor"><l>ERROR: only tables are expandable</l><l>2</l></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;choice&apos; %&apos;n&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">reports a row or column of a table</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">row<options>row&#xD;column</options></input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>row</l></block><script><block s="doReport"><block s="reportListItem"><block var="n"/><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>column</l></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doReport"><block s="reportListItem"><block var="n"/><l/></block></block></script><list></list></block><block var="source"/></block></block></script></block></script><script><block s="doReport"><l>ERROR: impossible</l></block></script></block></script></block></script></block-definition><block-definition s="$storage import %&apos;choice&apos; from %&apos;source&apos; to myData" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">FITS-data<options>FITS-data&#xD;table-data&#xD;costume-data</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>header</l><l>imagedata</l><l>h</l><l>min</l><l>max</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>FITS-data</l></block><script><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>text</option></l></block><script><block s="doSetVar"><l>imagedata</l><block s="evaluate"><block s="reportJSFunction"><list><l>FITSdata</l></list><l>function strToInt(high,low){&#xD;  var left = high.toString(2), right = low.toString(2);&#xD;  while(left.length&lt;8) left="0"+left;&#xD;  while(right.length&lt;8) right="0"+right;&#xD;  var both = left+right, result = 0;&#xD;  var factor = 1;&#xD;  for(var i=15; i&gt;=0;i--) {&#xD;    if(both.charAt(i)==&apos;1&apos;) result = result+factor;&#xD;    factor = factor*2;&#xD;    }&#xD;  return result;&#xD;  }&#xD;&#xD;var width=0, height=0, numberlength=0; minValue=32768, maxValue=-32769,header=[], pixelvalues=[],&#xD;    keyword=&apos;&apos;, kwvalue=&apos;&apos;, indexInLine=0, i=0, insideString=false, finished=false, c=&apos; &apos;, n=0,&#xD;    mask = Math.pow(2,7)-1; &#xD;i=0;&#xD;while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length)){&#xD;  indexInLine=1; keyword=&apos;&apos;; c = FITSdata.charAt(i); &#xD;  while((c!=&apos; &apos;) &amp;&amp; (c!=&apos;=&apos;) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    keyword = keyword+c;i++;indexInLine++; c = FITSdata.charAt(i);&#xD;    } &#xD;  while(((c==&apos; &apos;) || (c==&apos;=&apos;)) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++; c = FITSdata.charAt(i);&#xD;    }&#xD;  kwvalue=&apos;&apos;; insideString=false; finished=false;&#xD;  while(!finished){&#xD;    kwvalue=kwvalue+FITSdata.charAt(i);&#xD;    if(c=="&apos;") insideString = !insideString;&#xD;    i++; indexInLine++;&#xD;    c = FITSdata.charAt(i);&#xD;    if(insideString) finished=(i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    else finished= (c==&apos; &apos;) || (i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    }&#xD;  if(keyword.length&gt;0) header.push(new List([keyword,kwvalue]));&#xD;  if(keyword==&apos;NAXIS1&apos;) width=kwvalue;&#xD;  if(keyword==&apos;NAXIS2&apos;) height=kwvalue;&#xD;  if(keyword==&apos;BITPIX&apos;) numberlength=kwvalue;&#xD;  while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++;&#xD;    }&#xD;  }&#xD;&#xD;if(numberlength==16){&#xD;  i=2880; &#xD;  while(i&lt;FITSdata.length-1){&#xD;    n = strToInt(FITSdata.charAt(i).charCodeAt(0),FITSdata.charAt(i+1).charCodeAt(0));&#xD;    //n = -(n &amp; mask) + (n &amp; &#126;mask);  &#xD;    pixelvalues.push(n);&#xD;    if(n&gt;maxValue) maxValue=n;&#xD;    if(n&lt;minValue) minValue=n;&#xD;    i = i+2;&#xD;    }&#xD; return new List([width,height,minValue,maxValue,new List(header),new List(pixelvalues)]);&#xD;  }&#xD;else return &apos;unsupported number format&apos;;</l></block><list><block var="source"/></list></block></block><custom-block s="$storage set properties"></custom-block><block s="doSetVar"><l>myData</l><block s="reportListItem"><l>6</l><block var="imagedata"/></block></block><custom-block s="$storage set property %s to %s"><l>type of data</l><l>FITS</l></custom-block><custom-block s="$storage set property %s to %s"><l>width</l><block s="reportListItem"><l>1</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>height</l><block s="reportListItem"><l>2</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>minValue</l><block s="reportListItem"><l>3</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>maxValue</l><block s="reportListItem"><l>4</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>columns</l><l>1</l></custom-block><custom-block s="$storage set property %s to %s"><l>rows</l><block s="reportListAttribute"><l><option>length</option></l><block var="myData"/></block></custom-block><block s="doSetVar"><l>header</l><block s="reportListItem"><l>5</l><block var="imagedata"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="header"/></block><l>0</l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><l></l></block></block><script><custom-block s="$storage set property %s to %s"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="header"/></block></block></custom-block><block s="doDeleteFromList"><l>1</l><block var="header"/></block></script></block></script><script><block s="doSayFor"><l>ERROR: FITS data have to be text</l><l>2</l></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>table-data</l></block><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doSetVar"><l>w</l><custom-block s="$storage property %s"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$storage property %s"><l>height</l></custom-block></block><custom-block s="$storage set properties"></custom-block><custom-block s="$storage set property %s to %s"><l>width</l><block var="w"/></custom-block><custom-block s="$storage set property %s to %s"><l>height</l><block var="h"/></custom-block><block s="doSetVar"><l>myData</l><custom-block s="$storage copy of table %l"><block var="source"/></custom-block></block><custom-block s="$storage set property %s to %s"><l>type of data</l><l>table</l></custom-block><custom-block s="$storage set property %s to %s"><l>minValue</l><l>not set</l></custom-block><custom-block s="$storage set property %s to %s"><l>maxValue</l><l>not set</l></custom-block><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="source"/></block><l>0</l></block><script><custom-block s="$storage set property %s to %s"><l>columns</l><l>0</l></custom-block><custom-block s="$storage set property %s to %s"><l>rows</l><l>0</l></custom-block></script><script><custom-block s="$storage set property %s to %s"><l>columns</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block><custom-block s="$storage set property %s to %s"><l>rows</l><block s="reportListAttribute"><l><option>length</option></l><block var="myData"/></block></custom-block></script></block></script><script><block s="doSayFor"><l>ERROR: only import from a table</l><l>2</l></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>costume-data</l></block><script><block s="doIf"><block s="reportIsA"><block var="source"/><l><option>text</option></l></block><script><block s="doSetVar"><l>source</l><block s="reportGet"><l><option>costume</option></l></block></block></script></block><block s="doSetVar"><l>myData</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="source"/></block></block><custom-block s="$storage set properties"></custom-block><custom-block s="$storage set property %s to %s"><l>type of data</l><l>RGB</l></custom-block><custom-block s="$storage set property %s to %s"><l>width</l><block s="reportGetImageAttribute"><l><option>width</option></l><block var="source"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>height</l><block s="reportGetImageAttribute"><l><option>height</option></l><block var="source"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>rows</l><block s="reportListAttribute"><l><option>length</option></l><block var="myData"/></block></custom-block><custom-block s="$storage set property %s to %s"><l>columns</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block><block s="doSetVar"><l>min</l><custom-block s="$storage %txt of %l"><l>min</l><custom-block s="$storage %s %n of %s"><l>column</l><l>1</l><block var="myData"/></custom-block></custom-block></block><block s="doSetVar"><l>max</l><custom-block s="$storage %txt of %l"><l>max</l><custom-block s="$storage %s %n of %s"><l>column</l><l>1</l><block var="myData"/></custom-block></custom-block></block><block s="doFor"><l>i</l><l>2</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="myData"/></block></block><script><block s="doSetVar"><l>h</l><custom-block s="$storage %txt of %l"><l>min</l><custom-block s="$storage %s %n of %s"><l>column</l><block var="i"/><block var="myData"/></custom-block></custom-block></block><block s="doIf"><block s="reportLessThan"><block var="h"/><block var="min"/></block><script><block s="doSetVar"><l>min</l><block var="h"/></block></script></block><block s="doSetVar"><l>h</l><custom-block s="$storage %txt of %l"><l>max</l><custom-block s="$storage %s %n of %s"><l>column</l><block var="i"/><block var="myData"/></custom-block></custom-block></block><block s="doIf"><block s="reportGreaterThan"><block var="h"/><block var="max"/></block><script><block s="doSetVar"><l>max</l><block var="h"/></block></script></block></script></block><custom-block s="$storage set property %s to %s"><l>minValue</l><block var="min"/></custom-block><custom-block s="$storage set property %s to %s"><l>maxValue</l><block var="max"/></custom-block></script></block></script></block></script></block-definition><block-definition s="$storage set scale attributes precision %&apos;precision&apos; textheight %&apos;textheight&apos; number of intervalls x-axis %&apos;n&apos;" type="command" category="looks"><comment w="90" collapsed="false">sets the properties for scales</comment><header></header><code></code><translations></translations><inputs><input type="%n">3</input><input type="%n">12</input><input type="%n">10</input></inputs><script><block s="doWarp"><script><custom-block s="$storage set property %s to %s"><l>scalesPrecision</l><block var="precision"/></custom-block><custom-block s="$storage set property %s to %s"><l>scalesTextheight</l><block var="textheight"/></custom-block><custom-block s="$storage set property %s to %s"><l>scalesNumberXintervals</l><block var="n"/></custom-block></script></block></script></block-definition><block-definition s="$storage solve %&apos;A&apos; * x = %&apos;b&apos;" type="reporter" category="operators"><comment w="186.57534246575338" collapsed="false">solves a linear equation, if possible</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>toSolve</l></list></block><block s="doIfElse"><block s="reportAnd"><custom-block s="$storage is %s a %s ?"><block var="A"/><l>matrix</l></custom-block><custom-block s="$storage is %s a %s ?"><block var="b"/><l>vector</l></custom-block></block><script><block s="doSetVar"><l>toSolve</l><custom-block s="$storage copy of table %l"><block var="A"/></custom-block></block><custom-block s="$storage add %s %s to %s"><l>column</l><block var="b"/><block var="toSolve"/></custom-block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>matrix</l></list><l>&#xD;var m=new List(), result, solved=true, width;&#xD;//code "solve" copied from Walter Bislins: http://walter.bislins.ch/blog/index.asp?page=L%F6sen+linearer+Gleichungssysteme+%28JavaScript%29&#xD;&#xD;function solve( m ) {&#xD; &#xD;  function findNotZeroRow( r ) {&#xD;    for ( var nzr = r + 1; nzr &lt; d; nzr++ ) {&#xD;      if ( m[nzr][r] != 0 ) return nzr;&#xD;    }&#xD;    return -1;&#xD;  }&#xD;&#xD;  function swapRows( r1, r2 ) {&#xD;    for ( var c = 0; c &lt;= d; c++ ) {&#xD;      var tmp = m[r1][c];&#xD;      m[r1][c] = m[r2][c];&#xD;      m[r2][c] = tmp;&#xD;    }&#xD;  }&#xD;&#xD; function normRow( r ) {&#xD;    // require m[r][r] != 0&#xD;    var a = m[r][r];&#xD;    if ( a == 1 ) return;&#xD;    m[r][r] = 1;&#xD;    for ( var c = r + 1; c &lt;= d; c++ ) {&#xD;      m[r][c] /= a;&#xD;    }&#xD;  }&#xD;&#xD;  function zeroCell( zr, zc ) {&#xD;    var a = m[zr][zc];&#xD;    if ( a == 0 ) return;&#xD;    m[zr][zc] = 0;&#xD;    for ( var c = zc + 1; c &lt;= d; c++ ) {&#xD;      m[zr][c] -= a * m[zc][c];&#xD;    }&#xD;  }&#xD;&#xD;  var d = m.length;&#xD;  for ( var r = 0; r &lt; d; r++ ) {&#xD;    if ( m[r][r] == 0 ) {&#xD;      var nzr = findNotZeroRow( r );&#xD;      if ( nzr == -1 ) return false;&#xD;      swapRows( r, nzr );&#xD;    }&#xD;    // assert m[r][r] != 0&#xD;    normRow( r );&#xD;    for ( var zr = 0; zr &lt; d; zr++ ) {&#xD;      if ( zr != r ) {&#xD;        zeroCell( zr, r );&#xD;      }&#xD;    }&#xD;  }&#xD;  return true;&#xD;}&#xD;&#xD;for(var i=1;i&lt;=matrix.length();i++) m.add(matrix.at(i).asArray());&#xD;m = m.asArray();&#xD;solved=solve(m);&#xD;if(solved){&#xD;  result = new List();&#xD;  width  = m[0].length-1;&#xD;  for(var i=0;i&lt;m.length;i++) result.add(m[i][width]);&#xD;  return result;&#xD;  }&#xD;else return "ERROR: equation not solved";</l></block><list><block var="toSolve"/></list></block></block></script><script><block s="doReport"><l>ERROR: wrong types</l></block></script></block></script></block-definition><block-definition s="$storage polynom interpolated for %&apos;table&apos;" type="reporter" category="operators"><comment w="306.4383561643836" collapsed="false">creates the interpolation polynom for a list of points</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="table"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="table"/></block></block><l>2</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>xValues</l><l>yValues</l></list><l>//with help from code based on Walter Bislins: http://walter.bislins.ch/blog/index.asp?page=L%F6sen+linearer+Gleichungssysteme+%28JavaScript%29&#xD;&#xD;function solve( m ) {&#xD; &#xD;  function findNotZeroRow( r ) {&#xD;    for ( var nzr = r + 1; nzr &lt; d; nzr++ ) {&#xD;      if ( m[nzr][r] != 0 ) return nzr;&#xD;    }&#xD;    return -1;&#xD;  }&#xD;&#xD;  function swapRows( r1, r2 ) {&#xD;    for ( var c = 0; c &lt;= d; c++ ) {&#xD;      var tmp = m[r1][c];&#xD;      m[r1][c] = m[r2][c];&#xD;      m[r2][c] = tmp;&#xD;    }&#xD;  }&#xD;&#xD; function normRow( r ) {&#xD;    // require m[r][r] != 0&#xD;    var a = m[r][r];&#xD;    if ( a == 1 ) return;&#xD;    m[r][r] = 1;&#xD;    for ( var c = r + 1; c &lt;= d; c++ ) {&#xD;      m[r][c] /= a;&#xD;    }&#xD;  }&#xD;&#xD;  function zeroCell( zr, zc ) {&#xD;    var a = m[zr][zc];&#xD;    if ( a == 0 ) return;&#xD;    m[zr][zc] = 0;&#xD;    for ( var c = zc + 1; c &lt;= d; c++ ) {&#xD;      m[zr][c] -= a * m[zc][c];&#xD;    }&#xD;  }&#xD;&#xD;  var d = m.length;&#xD;  for ( var r = 0; r &lt; d; r++ ) {&#xD;    if ( m[r][r] == 0 ) {&#xD;      var nzr = findNotZeroRow( r );&#xD;      if ( nzr == -1 ) return false;&#xD;      swapRows( r, nzr );&#xD;    }&#xD;    // assert m[r][r] != 0&#xD;    normRow( r );&#xD;    for ( var zr = 0; zr &lt; d; zr++ ) {&#xD;      if ( zr != r ) {&#xD;        zeroCell( zr, r );&#xD;      }&#xD;    }&#xD;  }&#xD;  return true;&#xD;}&#xD;&#xD;var matrix = [], n=xValues.length(),x,row,result, solved=true, width;&#xD;&#xD;for(var i=1;i&lt;=n;i++){&#xD;  row = [];&#xD;  for(var j=n-1;j&gt;=0;j--){&#xD;    x=1;&#xD;    for(var k=j;k&gt;0;k--) x = x*Number(xValues.at(i));&#xD;    row.push(x);&#xD;    }&#xD;  row.push(yValues.at(i));&#xD;  matrix.push(row); &#xD;  }&#xD;solved=solve(matrix);&#xD;if(solved){&#xD;  result = new List();&#xD;  width  = matrix[0].length-1;&#xD;  for(var i=0;i&lt;matrix.length;i++) result.add(matrix[i][width]);&#xD;  return result;&#xD;  }&#xD;else return "ERROR: no solution found";</l></block><list><custom-block s="$storage %s %n of %s"><l>column</l><l>1</l><block var="table"/></custom-block><custom-block s="$storage %s %n of %s"><l>column</l><l>2</l><block var="table"/></custom-block></list></block></block></script><script><block s="doReport"><l>ERROR: wrong table format</l></block></script></block></script><script><block s="doReport"><l>ERROR: no table</l></block></script></block></script></block-definition><block-definition s="$storage polynom %&apos;p&apos; ( %&apos;x&apos; )" type="reporter" category="operators"><comment w="111.91780821917816" collapsed="false">calculates the value of a polynom for input x</comment><header></header><code></code><translations></translations><inputs><input type="%s">polynom as list of coefficients</input><input type="%n"></input></inputs><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="p"/><l>vector</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>poly</l><l>x</l></list><l>//calculation by Horner-schema&#xD;var grade = poly.length(),result;&#xD;if(grade==0) return 0;&#xD;else if(grade==1) return Number(poly.at(1));&#xD;     else{&#xD;       result=Number(poly.at(1))*Number(x)+Number(poly.at(2));&#xD;       for(var i=3;i&lt;=grade;i++) result = result*Number(x)+Number(poly.at(i));&#xD;       return result;&#xD;       }</l></block><list><block var="p"/><block var="x"/></list></block></block></script><script><block s="doReport"><l>ERROR: no poynom</l></block></script></block></script></block-definition><block-definition s="$storage draw circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment w="90" collapsed="false">draws a circle on present costume using line properties</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.arc(x,y,radius,0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="myCostume"/><block var="x"/><block var="y"/><block var="radius"/><custom-block s="$storage property %s"><l>lineWidth</l></custom-block><custom-block s="$storage property %s"><l>lineColorRed</l></custom-block><custom-block s="$storage property %s"><l>lineColorGreen</l></custom-block><custom-block s="$storage property %s"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="$storage fill rectangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">200</input><input type="%n">50</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>w</l><l>h</l></list><comment w="164.6575342465754" collapsed="false">fills a rectangle on present costume using datapoint properties</comment></block><block s="doWarp"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="x1"/><block var="x2"/></block><script><block s="doSetVar"><l>x</l><block var="x2"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block></script><script><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x2"/><block var="x1"/></block></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block var="y2"/><block var="y1"/></block><script><block s="doSetVar"><l>y</l><block var="y2"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></script><script><block s="doSetVar"><l>y</l><block var="y1"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>w</l><l>h</l><l>width</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = width;&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.fillRect(x1,y1,w,h);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="myCostume"/><block var="x"/><block var="y"/><block var="w"/><block var="h"/><custom-block s="$storage property %s"><l>lineWidth</l></custom-block><custom-block s="$storage property %s"><l>datapointColorRed</l></custom-block><custom-block s="$storage property %s"><l>datapointColorGreen</l></custom-block><custom-block s="$storage property %s"><l>datapointColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="$storage fill circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment w="72.19178082191787" collapsed="false">fills a circle on poresent costume using datapoint properties</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.arc(x,y,radius,0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="myCostume"/><block var="x"/><block var="y"/><block var="radius"/><custom-block s="$storage property %s"><l>lineWidth</l></custom-block><custom-block s="$storage property %s"><l>datapointColorRed</l></custom-block><custom-block s="$storage property %s"><l>datapointColorGreen</l></custom-block><custom-block s="$storage property %s"><l>datapointColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="$storage set line attributes style %&apos;style&apos; width %&apos;width&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><comment w="90" collapsed="false">sets line style and color for DataSprite diagrams</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">continuous<options>continuous&#xD;dashed&#xD;dash-dot&#xD;dot-dot</options></input><input type="%n">1</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doSetVar"><l>style</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="style"/><l> </l></block></block></block><custom-block s="$storage set property %s to %s"><l>lineStyle</l><block var="style"/></custom-block><custom-block s="$storage set property %s to %s"><l>lineWidth</l><block var="width"/></custom-block><custom-block s="$storage set property %s to %s"><l>lineColorRed</l><block var="r"/></custom-block><custom-block s="$storage set property %s to %s"><l>lineColorGreen</l><block var="g"/></custom-block><custom-block s="$storage set property %s to %s"><l>lineColorBlue</l><block var="b"/></custom-block></script></block-definition><block-definition s="$storage set datapoint attributes style %&apos;style&apos; width %&apos;width&apos; connected %&apos;connected&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">sets the properties for the data points for the diagrams of a DataSprite</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">o circle<options>o_circle&#xD;._point&#xD;*_asterix&#xD;+_plus&#xD;x_ex&#xD;square&#xD;triangle&#xD;none</options></input><input type="%n">5</input><input type="%b">false</input><input type="%n">0</input><input type="%n">255</input><input type="%n">0</input></inputs><script><block s="doSetVar"><l>style</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="style"/><l> </l></block></block></block><custom-block s="$storage set property %s to %s"><l>datapointStyle</l><block var="style"/></custom-block><custom-block s="$storage set property %s to %s"><l>datapointWidth</l><block var="width"/></custom-block><custom-block s="$storage set property %s to %s"><l>datapointConnected</l><block var="connected"/></custom-block><custom-block s="$storage set property %s to %s"><l>datapointColorRed</l><block var="r"/></custom-block><custom-block s="$storage set property %s to %s"><l>datapointColorGreen</l><block var="g"/></custom-block><custom-block s="$storage set property %s to %s"><l>datapointColorBlue</l><block var="b"/></custom-block></script></block-definition><block-definition s="random" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return Math.random();</l></block><list></list></block></block></script></block-definition><block-definition s="$storage %&apos;n&apos; random points near %&apos;f&apos; between %&apos;xmin&apos; and %&apos;xmax&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n">20</input><input type="%repRing"></input><input type="%n">-5</input><input type="%n">5</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>data</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>data</l><custom-block s="$storage new table"></custom-block></block><block s="doRepeat"><block var="n"/><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block><custom-block s="random"></custom-block></block><block var="xmin"/></block></block><block s="doSetVar"><l>y</l><block s="evaluate"><block s="reportJSFunction"><list><l>f</l><l>x</l><l>proc</l></list><l>return proc.reportAtomicMap(f,new List([x])).at(1); //copied from Snap!-code</l></block><list><block var="f"/><block var="x"/></list></block></block><block s="doAddToList"><block s="reportNewList"><list><block var="x"/><block s="reportSum"><block var="y"/><block s="reportProduct"><block s="reportDifference"><custom-block s="random"></custom-block><l>0.5</l></block><block var="y"/></block></block></list></block><block var="data"/></block></script></block><block s="doReport"><block var="data"/></block></script></block></script><scripts><script x="312.3242237500001" y="78.44445144444438"><block s="reportProduct"><l>.2</l><block s="reportProduct"><block var="x"/><block var="x"/></block></block></script></scripts></block-definition><block-definition s="$storage brightness around ( %&apos;x&apos; , %&apos;y&apos; ) radius %&apos;r&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">10</input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>xpos</l><l>ypos</l><l>r</l><l>width</l><l>height</l></list><l>&#xD;function imageValue(x,y){&#xD;  if((x&gt;width)||(x&lt;1)||(y&gt;height)||(y&lt;1)) return 0;&#xD;  else return data.at(x+(y-1)*width);&#xD;  }&#xD; &#xD;var sumOfValues=0,points=0,y=ypos-r,x;&#xD;while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;  x=xpos-r;&#xD;  while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;    if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;      sumOfValues=sumOfValues+imageValue(Math.round(x),Math.round(y));&#xD;      points++;&#xD;      }&#xD;    x++;&#xD;  }&#xD;  y++;&#xD;}&#xD;return sumOfValues;    </l></block><list><block var="myData"/><block var="x"/><block var="y"/><block var="r"/><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>height</l></custom-block></list></block></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage add dataplot text/number %&apos;data&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$storage property %s"><l>type of data</l></custom-block><l>table</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSayFor"><l>ERROR: wrong data format</l><l>2</l></block><block s="doSetVar"><l>source</l><l></l></block></script></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIf"><custom-block s="$storage is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>ranges</l><l>offsets</l><l>labels</l><l>lineattributes</l><l>dataattributes</l><l>data</l></list><l>function xTOxp(x){return x0+(x*diagramWidth/(xRight-xLeft));}&#xD;function yTOyp(y){return y0-(y*diagramHeight/(yUpper-yLower));}&#xD;function xpTOx(xp){return (xp-x0)*(xRight-xLeft)/diagramWidth;}&#xD;function ypTOy(yp){return (y0-yp)*(yUpper-yLower)/diagramHeight;}&#xD;function round(x,n){return Math.round(x*Math.pow(10,n))/Math.pow(10,n);}&#xD;function randomInt(min,max){return Math.floor(Math.random()*(max-min+1)+min);}&#xD;&#xD;&#xD;function plotData(){&#xD;  var i=0,linewidth=lineattributes.at(2),linestyle=1,datawidth=dataattributes.at(2),datastyle=1,&#xD;      connected=dataattributes.at(3),dx,x;&#xD;  var arraydata=data.asArray(),xpos,ypos,xpOld,ypOld,w;&#xD;  if(lineattributes.at(1).trim()==&apos;continuous&apos;) linestyle = 1;&#xD;    else if(lineattributes.at(1).trim()==&apos;dashed&apos;) linestyle = 2;&#xD;      else if(lineattributes.at(1).trim()==&apos;dash-dot&apos;) linestyle = 3;&#xD;        else if(lineattributes.at(1).trim()==&apos;dot-dot&apos;) linestyle = 4;&#xD;  if(dataattributes.at(1).trim()== &apos;o circle&apos;) datastyle=1;&#xD;  else if(dataattributes.at(1).trim()== &apos;._point&apos;) datastyle=2;  &#xD;       else if(dataattributes.at(1).trim()==&apos;*_asterix&apos;) datastyle=3;&#xD;            else if(dataattributes.at(1).trim()== &apos;+_plus&apos;) datastyle=4;&#xD;                 else if(dataattributes.at(1).trim()== &apos;x_ex&apos;) datastyle=5;&#xD;                      else if(dataattributes.at(1).trim()== &apos;square&apos;) datastyle=6;&#xD;                           else if(dataattributes.at(1).trim()== &apos;triangle&apos;) datastyle=7;&#xD;                                else if(dataattributes.at(1).trim()== &apos;none&apos;) datastyle=8;&#xD;                                     else datastyle=1;&#xD;  ctx.strokeStyle=new Color(0,0,0).toString();&#xD;  ctx.fillStyle=new Color(dataattributes.at(4),dataattributes.at(5),dataattributes.at(6)).toString();&#xD;  ctx.lineWidth = linewidth;&#xD;  if(linestyle==2){ctx.setLineDash([10,5]);}&#xD;  else if(linestyle==3){ctx.setLineDash([10,2,1,2]);}    &#xD;       else if(linestyle==4){ctx.setLineDash([1,2]);}&#xD;            else{ctx.setLineDash([]);}&#xD;  if(arraydata.length&gt;0){&#xD;    dx=(xRight-xLeft)/arraydata.length;&#xD;    x=xLeft;  &#xD;    xpOld= xTOxp(x);&#xD;    ypOld=yTOyp(arraydata[0].at(2));&#xD;    }&#xD;  while(i&lt;arraydata.length){&#xD;    xpos=xTOxp(x);&#xD;    ypos=yTOyp(arraydata[i].at(2));&#xD;    if(connected &amp;&amp; i&gt;0){&#xD;       ctx.beginPath();&#xD;       ctx.moveTo(xpOld+leftOffset,ypOld+upperOffset);&#xD;       ctx.lineTo(xpos+leftOffset,ypos+upperOffset);&#xD;       ctx.closePath();&#xD;       ctx.fill();&#xD;       ctx.stroke();     &#xD;       }&#xD;     ctx.beginPath();&#xD;     if(datastyle==1){&#xD;       ctx.arc(xpos+leftOffset,ypos+upperOffset,datawidth/2,0,6.283185307179586476925286766559);&#xD;       }&#xD;     if(datastyle==2){&#xD;       ctx.arc(xpos+leftOffset,ypos+upperOffset,2,0,6.283185307179586476925286766559);&#xD;       }&#xD;     if(datastyle==3){&#xD;       ctx.font = ""+datawidth+"px sans-serif";&#xD;       w= ctx.measureText("*").width;&#xD;       ctx.fillText("*",xpos+leftOffset-w/2,ypos+upperOffset+datawidth/2);&#xD;       }&#xD;     if(datastyle==4){&#xD;       ctx.font = ""+datawidth+"px sans-serif";&#xD;       w= ctx.measureText("+").width;&#xD;       ctx.fillText("+",xpos+leftOffset-w/2,ypos+upperOffset+datawidth/2);&#xD;       }&#xD;   if(datastyle==5){&#xD;      ctx.font = ""+datawidth+"px sans-serif";&#xD;      w= ctx.measureText("X").width;&#xD;      ctx.fillText("X",xpos+leftOffset-w/2,ypos+upperOffset+datawidth/2);&#xD;      }&#xD;   if(datastyle==6){&#xD;       ctx.fillRect(xpos+leftOffset-datawidth/2,ypos+upperOffset-datawidth/2,datawidth,datawidth);&#xD;       ctx.strokeRect(xpos+leftOffset-datawidth/2,ypos+upperOffset-datawidth/2,datawidth,datawidth);&#xD;       }&#xD;   if(datastyle==7){&#xD;       ctx.moveTo(xpos+leftOffset,ypos+upperOffset-datawidth/2);&#xD;       ctx.lineTo(xpos+leftOffset-datawidth/2,ypos+upperOffset+datawidth/2);&#xD;       ctx.lineTo(xpos+leftOffset+datawidth/2,ypos+upperOffset+datawidth/2);&#xD;       ctx.lineTo(xpos+leftOffset,ypos+upperOffset-datawidth/2);&#xD;        }&#xD;   if(datastyle==0){&#xD;       ctx.moveTo(xpos+leftOffset,ypos+upperOffset);&#xD;       ctx.lineTo(xpos+leftOffset,ypos+upperOffset+1);&#xD;        }&#xD;    ctx.closePath();&#xD;    ctx.fill();&#xD;    ctx.stroke();&#xD;    xpOld=xpos; ypOld=ypos;&#xD;    i=i+1;&#xD;    x=x+dx;&#xD;    }&#xD;    ctx.setLineDash([]);&#xD;  }&#xD;&#xD;// to ensure the correct type "Number" to number parameters&#xD;xLeft = Number(ranges.at(1));&#xD;xRight = Number(ranges.at(2));&#xD;yLower = Number(ranges.at(3));&#xD;yUpper = Number(ranges.at(4));&#xD;upperOffset = Number(offsets.at(2));&#xD;lowerOffset = Number(offsets.at(3));&#xD;leftOffset = Number(offsets.at(1));&#xD;&#xD;var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var rightCostumeEdge=costume.contents.width, lowerCostumeEdge=costume.contents.height,&#xD;    diagramWidth=rightCostumeEdge-leftOffset, diagramHeight=lowerCostumeEdge-lowerOffset-upperOffset;&#xD;var x0=xLeft/(xLeft-xRight)*diagramWidth, y0=yUpper/(yUpper-yLower)*diagramHeight;&#xD;&#xD;plotData();       &#xD;&#xD;   </l></block><list><block var="myCostume"/><custom-block s="$storage attributes %txt"><l>ranges</l></custom-block><custom-block s="$storage attributes %txt"><l>offsets</l></custom-block><custom-block s="$storage attributes %txt"><l>labels</l></custom-block><custom-block s="$storage attributes %txt"><l>line-attributes</l></custom-block><custom-block s="$storage attributes %txt"><l>datapoint-attributes</l></custom-block><block var="source"/></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;column&apos; --&gt; label charwidth %&apos;w&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n">7</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>length</l><l>i</l><l>j</l><l>text</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>length</l><block s="reportRound"><block s="reportQuotient"><block s="reportDifference"><block s="reportQuotient"><block s="reportDifference"><custom-block s="$storage property %s"><l>width</l></custom-block><custom-block s="$storage property %s"><l>leftOffset</l></custom-block></block><block s="reportListAttribute"><l><option>length</option></l><block var="column"/></block></block><l>5</l></block><block var="w"/></block></block></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportListAttribute"><l><option>length</option></l><block var="column"/></block></block><script><block s="doSetVar"><l>text</l><l></l></block><block s="doSetVar"><l>j</l><l>1</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="j"/><block var="length"/></block><script><block s="doSetVar"><l>text</l><block s="reportJoinWords"><list><block var="text"/><block s="reportLetter"><block var="j"/><block s="reportListItem"><block var="i"/><block var="column"/></block></block></list></block></block><block s="doChangeVar"><l>j</l><l>1</l></block></script></block><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block var="text"/><l> </l></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$storage %&apos;k&apos; next neighbors of %&apos;point&apos; in %&apos;data&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">determines the next k neighbours of a point in data. The class of the point must be in column 3.</comment><header></header><code></code><translations></translations><inputs><input type="%n">5</input><input type="%l"></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>neighbors</l><l>points</l><l>result</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>points</l><block var="myData"/></block></script><script><block s="doSetVar"><l>points</l><block var="data"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?"><block var="points"/><l>table</l></custom-block><script><block s="doSetVar"><l>neighbors</l><custom-block s="$storage sort %s by column %n ascending %b"><block s="evaluate"><block s="reportJSFunction"><list><l>point</l><l>points</l></list><l>var neighbors=new List();&#xD;for(i=1;i&lt;=points.length();i++){&#xD;  neighbors.add(new List([points.at(i).at(3),Math.sqrt((point.at(1)-points.at(i).at(1))*(point.at(1)-points.at(i).at(1))+(point.at(2)-points.at(i).at(2))*(point.at(2)-points.at(i).at(2)))]));&#xD;  }&#xD;return neighbors;</l></block><list><block var="point"/><block var="points"/></list></block><l>2</l><l><bool>true</bool></l></custom-block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="result"/></block><block var="k"/></block><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="neighbors"/></block><l>0</l></block></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="neighbors"/></block><block var="result"/></block><block s="doDeleteFromList"><l>1</l><block var="neighbors"/></block></script></block><block s="doReport"><block var="result"/></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage draw text %&apos;text&apos; at %&apos;x&apos; %&apos;y&apos; height %&apos;height&apos; horizontal %&apos;horizontal&apos;" type="command" category="looks"><comment w="90" collapsed="false">draws a text on present costume using line properties.</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%n">100</input><input type="%n">50</input><input type="%n">12</input><input type="%b">true</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>text</l><l>height</l><l>horizontal</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.font = ""+height+"px sans-serif";&#xD;if(horizontal)ctx.fillText(text,x,y);&#xD;else{&#xD;  ctx.rotate(-Math.PI/2);  &#xD;  ctx.fillText(text,-y,x);&#xD;  ctx.rotate(Math.PI/2);  &#xD;  }&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="myCostume"/><block var="x"/><block var="y"/><block var="text"/><block var="height"/><block var="horizontal"/><custom-block s="$storage property %s"><l>lineColorRed</l></custom-block><custom-block s="$storage property %s"><l>lineColorGreen</l></custom-block><custom-block s="$storage property %s"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="$storage set ranges by list %&apos;ranges&apos;" type="command" category="looks"><comment w="103.33333333333333" collapsed="false">sets the ranges for the axes of the diagrams of a DataSprit, the list normally is computed by &quot;ranges of ...&quot;</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="ranges"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="ranges"/></block><l>4</l></block><script><custom-block s="$storage set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><block var="ranges"/></block><block s="reportListItem"><l>2</l><block var="ranges"/></block><block s="reportListItem"><l>3</l><block var="ranges"/></block><block s="reportListItem"><l>4</l><block var="ranges"/></block></custom-block></script><script><block s="doSayFor"><l>ERROR: wrong data format</l><l>2</l></block></script></block></script><script><block s="doSayFor"><l>ERROR: wrong data format</l><l>2</l></block></script></block></script></block-definition><block-definition s="$storage Nettoyer Data" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>data0</l><custom-block s="$storage new table"></custom-block></block><block s="doSetVar"><l>data1</l><custom-block s="$storage new table"></custom-block></block><block s="doSetVar"><l>data2</l><custom-block s="$storage new table"></custom-block></block></script></block-definition><block-definition s="$robot mise à jour automatique des capteurs" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doForever"><script><block s="doSetVar"><l>capteurs</l><custom-block s="$robot mettre à jour les capteurs"></custom-block></block></script></block></script></block-definition><block-definition s="$storage Graphique temps réel : capteurs de sol" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="show"></block><custom-block s="$storage Etiquette : Titre %txt abscisses %txt ordonnées %txt"><l>Capteurs de sol du thymio</l><l>temps (s)</l><l>Rouge = Droit;     Vert = Gauche</l></custom-block><custom-block s="$storage Acquisition graphique temps réel de %cmdRing et %cmdRing en %n points en continu avec ymin %n et ymax %n"><block s="reifyReporter"><autolambda><custom-block s="$robot prox.ground.reflected[ %n ]"><l>0</l></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="$robot prox.ground.reflected[ %n ]"><l>1</l></custom-block></autolambda><list></list></block><l>50</l><l>0</l><l>1024</l></custom-block></script></block-definition><block-definition s="$storage Etiquette : Titre %&apos;newTitle&apos; abscisses %&apos;newXLabel&apos; ordonnées %&apos;newYLabel&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doWarp"><script><custom-block s="$storage set property %s to %s"><l>title</l><block var="newTitle"/></custom-block><custom-block s="$storage set property %s to %s"><l>xLabel</l><block var="newXLabel"/></custom-block><custom-block s="$storage set property %s to %s"><l>yLabel</l><block var="newYLabel"/></custom-block><custom-block s="$storage set offsets"></custom-block></script></block></script></block-definition><block-definition s="$storage Acquisition graphique temps réel de %&apos;input0&apos; et %&apos;input1&apos; en %&apos;nbpoints&apos; points en continu avec ymin %&apos;ymin&apos; et ymax %&apos;ymax&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%cmdRing"></input><input type="%n">50</input><input type="%n"></input><input type="%n"></input></inputs><script><custom-block s="$storage Nettoyer Data"></custom-block><custom-block s="$storage add graph %s"><block var="data0"/></custom-block><custom-block s="$storage add graph %s"><block var="data1"/></custom-block><custom-block s="réinitialiser le chronomètre (ms)"></custom-block><block s="doForever"><script><block s="doWarp"><script><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input0"/><list></list></block></list></block><block var="data0"/></custom-block><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input1"/><list></list></block></list></block><block var="data1"/></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="data0"/></block><block var="nbpoints"/></block><script><custom-block s="$storage delete %s %n of %s"><l>row</l><l>1</l><block var="data0"/></custom-block><custom-block s="$storage delete %s %n of %s"><l>row</l><l>1</l><block var="data1"/></custom-block></script></block><custom-block s="$storage new costume width %n height %n color %n %n %n"><l>470</l><l>350</l><l>255</l><l>225</l><l>205</l></custom-block><custom-block s="$storage set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><custom-block s="$storage %s %n of %s"><l>row</l><l>1</l><block var="data0"/></custom-block></block><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block var="ymin"/><block var="ymax"/></custom-block><custom-block s="$storage add scales"></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>x_ex</l><l>10</l><l><bool>true</bool></l><l>255</l><l>0</l><l>0</l></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data0"/></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>._point</l><l>10</l><l><bool>true</bool></l><l>0</l><l>255</l><l>0</l></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data1"/></custom-block></script></block></script></block></script></block-definition><block-definition s="réinitialiser le chronomètre (ms)" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>chrono (ms)</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>let t=performance.now();&#xD;return t;</l></block><list></list></block></block></script></block-definition><block-definition s="chronomètre (ms)" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportDifference"><block s="evaluate"><block s="reportJSFunction"><list></list><l>let t=performance.now();&#xD;return t;</l></block><list></list></block><block var="chrono (ms)"/></block></block></script></block-definition><block-definition s="$storage Graphique temps réel : 3 capteurs accélération" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="show"></block><custom-block s="$storage Etiquette : Titre %txt abscisses %txt ordonnées %txt"><l>Capteurs d&apos;accélération du thymio</l><l>temps (s)</l><l>accélerations x (R), y (V) et z(B)</l></custom-block><custom-block s="$storage Acquisition graphique temps réel de %cmdRing et %cmdRing et %cmdRing en %n points en continu avec ymin %n et ymax %n"><block s="reifyReporter"><autolambda><custom-block s="$robot acc[ %n ]"><l>0</l></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="$robot acc[ %n ]"><l>1</l></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="$robot acc[ %n ]"><l>2</l></custom-block></autolambda><list></list></block><l>200</l><l>-30</l><l>30</l></custom-block></script></block-definition><block-definition s="$storage Acquisition graphique temps réel de %&apos;input0&apos; et %&apos;input1&apos; et %&apos;input2&apos; en %&apos;nbpoints&apos; points en continu avec ymin %&apos;ymin&apos; et ymax %&apos;ymax&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%cmdRing"></input><input type="%cmdRing"></input><input type="%n">50</input><input type="%n"></input><input type="%n"></input></inputs><script><custom-block s="$storage Nettoyer Data"></custom-block><custom-block s="$storage add graph %s"><block var="data0"/></custom-block><custom-block s="$storage add graph %s"><block var="data1"/></custom-block><custom-block s="$storage add graph %s"><block var="data2"/></custom-block><custom-block s="réinitialiser le chronomètre (ms)"></custom-block><block s="doForever"><script><block s="doWarp"><script><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input0"/><list></list></block></list></block><block var="data0"/></custom-block><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input1"/><list></list></block></list></block><block var="data1"/></custom-block><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input2"/><list></list></block></list></block><block var="data2"/></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="data0"/></block><block var="nbpoints"/></block><script><custom-block s="$storage delete %s %n of %s"><l>row</l><l>1</l><block var="data0"/></custom-block><custom-block s="$storage delete %s %n of %s"><l>row</l><l>1</l><block var="data1"/></custom-block><custom-block s="$storage delete %s %n of %s"><l>row</l><l>1</l><block var="data2"/></custom-block></script></block><custom-block s="$storage new costume width %n height %n color %n %n %n"><l>470</l><l>350</l><l>255</l><l>225</l><l>205</l></custom-block><custom-block s="$storage set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><custom-block s="$storage %s %n of %s"><l>row</l><l>1</l><block var="data0"/></custom-block></block><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block var="ymin"/><block var="ymax"/></custom-block><custom-block s="$storage add scales"></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>x_ex</l><l>10</l><l><bool>true</bool></l><l>255</l><l>0</l><l>0</l></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data0"/></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>._point</l><l>10</l><l><bool>true</bool></l><l>0</l><l>255</l><l>0</l></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data1"/></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>+_plus</l><l>10</l><l><bool>true</bool></l><l>0</l><l>0</l><l>255</l></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data2"/></custom-block></script></block></script></block></script></block-definition><block-definition s="$storage Acquisition graphique temps réel de %&apos;input0&apos; en %&apos;nbpoints&apos; points en continu avec ymin %&apos;ymin&apos; et ymax %&apos;ymax&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%n">50</input><input type="%n"></input><input type="%n"></input></inputs><script><custom-block s="$storage Nettoyer Data"></custom-block><custom-block s="$storage add graph %s"><block var="data0"/></custom-block><custom-block s="réinitialiser le chronomètre (ms)"></custom-block><block s="doForever"><script><block s="doWarp"><script><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input0"/><list></list></block></list></block><block var="data0"/></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="data0"/></block><block var="nbpoints"/></block><script><custom-block s="$storage delete %s %n of %s"><l>row</l><l>1</l><block var="data0"/></custom-block></script></block><custom-block s="$storage new costume width %n height %n color %n %n %n"><l>470</l><l>350</l><l>255</l><l>225</l><l>205</l></custom-block><custom-block s="$storage set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><custom-block s="$storage %s %n of %s"><l>row</l><l>1</l><block var="data0"/></custom-block></block><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block var="ymin"/><block var="ymax"/></custom-block><custom-block s="$storage add scales"></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>x_ex</l><l>10</l><l><bool>true</bool></l><l>255</l><l>0</l><l>0</l></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data0"/></custom-block></script></block></script></block></script></block-definition><block-definition s="$storage Acquisition numérique plus précise mais ASYNCHRONE de %&apos;input0&apos; pendant %&apos;durée&apos; secondes avec ymin %&apos;ymin&apos; et ymax %&apos;ymax&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%n">30</input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doSetVar"><l>data0</l><custom-block s="$storage new table"></custom-block></block><custom-block s="$storage add graph %s"><block var="data0"/></custom-block><custom-block s="$storage set datapoint attributes style %s width %n connected %b color %n %n %n"><l>x_ex</l><l>8</l><l><bool>true</bool></l><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="réinitialiser le chronomètre (ms)"></custom-block><block s="doUntil"><block s="reportGreaterThan"><custom-block s="chronomètre (ms)"></custom-block><block s="reportProduct"><block var="durée"/><l>1000</l></block></block><script><custom-block s="$storage add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="reportQuotient"><custom-block s="chronomètre (ms)"></custom-block><l>1000</l></block><block s="evaluate"><block var="input0"/><list></list></block></list></block><block var="data0"/></custom-block></script></block><custom-block s="$storage new costume width %n height %n color %n %n %n"><l>470</l><l>350</l><l>255</l><l>225</l><l>205</l></custom-block><custom-block s="$storage set ranges to x [ %n %n ] y [ %n %n ]"><l>0</l><block var="durée"/><block var="ymin"/><block var="ymax"/></custom-block><custom-block s="$storage add scales"></custom-block><custom-block s="$storage add dataplot number/number %s"><block var="data0"/></custom-block></script></block-definition></blocks><variables><variable name="asebacode"><l>##! Basic Thymio Motion AESL&#xD;##! David J Sherman - david.sherman@inria.fr&#xD;##! Nathalie Carrie - IREM de la Réunion&#xD;##! Arnaud Verhille - gist974arobasegmailpointcom&#xD;##! This AESL program defines high-level behaviors for the Thymio-II robot that enable&#xD;##! it to cooperate with programs like Snap! using Nodejs and thymioHTTP REST API&#xD;var motorbusy&#xD;var i&#xD;var r&#xD;var g&#xD;var b&#xD;motorbusy = 0&#xD;i = 0&#xD;mic.threshold = 12&#xD;motor.left.target=0&#xD;motor.right.target=0&#xD;call sound.system(3)&#xD;##! MOTOR THYMIO EVENTS&#xD;&#xD;onevent M_motor_both&#xD;    motor.left.target=event.args[0]&#xD;    motor.right.target=event.args[1]&#xD;&#xD;&#xD;onevent M_motor_timed&#xD;    motor.left.target=event.args[0]&#xD;    motor.right.target=event.args[1]&#xD;    timer.period[0] = event.args[2]&#xD;    motorbusy = 1&#xD;&#xD;&#xD;onevent timer0&#xD;    motor.left.target=0&#xD;    motor.right.target=0&#xD;    motorbusy = 0&#xD;    timer.period[0] = 0&#xD;&#xD;##! LED THYMIO EVENTS&#xD;&#xD;onevent V_leds_prox_h&#xD;    call leds.prox.h(event.args[0],event.args[1],event.args[2],event.args[3],event.args[4],event.args[5],event.args[6],event.args[7])&#xD;&#xD;&#xD;onevent V_leds_circle&#xD;    call leds.circle(event.args[0],event.args[1],event.args[2],event.args[3],event.args[4],event.args[5],event.args[6],event.args[7])&#xD;&#xD;&#xD;onevent V_leds_top&#xD;    call leds.top(event.args[0],event.args[1],event.args[2])&#xD;&#xD;&#xD;onevent V_leds_bottom_left&#xD;    call leds.bottom.left(event.args[0],event.args[1],event.args[2])&#xD;&#xD;&#xD;onevent V_leds_bottom_right&#xD;    call leds.bottom.right(event.args[0],event.args[1],event.args[2])&#xD;&#xD;&#xD;onevent V_leds_prox_v&#xD;    call leds.prox.v(event.args[0],event.args[1])&#xD;&#xD;&#xD;onevent V_leds_buttons&#xD;    call leds.buttons(event.args[0],event.args[1],event.args[2],event.args[3])&#xD;&#xD;&#xD;onevent V_leds_rc&#xD;    call leds.rc(event.args[0])&#xD;&#xD;&#xD;onevent V_leds_temperature&#xD;    call leds.temperature(event.args[0],event.args[1])&#xD;&#xD;&#xD;onevent V_leds_sound&#xD;    call leds.sound(event.args[0])&#xD;&#xD;##! SOUND THYMIO EVENTS&#xD;&#xD;onevent A_sound_system&#xD;    call sound.system(event.args[0])&#xD;&#xD;&#xD;onevent A_sound_play&#xD;    call sound.play(event.args[0])&#xD;&#xD;&#xD;onevent A_sound_replay&#xD;    call sound.replay(event.args[0])&#xD;&#xD;&#xD;onevent A_sound_record&#xD;    call sound.record(event.args[0])&#xD;&#xD;&#xD;onevent A_sound_freq&#xD;    call sound.freq(event.args[0],event.args[1])&#xD;&#xD;&#xD;onevent ping&#xD;    call math.rand(r)&#xD;    r = abs r&#xD;    r = r % 20&#xD;    call math.rand(g)&#xD;    g = abs g&#xD;    g = g % 20&#xD;    call math.rand(b)&#xD;    b = abs b&#xD;    b = b % 20&#xD;    call leds.top(r,g,b)&#xD;</l></variable><variable name="data0"><list struct="atomic" id="12660"></list></variable><variable name="data1"><list struct="atomic" id="12661"></list></variable><variable name="chrono (ms)"><l>1500724.7900000003</l></variable><variable name="data2"><list struct="atomic" id="12662"></list></variable><variable name="capteurs"><list struct="atomic" id="12663">2,-20,1,5,0,0,0,0,0,0,0,0,0,0,0,25,22,3265,4729,4585,4589,3652,0,0,336,0</list></variable><variable name="node"><l>http://localhost:3000/nodes/</l></variable></variables></project><media name="snap4thymio-2.6-DataSprite" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>