fix up imports etc
This commit is contained in:
parent
4b336343d8
commit
6831bd52bb
|
@ -1 +1 @@
|
||||||
from main import Volume, Folder, File
|
from .main import *
|
||||||
|
|
|
@ -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 = {}
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from main import *
|
from machfs import *
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
Loading…
Reference in New Issue