<snapdata remixID="9406723"><project name="AcquisitionDataSprite" app="Snap4Arduino 5.1.0&#xD;, http://snap4arduino.rocks" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Scène" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" volume="100" pan="0" lines="round" ternary="false" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list id="2"><item><costume name="International_Morse_Code-fr" center-x="240" center-y="180" image="data:image/png;base64,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" id="3"/></item></list></costumes><sounds><list struct="atomic" id="4"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Acqu" idx="1" x="240.4739229451734" y="-26.070678135174802" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="0" color="51,11,0,1" pen="tip" id="9"><costumes><list struct="atomic" id="10"></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables></variables><scripts><script x="12" y="23"><custom-block s="new ( temporary? %b ) DataSprite"><l><bool>false</bool></l></custom-block></script></scripts></sprite><sprite name="DataSprite1" idx="2" x="-170.62342135476445" y="151.1061150740623" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="127.5,76.50000000000001,0,1" pen="tip" id="17"><wear><costume name="" center-x="0" center-y="0" image="data:image/png;base64,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" id="18"/></wear><costumes><list struct="atomic" id="19"></list></costumes><sounds><list struct="atomic" id="20"></list></sounds><blocks></blocks><variables><variable name="myCostume"><ref id="18"></ref></variable><variable name="myProperties"><list id="23"><item><list struct="atomic" id="24">type,empty</list></item><item><list struct="atomic" id="25">width,350</list></item><item><list struct="atomic" id="26">height,300</list></item><item><list struct="atomic" id="27">backColorRed,255</list></item><item><list struct="atomic" id="28">backColorGreen,225</list></item><item><list struct="atomic" id="29">backColorBlue,205</list></item><item><list struct="atomic" id="30">leftOffset,77</list></item><item><list struct="atomic" id="31">upperOffset,30</list></item><item><list struct="atomic" id="32">lowerOffset,37</list></item><item><list struct="atomic" id="33">title,Acquisition</list></item><item><list struct="atomic" id="34">titleHeight,20</list></item><item><list struct="atomic" id="35">xLabel,Temps (s)</list></item><item><list struct="atomic" id="36">xLabelHeight,15</list></item><item><list struct="atomic" id="37">yLabel,Analogique (0-1024)</list></item><item><list struct="atomic" id="38">yLabelHeight,15</list></item><item><list struct="atomic" id="39">xLeft,17</list></item><item><list struct="atomic" id="40">xRight,48.7</list></item><item><list struct="atomic" id="41">yLower,0</list></item><item><list struct="atomic" id="42">yUpper,1024</list></item><item><list struct="atomic" id="43">lineStyle,continuous</list></item><item><list struct="atomic" id="44">lineWidth,1</list></item><item><list struct="atomic" id="45">lineColorRed,0</list></item><item><list struct="atomic" id="46">lineColorGreen,0</list></item><item><list struct="atomic" id="47">lineColorBlue,0</list></item><item><list struct="atomic" id="48">datapointStyle,x_ex</list></item><item><list struct="atomic" id="49">datapointWidth,6</list></item><item><list id="50"><item><l>datapointConnected</l></item><item><bool>true</bool></item></list></item><item><list struct="atomic" id="51">datapointColorRed,0</list></item><item><list struct="atomic" id="52">datapointColorGreen,0</list></item><item><list struct="atomic" id="53">datapointColorBlue,0</list></item><item><list struct="atomic" id="54">scalesPrecision,3</list></item><item><list struct="atomic" id="55">scalesTextheight,12</list></item><item><list struct="atomic" id="56">scalesNumberXintervals,10</list></item><item><list struct="atomic" id="57">minValue,0</list></item><item><list struct="atomic" id="58">maxValue,0</list></item><item><list struct="atomic" id="59">columns,0</list></item><item><list struct="atomic" id="60">rows,0</list></item></list></variable><variable name="myData"><list struct="atomic" id="61"></list></variable></variables><scripts><script x="14" y="30.000000000000057"><custom-block s="Etiquette: Titre %txt abscisses %txt ordonnées %txt"><l>Acquisition</l><l>Temps (s)</l><l>Analogique (0-1024)</l></custom-block><custom-block s="Acquisition graphique de %repRing en %n points en continu"><block s="reifyReporter"><autolambda><custom-block s="Température T(°C) = %repRing"><block s="reifyReporter"><autolambda><block s="reportAnalogReading"><l>0</l></block></autolambda><list></list></block></custom-block></autolambda><list></list></block><l>100</l></custom-block></script><script x="13" y="152"><custom-block s="Etiquette: Titre %txt abscisses %txt ordonnées %txt"><l>Acquisition Triple</l><l>Temps (s)</l><l>Analogique (0-1024)</l></custom-block><custom-block s="Acquisition graphique de 3 entrées %repRing %repRing %repRing %n points en continu"><block s="reifyReporter"><autolambda><block s="reportAnalogReading"><l>0</l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportAnalogReading"><l>1</l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportAnalogReading"><l>2</l></block></autolambda><list></list></block><l>150</l></custom-block></script><script x="365" y="117"><block var="tableau"/></script></scripts></sprite><watcher var="tableau" style="normal" x="132.38318239201521" y="364.05375157805105" color="243,118,29" hidden="true"/><watcher var="tableau3" style="normal" x="13.236889692585805" y="41.03436069439422" color="243,118,29" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="tracer avec des axes auto %&apos;tableau&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>xmin</l><l>xmax</l><l>ymin</l><l>ymax</l><l>x</l><l>y</l></list></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="xmin"/><block var="x"/></block><script><block s="doSetVar"><l>xmin</l><block var="x"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="xmax"/><block var="x"/></block><script><block s="doSetVar"><l>xmax</l><block var="x"/></block></script></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="ymin"/><block var="y"/></block><script><block s="doSetVar"><l>ymin</l><block var="y"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="ymax"/><block var="y"/></block><script><block s="doSetVar"><l>ymax</l><block var="y"/></block></script></block></script><comment w="90" collapsed="false">Calcul du facteur de zoom automatique en x et en y</comment></block><block s="up"></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="gotoXY"><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>480</l><block s="reportDifference"><block var="x"/><block var="xmin"/></block></block><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block></block><l>240</l></block><block s="reportMonadic"><l><option>neg</option></l><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>360</l><block s="reportDifference"><block var="ymax"/><block var="y"/></block></block><block s="reportDifference"><block var="ymax"/><block var="ymin"/></block></block><l>180</l></block></block></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>1</l></block><script><block s="down"></block></script></block></script></block><block s="up"></block></script></block></script></block-definition><block-definition s="tableau de %&apos;fonction&apos; sur un intervalle [ %&apos;a&apos; ; %&apos;b&apos; ] avec un pas de %&apos;pas&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>point</l><l>tableau</l><l>i</l></list></block><block s="doSetVar"><l>tableau</l><block s="reportNewList"><list><l></l></list></block><comment w="207" collapsed="false">Initialisation du type de la variable tableau &#xD;comme une liste, puis on vide cette liste avant de la remplir</comment></block><block s="doDeleteFromList"><l>1</l><block var="tableau"/></block><block s="doSetVar"><l>i</l><block var="a"/></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block var="b"/></block><script><block s="doSetVar"><l>point</l><block s="reportNewList"><list><block var="i"/><block s="evaluate"><block var="fonction"/><list><block var="i"/></list></block></list></block></block><block s="doAddToList"><block var="point"/><block var="tableau"/></block><block s="doChangeVar"><l>i</l><block var="pas"/></block></script></block><block s="doReport"><block var="tableau"/></block></script></block-definition><block-definition s="f(x) = 1/ %&apos;x&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportQuotient"><l>1</l><block var="x"/></block></block><block s="doIfElse"><block s="reportEquals"><block var="a"/><l>Infinity</l></block><script><block s="doReport"><l></l></block></script><script><block s="doReport"><block var="a"/></block></script></block></script></block-definition><block-definition s="tableau de %&apos;fonction&apos; sur un intervalle [ %&apos;a&apos; ; %&apos;b&apos; ]" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>point</l><l>tableau</l><l>pas</l><l>i</l></list></block><block s="doSetVar"><l>pas</l><block s="reportQuotient"><block s="reportDifference"><block var="b"/><block var="a"/></block><l>480</l></block></block><block s="doSetVar"><l>tableau</l><block s="reportNewList"><list><l></l></list></block><comment w="207" collapsed="false">Initialisation du type de la variable tableau &#xD;comme une liste, puis on vide cette liste avant de la remplir</comment></block><block s="doDeleteFromList"><l>1</l><block var="tableau"/></block><block s="doSetVar"><l>i</l><block var="a"/></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block var="b"/></block><script><block s="doSetVar"><l>point</l><block s="reportNewList"><list><block var="i"/><block s="evaluate"><block var="fonction"/><list><block var="i"/></list></block></list></block></block><block s="doAddToList"><block var="point"/><block var="tableau"/></block><block s="doChangeVar"><l>i</l><block var="pas"/></block></script></block><block s="doReport"><block var="tableau"/></block></script></block-definition><block-definition s="tableau acquisition de %&apos;input&apos; durant %&apos;duree&apos; secondes" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>point</l><l>tableau</l><l>temps</l><l>dt</l></list></block><block s="doSetVar"><l>tableau</l><block s="reportNewList"><list><l></l></list></block><comment w="207" collapsed="false">Initialisation du type de la variable tableau &#xD;comme une liste, puis on vide cette liste avant de la remplir</comment></block><block s="doDeleteFromList"><l>1</l><block var="tableau"/></block><block s="doSetVar"><l>temps</l><l>0.0</l></block><block s="doSetVar"><l>dt</l><block s="getTimer"></block></block><block s="doUntil"><block s="reportGreaterThan"><block var="temps"/><block var="duree"/></block><script><block s="doSetVar"><l>temps</l><block s="reportDifference"><block s="getTimer"></block><block var="dt"/></block></block><block s="doSetVar"><l>point</l><block s="reportNewList"><list><block var="temps"/><block s="evaluate"><block var="input"/><list></list></block></list></block></block><block s="doAddToList"><block var="point"/><block var="tableau"/></block></script></block><block s="doReport"><block var="tableau"/></block></script></block-definition><block-definition s="tracer %&apos;tableau&apos; sur [ %&apos;xmin&apos; ; %&apos;xmax&apos; ] en x et [ %&apos;ymin&apos; ; %&apos;ymax&apos; ] en y avec ref %&apos;ref&apos; et amplitude %&apos;amplitude&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l></list></block><block s="clear"></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="gotoXY"><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>480</l><block s="reportDifference"><block var="x"/><block var="xmin"/></block></block><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block></block><l>240</l></block><block s="reportSum"><block s="reportProduct"><block var="amplitude"/><block s="reportMonadic"><l><option>neg</option></l><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>360</l><block s="reportDifference"><block var="ymax"/><block var="y"/></block></block><block s="reportDifference"><block var="ymax"/><block var="ymin"/></block></block><l>180</l></block></block></block><block var="ref"/></block></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>1</l></block><script><block s="down"></block></script></block></script></block><block s="up"></block></script></block-definition><block-definition s="tableau acquisition de %&apos;input&apos; durant %&apos;duree&apos; secondes avec yref %&apos;ref&apos; et amplitude %&apos;amplitude&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>point</l><l>tableau</l><l>x</l><l>xmin</l><l>xmax</l><l>y</l><l>ymin</l><l>ymax</l></list></block><block s="doSetVar"><l>tableau</l><block s="reportNewList"><list><l></l></list></block><comment w="207" collapsed="false">Initialisation du type de la variable tableau &#xD;comme une liste, puis on vide cette liste avant de la remplir</comment></block><block s="doDeleteFromList"><l>1</l><block var="tableau"/></block><block s="doResetTimer"></block><block s="doUntil"><block s="reportGreaterThan"><block s="getTimer"></block><block var="duree"/></block><script><block s="doSetVar"><l>point</l><block s="reportNewList"><list><block s="getTimer"></block><block s="evaluate"><block var="input"/><list></list></block></list></block></block><block s="doAddToList"><block var="point"/><block var="tableau"/></block><block s="doWarp"><script><block s="clear"></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="xmin"/><block var="x"/></block><script><block s="doSetVar"><l>xmin</l><block var="x"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="xmax"/><block var="x"/></block><script><block s="doSetVar"><l>xmax</l><block var="x"/></block></script></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="ymin"/><block var="y"/></block><script><block s="doSetVar"><l>ymin</l><block var="y"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="ymax"/><block var="y"/></block><script><block s="doSetVar"><l>ymax</l><block var="y"/></block></script></block></script><comment w="90" collapsed="false">Calcul du facteur de zoom automatique en x et en y</comment></block><custom-block s="tracer %l sur [ %n ; %n ] en x et [ %n ; %n ] en y avec ref %n et amplitude %n"><block var="tableau"/><block var="xmin"/><block var="xmax"/><block var="ymin"/><block var="ymax"/><block var="ref"/><block var="amplitude"/></custom-block></script></block></script></block><block s="doReport"><block var="tableau"/></block></script></block-definition><block-definition s="tracer les axes x avec xmin %&apos;xmin&apos; et xmax %&apos;xmax&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="gotoXY"><l>-280</l><l>0</l></block><block s="gotoXY"><l>280</l><l>0</l></block></script></block-definition><block-definition s="tableau acquisition de %&apos;input&apos; et %&apos;input2&apos; durant %&apos;duree&apos; secondes" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>point</l><l>tableau</l></list></block><block s="doSetVar"><l>tableau</l><block s="reportNewList"><list><l></l></list></block><comment w="207" collapsed="false">Initialisation du type de la variable tableau &#xD;comme une liste, puis on vide cette liste avant de la remplir</comment></block><block s="doDeleteFromList"><l>1</l><block var="tableau"/></block><block s="doResetTimer"></block><block s="doUntil"><block s="reportGreaterThan"><block s="getTimer"></block><block var="duree"/></block><script><block s="doSetVar"><l>point</l><block s="reportNewList"><list><block s="getTimer"></block><block s="evaluate"><block var="input"/><list></list></block><block s="evaluate"><block var="input2"/><list></list></block></list></block></block><block s="doAddToList"><block var="point"/><block var="tableau"/></block><block s="doWarp"><script><block s="clear"></block><custom-block s="tracer avec des axes auto %l à double entrée avec yref %n et y2ref %n"><block var="tableau"/><l>-50</l><l>-250</l></custom-block></script></block></script></block><block s="doReport"><block var="tableau"/></block></script></block-definition><block-definition s="tracer avec des axes auto %&apos;tableau&apos; à double entrée avec yref %&apos;yref&apos; et y2ref %&apos;y2ref&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>xmin</l><l>xmax</l><l>ymin</l><l>ymax</l><l>x</l><l>y</l><l>y2</l><l>y2min</l><l>y2max</l></list></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="xmin"/><block var="x"/></block><script><block s="doSetVar"><l>xmin</l><block var="x"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="xmax"/><block var="x"/></block><script><block s="doSetVar"><l>xmax</l><block var="x"/></block></script></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="ymin"/><block var="y"/></block><script><block s="doSetVar"><l>ymin</l><block var="y"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="ymax"/><block var="y"/></block><script><block s="doSetVar"><l>ymax</l><block var="y"/></block></script></block><block s="doSetVar"><l>y2</l><block s="reportListItem"><l>3</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doIf"><block s="reportGreaterThan"><block var="y2min"/><block var="y2"/></block><script><block s="doSetVar"><l>y2min</l><block var="y2"/></block></script></block><block s="doIf"><block s="reportLessThan"><block var="y2max"/><block var="y2"/></block><script><block s="doSetVar"><l>y2max</l><block var="y2"/></block></script></block></script></block><block s="up"></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="gotoXY"><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>480</l><block s="reportDifference"><block var="x"/><block var="xmin"/></block></block><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block></block><l>240</l></block><block s="reportSum"><block s="reportMonadic"><l><option>neg</option></l><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>360</l><block s="reportDifference"><block var="ymax"/><block var="y"/></block></block><block s="reportDifference"><block var="ymax"/><block var="ymin"/></block></block><l>180</l></block></block><block var="yref"/></block></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>1</l></block><script><block s="down"></block></script></block></script></block><block s="up"></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tableau"/></block><script><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="doSetVar"><l>y2</l><block s="reportListItem"><l>3</l><block s="reportListItem"><block var="i"/><block var="tableau"/></block></block></block><block s="gotoXY"><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>480</l><block s="reportDifference"><block var="x"/><block var="xmin"/></block></block><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block></block><l>240</l></block><block s="reportSum"><block s="reportMonadic"><l><option>neg</option></l><block s="reportDifference"><block s="reportQuotient"><block s="reportProduct"><l>360</l><block s="reportDifference"><block var="y2max"/><block var="y2"/></block></block><block s="reportDifference"><block var="y2max"/><block var="y2min"/></block></block><l>180</l></block></block><block var="y2ref"/></block></block><block s="doIf"><block s="reportEquals"><block var="i"/><l>1</l></block><script><block s="down"></block></script></block></script></block><block s="up"></block></script></block></script><scripts><comment x="489.0000009999999" y="86.00000000000001" w="90" collapsed="false">Calcul du facteur de zoom automatique en x et en y</comment></scripts></block-definition><block-definition s="Faire clignoter led %&apos;pin&apos; avec une période de %&apos;t&apos; (s)" type="command" category="arduino"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doForever"><script><block s="digitalWrite"><block var="pin"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doWait"><block s="reportQuotient"><block var="t"/><l>2</l></block></block><block s="digitalWrite"><block var="pin"/><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doWait"><block s="reportQuotient"><block var="t"/><l>2</l></block></block></script></block></script></block-definition><block-definition s="new ( temporary? %&apos;temporary&apos; ) DataSprite" type="reporter" category="control"><comment x="0" y="0" 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="new table"></custom-block></block><custom-block s="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="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="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="set properties"></custom-block></script></block><custom-block s="set property %s to %s"><l>width</l><block var="w"/></custom-block><custom-block s="set property %s to %s"><l>height</l><block var="h"/></custom-block><custom-block s="set property %s to %s"><l>backColorRed</l><block var="r"/></custom-block><custom-block s="set property %s to %s"><l>backColorGreen</l><block var="g"/></custom-block><custom-block s="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="Etiquette: Titre %&apos;newTitle&apos; abscisses %&apos;newXLabel&apos; ordonnées %&apos;newYLabel&apos;" type="command" category="looks"><comment x="0" y="0" 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="set property %s to %s"><l>title</l><block var="newTitle"/></custom-block><custom-block s="set property %s to %s"><l>xLabel</l><block var="newXLabel"/></custom-block><custom-block s="set property %s to %s"><l>yLabel</l><block var="newYLabel"/></custom-block><custom-block s="set offsets"></custom-block></script></block></script></block-definition><block-definition s="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="set offsets"></custom-block></script></block></script></block></script></block-definition><block-definition s="property %&apos;name&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="property %s"><l>title</l></custom-block></block><l>0</l></block><script><custom-block s="set property %s to %s"><l>upperOffset</l><l>0</l></custom-block></script><script><custom-block s="set property %s to %s"><l>upperOffset</l><block s="reportSum"><custom-block s="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="property %s"><l>xLabel</l></custom-block></block><l>0</l></block><script><custom-block s="set property %s to %s"><l>lowerOffset</l><l>20</l></custom-block></script><script><custom-block s="set property %s to %s"><l>lowerOffset</l><block s="reportSum"><custom-block s="property %s"><l>xLabelHeight</l></custom-block><block s="reportSum"><custom-block s="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="property %s"><l>yLabel</l></custom-block></block><l>0</l></block><script><custom-block s="set property %s to %s"><l>leftOffset</l><l>60</l></custom-block></script><script><custom-block s="set property %s to %s"><l>leftOffset</l><block s="reportSum"><custom-block s="property %s"><l>yLabelHeight</l></custom-block><block s="reportSum"><custom-block s="property %s"><l>scalesTextheight</l></custom-block><l>50</l></block></block></custom-block></script></block></script></block></script></block-definition><block-definition s="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="set property %s to %s"><l>xLeft</l><block var="xl"/></custom-block><custom-block s="set property %s to %s"><l>xRight</l><block var="xr"/></custom-block><custom-block s="set property %s to %s"><l>yLower</l><block var="yl"/></custom-block><custom-block s="set property %s to %s"><l>yUpper</l><block var="yu"/></custom-block><custom-block s="set offsets"></custom-block></script></block></script></block-definition><block-definition s="attributes %&apos;costumeProperty&apos;" type="reporter" category="looks"><comment x="0" y="0" 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="property %s"><l>xLeft</l></custom-block><custom-block s="property %s"><l>xRight</l></custom-block><custom-block s="property %s"><l>yLower</l></custom-block><custom-block s="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="property %s"><l>title</l></custom-block><custom-block s="property %s"><l>xLabel</l></custom-block><custom-block s="property %s"><l>yLabel</l></custom-block><custom-block s="property %s"><l>titleHeight</l></custom-block><custom-block s="property %s"><l>xLabelHeight</l></custom-block><custom-block s="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="property %s"><l>backColorRed</l></custom-block><custom-block s="property %s"><l>backColorGreen</l></custom-block><custom-block s="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="property %s"><l>leftOffset</l></custom-block><custom-block s="property %s"><l>upperOffset</l></custom-block><custom-block s="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="property %s"><l>lineStyle</l></custom-block><custom-block s="property %s"><l>lineWidth</l></custom-block><custom-block s="property %s"><l>lineColorRed</l></custom-block><custom-block s="property %s"><l>lineColorGreen</l></custom-block><custom-block s="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="property %s"><l>datapointStyle</l></custom-block><custom-block s="property %s"><l>datapointWidth</l></custom-block><custom-block s="property %s"><l>datapointConnected</l></custom-block><custom-block s="property %s"><l>datapointColorRed</l></custom-block><custom-block s="property %s"><l>datapointColorGreen</l></custom-block><custom-block s="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="property %s"><l>scalesPrecision</l></custom-block><custom-block s="property %s"><l>scalesTextheight</l></custom-block><custom-block s="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="property %s"><l>columns</l></custom-block><custom-block s="property %s"><l>rows</l></custom-block><custom-block s="property %s"><l>minValue</l></custom-block><custom-block s="property %s"><l>maxValue</l></custom-block></list></block></block></script></block></script></block></script></block-definition><block-definition s="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="attributes %txt"><l>scale-attributes</l></custom-block><custom-block s="attributes %txt"><l>labels</l></custom-block><custom-block s="attributes %txt"><l>offsets</l></custom-block><custom-block s="attributes %txt"><l>ranges</l></custom-block><custom-block s="attributes %txt"><l>back-color</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="%&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 x="0" y="0" 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="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="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="attributes %txt"><l>ranges</l></custom-block><custom-block s="attributes %txt"><l>offsets</l></custom-block><custom-block s="attributes %txt"><l>labels</l></custom-block><custom-block s="attributes %txt"><l>line-attributes</l></custom-block><custom-block s="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="regression line parameters of %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="is %s a %s ?"><block var="data"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListLength"><block var="data"/></block><l>0</l></block><block s="reportEquals"><block s="reportListLength"><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="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 x="0" y="0" 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="property %s"><l>type of data</l></custom-block><l>FITS</l></block><script><custom-block s="new costume width %n height %n color %n %n %n"><custom-block s="property %s"><l>width</l></custom-block><custom-block s="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="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="property %s"><l>type of data</l></custom-block><l>RGB</l></block><script><custom-block s="new costume width %n height %n color %n %n %n"><custom-block s="property %s"><l>width</l></custom-block><custom-block s="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="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="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 x="0" y="0" 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="image value of myData at %&apos;x&apos; %&apos;y&apos;" type="reporter" category="sensing"><comment x="0" y="0" 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="property %s"><l>width</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="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="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="draw line from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" 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="property %s"><l>lineWidth</l></custom-block><custom-block s="property %s"><l>lineColorRed</l></custom-block><custom-block s="property %s"><l>lineColorGreen</l></custom-block><custom-block s="property %s"><l>datapointColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="%&apos;selection&apos; column %&apos;x&apos; and %&apos;y&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="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 x="0" y="0" 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="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="add histogram of %&apos;data&apos; with %&apos;n&apos; groups" type="command" category="looks"><comment x="0" y="0" 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="property %s"><l>type of data</l></custom-block><l>table</l></block><block s="reportEquals"><custom-block s="property %s"><l>type of data</l></custom-block><l>FITS</l></block></block><block s="reportEquals"><custom-block s="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="is %s a %s ?"><block var="source"/><l>vector</l></custom-block><script><block s="doSetVar"><l>histogramdata</l><custom-block s="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="%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="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="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="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="attributes %txt"><l>ranges</l></custom-block><custom-block s="attributes %txt"><l>offsets</l></custom-block><custom-block s="attributes %txt"><l>line-attributes</l></custom-block><block var="histogramdata"/></list></block><custom-block s="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="histogram data from %&apos;data&apos; with %&apos;n&apos; groups" type="reporter" category="lists"><comment x="0" y="0" 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="is %s a %s ?"><block var="data"/><l>vector</l></custom-block><script><block s="doSetVar"><l>min</l><custom-block s="%txt of %l"><l>min</l><block var="data"/></custom-block></block><block s="doSetVar"><l>max</l><custom-block s="%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="copy of table %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="is %s a %s ?"><block var="table"/><l>vector</l></custom-block><custom-block s="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="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="RGB of costume at %&apos;x&apos; %&apos;y&apos;" type="reporter" category="sensing"><comment x="0" y="0" 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="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 x="0" y="0" 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="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="attributes %txt"><l>ranges</l></custom-block><custom-block s="attributes %txt"><l>offsets</l></custom-block><custom-block s="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="%&apos;data&apos; by mouse" type="reporter" category="sensing"><comment x="0" y="0" 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="property %s"><l>width</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="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="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="property %s"><l>width</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><block s="reportDifference"><custom-block s="property %s"><l>height</l></custom-block><custom-block s="property %s"><l>lowerOffset</l></custom-block></block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><custom-block s="property %s"><l>leftOffset</l></custom-block></block><block s="reportLessThan"><block var="y"/><custom-block s="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="%n to %txt"><block var="x"/><l>x</l></custom-block><custom-block s="%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="%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="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="property %s"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="property %s"><l>height</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="copy of costume %obj"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><custom-block s="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="%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="%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="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="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="property %s"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="property %s"><l>height</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="copy of costume %obj"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><custom-block s="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="%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="%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="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="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="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="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="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="%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="property %s"><l>width</l></custom-block><custom-block s="property %s"><l>height</l></custom-block></list></block></block></script></block></script></block></script></block-definition><block-definition s="%&apos;pos&apos; to %&apos;coordinate&apos;" type="reporter" category="sensing"><comment x="0" y="0" 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="property %s"><l>width</l></custom-block><custom-block s="property %s"><l>leftOffset</l></custom-block></block></block><block s="doSetVar"><l>x0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="property %s"><l>xLeft</l></custom-block><block var="diagramWidth"/></block><block s="reportDifference"><custom-block s="property %s"><l>xLeft</l></custom-block><custom-block s="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="property %s"><l>xRight</l></custom-block><custom-block s="property %s"><l>xLeft</l></custom-block></block></block></block><custom-block s="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="property %s"><l>height</l></custom-block><custom-block s="property %s"><l>upperOffset</l></custom-block></block><custom-block s="property %s"><l>lowerOffset</l></custom-block></block></block><block s="doSetVar"><l>y0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="property %s"><l>yUpper</l></custom-block><block var="diagramHeight"/></block><block s="reportDifference"><custom-block s="property %s"><l>yUpper</l></custom-block><custom-block s="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="property %s"><l>yUpper</l></custom-block><custom-block s="property %s"><l>yLower</l></custom-block></block></block></block><custom-block s="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="property %s"><l>width</l></custom-block><custom-block s="property %s"><l>leftOffset</l></custom-block></block></block><block s="doSetVar"><l>x0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="property %s"><l>xLeft</l></custom-block><block var="diagramWidth"/></block><block s="reportDifference"><custom-block s="property %s"><l>xLeft</l></custom-block><custom-block s="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="property %s"><l>leftOffset</l></custom-block></block><block var="x0"/></block><block s="reportDifference"><custom-block s="property %s"><l>xRight</l></custom-block><custom-block s="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="property %s"><l>height</l></custom-block><custom-block s="property %s"><l>upperOffset</l></custom-block></block><custom-block s="property %s"><l>lowerOffset</l></custom-block></block></block><block s="doSetVar"><l>y0</l><block s="reportQuotient"><block s="reportProduct"><custom-block s="property %s"><l>yUpper</l></custom-block><block var="diagramHeight"/></block><block s="reportDifference"><custom-block s="property %s"><l>yUpper</l></custom-block><custom-block s="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="property %s"><l>upperOffset</l></custom-block></block></block><block s="reportDifference"><custom-block s="property %s"><l>yUpper</l></custom-block><custom-block s="property %s"><l>yLower</l></custom-block></block></block><block var="diagramHeight"/></block></block></script></block></script></block></script></block-definition><block-definition s="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="%&apos;selection&apos; of %&apos;column&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="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="reportListLength"><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="reportListLength"><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="reportListLength"><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="reportListLength"><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="sort %&apos;table&apos; by column %&apos;n&apos; ascending %&apos;ascending&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="select rows of %&apos;table&apos; where column %&apos;n&apos; is %&apos;op&apos; %&apos;value&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="%&apos;selection&apos; of column %&apos;k&apos; of %&apos;table&apos; grouped by column %&apos;n&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="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="apply convolution kernel %&apos;kernel&apos; to %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="is %s a %s ?"><block var="kernel"/><l>matrix</l></custom-block></block><script><block s="doSetVar"><l>h</l><block s="reportListLength"><block var="kernel"/></block></block><block s="doSetVar"><l>w</l><block s="reportListLength"><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="property %s"><l>width</l></custom-block><custom-block s="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="compress data %&apos;data&apos; with factor %&apos;n&apos; by averaging" type="reporter" category="lists"><comment x="0" y="0" 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="reportListLength"><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="write string %&apos;theString&apos; to file %&apos;filename&apos;" type="command" category="operators"><comment x="0" y="0" 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="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="read file with filepicker" type="reporter" category="lists"><comment x="0" y="0" 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="normalize %&apos;data&apos; by %&apos;choice&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="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="%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="%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="%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="%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="%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="set properties" type="command" category="variables"><comment x="0" y="0" 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="new table"></custom-block></block><custom-block s="set property %s to %s"><l>type of data</l><l>empty</l></custom-block><custom-block s="set property %s to %s"><l>width</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>height</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>backColorRed</l><l>255</l></custom-block><custom-block s="set property %s to %s"><l>backColorGreen</l><l>225</l></custom-block><custom-block s="set property %s to %s"><l>backColorBlue</l><l>205</l></custom-block><custom-block s="set property %s to %s"><l>leftOffset</l><l>60</l></custom-block><custom-block s="set property %s to %s"><l>upperOffset</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>lowerOffset</l><l>20</l></custom-block><custom-block s="set property %s to %s"><l>title</l><l></l></custom-block><custom-block s="set property %s to %s"><l>titleHeight</l><l>20</l></custom-block><custom-block s="set property %s to %s"><l>xLabel</l><l></l></custom-block><custom-block s="set property %s to %s"><l>xLabelHeight</l><l>15</l></custom-block><custom-block s="set property %s to %s"><l>yLabel</l><l></l></custom-block><custom-block s="set property %s to %s"><l>yLabelHeight</l><l>15</l></custom-block><custom-block s="set property %s to %s"><l>xLeft</l><l>-10</l></custom-block><custom-block s="set property %s to %s"><l>xRight</l><l>10</l></custom-block><custom-block s="set property %s to %s"><l>yLower</l><l>-10</l></custom-block><custom-block s="set property %s to %s"><l>yUpper</l><l>10</l></custom-block><custom-block s="set property %s to %s"><l>lineStyle</l><l>continuous</l></custom-block><custom-block s="set property %s to %s"><l>lineWidth</l><l>1</l></custom-block><custom-block s="set property %s to %s"><l>lineColorRed</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>lineColorGreen</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>lineColorBlue</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>datapointStyle</l><l>square</l></custom-block><custom-block s="set property %s to %s"><l>datapointWidth</l><l>5</l></custom-block><custom-block s="set property %s to %s"><l>datapointConnected</l><block s="reportBoolean"><l><bool>false</bool></l></block></custom-block><custom-block s="set property %s to %s"><l>datapointColorRed</l><l>255</l></custom-block><custom-block s="set property %s to %s"><l>datapointColorGreen</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>datapointColorBlue</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>scalesPrecision</l><l>3</l></custom-block><custom-block s="set property %s to %s"><l>scalesTextheight</l><l>12</l></custom-block><custom-block s="set property %s to %s"><l>scalesNumberXintervals</l><l>10</l></custom-block><custom-block s="set property %s to %s"><l>minValue</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>maxValue</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>columns</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>rows</l><l>0</l></custom-block></script></block></script></block-definition><block-definition s="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="draw rectangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" 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="property %s"><l>lineWidth</l></custom-block><custom-block s="property %s"><l>lineColorRed</l></custom-block><custom-block s="property %s"><l>lineColorGreen</l></custom-block><custom-block s="property %s"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="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 x="0" y="0" 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="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="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="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="set image value of myData at %&apos;x&apos; %&apos;y&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" 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="property %s"><l>width</l></custom-block><l>1</l></block></block><block s="reportLessThan"><block var="y"/><block s="reportSum"><custom-block s="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="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="matrix/vec %&apos;a&apos; %&apos;op&apos; matrix/vec %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" 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="%s %s vec %l"><block var="a"/><l>*</l><block var="b"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="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="%s %s vec %l"><block var="a"/><l>*</l><block var="b"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="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="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="%s %s vec %l"><block var="b"/><block var="op"/><block var="a"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="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="%s %s vec %l"><block var="b"/><block var="op"/><block var="a"/></custom-block></block></script><script><block s="doIfElse"><custom-block s="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="reportListLength"><block var="a"/></block><block s="reportListLength"><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="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="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="reportListLength"><block s="reportListItem"><l>1</l><block var="a"/></block></block><block s="reportListLength"><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="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="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="transpose %&apos;data&apos;" type="reporter" category="operators"><comment x="0" y="0" 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="reportListLength"><block var="data"/></block><l>0</l></block><script><block s="doReport"><block var="data"/></block></script><script><block s="doIfElse"><custom-block s="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="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="346.0684961506851" y="595.8447518584475"><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="new %&apos;n&apos; -dim vector" type="reporter" category="operators"><comment x="0" y="0" 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="%&apos;a&apos; %&apos;op&apos; vec %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" 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="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="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="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="%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="is %s a %s ?"><block var="b"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="a"/></block><block s="reportListLength"><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="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="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="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="reportListLength"><block var="a"/></block><l>3</l></block><block s="reportEquals"><block s="reportListLength"><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="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="is %&apos;data&apos; a %&apos;choice&apos; ?" type="predicate" category="operators"><comment x="0" y="0" 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="new %&apos;n&apos; x %&apos;m&apos; -matrix" type="reporter" category="operators"><comment x="0" y="0" 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="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="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="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="reportListLength"><block var="target"/></block><l>0</l></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block s="reportListLength"><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="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="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="%&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="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="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="set properties"></custom-block><block s="doSetVar"><l>myData</l><block s="reportListItem"><l>6</l><block var="imagedata"/></block></block><custom-block s="set property %s to %s"><l>type of data</l><l>FITS</l></custom-block><custom-block s="set property %s to %s"><l>width</l><block s="reportListItem"><l>1</l><block var="imagedata"/></block></custom-block><custom-block s="set property %s to %s"><l>height</l><block s="reportListItem"><l>2</l><block var="imagedata"/></block></custom-block><custom-block s="set property %s to %s"><l>minValue</l><block s="reportListItem"><l>3</l><block var="imagedata"/></block></custom-block><custom-block s="set property %s to %s"><l>maxValue</l><block s="reportListItem"><l>4</l><block var="imagedata"/></block></custom-block><custom-block s="set property %s to %s"><l>columns</l><l>1</l></custom-block><custom-block s="set property %s to %s"><l>rows</l><block s="reportListLength"><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="reportListLength"><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="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="is %s a %s ?"><block var="source"/><l>table</l></custom-block><script><block s="doSetVar"><l>w</l><custom-block s="property %s"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="property %s"><l>height</l></custom-block></block><custom-block s="set properties"></custom-block><custom-block s="set property %s to %s"><l>width</l><block var="w"/></custom-block><custom-block s="set property %s to %s"><l>height</l><block var="h"/></custom-block><block s="doSetVar"><l>myData</l><custom-block s="copy of table %l"><block var="source"/></custom-block></block><custom-block s="set property %s to %s"><l>type of data</l><l>table</l></custom-block><custom-block s="set property %s to %s"><l>minValue</l><l>not set</l></custom-block><custom-block s="set property %s to %s"><l>maxValue</l><l>not set</l></custom-block><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="source"/></block><l>0</l></block><script><custom-block s="set property %s to %s"><l>columns</l><l>0</l></custom-block><custom-block s="set property %s to %s"><l>rows</l><l>0</l></custom-block></script><script><custom-block s="set property %s to %s"><l>columns</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block><custom-block s="set property %s to %s"><l>rows</l><block s="reportListLength"><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="set properties"></custom-block><custom-block s="set property %s to %s"><l>type of data</l><l>RGB</l></custom-block><custom-block s="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="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="set property %s to %s"><l>rows</l><block s="reportListLength"><block var="myData"/></block></custom-block><custom-block s="set property %s to %s"><l>columns</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block><block s="doSetVar"><l>min</l><custom-block s="%txt of %l"><l>min</l><custom-block s="%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="%txt of %l"><l>max</l><custom-block s="%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="reportListLength"><block s="reportListItem"><l>1</l><block var="myData"/></block></block><script><block s="doSetVar"><l>h</l><custom-block s="%txt of %l"><l>min</l><custom-block s="%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="%txt of %l"><l>max</l><custom-block s="%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="set property %s to %s"><l>minValue</l><block var="min"/></custom-block><custom-block s="set property %s to %s"><l>maxValue</l><block var="max"/></custom-block></script></block></script></block></script></block-definition><block-definition s="set scale attributes precision %&apos;precision&apos; textheight %&apos;textheight&apos; number of intervalls x-axis %&apos;n&apos;" type="command" category="looks"><comment x="0" y="0" 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="set property %s to %s"><l>scalesPrecision</l><block var="precision"/></custom-block><custom-block s="set property %s to %s"><l>scalesTextheight</l><block var="textheight"/></custom-block><custom-block s="set property %s to %s"><l>scalesNumberXintervals</l><block var="n"/></custom-block></script></block></script></block-definition><block-definition s="solve %&apos;A&apos; * x = %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" 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="is %s a %s ?"><block var="A"/><l>matrix</l></custom-block><custom-block s="is %s a %s ?"><block var="b"/><l>vector</l></custom-block></block><script><block s="doSetVar"><l>toSolve</l><custom-block s="copy of table %l"><block var="A"/></custom-block></block><custom-block s="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="polynom interpolated for %&apos;table&apos;" type="reporter" category="operators"><comment x="0" y="0" 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="is %s a %s ?"><block var="table"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><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="%s %n of %s"><l>column</l><l>1</l><block var="table"/></custom-block><custom-block s="%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="polynom %&apos;p&apos; ( %&apos;x&apos; )" type="reporter" category="operators"><comment x="0" y="0" 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="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="draw circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment x="0" y="0" 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="property %s"><l>lineWidth</l></custom-block><custom-block s="property %s"><l>lineColorRed</l></custom-block><custom-block s="property %s"><l>lineColorGreen</l></custom-block><custom-block s="property %s"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="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="property %s"><l>lineWidth</l></custom-block><custom-block s="property %s"><l>datapointColorRed</l></custom-block><custom-block s="property %s"><l>datapointColorGreen</l></custom-block><custom-block s="property %s"><l>datapointColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block></script></block-definition><block-definition s="fill circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment x="0" y="0" 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="property %s"><l>lineWidth</l></custom-block><custom-block s="property %s"><l>datapointColorRed</l></custom-block><custom-block s="property %s"><l>datapointColorGreen</l></custom-block><custom-block s="property %s"><l>datapointColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="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 x="0" y="0" 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="set property %s to %s"><l>lineStyle</l><block var="style"/></custom-block><custom-block s="set property %s to %s"><l>lineWidth</l><block var="width"/></custom-block><custom-block s="set property %s to %s"><l>lineColorRed</l><block var="r"/></custom-block><custom-block s="set property %s to %s"><l>lineColorGreen</l><block var="g"/></custom-block><custom-block s="set property %s to %s"><l>lineColorBlue</l><block var="b"/></custom-block></script></block-definition><block-definition s="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="set property %s to %s"><l>datapointStyle</l><block var="style"/></custom-block><custom-block s="set property %s to %s"><l>datapointWidth</l><block var="width"/></custom-block><custom-block s="set property %s to %s"><l>datapointConnected</l><block var="connected"/></custom-block><custom-block s="set property %s to %s"><l>datapointColorRed</l><block var="r"/></custom-block><custom-block s="set property %s to %s"><l>datapointColorGreen</l><block var="g"/></custom-block><custom-block s="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="%&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="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.32422375000004" y="78.4444514444444"><block s="reportProduct"><l>.2</l><block s="reportProduct"><block var="x"/><block var="x"/></block></block></script></scripts></block-definition><block-definition s="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="property %s"><l>width</l></custom-block><custom-block s="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="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="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="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="attributes %txt"><l>ranges</l></custom-block><custom-block s="attributes %txt"><l>offsets</l></custom-block><custom-block s="attributes %txt"><l>labels</l></custom-block><custom-block s="attributes %txt"><l>line-attributes</l></custom-block><custom-block s="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="%&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="property %s"><l>width</l></custom-block><custom-block s="property %s"><l>leftOffset</l></custom-block></block><block s="reportListLength"><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="reportListLength"><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="%&apos;k&apos; next neighbors of %&apos;point&apos; in %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" 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="is %s a %s ?"><block var="points"/><l>table</l></custom-block><script><block s="doSetVar"><l>neighbors</l><custom-block s="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="reportListLength"><block var="result"/></block><block var="k"/></block><block s="reportEquals"><block s="reportListLength"><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="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 x="0" y="0" 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="property %s"><l>lineColorRed</l></custom-block><custom-block s="property %s"><l>lineColorGreen</l></custom-block><custom-block s="property %s"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block var="myCostume"/></block></script></block-definition><block-definition s="set ranges by list %&apos;ranges&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, 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="reportListLength"><block var="ranges"/></block><l>4</l></block><script><custom-block s="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="Acquisition graphique de %&apos;input&apos; en %&apos;nbpoints&apos; points en continu" type="command" category="arduino"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%n">150</input></inputs><script><block s="doSetVar"><l>tableau</l><custom-block s="new table"></custom-block></block><custom-block s="set datapoint attributes style %s width %n connected %b color %n %n %n"><l>x_ex</l><l>6</l><l><bool>true</bool></l><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="add graph %s"><block var="tableau"/></custom-block><block s="doResetTimer"></block><block s="doForever"><script><block s="doWarp"><script><custom-block s="add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="getTimer"></block><block s="evaluate"><block var="input"/><list></list></block></list></block><block var="tableau"/></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListLength"><block var="tableau"/></block><block var="nbpoints"/></block><script><custom-block s="delete %s %n of %s"><l>row</l><l>1</l><block var="tableau"/></custom-block></script></block><custom-block s="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><custom-block s="add dataplot number/number %s"><block var="tableau"/></custom-block><custom-block s="set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><custom-block s="%s %n of %s"><l>row</l><l>1</l><block var="tableau"/></custom-block></block><block s="getTimer"></block><l>0</l><l>1024</l></custom-block><custom-block s="add scales"></custom-block></script></block><block s="doWait"><l>0.1</l></block></script></block></script></block-definition><block-definition s="Acquisition graphique de 3 entrées %&apos;input&apos; %&apos;input2&apos; %&apos;input3&apos; %&apos;nbpoints&apos; points en continu" type="command" category="arduino"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%repRing"></input><input type="%repRing"></input><input type="%n">150</input></inputs><script><custom-block s="set datapoint attributes style %s width %n connected %b color %n %n %n"><l>x_ex</l><l>6</l><l><bool>true</bool></l><l>0</l><l>0</l><l>0</l></custom-block><block s="doSetVar"><l>tableau</l><custom-block s="new table"></custom-block></block><block s="doSetVar"><l>tableau2</l><custom-block s="new table"></custom-block></block><block s="doSetVar"><l>tableau3</l><custom-block s="new table"></custom-block></block><custom-block s="add graph %s"><block var="tableau"/></custom-block><custom-block s="add graph %s"><block var="tableau2"/></custom-block><custom-block s="add graph %s"><block var="tableau3"/></custom-block><block s="doResetTimer"></block><block s="doForever"><script><block s="doWarp"><script><custom-block s="add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="getTimer"></block><block s="evaluate"><block var="input"/><list></list></block></list></block><block var="tableau"/></custom-block><custom-block s="add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="getTimer"></block><block s="evaluate"><block var="input2"/><list></list></block></list></block><block var="tableau2"/></custom-block><custom-block s="add %s %s to %s"><l>row</l><block s="reportNewList"><list><block s="getTimer"></block><block s="evaluate"><block var="input3"/><list></list></block></list></block><block var="tableau3"/></custom-block><block s="doIf"><block s="reportGreaterThan"><block s="reportListLength"><block var="tableau"/></block><block var="nbpoints"/></block><script><custom-block s="delete %s %n of %s"><l>row</l><l>1</l><block var="tableau"/></custom-block><custom-block s="delete %s %n of %s"><l>row</l><l>1</l><block var="tableau2"/></custom-block><custom-block s="delete %s %n of %s"><l>row</l><l>1</l><block var="tableau3"/></custom-block></script></block><custom-block s="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><custom-block s="add dataplot number/number %s"><block var="tableau"/></custom-block><custom-block s="add dataplot number/number %s"><block var="tableau2"/></custom-block><custom-block s="add dataplot number/number %s"><block var="tableau3"/></custom-block><custom-block s="set ranges to x [ %n %n ] y [ %n %n ]"><block s="reportListItem"><l>1</l><custom-block s="%s %n of %s"><l>row</l><l>1</l><block var="tableau"/></custom-block></block><block s="getTimer"></block><l>0</l><l>1024</l></custom-block><custom-block s="add scales"></custom-block></script></block><block s="doWait"><l>0.1</l></block></script></block></script></block-definition><block-definition s="Température T(°C) = %&apos;input&apos;" type="reporter" category="arduino"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doReport"><block s="reportDifference"><custom-block s="f(x) = 1/ %n"><block s="reportSum"><block s="reportQuotient"><block s="reportMonadic"><l><option>log</option></l><block s="reportQuotient"><block s="reportProduct"><block s="reportDifference"><l>1023</l><block var="input"/></block><l>10000</l></block><block s="reportQuotient"><block var="input"/><l>10000</l></block></block></block><l>3975</l></block><block s="reportQuotient"><l>1</l><l>298.15</l></block></block></custom-block><l>273.15</l></block></block></script><scripts><script x="672.0000009999999" y="43.200002"><block s="reportProduct"><l></l><l>10000</l></block></script></scripts></block-definition></blocks><variables><variable name="tableau"><list id="8770"><item><list struct="atomic" id="8771">17,428</list></item><item><list struct="atomic" id="8772">17.3,428</list></item><item><list struct="atomic" id="8773">17.5,428</list></item><item><list struct="atomic" id="8774">17.9,427</list></item><item><list struct="atomic" id="8775">18.2,429</list></item><item><list struct="atomic" id="8776">18.5,428</list></item><item><list struct="atomic" id="8777">18.7,428</list></item><item><list struct="atomic" id="8778">19,428</list></item><item><list struct="atomic" id="8779">19.3,428</list></item><item><list struct="atomic" id="8780">19.6,427</list></item><item><list struct="atomic" id="8781">19.9,427</list></item><item><list struct="atomic" id="8782">20.2,427</list></item><item><list struct="atomic" id="8783">20.4,427</list></item><item><list struct="atomic" id="8784">20.7,426</list></item><item><list struct="atomic" id="8785">21,426</list></item><item><list struct="atomic" id="8786">21.3,427</list></item><item><list struct="atomic" id="8787">21.6,425</list></item><item><list struct="atomic" id="8788">21.8,426</list></item><item><list struct="atomic" id="8789">22.1,426</list></item><item><list struct="atomic" id="8790">22.3,426</list></item><item><list struct="atomic" id="8791">22.6,426</list></item><item><list struct="atomic" id="8792">22.9,426</list></item><item><list struct="atomic" id="8793">23.1,426</list></item><item><list struct="atomic" id="8794">23.4,426</list></item><item><list struct="atomic" id="8795">23.7,424</list></item><item><list struct="atomic" id="8796">23.9,425</list></item><item><list struct="atomic" id="8797">24.2,425</list></item><item><list struct="atomic" id="8798">24.5,425</list></item><item><list struct="atomic" id="8799">24.7,425</list></item><item><list struct="atomic" id="8800">25.2,425</list></item><item><list struct="atomic" id="8801">25.5,424</list></item><item><list struct="atomic" id="8802">25.7,424</list></item><item><list struct="atomic" id="8803">26,424</list></item><item><list struct="atomic" id="8804">26.2,424</list></item><item><list struct="atomic" id="8805">26.5,424</list></item><item><list struct="atomic" id="8806">26.7,424</list></item><item><list struct="atomic" id="8807">27,424</list></item><item><list struct="atomic" id="8808">27.2,424</list></item><item><list struct="atomic" id="8809">27.4,424</list></item><item><list struct="atomic" id="8810">27.6,424</list></item><item><list struct="atomic" id="8811">27.9,424</list></item><item><list struct="atomic" id="8812">28.1,424</list></item><item><list struct="atomic" id="8813">28.6,424</list></item><item><list struct="atomic" id="8814">29.3,423</list></item><item><list struct="atomic" id="8815">30.1,423</list></item><item><list struct="atomic" id="8816">30.6,423</list></item><item><list struct="atomic" id="8817">30.9,422</list></item><item><list struct="atomic" id="8818">31.2,422</list></item><item><list struct="atomic" id="8819">31.5,423</list></item><item><list struct="atomic" id="8820">32.2,422</list></item><item><list struct="atomic" id="8821">32.5,422</list></item><item><list struct="atomic" id="8822">33.1,421</list></item><item><list struct="atomic" id="8823">33.4,422</list></item><item><list struct="atomic" id="8824">33.7,421</list></item><item><list struct="atomic" id="8825">34,422</list></item><item><list struct="atomic" id="8826">34.2,421</list></item><item><list struct="atomic" id="8827">34.5,422</list></item><item><list struct="atomic" id="8828">34.7,421</list></item><item><list struct="atomic" id="8829">35.2,421</list></item><item><list struct="atomic" id="8830">35.5,420</list></item><item><list struct="atomic" id="8831">35.8,421</list></item><item><list struct="atomic" id="8832">36.1,421</list></item><item><list struct="atomic" id="8833">36.4,421</list></item><item><list struct="atomic" id="8834">36.7,420</list></item><item><list struct="atomic" id="8835">37,420</list></item><item><list struct="atomic" id="8836">37.7,421</list></item><item><list struct="atomic" id="8837">38,420</list></item><item><list struct="atomic" id="8838">38.3,420</list></item><item><list struct="atomic" id="8839">38.6,420</list></item><item><list struct="atomic" id="8840">38.8,420</list></item><item><list struct="atomic" id="8841">39.1,420</list></item><item><list struct="atomic" id="8842">39.4,420</list></item><item><list struct="atomic" id="8843">39.7,419</list></item><item><list struct="atomic" id="8844">40.4,420</list></item><item><list struct="atomic" id="8845">40.7,420</list></item><item><list struct="atomic" id="8846">41.1,420</list></item><item><list struct="atomic" id="8847">41.4,419</list></item><item><list struct="atomic" id="8848">41.7,419</list></item><item><list struct="atomic" id="8849">42,419</list></item><item><list struct="atomic" id="8850">42.3,420</list></item><item><list struct="atomic" id="8851">42.6,419</list></item><item><list struct="atomic" id="8852">43.2,419</list></item><item><list struct="atomic" id="8853">43.5,419</list></item><item><list struct="atomic" id="8854">43.8,419</list></item><item><list struct="atomic" id="8855">44.1,418</list></item><item><list struct="atomic" id="8856">44.4,419</list></item><item><list struct="atomic" id="8857">44.6,419</list></item><item><list struct="atomic" id="8858">44.9,419</list></item><item><list struct="atomic" id="8859">45.1,418</list></item><item><list struct="atomic" id="8860">45.7,419</list></item><item><list struct="atomic" id="8861">46,418</list></item><item><list struct="atomic" id="8862">46.3,418</list></item><item><list struct="atomic" id="8863">46.5,418</list></item><item><list struct="atomic" id="8864">46.7,418</list></item><item><list struct="atomic" id="8865">47,418</list></item><item><list struct="atomic" id="8866">47.3,418</list></item><item><list struct="atomic" id="8867">47.5,419</list></item><item><list struct="atomic" id="8868">48.1,418</list></item><item><list struct="atomic" id="8869">48.3,418</list></item><item><list struct="atomic" id="8870">48.6,417</list></item></list></variable><variable name="tableau3"><list id="8871"><item><list struct="atomic" id="8872">18.3,722</list></item><item><list struct="atomic" id="8873">18.6,721</list></item><item><list struct="atomic" id="8874">19.3,721</list></item><item><list struct="atomic" id="8875">19.7,721</list></item><item><list struct="atomic" id="8876">20,721</list></item><item><list struct="atomic" id="8877">20.4,721</list></item><item><list struct="atomic" id="8878">20.8,720</list></item><item><list struct="atomic" id="8879">21.1,720</list></item><item><list struct="atomic" id="8880">21.4,721</list></item><item><list struct="atomic" id="8881">21.8,721</list></item><item><list struct="atomic" id="8882">22.4,720</list></item><item><list struct="atomic" id="8883">22.8,721</list></item><item><list struct="atomic" id="8884">23.2,720</list></item><item><list struct="atomic" id="8885">23.5,721</list></item><item><list struct="atomic" id="8886">23.9,720</list></item><item><list struct="atomic" id="8887">24.3,721</list></item><item><list struct="atomic" id="8888">24.6,721</list></item><item><list struct="atomic" id="8889">25,722</list></item><item><list struct="atomic" id="8890">25.7,720</list></item><item><list struct="atomic" id="8891">26.1,721</list></item><item><list struct="atomic" id="8892">26.4,721</list></item><item><list struct="atomic" id="8893">26.8,720</list></item><item><list struct="atomic" id="8894">27.2,720</list></item><item><list struct="atomic" id="8895">27.6,721</list></item><item><list struct="atomic" id="8896">27.9,720</list></item><item><list struct="atomic" id="8897">28.3,721</list></item><item><list struct="atomic" id="8898">29,721</list></item><item><list struct="atomic" id="8899">29.4,721</list></item><item><list struct="atomic" id="8900">29.7,721</list></item><item><list struct="atomic" id="8901">30.1,721</list></item><item><list struct="atomic" id="8902">30.4,720</list></item><item><list struct="atomic" id="8903">30.8,721</list></item><item><list struct="atomic" id="8904">31.1,722</list></item><item><list struct="atomic" id="8905">31.5,720</list></item><item><list struct="atomic" id="8906">32.2,720</list></item><item><list struct="atomic" id="8907">32.5,720</list></item><item><list struct="atomic" id="8908">32.9,721</list></item><item><list struct="atomic" id="8909">33.4,721</list></item><item><list struct="atomic" id="8910">33.8,721</list></item><item><list struct="atomic" id="8911">34.2,720</list></item><item><list struct="atomic" id="8912">34.6,720</list></item><item><list struct="atomic" id="8913">34.9,721</list></item><item><list struct="atomic" id="8914">35.9,721</list></item><item><list struct="atomic" id="8915">36.2,721</list></item><item><list struct="atomic" id="8916">36.7,721</list></item><item><list struct="atomic" id="8917">37.2,721</list></item><item><list struct="atomic" id="8918">37.5,720</list></item><item><list struct="atomic" id="8919">37.8,721</list></item><item><list struct="atomic" id="8920">38.2,721</list></item><item><list struct="atomic" id="8921">38.6,721</list></item><item><list struct="atomic" id="8922">39.3,720</list></item><item><list struct="atomic" id="8923">39.7,721</list></item><item><list struct="atomic" id="8924">40,721</list></item><item><list struct="atomic" id="8925">40.4,722</list></item><item><list struct="atomic" id="8926">40.8,721</list></item><item><list struct="atomic" id="8927">41.2,722</list></item><item><list struct="atomic" id="8928">41.6,721</list></item><item><list struct="atomic" id="8929">41.9,722</list></item><item><list struct="atomic" id="8930">42.6,721</list></item><item><list struct="atomic" id="8931">43,721</list></item><item><list struct="atomic" id="8932">43.4,720</list></item><item><list struct="atomic" id="8933">43.7,721</list></item><item><list struct="atomic" id="8934">44,721</list></item><item><list struct="atomic" id="8935">44.4,720</list></item><item><list struct="atomic" id="8936">44.8,720</list></item><item><list struct="atomic" id="8937">45.1,721</list></item><item><list struct="atomic" id="8938">45.8,721</list></item><item><list struct="atomic" id="8939">46.2,721</list></item><item><list struct="atomic" id="8940">46.6,720</list></item><item><list struct="atomic" id="8941">46.9,720</list></item><item><list struct="atomic" id="8942">47.3,721</list></item><item><list struct="atomic" id="8943">47.7,721</list></item><item><list struct="atomic" id="8944">48.1,720</list></item><item><list struct="atomic" id="8945">48.5,720</list></item><item><list struct="atomic" id="8946">49.2,721</list></item><item><list struct="atomic" id="8947">49.6,721</list></item><item><list struct="atomic" id="8948">49.9,721</list></item><item><list struct="atomic" id="8949">50.3,721</list></item><item><list struct="atomic" id="8950">50.7,721</list></item><item><list struct="atomic" id="8951">51.1,721</list></item><item><list struct="atomic" id="8952">51.4,720</list></item><item><list struct="atomic" id="8953">51.8,721</list></item><item><list struct="atomic" id="8954">52.5,721</list></item><item><list struct="atomic" id="8955">52.8,721</list></item><item><list struct="atomic" id="8956">53.2,720</list></item><item><list struct="atomic" id="8957">53.5,720</list></item><item><list struct="atomic" id="8958">53.9,721</list></item><item><list struct="atomic" id="8959">54.2,721</list></item><item><list struct="atomic" id="8960">54.6,722</list></item><item><list struct="atomic" id="8961">55,721</list></item><item><list struct="atomic" id="8962">55.7,721</list></item><item><list struct="atomic" id="8963">56.1,721</list></item><item><list struct="atomic" id="8964">56.5,721</list></item><item><list struct="atomic" id="8965">56.8,721</list></item><item><list struct="atomic" id="8966">57.1,721</list></item><item><list struct="atomic" id="8967">57.5,721</list></item><item><list struct="atomic" id="8968">57.9,721</list></item><item><list struct="atomic" id="8969">58.2,721</list></item><item><list struct="atomic" id="8970">59,721</list></item><item><list struct="atomic" id="8971">59.3,721</list></item><item><list struct="atomic" id="8972">59.7,721</list></item><item><list struct="atomic" id="8973">60.1,721</list></item><item><list struct="atomic" id="8974">60.5,721</list></item><item><list struct="atomic" id="8975">60.9,721</list></item><item><list struct="atomic" id="8976">61.3,721</list></item><item><list struct="atomic" id="8977">61.6,721</list></item><item><list struct="atomic" id="8978">62.3,720</list></item><item><list struct="atomic" id="8979">62.7,721</list></item><item><list struct="atomic" id="8980">63.1,721</list></item><item><list struct="atomic" id="8981">63.4,721</list></item><item><list struct="atomic" id="8982">63.8,720</list></item><item><list struct="atomic" id="8983">64.1,721</list></item><item><list struct="atomic" id="8984">64.5,722</list></item><item><list struct="atomic" id="8985">64.9,721</list></item><item><list struct="atomic" id="8986">65.6,720</list></item><item><list struct="atomic" id="8987">66,722</list></item><item><list struct="atomic" id="8988">66.4,721</list></item><item><list struct="atomic" id="8989">66.8,721</list></item><item><list struct="atomic" id="8990">67.2,722</list></item><item><list struct="atomic" id="8991">67.5,721</list></item><item><list struct="atomic" id="8992">67.9,721</list></item><item><list struct="atomic" id="8993">68.3,721</list></item><item><list struct="atomic" id="8994">69,721</list></item><item><list struct="atomic" id="8995">69.4,721</list></item><item><list struct="atomic" id="8996">69.7,720</list></item><item><list struct="atomic" id="8997">70.1,720</list></item><item><list struct="atomic" id="8998">70.5,721</list></item><item><list struct="atomic" id="8999">70.9,721</list></item><item><list struct="atomic" id="9000">71.2,721</list></item><item><list struct="atomic" id="9001">71.6,720</list></item><item><list struct="atomic" id="9002">72.3,721</list></item><item><list struct="atomic" id="9003">72.7,720</list></item><item><list struct="atomic" id="9004">73,721</list></item><item><list struct="atomic" id="9005">73.4,721</list></item><item><list struct="atomic" id="9006">73.7,721</list></item><item><list struct="atomic" id="9007">74.1,721</list></item><item><list struct="atomic" id="9008">74.5,720</list></item><item><list struct="atomic" id="9009">74.8,720</list></item><item><list struct="atomic" id="9010">75.5,721</list></item><item><list struct="atomic" id="9011">76,721</list></item><item><list struct="atomic" id="9012">76.3,721</list></item><item><list struct="atomic" id="9013">76.7,721</list></item><item><list struct="atomic" id="9014">77.1,721</list></item><item><list struct="atomic" id="9015">77.5,721</list></item><item><list struct="atomic" id="9016">77.9,721</list></item><item><list struct="atomic" id="9017">78.3,722</list></item><item><list struct="atomic" id="9018">79,722</list></item><item><list struct="atomic" id="9019">79.4,722</list></item><item><list struct="atomic" id="9020">79.7,723</list></item><item><list struct="atomic" id="9021">80,723</list></item></list></variable><variable name="tableau2"><list id="9022"><item><list struct="atomic" id="9023">18.3,343</list></item><item><list struct="atomic" id="9024">18.6,328</list></item><item><list struct="atomic" id="9025">19.3,359</list></item><item><list struct="atomic" id="9026">19.7,281</list></item><item><list struct="atomic" id="9027">20,355</list></item><item><list struct="atomic" id="9028">20.4,377</list></item><item><list struct="atomic" id="9029">20.8,314</list></item><item><list struct="atomic" id="9030">21.1,299</list></item><item><list struct="atomic" id="9031">21.4,299</list></item><item><list struct="atomic" id="9032">21.8,337</list></item><item><list struct="atomic" id="9033">22.4,364</list></item><item><list struct="atomic" id="9034">22.8,320</list></item><item><list struct="atomic" id="9035">23.2,342</list></item><item><list struct="atomic" id="9036">23.5,398</list></item><item><list struct="atomic" id="9037">23.9,345</list></item><item><list struct="atomic" id="9038">24.3,377</list></item><item><list struct="atomic" id="9039">24.6,333</list></item><item><list struct="atomic" id="9040">25,347</list></item><item><list struct="atomic" id="9041">25.7,353</list></item><item><list struct="atomic" id="9042">26.1,276</list></item><item><list struct="atomic" id="9043">26.4,374</list></item><item><list struct="atomic" id="9044">26.8,333</list></item><item><list struct="atomic" id="9045">27.2,313</list></item><item><list struct="atomic" id="9046">27.6,342</list></item><item><list struct="atomic" id="9047">27.9,352</list></item><item><list struct="atomic" id="9048">28.3,325</list></item><item><list struct="atomic" id="9049">29,344</list></item><item><list struct="atomic" id="9050">29.4,344</list></item><item><list struct="atomic" id="9051">29.7,287</list></item><item><list struct="atomic" id="9052">30.1,330</list></item><item><list struct="atomic" id="9053">30.4,347</list></item><item><list struct="atomic" id="9054">30.8,339</list></item><item><list struct="atomic" id="9055">31.1,359</list></item><item><list struct="atomic" id="9056">31.5,353</list></item><item><list struct="atomic" id="9057">32.2,326</list></item><item><list struct="atomic" id="9058">32.5,360</list></item><item><list struct="atomic" id="9059">32.9,392</list></item><item><list struct="atomic" id="9060">33.4,323</list></item><item><list struct="atomic" id="9061">33.8,347</list></item><item><list struct="atomic" id="9062">34.2,298</list></item><item><list struct="atomic" id="9063">34.6,347</list></item><item><list struct="atomic" id="9064">34.9,376</list></item><item><list struct="atomic" id="9065">35.9,328</list></item><item><list struct="atomic" id="9066">36.2,373</list></item><item><list struct="atomic" id="9067">36.7,350</list></item><item><list struct="atomic" id="9068">37.2,380</list></item><item><list struct="atomic" id="9069">37.5,326</list></item><item><list struct="atomic" id="9070">37.8,329</list></item><item><list struct="atomic" id="9071">38.2,336</list></item><item><list struct="atomic" id="9072">38.6,408</list></item><item><list struct="atomic" id="9073">39.3,286</list></item><item><list struct="atomic" id="9074">39.7,329</list></item><item><list struct="atomic" id="9075">40,336</list></item><item><list struct="atomic" id="9076">40.4,346</list></item><item><list struct="atomic" id="9077">40.8,369</list></item><item><list struct="atomic" id="9078">41.2,324</list></item><item><list struct="atomic" id="9079">41.6,355</list></item><item><list struct="atomic" id="9080">41.9,346</list></item><item><list struct="atomic" id="9081">42.6,357</list></item><item><list struct="atomic" id="9082">43,313</list></item><item><list struct="atomic" id="9083">43.4,359</list></item><item><list struct="atomic" id="9084">43.7,376</list></item><item><list struct="atomic" id="9085">44,340</list></item><item><list struct="atomic" id="9086">44.4,314</list></item><item><list struct="atomic" id="9087">44.8,336</list></item><item><list struct="atomic" id="9088">45.1,379</list></item><item><list struct="atomic" id="9089">45.8,385</list></item><item><list struct="atomic" id="9090">46.2,360</list></item><item><list struct="atomic" id="9091">46.6,361</list></item><item><list struct="atomic" id="9092">46.9,350</list></item><item><list struct="atomic" id="9093">47.3,324</list></item><item><list struct="atomic" id="9094">47.7,352</list></item><item><list struct="atomic" id="9095">48.1,328</list></item><item><list struct="atomic" id="9096">48.5,387</list></item><item><list struct="atomic" id="9097">49.2,341</list></item><item><list struct="atomic" id="9098">49.6,350</list></item><item><list struct="atomic" id="9099">49.9,321</list></item><item><list struct="atomic" id="9100">50.3,370</list></item><item><list struct="atomic" id="9101">50.7,390</list></item><item><list struct="atomic" id="9102">51.1,379</list></item><item><list struct="atomic" id="9103">51.4,317</list></item><item><list struct="atomic" id="9104">51.8,349</list></item><item><list struct="atomic" id="9105">52.5,306</list></item><item><list struct="atomic" id="9106">52.8,335</list></item><item><list struct="atomic" id="9107">53.2,351</list></item><item><list struct="atomic" id="9108">53.5,318</list></item><item><list struct="atomic" id="9109">53.9,335</list></item><item><list struct="atomic" id="9110">54.2,411</list></item><item><list struct="atomic" id="9111">54.6,332</list></item><item><list struct="atomic" id="9112">55,362</list></item><item><list struct="atomic" id="9113">55.7,278</list></item><item><list struct="atomic" id="9114">56.1,291</list></item><item><list struct="atomic" id="9115">56.5,338</list></item><item><list struct="atomic" id="9116">56.8,367</list></item><item><list struct="atomic" id="9117">57.1,345</list></item><item><list struct="atomic" id="9118">57.5,340</list></item><item><list struct="atomic" id="9119">57.9,372</list></item><item><list struct="atomic" id="9120">58.2,368</list></item><item><list struct="atomic" id="9121">59,340</list></item><item><list struct="atomic" id="9122">59.3,343</list></item><item><list struct="atomic" id="9123">59.7,373</list></item><item><list struct="atomic" id="9124">60.1,369</list></item><item><list struct="atomic" id="9125">60.5,351</list></item><item><list struct="atomic" id="9126">60.9,399</list></item><item><list struct="atomic" id="9127">61.3,369</list></item><item><list struct="atomic" id="9128">61.6,369</list></item><item><list struct="atomic" id="9129">62.3,350</list></item><item><list struct="atomic" id="9130">62.7,377</list></item><item><list struct="atomic" id="9131">63.1,247</list></item><item><list struct="atomic" id="9132">63.4,348</list></item><item><list struct="atomic" id="9133">63.8,335</list></item><item><list struct="atomic" id="9134">64.1,381</list></item><item><list struct="atomic" id="9135">64.5,384</list></item><item><list struct="atomic" id="9136">64.9,353</list></item><item><list struct="atomic" id="9137">65.6,368</list></item><item><list struct="atomic" id="9138">66,357</list></item><item><list struct="atomic" id="9139">66.4,370</list></item><item><list struct="atomic" id="9140">66.8,340</list></item><item><list struct="atomic" id="9141">67.2,395</list></item><item><list struct="atomic" id="9142">67.5,372</list></item><item><list struct="atomic" id="9143">67.9,338</list></item><item><list struct="atomic" id="9144">68.3,392</list></item><item><list struct="atomic" id="9145">69,352</list></item><item><list struct="atomic" id="9146">69.4,329</list></item><item><list struct="atomic" id="9147">69.7,360</list></item><item><list struct="atomic" id="9148">70.1,338</list></item><item><list struct="atomic" id="9149">70.5,360</list></item><item><list struct="atomic" id="9150">70.9,344</list></item><item><list struct="atomic" id="9151">71.2,327</list></item><item><list struct="atomic" id="9152">71.6,327</list></item><item><list struct="atomic" id="9153">72.3,375</list></item><item><list struct="atomic" id="9154">72.7,350</list></item><item><list struct="atomic" id="9155">73,340</list></item><item><list struct="atomic" id="9156">73.4,368</list></item><item><list struct="atomic" id="9157">73.7,367</list></item><item><list struct="atomic" id="9158">74.1,327</list></item><item><list struct="atomic" id="9159">74.5,368</list></item><item><list struct="atomic" id="9160">74.8,369</list></item><item><list struct="atomic" id="9161">75.5,346</list></item><item><list struct="atomic" id="9162">76,356</list></item><item><list struct="atomic" id="9163">76.3,366</list></item><item><list struct="atomic" id="9164">76.7,320</list></item><item><list struct="atomic" id="9165">77.1,350</list></item><item><list struct="atomic" id="9166">77.5,379</list></item><item><list struct="atomic" id="9167">77.9,398</list></item><item><list struct="atomic" id="9168">78.3,412</list></item><item><list struct="atomic" id="9169">79,358</list></item><item><list struct="atomic" id="9170">79.4,315</list></item><item><list struct="atomic" id="9171">79.7,388</list></item><item><list struct="atomic" id="9172">80,344</list></item></list></variable></variables></project><media name="AcquisitionDataSprite" app="Snap4Arduino 5.1.0
, http://snap4arduino.rocks" version="1"></media></snapdata>