Introduction: Using Words in Geometron
This tutorial is the fourth in a series on the language I'm calling Geometron. This language is based entirely on Geometric art: the actions are geometry, the input is art symbols, and the goal of all outputs is art. It is based on the assumption that "computers" are really art engines and that the language to control them should be written accordingly.
The previous tutorials, which are assumed for this one are:
- https://www.instructables.com/id/Geometron-Hello-W...
- https://www.instructables.com/id/Edit-Geometron-Gl...
- https://www.instructables.com/id/Geometron-Shape-T...
The purpose of this tutorial is to learn how to use words in Geometron. They are handled two different ways and we'll work with both of them here.
Step 1: Get a Copy of Geometron Language If You Don't Have It Already
<!--If you don't already have it, copy/paste the following into an html file and save it to your desktop as editGeometron.html or something similar. You need a text editor for this, and the default one on your computer will work fine for that. That will be Notepad on a PC and textEdit on a mac. This file is the sum total of the Geometron language, which I wrote and am releasing into Public Domain with no restrictions whatsoever. Note that because this paragraph in an html comment you can copy/paste this whole step with command-A(mac) or control-A(PC) -->
<!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]; } } for(var index = 040;index < 0177;index++){ currentTable[index + 01000] = currentTable[index]; } 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>
Step 2: Add "word" Command to Command Table
Add the following byte code command to the command window as shown: "0365". Do not forget the leading zero, that is needed to make sure this is in octal (base 8). After you hit "enter" the button for "word" should appear as shown, a "W" with a missing middle. This symbol glyph lives at 01365 and if you're feeling adventurous you could go back to the tutorial on editing the shape table and make a better symbol than the one I have here. When you have that button in your command table, go to the next step.
Step 3: Make a Word
Now hit "-" a couple times to shrink your cursor, then hit the "word" button and you should see the word "word" appear in a Futura font. The choice of font is made in the code, which you can change if you know JavaScript(more on that in a future tutorial). The word "word" is also selected in the initialization code using the global string variable currentWord(ignore this statement if you're not into code things).
Step 4: Edit Word Table
Geometron is two things: a geometric language and a way of organizing information. In the system of information organization, the range from 0600 to 0677 are reserved for words. These words are all in printable 7 bit ASCII, a set of numbers/codes from 040(space) to 0176(tilde). I have also included an ASCII table here generated with another Geometron Hypercube instance which will be documented soon. Note that there are also some action glyphs in this table, before 040. This is because all those kinds of actions, like "move to next glyph", are in what's called the "Root Magic Table" in the Geometron Hypercube, which is the various actions in the range from 0000 to 037 of the overall address space. This is an extension of ASCII that is in the spirit of the original standard in which this part of the table included actions like ringing the bell of a machine or terminating transmission on a teletype. As in the original ASCII, octal 010 or 8 decimal(and hex) is delete, which lives in the Root Magic table as it should. This may not make much sense yet, but I'm putting it in for completeness.
Anyway, what you want to do in this step is edit the word table as shown here: use the selector to select the addresses 0600 and 0601 one by one, then type words into the word field, hit enter and go to the next one. You can go back and forth and select different words to see how the word editing works.
Step 5: Print Words
Now manually add the byte commands "0600" and "0601" before a pair of word writing actions. Or you can start over with a clean slate and just enter the following glyph code:
0336,0336,0600,0365,0601,0365
if you do this you should see the first two words in your word table stacked directly on top of each other as shown.
Step 6: Edit Word Placement
Now, using the methods for editing a glyph from the second Geometron tutorial, add some movements and possibly "-" or "+" between the words. Note that if you try to rotate, the words are still all oriented the same way. This is a limitation of this type of text, which we'll break out of using internal Geometron code next.
Step 7: Use Internal Geometron Text Code
Now, as promised, we'll make text a second way. Type some text in whatever the current word address is, and hit return. You should see some byte code appear to the right of what you typed that is a sequence of numbers in the range from 040-0176. Put your cursor in that window and use control-a(pc) or command-a(mac) to highlight then copy all these byte codes. Then paste them in the window where the main byte code actions go as shown and you'll see some letters using the internal Geometron font. I made this font, and I know very little about typography and did this in a hurry, it's just a proof of principle. But it shows that Geometron can be totally self-contained and describe letters using only its simple geometric functions. This will be important later for physical implementations, where Geometron commands will translate into machine motions. Note that this whole font exists in the html file you have, with no external resources used at all.
Step 8: Mess With Rotations Etc.
Edit the glyph and try using weird angles, halving angles, restoring symmetry to fourfold, and seeing what you can do with interesting text patterns. If you want a small size change, you can combine two, for instance you can set scale to square root of three, shrink, then to the Golden Ratio and expand, to get a pretty small change.