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
2020-09-25 21:33:17 -05:00

89 lines
No EOL
2.1 KiB
Python

from io import FileIO
from tools import get_alignment
import struct
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)
class GC_File(FileIO):
def __init__(self, *args, **kwargs):
self._args = args
self._kwargs = kwargs
def __enter__(self):
self._filestream = open(*self._args, **self._kwargs)
return self._filestream
def __exit__(self, *args):
self._filestream.close()
def size(self, ofs: int = 0):
_pos = self.tell()
self.seek(0, 2)
_size = self.tell()
self.seek(_pos, 1)
return _size + ofs
def size_alignment(self, alignment: int):
""" Return file alignment, 0 = aligned, non zero = misaligned """
return get_alignment(self.size(), alignment)
def align_file_size(self, alignment: int, fillchar='00'):
""" Align a file to be the specified size """
self.write(bytes.fromhex(fillchar * self.size_alignment(alignment)))