#!/usr/bin/env python3 """Analyze the structure of action mappings in the .set file to understand input/output and parameters""" import sys import struct # Read the GeViSoft configuration file directly config_file = r"C:\GEVISOFT\setup_config_20251212_122429.dat" try: with open(config_file, "rb") as f: data = f.read() print(f"Read {len(data)} bytes from {config_file}") # Look for "ules" marker at offset 253894 (first action mapping) offset = 253894 print(f"\nAnalyzing action mapping at offset {offset}") print("=" * 80) # Print 1000 bytes from this offset with analysis window_start = offset - 100 window_end = offset + 900 for i in range(window_start, window_end, 16): # Hex bytes hex_line = ' '.join(f'{data[i+j]:02X}' if i+j < len(data) else ' ' for j in range(16)) # ASCII representation ascii_line = '' for j in range(16): if i+j < len(data): b = data[i+j] ascii_line += chr(b) if 32 <= b < 127 else '.' else: ascii_line += ' ' # Annotations for key patterns annotation = '' if i == offset: annotation = ' <-- MARKER START (ules)' elif data[i:i+2] == b'\x07\x01' and i > offset: annotation = ' <-- STRING marker' elif data[i:i+3] == b'\x07\x01\x40' and i > offset: annotation = ' <-- ACTION marker' elif data[i] == 0x01 and i > offset: annotation = ' <-- BOOLEAN' elif data[i] == 0x04 and i > offset: annotation = ' <-- INTEGER' elif data[i] == 0x05 and i > offset: annotation = ' <-- MARKER' print(f"{i:08X}: {hex_line:<48} | {ascii_line}{annotation}") # Look for patterns that might indicate parameters print("\n" + "=" * 80) print("Looking for parameter patterns around actions...") print("=" * 80) # Search for "VideoInput" string search_terms = [b"VideoInput", b"G-core", b"alias", b"CrossSwitch"] for term in search_terms: pos = data.find(term, offset, offset + 1000) if pos != -1: print(f"\nFound '{term.decode()}' at offset {pos} ({pos - offset} bytes from marker)") # Show context start = max(0, pos - 30) end = min(len(data), pos + 100) context = data[start:end] # Hex dump of context for i in range(0, len(context), 16): actual_offset = start + i hex_bytes = ' '.join(f'{b:02X}' for b in context[i:i+16]) ascii_chars = ''.join(chr(b) if 32 <= b < 127 else '.' for b in context[i:i+16]) marker = ' <--' if actual_offset == pos else '' print(f" {actual_offset:08X}: {hex_bytes:<48} | {ascii_chars}{marker}") except FileNotFoundError: print(f"Error: Could not find file {config_file}") print("Please make sure the GeViSoft configuration file exists.") except Exception as e: print(f"Error: {e}")