1
0
Fork 0
This repository has been archived on 2024-02-06. You can view files and clone it, but cannot push or open issues or pull requests.
GeckoLoader/fileutils.py

87 lines
2.3 KiB
Python
Raw Normal View History

2020-11-06 19:14:27 +09:00
import os
import struct
2020-11-06 19:14:27 +09:00
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')
2020-11-06 19:14:27 +09:00
else: f.write(b'\x00' * vSize)