//* comment *// Copyright (C) 2015 Ignacio Rodríguez This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . //* globals *// turtleHeaps = {}; //* flow:showHeap *// var block = logo.blocks.blockList[blk]; logo.textMsg(JSON.stringify(turtleHeaps[turtle])); //* flow:emptyHeap *// turtleHeaps[turtle] = []; //* flow:push *// var block = logo.blocks.blockList[blk]; var conns = block.connections; var arg = logo.parseArg(logo, turtle, conns[1]); if (!(turtle in turtleHeaps)) { turtleHeaps[turtle] = []; } turtleHeaps[turtle].push(arg); //* arg:pop *// var block = logo.blocks.blockList[blk]; if (turtle in turtleHeaps && turtleHeaps[turtle].length > 0) { block.value = turtleHeaps[turtle].pop(); } else { logo.errorMsg(_('empty heap')); block.value = null; } //* arg:heapEmpty *// var block = logo.blocks.blockList[blk]; if (turtle in turtleHeaps) { block.value = (turtleHeaps[turtle].length == 0); } else { block.value = true; } //* flow:saveHeap *// function downloadFile(filename, mimetype, content) { var download = document.createElement('a'); download.setAttribute('href', 'data:' + mimetype + ';charset=utf-8,' + content); download.setAttribute('download', filename); document.body.appendChild(download); download.click(); document.body.removeChild(download); }; var block = logo.blocks.blockList[blk]; var conns = block.connections; var arg = logo.parseArg(logo, turtle, conns[1]); if (arg && turtle in turtleHeaps) { downloadFile(arg, 'text/json', JSON.stringify(turtleHeaps[turtle])); }; //* flow:loadHeap *// var block = logo.blocks.blockList[blk]; var conns = block.connections; var arg = logo.parseArg(logo, turtle, conns[1]); if (turtle in turtleHeaps) { var oldHeap = turtleHeaps[turtle]; } else { var oldHeap = []; } if (blocks.blockList[conns[1]].name == 'loadFile') { if (!arg) { logo.errorMsg(_('You need to select a file.')); } else { if (arg.length != 2) { logo.errorMsg(_('You need to select a file.')); } else { try { turtleHeaps[turtle] = JSON.parse(arg[1]); if (!Array.isArray(turtleHeaps[turtle])) { throw 'is not array'; } } catch (e) { turtleHeaps[turtle] = oldHeap; logo.errorMsg(_('The file you selected does not contain a valid heap.')); } } } } else { logo.errorMsg(_('The loadHeap block needs a loadFile block.')) }; //* block:push *// var pushBlk = new ProtoBlock('push'); pushBlk.palette = palettes.dict['extras']; blocks.protoBlockDict['push'] = pushBlk; pushBlk.staticLabels.push(_('push')); pushBlk.adjustWidthToLabel(); pushBlk.oneArgBlock(); pushBlk.dockTypes[1] = 'anyin'; //* block:pop *// var popBlk = new ProtoBlock('pop'); popBlk.palette = palettes.dict['extras']; blocks.protoBlockDict['pop'] = popBlk; popBlk.staticLabels.push(_('pop')); popBlk.adjustWidthToLabel(); popBlk.parameterBlock(); //* block:showHeap *// var showHeap = new ProtoBlock('showHeap'); showHeap.palette = palettes.dict['extras']; blocks.protoBlockDict['showHeap'] = showHeap; showHeap.staticLabels.push(_('show heap')); showHeap.adjustWidthToLabel(); showHeap.zeroArgBlock(); //* block:heapEmpty *// var heapEmpty = new ProtoBlock('heapEmpty'); heapEmpty.palette = palettes.dict['extras']; blocks.protoBlockDict['heapEmpty'] = heapEmpty; heapEmpty.staticLabels.push(_('heap empty?')); heapEmpty.adjustWidthToLabel(); heapEmpty.booleanZeroArgBlock(); //* block:emptyHeap *// var emptyHeap = new ProtoBlock('emptyHeap'); emptyHeap.palette = palettes.dict['extras']; blocks.protoBlockDict['emptyHeap'] = emptyHeap; emptyHeap.staticLabels.push(_('empty heap')); emptyHeap.adjustWidthToLabel(); emptyHeap.zeroArgBlock(); //* block:saveHeap *// var saveHeap = new ProtoBlock('saveHeap'); saveHeap.palette = palettes.dict['extras']; blocks.protoBlockDict['saveHeap'] = saveHeap; saveHeap.staticLabels.push(_('save heap')); saveHeap.adjustWidthToLabel(); saveHeap.oneArgBlock(); saveHeap.defaults.push('heap.json'); saveHeap.dockTypes[1] = 'textin'; //* block:loadHeap *// var loadHeap = new ProtoBlock('loadHeap'); loadHeap.palette = palettes.dict['extras']; blocks.protoBlockDict['loadHeap'] = loadHeap; loadHeap.staticLabels.push(_('load heap')); loadHeap.adjustWidthToLabel(); loadHeap.oneArgBlock(); loadHeap.dockTypes[1] = 'filein'; loadHeap.defaults = [[null, null]];