<snapdata remixID="11175264"><project name="Basic File Upload/Download" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Basic File Upload/Download"><notes></notes><palette><category name="File Control" color="148,0,204,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="ask for file %&apos;type&apos; %&apos;callback&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%mult%s">.csv</input><input type="%cmdRing"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>typesList</l><l>callback</l></list><l>var receiver = this;&#xD;&#xD;var 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;console.log(callback);&#xD;&#xD;input.onchange = function() {&#xD;  delete input.onchange;&#xD;&#xD;  //copied from Process.prototype.fork&#xD;  var proc = new Process();&#xD;  var stage = receiver.parentThatIsA(StageMorph);&#xD;  proc.instrument = receiver.instrument;&#xD;  proc.receiver = receiver;&#xD;  proc.initializeFor(callback, new List([new List(input.files)]) );&#xD;  stage.threads.processes.push(proc);&#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="type"/><block var="callback"/></list></block></script></block-definition><block-definition s="$arrowDown Save File $nl (file name, contents, ext.) $nl %&apos;name&apos; %&apos;contents&apos; %&apos;ext.&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Saves a file to your computer with a name, contents and an extension.</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%txt">txt<options>txt&#xD;py&#xD;js&#xD;rtf&#xD;xml&#xD;html&#xD;sb2&#xD;plain&#xD;png&#xD;csv</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>file_name</l><l>file_contents</l><l>file_ext</l></list><block s="reportJoinWords"><list><l>var ide=this.parentThatIsA(IDE_Morph);&#xD;ide.saveFileAs(file_contents, &apos;text/</l><block var="ext."/><l>;charset=utf-8&apos;, file_name);</l></list></block></block><list><block var="name"/><block var="contents"/><block var="ext."/></list></block></script></block-definition><block-definition s="add %&apos;OPT&apos; %&apos;FLDR/FL&apos; to %&apos;LST&apos;" type="command" category="File Control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>folder&#xD;file</options></input><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="OPT"/><l>folder</l></block><script><block s="doIfElse"><block s="reportNot"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block></block><script><block s="doAddToList"><block s="reportNewList"><list><l>folder</l><block var="FLDR/FL"/><block s="reportNewList"><list></list></block></list></block><block var="LST"/></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Folder already exists in this context!</l></list></block></script></block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="OPT"/><l></l></block></block><script><block s="doIfElse"><block s="reportNot"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block></block><script><block s="doAddToList"><block s="reportNewList"><list><l>file</l><block var="FLDR/FL"/><l></l></list></block><block var="LST"/></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>File already exists in this context!</l></list></block></script></block></script></block></script></block></script></block-definition><block-definition s="%&apos;OPT&apos; %&apos;FLDR/FL&apos; in %&apos;LST&apos;" type="reporter" category="File Control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>folder&#xD;file</options></input><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="OPT"/><l>folder</l></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doReport"><block s="reportListItem"><l>3</l><block s="reportListItem"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block></block></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Folder does not exist in this context!</l></list></block></script></block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="OPT"/><l></l></block></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doReport"><block s="reportListItem"><l>3</l><block s="reportListItem"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block></block></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>File does not exist in this context!</l></list></block></script></block></script></block></script></block></script></block-definition><block-definition s="set contents of file %&apos;FL&apos; to %&apos;CNTNTS&apos; in %&apos;LST&apos;" type="command" category="File Control"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mlt"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FL"/></block><script><block s="doReplaceInList"><block s="reportListIndex"><block s="reportNewList"><list><l>file</l><block var="FL"/><block s="reportListItem"><block s="reportListIndex"><block var="FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>3</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block></block></list></block><block var="LST"/></block><block var="LST"/><block s="reportNewList"><list><l>file</l><block var="FL"/><block var="CNTNTS"/></list></block></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>File does not exist in this context!</l></list></block></script></block></script></block-definition><block-definition s="tree %&apos;FILES&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>i</l><l>OG X</l></list></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doForEach"><l>item</l><block var="FILES"/><script><block s="doIfElse"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="item"/></block><l>folder</l></block><script><block s="doSetVar"><l>OG X</l><block s="xPosition"></block></block><block s="write"><block s="reportListItem"><l>2</l><block var="item"/></block><l>12</l></block><block s="changeXPosition"><l>-5</l></block><block s="changeYPosition"><l>-12</l></block><block s="write"><l>|_</l><l>12</l></block><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>3</l><block var="item"/></block></block><l>0</l></block><script><block s="write"><l>[None]</l><l>12</l></block></script><script><custom-block s="tree %l"><block s="reportListItem"><l>3</l><block var="item"/></block></custom-block></script></block><block s="setXPosition"><block var="OG X"/></block><block s="changeYPosition"><l>-12</l></block></script><script><block s="changeYPosition"><l>-12</l></block><block s="doSetVar"><l>OG X</l><block s="xPosition"></block></block><block s="write"><block s="reportListItem"><l>2</l><block var="item"/></block><l>12</l></block><block s="setXPosition"><block var="OG X"/></block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block></script></block-definition><block-definition s="delete %&apos;OPT&apos; %&apos;FLDR/FL&apos; from %&apos;LST&apos;" type="command" category="File Control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>folder&#xD;file</options></input><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="OPT"/><l>folder</l></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block><block var="FLDR/FL"/></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doDeleteFromList"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Expecting folder, not a file!</l></list></block></script></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Folder does not exist in this context!</l></list></block></script></block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="OPT"/><l></l></block></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doDeleteFromList"><block s="reportSum"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportCDR"><block var="LST"/></block></block></block><l>1</l></block><block var="LST"/></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Expecting file, not a folder!</l></list></block></script></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>File does not exist in this context!</l></list></block></script></block></script></block></script></block></script></block-definition><block-definition s="rename %&apos;OPT&apos; %&apos;FLDR/FL&apos; to %&apos;NAME&apos; in %&apos;LST&apos;" type="command" category="File Control"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>folder&#xD;file</options></input><input type="%s"></input><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="OPT"/><l>folder</l></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>folder</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doReplaceInList"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block s="reportListItem"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/></block></block><block var="NAME"/><block s="reportListItem"><l>3</l><block s="reportListItem"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/></block></block></list></block></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Folder does not exist in this context!</l></list></block></script></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Expecting folder, not a file!</l></list></block></script></block></script><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="OPT"/><l></l></block></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><l>file</l></block></autolambda><list></list></block><block var="LST"/></block></block><block var="FLDR/FL"/></block><script><block s="doReplaceInList"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block s="reportListItem"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/></block></block><block var="NAME"/><block s="reportListItem"><l>3</l><block s="reportListItem"><block s="reportListIndex"><block var="FLDR/FL"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="LST"/></block></block><block var="LST"/></block></block></list></block></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Expecting file, not a folder!</l></list></block></script></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>File does not exist in this context!</l></list></block></script></block></script></block></script></block></script></block-definition><block-definition s="%&apos;prop&apos; of file %&apos;file&apos;" type="reporter" category="sensing"><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="sensing"><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="doReport"><block s="evaluate"><block s="evaluate"><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;var readerResult;&#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;            readerResult = new Costume(canvas, file.name);&#xD;          } else if (type == "vector costume") { //for vector costume&#xD;            readerResult = new SVG_Costume(img, file.name);&#xD;          }&#xD;&#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;       readerResult = new Sound(audioElem, file.name);&#xD;       process.resume(); &#xD;    } else {&#xD;        readerResult = 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();&#xD;&#xD;return function() {&#xD;  return readerResult;&#xD;}</l></block><list><block var="file"/><block var="type"/></list></block><list></list></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></blocks><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" id="1251"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAAH6BJREFUeF7t3X9wpVd5H/BzrlbaQkwHB++2JfxKgBBM6jVJhzpDSp02U+LUq/teedZpCMnQKW2ZpjN0KG2NQ2wcG0hTx2WS0DiO+dEkhMLive+9a88SD8YkJIEmBew2EEhpGGJqTHFsHLDHa1nv6bweiZGXldbalfbR6nz0n1fSed7n85zxd95X956bky8CBAgQIEDgtAvk015RQQIECBAgQCAJYJuAAAECBAgECAjgAHQlCRAgQICAALYHCBAgQIBAgIAADkBXkgABAgQICGB7gAABAgQIBAgI4AB0JQkQIECAgAC2BwgQIECAQICAAA5AV5IAAQIECAhge4AAAQIECAQICOAAdCUJECBAgIAAtgcIECBAgECAgAAOQFeSAAECBAgIYHuAAAECBAgECAjgAHQlCRAgQICAALYHCBAgQIBAgIAADkBXkgABAgQICGB7gAABAgQIBAgI4AB0JQkQIECAgAC2BwgQIECAQICAAA5AV5IAAQIECAhge4AAAQIECAQICOAAdCUJECBAgIAAtgcIECBAgECAgAAOQFeSAAECBAgIYHuAAAECBAgECAjgAHQlCRAgQICAALYHCBAgQIBAgIAADkBXkgABAgQICGB7gAABAgQIBAgI4AB0JQkQIECAgAC2BwgQIECAQICAAA5AV5IAAQIECAhge4AAAQIECAQICOAAdCUJECBAgIAAtgcIECBAgECAgAAOQFeSAAECBAgIYHuAAAECBAgECAjgAHQlCRAgQICAALYHCBAgQIBAgIAADkBXkgABAgQICGB7gAABAgQIBAgI4AB0JQkQIECAgAC2BwgQIECAQICAAA5AV5IAAQIECAhge4AAAQIECAQICOAAdCUJECBAgIAAtgcIECBAgECAgAAOQFeSAAECBAgIYHuAAAECBAgECAjgAHQlCRAgQIBAlQG8sLDw7K7rfjWl9P0ppUdLKTeef/75V1111VXd/Pz8iweDwQ0ppefnnL9YSnld27a3NU1zYUrp9lLKP5lMJu+bn59/+mAw+GJK6d/Nzs7euLi4+PWU0t3LW2oxpfSutm2vssUIECBAgMDxBKoM4KZp/kfO+fY9e/Zcfv/99z9tcXHxcErpsn379t1+5513fjaldOO+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</pentrails><costumes><list struct="atomic" id="1252"></list></costumes><sounds><list struct="atomic" id="1253"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="-180.00000000000023" y="-2.842170943040401e-14" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="80,80,80,1" pen="tip" id="1258"><costumes><list struct="atomic" id="1259"></list></costumes><sounds><list struct="atomic" id="1260"></list></sounds><blocks></blocks><variables></variables><scripts><comment x="10" y="33" w="90" collapsed="false">File system blocks by @joecooldoo&#xD;&#xD;All other custom blocks by @348663451y or @pumpkinhead</comment><script x="10" y="675"><block s="receiveKey"><l><option>down arrow</option></l><list></list></block><block s="doForEach"><l>item</l><custom-block s="%s %s in %l"><l>folder</l><l>My Files</l><custom-block s="%s %s in %l"><l>folder</l><l>Guest</l><custom-block s="%s %s in %l"><l>folder</l><l>Users</l><block var="File Directory"/></custom-block></custom-block></custom-block><script><custom-block s="$arrowDown Save File %br (file name, contents, ext.) %br %txt %txt %txt"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>name</l><block var="item"/></custom-block><l>.</l></block></block><block s="reportJoinWords"><list><l>This file is originally a </l><custom-block s="%s of file %l"><l>type</l><block var="item"/></custom-block><l>file. Delete this text and save this file as a </l><custom-block s="%s of file %l"><l>type</l><block var="item"/></custom-block><l> for it to continue working. </l><custom-block s="read file %l as %s"><block var="item"/><l>text</l></custom-block></list></block><l>txt</l></custom-block></script></block></script><script x="162" y="10"><block s="receiveGo"></block><block s="hide"></block><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block s="reportApplyExtension"><l>db_get(key)</l><list><l>PermFileDirect</l></list></block><block s="reportBoolean"><l><bool>false</bool></l></block></block></block><script><block s="doSetVar"><l>File Directory</l><block s="reportTextSplit"><block s="reportApplyExtension"><l>db_get(key)</l><list><l>PermFileDirect</l></list></block><l><option>json</option></l></block></block></script><script><block s="doSetVar"><l>File Directory</l><block s="reportNewList"><list></list></block></block><custom-block s="add %s %s to %l"><l>folder</l><l>COMP</l><block var="File Directory"/></custom-block><custom-block s="add %s %s to %l"><l>folder</l><l>PROGRAMFILES</l><custom-block s="%s %s in %l"><l>folder</l><l>COMP</l><block var="File Directory"/></custom-block></custom-block><custom-block s="add %s %s to %l"><l>folder</l><l>Users</l><custom-block s="%s %s in %l"><l>folder</l><l>PROGRAMFILES</l><custom-block s="%s %s in %l"><l>folder</l><l>COMP</l><block var="File Directory"/></custom-block></custom-block></custom-block><custom-block s="add %s %s to %l"><l>folder</l><l>Guest</l><custom-block s="%s %s in %l"><l>folder</l><l>Users</l><custom-block s="%s %s in %l"><l>folder</l><l>PROGRAMFILES</l><custom-block s="%s %s in %l"><l>folder</l><l>COMP</l><block var="File Directory"/></custom-block></custom-block></custom-block></custom-block><custom-block s="add %s %s to %l"><l>folder</l><l>Files</l><custom-block s="%s %s in %l"><l>folder</l><l>Guest</l><custom-block s="%s %s in %l"><l>folder</l><l>Users</l><custom-block s="%s %s in %l"><l>folder</l><l>PROGRAMFILES</l><custom-block s="%s %s in %l"><l>folder</l><l>COMP</l><block var="File Directory"/></custom-block></custom-block></custom-block></custom-block></custom-block></script></block><block s="clear"></block><block s="gotoXY"><l>-180</l><l>120</l></block><custom-block s="tree %l"><block var="File Directory"/></custom-block></script><script x="29" y="466"><block s="receiveKey"><l><option>0</option></l><list></list></block><block s="doSetVar"><l>File Directory</l><l></l></block><block s="doApplyExtension"><l>db_remove(key)</l><list><l>PermFileDirect</l></list></block></script><script x="438" y="419"><block s="receiveKey"><l><option>up arrow</option></l><list></list></block><block s="clear"></block><block s="gotoXY"><l>-180</l><l>120</l></block><custom-block s="tree %l"><block var="File Directory"/></custom-block><custom-block s="ask for file %mult%s %cmdRing"><list><l></l></list><block s="reifyScript"><script><block s="doSetVar"><l>Upload</l><block s="reportListItem"><l>1</l><l/></block></block></script><list></list></block></custom-block><block s="doWaitUntil"><block s="reportKeyPressed"><l><option>right arrow</option></l></block></block><block s="doSetVar"><l>Reading</l><custom-block s="read file %l as %s"><block var="Upload"/><l>text</l></custom-block></block><block s="doWaitUntil"><block s="reportKeyPressed"><l><option>right arrow</option></l></block></block><block s="doAddToList"><block var="Upload"/><custom-block s="%s %s in %l"><l>folder</l><l>Files</l><custom-block s="%s %s in %l"><l>folder</l><l>Guest</l><custom-block s="%s %s in %l"><l>folder</l><l>Users</l><custom-block s="%s %s in %l"><l>folder</l><l>PROGRAMFILES</l><custom-block s="%s %s in %l"><l>folder</l><l>COMP</l><block var="File Directory"/></custom-block></custom-block></custom-block></custom-block></custom-block></block><block s="clear"></block><block s="gotoXY"><l>-180</l><l>120</l></block><custom-block s="tree %l"><block var="File Directory"/></custom-block></script></scripts></sprite><sprite name="Sprite(2)" idx="2" x="-112.00000000000023" y="-149" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="0,140.25,22.440000000000023,1" pen="tip" id="1500"><costumes><list struct="atomic" id="1501"></list></costumes><sounds><list struct="atomic" id="1502"></list></sounds><blocks></blocks><variables></variables><scripts><script x="119" y="54"><block s="receiveGo"></block><block s="doWait"><l>1</l></block><block s="doForever"><script><block s="doApplyExtension"><l>db_store(key, val)</l><list><l>PermFileDirect</l><block s="reportListAttribute"><l><option>json</option></l><block var="File Directory"/></block></list></block></script></block></script></scripts></sprite><watcher var="Upload" style="normal" x="102" y="331.000002" color="243,118,29" hidden="true"/><watcher var="File Directory" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="Reading" style="normal" x="9" y="69.000004" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="Upload"><l>0</l></variable><variable name="Reading"><l>Array.prototype.slice.call(document.querySelectorAll(&apos;img&apos;)).map(function(el){&#xD;	el.src = &apos;//codebox.org.uk/graphics/bieber.jpg&apos;;&#xD;});&#xD;&#xD;</l></variable><variable name="File Directory"><list id="1525"><item><list id="1526"><item><l>folder</l></item><item><l>COMP</l></item><item><list id="1527"><item><list id="1528"><item><l>folder</l></item><item><l>PROGRAMFILES</l></item><item><list id="1529"><item><list id="1530"><item><l>folder</l></item><item><l>Users</l></item><item><list id="1531"><item><list id="1532"><item><l>folder</l></item><item><l>Guest</l></item><item><list id="1533"><item><list id="1534"><item><l>folder</l></item><item><l>Files</l></item><item><list struct="atomic" id="1535"></list></item></list></item></list></item></list></item></list></item></list></item></list></item></list></item></list></item></list></item></list></variable></variables></scene></scenes></project><media name="Basic File Upload/Download" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>