#!/usr/bin/env python3 # The key scripts the regression feeds to both the oracle and the port, # one key per ProcessInputTick. Writes tmp/keys_NAME.txt (the keys) and # tmp/keys_NAME.ticks (how long to run). 'I' is an ignored key used as # padding; control characters are the Apple II key codes (Ctrl+U = more # throttle, Esc = edit mode, Return = next field in the editor, ...). # Inside the editor the first two keys after Esc are swallowed by the # overlay load, hence the extra Return in the navigation sequences. import os pad = lambda n: 'I' * n prompt = 'AB' # colour, then dismiss the demo prompt def editor(*keys): return '\x1b' + pad(3) + ''.join(keys) scripts = { 'boot': (prompt + pad(30), 30), 'flight': (prompt + '\x15' * 24 + pad(200) + 'BBBB' + pad(400) + 'G' + pad(300) + 'VVV' + pad(200), 1200), 'modes': (prompt + pad(20) + '4' + pad(40) + ',,..' + '5' + pad(20) + 'P' + pad(10) + 'P' + 'W' + pad(100) + 'X' + pad(50) + ' ' + pad(50) + 'Q' + pad(5) + '\x1b' + pad(50) + '3' + pad(20) + '\x0d' + pad(20) + 'K' + pad(50) + 'S' + pad(50) + '+' + pad(50), 800), 'edit': (prompt + pad(20) + editor(pad(30), '\x0d', pad(30), '\x1b', pad(100), '89', pad(20), 'Z', pad(20), 'D', pad(50)), 400), 'ww1': (prompt + pad(20) + editor(('\r' + pad(2)) * 6, '1', pad(2), '\r', pad(2), '\x1b') + pad(60) + 'W' + pad(150) + ' ' + pad(30) + ' ' + pad(30) + 'X' + pad(200) + '4' + pad(30) + '5' + pad(100), 700), 'radios': (prompt + pad(10) + '\x0e1234' + pad(5) + '\x0e2113' + pad(5) + '\x0312345' + pad(5) + '\x01360' + pad(5) + '\x181200' + pad(5) + '\x022992' + pad(5) + '\x04090' + pad(5) + '\x161090' + pad(5) + '\x162270' + pad(5) + '\x14' + pad(5) + '\x061' + pad(5) + '\x09' + pad(5) + '\x0c' + pad(5) + '\x0d1' + pad(5) + '\x0d2' + pad(5) + '\x10' + pad(5) + 'X' + pad(5) + 'A123' + pad(5) + 'L' + pad(5) + '3' + pad(50), 250), 'slew': (prompt + pad(20) + editor(('\r' + pad(2)) * 4, '1', pad(2), '\r', pad(2), '\x1b') + pad(30) + '8' + pad(10) + '9' + pad(10) + 'F' + pad(20) + 'H' + pad(20) + 'B' + pad(20) + 'T' + pad(20) + '\x15' + pad(20) + '\x08' + pad(20) + 'Z' + pad(10) + 'D' + pad(10) + 'D' + pad(10) + 'G' + pad(10) + '\x14' + pad(100), 500), 'reality': (prompt + pad(20) + editor(('\r' + pad(2)) * 5, '1', pad(2), '\r', pad(2), '\x1b') + pad(30) + '\x15' * 24 + pad(200) + 'BBBB' + pad(600), 1000), 'night': (prompt + pad(20) + editor(('\r' + pad(1)) * 23, '22', pad(2), '\r', pad(2), '\x1b') + pad(30) + '\x15' * 24 + pad(300), 500), 'course': (prompt + pad(20) + 'Q' + pad(3) + 'A' + pad(100) + 'Q' + pad(3) + 'B' + pad(50) + 'Q' + pad(3) + 'D' + pad(100) + 'Q' + pad(3) + 'E' + pad(30) + 'Q' + pad(3) + '\x1b' + pad(30), 400), 'logdisk': (prompt + pad(20) + '\x05' + pad(20) + 'I' + pad(50), 100), 'demo': ('', 800), } os.makedirs('tmp', exist_ok=True) for name, (keys, ticks) in scripts.items(): open('tmp/keys_%s.txt' % name, 'w').write(keys) open('tmp/keys_%s.ticks' % name, 'w').write('%d\n' % ticks) print('%-8s %4d keys %5d ticks' % (name, len(keys), ticks))