import os import struct import sys from tools import align_byte_size, get_alignment def resource_path(relative_path: str = "") -> str: """ Get absolute path to resource, works for dev and for cx_freeze """ if getattr(sys, "frozen", False): # The application is frozen base_path = os.path.dirname(sys.executable) else: base_path = os.path.dirname(os.path.abspath(__file__)) return os.path.join(base_path, relative_path) def get_program_folder(folder: str = "") -> str: """ Get path to appdata """ if sys.platform == "win32": datapath = os.path.join(os.getenv("APPDATA"), folder) elif sys.platform == "darwin": if folder: folder = "." + folder datapath = os.path.join(os.path.expanduser("~"), "Library", "Application Support", folder) elif "linux" in sys.platform: if folder: folder = "." + folder datapath = os.path.join(os.getenv("HOME"), folder) else: raise NotImplementedError(f"{sys.platform} OS is unsupported") return datapath def read_sbyte(f): return struct.unpack("b", f.read(1))[0] def write_sbyte(f, val): f.write(struct.pack("b", val)) def read_sint16(f): return struct.unpack(">h", f.read(2))[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_ubyte(f): return struct.unpack("B", f.read(1))[0] def write_ubyte(f, val): f.write(struct.pack("B", val)) def read_uint16(f): return struct.unpack(">H", f.read(2))[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 read_bool(f, vSize=1): return struct.unpack("B", f.read(vSize))[0] > 0 def write_bool(f, val, vSize=1): if val is True: f.write(b'\x00'*(vSize-1) + b'\x01') else: f.write(b'\x00' * vSize)