Geometron "Hello, World"
Geometron is a purely geometry-based language for interacting with machines. The commands are geometric figures described by a series of geometric actions. I will be documenting the full language in The Book of Geometron, which is a work in progress, but I'm publishing this tutorial so that it's possible to just get a taste and get the thing basically working. This tutorial has one goal only: minimum functionality. Following the traditions of computer languages, I'm using the phrase "hello, world", although as a purely geometric language the output, like the code, is all shapes.
If this project works, there will be a way to control computers without using math and English based code, but purely geometric symbols, which can be learned and used without reference to specific human or machine languages.
To do this tutorial you need a text editor, but you can use the one that came free with your computer, which will be TextEdit.app on the mac and notepad on the PC. Of course if you use something designed for code that's great too, or vi or EMACS or whatever, but you won't need any of that--just the ability to paste text into a file and save it, without editing it at all.
Get Your Local Copy of the Geometron Hypercube Editor
Copy and paste the following into a text editor(make sure you get all of it) and save it as editor.html. This html file is the entire Geometron language, and by saving this you have a local copy of the whole thing which will run inside your browser(it should work on all browsers and all operating systems). You can tell that you got the whole thing if it ends with "". Scroll down in your text editor and make sure that's true.
<!DOCTYPE HTML> <html> <head> <title>Geometron Hypercube Editor</title> <script id = "bytecodeScript"> /* 040:0333 041:0333,0336,0336,0332,0332,0332,0330,0336,0331,0336,0341,0330,0330,0330,0337,0337,0337,0342,0336,0336,0336,0331,0331,0331,0331,0331,0337,0337,0333,0337,0337 042:0333,0330,0336,0332,0336,0332,0331,0342,0333,0342,0333,0330,0337,0337,0331 043:0333,0336,0336,0332,0332,0332,0333,0336,0332,0337,0337,0337,0342,0336,0336,0333,0337,0337,0342,0336,0336,0332,0332,0336,0332,0330,0330,0330,0335,0337,0337,0337,0342,0336,0336,0336,0332,0332,0337,0337,0337,0342,0336,0336,0336,0332,0332,0332,0337,0337,0337,0330,0334,0331 044:0333,0336,0330,0332,0336,0330,0350,0335,0335,0334,0350,0343,0334,0334,0343,0334,0334,0343,0334,0334,0343,0334,0334,0343,0334,0334,0330,0330,0343,0335,0335,0343,0335,0335,0334,0334,0334,0334,0334,0334,0343,0334,0334,0343,0334,0334,0343,0334,0334,0343,0335,0335,0335,0335,0335,0335,0335,0335,0351,0351,0330,0335,0335,0333,0333,0337,0337,0336,0332,0337,0342,0336,0333,0337 045:0333,0336,0332,0332,0350,0335,0337,0310,0337,0342,0336,0313,0334,0351,0336,0336,0330,0330,0330,0333,0341,0331,0331,0331,0333,0333,0330,0341,0333,0331,0337,0337 046:0333,0336,0332,0330,0336,0330,0341,0331,0334,0350,0334,0342,0334,0330,0343,0335,0335,0343,0334,0334,0334,0334,0334,0334,0351,0333,0350,0334,0342,0335,0335,0335,0335,0342,0334,0334,0336,0342,0334,0351,0331,0331,0333,0333,0337,0337,0337 047:0333,0336,0330,0332,0336,0330,0342,0333,0333,0331,0331,0331,0337,0337 050:0333,0336,0330,0334,0331,0331,0337,0337,0350,0350,0350,0343,0350,0334,0334,0343,0335,0335,0335,0335,0335,0343,0334,0334,0334,0351,0351,0351,0351,0336,0330,0335,0336,0332,0331,0337 051:0333,0336,0330,0335,0337,0331,0331,0337,0350,0350,0350,0343,0350,0334,0334,0343,0335,0335,0335,0335,0343,0334,0334,0351,0351,0351,0351,0330,0335,0335,0335,0336,0336,0331,0336,0333,0337,0337 052:0333,0336,0332,0330,0352,0342,0335,0335,0342,0335,0335,0342,0335,0335,0342,0335,0335,0342,0335,0335,0342,0335,0335,0353,0331,0333,0337 053:0333,0336,0330,0332,0336,0342,0335,0342,0335,0342,0335,0342,0335,0331,0331,0333,0333,0337,0337 054:0333,0336,0332,0336,0334,0350,0334,0342,0335,0351,0335,0333,0337,0337 055:0333,0336,0330,0332,0335,0336,0342,0331,0342,0333,0333,0330,0330,0330,0334,0337,0337 056:0333,0336,0332,0336,0336,0341,0333,0333,0333,0337,0337,0337 057:0333,0332,0350,0335,0310,0337,0342,0336,0313,0334,0351,0333 060:0313,0304,0336,0336,0330,0333,0330,0330,0343,0331,0331,0334,0334,0343,0332,0334,0334,0337,0342,0332,0342,0336,0331,0337,0337,0350,0350,0335,0350,0350,0335,0350,0334,0311,0337,0310,0336,0342,0337,0311,0336,0335,0351,0334,0351,0351,0334,0304,0333,0336,0336,0332,0337,0337 061:0304,0313,0335,0336,0342,0336,0330,0334,0337,0337,0342,0330,0334,0350,0334,0336,0336,0310,0337,0342,0336,0313,0335,0351,0335,0337,0331,0331,0333,0336,0336,0332,0337,0337,0337 062:0304,0313,0335,0336,0342,0336,0330,0334,0330,0330,0330,0343,0331,0331,0331,0332,0337,0337,0306,0350,0335,0342,0334,0304,0333,0336,0336,0332,0337,0337 063:0313,0304,0336,0336,0330,0333,0335,0343,0332,0332,0343,0334,0350,0343,0331,0331,0335,0335,0335,0335,0343,0330,0334,0334,0334,0334,0304,0333,0336,0333,0337,0337,0337 064:0333,0336,0332,0337,0342,0336,0330,0334,0342,0330,0335,0350,0335,0342,0334,0351,0331,0337,0336,0333,0336,0333,0337,0337 065:0313,0304,0336,0336,0330,0333,0335,0343,0335,0335,0350,0334,0350,0334,0343,0334,0351,0351,0331,0331,0331,0334,0342,0335,0335,0342,0330,0334,0342,0330,0342,0330,0334,0342,0330,0333,0333,0334,0333,0336,0333,0337,0337,0337 066:0304,0313,0336,0336,0332,0337,0337,0333,0336,0336,0332,0332,0330,0341,0332,0350,0350,0335,0337,0337,0342,0336,0336,0334,0351,0351,0333,0333,0333,0331,0336,0332,0337,0337,0337 067:0336,0332,0336,0336,0333,0337,0337,0337,0333,0336,0332,0350,0350,0335,0337,0342,0330,0334,0334,0334,0334,0334,0336,0342,0351,0351,0335,0350,0350,0335,0337,0331,0334,0351,0351,0336,0333,0337 070:0304,0313,0336,0336,0336,0332,0332,0337,0337,0337,0333,0336,0332,0336,0330,0341,0330,0330,0341,0333,0333,0331,0331,0331,0336,0332,0337,0337,0337 071:0304,0313,0336,0336,0332,0337,0337,0333,0336,0336,0332,0337,0337,0342,0336,0330,0336,0330,0332,0341,0333,0333,0330,0337,0337,0331 072:0333,0336,0332,0330,0336,0336,0336,0341,0331,0331,0331,0331,0331,0331,0331,0341,0333,0333,0333,0333,0331,0337,0337,0337,0337 073:0333,0336,0332,0330,0336,0336,0336,0341,0331,0331,0331,0331,0334,0334,0337,0337,0350,0335,0342,0335,0351,0335,0331,0333,0337,0337 074:0333,0336,0330,0332,0350,0335,0342,0335,0335,0342,0335,0351,0330,0335,0335,0333,0337 075:0333,0336,0336,0332,0330,0334,0337,0342,0336,0333,0337,0342,0336,0332,0332,0335,0333,0337,0337 076:0333,0336,0330,0332,0350,0334,0342,0334,0334,0342,0335,0335,0335,0351,0331,0333,0337, 077:0333,0336,0336,0332,0332,0330,0336,0331,0341,0330,0330,0342,0330,0330,0330,0343,0335,0335,0350,0334,0343,0335,0351,0330,0342,0335,0335,0337,0331,0331,0331,0336,0330,0333,0333,0333,0337,0337,0337 0100:0333,0336,0332,0330,0336,0336,0341,0337,0343,0334,0343,0334,0334,0336,0330,0342,0331,0337,0350,0335,0335,0343,0351,0330,0330,0335,0335,0333,0333,0337,0337 0101:0304,0313,0311,0305,0350,0350,0335,0342,0351,0335,0336,0333,0334,0334,0337,0342,0336,0336,0330,0334,0334,0342,0335,0335,0331,0350,0335,0337,0337,0304,0313,0336,0336,0336,0333,0337,0337,0337 0102:0304,0313,0336,0336,0336,0333,0337,0337,0337,0342,0330,0335,0336,0336,0342,0333,0333,0342,0332,0330,0343,0333,0333,0343,0333,0331,0342,0334,0337,0333,0336,0336,0333,0337,0337,0337,0304,0313 0103:0333,0336,0330,0332,0334,0343,0335,0335,0350,0334,0334,0343,0335,0335,0335,0335,0343,0351,0330,0335,0335,0333,0337,0304,0313 0104:0333,0332,0342,0336,0330,0350,0335,0343,0335,0335,0343,0335,0351,0330,0335,0335,0336,0333,0337,0333,0337,0304,0313 0105:0304,0313,0333,0336,0332,0336,0332,0332,0337,0337,0342,0335,0336,0342,0332,0336,0342,0337,0332,0342,0336,0331,0334,0337,0337,0333,0331,0304,0313 0106:0304,0313,0333,0336,0332,0336,0332,0332,0337,0337,0342,0335,0336,0332,0336,0342,0337,0332,0342,0336,0331,0334,0337,0337,0333,0331,0304,0313 0107:0304,0313,0333,0336,0330,0332,0334,0343,0335,0335,0350,0334,0334,0343,0335,0335,0335,0335,0343,0351,0330,0335,0335,0333,0337,0336,0336,0332,0336,0333,0337,0342,0330,0334,0342,0335,0331,0333,0337,0337,0304,0313 0110:0304,0313,0333,0336,0336,0332,0332,0337,0337,0342,0336,0332,0337,0342,0336,0330,0335,0342,0330,0334,0331,0336,0333,0337,0337,0304,0313 0111:0304,0313,0333,0336,0336,0332,0332,0334,0337,0342,0336,0330,0335,0337,0337,0342,0330,0336,0336,0334,0342,0335,0335,0342,0330,0330,0334,0337,0337,0331 0112:0304,0313,0333,0336,0330,0332,0342,0330,0335,0336,0342,0334,0334,0342,0334,0330,0330,0342,0330,0333,0343,0335,0335,0333,0331,0333,0336,0333,0337,0337,0337 0113:0304,0313,0333,0336,0332,0332,0337,0342,0336,0330,0350,0335,0310,0337,0342,0336,0313,0335,0335,0310,0337,0342,0336,0313,0335,0351,0330,0335,0335,0333,0337,0304,0313,0336,0336,0336,0333,0337,0337,0337 0114:0333,0336,0332,0336,0332,0337,0337,0342,0336,0335,0342,0330,0336,0330,0334,0337,0337 0115:0304,0310,0342,0330,0335,0306,0335,0311,0336,0342,0330,0334,0334,0342,0330,0334,0334,0334,0334,0350,0335,0337,0342,0330,0304,0335,0335,0313,0336,0336,0336,0333,0337,0337,0337 0116:0342,0330,0335,0306,0335,0313,0337,0312,0336,0342,0330,0334,0334,0350,0334,0337,0313,0336,0304,0342,0336,0336,0336,0333,0337,0337,0337 0117:0333,0336,0330,0332,0341,0331,0333,0337 0120:0333,0332,0336,0336,0333,0337,0337,0342,0336,0330,0336,0330,0333,0341,0333,0333,0330,0337,0337,0331 0121:0333,0336,0330,0332,0341,0335,0335,0336,0330,0332,0350,0334,0337,0342,0334,0351,0334,0333,0331,0336,0330,0337,0337 0122:0304,0313,0336,0336,0336,0333,0337,0337,0337,0342,0330,0335,0336,0336,0342,0333,0333,0342,0332,0330,0343,0333,0335,0337,0306,0350,0334,0337,0312,0336,0342,0337,0313,0336,0335,0330,0304,0334,0334,0333,0336,0336,0336,0332,0337,0337,0337,0337 0123:0313,0304,0336,0336,0332,0337,0337,0336,0330,0333,0336,0330,0343,0334,0350,0334,0343,0332,0332,0334,0334,0334,0334,0343,0335,0335,0335,0351,0343,0335,0335,0333,0331,0333,0337,0337 0124:0333,0336,0332,0337,0342,0330,0336,0335,0342,0331,0342,0330,0330,0334,0337,0331 0125:0333,0336,0336,0330,0332,0337,0342,0330,0336,0342,0331,0331,0332,0332,0342,0330,0342,0330,0342,0331,0331,0333,0335,0335,0343,0330,0335,0335,0337,0333,0337 0126:0333,0336,0332,0350,0350,0335,0337,0342,0334,0334,0342,0335,0335,0334,0351,0351,0336,0333,0337 0127:0336,0336,0336,0333,0333,0337,0337,0337,0304,0313,0350,0350,0350,0334,0342,0335,0335,0336,0342,0330,0304,0335,0350,0350,0335,0335,0335,0342,0330,0304,0334,0350,0334,0350,0334,0337,0342,0334,0350,0335,0304,0336,0336,0333,0336,0333,0337,0337,0337 0130:0313,0306,0350,0337,0312,0336,0335,0342,0334,0304,0337,0313,0336,0330,0335,0306,0335,0337,0312,0336,0342,0330,0334,0304,0334,0337,0313,0336,0336,0336,0336,0333,0337,0337,0337 0131:0304,0313,0336,0336,0336,0332,0337,0337,0337,0336,0333,0342,0330,0306,0350,0334,0337,0312,0336,0342,0335,0335,0342,0337,0313,0336,0334,0304,0331,0333,0337,0336,0336,0336,0332,0337,0337,0337 0132:0304,0335,0312,0336,0342,0337,0332,0336,0342,0337,0333,0306,0336,0334,0313,0337,0342,0335,0304,0336,0330,0334,0312,0337,0313,0336,0336,0336,0333,0337,0337,0337 0133:0333,0336,0336,0332,0332,0337,0337,0342,0330,0335,0336,0336,0342,0337,0337,0333,0336,0336,0342,0330,0330,0334,0337,0337 0134:0333,0336,0336,0332,0337,0337,0350,0350,0334,0342,0335,0351,0351,0336,0336,0333,0337,0337 0135:0333,0336,0336,0332,0337,0337,0342,0336,0336,0334,0342,0333,0333,0333,0333,0342,0335,0333,0337,0337,0331 0136:0333,0330,0336,0332,0334,0334,0350,0335,0342,0334,0334,0342,0334,0351,0334,0333,0337,0331 0137:0333,0334,0336,0336,0330,0337,0342,0336,0331,0335,0337,0337 0140:0333,0336,0332,0330,0336,0330,0350,0334,0342,0335,0351,0330,0333,0333,0337,0337,0331 0141:0304,0313,0336,0336,0336,0332,0332,0337,0337,0337,0333,0336,0332,0336,0330,0341,0333,0342,0331,0342,0330,0330,0332,0333,0333,0331,0331,0337,0337,0336,0336,0336,0332,0337,0337,0337,0313,0304 0142:0304,0313,0336,0336,0332,0337,0337,0333,0336,0336,0332,0332,0332,0337,0337,0342,0336,0336,0330,0333,0341,0333,0333,0331,0337,0337,0336,0336,0336,0332,0337,0337,0337,0304,0313 0143:0304,0313,0336,0336,0332,0337,0337,0333,0336,0332,0336,0330,0350,0343,0334,0334,0343,0334,0334,0343,0334,0334,0330,0330,0334,0334,0351,0331,0336,0332,0337,0337,0337 0144:0333,0336,0336,0332,0332,0337,0337,0342,0336,0336,0330,0332,0341,0333,0333,0331,0337,0337 0145:0304,0313,0336,0336,0332,0337,0337,0333,0336,0336,0332,0330,0332,0343,0334,0334,0350,0335,0343,0334,0343,0335,0335,0342,0351,0335,0335,0342,0333,0330,0330,0334,0336,0332,0337,0337,0337 0146:0304,0313,0336,0336,0332,0337,0337,,0333,0336,0336,0332,0332,0337,0342,0330,0336,0336,0342,0330,0333,0343,0332,0331,0331,0335,0337,0336,0342,0334,0334,0342,0335,0331,0331,0331,0333,0333,0333,0333,0337,0337,0337,0304,0313,0336,0336,0336,0332,0337,0337,0337 0147:0304,0313,0336,0336,0336,0332,0332,0337,0337,0337,0333,0336,0332,0336,0330,0341,0333,0342,0331,0342,0331,0342,0331,0342,0332,0335,0335,0343,0331,0331,0332,0332,0334,0334,0337,0337,0336,0336,0336,0332,0337,0337,0337 0150:0304,0313,0342,0336,0330,0333,0336,0331,0332,0343,0333,0334,0334,0342,0330,0334,0334,0336,0333,0337,0337,0337 0151:0333,0336,0336,0332,0332,0332,0342,0330,0336,0342,0330,0330,0330,0336,0341,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0337,0333,0333,0337,0337,0337 0152:0333,0336,0336,0332,0332,0332,0342,0331,0342,0332,0335,0335,0343,0332,0331,0331,0331,0336,0336,0341,0330,0330,0330,0330,0330,0330,0330,0330,0335,0335,0337,0333,0333,0337,0337,0337 0153:0304,0313,0336,0336,0332,0337,0337,0333,0336,0336,0332,0332,0332,0337,0342,0330,0336,0342,0331,0350,0335,0342,0335,0335,0310,0337,0342,0336,0313,0334,0351,0334,0331,0333,0336,0333,0337,,0337,0337,0304,0313 0154:0304,0313,0336,0336,0336,0332,0337,0337,0337,0333,0336,0336,0332,0332,0332,0336,0336,0350,0335,0342,0334,0337,0337,0337,0342,0330,0336,0342,0330,0334,0334,0334,0336,0342,0335,0351,0335,0337,0331,0331,0331,0333,0337,0337 0155:0304,0313,0333,0336,0332,0336,0332,0336,0332,0332,0337,0337,0342,0336,0333,0330,0336,0332,0343,0333,0333,0343,0332,0331,0342,0331,0342,0337,0333,0342,0333,0337,0337 0156:0304,0313,0333,0336,0332,0336,0332,0336,0332,0332,0337,0337,0342,0336,0333,0330,0336,0332,0343,0333,0331,0331,0337,0342,0333,0337,0337 0157:0304,0313,0333,0336,0332,0336,0332,0330,0341,0333,0333,0331,0337,0337 0160:0304,0313,0336,0336,0332,0337,0337,,0333,0336,0332,0336,0332,0342,0335,0335,0337,0342,0336,0331,0332,0341,0333,0334,0334,0342,0331,0333,0333,0333,0337,0337 0161:0304,0313,0333,0336,0332,0336,0330,0332,0341,0333,0342,0331,0331,0337,0342,0336,0333,0334,0334,0336,0333,0343,0335,0335,0330,0330,0333,0337,0337,0337 0162:0333,0336,0332,0336,0332,0337,0342,0330,0336,0336,0342,0350,0335,0350,0337,0337,0335,0342,0335,0351,0351,0330,0334,0331,0336,0336,0333,0337,0337,0337 0163:0304,0313,0336,0336,0332,0337,0337,0333,0336,0336,0332,0332,0330,0336,0330,0350,0343,0334,0334,0343,0334,0350,0334,0343,0334,0351,0330,0330,0343,0334,0334,0343,0334,0334,0335,0343,0334,0351,0331,0333,0333,0337,0337,0337 0164:0304,0313,0333,0336,0332,0342,0330,0336,0342,0334,0342,0335,0335,0342,0333,0333,0336,0330,0335,0343,0335,0335,0333,0333,0333,0337,0337,0337 0165:0304,0313,0336,0336,0330,0342,0333,0334,0334,0343,0332,0334,0334,0342,0334,0334,0342,0330,0335,0335,0336,0333,0337,0337,0337 0166:0304,0313,0336,0336,0332,0337,0337,0333,0336,0332,0350,0350,0334,0342,0335,0335,0342,0334,0351,0351,0333,0337,0336,0336,0336,0332,0337,0337,0337 0167:0336,0336,0336,0333,0337,0337,0337,0313,0304,0336,0336,0336,0333,0337,0350,0350,0334,0337,0342,0335,0335,0336,0342,0330,0335,0335,0335,0335,0335,0335,0342,0330,0334,0334,0334,0334,0334,0334,0337,0342,0334,0304,0336,0333,0336,0333,0337,0337,0337 0170:0304,0313,0336,0306,0350,0335,0342,0351,0336,0333,0334,0337,0342,0350,0335,0304,0336,0336,0333,0337,0337,0337 0171:0304,0313,0336,0336,0332,0337,0337,0333,0336,0332,0336,0350,0335,0337,0350,0334,0342,0334,0334,0342,0334,0334,0334,0334,0334,0334,0342,0334,0351,0351,0335,0335,0333,0337,0336,0336,0336,0332,0337,0337,0337 0172:0304,0313,0336,0350,0335,0310,0337,0342,0330,0334,0334,0334,0336,0342,0334,0337,0330,0334,0334,0334,0336,0342,0330,0334,0334,0304,0313,0337,0336,0336,0336,0333,0337,0337,0337 0173:0333,0336,0330,0332,0336,0336,0330,0334,0350,0334,0342,0335,0335,0335,0342,0330,0335,0342,0334,0331,0331,0331,0334,0342,0335,0331,0342,0335,0335,0335,0342,0335,0351,0335,0335,0331,0331,0333,0333,0337,0337,0337 0174:0333,0336,0332,0337,0342,0330,0336,0336,0342,0337,0337,0331,0336,0336,0331,0342,0330,0333,0337,0337 0175:0333,0336,0336,0332,0332,0330,0330,0336,0330,0342,0330,0350,0334,0342,0335,0331,0335,0335,0335,0342,0335,0330,0330,0334,0334,0334,0342,0335,0335,0335,0342,0330,0335,0342,0334,0351,0330,0330,0335,0335,0333,0333,0333,0337,0337,0337 0176:0333,0336,0330,0332,0330,0336,0331,0350,0334,0342,0335,0335,0342,0334,0351,0332,0350,0335,0342,0334,0351,0333,0333,0333,0331,0331,0331,0337,0337 01300:0333,0200,0336,0330,0332,0340,0350,0335,0336,0330,0342,0331,0331,0331,0342,0330,0330,0335,0335,0331,0331,0342,0330,0330,0330,0342,0331,0334,0334,0334,0351,0331,0331,0333,0333,0337,0337 01304:0333,0200,0336,0330,0332,0341,0342,0335,0342,0335,0342,0335,0342,0350,0335,0351,0336,0336,0330,0330,0341,0331,0331,0335,0330,0330,0341,0331,0331,0335,0330,0330,0341,0331,0331,0335,0330,0330,0341,0331,0331,0350,0334,0351,0337,0337,0330,0335,0335,0333,0337 01305:0333,0200,0336,0330,0332,0305,0342,0335,0342,0335,0342,0335,0342,0335,0342,0335,0341,0350,0335,0351,0336,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0350,0335,0304,0337,0331,0333,0337 01306:0333,0200,0336,0330,0332,0306,0342,0335,0342,0335,0342,0335,0342,0335,0342,0335,0341,0350,0335,0351,0336,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0335,0330,0336,0336,0341,0337,0337,0331,0350,0335,0335,0335,0337,0342,0334,0336,0330,0336,0336,0341,0337,0337,0331,0304,0335,0337,0331,0333,0337 01310:0333,0200,0336,0332,0350,0335,0310,0337,0342,0330,0334,0334,0342,0330,0334,0334,0342,0330,0334,0334,0342,0330,0334,0334,0334,0351,0336,0313,0333,0337 01311:0335,0305,0342,0334,0311,0337,0342,0336,0335,0330,0334,0350,0334,0337,0342,0334,0334,0304,0336,0313,0335,0200,0334,0305,0350,0335,0342,0330,0335,0335,0335,0311,0336,0342,0330,0334,0334,0334,0336,0342,0335,0335,0335,0337,0331,0334,0334,0334,0337,0331,0334,0313,0304,0335 01312:0333,0200,0352,0334,0342,0330,0334,0334,0334,0334,0342,0334,0312,0337,0313,0336,0342,0330,0334,0334,0334,0334,0336,0342,0334,0334,0304,0312,0336,0313,0337,0333,0337 01313:0333,0200,0336,0336,0332,0332,0330,0342,0334,0342,0330,0335,0342,0330,0335,0342,0330,0342,0330,0335,0342,0330,0335,0342,0335,0331,0333,0337,0337 01314:0333,0200,0314,0336,0332,0332,0330,0200,0333,0200,0333,0200,0331,0337,0313 01315:0333,0313,0200,0336,0330,0332,0341,0335,0342,0334,0334,0342,0334,0334,0330,0334,0331,0337 01316:0333,0200,0336,0336,0330,0332,0332,0332,0336,0341,0330,0330,0330,0330,0341,0333,0333,0331,0331,0341,0333,0333,0330,0330,0341,0331,0331,0331,0331,0341,0333,0333,0331,0331,0337,0337,0337, 01317:0333,0200,0336,0336,0330,0332,0336,0330,0333,0337,0342,0336,0330,0334,0337,0337,0342,0330,0336,0342,0330,0335,0336,0342,0331,0342,0332,0330,0337,0337,0333,0333,0331,0337 01320:0333,0200,0336,0336,0330,0332,0337,0320,0204,0336,0333,0331,0337,0337, 01321:0333,0200,0336,0336,0330,0332,0337,0321,0204,0336,0333,0331,0337,0337, 01322:0333,0200,0336,0336,0330,0332,0337,0322,0204,0336,0333,0331,0337,0337, 01323:0333,0200,0336,0336,0330,0332,0337,0323,0204,0336,0333,0331,0337,0337, 01324:0333,0200,0336,0336,0330,0332,0337,0324,0204,0336,0333,0331,0337,0337, 01325:0333,0200,0336,0336,0330,0332,0337,0325,0204,0336,0333,0331,0337,0337, 01326:0333,0200,0336,0336,0330,0332,0337,0326,0204,0336,0333,0331,0337,0337, 01327:0333,0200,0336,0336,0330,0332,0337,0327,0204,0336,0333,0331,0337,0337, 01330:0333,0200,0313,0336,0336,0330,0332,0336,0332,0337,0342,0334,0342,0330,0335,0342,0330,0334,0336,0342,0330,0335,0350,0335,0337,0310,0337,0342,0330,0335,0335,0342,0330,0335,0335,0335,0336,0313,0336,0342,0330,0351,0335,0331,0331,0331,0331,0333,0333,0333,0337,0337,0337 01331:0333,0200,0335,0335,0333,0331,0313,0336,0336,0330,0332,0336,0332,0337,0342,0334,0342,0330,0335,0342,0330,0334,0336,0342,0330,0335,0350,0335,0337,0310,0337,0342,0330,0335,0335,0342,0330,0335,0335,0335,0336,0313,0336,0342,0330,0351,0335,0331,0331,0331,0331,0333,0333,0333,0337,0337,0337,0332,0335,0335,0331 01332:0333,0200,0334,0333,0313,0336,0336,0330,0332,0336,0332,0337,0342,0334,0342,0330,0335,0342,0330,0334,0336,0342,0330,0335,0350,0335,0337,0310,0337,0342,0330,0335,0335,0342,0330,0335,0335,0335,0336,0313,0336,0342,0330,0351,0335,0331,0331,0331,0331,0333,0333,0333,0337,0337,0337,0335,0331 01333:0333,0200,0335,0331,0313,0336,0336,0330,0332,0336,0332,0337,0342,0334,0342,0330,0335,0342,0330,0334,0336,0342,0330,0335,0350,0335,0337,0310,0337,0342,0330,0335,0335,0342,0330,0335,0335,0335,0336,0313,0336,0342,0330,0351,0335,0331,0331,0331,0331,0333,0333,0333,0337,0337,0337,0330,0334 01334:0333,0200,0336,0330,0332,0336,0350,0343,0334,0334,0343,0334,0334,0343,0334,0342,0335,0330,0336,0330,0334,0334,0334,0337,0342,0334,0351,0336,0331,0337,0337,0333,0337 01335:0333,0200,0336,0330,0332,0336,0350,0343,0334,0334,0343,0334,0334,0343,0334,0334,0334,0342,0334,0330,0336,0330,0335,0335,0335,0337,0342,0336,0335,0331,0351,0337,0337,0332,0335,0335,0337,0331 01336:0333,0200,0336,0330,0334,0336,0330,0337,0342,0336,0331,0335,0337,0331,0337 01337:0333,0200,0336,0330,0332,0336,0342,0334,0342,0334,0342,0334,0342,0330,0330,0334,0337,0331,0337 01340:0333,0200,0336,0330,0332,0340,0333,0331,0337 01341:0333,0200,0336,0330,0332,0341,0340,0333,0331,0337 01342:0333,0200,0336,0330,0332,0334,0336,0342,0330,0340,0331,0335,0335,0342,0330,0340,0333,0333,0330,0334,0337,0337 01343:0333,0200,0336,0330,0332,0350,0343,0335,0342,0334,0334,0342,0335,0340,0351,0331,0333,0337 01344:0304,0313,0333,0200,0336,0332,0344,0333,0337 01345:0304,0313,0333,0200,0336,0332,0345,0333,0337 01346:0304,0313,0333,0200,0336,0332,0346,0333,0337 01347:0304,0313,0333,0200,0336,0332,0336,0330,0330,0347,0331,0331,0337,0333,0337, 01350:0333,0200,0336,0330,0332,0350,0335,0342,0335,0335,0342,0334,0336,0336,0342,0330,0330,0342,0331,0331,0351,0337,0337,0334,0333,0331,0337 01351:0333,0200,0336,0332,0330,0350,0335,0336,0336,0342,0330,0330,0342,0330,0330,0342,0331,0331,0331,0331,0335,0337,0337,0342,0335,0342,0334,0351,0333,0330,0334,0337 01352:0333,0200,0336,0330,0332,0335,0350,0352,0334,0334,0334,0342,0335,0335,0336,0336,0342,0330,0330,0342,0331,0331,0335,0335,0342,0330,0330,0342,0331,0331,0335,0335,0337,0337,0342,0335,0335,0335,0351,0353,0330,0334,0334,0333,0337 01353:0333,0200,0336,0330,0332,0335,0350,0352,0334,0342,0335,0335,0342,0335,0335,0336,0336,0342,0330,0330,0342,0331,0331,0334,0334,0334,0334,0334,0334,0342,0330,0330,0342,0331,0331,0335,0335,0335,0351,0353,0337,0337,0333,0330,0334,0337 01362:0333,0200,0336,0336,0330,0332,0332,0332,0340,0342,0330,0342,0330,0335,0342,0330,0342,0330,0350,0334,0334,0334,0342,0334,0334,0335,0334,0342,0334,0304,0330,0330,0330,0334,0334,0333,0337,0337, 01363:0304,0313,0333,0200,0336,0332,0330,0336,0330,0332,0335,0342,0330,0342,0330,0335,0342,0330,0342,0330,0334,0350,0334,0342,0334,0334,0342,0340,0335,0304,0331,0333,0337,0337 01365:0313,0304,0333,0200,0336,0330,0332,0336,0331,0332,0337,0350,0350,0334,0342,0335,0335,0342,0334,0304,0333,0350,0350,0334,0342,0335,0335,0342,0334,0304,0336,0333,0331,0337,0337 01200:0333,0200,0336,0336,0330,0332,0337,0200,0336,0331,0333,0337,0337 01201:0304,0313,0333,0200,0336,0336,0330,0330,0332,0332,0332,0335,0336,0337,0337,0342,0330,0335,0350,0335,0336,0336,0342,0335,0335,0342,0335,0304,0337,0331,0331,0333,0337,0337 01020:0304,0333,0200,0336,0330,0332,0336,0336,0332,0337,0200,0333,0333,0200,0332,0332,0336,0330,0335,0337,0342,0330,0350,0335,0335,0351,0333,0350,0336,0334,0342,0334,0334,0342,0337,0335,0351,0333,0336,0333,0331,0337,0337,0331,0337,0304,0336,0330,0330,0336,0330,0334,0331,0337,0337 01021:0304,0333,0200,0336,0330,0332,0336,0336,0332,0337,0200,0333,0333,0200,0332,0332,0336,0330,0335,0337,0342,0330,0350,0335,0335,0335,0336,0342,0335,0335,0342,0337,0335,0351,0333,0336,0333,0331,0337,0337,0331,0337,0304 01022:0333,0200,0336,0336,0330,0330,0332,0332,0332,0336,0336,0333,0337,0337,0336,0330,0336,0333,0337,0337,0200,0333,0200,0333,0200,0331,0331,0332,0332,0200,0333,0200,0333,0200,0336,0333,0331,0337,0337,0332,0330,0336,0336,0331,0337,0342,0330,0335,0350,0335,0336,0342,0335,0335,0342,0337,0335,0335,0335,0351,0331,0331,0331,0333,0333,0336,0330,0337,0337,0337 01023:0333,0200,0336,0336,0330,0330,0332,0332,0332,0336,0336,0333,0337,0337,0336,0330,0336,0333,0337,0337,0200,0333,0200,0333,0200,0331,0331,0332,0332,0200,0333,0200,0333,0200,0336,0333,0331,0337,0337,0332,0330,0336,0336,0331,0337,0335,0335,0331,0342,0330,0335,0350,0335,0336,0342,0335,0335,0342,0337,0335,0335,0335,0351,0331,0331,0331,0333,0333,0336,0330,0337,0337,0337,0335,0335,0331,0333 01024:0333,0200,0336,0336,0330,0332,0337,0200,0336,0336,0330,0332,0337,0200,0336,0336,0330,0332,0337,0200,0333,0333,0333,0331,0331,0331,0336,0331,0333,0337,0337,0337,0337 01025:0333,0200,0336,0336,0330,0332,0337,0336,0336,0330,0332,0337,0200,0336,0336,0330,0332,0337,0200,0333,0333,0333,0331,0331,0331,0336,0331,0333,0337,0337,0337,0337 01026:0333,0200,0336,0330,0332,0336,0336,0333,0331,0337,0200,0306,0335,0342,0332,0342,0330,0335,0335,0342,0335,0335,0335,0335,0331,0334,0304,0332,0306,0335,0342,0330,0350,0335,0342,0334,0331,0335,0304,0334,0331,0332,0335,0336,0332,0337,0342,0330,0350,0335,0335,0335,0336,0342,0335,0335,0342,0335,0304,0331,0331,0331,0331,0333,0333,0333,0333,0333,0337,0337,0337 01027:0333,0200,0336,0330,0332,0336,0336,0333,0331,0337,0332,0200,0306,0335,0342,0332,0342,0330,0335,0335,0342,0335,0335,0335,0335,0331,0334,0304,0332,0306,0335,0342,0330,0350,0335,0342,0334,0331,0335,0304,0334,0331,0333,0333,0330,0335,0342,0330,0350,0335,0335,0335,0336,0342,0335,0335,0342,0335,0304,0331,0331,0331,0331,0331,0333,0337,0337,0337 01010:0333,0200,0350,0334,0310,0337,0342,0336,0332,0335,0335,0337,0342,0336,0333,0334,0351,0313 01030:0333,0200,0336,0332,0337,0350,0350,0350,0342,0335,0342,0335,0342,0335,0342,0335,0342,0335,0342,0334,0334,0334,0334,0334,0334,0342,0334,0342,0334,0342,0334,0342,0334,0334,0342,0335,0335,0335,0335,0335,0335,0335,0335,0335,0335,0335,0335,0342,0334,0334,0334,0334,0334,0334,0304,0343,0336,0333,0337 01031:0333,0200,0336,0330,0332,0336,0332,0331,0123,0126,0107,0330,0330,0332,0332,0330,0335,0335,0336,0330,0332,0337,0201,0335,0350,0335,0336,0342,0335,0335,0342,0334,0304,0333,0333,0333,0333,0331,0331,0331,0331,0331,0332,0336,0333,0336,0332,0337,0337,0337,0337,0337, 0400:0300 0200:0304,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334 0201:0342,0330, 01201:0304,0313,0333,0200,0336,0336,0330,0330,0332,0332,0332,0335,0336,0337,0337,0342,0330,0335,0350,0335,0336,0336,0342,0335,0335,0342,0335,0304,0337,0331,0331,0333,0337,0337 01344:0333,0200,0336,0330,0332,0336,0332,0340,0335,0337,0342,0330,0340,0334,0332,0336,0331,0332,0331,0337,0337,0202, 0202:0304,0313,0350,0335,0336,0336,0342,0333,0342,0333,0342,0333,0342,0333,0334,0304,0337,0337, 01345:0202,0200,0350,0334,0343,0335,0304, 01346:0202,0200,0350,0334,0332,0335,0335,0343,0333,0335,0304,0334, 01202:0202,0200, 01203:0304,0313,0202,0332,0333,0200,0336,0336,0330,0330,0332,0332,0332,0335,0336,0337,0337,0342,0330,0335,0350,0335,0336,0336,0342,0335,0335,0342,0335,0304,0337,0331,0331,0333,0337,0337, 0203:0344,0330 0204:0362,0203,0334,0203,0334,0203,0334,0203,0334,0363 01204:0202,0200,0336,0336,0330,0332,0337,0200,0336,0331,0333,0337,0337, 01365:0313,0304,0333,0200,0336,0330,0332,0336,0331,0332,0337,0350,0350,0334,0342,0335,0335,0342,0334,0304,0333,0350,0350,0334,0342,0335,0335,0342,0334,0304,0336,0333,0331,0337,0337 01205:0202,0200,0336,0336,0330,0332,0332,0332,0330,0205,0331,0331,0332,0337,0337,0333, 0205:0362,0203,0335,0203,0203,0335,0203,0335,0203,0203,0335,0363,0336,0330,0333,0336,0331,0332,0337,0365,0336,0332,0331,0337,0337, 0206:0336,0332,0337,0362,0203,0334,0336,0203,0335,0350,0335,0337,0310,0337,0203,0335,0335,0203,0335,0304,0335,0336,0313,0336,0203,0334,0337,0203,0363,0335,0335,0336,0332,0337, 01206:0202,0200,0336,0332,0206,0333,0337, 01366:0333,0200,0336,0336,0332,0332,0332,0330,0335,0337,0366,0340,0342,0330,0332,0335,0335,0367,0335,0336,0333,0330,0337,0337,0331 01367:0333,0200,0336,0336,0332,0332,0332,0330,0335,0337,0366,0330,0332,0335,0335,0367,0335,0336,0340,0334,0337,0342,0336,0333,0330,0337,0337,0331,0335,0331,0336,0332,0337, 0500:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0162,0143,060,0157,0153,0147,0130,056,0152,0160,0147, 0501:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0116,060,0130,0113,065,0117,0124,056,0152,0160,0147, 0502:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0107,0150,0121,0131,066,067,0167,056,0152,0160,0147, 0503:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0144,067,0144,0166,0115,0125,0130,056,0152,0160,0147, 0504:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,071,0111,066,0152,0102,0156,0154,056,0152,0160,0147, 0505:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0153,0122,0141,0172,0157,0120,0111,056,0152,0160,0147, 0506:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0113,060,0112,0153,0103,0143,071,056,0152,0160,0147, 0507:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0164,0124,0103,070,0132,0115,0141,056,0152,0160,0147, 0510:0150,0164,0164,0160,0163,072,057,057,0151,056,0151,0155,0147,0165,0162,056,0143,0157,0155,057,0153,0122,0141,0172,0157,0120,0111,056,0152,0160,0147, 01370:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0331,0331,0331,0333,0333,0335,0335,0342,0330,0334,0350,0334,0342,0334,0334,0342,0335,0351,0332,0332,0330,0330,0330,0333,0335,0306,0342,0336,0331,0337,0337,0342,0330,0334,0334,0342,0330,0334,0334,0342,0330,0334,0334,0304,0334,0333,0333,0336,0336,0332,0337,0337,0337,0331,0337 01371:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0332,0332,0335,0342,0330,0334,0334,0350,0335,0342,0334,0334,0342,0335,0335,0335,0351,0333,0336,0331,0331,0331,0333,0335,0337,0337,0306,0342,0330,0334,0334,0342,0330,0334,0334,0342,0330,0334,0334,0304,0330,0330,0336,0336,0331,0334,0337,0337,0337,0331,0336,0336,0336,0330,0337,0337,0337,0337 01372:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0331,0331,0331,0333,0333,0335,0335,0342,0330,0334,0350,0334,0342,0334,0334,0342,0335,0351,0332,0332,0330,0330,0330,0336,0331,0333,0337,0337,0342,0330,0335,0342,0330,0335,0342,0330,0335,0342,0330,0335,0333,0333,0336,0336,0332,0337,0337,0337,0331,0336,0336,0336,0330,0337,0337,0337,0337 01373:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0332,0332,0335,0342,0330,0334,0334,0350,0335,0342,0334,0334,0342,0335,0335,0335,0351,0333,0331,0331,0336,0330,0333,0337,0337,0342,0330,0335,0342,0330,0335,0342,0330,0335,0342,0330,0335,0333,0333,0331,0331,0336,0336,0330,0332,0337,0337,0337,0337 01374:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0331,0331,0331,0333,0333,0335,0335,0342,0330,0334,0350,0334,0342,0334,0334,0342,0335,0351,0332,0332,0330,0330,0330,0333,0335,0305,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0304,0334,0333,0333,0333,0331,0331,0331,0331,0337,0337,0337 01375:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0332,0332,0335,0342,0330,0334,0334,0350,0335,0342,0334,0334,0342,0335,0335,0335,0351,0333,0331,0331,0333,0330,0335,0305,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0304,0330,0330,0330,0334,0331,0331,0331,0331,0337,0337,0337 01376:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0331,0331,0331,0333,0333,0335,0335,0342,0330,0334,0350,0334,0342,0334,0334,0342,0335,0351,0332,0332,0330,0330,0330,0335,0330,0306,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0304,0330,0330,0330,0334,0337,0337,0331,0337 01377:0333,0200,0336,0336,0332,0332,0336,0330,0337,0337,0342,0330,0336,0342,0331,0335,0342,0330,0336,0342,0330,0334,0342,0330,0337,0342,0330,0337,0336,0336,0342,0330,0334,0342,0330,0342,0330,0342,0330,0335,0331,0331,0332,0332,0335,0342,0330,0334,0334,0350,0335,0342,0334,0334,0342,0335,0335,0335,0351,0333,0331,0333,0335,0306,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0342,0330,0334,0304,0333,0330,0330,0330,0334,0331,0331,0331,0337,0337,0337 0600:0122,0157,0157,0164,040,0115,0141,0147,0151,0143,040,0133,060,060,055,060,063,067,0135, 0601:0106,0157,0156,0164,040,0133,060,064,060,055,060,061,067,066,0135, 0602:0123,0150,0141,0160,0145,0163,040,0133,060,062,060,060,055,060,062,067,067,0135, 0603:0107,0145,0157,0155,0145,0164,0162,0171,040,0101,0143,0164,0151,0157,0156,0163,040,0133,060,063,060,060,055,060,063,067,067,0135, 0604:0111,0155,0141,0147,0145,0163,040,0133,060,065,060,060,055,060,065,067,067,0135, 0605:0127,0157,0162,0144,0163,040,0133,060,066,060,060,055,060,066,067,067,0135, 0606:0115,0141,0164,0150,040,0133,060,067,060,060,055,060,067,067,067,0135, 0274:0333,0331,0362,0203,0334,0203,0334,0203,0334,0203,0334,0363,0330,0332, 0250:0305,0311,0336,0362,0203,0335,0350,0335,0337,0203,0305,0335,0335,0203,0363,0335,0350,0335,0305, 0251:0305,0311,0336,0362,0203,0334,0350,0334,0337,0203,0305,0334,0334,0203,0363,0334,0350,0334,0305, 0252:0305,0311,0337,0362,0203,0335,0335,0203,0335,0350,0335,0336,0203,0363,0335,0335,0335,0305, 0253:0305,0311,0337,0362,0203,0334,0334,0203,0334,0350,0334,0336,0203,0363,0334,0334,0334,0305, 0254:0305,0311,0335,0362,0203,0335,0335,0336,0203,0335,0203,0363,0335,0337, 0255:0311,0305,0334,0362,0203,0334,0334,0336,0203,0334,0203,0363,0334,0337, 0256:0305,0311,0335,0362,0203,0335,0335,0337,0203,0335,0335,0336,0203,0363, 0257:0305,0311,0334,0362,0203,0334,0334,0337,0203,0334,0334,0336,0203,0363, 0260:0311,0305,0333,0350,0334,0337,0362,0203,0305,0334,0334,0336,0203,0334,0203,0363,0334,0334,0334,0330,0335,0335,0350,0334,0305, 0261:0311,0305,0332,0350,0335,0305,0337,0362,0203,0335,0335,0336,0203,0335,0203,0363,0331,0350,0335,0335,0335,0305,0336,0331,0337, 01250:0333,0200,0336,0332,0330,0250,0304,0313,0331,0333,0337, 01251:0333,0200,0336,0332,0330,0251,0304,0313,0331,0333,0337, 01252:0333,0200,0336,0332,0330,0252,0304,0313,0331,0333,0337, 01253:0333,0200,0336,0332,0330,0253,0304,0313,0331,0333,0337, 01254:0333,0200,0336,0332,0330,0254,0304,0313,0331,0333,0337, 01255:0333,0200,0336,0332,0330,0255,0304,0313,0331,0333,0337, 01256:0333,0200,0336,0332,0330,0256,0304,0313,0331,0333,0337, 01257:0333,0200,0336,0332,0330,0257,0304,0313,0331,0333,0337, 01260:0333,0200,0336,0332,0330,0260,0304,0313,0331,0333,0337, 01261:0333,0200,0336,0332,0330,0261,0304,0313,0331,0333,0337, 0176:0330,0336,0336,0336,0331,0331,0333,0333,0341,0331,0331,0331,0331,0331,0331,0333,0333,0333,0333,0337,0337,0337, 045:0336,0333,0330,0336,0332,0330,0335,0335,0366,0335,0332,0332,0331,0367,0335,0335,0366,0335,0335,0334,0332,0331,0331,0334,0336,0331,0337,0367,0336,0335,0335,0366,0332,0332,0334,0333,0337,0336,0334,0334,0367,0337,0335,0335,0201,0336,0342,0335,0335,0331,0331,0333,0333,0333,0333,0337,0337,0337, */ </script> <!-- <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> --> <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>--> <script> inPath = false;//move to true after path started, back to false after path ended explodeIndex = 0; explodeLimit = 100000; currentTable = []; for(var index = 0;index < 01777;index ++){ currentTable.push(""); } var inputbytecode = document.getElementById("bytecodeScript").text; var bytecodearray = inputbytecode.split("\n"); for(var index = 0;index < bytecodearray.length;index++){ if(bytecodearray[index].includes(":")){ var localBytecode = bytecodearray[index].split(":"); var localAddress = parseInt(localBytecode[0],8); currentTable[localAddress] = localBytecode[1]; } } myFont = "Futura"; currentWord = "Word"; currentSVG = ""; currentAddress = 0401; currentGlyph = currentTable[currentAddress]; currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; phi = 0.5*(Math.sqrt(5) + 1); unit = 100; scaleFactor = 2; side = unit; thetaStep = Math.PI/2; theta0 = -Math.PI/2; theta = theta0; x0 = 200; y0 = 200; x = x0; y = y0; cursor = { x:x, y:y, theta:theta, thetaStep:thetaStep, side:side, glyph:"0362,0344,0363,0336,0330,0340,0331,0337,0337,0330,0340,0331,0336,0334,0362,0344,0363,0335,0335,0362,0344,0363" } </script> </head> <body> <div class = "atom" id = "masterRoot"></div> <div id = "glyphTableEditor" class = "atom" style = "display:block"> <canvas style = "display:none;" id = "invisibleCanvas"></canvas> <div class = "atom" style = "width:450px;height:450px;padding:40px 0px 0px 40px"> <canvas width = "400" height = "400" id = "plotCanvas" style = "border:solid"></canvas> </div> <div id = "wordPanel" class = "atom" onchange = "updateWordOption();"> string:<input id = "wordInput" onchange = "updateWordInput();"></input> <select id = "wordSelect"> </select> bytecode:<input id = "wordCode"></input> </div> <div id = "spellDiv"> <canvas width = "3000" height = "30" id = "spellCanvas" style = "border:solid;float:left;"></canvas> <input size = "6" id = "addr" style = "float:left;" onchange = "updateAddr();"></input> <input style = "float:left;" size = "428" id = "glyphBytecode" onchange = "updateGlyph()"></input> </div> <div class = "atom" style = "width:610px;height:auto" id = "controlPad"> <div style = "width:95px;height:100px;float:left" id = "directionPad"></div> <div style = "width:210px;height:30px;float:left" id = "anglePad"></div> <div style = "width:180px;height:30px;float:left" id = "scalePad"></div> <div style = "width:125px;height:100px;float:right;" id = "rootPad"></div> <div style = "width:384px;height:100px;float:left" id = "drawPad"></div> <input style = "float:left;margin:0px" size = "80" id = "drawGlyphGlyph" onchange = "updateDrawGlyphs();"></input> </div> <p> <div class = "atom"> <textarea id = "mainTextArea" cols = "84" rows = "12"> </textarea> </div> </div> <script> var newSelect = document.getElementById("wordSelect"); for(var index = 0600;index < 0700;index++){ var newOption = document.createElement("OPTION"); newOption.text = "0" + index.toString(8); newSelect.appendChild(newOption); } currentNode = document.getElementById("directionPad"); //buildPanel([0334,0330,0335,0332,0300,0333,0336,0331,0337]); buildPanel("0334,0330,0335,0332,0300,0333,0336,0331,0337"); currentNode = document.getElementById("anglePad"); buildPanel("0304,0305,0306,0350,0351,0352,0353"); currentNode = document.getElementById("scalePad"); buildPanel("0310,0311,0312,0313,0314,0316"); currentNode = document.getElementById("rootPad"); buildPanel("020,010,021,022,023,024,025,026,027,031"); currentNode = document.getElementById("drawPad"); drawGlyphsGlyph = "0200,0201,0340,0341,0342,0343,0362,0203,0363"; document.getElementById("drawGlyphGlyph").value = drawGlyphsGlyph; buildPanel(drawGlyphsGlyph); ctx = document.getElementById("plotCanvas").getContext("2d"); currentGlyph = currentTable[currentAddress]; redraw(); currentNode = document.getElementById("masterRoot"); appendGlyphButton(030); function buildPanel(glyphsGlyph){ var glyphsGlyphArray = glyphsGlyph.split(","); var buttonArray = []; for(var index = 0;index < glyphsGlyphArray.length;index++){ buttonArray.push(parseInt(glyphsGlyphArray[index],8)); } for(var index = 0;index < buttonArray.length;index++){ appendGlyphButton(buttonArray[index]); } } function updateWordOption(){ wordAddress = parseInt(document.getElementById("wordSelect").value,8); document.getElementById("wordInput").value = byteCode2string(currentTable[wordAddress]); } function updateWordInput(){ wordAddress = parseInt(document.getElementById("wordSelect").value,8); currentTable[wordAddress] = string2byteCode(document.getElementById("wordInput").value); document.getElementById("wordCode").value = string2byteCode(document.getElementById("wordInput").value); } function updateAddr(){ currentAddress = parseInt(document.getElementById("addr").value,8); currentGlyph = currentTable[currentAddress]; currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } function updateGlyph(){ currentGlyph = document.getElementById("glyphBytecode").value; currentGlyph = commaCleaner(currentGlyph); currentTable[currentAddress] = currentGlyph; currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } function updateDrawGlyphs(){ currentNode = document.getElementById("drawPad"); while (currentNode.hasChildNodes()) { currentNode.removeChild(currentNode.childNodes[0]); } drawGlyphsGlyph = document.getElementById("drawGlyphGlyph").value; buildPanel(drawGlyphsGlyph); } function roctalChar(localAddress){ drawGlyph("0313,0336,0336,0336,0274,0333,0331,0274,0333,0331,0337,"); for(var bitIndex = 8;bitIndex >= 0;bitIndex--){ if(((localAddress>>bitIndex)&1)==1){ doTheThing(0274);// data square } doTheThing(0333); if((bitIndex == 6)||(bitIndex == 3)){ drawGlyph("0331,0332,0332,0332"); } } drawGlyph("0331,0337,0337,0200,0330"); drawGlyph("0332,0336,0336,0331,0331,"); currentWord = ((localAddress >> 6)&7).toString(); drawGlyph("0365,0331,"); currentWord = ((localAddress >> 3)&7).toString(); drawGlyph("0365,0331,"); currentWord = ((localAddress)&7).toString(); drawGlyph("0365,0331,"); drawGlyph("0330,0337,0337,0330,0333,"); } function redraw(){ x0 = 200; y0 = 200; unit = 100; //draw the glyph: ctx = document.getElementById("plotCanvas").getContext("2d"); //draw current glyph: doTheThing(0300); // ctx.fillStyle = "#808080" ctx.clearRect(0,0,400,400); doTheThing(0300); drawGlyph(currentGlyph); //draw the cursor: ctx = document.getElementById("invisibleCanvas").getContext("2d"); getCursor(); ctx = document.getElementById("plotCanvas").getContext("2d"); drawGlyph(cursor.glyph); //spell: ctx = document.getElementById("spellCanvas").getContext("2d"); ctx.clearRect(0,0,3000,40); unit = 20; x0 = 5; y0 = 25; doTheThing(0300); spellGlyph(currentGlyph); document.getElementById("addr").value = "0" + currentAddress.toString(8); document.getElementById("glyphBytecode").value = currentGlyph; explodeIndex = 0; } function appendGlyphButton(localCommand){ glyphButtonSize = 30; var newCanvas = document.createElement("CANVAS"); newCanvas.width = glyphButtonSize; newCanvas.height = glyphButtonSize; newCanvas.className = "glyphButtons"; ctx = newCanvas.getContext("2d"); ctx.fillStyle="white"; ctx.fillRect(5, 5, glyphButtonSize-10, glyphButtonSize-10); ctx.fillStyle="black"; doTheThing(0300); x = 5; y = glyphButtonSize-5; side = glyphButtonSize-10; doTheThing(localCommand + 01000); if(localCommand < 040){ newCanvas.onclick = function(){ localRoot(localCommand); } } if(localCommand >= 040){ newCanvas.onclick = function(){ cursorAction(localCommand); redraw(); } } currentNode.appendChild(newCanvas); } function cursorAction(localCommand){ currentGlyphArray = currentGlyph.split(","); if(cursorPosition > currentGlyphArray.length){ cursorPosition = currentGlyphArray.length; } currentGlyph = ""; doTheThing(0300); for(var index = 0;index < cursorPosition;index++){ currentGlyph += currentGlyphArray[index] + ","; var localAction = parseInt(currentGlyphArray[index],8); if( !((localAction >= 0340) && (localAction < 0344)) ){ doTheThing(localAction); } } if(localCommand != undefined){ if( !((localCommand >= 0340) && (localCommand < 0344)) ){ doTheThing(localCommand); } } cursor.x = x; cursor.y = y; cursor.theta = theta; cursor.thetaStep = thetaStep; cursor.side = side; if(localCommand != undefined){ currentGlyph += "0" + localCommand.toString(8) + ","; } for(var index = cursorPosition;index < currentGlyphArray.length;index++){ currentGlyph += currentGlyphArray[index] + ","; } cursorPosition++; currentGlyph = commaCleaner(currentGlyph); } function getCursor(){ currentGlyphArray = currentGlyph.split(","); var foo = ""; doTheThing(0300); for(var index = 0;index < cursorPosition;index++){ foo += currentGlyphArray[index] + ","; var localAction = parseInt(currentGlyphArray[index],8); doTheThing(localAction); } cursor.x = x; cursor.y = y; cursor.theta = theta; cursor.thetaStep = thetaStep; cursor.side = side; } function commaCleaner(dirtyGlyph){ //remove extra commas from glyph var dirtyArray = dirtyGlyph.split(","); var cleanGlyph = ""; for(var index = 0;index < dirtyArray.length;index++){ if(dirtyArray[index] != ""){ cleanGlyph += dirtyArray[index] + ","; } } return cleanGlyph; } function drawGlyph(localString){ var tempArray = localString.split(','); for(var index = 0;index < tempArray.length;index++){ if(explodeIndex < explodeLimit){ doTheThing(parseInt(tempArray[index],8)); } } } function spellGlyph(localString){ var tempArray = localString.split(','); for(var index = 0;index < tempArray.length;index++){ ctx.lineWidth = 2; ctx.strokeStyle="black"; doTheThing(parseInt(tempArray[index],8) + 01000); if(index == cursorPosition-1){ drawGlyph("0336,0333,0336,0330,0341,0331,0337,0333,0337"); } } } function byteCode2string(localByteCode){ var localString = ""; var stringArray = localByteCode.split(","); for(var index = 0;index < stringArray.length;index++){ var myCharCode = String.fromCharCode(parseInt(stringArray[index],8)); if(parseInt(stringArray[index],8) >= 040 && parseInt(stringArray[index],8) < 0177 ){ localString += myCharCode; } if(parseInt(stringArray[index],8) == 012){//newline localString += myCharCode; } if(parseInt(stringArray[index],8) == 011){//vertical tab localString += myCharCode; } } return localString; } function string2byteCode(localString){ var localByteCode = ""; for(var stringIndex = 0;stringIndex < localString.length;stringIndex++){ var tempCharCode = localString.charCodeAt(stringIndex); if(tempCharCode != 0){ localByteCode += "0"; localByteCode += tempCharCode.toString(8); localByteCode += ","; } } return localByteCode; } function doTheThing(localCommand){ explodeIndex++; if(explodeIndex > explodeLimit){ explodeIndex = 0; } if(localCommand >= 0600 && localCommand < 0700){ //get the glyph, turn it into ascii, make it the Word: if(currentTable[localCommand] != undefined){ currentWord = byteCode2string(currentTable[localCommand]); } } if((localCommand > 02000)&&(localCommand < 03000)){ roctalChar(localCommand - 02000); } if(localCommand >= 0040 && localCommand <= 0277){//shapes and fonts drawGlyph(currentTable[localCommand]); } if(localCommand >= 0400 && localCommand <= 0477){//manuscript glyphs drawGlyph(currentTable[localCommand]); } if(localCommand >= 01000 && localCommand <= 01377){//symbol glyphs drawGlyph(currentTable[localCommand]); } if(localCommand == 0300){ x = x0; y = y0; theta = theta0; side = unit; thetaStep = Math.PI/2; scaleFactor = 2; ctx.lineWidth = 2; ctx.strokeStyle="black"; ctx.fillStyle="black"; } if(localCommand == 0304){ thetaStep = Math.PI/2; } if(localCommand == 0305){ thetaStep = 2*Math.PI/5; } if(localCommand == 0306){ thetaStep = Math.PI/3; } if(localCommand == 0310){ scaleFactor = Math.sqrt(2); } if(localCommand == 0311){ scaleFactor = phi; //"golden" ratio } if(localCommand == 0312){ scaleFactor = Math.sqrt(3); } if(localCommand == 0313){ scaleFactor = 2; //2x } if(localCommand == 0314){ scaleFactor = 3; //3x } if(localCommand == 0315){ scaleFactor = 3.14159; //pi* } if(localCommand == 0316){ scaleFactor = 5; //5* } if(localCommand == 0317){ side = unit; } if(localCommand == 0320){ ctx.strokeStyle="black"; ctx.lineWidth = 2; ctx.fillStyle = "black"; } if(localCommand == 0321){ ctx.strokeStyle = "yellow"; ctx.lineWidth = 2; ctx.fillStyle = "yellow"; } if(localCommand == 0322){ ctx.strokeStyle="orange"; ctx.lineWidth = 2; ctx.fillStyle = "orange"; } if(localCommand == 0323){ ctx.strokeStyle="white"; ctx.lineWidth = 2; ctx.fillStyle = "white"; } if(localCommand == 0324){ ctx.strokeStyle="red"; ctx.lineWidth = 2; ctx.fillStyle = "red"; } if(localCommand == 0325){ ctx.strokeStyle="green"; ctx.lineWidth = 2; ctx.fillStyle = "green"; } if(localCommand == 0326){ ctx.strokeStyle="purple"; ctx.lineWidth = 2; ctx.fillStyle = "purple"; } if(localCommand == 0327){ ctx.strokeStyle="blue"; ctx.lineWidth = 2; ctx.fillStyle = "blue"; } if(localCommand == 0330){ x += side*Math.cos(theta); y += side*Math.sin(theta); } if(localCommand == 0331){ x -= side*Math.cos(theta); y -= side*Math.sin(theta); } if(localCommand == 0332){ x += side*Math.cos(theta - thetaStep); y += side*Math.sin(theta - thetaStep); } if(localCommand == 0333){ x += side*Math.cos(theta + thetaStep); y += side*Math.sin(theta + thetaStep); } if(localCommand == 0334){ theta -= thetaStep; // CCW } if(localCommand == 0335){ theta += thetaStep; // CW } if(localCommand == 0336){ side /= scaleFactor; // - } if(localCommand == 0337){ side *= scaleFactor; // + } if(localCommand == 0340){ //point ctx.beginPath(); ctx.arc(x, y, 3, 0, 2 * Math.PI); ctx.fill(); ctx.closePath(); currentSVG += "<circle cx=\""; currentSVG += Math.round(x).toString(); currentSVG += "\" cy = \""; currentSVG += Math.round(y).toString(); currentSVG += "\" r = \"3\" stroke = \"black\" stroke-width = \"2\" "; currentSVG += "fill = \"black\" />\n"; } if(localCommand == 0341){ //circle ctx.beginPath(); ctx.arc(x, y, side, 0, 2 * Math.PI); ctx.closePath(); ctx.stroke(); currentSVG += " <circle cx=\""; currentSVG += Math.round(x).toString(); currentSVG += "\" cy = \""; currentSVG += Math.round(y).toString(); currentSVG += "\" r = \"" + side.toString() + "\" stroke = \"black\" stroke-width = \"2\" "; currentSVG += "fill = \"none\" />\n"; } if(localCommand == 0342){ //line ctx.beginPath(); ctx.moveTo(x,y); ctx.lineTo(x + side*Math.cos(theta),y + side*Math.sin(theta)); ctx.stroke(); ctx.closePath(); var x2 = Math.round(x + side*Math.cos(theta)); var y2 = Math.round(y + side*Math.sin(theta)); currentSVG += " <line x1=\""+Math.round(x).toString()+"\" y1=\""+Math.round(y).toString()+"\" x2=\""+x2.toString()+"\" y2=\""+y2.toString()+"\" style=\"stroke:black;stroke-width:2\" />\n" } if(localCommand == 0343){ ctx.beginPath(); ctx.arc(x, y, side, theta - thetaStep,theta + thetaStep); ctx.stroke(); ctx.closePath(); localString = ""; localString += " <path d=\""; localString += "M"; var localInt = x + side*Math.cos(theta - thetaStep); localString += localInt.toString(); localString += " "; localInt = y + side*Math.sin(theta - thetaStep); localString += localInt.toString(); currentSVG += localString; localString = " A" + side.toString() + " " + side.toString() + " 0 0 1 "; localInt = x + side*Math.cos(theta + thetaStep); localString += localInt.toString() + " "; localInt = y + side*Math.sin(theta + thetaStep); localString += localInt.toString() + "\" fill = \"none\" stroke = \"black\" stroke-width = \"2\" />\n"; currentSVG += localString; } if(localCommand == 0344){ //part of a poly line or path ctx.lineTo(x + side*Math.cos(theta),y + side*Math.sin(theta)); ctx.stroke(); var x2 = Math.round(x + side*Math.cos(theta)); var y2 = Math.round(y + side*Math.sin(theta)); currentSVG += "L" + x2 + " " + y2 + " "; } if(localCommand == 0345){ //arc ctx.arc(x, y, side, theta - thetaStep,theta + thetaStep); ctx.stroke(); } if(localCommand == 0346){ //arc, reverse direction ctx.arc(x, y, side, theta + thetaStep,theta - thetaStep,true); ctx.stroke(); } if(localCommand == 0347){ //filled circle ctx.beginPath(); ctx.arc(x, y, side, 0, 2 * Math.PI); ctx.closePath(); ctx.stroke(); ctx.fill(); currentSVG += " <circle cx=\""; currentSVG += Math.round(x).toString(); currentSVG += "\" cy = \""; currentSVG += Math.round(y).toString(); currentSVG += "\" r = \"" + side.toString() + "\" stroke = \"black\" stroke-width = \"2\" "; currentSVG += "fill = \"black\" />\n"; } if(localCommand == 0350){ thetaStep /= 2; //angle/2 } if(localCommand == 0351){ thetaStep *= 2; //2angle } if(localCommand == 0352){ thetaStep /= 3; //angle/3 } if(localCommand == 0353){ thetaStep *= 3; //3angle } if(localCommand == 0362){ ctx.beginPath(); ctx.moveTo(x,y); currentSVG += " <path d = \"M"; currentSVG += Math.round(x).toString() + " "; currentSVG += Math.round(y).toString() + " "; // currentSVG += " <polyline points=\""; } if(localCommand == 0363){ ctx.closePath(); ctx.stroke(); ctx.fill(); currentSVG += "Z\""+ " stroke = \"black\" stroke-width = \"2\" fill = \"none\" "+"/>"; } if(localCommand == 0365){ ctx.font=side.toString(8) + "px " + myFont; ctx.fillText(currentWord,x,y); currentSVG += " <text x=\""; currentSVG += Math.round(x).toString(); currentSVG += "\" y = \""; currentSVG += Math.round(y).toString(); currentSVG += "\" fill = \"black\""; currentSVG += " font-size = \""; currentSVG += side + "px\""; currentSVG += " font-family = \"futura\""; currentSVG += ">"; currentSVG += currentWord; currentSVG += "</text>\n"; } if(localCommand == 0366){ ctx.beginPath(); ctx.moveTo(Math.round(x),Math.round(y)); cpx1 = Math.round(x + side*Math.cos(theta)); cpy1 = Math.round(y + side*Math.sin(theta)); currentSVG += "<path d = \"M"; currentSVG += (Math.round(x)).toString() + ","; currentSVG += (Math.round(y)).toString() + " C"; currentSVG += cpx1.toString() + "," + cpy1.toString() + " "; //<path d="M100,200 C150,150 200,150 250,200" /> } if(localCommand == 0367){ x2 = Math.round(x); y2 = Math.round(y); cpx2 = Math.round(x + side*Math.cos(theta)); cpy2 = Math.round(y + side*Math.sin(theta)); ctx.bezierCurveTo(cpx1,cpy1,cpx2,cpy2,x2,y2); ctx.stroke(); currentSVG += cpx2.toString() + "," + cpy2.toString() + " "; currentSVG += x2.toString() + "," + y2.toString() + "\" fill = \"none\" stroke-width = \"2\" stroke = \"black\" />"; } // stroke = "black" stroke-width = "2" } function localRoot(localCommand){//010 octal = 8 decimal = delete as per ASCII spec // localCommand = parseInt(localCommand,8); if(localCommand == 010){ currentGlyphArray = currentGlyph.split(","); firstHalf = ""; secondHalf = ""; for(var index = 0;index < cursorPosition - 1;index++){ firstHalf += currentGlyphArray[index] + ","; } for(var index = cursorPosition;index < currentGlyphArray.length;index++){ secondHalf += currentGlyphArray[index] + ","; } currentGlyph = firstHalf + secondHalf; if(cursorPosition > 0){ cursorPosition--; } currentGlyph = commaCleaner(currentGlyph); redraw(); } if(localCommand == 0020){//cursor forward cursorPosition--; if(cursorPosition < 0){ cursorPosition = currentGlyphArray.length; } redraw(); } if(localCommand == 0021){//cursor back cursorPosition++; if(cursorPosition > currentGlyphArray.length ){ cursorPosition = 0; } redraw(); } if(localCommand == 0022){//move to previous glyph in table currentGlyph = document.getElementById("glyphBytecode").value; currentGlyph = commaCleaner(currentGlyph); currentTable[currentAddress] = currentGlyph; currentAddress--; currentGlyph = currentTable[currentAddress]; currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } if(localCommand == 0023){//move to next glyph in table currentGlyph = document.getElementById("glyphBytecode").value; currentGlyph = commaCleaner(currentGlyph); currentTable[currentAddress] = currentGlyph; currentAddress++; currentGlyph = currentTable[currentAddress]; currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } if(localCommand == 0024){//from action to symbol if(currentAddress < 01000 && currentAddress > 0){ currentAddress += 01000; currentGlyph = currentTable[currentAddress]; } currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } if(localCommand == 0025){//from symbol to action if(currentAddress > 01000 && currentAddress < 02000){ currentAddress -= 01000; currentGlyph = currentTable[currentAddress]; } currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } if(localCommand == 0026){//import full geometron hypercube var localString = document.getElementById("mainTextArea").value; var inputStack = localString.split("\n"); for(var index = 0;index < inputStack.length;index++){ var stackLine = inputStack[index].split(":"); var localAddress = parseInt(stackLine[0],8); var localGlyph = stackLine[1]; currentTable[localAddress] = localGlyph; } currentGlyph = currentTable[currentAddress]; currentGlyphArray = currentGlyph.split(","); cursorPosition = currentGlyphArray.length; redraw(); } if(localCommand == 0027){//export full geometron hypercube var localString = ""; for(var index = 0;index < currentTable.length;index++){ localString += "0" + index.toString(8) + ":" + currentTable[index] + "\n"; } document.getElementById("mainTextArea").value = localString; } if(localCommand == 030){ if(document.getElementById("glyphTableEditor").style.display != "none"){ document.getElementById("glyphTableEditor").style.display = "none"; }else{ document.getElementById("glyphTableEditor").style.display = "block"; } } if(localCommand == 031){//export SVG currentSVG = ""; x0 = 200; y0 = 200; unit = 100; ctx = document.getElementById("invisibleCanvas").getContext("2d"); doTheThing(0300); drawGlyph(currentGlyph); var localString= "<svg width=\"400\" height=\"400\" viewbox = \"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\" style = \"border:solid;\">\n"; localString += currentSVG; localString += "</svg>"; document.getElementById("mainTextArea").value = localString; } } </script> <style> html { height: 100%; background: black; } .atom{ width: auto; height: auto; border-style: solid; border-width: 6px; border-color: purple; border-radius: 25px; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 10px; background: white; font-size: 16px; font-family: "Century Schoolbook"; text-align: left; float:left; } #spellDiv{ width: 600px; height: auto; border-style: solid; border-width: 6px; border-color: purple; border-radius: 25px; padding: 15px 15px 15px 15px; margin: 10px 10px 10px 10px; background: white; float:left; overflow: scroll; } #plotCanvas{ border-style: solid; border-width: 1px; border-color: black; border-radius: 5px; } .glyphButtons{ border-style: solid; border-width: 0px; border-color: black; background: white; } .glyphButtons:hover{ background: gray; } .glyphButtons:active{ background: yellow; } #glyphTableEditor{ background: gray; } td{ padding: 15px 15px 15px 15px; margin: 10px 10px 10px 10px; } </style> </center> </body> </html>
Open the Editor, Move the Cursor Around
With the html file saved somewhere on your computer that's easy to find, double click on the icon for it, which should open it in your default browser.
What you should see is what is in the screenshot included here. It's complicated. But you only need a very small fraction right now to get started. What you need is to be able to move the cursor, and draw things. For this step, just look at the control panel in the far left of the panel with all the funny symbols, as shown in the screenshot with the arrows. Move your pointer over that and click on the buttons to see what they do.
Start with the arrows, and note that this is a discrete motion: up, down, left and right, always the same distance. Now click on "+" and "-" and see what that does. Then rotate with the rotation arrows, try them all, then click the middle button to reset back to where you started, and play around some more to get the feel for it. To restart, just reload the page in your browser with control-R(PC) or command-R(mac). None of this requires an Internet connection.
When you are comfortable with the cursor, reload the browser again and move to the next step. If the whole thing won't load initially make sure you didn't accidentally either leave something out or copy/paste too much in the previous step.
Draw Your Art
The equivalent of "hello, world" for a purely geometry-based language is to draw a pair of points and circles, the so-called vesica piscis, a common figure in classical geometry which is also used often in modern design. To draw this, click the point button which is denoted by a point, then the circle button denoted by a circle(see screenshots). Then hit one of the four movement arrows(up, down, left or right, doesn't matter which), and repeat this process. You should now see the figure shown.
This is simple enough that if you don't like what you see, just control-R(PC) or command-R(mac) again to reload and try again. Try some other shapes as well if you want. No harm can come from clicking random buttons, all you are doing is editing information in the front end of your browser--nothing on your hard drive or on the real Internet is being affected by your actions.
You drew a thing! But this is still not quite useful, we still need to export the information.
Export SVG, Save File
When you like what you see on the screen(it has circles on it), click the export to SVG button, which is an arrow pointing to the letters "SVG" as shown in the screenshot here. When you click that button, the text area in the lower right should suddenly be populated with code.
Now highlight all the code that you see, as shown in the screen shot, and paste it into an empty file in a text editor. Save this file as something like "test.svg". The editor might ask you if you are sure you want to add the ".svg" at the end, and make sure that you do, and that you don't accidentally save it as a ".txt". When this is done the file should appear as shown in the icon here, with a preview of the final file.
Open the Svg in Other Software
Now that you have an svg, you can open it in your browser to look at it, or edit it with Illustrator or Inkscape(basically a free Illustrator), and import it into the newer versions of Microsoft Office. So that's basically it! With the ability to make an svg file, you can integrate art made in Geometron into existing workflows.
Share Code
The series of numbers you see near the graphical code are the addresses of those geometry actions, and they can by copied and pasted. The field with those numbers in it can be both written to and copied from. Try copying the following into the text field and hitting "enter":
0310,0336,0336,0336,0313,0331,0332,0335,0306,0337,0341,0201,0341,0334,0201,0341,0334,0201,0341,0334,0201,0341,0334,0201,0341,0334,0201,0334,0334,0330,0341,0337,0341,
Whatever you make yourself should change the code in this window, and if you copy it to your clipboard you can share it wherever you want. You could send it in a chat window, post it here, or save it to a text file. That is the save method in this editor: you export the string with the numbers in it and save it.
This is the first of many tutorials of this kind.