<snapdata remixID="9460679"><project name="BASIC Interpreter" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes>-------------------------------&#xD;HOW TO USE:&#xD;-------------------------------&#xD;This is BASIC. I&apos;m not going to write down all of how BASIC works, but here is a website that briefs on how it works: http://www.quitebasic.com/help/&#xD;&#xD;Note that the website has some special variables/functions that are exclusive to their interpreter. There is no LEVEL constant and arrays don&apos;t work like that here. Also you need to declare variable types here. Also, the graphics capabilities I programmed here differ from the ones they say. Additionally, there is no modulo operator because % is already used for something else. But I added a modulo function in case you need that. mod(a, b)&#xD;&#xD;==TYPED VARIABLES==&#xD;&#xD;The Quite BASIC help does not tell you how to make variables types, because their interpreter is special and does not use typed variables. But my interpreter does.&#xD;&#xD;Let us have a variable named "TEST". If we want to make that a string:&#xD;&#xD;LET TEST$ = "Hello, world!"&#xD;&#xD;(I think $ was chosen because it looks like S, which could stand for string)&#xD;&#xD;If we want to make that an integer:&#xD;&#xD;LET TEST% = 3&#xD;&#xD;And if we just want to make that a floating point number:&#xD;&#xD;LET TEST = 3.14159265&#xD;&#xD;Also you don&apos;t have to name your variables one letter with several digits after here, unlike what it says in the Quite BASIC help page. You can name it any text, like "TEST". "T123" works here too. And even "123T". That&apos;s weird&#xD;&#xD;==KEYBOARD INPUT==&#xD;&#xD;To get the last key pressed, use the GETCHAR function. It will return the keycode of the last key pressed.&#xD;&#xD;For letter keys, they are the unicode value of the text from the unicode of () block. Here are a few useful keycodes:&#xD;&#xD;SPACE: 32&#xD;LEFT: 37&#xD;RIGHT: 39&#xD;UP: 38&#xD;DOWN: 40&#xD;&#xD;==HOW TO DRAW GRAPHICS==&#xD;&#xD;I put in a few special commands/variables that allow you to draw things on screen. It uses turtle graphics because that is how pen works in Snap!.&#xD;&#xD;Commands:&#xD;- TGOTO x,y: Equivalent to the go to x: () y: () block&#xD;- TDOWN: Equivalent to the pen down block&#xD;- TUP: Equivalent to the pen up block&#xD;- TMOVE steps: Equivalent to the move () steps block&#xD;- TCLEAR: Equivalent to the clear block&#xD;- THUE hue: Sets pen hue&#xD;- TSAT saturation: Sets pen saturation&#xD;- TBRI brightness: Sets pen brightness&#xD;- THUEC d: Changes pen hue&#xD;- TSATC d: Changes pen saturation&#xD;- TBRIC d: Changes pen brightness &#xD;&#xD;Special variables:&#xD;- TURTLEX: X position of turtle&#xD;- TURTLEY: Y position of turtle&#xD;- TURTLEDIR: Direction of turtle&#xD;- TURTLESIZE: Pen size&#xD;&#xD;These special variables work just like regular variables: you can set them using LET and get them by calling their name.&#xD;&#xD;-----------------------------&#xD;CHANGELOG&#xD;-----------------------------&#xD;&#xD;11/5/20: Expressions are compiled into an expression tree before running. This makes it much faster. In the circle example, it took about 20 seconds to draw the circle previously. Now it takes just 3 -- 566% faster.&#xD;&#xD;-----------------------------&#xD;RESEARCH&#xD;-----------------------------&#xD;&#xD;Actually I didn&apos;t know how to program in BASIC before starting this project&#xD;&#xD;https://www.calormen.com/jsbasic/&#xD;https://www.quitebasic.com/ </notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAeUElEQVR4Xu3de5BkZ3kf4PN17/TOAmLNJXESAUVBQRIr5mJQMOCLYgggaaend2FdASNCsDFVhsIhsQtj7AQKly84EIxxDOESG0y4bJCme1dai0siiJ1yuBoMdmxMIIkUp2wisyJidi59vtSn6nFNtvZuZV/gffSXpJ3pd37POzu/Oae7zymdfwgQIECAAIFLLlAu+UQDCRAgQIAAgU4B+yYgQIAAAQIBAgr4DOhPfepT77t3794Xb29vv3HPnj1PKqX8+XQ6velid7S6unqw1vrI9vkbGxuvv/nmm29v/3748OF7bW5uvrjWOuq67vOz2eydFzvjUn/eeDx+ftd1l3ddd+fevXt/6ciRI5unfg2HDx8ebm1t/cj6+vo7dzIvbH/w1M9pj1dr/cJwOGw2V33lK195wy233LJ9qXOZR4AAgUshcMEFfODAgUfu2bNnvL6+/is7P1DbF7qysnL/UspzSimD+Xz+rmPHjt12tgAHDx58+Hw+f9biY742HA7Xbrjhhj9q/z2ZTJ7S9/0T2r8PBoMvLC0tvaf9cD98+PBoY2PjR7uuu+fOYw8Gg/+0trb2/lZwXdf91el0+q+7rquTyeRR7b9LKV/aNecvvqS+7998tq/xwIEDlw+Hwy+UUq7o+/7Vg8HgS2tra/+0fd19318xnU5v2CnQra2tH1paWvpXpyugnYGLAn50KeVHSimPW1tb+8LuAu667opa631ms9k1l2Lxd8eMVpillId3XfcD6+vrD3v/+99/56mP+5jHPGbp8ssv/9xgMLh6J/NkMnlorfV31tfXH7z7c8bj8YdKKe/v+/6LpZSfue222674xCc+sXV3fK0egwABAl9vAuddwNdee+199uzZc33rxK7rHltKecTOD9RDhw799b7vf6vv+5tLKe0H5ng+n3/vsWPH/vuZAo/H42tLKa+rtb6zlHKfruue0/f9dUePHj02mUxeU2t9SCnl07XW7yul3L62tnbo8OHDe1oBL37oX1NrffNOAY/H43eUUq7e3t7+7htvvPEPVlZWnjscDr+9lPKmVsCllFba7YjtV2qtW+cq4IMHD96v7/vfHw6Hj5rP5z/bdd0fTqfTn29fd9d1/2A2m13Xso3H428tpXx0fX39205XQLvzn66Mdv58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</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts><script x="10" y="10"><block s="receiveKey"><l><option>up arrow</option></l></block><block s="doBroadcast"><l>scroll up</l></block></script><script x="198.9999999999999" y="11.999999999999886"><block s="receiveKey"><l><option>down arrow</option></l></block><block s="doBroadcast"><l>scroll down</l></block></script><script x="12" y="77"><block s="receiveInteraction"><l><option>scrolled-up</option></l></block><block s="doBroadcast"><l>scroll up</l></block></script><script x="200.9999999999999" y="81"><block s="receiveInteraction"><l><option>scrolled-down</option></l></block><block s="doBroadcast"><l>scroll down</l></block></script><script x="11" y="148.99999999999974"><block s="receiveGo"></block><block s="doSetVar"><l>isRunning?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>variables</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>command-specs</l><block s="reportNewList"><list><block s="reportNewList"><list><l>print</l><l>%expr</l><l>;</l><l>%scln-rep</l></list></block><block s="reportNewList"><list><l>let</l><l>%misc</l><l>=</l><l>%expr</l></list></block><block s="reportNewList"><list><l>if</l><l>%expr</l><l>then</l><l>%cmd</l></list></block><block s="reportNewList"><list><l>for</l><l>%misc</l><l>=</l><l>%expr</l><l>to</l><l>%expr</l><l>step</l><l>%expr</l></list></block><block s="reportNewList"><list><l>next</l><l>%misc</l></list></block><block s="reportNewList"><list><l>goto</l><l>%expr</l></list></block><block s="reportNewList"><list><l>gosub</l><l>%expr</l></list></block><block s="reportNewList"><list><l>pause</l><l>%expr</l></list></block><block s="reportNewList"><list><l>input</l><l>%expr</l><l>;</l><l>%misc</l></list></block><block s="reportNewList"><list><l>tgoto</l><l>%expr</l><l>,</l><l>%expr</l></list></block><block s="reportNewList"><list><l>tmove</l><l>%expr</l></list></block><block s="reportNewList"><list><l>tturn</l><l>%expr</l></list></block><block s="reportNewList"><list><l>thue</l><l>%expr</l></list></block><block s="reportNewList"><list><l>tsat</l><l>%expr</l></list></block><block s="reportNewList"><list><l>tbri</l><l>%expr</l></list></block><block s="reportNewList"><list><l>thuec</l><l>%expr</l></list></block><block s="reportNewList"><list><l>tsatc</l><l>%expr</l></list></block><block s="reportNewList"><list><l>tbric</l><l>%expr</l></list></block></list></block></block><block s="doSetVar"><l>reserved</l><block s="reportNewList"><list><l>print</l><l>let</l><l>if</l><l>then</l><l>else</l><l>goto</l><l>=</l><l>&gt;</l><l>&lt;</l><l>&lt;&gt;</l><l>&gt;=</l><l>&lt;=</l><l>and</l><l>or</l><l>not</l><l>gosub</l><l>return</l><l>to</l><l>for</l><l>step</l><l>next</l><l>rem</l><l>pause</l><l>input</l><l>&gt;&lt;</l><l>=&gt;</l><l>=&lt;</l><l>end</l></list></block></block><block s="doSetVar"><l>reserved</l><block s="reportConcatenatedLists"><list><block var="reserved"/><block s="reportNewList"><list><l>tgoto</l><l>tdown</l><l>tup</l><l>tmove</l><l>tturn</l><l>tclear</l><l>thue</l><l>tsat</l><l>tbri</l><l>thuec</l><l>tsatc</l><l>tbric</l></list></block></list></block></block><block s="doSetVar"><l>functions</l><block s="reportNewList"><list><l>sin</l><l>cos</l><l>tan</l><l>asin</l><l>acos</l><l>atan</l><l>sqr</l><l>exp</l><l>log</l><l>abs</l><l>sgn</l><l>round</l><l>floor</l><l>rand</l><l>mod</l><l>getchar</l><l>len</l><l>left$</l><l>mid$</l><l>right$</l></list></block></block><block s="doSetVar"><l>functionMaps</l><block s="reportNewList"><list><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>sin</option></l><block s="reportProduct"><block s="reportQuotient"><l></l><custom-block s="pi"></custom-block></block><l>180</l></block></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>cos</option></l><block s="reportProduct"><block s="reportQuotient"><l></l><custom-block s="pi"></custom-block></block><l>180</l></block></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>tan</option></l><block s="reportProduct"><block s="reportQuotient"><l></l><custom-block s="pi"></custom-block></block><l>180</l></block></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportProduct"><block s="reportQuotient"><block s="reportMonadic"><l><option>asin</option></l><l></l></block><l>180</l></block><custom-block s="pi"></custom-block></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportProduct"><block s="reportQuotient"><block s="reportMonadic"><l><option>acos</option></l><l></l></block><l>180</l></block><custom-block s="pi"></custom-block></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportProduct"><block s="reportQuotient"><block s="reportMonadic"><l><option>atan</option></l><l></l></block><l>180</l></block><custom-block s="pi"></custom-block></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>sqrt</option></l><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>e^</option></l><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>log</option></l><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>abs</option></l><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportEquals"><block var="#1"/><l>0</l></block><l>0</l><block s="reportIfElse"><block s="reportGreaterThan"><block var="#1"/><l>0</l></block><l>1</l><l>-1</l></block></block></autolambda><list><l>#1</l></list></block><block s="reifyReporter"><autolambda><block s="reportRound"><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>floor</option></l><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJSFunction"><list><l>x</l></list><l>return Math.random() * x</l></block><list><l></l></list></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportModulus"><l></l><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.lastKeyPressed;</l></block><list></list></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportStringSize"><l></l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="slice %n %n in %txt"><l>1</l><block var="n"/><block var="str"/></custom-block></autolambda><list><l>str</l><l>n</l></list></block><block s="reifyReporter"><autolambda><custom-block s="slice %n %n in %txt"><block var="s"/><block s="reportDifference"><block s="reportSum"><block var="s"/><block var="len"/></block><l>1</l></block><block var="str"/></custom-block></autolambda><list><l>str</l><l>s</l><l>len</l></list></block><block s="reifyReporter"><autolambda><custom-block s="slice %n %n in %txt"><block s="reportSum"><block s="reportDifference"><block s="reportStringSize"><block var="str"/></block><block var="n"/></block><l>1</l></block><block s="reportStringSize"><block var="str"/></block><block var="str"/></custom-block></autolambda><list><l>str</l><l>n</l></list></block></list></block></block></script><script x="394.9999999999999" y="130.83333333333314"><custom-block s="parse expression %txt report obj? %b"><l>NOT 1 AND 0</l><l><bool>false</bool></l></custom-block></script><script x="519.9999999999999" y="206.83333333333286"><block s="receiveGo"><comment w="90" collapsed="true">Detect key presses</comment></block><block s="doRun"><block s="reportJSFunction"><list></list><l>if (window.lastKeyPressed === undefined) {&#xD;  //Init&#xD;  window.lastKeyPressed = 0;&#xD;&#xD;  window.addEventListener("keydown", function(ev) {&#xD;    window.lastKeyPressed = ev.keyCode;&#xD;  }) &#xD;}</l></block><list></list></block></script><script x="299.9999999999999" y="167.166666666667"><custom-block s="tokenize %txt"><l>TGOTO 3, 2</l></custom-block></script></scripts><sprites><sprite name="interface" idx="1" x="-164.0234375" y="156" heading="90" scale="1" volume="100" pan="0" rotation="0" draggable="true" hidden="true" costume="0" color="79.05,79.05,79.05,1" pen="tip" id="539"><costumes><list struct="atomic" id="540"></list></costumes><sounds><list struct="atomic" id="541"></list></sounds><blocks><block-definition s="get index of line %&apos;lineNum&apos;" type="reporter" category="other"><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="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><custom-block s="get line # of %txt" scope="local"><l></l></custom-block><block var="lineNum"/></block></autolambda><list></list></block><block var="console"/></block></block><block s="doIf"><block s="reportEquals"><block var="a"/><l></l></block><script><block s="doReport"><l>0</l></block></script></block><block s="doReport"><block s="reportListIndex"><block var="a"/><block var="console"/></block></block></script></block-definition><block-definition s="get line # of %&apos;text&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>txt</l></list><l>var temp = "";&#xD;var whitespacing = true;&#xD;&#xD;for (let i = 0; i &lt; txt.length; i++) {&#xD; let v = txt[i];&#xD;&#xD; if (whitespacing) {&#xD;  whitespacing = v == " ";&#xD; }&#xD; if (!whitespacing) {&#xD;  if (isNaN(parseInt(v))) {&#xD;   return temp;&#xD;  }&#xD;  temp += v;&#xD; }&#xD;}&#xD;&#xD;return temp;</l></block><list><block var="text"/></list></block></block></script><scripts><script x="444" y="76.49999999999977"><block s="doSetVar"><l>temp</l><l></l></block><block s="doSetVar"><l>whitespacing?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportStringSize"><block var="text"/></block><script><block s="doSetVar"><l>ltr</l><block s="reportLetter"><block var="i"/><block var="text"/></block></block><block s="doIf"><block var="whitespacing?"/><script><block s="doSetVar"><l>whitespacing?</l><block s="reportEquals"><block var="ltr"/><l> </l></block></block></script></block><block s="doIf"><block s="reportNot"><block var="whitespacing?"/></block><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="ltr"/><l><option>number</option></l></block></block><script><block s="doReport"><block var="temp"/></block></script></block><block s="doSetVar"><l>temp</l><block s="reportJoinWords"><list><block var="temp"/><block var="ltr"/></list></block></block></script></block></script></block></script></scripts></block-definition></blocks><variables><variable name="scroll (float)"><l>0</l></variable></variables><scripts><script x="20" y="10"><block s="receiveMessage"><l>clear console</l></block><block s="doDeleteFromList"><l><option>all</option></l><block var="console"/></block><block s="doSetVar"><l>console scroll</l><l>0</l></block><custom-block s="alert %mlt"><l>pumpkinhead&apos;s BASIC Interpreter&#xD;Use up and down arrow to scroll&#xD;(you can also use scroll wheel)&#xD;Write "help" for a list of commands&#xD;Write "-" to get rid of this message&#xD;-----------------------------------</l></custom-block></script><script x="20" y="186.83333333333394"><block s="reportURL"><l>https://snap.berkeley.edu/snap/Costumes/alonzo.png</l></block></script><script x="20" y="219.83333333333394"><block s="receiveMessage"><l>input</l></block><block s="doAsk"><l></l></block><block s="doIfElse"><block s="reportEquals"><custom-block s="get line # of %txt" scope="local"><block s="getLastAnswer"></block></custom-block><l></l></block><script><block s="doDeclareVariables"><list><l>args</l></list></block><block s="doSetVar"><l>args</l><block s="reportTextSplit"><block s="getLastAnswer"></block><l> </l></block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>clr</l></block><script><block s="doBroadcast"><l>clear console</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>rh</l></block><script><block s="doSetVar"><l>console textheight</l><block s="reportSum"><block s="reportListItem"><l>2</l><block var="args"/></block><l></l></block></block><block s="doSetVar"><l>console rows</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><l>360</l><block var="console textheight"/></block></block></block><custom-block s="draw console"></custom-block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>del</l></block><script><block s="doIfElse"><block s="reportEquals"><custom-block s="get index of line %n" scope="local"><block s="reportListItem"><l>2</l><block var="args"/></block></custom-block><l>0</l></block><script><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;That is not a real line.</l></custom-block></script><script><block s="doDeleteFromList"><custom-block s="get index of line %n" scope="local"><block s="reportListItem"><l>2</l><block var="args"/></block></custom-block><block var="console"/></block><custom-block s="draw console"></custom-block></script></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>-</l></block><script><custom-block s="draw console"></custom-block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>run</l></block><script><custom-block s="run"></custom-block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>runc</l></block><script><block s="doBroadcastAndWait"><l>simple compile</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>load</l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>func</l><l>proc</l></list><l>proc.pause();&#xD;&#xD;if (navigator.clipboard === undefined) {&#xD;  alert("sorry, your browser does not support the clipboard api. rip");&#xD;  proc.resume();&#xD;} else {&#xD;  navigator.clipboard.readText().then((res) =&gt; {&#xD;      proc.resume();&#xD;      proc.evaluate(func, new List([res]), true); &#xD;    }).catch(() =&gt; {&#xD;      proc.resume();&#xD;      proc.evaluate(func, new List([false]), true);&#xD;    });&#xD;}&#xD;//promises are confusing, but i guess they&apos;re good&#xD;&#xD;//if (res == false) return false;&#xD;//return new List(res.split("\n")); </l></block><list><block s="reifyScript"><script><block s="doIfElse"><block s="reportEquals"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Failed to load</l></custom-block></script><script><block s="doSetVar"><l>console</l><block s="reportTextSplit"><l></l><l><option>line</option></l></block></block><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Sucessfully loaded</l></custom-block></script></block></script><list></list></block></list></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>save</l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>list</l><l>func</l><l>proc</l></list><l>if (navigator.clipboard === undefined) {&#xD;  alert("sorry, your browser does not support the clipboard api. rip");&#xD;  return;&#xD;}&#xD;&#xD;proc.pause();&#xD;&#xD;var output = "";&#xD;&#xD;list.asArray().forEach((v, i, arr) =&gt; &#xD;  output += v + (i &lt; arr.length - 1 ? "\n" : "")&#xD;);&#xD;&#xD;navigator.clipboard.writeText(output).then(() =&gt; { //Success&#xD;    proc.resume();&#xD;    proc.evaluate(func, new List([true]), true);&#xD;  }, () =&gt; { //Failure&#xD;    proc.resume();&#xD;    proc.evaluate(func, new List([false]), true);&#xD;  }&#xD;);&#xD;//promises are confusing, but i guess they&apos;re good&#xD;&#xD;//if (res == false) return false;&#xD;//return new List(res.split("\n")); </l></block><list><block var="console"/><block s="reifyScript"><script><block s="doIfElse"><l/><script><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Sucessfully saved</l></custom-block></script><script><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Failed to save</l></custom-block></script></block></script><list></list></block></list></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>loadfile</l></block><script><custom-block s="ask for files of types %mult%txt"><list><l>text</l></list></custom-block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>savefile</l></block><script><block s="doAsk"><l>Enter file name</l></block><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Saving...</l></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>list</l><l>name</l><l>proc</l></list><l>var output = "";&#xD;&#xD;list.asArray().forEach((v, i, arr) =&gt; &#xD;  output += v + (i &lt; arr.length - 1 ? "\n" : "")&#xD;);&#xD;&#xD;var blob = new Blob([output], {type:"text/plain"});&#xD;var url = URL.createObjectURL(blob);&#xD;&#xD;var lnk = document.createElement("a");&#xD;lnk.href = url;&#xD;lnk.download = name + ".txt";&#xD;lnk.click(); </l></block><list><block var="console"/><block s="getLastAnswer"></block></list></block><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Saving... Done</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="args"/></block><l>help</l></block><script><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;---COMMANDS:&#xD;help                                  Displays help dialog&#xD;clr                                     Clears the console&#xD;rh [num]                 Sets the row/text height to [num]&#xD;del [int]                        Deletes line number [int]&#xD;run                                          Runs the code&#xD;loadfile                    Asks for a .txt file to import&#xD;savefile                Exports the program as a .txt file&#xD;load                                  Loads from clipboard&#xD;save                                    Saves to clipboard&#xD;&#xD;Write "-" to dismiss messages like this&#xD;&#xD;---TEXT EDITING:&#xD;Enter a line by typing its line number and the code after&#xD;Like:&#xD;  10 PRINT "Hello, world!"&#xD;&#xD;If you submit a line that already exists, it will be&#xD;replaced.&#xD;&#xD;Info about the BASIC programming language and this&#xD;interpreter are in the project notes. </l></custom-block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><custom-block s="get index of line %n" scope="local"><custom-block s="get line # of %txt" scope="local"><block s="getLastAnswer"></block></custom-block></custom-block><l>0</l></block><script><custom-block s="print %mlt"><block s="getLastAnswer"></block></custom-block><block s="doIf"><block s="reportGreaterThan"><custom-block s="get line # of %txt" scope="local"><block s="reportListItem"><block s="reportDifference"><block s="reportListLength"><block var="console"/></block><l>1</l></block><block var="console"/></block></custom-block><custom-block s="get line # of %txt" scope="local"><block s="getLastAnswer"></block></custom-block></block><script><block s="doWarp"><script><custom-block s="sort %l by %repRing"><block var="console"/><block s="reifyReporter"><autolambda><block s="reportDifference"><custom-block s="get line # of %txt" scope="local"><l></l></custom-block><custom-block s="get line # of %txt" scope="local"><l></l></custom-block></block></autolambda><list></list></block></custom-block></script></block><custom-block s="draw console"></custom-block></script></block></script><script><block s="doReplaceInList"><custom-block s="get index of line %n" scope="local"><custom-block s="get line # of %txt" scope="local"><block s="getLastAnswer"></block></custom-block></custom-block><block var="console"/><block s="getLastAnswer"></block></block><custom-block s="draw console"></custom-block></script></block></script></block><block s="doBroadcast"><l>input</l></block></script><script x="20" y="2706.166666666661"><block s="receiveMessage"><l>file input changed</l></block><block s="doDeclareVariables"><list><l>file</l></list></block><block s="doSetVar"><l>file</l><block s="reportListItem"><l>1</l><custom-block s="imported files"></custom-block></block></block><block s="doIf"><custom-block s="is %l a %txt file?"><block var="file"/><l>text</l></custom-block><script><block s="doSetVar"><l>console</l><block s="reportTextSplit"><custom-block s="read file %l as %s"><block var="file"/><l>text</l></custom-block><l><option>line</option></l></block></block><custom-block s="alert %mlt"><l>----------------------------------------------------------&#xD;Sucessfully loaded</l></custom-block></script></block></script><script x="20" y="2907.8333333333267"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>20</l></block></autolambda><list></list></block><block var="line pointers"/></block></script><script x="20" y="2954.8333333333267"><block s="reportLetter"><l><option>last</option></l><l>world</l></block></script><script x="20" y="2987.8333333333276"><block s="reportListContainsItem"><block var="args"/><l>-t</l></block></script><script x="20" y="3021.6666666666597"><block s="reportEquals"><block s="reportListItem"><l>2</l><l/></block><l>c</l></block></script><script x="20" y="3058.6666666666597"><block s="receiveGo"></block><block s="doSetVar"><l>console scroll</l><l>0</l></block><block s="doSetVar"><l>scroll (float)</l><l>0</l></block><block s="doSetVar"><l>console rows</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><l>360</l><block var="console textheight"/></block></block></block><block s="doDeclareVariables"><list><l>p</l></list></block><block s="doSetVar"><l>p</l><custom-block s="clone list %l"><block var="console"/></custom-block></block><block s="doDeleteFromList"><l><option>all</option></l><block var="console"/></block><custom-block s="print %mlt"><l>pumpkinhead&apos;s BASIC Interpreter&#xD;Use up and down arrow to scroll&#xD;(you can also use scroll wheel)&#xD;Write "help" for a list of commands&#xD;Write "-" to get rid of this message&#xD;-----------------------------------</l></custom-block><block s="doSetVar"><l>console</l><block s="reportConcatenatedLists"><list><block var="console"/><block var="p"/></list></block></block><custom-block s="draw console"></custom-block><block s="doSetVar"><l>console</l><block var="p"/></block><block s="doBroadcast"><l>input</l></block></script><script x="20" y="3427.666666666665"><block s="receiveMessage"><l>scroll down</l></block><block s="doChangeVar"><l>scroll (float)</l><l>0.8</l></block><block s="doSetVar"><l>console scroll</l><block s="reportMonadic"><l><option>floor</option></l><block var="scroll (float)"/></block></block><block s="doIfElse"><block var="isRunning?"/><script><custom-block s="draw %l"><block var="output"/></custom-block></script><script><custom-block s="draw console"></custom-block></script></block></script><script x="20" y="3614.9999999999973"><block s="receiveMessage"><l>scroll up</l></block><block s="doChangeVar"><l>scroll (float)</l><l>-0.8</l></block><block s="doIf"><block s="reportLessThan"><block var="scroll (float)"/><l>0</l></block><script><block s="doSetVar"><l>scroll (float)</l><l>0</l></block></script></block><block s="doSetVar"><l>console scroll</l><block s="reportMonadic"><l><option>floor</option></l><block var="scroll (float)"/></block></block><block s="doIfElse"><block var="isRunning?"/><script><custom-block s="draw %l"><block var="output"/></custom-block></script><script><custom-block s="draw console"></custom-block></script></block></script></scripts></sprite><sprite name="compiler" idx="3" x="54" y="-129" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="0" color="52,153,0,1" pen="tip" id="1162"><costumes><list struct="atomic" id="1163"></list></costumes><sounds><list struct="atomic" id="1164"></list></sounds><blocks></blocks><variables><variable name="compiled"><list struct="atomic" id="1167"></list></variable></variables><scripts><script x="184" y="58.333333333333286"><block s="receiveMessage"><l>simple compile</l><comment w="90" collapsed="false">Compiles the program into some kind of bytecode&#xD;&#xD;(Nevermind, that would just be the same as before)</comment></block></script><script x="486" y="390.0000000000001"><custom-block s="eval exprtree %l"><l/></custom-block></script><script x="587" y="162.66666666666654"><custom-block s="expression tree %l"><custom-block s="tokenize %txt"><l>2^3</l></custom-block></custom-block></script><script x="394" y="434.66666666666663"><block s="reportNewList"><list><block s="reportNewList"><list><l>PRINT</l><block s="reportNewList"><list><l>string</l><l>HELLO, WORLD!</l></list></block></list></block></list></block></script><script x="183" y="174.3333333333333"><block s="doDeclareVariables"><list><l>tokens</l></list></block><block s="doSetVar"><l>tokens</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>line pointers</l><block s="reportNewList"><list></list></block></block><block s="doDeclareVariables"><list><l>line</l></list></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="console"/></block><script><block s="doSetVar"><l>line</l><custom-block s="tokenize %txt"><block s="reportListItem"><block var="i"/><block var="console"/></block></custom-block></block><block s="doAddToList"><custom-block s="after %n of %l"><l>1</l><block var="line"/></custom-block><block var="tokens"/></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="get value of %l"><block s="reportListItem"><l>1</l><block var="line"/></block></custom-block><block var="i"/></list></block><block var="line pointers"/></block></script></block><block s="doSayFor"><block var="tokens"/><l>5</l></block><block s="doSetVar"><l>compiled</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>line</l><block var="tokens"/><script></script></block></script><comment x="25" y="31.666666666666657" w="90" collapsed="false">nothing useful here</comment></scripts></sprite><sprite name="turtle" idx="2" x="-29" y="-150" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="79,79,79,1" pen="tip" id="1259"><costumes><list struct="atomic" id="1260"></list></costumes><sounds><list id="1261"><item><sound name="Pop" sound="data:audio/ogg;base64,UklGRigCAABXQVZFZm10IBAAAAABAAEAESsAACJWAAACABAAZGF0YQQCAADVAAMDvQdyDe8VUx08I5sk4iCrFnMGVfFf2mDEjbNpqZKo5bFHxUHh8wLtJtFHSmF9byNwCmHOROodKvMPyWqn/ZElje6YObXo3eIMnTpEYHB2tXmiaNhFZxdK5Gy1epLegWuGcZ+OyCH84jB9Xd955H83calNthyp50+4jJYDiWmRT6712VwMADxQX+9vF2lWTgokcfJZxWejtpN4mfiyaNqjCY42a1cpZqJfvEb1H8jyA8r1rc6iH6syxPHqwBSrOShR8VY0SU4rAwQs27667KgOqdG8jN28BjwugEsUWSdSXTmsExzqccWtrSmnurMb0LD2pR56P8hRylFrP30f5/nT1oG+H7ZVvqzVvPUqGIIz9UGEQCwvDBNX8p/Vs8P1v3TLnON6AnogiTaGP9I4OiTDBpLnG86GvwjAFc9R6WsIfiUgOghBtTiWI1MGL+hWzyrC6sJa0QXqSQeUItc10DzsNUojWglH7hvYd8sNy2bWb+qxApIZMyp4MKorPB30CGTzv+G41/bWrN8Q780BKRNcH6gjSB+rE68DUvNw5rrf2+Az6cz2JAbbE/IcSh+EGskPfAHk8jXnDeGG4XroZ/ShAiwQXxoQH4wdXhY9C3T+5/LK6pbnhOng7/n41AIIC0oQkhHZDjcJGQJ5+532lvTd9df5H/+OBJcIFwqKCFUEYf4=" id="1262"/></item></list></sounds><blocks><block-definition s="testfunc" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>scriptvar</l><l>foobar</l></block></script></block-definition></blocks><variables></variables><scripts><script x="383.66666666666663" y="48.99999999999994"><block s="doDeclareVariables"><list><l>scriptvar</l></list></block><block s="doSetVar"><l>scriptvar</l><l>0</l></block><block s="doPauseAll"></block></script><script x="96" y="459.83333333333326"><custom-block s="parse expression %txt report obj? %b"><l>1 = 2</l><l><bool>false</bool></l></custom-block></script><script x="110.38313802083331" y="203.8333333333335"><custom-block s="parse expression %txt report obj? %b"><l>(ABS(A) + 1) * -SGN(A)</l><l><bool>false</bool></l></custom-block></script><script x="232" y="379.8333333333337"><block s="bubble"><block var="a"/></block></script><script x="145" y="297.66666666666674"><block s="reportNewList"><list><l>print</l><l>%expr</l><l>;</l><l>%scln-rep</l></list></block></script><comment x="370" y="238.66666666666677" w="168.2451171875" collapsed="false">Order of Operations:&#xD;&#xD;Parentheses/Vars/Funcs&#xD;Logical Not&#xD;Exponents&#xD;Negation&#xD;Mul/Div/Mod&#xD;Add/Sub&#xD;&gt;/&lt;/&gt;=/&lt;=&#xD;=/&lt;&gt;&#xD;Logical And&#xD;Logical Or</comment><script x="10" y="247.00000000000014"><block s="reportNot"><block s="reportNot"><block s="reportMonadic"><l><option>id</option></l><l>-2</l></block></block></block></script><script x="179" y="53.16666666666691"><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>a</l><l>0</l></block></script></block></script><script x="84.6806640625" y="578.6666666666669"><custom-block s="after %n of %l"><l>1</l><l/></custom-block></script><script x="54" y="18.666666666667112"><custom-block s="expressions in %l"><l/></custom-block></script><script x="297.337890625" y="430.66666666666674"><custom-block s="expression tree %l"><l/></custom-block></script><script x="467.3515625" y="588.6666666666667"><custom-block s="tokenize %txt"><l>MOD(15, 5) = 0</l></custom-block></script><script x="533.3515625" y="500.66666666666674"><custom-block s="tokenize %txt"><l>MOD(15, 3)=0</l></custom-block></script><script x="429" y="164.66666666666677"><custom-block s="eval exprtree %l"><l/></custom-block></script><script x="504.337890625" y="191.66666666666677"><custom-block s="expression tree %l"><l/></custom-block></script><script x="279" y="149.99999999999952"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><custom-block s="expressions in %l"><custom-block s="tokenize %txt"><l>PAUSE 2000</l></custom-block></custom-block></block></block></script><script x="106" y="157.66666666666632"><custom-block s="eval exprtree %l"><l/></custom-block></script></scripts></sprite><watcher var="console" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="console scroll" style="normal" x="10" y="31.000001999999995" color="243,118,29" hidden="true"/><watcher var="console rows" style="normal" x="10" y="52.00000399999995" color="243,118,29" hidden="true"/><watcher var="console textheight" style="normal" x="10" y="73.00000599999998" color="243,118,29" hidden="true"/><watcher scope="interface" var="scroll (float)" style="normal" x="10" y="94.00000799999998" color="243,118,29" hidden="true"/><watcher var="output" style="normal" x="10" y="115.00000999999992" color="243,118,29" hidden="true"/><watcher var="isRunning?" style="normal" x="10" y="208.00001199999997" color="243,118,29" hidden="true"/><watcher var="variables" style="normal" x="10" y="229.00001399999996" color="243,118,29" hidden="true"/><watcher var="functionMaps" style="normal" x="5" y="82.99999800000002" color="243,118,29" hidden="true"/><watcher var="line pointers" style="normal" x="10" y="322.00001599999973" color="243,118,29" hidden="true"/><watcher var="reserved" style="normal" x="154.00000000000045" y="35.999998000000005" color="243,118,29" hidden="true"/><watcher var="loop stack" style="normal" x="10" y="338.9999979999997" color="243,118,29" hidden="true"/><watcher var="currLine" style="normal" x="10" y="338.99999799999995" color="243,118,29" hidden="true"/><watcher var="drawing?" style="normal" x="10" y="338.99999799999995" color="243,118,29" hidden="true"/><watcher var="sub stack" style="normal" x="10" y="338.99999799999995" color="243,118,29" hidden="true"/><watcher scope="compiler" var="compiled" style="normal" x="8" y="242.999998" color="243,118,29" hidden="true"/><watcher var="command-specs" style="normal" x="10" y="338.99999799999995" color="243,118,29" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="last pressed key" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>if (window.jsKeyList === undefined) {&#xD;  //create key list used to convert event.key to snap keystufwhatever&#xD;  window.jsKeyList = {ArrowLeft: "left arrow", ArrowRight: "right arrow", ArrowUp: "up arrow", ArrowDown: "down arrow"}&#xD;}&#xD;&#xD;if (window.lastPressedKey === undefined) {&#xD;  //add event listener&#xD;  window.lastPressedKey = null;&#xD;  window.addEventListener("keydown", function(ev) {&#xD;    var key = ev.key;&#xD;&#xD;    if (jsKeyList[key] !== undefined) {&#xD;      key = jsKeyList[key];&#xD;    } else {&#xD;      key = key.toLowerCase();&#xD;    }&#xD;&#xD;    lastPressedkey = key;&#xD;  })&#xD;}&#xD;&#xD;return lastPressedKey; </l></block><list></list></block></block></script></block-definition><block-definition s="draw console" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="draw %l"><block var="console"/></custom-block></script></block-definition><block-definition s="slice %&apos;min&apos; %&apos;max&apos; in %&apos;string&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">5</input><input type="%txt">Hello, world!</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l><l>s</l></list><l>return s.slice(a - 1, b);</l></block><list><block var="min"/><block var="max"/><block var="string"/></list></block></block></script></block-definition><block-definition s="print %&apos;text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doForEach"><l>item</l><block s="reportTextSplit"><block var="text"/><l><option>line</option></l></block><script><block s="doAddToList"><block var="item"/><block var="console"/></block></script></block><custom-block s="draw console"></custom-block></script></block-definition><block-definition s="alert %&apos;text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doDeclareVariables"><list><l>prev</l></list></block><block s="doSetVar"><l>prev</l><custom-block s="clone list %l"><block var="console"/></custom-block><comment w="90" collapsed="true">copy</comment></block><custom-block s="print %mlt"><block var="text"/></custom-block><block s="doSetVar"><l>console</l><block var="prev"/></block></script></block-definition><block-definition s="multi-line %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="run" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>item</l><l>t0</l><l>compiled</l><l>maxLine</l><l>evalRes</l><l>t1</l><l>t2</l><l>t2</l><l>t3</l><l>null</l><l>printDone</l><l>currLineNum</l></list></block><block s="doSetVar"><l>isRunning?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>printMode</l><block s="reportBoolean"><l><bool>false</bool></l></block><comment w="142" collapsed="false">False: Print new line&#xD;True: Print on same line</comment></block><block s="doSetVar"><l>drawing?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>loop stack</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>sub stack</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>output</l><block s="reportNewList"><list></list></block></block><block s="doDeleteFromList"><l><option>all</option></l><block var="variables"/></block><block s="doRun"><block s="reportJSFunction"><list></list><l>window.lastKeyPressed = 0;</l></block><list></list></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="up"></block><block s="setColor"><color>79,79,79,1</color></block><block s="setSize"><l>1</l></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="setHeading"><l>90</l></block><block s="setHeading"><l>90</l></block></script><list></list></block><list></list><comment w="90" collapsed="true">Reset turtle stuff</comment></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doAddToList"><l>Initializing program...</l><block var="output"/></block><custom-block s="draw %l"><block var="output"/></custom-block><block s="doSetVar"><l>currLine</l><l>`</l></block><block s="doSetVar"><l>compiled</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>line pointers</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="console"/><script><block s="doSetVar"><l>t0</l><custom-block s="tokenize %txt"><block var="item"/></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="t0"/></block></block><script><block s="doIf"><block s="reportNot"><block s="reportAnd"><block s="reportAnd"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="t0"/></block></block><l>const</l></block><block s="reportEquals"><block s="reportModulus"><custom-block s="get value of %l"><block s="reportListItem"><l>1</l><block var="t0"/></block></custom-block><l>1</l></block><l>0</l></block></block><block s="reportGreaterThan"><custom-block s="get value of %l"><block s="reportListItem"><l>1</l><block var="t0"/></block></custom-block><l>-1</l></block></block><comment w="90" collapsed="false">if doesn&apos;t have unsigned integer line number?</comment></block><script><custom-block s="error %txt"><l>user:Line does not include unsigned integer line number</l></custom-block></script></block><block s="doAddToList"><custom-block s="expressions in %l"><custom-block s="after %n of %l"><l>1</l><block var="t0"/></custom-block></custom-block><block var="compiled"/></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="get value of %l"><block s="reportListItem"><l>1</l><block var="t0"/></block></custom-block><block s="reportListLength"><block var="compiled"/></block></list></block><block var="line pointers"/></block></script></block><block s="doChangeVar"><l>currLine</l><l>1</l></block></script></block><custom-block s="sort %l by %repRing"><block var="line pointers"/><block s="reifyReporter"><autolambda><block s="reportDifference"><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block></custom-block></script></block></script><l>error</l><script><block s="doSetVar"><l>error</l><block s="evaluate"><block s="reportJSFunction"><list><l>err</l></list><l>return err.message;</l></block><list><block var="error"/></list></block></block><block s="doIfElse"><block s="reportEquals"><custom-block s="slice %n %n in %txt"><l>1</l><l>5</l><block var="error"/></custom-block><l>user:</l></block><script><block s="doAddToList"><block s="reportJoinWords"><list><l>ERROR at line </l><block var="currLine"/><l>:</l></list></block><block var="output"/></block><block s="doAddToList"><custom-block s="slice %n %n in %txt"><l>6</l><block s="reportStringSize"><block var="error"/></block><block var="error"/></custom-block><block var="output"/></block></script><script><block s="doAddToList"><block s="reportJoinWords"><list><l>TOKENIZER ERROR at line </l><block var="currLine"/><l>:</l></list></block><block var="output"/></block><block s="doAddToList"><block var="error"/><block var="output"/></block><block s="doAddToList"><l>pumpkinhead needs to see this</l><block var="output"/></block></script></block><block s="doAddToList"><l>Write "-" to exit</l><block var="output"/></block><custom-block s="draw %l"><block var="output"/></custom-block><block s="doSetVar"><l>isRunning?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doBroadcast"><l>input</l></block><block s="doStopThis"><l><option>this block</option></l></block><block s="doAddToList"><l>----------------------------------------</l><block var="output"/></block></script></custom-block><block s="doSetVar"><l>output</l><block s="reportConcatenatedLists"><list><block var="output"/><block s="reportNewList"><list><l>Running program...</l><l>------------------</l></list></block></list></block></block><custom-block s="draw %l"><block var="output"/></custom-block><block s="doSetVar"><l>currLine</l><l>1</l></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doUntil"><block s="reportGreaterThan"><block var="currLine"/><block s="reportListLength"><block var="line pointers"/></block></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="currLine"/><block var="line pointers"/></block></block><block s="doSetVar"><l>currLineNum</l><block s="reportListItem"><l>1</l><block var="item"/></block></block><block s="doSetVar"><l>evalRes</l><custom-block s="run expression %l"><block s="reportListItem"><block s="reportListItem"><l>2</l><block var="item"/></block><block var="compiled"/></block></custom-block></block><block s="doIfElse"><block s="reportEquals"><block var="evalRes"/><l>-2</l></block><script><block s="doSetVar"><l>currLine</l><block s="reportSum"><block s="reportListLength"><block var="line pointers"/></block><l>1</l></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="evalRes"/><l>-1</l></block><script><block s="doChangeVar"><l>currLine</l><l>1</l></block></script><script><block s="doSetVar"><l>currLine</l><block var="evalRes"/><comment w="90" collapsed="true">Go to line</comment></block></script><comment w="90" collapsed="true">Next line</comment></block></script><comment w="90" collapsed="true">End program</comment></block></script><comment w="90" collapsed="true">run</comment></block></script><l>error</l><script><block s="doSetVar"><l>error</l><block s="evaluate"><block s="reportJSFunction"><list><l>err</l></list><l>return err.message;</l></block><list><block var="error"/></list></block></block><block s="doIfElse"><block s="reportEquals"><custom-block s="slice %n %n in %txt"><l>1</l><l>5</l><block var="error"/></custom-block><l>user:</l></block><script><block s="doAddToList"><block s="reportJoinWords"><list><l>ERROR at line </l><block var="currLineNum"/><l>:</l></list></block><block var="output"/></block><block s="doAddToList"><custom-block s="slice %n %n in %txt"><l>6</l><block s="reportStringSize"><block var="error"/></block><block var="error"/></custom-block><block var="output"/></block></script><script><block s="doAddToList"><block s="reportJoinWords"><list><l>INTERPRETR ERROR at line </l><block var="currLineNum"/><l>:</l></list></block><block var="output"/></block><block s="doAddToList"><block var="error"/><block var="output"/></block><block s="doAddToList"><l>pumpkinhead needs to see this</l><block var="output"/></block></script></block><block s="doAddToList"><l>Write "-" to exit</l><block var="output"/></block><custom-block s="draw %l"><block var="output"/></custom-block><block s="doSetVar"><l>isRunning?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doBroadcast"><l>input</l></block><block s="doStopThis"><l><option>this block</option></l></block><block s="doAddToList"><l>----------------------------------------</l><block var="output"/></block></script></custom-block><block s="doAddToList"><l>----------------------------------------</l><block var="output"/></block><block s="doAddToList"><l>Program done. Write "-" to exit</l><block var="output"/></block><custom-block s="draw %l"><block var="output"/></custom-block><block s="doSetVar"><l>isRunning?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doBroadcast"><l>input</l></block></script><scripts><script x="528.0000000000009" y="730.6999999999998"><block s="reportOr"><l/><l/></block></script><script x="677.0000000000005" y="4616.866666666667"><block s="doSetVar"><l>t0</l><custom-block s="parse expression %txt report obj? %b"><custom-block s="after %n of %l until %predRing"><l>1</l><block var="tokens"/><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l>,</l></block></autolambda><list></list></block></custom-block><l><bool>true</bool></l></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="t0"/></block><l>const</l></block></block><script><custom-block s="error %txt"><l>user:First argument not a number</l></custom-block></script></block></script><script x="661.0000000000005" y="1719.8666666666647"><block s="reportListIndex"><l>;</l><l/></block></script><script x="619.0000000000005" y="1685.8666666666645"><block s="doIf"><l/><script></script></block></script><script x="640.0000000000005" y="5995.666666666663"><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><custom-block s="draw %l"><block var="output"/></custom-block></script></block></script><script x="652.5449218750005" y="6450.166666666683"><block s="reportNot"><l/></block></script><script x="651.5449218750005" y="6096.666666666676"><block s="reportNot"><l/></block></script><script x="657.1191406250005" y="6326.500000000017"><block s="reportNot"><l/></block></script><script x="673.1191406250005" y="6199.833333333344"><block s="reportNot"><block s="reportAnd"><block s="reportIsA"><block s="getLastAnswer"></block><l><option>number</option></l></block><block s="reportEquals"><block s="reportListItem"><l>2</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><l>str</l></block></block></block></script><comment x="576.0000000000005" y="6129.399999999995" w="90" collapsed="false">add comment here...</comment><script x="489.66243489583366" y="1203.7000000000005"><block s="doTellTo"><l>interface</l><block s="reifyScript"><script><block s="show"></block></script><list></list></block><list></list></block></script></scripts></block-definition><block-definition s="clone list %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><list><block var="list"/><block s="reportNewList"><list></list></block></list></block></block></script></block-definition><block-definition s="draw %&apos;list&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>end</l></list></block><block s="clear"></block><block s="doSetVar"><l>end</l><block s="reportSum"><block var="console scroll"/><block var="console rows"/></block></block><block s="doIf"><block s="reportGreaterThan"><block var="end"/><block s="reportListLength"><block var="list"/></block></block><script><block s="doSetVar"><l>end</l><block s="reportListLength"><block var="list"/></block></block></script></block><block s="doWarp"><script><block s="doFor"><l>i</l><block var="console scroll"/><block var="end"/><script><block s="gotoXY"><l>-230</l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="i"/><block var="console scroll"/></block><block s="reportDifference"><l></l><block var="console textheight"/></block></block><l>180</l></block></block><block s="setPenHSVA"><l><option>brightness</option></l><l>31</l></block><block s="write"><block s="reportListItem"><block var="i"/><block var="list"/></block><block var="console textheight"/></block></script></block></script></block></script></block-definition><block-definition s="tokenize %&apos;text&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="true">TO-DO:&#xD;&#xD;Make rem also include the line number</comment><header></header><code></code><translations></translations><inputs><input type="%txt">print "Hello, world!"</input></inputs><script><block s="doDeclareVariables"><list><l>tokens</l><l>temp</l><l>v</l><l>inString</l><l>operators</l><l>isOperator</l><l>skipNext</l><l>operator</l><l>paranLvl</l><l>temp2</l><l>temp3</l></list></block><block s="doSetVar"><l>operators</l><block s="reportNewList"><list><l>&gt;=</l><l>&lt;=</l><l>=&gt;</l><l>=&lt;</l><l>&lt;&gt;</l><l>&gt;&lt;</l><l>&gt;</l><l>&lt;</l><l>+</l><l>-</l><l>*</l><l>/</l><l>^</l><l>=</l></list></block></block><block s="doSetVar"><l>tokens</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>temp</l><l></l></block><block s="doSetVar"><l>inString</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>operator</l><l></l></block><block s="doSetVar"><l>isOperator</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportSum"><block s="reportStringSize"><block var="text"/></block><l>1</l></block><script><block s="doSetVar"><l>v</l><block s="reportLetter"><block var="i"/><block var="text"/></block></block><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block var="v"/><l>-</l></block><block s="reportAnd"><block s="reportEquals"><block var="temp"/><l></l></block><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block><l><option>list</option></l></block></block></block><comment w="90" collapsed="false">detect negate operation&#xD;&#xD;if token before is not an operation (which don&apos;t have lists for their values)</comment></block><script><block s="doSetVar"><l>operator</l><l>!</l></block><block s="doSetVar"><l>isOperator</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>operator</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="o"/><custom-block s="slice %n %n in %txt"><block var="i"/><block s="reportSum"><block var="i"/><block s="reportDifference"><block s="reportStringSize"><block var="o"/></block><l>1</l></block></block><block var="text"/></custom-block></block></autolambda><list><l>o</l></list></block><block var="operators"/></block></block><block s="doSetVar"><l>isOperator</l><block s="reportNot"><block s="reportEquals"><block var="operator"/><l></l></block></block></block></script></block><block s="doIfElse"><block s="reportOr"><block s="reportAnd"><block s="reportNot"><block var="inString"/></block><block s="reportOr"><block var="isOperator"/><block s="reportOr"><block s="reportOr"><block s="reportOr"><block s="reportEquals"><block var="v"/><l> </l></block><block s="reportEquals"><block var="v"/><l>"</l></block></block><block s="reportEquals"><block var="v"/><l>(</l></block></block><block s="reportOr"><block s="reportEquals"><block var="v"/><l>,</l></block><block s="reportEquals"><block var="v"/><l>;</l></block></block></block></block></block><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="text"/></block></block></block><script><block s="doIf"><block s="reportGreaterThan"><block s="reportStringSize"><block var="temp"/></block><l>0</l><comment w="90" collapsed="true">temp isn&apos;t empty</comment></block><script><block s="doIfElse"><block s="reportOr"><block s="reportIsA"><block var="temp"/><l><option>number</option></l></block><block s="reportEquals"><block var="temp"/><l>PI</l></block></block><script><block s="doAddToList"><block s="reportNewList"><list><l>const</l><block var="temp"/></list></block><block var="tokens"/></block></script><script><block s="doIfElse"><block s="reportListContainsItem"><block var="functions"/><block var="temp"/></block><script><block s="doSetVar"><l>temp3</l><block s="reportNewList"><list><l>func</l><block s="reportListIndex"><block var="temp"/><block var="functions"/></block><block s="reportNewList"><list></list></block></list></block><comment w="90" collapsed="true">third item is arg list</comment></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="v"/><l>(</l></block></block><script><custom-block s="error %txt"><block var="v"/></custom-block></script></block><block s="doSetVar"><l>paranLvl</l><l>1</l></block><block s="doSetVar"><l>temp2</l><l></l></block><block s="doUntil"><block s="reportEquals"><block var="paranLvl"/><l>0</l></block><script><block s="doChangeVar"><l>i</l><l>1</l></block><block s="doIf"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="text"/></block></block><script><custom-block s="error %txt"><l>user:Unfinished argument list</l></custom-block></script></block><block s="doSetVar"><l>v</l><block s="reportLetter"><block var="i"/><block var="text"/></block></block><block s="doIfElse"><block s="reportEquals"><block var="v"/><l>(</l></block><script><block s="doChangeVar"><l>paranLvl</l><l>1</l></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="v"/><l>)</l></block><script><block s="doChangeVar"><l>paranLvl</l><l>-1</l></block></script><script><block s="doIf"><block s="reportEquals"><block var="v"/><l>,</l></block><script><block s="doAddToList"><custom-block s="tokenize %txt"><block var="temp2"/></custom-block><block s="reportListItem"><l>3</l><block var="temp3"/></block></block><block s="doSetVar"><l>temp2</l><l></l></block></script></block></script></block></script></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block var="paranLvl"/><l>0</l></block><block s="reportNot"><block s="reportEquals"><block var="v"/><l>,</l></block></block></block><script><block s="doSetVar"><l>temp2</l><block s="reportJoinWords"><list><block var="temp2"/><block var="v"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="temp2"/><l></l></block></block><script><block s="doAddToList"><custom-block s="tokenize %txt"><block var="temp2"/></custom-block><block s="reportListItem"><l>3</l><block var="temp3"/></block></block></script></block><block s="doAddToList"><block var="temp3"/><block var="tokens"/></block><block s="doSetVar"><l>v</l><l></l></block></script><script><block s="doIfElse"><block s="reportNot"><block s="reportListContainsItem"><block var="reserved"/><block var="temp"/><comment w="90" collapsed="true">Variable&#xD;&#xD;[nothing] = Number&#xD;$ = String&#xD;% = Integer</comment></block></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><l><option>last</option></l><block var="temp"/></block><l>$</l></block><script><block s="doAddToList"><block s="reportNewList"><list><l>var</l><l>str</l><block var="temp"/></list></block><block var="tokens"/></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><l><option>last</option></l><block var="temp"/></block><l>%</l></block><script><block s="doAddToList"><block s="reportNewList"><list><l>var</l><l>int</l><block var="temp"/></list></block><block var="tokens"/></block></script><script><block s="doAddToList"><block s="reportNewList"><list><l>var</l><l>num</l><block var="temp"/></list></block><block var="tokens"/></block></script></block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="temp"/><l>rem</l></block><script><block s="doReport"><block var="tokens"/></block></script><script><block s="doAddToList"><block var="temp"/><block var="tokens"/></block></script></block></script></block></script></block></script></block><block s="doSetVar"><l>temp</l><l></l></block></script></block><block s="doIfElse"><block s="reportEquals"><block var="v"/><l>(</l></block><script><block s="doSetVar"><l>paranLvl</l><l>1</l></block><block s="doSetVar"><l>temp2</l><l></l></block><block s="doUntil"><block s="reportEquals"><block var="paranLvl"/><l>0</l></block><script><block s="doChangeVar"><l>i</l><l>1</l></block><block s="doIf"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="text"/></block></block><script><custom-block s="error %txt"><l>user:Unfinished parentheses</l></custom-block></script></block><block s="doSetVar"><l>v</l><block s="reportLetter"><block var="i"/><block var="text"/></block></block><block s="doIfElse"><block s="reportEquals"><block var="v"/><l>(</l></block><script><block s="doChangeVar"><l>paranLvl</l><l>1</l></block></script><script><block s="doIf"><block s="reportEquals"><block var="v"/><l>)</l></block><script><block s="doChangeVar"><l>paranLvl</l><l>-1</l></block></script></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="paranLvl"/><l>0</l></block><script><block s="doSetVar"><l>temp2</l><block s="reportJoinWords"><list><block var="temp2"/><block var="v"/></list></block></block></script></block></script></block><block s="doAddToList"><block s="reportNewList"><list><l>paren</l><custom-block s="tokenize %txt"><block var="temp2"/></custom-block></list></block><block var="tokens"/></block></script><script><block s="doIf"><block s="reportEquals"><block var="v"/><l>)</l></block><script><custom-block s="error %txt"><l>user:Parentheses not entered</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="v"/><l>,</l></block><script><block s="doAddToList"><l>,</l><block var="tokens"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="v"/><l>;</l></block><script><block s="doAddToList"><l>;</l><block var="tokens"/></block></script></block><block s="doIf"><block var="isOperator"/><script><block s="doAddToList"><block var="operator"/><block var="tokens"/></block><block s="doIf"><block s="reportGreaterThan"><block s="reportStringSize"><block var="operator"/></block><l>1</l></block><script><block s="doChangeVar"><l>i</l><l>1</l></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="v"/><l>"</l></block><script><block s="doSetVar"><l>inString</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>temp</l><l></l></block></script></block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="v"/><l>"</l></block><script><block s="doSetVar"><l>inString</l><block s="reportNot"><block var="inString"/></block></block><block s="doIf"><block s="reportNot"><block var="inString"/></block><script><block s="doAddToList"><block s="reportNewList"><list><l>string</l><block var="temp"/></list></block><block var="tokens"/></block></script><comment w="90" collapsed="true">just exited string</comment></block><block s="doSetVar"><l>temp</l><l></l></block></script><script><block s="doSetVar"><l>temp</l><block s="reportJoinWords"><list><block var="temp"/><block var="v"/></list></block></block></script></block></script></block></script></block><block s="doReport"><block var="tokens"/></block></script><scripts><script x="267.00000000000045" y="177.0333333333333"><block s="reportAnd"><l/><block s="reportEquals"><l></l><l>const</l></block></block></script><script x="408.64160156250045" y="954.4999999999989"><block s="reportListIsEmpty"><block var="tokens"/></block></script><script x="312.99511718750045" y="996.4999999999993"><block s="reportAnd"><l/><l/></block></script><script x="352.7958984375" y="132.33333333333331"><block s="reportNewList"><list><l>&gt;=</l><l>&lt;=</l><l>&lt;&gt;</l><l>=</l><l>&gt;</l><l>&lt;</l><l>+</l><l>-</l><l>*</l><l>/</l><l>^</l><l>=&gt;</l><l>=&lt;</l><l>&gt;&lt;</l></list></block></script></scripts></block-definition><block-definition s="get variable %&apos;name&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLEX</l><comment w="90" collapsed="true">Restricted variable?</comment></block><script><block s="doReport"><block s="reportAttributeOf"><l><option>x position</option></l><l>turtle</l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLEY</l></block><script><block s="doReport"><block s="reportAttributeOf"><l><option>y position</option></l><l>turtle</l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLEDIR</l></block><script><block s="doReport"><block s="reportAttributeOf"><l><option>direction</option></l><l>turtle</l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLESIZE</l></block><script><block s="doReport"><block s="reportAskFor"><l>turtle</l><block s="reifyReporter"><autolambda><block s="getPenAttribute"><l><option>size</option></l></block></autolambda><list></list></block><list></list></block></block></script></block><block s="doDeclareVariables"><list><l>item</l></list></block><block s="doSetVar"><l>item</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="name"/></block></autolambda><list></list></block><block var="variables"/></block></block><block s="doIf"><block s="reportIsA"><block var="item"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportListItem"><l>3</l><block var="item"/></block></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="set variable %&apos;name&apos; of type %&apos;type&apos; to %&apos;val&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt">num</input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLEX</l></block><script><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setXPosition"><l></l></block></script><list></list></block><list><block var="val"/></list></block><block s="doStopThis"><l><option>this block</option></l></block></script><comment w="90" collapsed="true">Restricted variable?</comment></block><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLEY</l></block><script><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setYPosition"><l></l></block></script><list></list></block><list><block var="val"/></list></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLEDIR</l></block><script><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setHeading"><l></l></block></script><list></list></block><list><block var="val"/></list></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doIf"><block s="reportEquals"><block var="name"/><l>TURTLESIZE</l></block><script><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setSize"><l></l></block></script><list></list></block><list><block var="val"/></list></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doDeclareVariables"><list><l>item</l></list></block><block s="doSetVar"><l>item</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="name"/></block></autolambda><list></list></block><block var="variables"/></block></block><block s="doIfElse"><block s="reportIsA"><block var="item"/><l><option>list</option></l></block><script><block s="doReplaceInList"><l>2</l><block var="item"/><block var="type"/></block><block s="doReplaceInList"><l>3</l><block var="item"/><block var="val"/></block></script><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="type"/><block var="val"/></list></block><block var="variables"/></block></script></block></script></block-definition><block-definition s="get value of %&apos;list&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><custom-block s="error %txt"><l>user:Not a value</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="list"/></block><l>var</l></block><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><custom-block s="get variable %txt"><block s="reportListItem"><l>3</l><block var="list"/></block></custom-block></block><block s="doIf"><block s="reportEquals"><block var="a"/><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><custom-block s="error %txt"><l>user:Variable is undefined</l></custom-block></script></block><block s="doReport"><block var="a"/></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="list"/></block><l>string</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="list"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="list"/></block><l>const</l></block><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="list"/></block><l>PI</l></block><script><block s="doReport"><custom-block s="pi"></custom-block></block></script></block><block s="doReport"><block s="reportListItem"><l>2</l><block var="list"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="list"/></block><l>paren</l></block><script><block s="doReport"><custom-block s="parse expression %txt report obj? %b"><block s="reportListItem"><l>2</l><block var="list"/></block><l/></custom-block></block></script></block><custom-block s="error %txt"><l>user:Not a value</l></custom-block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><custom-block s="let %upvar be %s"><l>reset</l><block s="evaluate"><block s="reportJSFunction"><list><l>proc</l></list><l>var oldHandleError = proc.handleError,&#xD;    oldCatchingErrors = proc.isCatchingErrors;&#xD;&#xD;return function(){&#xD; proc.handleError = oldHandleError;&#xD; proc.isCatchingErrors = oldCatchingErrors;&#xD;}</l></block><list></list></block></custom-block><block s="doCallCC"><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>reset</l><l>action</l><l>handler</l><l>proc</l></list><l>proc.isCatchingErrors = true;&#xD;proc.handleError = function(error, element){&#xD; reset();&#xD; proc.context = handler;&#xD; proc.context.variables.setVar("error", error);&#xD;}&#xD;&#xD;try{&#xD; proc.evaluate(action, new List(), true);&#xD;}&#xD;catch(e){&#xD; proc.handleError(e, null);&#xD;} </l></block><list><block var="reset"/><block var="action"/><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><block s="doRun"><block var="handler"/><list></list></block><block s="doRun"><block var="return"/><list></list></block></script><list></list></block><list></list></block></script><list></list></block></list></block></script><list><l>return</l></list></block></block><block s="doRun"><block var="reset"/><list></list></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><comment x="0" y="0" w="183.33333333333334" collapsed="false">LET (FOO) BE (5)&#xD;is equivalent to&#xD;SCRIPT VARIABLES (FOO)&#xD;SET (FOO) TO (5)</comment><header></header><code></code><translations>pt:cria a variável de guião _ com valor _&#xD;</translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="math tokenize %&apos;eq&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt">3+5*2</input></inputs><script><block s="doDeclareVariables"><list><l>tokens</l><l>t0</l><l>t1</l><l>temp</l><l>p</l><l>func</l><l>inVar</l></list></block><block s="doSetVar"><l>tokens</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>temp</l><l></l></block><block s="doSetVar"><l>t0</l><l></l></block><block s="doSetVar"><l>t1</l><l> </l></block><block s="doSetVar"><l>inVar</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportStringSize"><block var="eq"/></block><script><block s="doIfElse"><block s="reportOr"><block s="reportIsA"><block s="reportLetter"><block var="i"/><block var="eq"/></block><l><option>number</option></l></block><block s="reportAnd"><block s="reportNot"><block var="inVar"/></block><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="eq"/></block><l>.</l></block></block></block><script><block s="doSetVar"><l>temp</l><block s="reportJoinWords"><list><block var="temp"/><block s="reportLetter"><block var="i"/><block var="eq"/></block></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="eq"/></block><l>(</l></block><script><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block var="temp"/><l></l></block></block><block s="reportIsA"><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block><l><option>list</option></l></block></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="temp"/><l></l></block></block><script><block s="doAddToList"><block var="temp"/><block var="tokens"/></block></script></block><block s="doAddToList"><l>*</l><block var="tokens"/></block><block s="doSetVar"><l>temp</l><l></l></block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block><block s="doSetVar"><l>p</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="p"/><l>0</l></block><script><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="eq"/></block><l>(</l></block><script><block s="doChangeVar"><l>p</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="eq"/></block><l>)</l></block><script><block s="doChangeVar"><l>p</l><l>-1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="p"/><l>0</l></block></block><script><block s="doSetVar"><l>temp</l><block s="reportJoinWords"><list><block var="temp"/><block s="reportLetter"><block var="i"/><block var="eq"/></block></list></block></block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doAddToList"><custom-block s="math tokenize %txt"><block var="temp"/></custom-block><block var="tokens"/></block><block s="doSetVar"><l>temp</l><l></l></block><block s="doChangeVar"><l>i</l><l>-1</l></block></script><script><block s="doSetVar"><l>func</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="f"/><custom-block s="slice %n %n in %txt"><block var="i"/><block s="reportSum"><block var="i"/><block s="reportDifference"><block s="reportStringSize"><block var="f"/></block><l>1</l></block></block><block var="eq"/></custom-block></block></autolambda><list><l>f</l></list></block><block var="functions"/></block></block><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="func"/><l></l></block></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="temp"/><l></l></block></block><script><block s="doAddToList"><block var="temp"/><block var="tokens"/></block></script></block><block s="doAddToList"><block var="func"/><block var="tokens"/></block><block s="doSetVar"><l>temp</l><l></l></block><block s="doChangeVar"><l>i</l><block s="reportDifference"><block s="reportStringSize"><block var="func"/></block><l>1</l></block></block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="eq"/></block><l> </l></block></block><script><block s="doIf"><block s="reportNot"><block var="inVar"/></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="temp"/><l></l></block></block><script><block s="doAddToList"><block var="temp"/><block var="tokens"/></block></script></block><block s="doSetVar"><l>temp</l><block s="reportLetter"><block var="i"/><block var="eq"/></block></block><block s="doSetVar"><l>inVar</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block></script></block></script></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="temp"/><l></l></block></block><script><block s="doAddToList"><block var="temp"/><block var="tokens"/></block></script></block><block s="doReport"><block var="tokens"/></block></script><scripts><script x="315.25325620833246" y="740.8666686666638"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><l>hello world</l><l>)</l></block></block></script></scripts></block-definition><block-definition s="parse expression %&apos;eq&apos; report obj? %&apos;reportObj&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%b">false</input></inputs><script><block s="doDeclareVariables"><list><l>tokens</l><l>item</l><l>val</l><l>f</l><l>temp</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportIsA"><block var="eq"/><l><option>list</option></l></block><script><block s="doSetVar"><l>tokens</l><block var="eq"/></block></script><script><block s="doSetVar"><l>tokens</l><custom-block s="tokenize %txt"><block var="eq"/></custom-block></block></script></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportIsA"><block var="item"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="item"/></block><l>paran</l></block><script><block s="doReplaceInList"><block var="i"/><block var="tokens"/><custom-block s="parse expression %txt report obj? %b"><block s="reportListItem"><l>2</l><block var="item"/></block><l/></custom-block></block></script><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="item"/></block><l>func</l></block><script><block s="doSetVar"><l>f</l><block s="reportListItem"><block s="reportListItem"><l>2</l><block var="item"/></block><block var="functionMaps"/></block></block><block s="doSetVar"><l>temp</l><block s="evaluate"><block var="f"/><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="parse expression %txt report obj? %b"><l></l><l><bool>false</bool></l></custom-block></autolambda><list></list></block><block s="reportListItem"><l>3</l><block var="item"/></block></block></block></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><block s="reportIfElse"><block s="reportIsA"><block var="temp"/><l><option>number</option></l></block><l>const</l><l>string</l></block><block var="temp"/></list></block></block></script></block></script></block></script></block></script><comment w="90" collapsed="true">P (including functions)</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>not</l></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><l>0</l></block><l></l></block></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="false">NOT</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>^</l></block><script><block s="doSetVar"><l>val</l><block s="reportPower"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="false">E.</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>!</l></block><script><block s="doSetVar"><l>val</l><block s="reportDifference"><l></l><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="true">negate unary operator</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>*</l></block><script><block s="doSetVar"><l>val</l><block s="reportProduct"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>/</l></block><script><block s="doSetVar"><l>val</l><block s="reportQuotient"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>%</l></block><script><block s="doSetVar"><l>val</l><block s="reportModulus"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="true">MD(%)</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>+</l></block><script><block s="doIfElse"><block s="reportOr"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block><l><option>list</option></l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></block><l>string</l></block></block><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block><l><option>list</option></l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></block><l>string</l></block></block><comment w="90" collapsed="true">string concatenation</comment></block><script><block s="doSetVar"><l>val</l><block s="reportJoinWords"><list><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></list></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>string</l><block var="val"/></list></block></block></script><script><block s="doSetVar"><l>val</l><block s="reportSum"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>-</l></block><script><block s="doSetVar"><l>val</l><block s="reportDifference"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="true">AS</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>&gt;</l></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportGreaterThan"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>&lt;</l></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportLessThan"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="item"/><l>&lt;=</l></block><block s="reportEquals"><block var="item"/><l>=&lt;</l></block></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportNot"><block s="reportGreaterThan"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="item"/><l>&gt;=</l></block><block s="reportEquals"><block var="item"/><l>=&gt;</l></block></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportNot"><block s="reportLessThan"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="false">Inequalities&#xD;(excluding not equal to)</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>=</l></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="item"/><l>&lt;&gt;</l></block><block s="reportEquals"><block var="item"/><l>&gt;&lt;</l></block></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportNot"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block></block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="false">Equals to&#xD;Not equal to</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>and</l></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportAnd"><block s="reportNot"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><l>0</l></block></block><block s="reportNot"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><l>0</l></block></block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="true">AND</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tokens"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="item"/><l>or</l></block><script><block s="doSetVar"><l>val</l><block s="reportSum"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><l>0</l></block></block><block s="reportNot"><block s="reportEquals"><custom-block s="get value of %l"><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tokens"/></block></custom-block><l>0</l></block></block></block><l></l></block></block><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doDeleteFromList"><block var="i"/><block var="tokens"/></block><block s="doReplaceInList"><block var="i"/><block var="tokens"/><block s="reportNewList"><list><l>const</l><block var="val"/></list></block></block></script></block></script><comment w="90" collapsed="true">OR</comment></block><block s="doIf"><block var="reportObj"/><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="tokens"/></block></block><l>var</l></block><script><block s="doReport"><block s="reportNewList"><list><l>const</l><custom-block s="get value of %l"><block s="reportListItem"><l>1</l><block var="tokens"/></block></custom-block></list></block></block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="tokens"/></block></block></script></block></script></block><block s="doReport"><custom-block s="get value of %l"><block s="reportListItem"><l>1</l><block var="tokens"/></block></custom-block></block></script></block></script><scripts><script x="479.9999999999998" y="838.8666666666669"><block s="reportNewList"><list><l>const</l><l></l></list></block></script><script x="501.33333333333326" y="911.8666666666646"><block s="reportNot"><block s="reportEquals"><l></l><l></l></block></block></script></scripts></block-definition><block-definition s="slice %&apos;a&apos; %&apos;b&apos; of %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Includes start and end</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l><l>list</l></list><l>return new List(list.contents.slice(a - 1, b));</l></block><list><block var="a"/><block var="b"/><block var="list"/></list></block></block></script></block-definition><block-definition s="after %&apos;i&apos; of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>list</l></list><l>return new List(list.contents.slice(a));</l></block><list><block var="i"/><block var="list"/></list></block></block></script></block-definition><block-definition s="pi" 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.PI</l></block><list></list></block></block></script></block-definition><block-definition s="is %&apos;obj&apos; a letter?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="obj"/><l><option>text</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doSetVar"><l>a</l><block s="reportUnicode"><block var="obj"/></block></block><block s="doReport"><block s="reportOr"><block s="reportAnd"><block s="reportGreaterThan"><block var="a"/><l>64</l></block><block s="reportLessThan"><block var="a"/><l>91</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block var="a"/><l>96</l></block><block s="reportLessThan"><block var="a"/><l>123</l></block></block></block></block></script></block-definition><block-definition s="sort %&apos;list&apos; by %&apos;f&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Bubble sort&#xD;&#xD;(TO-DO: Use better sorting algorithm)</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%repRing"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="list"/></block></block><script><block s="doReport"><block var="list"/></block></script></block><block s="doDeclareVariables"><list><l>sorted</l><l>res</l><l>temp</l></list></block><block s="doSetVar"><l>sorted</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="sorted"/><script><block s="doSetVar"><l>sorted</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportDifference"><block s="reportListLength"><block var="list"/></block><l>1</l></block><script><block s="doSetVar"><l>res</l><block s="evaluate"><block var="f"/><list><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="list"/></block><block s="reportListItem"><block var="i"/><block var="list"/></block></list></block></block><block s="doIf"><block s="reportLessThan"><block var="res"/><l>0</l></block><script><block s="doSetVar"><l>temp</l><block s="reportListItem"><block var="i"/><block var="list"/></block></block><block s="doReplaceInList"><block var="i"/><block var="list"/><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="list"/></block></block><block s="doReplaceInList"><block s="reportSum"><block var="i"/><l>1</l></block><block var="list"/><block var="temp"/></block><block s="doSetVar"><l>sorted</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><comment w="90" collapsed="true">swap</comment></block></script></block></script></block></script></block-definition><block-definition s="after %&apos;start&apos; of %&apos;list&apos; until %&apos;condition&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Does not include the start and the end.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doDeclareVariables"><list><l>res</l><l>i</l></list></block><block s="doSetVar"><l>res</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doSetVar"><l>i</l><block s="reportSum"><block var="start"/><l>1</l></block></block><block s="doUntil"><block s="evaluate"><block var="condition"/><list><block s="reportListItem"><block var="i"/><block var="list"/></block></list></block><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><block var="list"/></block><block var="res"/></block><block s="doChangeVar"><l>i</l><l>1</l></block><block s="doIf"><block s="reportGreaterThan"><block var="i"/><block s="reportListLength"><block var="list"/></block></block><script><block s="doReport"><block var="res"/></block></script></block></script></block><block s="doReport"><block var="res"/></block></script></block></script></block-definition><block-definition s="run expression %&apos;tokens&apos;" type="reporter" category="other"><comment w="90" collapsed="true">Will report the line number it should go to.&#xD;&#xD;Like if it sees GOTO 5 then it will return 5.&#xD;&#xD;If there is no GOTO and the function evalulates successfully, it will return -1&#xD;&#xD;If it sees an END command, it will return -2</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>t0</l><l>t1</l><l>t2</l><l>printDone</l></list></block><block s="doIf"><block s="reportNot"><block s="reportAnd"><block s="reportIsA"><block var="tokens"/><l><option>list</option></l></block><block s="reportListIsEmpty"><block var="tokens"/></block></block></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>end</l><comment w="90" collapsed="true">END</comment></block><script><block s="doReport"><l>-2</l></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>print</l><comment w="90" collapsed="true">PRINT</comment></block><script><block s="doSetVar"><l>printDone</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>t0</l><l>2</l></block><block s="doIf"><block s="reportNot"><block var="printMode"/></block><script><block s="doAddToList"><l></l><block var="output"/></block></script></block><block s="doUntil"><block s="reportOr"><block var="printDone"/><block s="reportGreaterThan"><block var="t0"/><block s="reportDifference"><block s="reportListLength"><block var="tokens"/></block><l>0</l></block></block></block><script><block s="doSetVar"><l>printDone</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doReplaceInList"><l><option>last</option></l><block var="output"/><block s="reportJoinWords"><list><block s="reportListItem"><l><option>last</option></l><block var="output"/></block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="t0"/><block var="tokens"/></block></block></custom-block></list></block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><block s="reportSum"><block var="t0"/><l>1</l></block><block var="tokens"/></block><l>;</l></block><script><block s="doSetVar"><l>printDone</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doChangeVar"><l>t0</l><l>2</l></block></script></block><block s="doSetVar"><l>printMode</l><block s="reportEquals"><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block><l>;</l></block></block><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><custom-block s="draw %l"><block var="output"/></custom-block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>goto</l><comment w="90" collapsed="true">GOTO</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block><block s="reportNot"><block s="reportEquals"><block s="reportModulus"><block var="t0"/><l>1</l></block><l>0</l></block></block></block><script><custom-block s="error %txt"><l>user:Line number must be an integer</l></custom-block></script></block><block s="doSetVar"><l>t1</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="t0"/></block></autolambda><list></list></block><block var="line pointers"/></block></block><block s="doIf"><block s="reportEquals"><block var="t1"/><l></l></block><script><custom-block s="error %txt"><l>user:Line doesn&apos;t exist</l></custom-block></script></block><block s="doReport"><block s="reportListIndex"><block var="t1"/><block var="line pointers"/></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>gosub</l><comment w="90" collapsed="true">GOSUB</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block><block s="reportNot"><block s="reportEquals"><block s="reportModulus"><block var="t0"/><l>1</l></block><l>0</l></block></block></block><script><custom-block s="error %txt"><l>user:Line number must be an integer</l></custom-block></script></block><block s="doSetVar"><l>t1</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="t0"/></block></autolambda><list></list></block><block var="line pointers"/></block></block><block s="doIf"><block s="reportEquals"><block var="t1"/><l></l></block><script><custom-block s="error %txt"><l>user:Line doesn&apos;t exist</l></custom-block></script></block><block s="doAddToList"><block var="currLine"/><block var="sub stack"/></block><block s="doReport"><block s="reportListIndex"><block var="t1"/><block var="line pointers"/></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>return</l><comment w="90" collapsed="true">RETURN</comment></block><script><block s="doSetVar"><l>t0</l><block s="reportListItem"><l><option>last</option></l><block var="sub stack"/></block></block><block s="doIf"><block s="reportEquals"><block var="t0"/><l></l></block><script><custom-block s="error %txt"><l>user:Return without gosub</l></custom-block></script></block><block s="doDeleteFromList"><l><option>last</option></l><block var="sub stack"/></block><block s="doReport"><block s="reportSum"><block var="t0"/><l>1</l></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>let</l><comment w="90" collapsed="true">LET</comment></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>3</l><block var="tokens"/></block><l>=</l></block></block><script><custom-block s="error %txt"><l>user;There needs to be a equals sign</l></custom-block></script></block><block s="doSetVar"><l>t1</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportIsA"><block var="t1"/><l><option>list</option></l></block></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="t1"/></block><l>var</l></block></block></block><script><custom-block s="error %txt"><l>user:Invalid variable name</l></custom-block></script></block><block s="doSetVar"><l>t2</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>4</l><block var="tokens"/></block></block></custom-block></block><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="t1"/></block><l>num</l></block><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t2"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Cannot assign non-number value to number type var</l></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block var="t1"/></block><l>num</l><block var="t2"/></custom-block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="t1"/></block><l>int</l></block><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t2"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Cannot assign non-number value to integer type var</l></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block var="t1"/></block><l>int</l><block s="reportMonadic"><l><option>floor</option></l><block var="t2"/></block></custom-block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="t1"/></block><l>str</l></block><script><block s="doIf"><block s="reportIsA"><block var="t2"/><l><option>number</option></l></block><script><custom-block s="error %txt"><l>user:Cannot assign non-string value to string type var</l></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block var="t1"/></block><l>str</l><block var="t2"/></custom-block></script><script><custom-block s="error %txt"><l>unknown var type</l></custom-block></script></block></script></block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>pause</l><comment w="90" collapsed="true">PAUSE</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Pause duration must be a number</l></custom-block></script></block><block s="doWait"><block s="reportQuotient"><block var="t0"/><l>1000</l></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>for</l><comment w="90" collapsed="true">FOR</comment></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>3</l><block var="tokens"/></block><l>=</l></block></block><script><custom-block s="error %txt"><l>user:Missing equals sign</l></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportListIndex"><l>to</l><block var="tokens"/></block></block><script><custom-block s="error %txt"><l>user:To what? There&apos;s no "to".</l></custom-block></script></block><block s="doSetVar"><l>t1</l><block s="reportListItem"><l>2</l><block var="tokens"/></block><comment w="90" collapsed="true">variable definition</comment></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportIsA"><block var="t1"/><l><option>list</option></l></block></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="t1"/></block><l>var</l></block></block></block><script><custom-block s="error %txt"><l>user:Invalid variable name</l></custom-block></script></block><block s="doSetVar"><l>t2</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>4</l><block var="tokens"/></block></block></custom-block></block><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="t1"/></block><l>num</l></block><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t2"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Cannot assign non-number value to number type var</l></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block var="t1"/></block><l>num</l><block var="t2"/></custom-block></script><script><custom-block s="error %txt"><l>user:Expected number-type var, not int/str</l></custom-block></script></block><block s="doSetVar"><l>t1</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>6</l><block var="tokens"/></block></block></custom-block><comment w="90" collapsed="true">limit (to)</comment></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t1"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Limit must be a number</l></custom-block></script></block><block s="doSetVar"><l>t2</l><l>1</l><comment w="90" collapsed="true">step</comment></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListIndex"><l>step</l><block var="tokens"/></block><l>0</l></block><script><block s="doSetVar"><l>t2</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>8</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t2"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Step must be a number</l></custom-block></script></block></script></block><block s="doAddToList"><block s="reportNewList"><list><block var="currLine"/><block s="reportListItem"><l>3</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block><block var="t1"/><block var="t2"/></list></block><block var="loop stack"/><comment w="90" collapsed="false">start&#xD;varname&#xD;limit&#xD;step</comment></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>next</l><comment w="90" collapsed="true">NEXT</comment></block><script><block s="doSetVar"><l>t1</l><block s="reportListItem"><l><option>last</option></l><block var="loop stack"/></block></block><block s="doIf"><block s="reportEquals"><block var="t1"/><l></l></block><script><custom-block s="error %txt"><l>user:Next without for</l></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block><l>var</l></block></block><script><custom-block s="error %txt"><l>user:Not a var</l></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>3</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block><block s="reportListItem"><l>2</l><block var="t1"/></block></block></block><script><custom-block s="error %txt"><l>user:Var undefined or not for a FOR</l></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block><l>num</l><block s="reportSum"><custom-block s="get variable %txt"><block s="reportListItem"><l>3</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block><block s="reportListItem"><l>4</l><block var="t1"/></block></block></custom-block><block s="doIfElse"><block s="reportOr"><block s="reportLessThan"><custom-block s="get variable %txt"><block s="reportListItem"><l>3</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block><block s="reportListItem"><l>3</l><block var="t1"/></block></block><block s="reportEquals"><custom-block s="get variable %txt"><block s="reportListItem"><l>3</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block><block s="reportListItem"><l>3</l><block var="t1"/></block></block></block><script><block s="doSetVar"><l>currLine</l><block s="reportListItem"><l>1</l><block var="t1"/></block></block></script><script><block s="doDeleteFromList"><l><option>last</option></l><block var="loop stack"/></block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tgoto</l><comment w="90" collapsed="true">TGOTO</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:First argument not a number</l></custom-block></script></block><block s="doSetVar"><l>t1</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>4</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t1"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Second argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="gotoXY"><block var="t0"/><block var="t1"/></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tdown</l><comment w="90" collapsed="false">TDOWN</comment></block><script><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><block s="clear"></block></script></block><block s="doSetVar"><l>drawing?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="down"></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tup</l><comment w="90" collapsed="false">TUP</comment></block><script><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="up"></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tmove</l><comment w="90" collapsed="false">TMOVE</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="forward"><block var="t0"/></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tturn</l><comment w="90" collapsed="false">TTURN</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="turn"><block var="t0"/></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tclear</l><comment w="90" collapsed="false">TCLEAR</comment></block><script><block s="clear"></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>input</l><comment w="90" collapsed="false">INPUT</comment></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><l>var</l></block></block><script><custom-block s="error %txt"><l>user:Need variable to assign to</l></custom-block></script></block><block s="doIf"><block s="reportNot"><block var="printMode"/></block><script><block s="doAddToList"><l></l><block var="output"/></block></script></block><block s="doIfElse"><block s="reportEquals"><block s="reportListIndex"><l>;</l><block var="tokens"/></block><l>0</l><comment w="90" collapsed="true">there is no semicolon</comment></block><script><block s="doReplaceInList"><l><option>last</option></l><block var="output"/><block s="reportJoinWords"><list><block s="reportListItem"><l><option>last</option></l><block var="output"/></block><l>?</l></list></block></block><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><custom-block s="draw %l"><block var="output"/></custom-block></script></block><block s="doAsk"><l></l></block><block s="doUntil"><block s="reportOr"><block s="reportIsA"><block s="getLastAnswer"></block><l><option>number</option></l></block><block s="reportEquals"><block s="reportListItem"><l>2</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><l>str</l></block></block><script><block s="doAsk"><l>Reenter; invalid type</l></block></script></block><block s="doReplaceInList"><l><option>last</option></l><block var="output"/><block s="reportJoinWords"><list><block s="reportListItem"><l><option>last</option></l><block var="output"/></block><block s="getLastAnswer"></block></list></block></block><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><custom-block s="draw %l"><block var="output"/></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><block s="getLastAnswer"></block></custom-block></script><script><block s="doReplaceInList"><l><option>last</option></l><block var="output"/><block s="reportJoinWords"><list><block s="reportListItem"><l><option>last</option></l><block var="output"/></block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></list></block></block><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><custom-block s="draw %l"><block var="output"/></custom-block></script></block><block s="doAsk"><block s="reportListItem"><l><option>last</option></l><block var="output"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportIsA"><block s="getLastAnswer"></block><l><option>number</option></l></block><block s="reportEquals"><block s="reportListItem"><l>2</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><l>str</l></block></block><script><block s="doAsk"><block s="reportJoinWords"><list><l>[REENTER] </l><block s="reportListItem"><l><option>last</option></l><block var="output"/></block></list></block></block></script></block><block s="doReplaceInList"><l><option>last</option></l><block var="output"/><block s="reportJoinWords"><list><block s="reportListItem"><l><option>last</option></l><block var="output"/></block><block s="getLastAnswer"></block></list></block></block><block s="doIf"><block s="reportNot"><block var="drawing?"/></block><script><custom-block s="draw %l"><block var="output"/></custom-block></script></block><custom-block s="set variable %txt of type %txt to %s"><block s="reportListItem"><l>3</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l><option>last</option></l><block var="tokens"/></block></block><block s="getLastAnswer"></block></custom-block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>if</l><comment w="90" collapsed="false">IF</comment></block><script><block s="doSetVar"><l>t0</l><block s="reportListIndex"><l>then</l><block var="tokens"/></block></block><block s="doIf"><block s="reportEquals"><block var="t0"/><l>0</l></block><script><custom-block s="error %txt"><l>user:Missing then</l></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block><l>0</l></block></block><script><block s="doReport"><custom-block s="run expression %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>4</l><block var="tokens"/></block></block></custom-block></block></script></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>thue</l><comment w="90" collapsed="false">THUE</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setPenHSVA"><l><option>hue</option></l><l></l></block></script><list></list></block><list><block var="t0"/></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tsat</l><comment w="90" collapsed="false">TSAT</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setPenHSVA"><l><option>saturation</option></l><l></l></block></script><list></list></block><list><block var="t0"/></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tbri</l><comment w="90" collapsed="false">TBRI</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="setPenHSVA"><l><option>brightness</option></l><l></l></block></script><list></list></block><list><block var="t0"/></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>thuec</l><comment w="90" collapsed="false">THUEC</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="changePenHSVA"><l><option>hue</option></l><l></l></block></script><list></list></block><list><block var="t0"/></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tsatc</l><comment w="90" collapsed="false">TSATC</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="changePenHSVA"><l><option>saturation</option></l><l></l></block></script><list></list></block><list><block var="t0"/></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="tokens"/></block><l>tbric</l><comment w="90" collapsed="false">TBRIC</comment></block><script><block s="doSetVar"><l>t0</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="tokens"/></block></block></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="t0"/><l><option>number</option></l></block></block><script><custom-block s="error %txt"><l>user:Argument not a number</l></custom-block></script></block><block s="doTellTo"><l>turtle</l><block s="reifyScript"><script><block s="changePenHSVA"><l><option>brightness</option></l><l></l></block></script><list></list></block><list><block var="t0"/></list></block></script><script><custom-block s="error %txt"><l>user:Invalid command</l></custom-block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block><block s="doReport"><l>-1</l></block></script><scripts><script x="578.6718750000002" y="1462.199999999999"><block s="reportListItem"><l><option>last</option></l><block var="sub stack"/></block></script><script x="613.0000000000002" y="322.16666666666606"><custom-block s="parse expression %txt report obj? %b"><custom-block s="after %n of %l until %predRing"><block var="t0"/><block var="tokens"/><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l>;</l></block></autolambda><list></list></block></custom-block><l><bool>false</bool></l></custom-block></script><script x="623.8896484375" y="744.166666666667"><custom-block s="parse expression %txt report obj? %b"><custom-block s="after %n of %l"><l>1</l><block var="tokens"/></custom-block><l><bool>true</bool></l></custom-block></script><script x="585" y="642.666666666667"><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>const</l></block></script><script x="484.6416015625" y="529.9999999999991"><block s="reportNot"><l/></block></script><script x="467.8896484375" y="839.1666666666671"><custom-block s="parse expression %txt report obj? %b"><custom-block s="after %n of %l"><l>1</l><block var="tokens"/></custom-block><l><bool>true</bool></l></custom-block></script><script x="574" y="1002.8333333333331"><block s="reportNot"><block s="reportAnd"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="t0"/></block><l>const</l></block><block s="reportEquals"><block s="reportModulus"><custom-block s="get value of %l"><block var="t0"/></custom-block><l>1</l></block><l>0</l></block></block></block></script><script x="578.0000000000002" y="1122.0333333333328"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="line pointers"/></block></block></script><script x="364.9921875" y="1654.3333333333312"><block s="reportListItem"><l>2</l><block var="t1"/></block></script><script x="409.6416015625" y="1922.9999999999968"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="t2"/></block><l>string</l></block></block></script><script x="455.33333333333326" y="2256.2000000000003"><custom-block s="eval exprtree %l"><l/></custom-block></script><script x="546" y="2513.9999999999986"><custom-block s="parse expression %txt report obj? %b"><custom-block s="after %n of %l until %predRing"><l>3</l><block var="tokens"/><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l>to</l></block></autolambda><list></list></block></custom-block><l><bool>true</bool></l></custom-block></script><script x="419.6416015625" y="2780.166666666665"><block s="reportEquals"><l></l><l>const</l></block></script><script x="519.6757812500002" y="3755.666666666658"><custom-block s="get value of %l"><l/></custom-block></script><script x="548.2080078125002" y="3715.666666666658"><custom-block s="get value of %l"><l/></custom-block></script></scripts></block-definition><block-definition s="print %&apos;txt&apos; to output" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportNot"><block var="printMode"/></block><script><block s="doAddToList"><l></l><block var="output"/></block></script></block><block s="doReplaceInList"><l><option>last</option></l><block var="output"/><block s="reportJoinWords"><list><block s="reportListItem"><l><option>last</option></l><block var="output"/></block><block var="txt"/></list></block></block></script></block-definition><block-definition s="ask for files of types %&apos;types&apos;" type="command" category="sensing"><comment x="0" y="0" w="451.7978515625001" collapsed="false">Opens the file select dialog. When the user has changed the selected files, the message &quot;file input changed&quot; will be broadcasted. &#xD;&#xD;To make it accept only a certain file extension, write the file extension, including the dot, or the MIME type (e.g. &quot;.txt&quot;, &quot;text/plain&quot;) in the text field. You can make it accept multiple file extension types by adding more text fields.&#xD;&#xD;Remove all input fields to make it accept all files. </comment><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>typesList</l></list><l>var input = document.getElementById("fileInput");&#xD;&#xD;if (input === null) {&#xD;  input = document.createElement("input");&#xD;  input.type = "file";&#xD;  input.id = "fileInput";&#xD;  input.style = "position:absolute;display:none;"&#xD;  input.multiple = true;&#xD;  document.body.appendChild(input);&#xD;&#xD;  input.onchange = function() {&#xD;    //tell IDE morph to broadcast&#xD;    world.children[0].broadcast("file input changed");&#xD;  }&#xD;}&#xD;&#xD;var types = typesList.asArray();&#xD;&#xD;//compile types list to comma separated list&#xD;var accept = "";&#xD;&#xD;if (types.length &gt; 0) {&#xD;  for (let i in types) {&#xD;    let v = types[i];&#xD;    &#xD;    if (typeof v == "string") {&#xD;      accept += v&#xD;    }&#xD;    &#xD;    if (i + 1 &lt; types.length) { //last item doesn&apos;t have a comma at the end&#xD;      accept += ","&#xD;    }&#xD;  }&#xD;} else {&#xD;  accept = "*.*"; //i think that means all files&#xD;}&#xD;&#xD;input.accept = accept; &#xD;input.click();</l></block><list><block var="types"/></list></block></script></block-definition><block-definition s="imported files" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>var input = document.getElementById("fileInput");&#xD;&#xD;return input === null ? new List() : new List(input.files);</l></block><list></list></block></block></script></block-definition><block-definition s="%&apos;prop&apos; of file %&apos;file&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Gets an attribute of a file.&#xD;&#xD;The last modified attribute reports the time the file was last modified in milliseconds since the Unix epoch (Jan 1, 1970, 12:00 AM)</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">name<options>name&#xD;size&#xD;type&#xD;last modified</options></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="prop"/><l>name</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.name;</l></block><list><block var="file"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="prop"/><l>size</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.size;</l></block><list><block var="file"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="prop"/><l>type</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.type;</l></block><list><block var="file"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="prop"/><l>last modified</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.lastModified;</l></block><list><block var="file"/></list></block></block></script></block></script></block-definition><block-definition s="read file %&apos;file&apos; as %&apos;type&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Reads a file as a certain type.&#xD;&#xD;The binary string type is the file&apos;s actual contents in binary (I think). So can someone please make a MIDI player with my library.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">text<options>text&#xD;binary string&#xD;costume&#xD;vector costume&#xD;sound</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>file</l><l>type</l><l>process</l></list><l>if (!(file instanceof File)) throw new Error("Not a file");&#xD;&#xD;var reader = new FileReader();&#xD;&#xD;var isMedia = type == "costume" || type == "vector costume" || type == "sound";&#xD;&#xD;reader.addEventListener("load", function() {&#xD;    var res = reader.result;&#xD;&#xD;    if (type == "costume" || type == "vector costume") {&#xD;        var img = document.createElement("img");&#xD;        &#xD;        img.onload = function() {&#xD;          //for bitmap costume&#xD;          if (type == "costume") {&#xD;            var canvas = document.createElement("canvas");&#xD;            canvas.width = img.width;&#xD;            canvas.height = img.height;&#xD;            canvas.getContext("2d").drawImage(img, 0, 0);&#xD;&#xD;            res = new Costume(canvas, file.name);&#xD;          } else if (type == "vector costume") { //for vector costume&#xD;            res = new SVG_Costume(img, file.name);&#xD;          }&#xD;&#xD;          process.homeContext.variables.setVar("res", res);&#xD;          process.resume()&#xD;        }&#xD;&#xD;        img.src = res;&#xD;    } else if (type == "sound") {&#xD;       var audioElem = document.createElement("audio");&#xD;&#xD;       audioElem.type = file.type;&#xD;       audioElem.src = res;&#xD;&#xD;       res = new Sound(audioElem, file.name);&#xD;       process.homeContext.variables.setVar("res", res);&#xD;       process.resume(); &#xD;    } else {&#xD;        process.homeContext.variables.setVar("res", res);&#xD;        process.resume();&#xD;    }&#xD;})&#xD;    &#xD;if (isMedia) {&#xD;  if (type == "costume" &amp;&amp; file.type.slice(0, 6) != "image/") throw new Error("Not an image file");&#xD;  if (type == "vector costume" &amp;&amp; file.type != "image/svg+xml") throw new Error("Not an SVG file");&#xD;  if (type == "sound" &amp;&amp; file.type.slice(0, 6) != "audio/") throw new Error("Not an audio file");&#xD;&#xD;  reader.readAsDataURL(file);&#xD;} else if (type == "text") {&#xD;  reader.readAsText(file);&#xD;} else if (type == "binary string") {&#xD;  reader.readAsBinaryString(file);&#xD;} else {&#xD;  throw new Error("Incorrect type");&#xD;}&#xD;&#xD;process.homeContext.variables.addVar("res")&#xD;process.pause();</l></block><list><block var="file"/><block var="type"/></list></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.getVar(varName);</l></block><list><l>res</l></list></block><comment w="90" collapsed="false">stolen from the variables library</comment></block></script></block-definition><block-definition s="clear imported files" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var input = document.getElementById("fileInput");&#xD;&#xD;//replace file input with new one&#xD;if (input !== null) {&#xD;  document.body.removeChild(input);&#xD;&#xD;  input = document.createElement("input");&#xD;  input.type = "file";&#xD;  input.id = "fileInput";&#xD;  input.style = "position:absolute;display:none;"&#xD;  input.multiple = true;&#xD;  document.body.appendChild(input);&#xD;&#xD;  input.onchange = function() {&#xD;    //tell IDE morph to broadcast&#xD;    world.children[0].broadcast("file input changed");&#xD;  }&#xD;}</l></block><list></list></block></script></block-definition><block-definition s="ask for files of types %&apos;types&apos; and wait" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">See help for &quot;ask for files of types&quot;.&#xD;&#xD;The block will yield indefinitely if the user cancels the operation. I don&apos;t even know why I added this in the first place.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input></inputs><script><custom-block s="clear imported files"></custom-block><custom-block s="ask for files of types %mult%txt"><block var="types"/></custom-block><block s="doWaitUntil"><block s="reportNot"><block s="reportListIsEmpty"><custom-block s="imported files"></custom-block></block></block></block></script></block-definition><block-definition s="is %&apos;file&apos; a %&apos;type&apos; file?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%txt" readonly="true">text<options>image&#xD;audio&#xD;video&#xD;text&#xD;SVG&#xD;MIDI&#xD;any</options></input></inputs><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return !(file instanceof File);</l></block><list><block var="file"/></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="type"/><l>any</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="type"/><l>MIDI</l></block><script><block s="doReport"><block s="reportEquals"><l>mid</l><block s="reportListItem"><l>2</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>/</l></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="type"/><l>SVG</l></block><script><block s="doReport"><block s="reportEquals"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>image/svg+xml</l></block></block></script></block><block s="doReport"><block s="reportEquals"><block var="type"/><block s="reportListItem"><l>1</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>/</l></block></block></block></block></script></block-definition><block-definition s="expression tree %&apos;tokens&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>tree</l><l>op</l><l>v1</l><l>v2</l></list></block><block s="doSetVar"><l>tree</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>token</l><block var="tokens"/><script><block s="doIfElse"><block s="reportIsA"><block var="token"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="token"/></block><l>const</l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="token"/></block><l>string</l></block></block><script><block s="doAddToList"><custom-block s="get value of %l"><block var="token"/></custom-block><block var="tree"/></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="token"/></block><l>paren</l></block><script><block s="doAddToList"><custom-block s="expression tree %l"><block s="reportListItem"><l>2</l><block var="token"/></block></custom-block><block var="tree"/></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="token"/></block><l>var</l></block><script><block s="doAddToList"><block s="reportNewList"><list><l>var</l><block s="reportListItem"><l>3</l><block var="token"/></block></list></block><block var="tree"/></block></script><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="token"/></block><l>func</l></block><script><block s="doAddToList"><block s="reportNewList"><list><l>f</l><block s="reportListItem"><l>2</l><block var="token"/></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="expression tree %l"><l/></custom-block></autolambda><list></list></block><block s="reportListItem"><l>3</l><block var="token"/></block></block></list></block><block var="tree"/></block></script></block></script></block></script></block></script></block></script><script><block s="doAddToList"><block var="token"/><block var="tree"/></block></script></block></script><comment w="90" collapsed="false">Put token data into tree for build</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>not</l></block><script><block s="doChangeVar"><l>i</l><l>0</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/></list></block></block></script></block></script><comment w="90" collapsed="false">NOT</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>^</l></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">E</comment></block><block s="doFor"><l>i</l><l></l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>!</l></block><script><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/></list></block></block></script></block></script><comment w="90" collapsed="false">negate</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="op"/><l>*</l></block><block s="reportEquals"><block var="op"/><l>/</l></block></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">MD</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="op"/><l>+</l></block><block s="reportEquals"><block var="op"/><l>-</l></block></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">AS</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>=&gt;</l></block><script><block s="doSetVar"><l>op</l><l>&gt;=</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>=&lt;</l></block><script><block s="doSetVar"><l>op</l><l>&lt;=</l></block></script></block><block s="doIf"><block s="reportOr"><block s="reportOr"><block s="reportEquals"><block var="op"/><l>&gt;</l></block><block s="reportEquals"><block var="op"/><l>&lt;</l></block></block><block s="reportOr"><block s="reportEquals"><block var="op"/><l>&gt;=</l></block><block s="reportEquals"><block var="op"/><l>&lt;=</l></block></block></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">Greater/lesser</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>&gt;&lt;</l></block><script><block s="doSetVar"><l>op</l><l>&lt;&gt;</l></block></script></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="op"/><l>&lt;&gt;</l></block><block s="reportEquals"><block var="op"/><l>=</l></block></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">(Not)Equals</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>and</l></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">AND</comment></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="tree"/></block><script><block s="doSetVar"><l>v1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>v2</l><block s="reportListItem"><block s="reportSum"><block var="i"/><l>1</l></block><block var="tree"/></block></block><block s="doSetVar"><l>op</l><block s="reportListItem"><block var="i"/><block var="tree"/></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>or</l></block><script><block s="doChangeVar"><l>i</l><l>-1</l></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doDeleteFromList"><block var="i"/><block var="tree"/></block><block s="doReplaceInList"><block var="i"/><block var="tree"/><block s="reportNewList"><list><block var="op"/><block var="v1"/><block var="v2"/></list></block></block></script></block></script><comment w="90" collapsed="false">OR</comment></block><block s="doReport"><block var="tree"/></block></script></block-definition><block-definition s="eval exprtree %&apos;expr&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="expr"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="expr"/></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>var</l></block><script><block s="doReport"><custom-block s="get variable %txt"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>f</l></block><script><block s="doReport"><block s="evaluate"><block s="reportListItem"><block s="reportListItem"><l>2</l><block var="expr"/></block><block var="functionMaps"/></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="eval exprtree %l"><l/></custom-block></autolambda><list></list></block><block s="reportListItem"><l>3</l><block var="expr"/></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>!</l></block><script><block s="doReport"><block s="reportDifference"><l></l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>^</l></block><script><block s="doReport"><block s="reportPower"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>+</l></block><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>a</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block></block><block s="doSetVar"><l>b</l><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportIsA"><block var="a"/><l><option>number</option></l></block></block><block s="reportNot"><block s="reportIsA"><block var="b"/><l><option>number</option></l></block></block></block><script><block s="doReport"><block s="reportJoinWords"><list><block var="a"/><block var="b"/></list></block></block></script></block><block s="doReport"><block s="reportSum"><block var="a"/><block var="b"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>-</l></block><script><block s="doReport"><block s="reportDifference"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>*</l></block><script><block s="doReport"><block s="reportProduct"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>/</l></block><script><block s="doReport"><block s="reportQuotient"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>not</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><l>0</l></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>and</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportAnd"><block s="reportNot"><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><l>0</l></block></block><block s="reportNot"><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block><l>0</l></block></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>or</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportOr"><block s="reportNot"><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><l>0</l></block></block><block s="reportNot"><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block><l>0</l></block></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>&gt;</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportGreaterThan"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>&lt;</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportLessThan"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>=</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>&gt;=</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportNot"><block s="reportLessThan"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>&lt;=</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportNot"><block s="reportGreaterThan"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="expr"/></block><l>&lt;&gt;</l></block><script><block s="doReport"><block s="reportSum"><l></l><block s="reportNot"><block s="reportEquals"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>2</l><block var="expr"/></block></custom-block><custom-block s="eval exprtree %l"><block s="reportListItem"><l>3</l><block var="expr"/></block></custom-block></block></block></block></block></script></block><block s="doReport"><custom-block s="eval exprtree %l"><block s="reportListItem"><l>1</l><block var="expr"/></block></custom-block></block></script><scripts><script x="486" y="1273.5333333333333"><block s="reportNot"><block s="reportEquals"><l></l><l>0</l></block></block></script></scripts></block-definition><block-definition s="expressions in %&apos;tokens&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><custom-block s="let %upvar be %s"><l>spec</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>1</l><block var="tokens"/></block></block></autolambda><list></list></block><block var="command-specs"/></block></custom-block><block s="doIf"><block s="reportEquals"><block var="spec"/><l></l></block><script><block s="doReport"><block var="tokens"/></block></script></block><block s="doDeclareVariables"><list><l>exprTokens</l><l>j</l><l>i</l><l>start</l></list></block><block s="doSetVar"><l>exprTokens</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>j</l><l>2</l></block><block s="doSetVar"><l>start</l><l>2</l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="j"/><block s="reportListLength"><block var="spec"/></block></block><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><l>1</l><block s="reportListItem"><block var="j"/><block var="spec"/></block></block><l>%</l></block></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportNot"><block s="reportGreaterThan"><block var="i"/><block s="reportListLength"><block var="tokens"/></block></block></block><block s="reportEquals"><block s="reportListItem"><block s="reportSum"><block var="j"/><l>1</l></block><block var="spec"/></block><l>%scln-rep</l></block></block><script><block s="doChangeVar"><l>j</l><l>-1</l></block><block s="doChangeVar"><l>i</l><l>1</l></block></script><script><block s="doChangeVar"><l>j</l><l>1</l></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doSetVar"><l>start</l><block var="i"/></block></script><script><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListItem"><block var="i"/><block var="tokens"/></block><block s="reportListItem"><block s="reportSum"><block var="j"/><l>1</l></block><block var="spec"/></block></block><block s="reportGreaterThan"><block var="i"/><block s="reportListLength"><block var="tokens"/></block></block></block><script><block s="doIf"><block s="reportOr"><block s="reportEquals"><block s="reportListItem"><block var="j"/><block var="spec"/></block><l>%expr</l></block><block s="reportEquals"><block s="reportListItem"><block var="j"/><block var="spec"/></block><l>%cmd</l></block></block><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><block var="tokens"/></block><block var="exprTokens"/></block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="exprTokens"/></block></block><script><block s="doRepeat"><block s="reportDifference"><block s="reportDifference"><block var="i"/><block var="start"/></block><l>1</l></block><script><block s="doDeleteFromList"><block var="start"/><block var="tokens"/></block></script></block><block s="doReplaceInList"><block var="start"/><block var="tokens"/><block s="reportIfElse"><block s="reportEquals"><block s="reportListItem"><block var="j"/><block var="spec"/></block><l>%cmd</l></block><block s="reportNewList"><list><l>cmd</l><custom-block s="expressions in %l"><block var="exprTokens"/></custom-block></list></block><block s="reportNewList"><list><l>expr</l><custom-block s="expression tree %l"><block var="exprTokens"/></custom-block></list></block></block></block><block s="doSetVar"><l>exprTokens</l><block s="reportNewList"><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block s="reportSum"><block var="start"/><l>1</l></block></block><block s="doSetVar"><l>start</l><block var="i"/></block><block s="doChangeVar"><l>j</l><l>1</l></block></script></block></script></block><block s="doReport"><block var="tokens"/></block></script><scripts><script x="432.98339843750114" y="437.0000000000001"><block var="exprTokens"/></script><script x="328" y="692.6666666666638"><block s="doChangeVar"><l>start</l><l>2</l></block></script><script x="366.8369140625" y="913.3333333333303"><block s="reportSum"><l></l><l>1</l></block></script><script x="342.998046875" y="743.833333333331"><block s="reportSum"><l></l><l>1</l></block></script></scripts></block-definition></blocks><variables><variable name="console"><list struct="atomic" id="8441">&quot;10 PRINT &quot;&quot;Hello, world!&quot;&quot;&quot;,20 GOTO 10</list></variable><variable name="console scroll"><l>0</l></variable><variable name="console rows"><l>30</l></variable><variable name="console textheight"><l>12</l></variable><variable name="output"><list struct="atomic" id="8442">Initializing program...,Running program...,------------------,you lost :(,----------------------------------------,&quot;Program done. Write &quot;&quot;-&quot;&quot; to exit&quot;</list></variable><variable name="isRunning?"><bool>false</bool></variable><variable name="variables"><list id="8443"><item><list struct="atomic" id="8444">PX,num,-30</list></item><item><list struct="atomic" id="8445">PY,num,-150</list></item><item><list struct="atomic" id="8446">PW,num,50</list></item><item><list struct="atomic" id="8447">BX,num,-40</list></item><item><list struct="atomic" id="8448">BY,num,-160</list></item><item><list struct="atomic" id="8449">BXV,num,-10</list></item><item><list struct="atomic" id="8450">BYV,num,-10</list></item></list></variable><variable name="functionMaps"><list id="8451"><item><context id="8452"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>sin</option></l><block s="reportProduct"><block s="reportQuotient"><l></l><custom-block s="pi"></custom-block></block><l>180</l></block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><context id="8465"><inputs></inputs><variables></variables><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin></context></context></item><item><context id="8467"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>cos</option></l><block s="reportProduct"><block s="reportQuotient"><l></l><custom-block s="pi"></custom-block></block><l>180</l></block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8480"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>tan</option></l><block s="reportProduct"><block s="reportQuotient"><l></l><custom-block s="pi"></custom-block></block><l>180</l></block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8493"><inputs></inputs><variables></variables><block s="reportProduct"><block s="reportQuotient"><block s="reportMonadic"><l><option>asin</option></l><l></l></block><l>180</l></block><custom-block s="pi"></custom-block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8506"><inputs></inputs><variables></variables><block s="reportProduct"><block s="reportQuotient"><block s="reportMonadic"><l><option>acos</option></l><l></l></block><l>180</l></block><custom-block s="pi"></custom-block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8519"><inputs></inputs><variables></variables><block s="reportProduct"><block s="reportQuotient"><block s="reportMonadic"><l><option>atan</option></l><l></l></block><l>180</l></block><custom-block s="pi"></custom-block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8532"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>sqrt</option></l><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8538"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>e^</option></l><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8544"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>log</option></l><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8550"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>abs</option></l><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8556"><inputs><input>#1</input></inputs><variables></variables><block s="reportIfElse"><block s="reportEquals"><block var="#1"/><l>0</l></block><l>0</l><block s="reportIfElse"><block s="reportGreaterThan"><block var="#1"/><l>0</l></block><l>1</l><l>-1</l></block></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8573"><inputs></inputs><variables></variables><block s="reportRound"><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8578"><inputs></inputs><variables></variables><block s="reportMonadic"><l><option>floor</option></l><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8584"><inputs></inputs><variables></variables><block s="evaluate"><block s="reportJSFunction"><list><l>x</l></list><l>return Math.random() * x</l></block><list><l></l></list></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8597"><inputs></inputs><variables></variables><block s="reportModulus"><l></l><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8603"><inputs></inputs><variables></variables><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.lastKeyPressed;</l></block><list></list></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8614"><inputs></inputs><variables></variables><block s="reportStringSize"><l></l></block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8619"><inputs><input>str</input><input>n</input></inputs><variables></variables><custom-block s="slice %n %n in %txt"><l>1</l><block var="n"/><block var="str"/></custom-block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8626"><inputs><input>str</input><input>s</input><input>len</input></inputs><variables></variables><custom-block s="slice %n %n in %txt"><block var="s"/><block s="reportDifference"><block s="reportSum"><block var="s"/><block var="len"/></block><l>1</l></block><block var="str"/></custom-block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item><item><context id="8639"><inputs><input>str</input><input>n</input></inputs><variables></variables><custom-block s="slice %n %n in %txt"><block s="reportSum"><block s="reportDifference"><block s="reportStringSize"><block var="str"/></block><block var="n"/></block><l>1</l></block><block s="reportStringSize"><block var="str"/></block><block var="str"/></custom-block><receiver><ref id="1"></ref></receiver><origin><ref id="1"></ref></origin><ref id="8465"></ref></context></item></list></variable><variable name="functions"><list struct="atomic" id="8656">sin,cos,tan,asin,acos,atan,sqr,exp,log,abs,sgn,round,floor,rand,mod,getchar,len,left$,mid$,right$</list></variable><variable name="line pointers"><list id="8657"><item><list struct="atomic" id="8658">5,1</list></item><item><list struct="atomic" id="8659">10,2</list></item><item><list struct="atomic" id="8660">20,3</list></item><item><list struct="atomic" id="8661">30,4</list></item><item><list struct="atomic" id="8662">40,5</list></item><item><list struct="atomic" id="8663">50,6</list></item><item><list struct="atomic" id="8664">60,7</list></item><item><list struct="atomic" id="8665">70,8</list></item><item><list struct="atomic" id="8666">75,9</list></item><item><list struct="atomic" id="8667">80,10</list></item><item><list struct="atomic" id="8668">90,11</list></item><item><list struct="atomic" id="8669">1000,12</list></item><item><list struct="atomic" id="8670">1010,13</list></item><item><list struct="atomic" id="8671">1020,14</list></item><item><list struct="atomic" id="8672">1030,15</list></item><item><list struct="atomic" id="8673">1040,16</list></item><item><list struct="atomic" id="8674">1050,17</list></item><item><list struct="atomic" id="8675">1060,18</list></item><item><list struct="atomic" id="8676">1070,19</list></item><item><list struct="atomic" id="8677">1080,20</list></item><item><list struct="atomic" id="8678">1090,21</list></item><item><list struct="atomic" id="8679">1100,22</list></item><item><list struct="atomic" id="8680">1110,23</list></item><item><list struct="atomic" id="8681">1120,24</list></item><item><list struct="atomic" id="8682">1130,25</list></item><item><list struct="atomic" id="8683">1140,26</list></item><item><list struct="atomic" id="8684">1150,27</list></item><item><list struct="atomic" id="8685">1160,28</list></item><item><list struct="atomic" id="8686">1170,29</list></item><item><list struct="atomic" id="8687">1180,30</list></item><item><list struct="atomic" id="8688">1190,31</list></item><item><list struct="atomic" id="8689">1200,32</list></item><item><list struct="atomic" id="8690">2000,33</list></item><item><list struct="atomic" id="8691">2010,34</list></item><item><list struct="atomic" id="8692">2020,35</list></item><item><list struct="atomic" id="8693">2030,36</list></item><item><list struct="atomic" id="8694">3000,37</list></item><item><list struct="atomic" id="8695">3010,38</list></item><item><list struct="atomic" id="8696">3020,39</list></item><item><list struct="atomic" id="8697">3030,40</list></item><item><list struct="atomic" id="8698">4000,41</list></item><item><list struct="atomic" id="8699">4010,42</list></item><item><list struct="atomic" id="8700">4020,43</list></item><item><list struct="atomic" id="8701">4030,44</list></item><item><list struct="atomic" id="8702">5000,45</list></item><item><list struct="atomic" id="8703">5010,46</list></item><item><list struct="atomic" id="8704">5020,47</list></item><item><list struct="atomic" id="8705">5030,48</list></item><item><list struct="atomic" id="8706">5040,49</list></item><item><list struct="atomic" id="8707">6000,50</list></item><item><list struct="atomic" id="8708">6010,51</list></item><item><list struct="atomic" id="8709">6020,52</list></item></list></variable><variable name="reserved"><list struct="atomic" id="8710">print,let,if,then,else,goto,=,&gt;,&lt;,&lt;&gt;,&gt;=,&lt;=,and,or,not,gosub,return,to,for,step,next,rem,pause,input,&gt;&lt;,=&gt;,=&lt;,end,tgoto,tdown,tup,tmove,tturn,tclear,thue,tsat,tbri,thuec,tsatc,tbric</list></variable><variable name="loop stack"><list struct="atomic" id="8711"></list></variable><variable name="currLine"><l>53</l></variable><variable name="printMode"><bool>false</bool></variable><variable name="drawing?"><bool>true</bool></variable><variable name="sub stack"><list struct="atomic" id="8712">20</list></variable><variable name="command-specs"><list id="8713"><item><list struct="atomic" id="8714">print,%expr,;,%scln-rep</list></item><item><list struct="atomic" id="8715">let,%misc,=,%expr</list></item><item><list struct="atomic" id="8716">if,%expr,then,%cmd</list></item><item><list struct="atomic" id="8717">for,%misc,=,%expr,to,%expr,step,%expr</list></item><item><list struct="atomic" id="8718">next,%misc</list></item><item><list struct="atomic" id="8719">goto,%expr</list></item><item><list struct="atomic" id="8720">gosub,%expr</list></item><item><list struct="atomic" id="8721">pause,%expr</list></item><item><list struct="atomic" id="8722">input,%expr,;,%misc</list></item><item><list struct="atomic" id="8723">tgoto,%expr,&quot;,&quot;,%expr</list></item><item><list struct="atomic" id="8724">tmove,%expr</list></item><item><list struct="atomic" id="8725">tturn,%expr</list></item><item><list struct="atomic" id="8726">thue,%expr</list></item><item><list struct="atomic" id="8727">tsat,%expr</list></item><item><list struct="atomic" id="8728">tbri,%expr</list></item><item><list struct="atomic" id="8729">thuec,%expr</list></item><item><list struct="atomic" id="8730">tsatc,%expr</list></item><item><list struct="atomic" id="8731">tbric,%expr</list></item></list></variable></variables></project><media name="BASIC Interpreter" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>