fix up imports etc

This commit is contained in:
Elliot Nunn 2018-10-08 08:18:30 +08:00
parent 4b336343d8
commit 6831bd52bb
4 changed files with 21 additions and 25 deletions

View File

@ -1 +1 @@
from main import Volume, Folder, File from .main import *

View File

@ -1,6 +1,5 @@
import struct import struct
from . import bitmanip
import bitmanip as _bitmanip
class _Node: class _Node:
@ -160,10 +159,10 @@ def make_btree(records, bthKeyLen):
bits_covered += len(mapnode.records[0]) * 8 bits_covered += len(mapnode.records[0]) * 8
# Populate the bitmap (1 = used) # Populate the bitmap (1 = used)
headnode.records[2] = _bitmanip.bits(2048, len(nodelist)) headnode.records[2] = bitmanip.bits(2048, len(nodelist))
for i, mnode in mapnodes: for i, mnode in mapnodes:
nset = len(nodelist) - 2048 - i*3952 nset = len(nodelist) - 2048 - i*3952
mnode.records = [_bitmanip.bits(3952, nset)] mnode.records = [bitmanip.bits(3952, nset)]
# Run back and forth to join up one linked list for each type # Run back and forth to join up one linked list for each type
most_recent = {} most_recent = {}

View File

@ -1,9 +1,6 @@
import struct import struct
import collections import collections
from . import btree, bitmanip, directory
import btree as _btree
import bitmanip as _bitmanip
import directory as _directory
def _catalog_rec_sort(b): def _catalog_rec_sort(b):
@ -67,7 +64,7 @@ class _TempWrapper:
self.of = of self.of = of
class Folder(_directory.AbstractFolder): class Folder(directory.AbstractFolder):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -96,7 +93,7 @@ class File:
return 'File %r/%r data=%db rsrc=%db' % (self.type, self.creator, len(self.data), len(self.rsrc)) return 'File %r/%r data=%db rsrc=%db' % (self.type, self.creator, len(self.data), len(self.rsrc))
class Volume(_directory.AbstractFolder): class Volume(directory.AbstractFolder):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -133,10 +130,10 @@ class Volume(_directory.AbstractFolder):
block2offset = lambda block: 512*drAlBlSt + drAlBlkSiz*block block2offset = lambda block: 512*drAlBlSt + drAlBlkSiz*block
extent2bytes = lambda firstblk, blkcnt: from_volume[block2offset(firstblk):block2offset(firstblk+blkcnt)] extent2bytes = lambda firstblk, blkcnt: from_volume[block2offset(firstblk):block2offset(firstblk+blkcnt)]
extrec2bytes = lambda extrec: b''.join(extent2bytes(a, b) for (a, b) in _btree.unpack_extent_record(extrec)) extrec2bytes = lambda extrec: b''.join(extent2bytes(a, b) for (a, b) in btree.unpack_extent_record(extrec))
extoflow = {} extoflow = {}
for rec in _btree.dump_btree(extrec2bytes(drXTExtRec)): for rec in btree.dump_btree(extrec2bytes(drXTExtRec)):
if rec[0] != 7: continue if rec[0] != 7: continue
# print(key, val) # print(key, val)
pass pass
@ -144,13 +141,13 @@ class Volume(_directory.AbstractFolder):
cnids = {} cnids = {}
childrenof = collections.defaultdict(dict) childrenof = collections.defaultdict(dict)
for rec in _btree.dump_btree(extrec2bytes(drCTExtRec)): for rec in btree.dump_btree(extrec2bytes(drCTExtRec)):
# create a directory tree from the catalog file # create a directory tree from the catalog file
rec_len = rec[0] rec_len = rec[0]
if rec_len == 0: continue if rec_len == 0: continue
key = rec[2:1+rec_len] key = rec[2:1+rec_len]
val = rec[_bitmanip.pad_up(1+rec_len, 2):] val = rec[bitmanip.pad_up(1+rec_len, 2):]
ckrParID, namelen = struct.unpack_from('>LB', key) ckrParID, namelen = struct.unpack_from('>LB', key)
ckrCName = key[5:5+namelen] ckrCName = key[5:5+namelen]
@ -248,11 +245,11 @@ class Volume(_directory.AbstractFolder):
blkaccum = [] blkaccum = []
# <<< put the empty extents overflow file in here >>> # <<< put the empty extents overflow file in here >>>
extoflowfile = _btree.make_btree([], bthKeyLen=7) extoflowfile = btree.make_btree([], bthKeyLen=7)
# also need to do some cleverness to ensure that this gets picked up... # also need to do some cleverness to ensure that this gets picked up...
drXTFlSize = len(extoflowfile) drXTFlSize = len(extoflowfile)
drXTExtRec_Start = len(blkaccum) drXTExtRec_Start = len(blkaccum)
blkaccum.extend(_bitmanip.chunkify(extoflowfile, drAlBlkSiz)) blkaccum.extend(bitmanip.chunkify(extoflowfile, drAlBlkSiz))
drXTExtRec_Cnt = len(blkaccum) - drXTExtRec_Start drXTExtRec_Cnt = len(blkaccum) - drXTExtRec_Start
# write all the files in the volume # write all the files in the volume
@ -276,11 +273,11 @@ class Volume(_directory.AbstractFolder):
wrap.dfrk = wrap.rfrk = (0, 0) wrap.dfrk = wrap.rfrk = (0, 0)
if obj.data: if obj.data:
pre = len(blkaccum) pre = len(blkaccum)
blkaccum.extend(_bitmanip.chunkify(obj.data, drAlBlkSiz)) blkaccum.extend(bitmanip.chunkify(obj.data, drAlBlkSiz))
wrap.dfrk = (pre, len(blkaccum)-pre) wrap.dfrk = (pre, len(blkaccum)-pre)
if obj.rsrc: if obj.rsrc:
pre = len(blkaccum) pre = len(blkaccum)
blkaccum.extend(_bitmanip.chunkify(obj.rsrc, drAlBlkSiz)) blkaccum.extend(bitmanip.chunkify(obj.rsrc, drAlBlkSiz))
wrap.rfrk = (pre, len(blkaccum)-pre) wrap.rfrk = (pre, len(blkaccum)-pre)
catalog = [] # (key, value) tuples catalog = [] # (key, value) tuples
@ -303,8 +300,8 @@ class Volume(_directory.AbstractFolder):
filTyp = 0 filTyp = 0
filUsrWds = struct.pack('>4s4sHHHxxxxxx', obj.type, obj.creator, obj.flags, obj.x, obj.y) filUsrWds = struct.pack('>4s4sHHHxxxxxx', obj.type, obj.creator, obj.flags, obj.x, obj.y)
filFlNum = wrap.cnid filFlNum = wrap.cnid
filStBlk, filLgLen, filPyLen = wrap.dfrk[0], len(obj.data), _bitmanip.pad_up(len(obj.data), drAlBlkSiz) filStBlk, filLgLen, filPyLen = wrap.dfrk[0], len(obj.data), bitmanip.pad_up(len(obj.data), drAlBlkSiz)
filRStBlk, filRLgLen, filRPyLen = wrap.rfrk[0], len(obj.rsrc), _bitmanip.pad_up(len(obj.rsrc), drAlBlkSiz) filRStBlk, filRLgLen, filRPyLen = wrap.rfrk[0], len(obj.rsrc), bitmanip.pad_up(len(obj.rsrc), drAlBlkSiz)
filCrDat, filMdDat, filBkDat = obj.crdat, obj.mddat, obj.bkdat filCrDat, filMdDat, filBkDat = obj.crdat, obj.mddat, obj.bkdat
filFndrInfo = bytes(16) # todo must fix filFndrInfo = bytes(16) # todo must fix
filClpSize = 0 # todo must fix filClpSize = 0 # todo must fix
@ -348,18 +345,18 @@ class Volume(_directory.AbstractFolder):
# now it is time to sort these records! fuck that shit... # now it is time to sort these records! fuck that shit...
catalog.sort(key=_catalog_rec_sort) catalog.sort(key=_catalog_rec_sort)
catalogfile = _btree.make_btree(catalog, bthKeyLen=37) catalogfile = btree.make_btree(catalog, bthKeyLen=37)
# also need to do some cleverness to ensure that this gets picked up... # also need to do some cleverness to ensure that this gets picked up...
drCTFlSize = len(catalogfile) drCTFlSize = len(catalogfile)
drCTExtRec_Start = len(blkaccum) drCTExtRec_Start = len(blkaccum)
blkaccum.extend(_bitmanip.chunkify(catalogfile, drAlBlkSiz)) blkaccum.extend(bitmanip.chunkify(catalogfile, drAlBlkSiz))
drCTExtRec_Cnt = len(blkaccum) - drCTExtRec_Start drCTExtRec_Cnt = len(blkaccum) - drCTExtRec_Start
if len(blkaccum) > drNmAlBlks: if len(blkaccum) > drNmAlBlks:
raise ValueError('Does not fit!') raise ValueError('Does not fit!')
# Create the bitmap of free volume allocation blocks # Create the bitmap of free volume allocation blocks
bitmap = _bitmanip.bits(bitmap_blk_cnt * 512 * 8, len(blkaccum)) bitmap = bitmanip.bits(bitmap_blk_cnt * 512 * 8, len(blkaccum))
# Create the Volume Information Block # Create the Volume Information Block
drSigWord = b'BD' drSigWord = b'BD'

View File

@ -1,4 +1,4 @@
from main import * from machfs import *
import os import os
import time import time