Beispiel #1
0
def pack_data(data, format_pattern):
    fmt = get_format(format_pattern)
    values = (big5.encode(data[name]) if 's' in f else data[name]
	      for name, f in format_pattern)
    return struct.pack(fmt, *values)
Beispiel #2
0
FILE_ANONYMOUS = 0x80    # anonymous file

STRLEN = 80 # Length of most string data


if __name__ == '__main__':
    assert struct.calcsize(get_format(BOARDHEADER_FMT)) == BOARDHEADER_SIZE
    assert struct.calcsize(get_format(FILEHEADER_FMT)) == FILEHEADER_SIZE
    assert struct.calcsize(get_format(USEREC_FMT)) == USEREC_SIZE

    with open('/home/bbs/boards/A/ALLPOST/.DIR', 'rb') as f:
	entry = f.read(FILEHEADER_SIZE)
    header = unpack_data(entry, FILEHEADER_FMT)
    print header
    xblob = pack_data(header, FILEHEADER_FMT)
    assert xblob == entry

    with open('/home/bbs/.PASSWDS', 'rb') as f:
	entry = f.read(USEREC_SIZE)
    user = unpack_data(entry, USEREC_FMT)
    print user

    with open('/home/bbs/.BRD', 'rb') as f:
	entry = f.read(BOARDHEADER_SIZE)
    board = unpack_data(entry, BOARDHEADER_FMT)
    print board

    print 'user name: ', big5.encode(user['realname'])
    print 'file title: ', big5.encode(header['title'])
    print 'board title: ', big5.encode(board['title'])