fs2port/port/tools/verify/keyScripts.py

32 lines
3 KiB
Python
Executable file

#!/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))