import struct import sys import os def read_sbyte(f): return struct.unpack("b", f.read(1))[0] def write_sbyte(f): struct.unpack("b", f.read(1)) def read_sint16(f): return struct.unpack(">h", f.read(4))[0] def write_sint16(f, val): f.write(struct.pack(">h", val)) def read_sint32(f): return struct.unpack(">i", f.read(4))[0] def write_sint32(f, val): f.write(struct.pack(">i", val)) def read_float(f): return struct.unpack(">f", f.read(4))[0] def write_float(f, val): f.write(struct.pack(">f", val)) def read_double(f): return struct.unpack(">d", f.read(4))[0] def write_double(f, val): f.write(struct.pack(">d", val)) def read_ubyte(f): return struct.unpack("B", f.read(1))[0] def write_ubyte(f): struct.unpack("B", f.read(1)) def read_uint16(f): return struct.unpack(">H", f.read(4))[0] def write_uint16(f, val): f.write(struct.pack(">H", val)) def read_uint32(f): return struct.unpack(">I", f.read(4))[0] def write_uint32(f, val): f.write(struct.pack(">I", val)) def read_float(f): return struct.unpack(">f", f.read(4))[0] def write_float(f, val): f.write(struct.pack(">f", val)) def read_double(f): return struct.unpack(">d", f.read(4))[0] def write_double(f, val): f.write(struct.pack(">d", val)) def resource_path(relative_path: str): """ Get absolute path to resource, works for dev and for PyInstaller """ base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path)