It's strongly believed that cas is a "character assembler". The input describes character shapes, and the output is data for GRAPHICS-2. CAS INPUT SYNTAX ================ : means record following string as a label. x means following moves are invisible. v means following moves are visible. r means end, output label=x-b+number. All other commands are character pairs denoting y,x coordinates in a 14x16 character raster. Draw a line to that coordinate. Vertical coordinates are a-p, and horizontal are a-n. aa is upper left and pn is lower right. Characters reside on the base line from ma to mn (characters like p and q descend below this line). All characters end with a "x mn r" sequence to move to the beginning of the next character. CAS OUTPUT ========== The output for each character is: The label x: 18-bit octal words. Each word is three 6-bit incremental moves. Each incremental move consists of three fields: a 2 bit distance field, a 1 bit visibility field, a 3 bit direction field. If the visibility field is a 0 nothing is drawn, if it is a 1 a line is drawn. The distance field + 1 denotes how many pixels to move in a certain direction. The 2 bit direction field is limited to values in the range 0..3, but by adding 1, the actual distances denoted are in the range 1..4. The 3 bit direction field with values in the range 0..7 is to be interpreted according to this diagram and table: y ^ value direction 7 0 1 ----- --------- | 0 up | 1 up right | 2 right 6---+---2>x 3 down right | 4 down | 5 down left | 6 left 5 4 3 7 up left label=x-b+number. Number is 01, six bits saying how many moves, and 10 zeroes. EXAMPLE ======= Input: :lbk x ai v af mf mj x mn r This character is labeled "lbk" (left bracket). Move invisibly to "ai" near upper right. Draw line left to "af". Draw down to "mf". Draw right to "mj". Invisibly move to "mn" beyond lower right. End. This can be interpreted in a grid starting a location ma (row m, column a) denoted by a 0, and each succeeding move indicated by an increasing number: abcdefghijklmn a.....2..1..... b.............. c.............. d.............. e.............. f.............. g.............. h.............. i.............. j.............. k.............. l.............. m0....3...4...5 n.............. o.............. p.............. Output: x: 0010101 0010101 0010160 0567474 0747262 lbk=x-b+0236000 01 means move diagonally up and right one step; do this eight times. 60 means move up four steps. 56 means draw left three steps. 74 means draw down four steps. 72 means draw left four steps. 62 means move left four steps. 0236000 means there are 15 moves, or 6-bit bytes. 0236000 in binary is 010011110000000000, and shifting this value 10 bits to the right gives 01001111, where only the 6 least significant bits indicate the number of moves, i.e. 001111 or 15 in decimal. The following explanation separates out each move onto its own line. Further it decodes each move into binary, and separates out and interprets the three distance, visibility and direction fields. Finally each line ends with a comment indicating which input command generated the output move: move move move dist vis direc dist vis direc input number octal binary binary binary binary decimal text text command ------ ----- ------ ------ ------ ------ ------- ---- ---- ------- 1 001 000001 00 0 001 1 false up right ai 2 001 000001 00 0 001 1 false up right ai 3 001 000001 00 0 001 1 false up right ai 4 001 000001 00 0 001 1 false up right ai 5 001 000001 00 0 001 1 false up right ai 6 001 000001 00 0 001 1 false up right ai 7 001 000001 00 0 001 1 false up right ai 8 001 000001 00 0 001 1 false up right ai 9 060 110000 11 0 000 4 false up ai a 056 101110 10 1 110 3 true left v af b 074 111100 11 1 100 4 true down mf c 074 111100 11 1 100 4 true down mf d 074 111100 11 1 100 4 true down mf e 072 111010 11 1 010 4 true right mj f 062 110010 11 0 010 4 false right x mn This can be interpreted on a grid by starting at ma (row n, column a) denoted by a 0 and following the moves denoted by their corresponding move number. Note that after the final move, f, the location being outside of the character box corresponds to the location ma of the next character to the right. To the right is the same character where x:s denote drawn pixels and . denote undrawn pixels. abcdefghijklmn abcdefghijklmn a.....a..9..... a.....xxxx..... b.............. b.....x........ c.............. c.....x........ d.............. d.....x........ e.....b..8..... e.....x........ f.......7...... f.....x........ g......6....... g.....x........ h.....5........ h.....x........ i....4c........ i.....x........ j...3.......... j.....x........ k..2........... k.....x........ l.1............ l.....x........ m0....d...e...f m.....xxxxx.... n.............. n.............. o.............. o.............. p.............. p..............