#!/usr/bin/env python3 """Exercise the actual windowless ASM renderer through its public mailbox.""" import ctypes as C import mmap import os from pathlib import Path import struct import subprocess import time ROOT = Path(__file__).resolve().parents[1] SIZE, TEXTURES, PIXELS = 1362408, 2016, 1050592 def check_preview(engine, expected=None, output=None, level_path=None): name = f"Local\\EblanPreview-test-{os.getpid()}-{time.monotonic_ns()}" with mmap.mmap(-1, SIZE, tagname=name) as packet: base = C.addressof(C.c_char.from_buffer(packet)) state = C.cast(base+8, C.POINTER(C.c_long)) struct.pack_into("<4I3i6I", packet, 0, 0x56504245, 2, 0, os.getpid(), 160, 1024, 0, 0x383838, 0x222222, 0, 0, 0, 1) struct.pack_into("<8I",packet,52,0,40,0,0,384,240,45,0) packet[1358312:1358312+4096]=struct.pack("deadline: raise AssertionError("Preview renderer did not answer") time.sleep(.005) return packet[PIXELS:PIXELS+307200] try: frame=request() middle=struct.unpack_from(">16,y>>16) packet[1152:1152+len(sprites)]=sprites if version>=5: transitions,events,strings=struct.unpack_from("<3H",data,26) lights=struct.unpack_from("