#!/usr/bin/env python3
"""Type strings into the guest console via the QEMU human monitor sendkey."""
import socket
import sys
import time

SOCK = "dfbsd-qemu/boot-mon.sock"

SPECIAL = {
    ' ': 'spc', '.': 'dot', '/': 'slash', '-': 'minus',
    '_': 'shift-minus', ';': 'semicolon', '=': 'equal',
}

def esc(s):
    return s.replace('\\', '\\\\').replace('"', '\\"')

def main():
    lines = sys.argv[1:]
    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    s.connect(SOCK)
    time.sleep(0.3)
    s.recv(65536)
    for line in lines:
        for ch in line:
            if ch.isupper():
                key = 'shift-' + ch.lower()
            elif ch in SPECIAL:
                key = SPECIAL[ch]
            elif ch.isalnum():
                key = ch.lower()
            else:
                key = ch
            s.sendall(('sendkey %s\n' % key).encode())
            time.sleep(0.02)
            try:
                s.setblocking(False)
                s.recv(65536)
            except Exception:
                pass
            s.setblocking(True)
            time.sleep(0.01)
        s.sendall(b'sendkey ret\n')
        time.sleep(0.05)
        try:
            s.setblocking(False)
            s.recv(65536)
        except Exception:
            pass
        s.setblocking(True)
        time.sleep(0.8)
    s.close()

if __name__ == '__main__':
    main()
