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,266 @@
|
||||
# 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: user_config_model.pyc
|
||||
# Compiled at: 2024-11-13 12:19:50
|
||||
import wx, os, data_model, traceback, one_unit, ConfigParser, protocol, sys, select_keys, select_units, d_protocol, mytime
|
||||
from user_config_helpers import *
|
||||
|
||||
class modelConfiguration(wx.Panel):
|
||||
|
||||
def __init__(self, parent, frame, uiNumber, panelName):
|
||||
self.frame = frame
|
||||
self.name = panelName
|
||||
self.uiNumber = uiNumber
|
||||
self.parent = parent
|
||||
wx.Panel.__init__(self, parent, size=(964, 600))
|
||||
self.Show(True)
|
||||
self.lines = {}
|
||||
self.initFinished = False
|
||||
return
|
||||
|
||||
def initMe(self, force=False):
|
||||
if self.IsShown() == False and force == False:
|
||||
return
|
||||
if self.initFinished == True:
|
||||
return 0
|
||||
print mytime.displayTime(), 'ucm.initMe modelConfiguration', self.name
|
||||
frame = self.frame
|
||||
uiNumber = self.uiNumber
|
||||
self.lines = {0: (self.createLine(0)), 1: (self.dummyLine(1)), 2: (self.dummyLine(2)), 3: (self.dummyLine(3)), 4: (self.dummyLine(4)), 5: (self.dummyLine(5))}
|
||||
self.checkBoxes = {}
|
||||
self.uiKeys = getKeys(frame, uiNumber)
|
||||
print 'ucm.i.keys:', self.uiKeys
|
||||
self.modelName = ''
|
||||
self.serialNumber = ''
|
||||
self.decodeLines = {}
|
||||
try:
|
||||
for uiIndex in self.uiKeys:
|
||||
(key, val) = self.uiKeys[uiIndex]
|
||||
lineNumber = val[1] & 7
|
||||
self.decodeLines[lineNumber] = val
|
||||
self.lines[lineNumber].key = key
|
||||
|
||||
for lineNumber in range(6):
|
||||
val = self.decodeLines[lineNumber]
|
||||
if lineNumber == 0:
|
||||
if val[1] & 8 == 8:
|
||||
self.lines[0].restrictModelOnOff.SetValue(True)
|
||||
try:
|
||||
restrictTo = int(val[2])
|
||||
except:
|
||||
retrictTo = 0
|
||||
|
||||
self.lines[0].restrictModelNumber.SetValue(str(restrictTo))
|
||||
for i in range(4):
|
||||
self.modelName += chr(val[i + 4])
|
||||
|
||||
elif lineNumber in (1, 2):
|
||||
for i in range(6):
|
||||
self.modelName += chr(val[i + 2])
|
||||
|
||||
elif lineNumber == 3:
|
||||
for i in range(4):
|
||||
self.serialNumber += chr(val[i + 4])
|
||||
|
||||
elif lineNumber in (4, 5):
|
||||
for i in range(6):
|
||||
self.serialNumber += chr(val[i + 2])
|
||||
|
||||
print mytime.displayTime(), 'ucm.i.Found model name:', self.modelName
|
||||
print mytime.displayTime(), 'ucm.i.Found serial number:', self.serialNumber
|
||||
self.lines[0].checkBox.SetValue(True)
|
||||
self.enable(self.lines[0])
|
||||
self.lines[0].nameValue.SetValue(self.modelName)
|
||||
self.lines[0].serialValue.SetValue(self.serialNumber)
|
||||
except:
|
||||
self.modelName = ''
|
||||
self.serialNumber = ''
|
||||
|
||||
self.settingsVerified = False
|
||||
self.initFinished = True
|
||||
self.Show(True)
|
||||
return
|
||||
|
||||
def createLine(self, lineNumber):
|
||||
p = wx.Panel(self, size=(800, 400))
|
||||
p.checkBox = wx.CheckBox(p, 0, ' Setup Model Information', pos=(13, 10), size=(180,
|
||||
20))
|
||||
p.checkBox.SetValue(False)
|
||||
p.nameLabel = wx.StaticText(p, -1, 'Model Name', pos=(40, 40))
|
||||
p.nameValue = wx.TextCtrl(p, -1, '', pos=(230, 40), size=(200, 20))
|
||||
p.nameValue.SetMaxLength(16)
|
||||
p.serialLabel = wx.StaticText(p, -1, 'Version String', pos=(40, 68))
|
||||
p.serialValue = wx.TextCtrl(p, -1, '', pos=(230, 68), size=(200, 20))
|
||||
p.serialValue.SetMaxLength(16)
|
||||
p.restrictModelOnOff = wx.CheckBox(p, 22, ' Restrict to Model Number', pos=(40,
|
||||
98))
|
||||
p.restrictModelOnOff.SetValue(False)
|
||||
p.restrictModelNumber = wx.TextCtrl(p, 20, '', pos=(230, 95), size=(40, 20))
|
||||
self.enable(p)
|
||||
p.key = None
|
||||
self.Bind(wx.EVT_CHECKBOX, self.OnEnabled, id=lineNumber)
|
||||
self.Bind(wx.EVT_CHECKBOX, self.OnRestrict, id=22)
|
||||
p.lineNumber = lineNumber
|
||||
return p
|
||||
|
||||
def dummyLine(self, lineNumber):
|
||||
p = wx.Panel(self)
|
||||
p.checkBox = wx.CheckBox(p, 0, '')
|
||||
p.checkBox.SetValue(False)
|
||||
p.key = None
|
||||
p.lineNumber = lineNumber
|
||||
p.Show(False)
|
||||
return p
|
||||
|
||||
def OnRestrict(self, e):
|
||||
self.lines[0].restrictModelNumber.Enable(self.lines[0].restrictModelOnOff.GetValue())
|
||||
return
|
||||
|
||||
def OnEnabled(self, e):
|
||||
self.enable(self.lines[0])
|
||||
return
|
||||
|
||||
def enable(self, line):
|
||||
val = line.checkBox.GetValue()
|
||||
line.nameLabel.Enable(val)
|
||||
line.nameValue.Enable(val)
|
||||
line.serialLabel.Enable(val)
|
||||
line.serialValue.Enable(val)
|
||||
line.restrictModelOnOff.Enable(val)
|
||||
line.restrictModelNumber.Enable(line.restrictModelOnOff.GetValue())
|
||||
return
|
||||
|
||||
def evaluateLine(self, line):
|
||||
if self.lines[0].checkBox.GetValue() == False:
|
||||
return
|
||||
else:
|
||||
flags = line.lineNumber
|
||||
if line.lineNumber == 0:
|
||||
self.modelName = ' NoNameNoName'
|
||||
self.settingsVerified = False
|
||||
if line.restrictModelOnOff.GetValue() == True:
|
||||
flags += 8
|
||||
modelNumber = line.restrictModelNumber.GetValue()
|
||||
try:
|
||||
modelNumber = int(modelNumber)
|
||||
except:
|
||||
return
|
||||
else:
|
||||
if modelNumber > 255:
|
||||
modelNumber = 255
|
||||
if modelNumber < 0:
|
||||
modelNumber = 0
|
||||
else:
|
||||
modelNumber = 0
|
||||
modelName = line.nameValue.GetValue()
|
||||
try:
|
||||
modelName = str(('').join(c for c in modelName if c in data_model.validFilenameChars))
|
||||
except:
|
||||
return
|
||||
else:
|
||||
modelName += ' '
|
||||
modelName = modelName[:16]
|
||||
self.modelName = modelName
|
||||
print mytime.displayTime(), 'ucm.eL.Model Name:', modelName
|
||||
self.serialNumber = ' '
|
||||
serialNumber = line.serialValue.GetValue()
|
||||
try:
|
||||
serialNumber = str(('').join(c for c in serialNumber if c in data_model.validFilenameChars))
|
||||
except:
|
||||
return
|
||||
else:
|
||||
serialNumber += ' '
|
||||
serialNumber = serialNumber[:16]
|
||||
self.serialNumber = serialNumber
|
||||
print mytime.displayTime(), 'ucm.eL.Serial Number:', serialNumber
|
||||
try:
|
||||
sendString = '' + chr(self.uiNumber)
|
||||
sendString += chr(flags)
|
||||
sendString += chr(modelNumber)
|
||||
sendString += chr(0)
|
||||
sendString += modelName[0]
|
||||
sendString += modelName[1]
|
||||
sendString += modelName[2]
|
||||
sendString += modelName[3]
|
||||
mys = 'ucm.eL.String: '
|
||||
for c in sendString:
|
||||
mys += hex(ord(c)) + ':'
|
||||
|
||||
print mys, line.lineNumber
|
||||
self.settingsVerified = True
|
||||
return sendString
|
||||
except:
|
||||
print mytime.displayTime(), 'ucm.ec.eL.failed to build string'
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
return
|
||||
|
||||
elif line.lineNumber in (1, 2):
|
||||
if self.settingsVerified == False:
|
||||
return
|
||||
try:
|
||||
sendString = '' + chr(self.uiNumber)
|
||||
sendString += chr(flags)
|
||||
sendString += self.modelName[4 + (line.lineNumber - 1) * 6]
|
||||
sendString += self.modelName[5 + (line.lineNumber - 1) * 6]
|
||||
sendString += self.modelName[6 + (line.lineNumber - 1) * 6]
|
||||
sendString += self.modelName[7 + (line.lineNumber - 1) * 6]
|
||||
sendString += self.modelName[8 + (line.lineNumber - 1) * 6]
|
||||
sendString += self.modelName[9 + (line.lineNumber - 1) * 6]
|
||||
mys = 'ucm.eL.String: ' + hex(self.uiNumber) + ':' + hex(line.lineNumber) + ': ' + sendString[2:]
|
||||
print mys, line.lineNumber
|
||||
return sendString
|
||||
except:
|
||||
print mytime.displayTime(), 'ucm.ec.eL.failed to build string'
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
return
|
||||
|
||||
elif line.lineNumber == 3:
|
||||
if self.settingsVerified == False:
|
||||
return
|
||||
try:
|
||||
sendString = '' + chr(self.uiNumber)
|
||||
sendString += chr(flags)
|
||||
sendString += chr(0)
|
||||
sendString += chr(0)
|
||||
sendString += self.serialNumber[0]
|
||||
sendString += self.serialNumber[1]
|
||||
sendString += self.serialNumber[2]
|
||||
sendString += self.serialNumber[3]
|
||||
mys = 'ucm.eL.String: '
|
||||
for c in sendString:
|
||||
mys += hex(ord(c)) + ':'
|
||||
|
||||
print mys, line.lineNumber
|
||||
return sendString
|
||||
except:
|
||||
print mytime.displayTime(), 'ucm.ec.eL.failed to build string'
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
return
|
||||
|
||||
elif line.lineNumber in (4, 5):
|
||||
if self.settingsVerified == False:
|
||||
return
|
||||
try:
|
||||
sendString = '' + chr(self.uiNumber)
|
||||
sendString += chr(flags)
|
||||
sendString += self.serialNumber[4 + (line.lineNumber - 4) * 6]
|
||||
sendString += self.serialNumber[5 + (line.lineNumber - 4) * 6]
|
||||
sendString += self.serialNumber[6 + (line.lineNumber - 4) * 6]
|
||||
sendString += self.serialNumber[7 + (line.lineNumber - 4) * 6]
|
||||
sendString += self.serialNumber[8 + (line.lineNumber - 4) * 6]
|
||||
sendString += self.serialNumber[9 + (line.lineNumber - 4) * 6]
|
||||
mys = 'ucm.eL.String: ' + hex(self.uiNumber) + ':' + hex(line.lineNumber) + ': ' + sendString[2:]
|
||||
print mys, line.lineNumber
|
||||
return sendString
|
||||
except:
|
||||
print mytime.displayTime(), 'ucm.ec.eL.failed to build string'
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
# okay decompiling pycode/user_config_model.pyc
|
||||
Reference in New Issue
Block a user