# misc utils

import struct

# little endian reads/writes
def strip_zeros(s):
    import string
    pos = string.find(s, '\0')
    if pos > 0:
        return s[:pos]
    else:
        return s

def write_char(file, char):
    file.write(struct.pack('=b', char))

def write_word(file, word):
    file.write(struct.pack('<l', word))

def write_half(file, half):
    file.write(struct.pack('<h', half))

def read_uchar(file):
    try:
        return struct.unpack('=B', file.read(1))[0]
    except struct.error:
        raise EOFError

def read_char(file):
    try:
        return struct.unpack('=b', file.read(1))[0]
    except struct.error:
        raise EOFError

def read_word(file):
    try:
        return struct.unpack('<l', file.read(4))[0]
    except struct.error:
        raise EOFError

def read_half(file):
    try:
        return struct.unpack('<h', file.read(2))[0]
    except struct.error:
        raise EOFError

def read_float(file):
    try:
        return struct.unpack('<f', file.read(4))[0]
    except struct.error:
        raise EOFError

def read_name(file): return file.read(4)

