#!/usr/bin/env python3 """Interactive XIE 2.3 probe against the VT1200. Keeps one X11 connection so the per-client XIE session state is preserved. Usage: ./probe23.py session ./probe23.py defaults ./probe23.py raw [word1 ...] ./probe23.py create7 ./probe23.py sweep ./probe23.py seq ... # reserved for the client sequence """ import os import struct import sys import socket import time HERE = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, os.path.join(HERE, "evidence")) import xie_raw as X # noqa: E402 class Cli: def __init__(self, host=X.HOST, port=X.PORT, timeout=0.8): self.sock = socket.create_connection((host, port), timeout=5) self.sock.settimeout(timeout) X.setup(self.sock) present, self.opcode, self.first_event, self.first_error = X.query_extension( self.sock, "Xie" ) if not present: raise SystemExit("Xie not present") self.seq = 2 # setup + QueryExtension self.id_base = X.LAST_SETUP.get("id_base", 0x00C00000) self.id_mask = X.LAST_SETUP.get("id_mask", 0x000FFFFF) self.root = X.LAST_SETUP.get("root", 0x8006B) self.sw = X.LAST_SETUP.get("screen_width", 0) self.sh = X.LAST_SETUP.get("screen_height", 0) def new_id(self, n=0x0AAAA): """A legal client resource id for this connection.""" return (self.id_base | (n & self.id_mask)) & 0xFFFFFFFF def create_window(self, wid, w, h, x=10, y=10): """Core X CreateWindow (InputOutput, CopyFromParent depth/visual).""" body = struct.pack(" 3 else 0xFFFF session(c) create7(c, ident, cls) elif cmd == "sweep": ident = int(argv[2], 0) cls = int(argv[3], 0) if len(argv) > 3 else 0xFFFF session(c) sweep(c, ident, cls) elif cmd == "cs7": ident = int(argv[2], 0) cls = int(argv[3], 0) if len(argv) > 3 else 0xFFFF session(c) create7(c, ident, cls) sweep(c, ident, cls) elif cmd == "export": session(c) demo_export(c, int(argv[2]) if len(argv) > 2 else 10) elif cmd == "raw": minor = int(argv[2], 0) words = [int(w, 0) for w in argv[3:]] session(c) raw(c, minor, words) else: raise SystemExit(__doc__) finally: c.close() if __name__ == "__main__": main(sys.argv)