Erster Commit: nativer Linux-Port aus macOS-Bytecode
Läuft die Voice Acoustic VA-Remotecontrol (AllDSP AllControl) nativ unter Linux auf echtem wxGTK 3.0 — ohne Wine und ohne dekompilierten App-Code. Ausgeführt wird das unveränderte Python-2.7-Bytecode aus dem macOS-.app; C-Extensions (wxGTK/numpy/ scipy/PortAudio) kommen nativ aus Debian stretch. Enthält: va/ (Original-.pyc + pure-Python-Libs + Assets + launch.py mit den drei Linux-Fixes), Dockerfile/run.sh/entrypoint.sh, reference/ (dekompilierter Quellcode zum Debuggen) und README/STATUS. img.cache (378 MB, regenerierbar) ist per .gitignore ausgeschlossen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# uncompyle6 version 3.9.3
|
||||
# Python bytecode version base 2.6 (62161)
|
||||
# Decompiled from: Python 3.9.25 (main, Oct 31 2025, 23:16:49)
|
||||
# [GCC 14.2.0]
|
||||
# Embedded file name: countDSPs.pyc
|
||||
# Compiled at: 2025-01-21 13:03:48
|
||||
import shutil, zipfile, os, datetime, time, struct, sys
|
||||
row = 200
|
||||
column = 300
|
||||
sys.stdout.write(('\x1b[8;{rows};{cols}t').format(rows=row, cols=column))
|
||||
print '\x1b[3;0;0t'
|
||||
time.sleep(0.1)
|
||||
flashDiskStartAddress = 262144
|
||||
imageStartAddress = 65536
|
||||
removeLock = True
|
||||
|
||||
def unzipAndExtractFFI(path):
|
||||
if zipfile.is_zipfile(path):
|
||||
zfile = zipfile.ZipFile(path, 'r')
|
||||
lockData = ''
|
||||
for info in zfile.infolist():
|
||||
fname = info.filename
|
||||
if len(fname) < 8:
|
||||
continue
|
||||
if fname.endswith('info.lst'):
|
||||
lockData = zfile.read(fname)
|
||||
continue
|
||||
else:
|
||||
data = zfile.read(fname)
|
||||
|
||||
try:
|
||||
return (
|
||||
data, lockData)
|
||||
except:
|
||||
return ([], [])
|
||||
|
||||
else:
|
||||
f = open(path, 'rb')
|
||||
data = f.read()
|
||||
f.close()
|
||||
return (data, '')
|
||||
return
|
||||
|
||||
|
||||
def createDir(file):
|
||||
myPath = os.path.split(file)[0].split('/')
|
||||
for i in range(5, len(myPath) + 1):
|
||||
path = ''
|
||||
for j in range(i):
|
||||
path += '/' + myPath[j]
|
||||
|
||||
if not os.path.exists(path):
|
||||
os.mkdir(path)
|
||||
|
||||
return
|
||||
|
||||
|
||||
def Walk(root, recurse=1, pattern='*', return_folders=0, return_files=1):
|
||||
import fnmatch, os, string
|
||||
result = []
|
||||
try:
|
||||
names = os.listdir(root)
|
||||
except os.error:
|
||||
return result
|
||||
else:
|
||||
pattern = pattern or '*'
|
||||
pat_list = string.splitfields(pattern, ';')
|
||||
for name in names:
|
||||
fullname = os.path.normpath(os.path.join(root, name))
|
||||
for pat in pat_list:
|
||||
if fnmatch.fnmatch(name, pat):
|
||||
if return_files == 1 and os.path.isfile(fullname) or return_folders == 1 and os.path.isdir(fullname):
|
||||
if fullname.find('.') >= 0 and return_files != 1:
|
||||
continue
|
||||
result.append(fullname)
|
||||
continue
|
||||
|
||||
if recurse:
|
||||
if os.path.isdir(fullname) and not os.path.islink(fullname):
|
||||
result = result + Walk(fullname, recurse, pattern, return_folders)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
loaderStartPositions = {944: 'MK2.1',
|
||||
3488: 'MK2.2',
|
||||
3760: 'MK2.3',
|
||||
4320: 'MK2.5',
|
||||
52: 'MK1',
|
||||
0: 'MK3.1'}
|
||||
|
||||
def countDSPs(srcData):
|
||||
aantalNullen = 0
|
||||
aantalEnen = 0
|
||||
lastV = -1
|
||||
pos = 0
|
||||
loaderStartPos = 0
|
||||
dataStartPos = 0
|
||||
for vChar in srcData:
|
||||
v = ord(vChar)
|
||||
if v == 0 and lastV == 0:
|
||||
aantalNullen += 1
|
||||
if v == 255 and lastV == 255:
|
||||
aantalEnen += 1
|
||||
if aantalNullen > 32 and loaderStartPos == 0:
|
||||
if v != 0:
|
||||
loaderStartPos = pos
|
||||
if aantalEnen > 32 and dataStartPos == 0:
|
||||
if v != 255:
|
||||
dataStartPos = pos
|
||||
break
|
||||
if v != 0:
|
||||
aantalNullen = 0
|
||||
lastV = v
|
||||
pos += 1
|
||||
if pos > 5000:
|
||||
break
|
||||
|
||||
try:
|
||||
return loaderStartPositions[loaderStartPos]
|
||||
except:
|
||||
print 'Error: onbekende loader start pos', loaderStartPos
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
ffiFiles = Walk(os.getcwd())
|
||||
print ' '
|
||||
for ffiFile in ffiFiles:
|
||||
if ffiFile.endswith('.ffi') == False:
|
||||
continue
|
||||
(srcData, lockData) = unzipAndExtractFFI(ffiFile)
|
||||
aantalDSPs = countDSPs(srcData)
|
||||
print ffiFile, 'Aantal DSPs:', aantalDSPs
|
||||
|
||||
|
||||
# okay decompiling pycode/countDSPs.pyc
|
||||
Reference in New Issue
Block a user