Last active
September 12, 2017 18:10
-
-
Save mydoghasworms/f4fdde58882ecd14b2c9 to your computer and use it in GitHub Desktop.
Little Rebol program that demonstrates using 'parse' to interpret some rudimentary Logo commands with a turtle and visual interface
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REBOL [ | |
title: "Rudimentary implementation of Logo Turtle" | |
date: 2015-02-16 | |
author: "Martin Ceronio" | |
] | |
{ Load the turtle image; you can find the original at https://edu.kde.org/images/icons/kturtle_32.png Thanks, KTurtle! } | |
turtle-img: do to-string debase | |
{bWFrZSBpbWFnZSEgWzMyeDMyICN7CjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwNjdBMDcwNjdBMDcwNjdBMDcwNjdBMDcKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwNjdBMDcwNjdBMDcKMDY3QTA3MDY3QTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDg3QjA5MEE3RDBCMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDk3QzBBMEM3RTBEMEY4MDEwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3QTA3MDY3QTA3MDY3QTA3MDg3QjA5MEI3RDBDMEU3RjBGCjEwODExMTEzODMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3QTA3MDY3QTA3MDk3QzBBMEM3RTBECjBGODAxMDEyODIxMzEzODMxNDEzODMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjBFODAwRjExODIxMjE0ODQxNTE3ODYxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDY3QTA3MDY3QTA3MDY3QTA3MDY3QTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDEyODMxMzE1ODUxNjE4ODcxOTFCODkxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAzMjk5MzIzMjk5MzIzNTlCMzUzODlEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3QTA3MDY3QTA3MDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3ODYxODFBODgxQTFEOEExRDFGOEMyMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjk5MzIzMjk5MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3QTA3MDY3QTA3CjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCODkxQzFFOEIxRjIxOEQyMjI0OEYyNQowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjk5MzIzMjk5MzIwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjA2N0EwNzA2N0EwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBODgxQjFEOEExRTIwOEMyMDIzOEUyMwoyNjkwMjYyODkyMjkyQjk0MkMyRTk2MkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjk5MzIzMjk5MzIKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIxRjIxOEQyMgoyNDhGMjUyNzkxMjgyQTkzMkIyRDk2MkQzMDk4MzAzMzlBMzMwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAKMDAwMTAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBODgxQjFEOEExRTIwOEMyMQoyMzhFMjQyNjkxMjYyOTkzMjkyQzk1MkMyRTk3MkYzMTk5MzIzNDlCMzUzNzlEMzczQTlGM0EzREExM0QKNDBBMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEMyMAoyMjhFMjIyNTkwMjUyNzkyMjgyQTk0MkIyRDk2MkUzMDk4MzEzMzlBMzMzNjlDMzYzOTlFMzkzQ0EwM0MKM0VBMjNGNDFBNDQxNDRBNjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAyMzhGMjQyNjkxMjcyOTkzMkEyQzk1MkMyRjk3MkYzMjk5MzIzNTlCMzUzNzlEMzgzQTlGM0IKM0RBMTNENDBBMzQwNDNBNTQzNDZBNzQ2NDhBOTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoyMjhFMjMyMjhFMjMyNTkwMjYyODkyMjgyQjk0MkIyRDk2MkUzMDk4MzEzMzlBMzQzNjlDMzczOTlFMzkKM0NBMDNDM0ZBMjNGNDFBNDQyNDRBNjQ1NDdBODQ3NEFBQTRBNERBQzRENTBBRTUwNTNCMDUzNTNCMDUzCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAyNjkxMjcyNjkxMjcyOTkzMkEyQzk1MkQyRjk3MzAzMjk5MzIzNTlCMzUzODlEMzgKM0I5RjNCM0RBMTNFNDBBMzQwNDNBNTQzNDZBNzQ2NDlBOTQ5NENBQjRDNEVBRDRGNTFBRjUxNTRCMjU0CjU3QjQ1NzU3QjQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQjk0MkIyQjk0MkIyRTk2MkUzMTk4MzEzNDlBMzQzNjlDMzcKMzk5RTNBM0NBMDNDM0ZBMjNGNDJBNDQyNDVBNjQ1NDdBODQ4NEFBQTRBNERBRDRENTBBRjUwNTNCMTUzCjU2QjM1NjU5QjU1OTVDQjc1QjVDQjc1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjk3MzAyRjk3MzAzMjk5MzMzNTlCMzYKMzg5RDM4M0I5RjNCM0VBMjNFNDBBMzQxNDNBNTQ0NDZBODQ2NDlBQTQ5NENBQzRDNEZBRTRGNTJCMDUyCjU1QjI1NTU3QjQ1NzVBQjY1QTVEQjg1RDYwQkE2MDYwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDlBMzQzNDlBMzQKMzc5RDM3M0E5RjNBM0NBMTNEM0ZBMzQwNDJBNTQyNDVBNzQ1NDhBOTQ4NEJBQjRCNEVBRDRFNTBBRjUwCjUzQjE1MzU2QjM1NjU5QjU1OTVDQjc1QzVGQjk1RjYyQkI2MTY0QkQ2NDY0QkQ2NDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMzg5RTM5Mzg5RTM5M0JBMDNDM0VBMjNFNDFBNDQxNDRBNjQ0NDdBODQ3NDlBQTRBNENBQzRDNEZBRTRGCjUyQjA1MjU1QjI1NTU4QjQ1ODVCQjY1QjVEQjg1RDYwQkE2MDYzQkM2MzY2QkU2NjY5QzA2OTY5QzA2OQowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDJBNTQzNDVBNzQ1NDhBOTQ4NEJBQjRCNEVBRDRFCjUxQUY1MTU0QjE1NDU2QjM1NjU5QjU1OTVDQjc1QzVGQjk1RjYyQkI2MjY1QkQ2NTY4QkY2NzAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDdBODQ3NEFBQTRBNERBQzRECjRGQUU1MDUyQjA1MjU1QjI1NTU4QjQ1ODVCQjY1QjVFQjg1RTYxQkE2MTY0QkM2MzY2QkU2NjY5QzA2OQo2Q0MzNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDdBODQ3CjRBQUE0QTRGQUM0RjU0QjE1NDU3QjM1NzVBQjU1QTVDQjc1QzVGQjk1RjYyQkI2MjY1QkU2NTY4QzA2OAo2OUJGNjk2OUMwNjk2Q0MzNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDU4QjQ1ODU4QjQ1ODVCQjc1QjVFQjk1RTYxQkI2MTY0QkQ2NDY3QkY2Nwo2QUMxNjk2Q0MzNkM2OUJGNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjU1QjI1NTU1QjI1NTAwMDAwMDAwMDAwMDAwMDAwMDVEQjg1RDVEQjg1RDYwQkE2MDYzQkM2MjY1QkU2NQo2OEMwNjg2QkMyNkI2RUM0NkU3MUM2NzE3MUM2NzEwMDAwMDAwMDAwMDAwMDAwMDA4QkQ4OEE4QkQ4OEEKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDU1QjI1NTU1QjI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKOEJEODhBOEJEODhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDU1QjI1NTU1QjI1NTU1QjI1NTU1QjI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwOEJEODhBOEJEODhBOEJEODhBOEJEODhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1QjI1NTU1QjI1NTU1QjI1NTU1QjI1NTAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEJEODhBOEJEODhBOEJEODhBOEJEODhBMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAp9ICN7CkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRjAwMDAwMDAwMDAwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkYwMzAwMDAwMDAwCjAwRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGMDMwMDAwCjAwMDAwMEZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGMDAwMDAwCjAwMDAwMDAwMDAwMDAwRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRjAwCjAwMDAwMDAwMDAwMDAxMDIwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGMDAwMDAwMDAwMDAxMDIwMzA0CjAwRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRjAwMDAwMDAwMDEwMjA0CjA1MDYwMEZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkYwMDAwMDAwMjAzCjA0MDUwMDAwMDBGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRjAwCjAwMDAwMDAwMDBGRkZGMDAwMDAwCjA0MDUwNjA3MDAwMDAwRkZGRjAwCjAwMDAwMDAwMDBGRkZGRkZGRkZGCkZGMDAwMDAwMDAwMDAwRkZGRkZGCkZGMDAwNTA2MDgwOTAwRkZGRkZGCkZGMDAwMDExMTIxNDAwRkZGRkZGCkZGRkZGRjAwMDAwMDAwMDAwMEZGCkZGRkZGRjAwMDcwODA5MEEwMEZGCkZGRkZGRjAwMDAwMDAwMDAwMEZGCkZGRkZGRkZGRkZGRkZGMDAwMDAwCjAwRkZGRjAwMDAwMDA5MEEwQjBDCjAwMDAwMEZGRkYwMDAwMDAwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRjAwCjAwMDAwMEZGRkYwMDA4MDkwQTBDCjBEMEUwRjEwMDBGRkZGMDAwMDAwCjAwRkZGRkZGRkZGRkZGRkZGRkZGCkZGMDAwMDAwMDAwMDAwMDAwQTBCCjBDMEQwRTBGMTExMjAwMDAwMzAwCjA0MDQwMEZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRjAwMDgwQTBCCjBDMEQwRTBGMTAxMTEyMTMxNDE2CjE3MDBGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkYwMDBBCjBCMEMwRDBFMTAxMTEyMTMxNDE1CjE2MTcxODAwRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGMDAwMDAwCjAwMEMwRDBFMEYxMDExMTIxMzE1CjE2MTcxODE5MUEwMDAwMDAwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRjAwCjAwMEIwQzBFMEYxMDExMTIxMzE0CjE1MTYxNzE4MTkxQjFDMUQxRTAwCjAwRkZGRkZGRkZGRkZGRkZGRkZGCkZGMDAwMDBEMEUwRjEwMTExMjE0CjE1MTYxNzE4MTkxQTFCMUMxRDFFCjIwMDAwMEZGRkZGRkZGRkZGRkZGCkZGRkZGRjAwMDAwRjEwMTExMjEzCjE0MTUxNjE3MTgxQTFCMUMxRDFFCjFGMjAyMTAwMDBGRkZGRkZGRkZGCkZGRkZGRkZGRkYwMDAwMTAxMjEzCjE0MTUxNjE3MTgxOTFBMUIxQzFECjFGMjAyMTIyMjMwMDAwRkZGRkZGCkZGRkZGRkZGRkZGRkZGMDAwMDEyCjEzMTQxNTE2MTgxOTFBMUIxQzFECjFFMUYyMDIxMjIyNDI1MDAwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRjAwCjAwMTQxNTE2MTcxODE5MUExQjFDCjFFMUYyMDIxMjIyMzI0MjUyNjAwCjAwRkZGRkZGRkZGRkZGRkZGRkZGCkZGMDAwMDAwMDAxODE5MUExQjFDCjFEMUUxRjIwMjEyMzI0MjUyNjAwCjAwMDAwMEZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRjAwMTkxQTFDCjFEMUUxRjIwMjEyMjIzMjQyNTI2CjI4MDBGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkYwMDAwCjAwMUQxRTFGMjAyMjIzMjQyNTI2CjI3MDAwMDAwRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkZGRkZGMDAwMDAwCjAwMDAwMDAwMjAyMTIyMjMyNDI1CjI3MjgwMDAwMDAwMDAwMDAwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRjAwCjAwMDAwMEZGMDAwMDIyMjMyNDI1CjI2MjcyODI5MDAwMEZGMDAwMDAwCjAwRkZGRkZGRkZGRkZGRkZGRjAwCjAwMDAwMDAwMDBGRjAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDBGRjAwCjAwMDAwMDAwMDBGRkZGRkZGRkZGCkZGMDAwMDAwMDAwMDAwRkZGRkZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGMDAwMDAwMDAwMDAwRkZGRkZGCkZGRkZGRjAwMDAwMDAwMDAwMEZGCkZGRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRjAwMDAwMDAwMDAwMEZGCkZGRkZGRkZGRkYwMDAwMDAwMDAwCjAwRkZGRkZGRkZGRkZGRkZGRkZGCkZGRkZGRkZGRkYwMDAwMDAwMDAwCjAwRkZGRkZGCn1d} | |
{ This represents the "API" of the turtle, including the parse rules for commands issued to it | |
It also translates commands into drawing commands for VID } | |
turtle: make object! [ | |
field-size: 400x400 | |
direction: 0 | |
location: field-size / 2 | |
command-history: copy [] | |
draw-commands: copy [] | |
pen-is-down: true | |
last-error: none | |
parse-rules: [ | |
some [ | |
['fd | 'forward] set value integer! (move-by value) | | |
['bk | 'back] set value integer! (move-by value * -1) | | |
'left set value integer! (turn value * -1) | | |
'right set value integer! (turn value) | | |
'color set value word! (set-color value) | | |
'home (reset) | | |
['pu | 'penup] (pen-is-down: false) | | |
['pd | 'pendown] (pen-is-down: true) | | |
'clear (clear) | | |
'repeat set value integer! set blk block! (repeat none! value [ parse blk parse-rules ]) | | |
set word word! (last-error: to-string compose ["unknown word " (word)]) break | |
] | |
] | |
translate-fld: func [location [pair!]] [ | |
location/y: field-size/y - location/y | |
location | |
] | |
turn: func [degrees [integer!]] [ | |
direction: direction + degrees | |
degrees: degrees // 360 | |
] | |
set-color: func [color] [ | |
append draw-commands compose [ pen (color) ] | |
] | |
reset: func [] [ | |
direction: 0 | |
location: field-size / 2 | |
] | |
clear: func [] [ | |
reset | |
pen-is-down: true | |
draw-commands: copy [] | |
command-history: copy [] | |
] | |
{ Stores a command and parses it, updating the state and possibly updating draw commands } | |
command: func [cmd [string!]] [ | |
append/only command-history cmd | |
process-command cmd | |
] | |
{ Moves the turtle in the direction it is currently facing by the distance given; also generates draw commands } | |
move-by: func [distance [integer!]] [ | |
delta: to-pair compose [(to-integer (sine direction) * distance) (to-integer (cosine direction) * distance)] | |
if pen-is-down [ append draw-commands compose [line (translate-fld location) (translate-fld location + delta)] ] | |
location: location + delta | |
] | |
process-command: func [cmd [string!]] [ | |
last-error: none | |
parse to-block cmd parse-rules | |
] | |
redraw-commands: func [] [ | |
last-error: none | |
draw-commands: copy [] | |
reset | |
for-each cmd command-history [ | |
process-command | |
if last-error [ break ] | |
] | |
] | |
] | |
{ User Interface } | |
view layout [ | |
across | |
tfield: box white turtle/field-size effect [ | |
draw [ pen red translate 200x200 scale .75 .75 rotate turtle/direction image turtle-img -16x-16 16x16 ] | |
] | |
chistory: text-list data turtle/command-history | |
return | |
cfield: field [ | |
turtle/command cfield/text | |
tfield/effect/draw: copy turtle/draw-commands | |
append tfield/effect/draw compose/deep [ translate (turtle/translate-fld turtle/location) scale .75 .75 rotate (turtle/direction) image turtle-img -16x-16 16x16 ] | |
if turtle/last-error [ alert turtle/last-error ] | |
show tfield { Update the drawing area } | |
show chistory { Update the history text-list } | |
cfield/text: none | |
focus cfield | |
] | |
do [ | |
focus cfield | |
] | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment