summaryrefslogtreecommitdiffstats
path: root/Tools/modulator
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/modulator')
-rwxr-xr-xTools/modulator/Tkextra.py194
-rwxr-xr-xTools/modulator/genmodule.py170
-rwxr-xr-xTools/modulator/modulator.py589
-rw-r--r--Tools/modulator/varsubst.py62
4 files changed, 508 insertions, 507 deletions
diff --git a/Tools/modulator/Tkextra.py b/Tools/modulator/Tkextra.py
index 15b16a9..00ed5eb 100755
--- a/Tools/modulator/Tkextra.py
+++ b/Tools/modulator/Tkextra.py
@@ -18,54 +18,54 @@ def dialog(master, title, text, bitmap, default, *args):
w.iconname('Dialog')
top = Frame(w, {'relief': 'raised', 'bd': 1,
- Pack: {'side': 'top', 'fill': 'both'}})
+ Pack: {'side': 'top', 'fill': 'both'}})
bot = Frame(w, {'relief': 'raised', 'bd': 1,
- Pack: {'side': 'bottom', 'fill': 'both'}})
+ Pack: {'side': 'bottom', 'fill': 'both'}})
# 2. Fill the top part with the bitmap and message.
msg = Message(top,
- {'width': '3i',
- 'text': text,
- 'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
- Pack: {'side': 'right', 'expand': 1,
- 'fill': 'both',
- 'padx': '3m', 'pady': '3m'}})
+ {'width': '3i',
+ 'text': text,
+ 'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
+ Pack: {'side': 'right', 'expand': 1,
+ 'fill': 'both',
+ 'padx': '3m', 'pady': '3m'}})
if bitmap:
- bm = Label(top, {'bitmap': bitmap,
- Pack: {'side': 'left',
- 'padx': '3m', 'pady': '3m'}})
+ bm = Label(top, {'bitmap': bitmap,
+ Pack: {'side': 'left',
+ 'padx': '3m', 'pady': '3m'}})
# 3. Create a row of buttons at the bottom of the dialog.
buttons = []
i = 0
for but in args:
- b = Button(bot, {'text': but,
- 'command': ('set', 'button', i)})
- buttons.append(b)
- if i == default:
- bd = Frame(bot, {'relief': 'sunken', 'bd': 1,
- Pack: {'side': 'left', 'expand': 1,
- 'padx': '3m', 'pady': '2m'}})
- b.lift()
- b.pack ({'in': bd, 'side': 'left',
- 'padx': '2m', 'pady': '2m',
- 'ipadx': '2m', 'ipady': '1m'})
- else:
- b.pack ({'side': 'left', 'expand': 1,
- 'padx': '3m', 'pady': '3m',
- 'ipady': '2m', 'ipady': '1m'})
- i = i+1
+ b = Button(bot, {'text': but,
+ 'command': ('set', 'button', i)})
+ buttons.append(b)
+ if i == default:
+ bd = Frame(bot, {'relief': 'sunken', 'bd': 1,
+ Pack: {'side': 'left', 'expand': 1,
+ 'padx': '3m', 'pady': '2m'}})
+ b.lift()
+ b.pack ({'in': bd, 'side': 'left',
+ 'padx': '2m', 'pady': '2m',
+ 'ipadx': '2m', 'ipady': '1m'})
+ else:
+ b.pack ({'side': 'left', 'expand': 1,
+ 'padx': '3m', 'pady': '3m',
+ 'ipady': '2m', 'ipady': '1m'})
+ i = i+1
# 4. Set up a binding for <Return>, if there's a default,
# set a grab, and claim the focus too.
if default >= 0:
- w.bind('<Return>',
- lambda e, b=buttons[default], i=default:
- (b.flash(),
- b.setvar('button', i)))
+ w.bind('<Return>',
+ lambda e, b=buttons[default], i=default:
+ (b.flash(),
+ b.setvar('button', i)))
oldFocus = w.tk.call('focus') # XXX
w.grab_set()
@@ -89,69 +89,69 @@ def strdialog(master, title, text, bitmap, default, *args):
w.iconname('Dialog')
top = Frame(w, {'relief': 'raised', 'bd': 1,
- Pack: {'side': 'top', 'fill': 'both'}})
+ Pack: {'side': 'top', 'fill': 'both'}})
if args:
- bot = Frame(w, {'relief': 'raised', 'bd': 1,
- Pack: {'side': 'bottom', 'fill': 'both'}})
+ bot = Frame(w, {'relief': 'raised', 'bd': 1,
+ Pack: {'side': 'bottom', 'fill': 'both'}})
# 2. Fill the top part with the bitmap, message and input field.
if bitmap:
- bm = Label(top, {'bitmap': bitmap,
- Pack: {'side': 'left',
- 'padx': '3m', 'pady': '3m'}})
+ bm = Label(top, {'bitmap': bitmap,
+ Pack: {'side': 'left',
+ 'padx': '3m', 'pady': '3m'}})
msg = Message(top,
- {'width': '3i',
- 'text': text,
- 'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
- Pack: {'side': 'left',
- 'fill': 'both',
- 'padx': '3m', 'pady': '3m'}})
+ {'width': '3i',
+ 'text': text,
+ 'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
+ Pack: {'side': 'left',
+ 'fill': 'both',
+ 'padx': '3m', 'pady': '3m'}})
field = Entry(top,
- {'relief':'sunken',
- Pack:{'side':'left',
- 'fill':'x',
- 'expand':1,
- 'padx':'3m', 'pady':'3m'}})
+ {'relief':'sunken',
+ Pack:{'side':'left',
+ 'fill':'x',
+ 'expand':1,
+ 'padx':'3m', 'pady':'3m'}})
# 3. Create a row of buttons at the bottom of the dialog.
buttons = []
i = 0
for but in args:
- b = Button(bot, {'text': but,
- 'command': ('set', 'button', i)})
- buttons.append(b)
- if i == default:
- bd = Frame(bot, {'relief': 'sunken', 'bd': 1,
- Pack: {'side': 'left', 'expand': 1,
- 'padx': '3m', 'pady': '2m'}})
- b.lift()
- b.pack ({'in': bd, 'side': 'left',
- 'padx': '2m', 'pady': '2m',
- 'ipadx': '2m', 'ipady': '1m'})
- else:
- b.pack ({'side': 'left', 'expand': 1,
- 'padx': '3m', 'pady': '3m',
- 'ipady': '2m', 'ipady': '1m'})
- i = i+1
+ b = Button(bot, {'text': but,
+ 'command': ('set', 'button', i)})
+ buttons.append(b)
+ if i == default:
+ bd = Frame(bot, {'relief': 'sunken', 'bd': 1,
+ Pack: {'side': 'left', 'expand': 1,
+ 'padx': '3m', 'pady': '2m'}})
+ b.lift()
+ b.pack ({'in': bd, 'side': 'left',
+ 'padx': '2m', 'pady': '2m',
+ 'ipadx': '2m', 'ipady': '1m'})
+ else:
+ b.pack ({'side': 'left', 'expand': 1,
+ 'padx': '3m', 'pady': '3m',
+ 'ipady': '2m', 'ipady': '1m'})
+ i = i+1
# 4. Set up a binding for <Return>, if there's a default,
# set a grab, and claim the focus too.
if not args:
- w.bind('<Return>', lambda arg, top=top: top.setvar('button', 0))
- field.bind('<Return>', lambda arg, top=top: top.setvar('button', 0))
+ w.bind('<Return>', lambda arg, top=top: top.setvar('button', 0))
+ field.bind('<Return>', lambda arg, top=top: top.setvar('button', 0))
elif default >= 0:
- w.bind('<Return>',
- lambda e, b=buttons[default], i=default:
- (b.flash(),
- b.setvar('button', i)))
- field.bind('<Return>',
- lambda e, b=buttons[default], i=default:
- (b.flash(),
- b.setvar('button', i)))
+ w.bind('<Return>',
+ lambda e, b=buttons[default], i=default:
+ (b.flash(),
+ b.setvar('button', i)))
+ field.bind('<Return>',
+ lambda e, b=buttons[default], i=default:
+ (b.flash(),
+ b.setvar('button', i)))
oldFocus = w.tk.call('focus') # XXX
w.grab_set()
@@ -165,9 +165,9 @@ def strdialog(master, title, text, bitmap, default, *args):
w.destroy()
w.tk.call('focus', oldFocus) # XXX
if args:
- return v, w.getint(w.getvar('button'))
+ return v, w.getint(w.getvar('button'))
else:
- return v
+ return v
def message(str):
i = dialog(mainWidget, 'Message', str, '', 0, 'OK')
@@ -184,7 +184,7 @@ def askstr(str):
i = strdialog(mainWidget, 'Question', str, '', 0)
return i
-def askfile(str): # XXXX For now...
+def askfile(str): # XXXX For now...
i = strdialog(mainWidget, 'Question', str, '', 0)
return i
@@ -192,30 +192,30 @@ def askfile(str): # XXXX For now...
def _go():
i = dialog(mainWidget,
- 'Not Responding',
- "The file server isn't responding right now; "
- "I'll keep trying.",
- '',
- -1,
- 'OK')
+ 'Not Responding',
+ "The file server isn't responding right now; "
+ "I'll keep trying.",
+ '',
+ -1,
+ 'OK')
print 'pressed button', i
i = dialog(mainWidget,
- 'File Modified',
- 'File "tcl.h" has been modified since '
- 'the last time it was saved. '
- 'Do you want to save it before exiting the application?',
- 'warning',
- 0,
- 'Save File',
- 'Discard Changes',
- 'Return To Editor')
+ 'File Modified',
+ 'File "tcl.h" has been modified since '
+ 'the last time it was saved. '
+ 'Do you want to save it before exiting the application?',
+ 'warning',
+ 0,
+ 'Save File',
+ 'Discard Changes',
+ 'Return To Editor')
print 'pressed button', i
print message('Test of message')
print askyn('Test of yes/no')
print askync('Test of yes/no/cancel')
print askstr('Type a string:')
print strdialog(mainWidget, 'Question', 'Another string:', '',
- 0, 'Save', 'Save as text')
+ 0, 'Save', 'Save as text')
def _test():
import sys
@@ -223,12 +223,12 @@ def _test():
mainWidget = Frame()
Pack.config(mainWidget)
start = Button(mainWidget,
- {'text': 'Press Here To Start', 'command': _go})
+ {'text': 'Press Here To Start', 'command': _go})
start.pack()
endit = Button(mainWidget,
- {'text': 'Exit',
- 'command': 'exit',
- Pack: {'fill' : 'both'}})
+ {'text': 'Exit',
+ 'command': 'exit',
+ Pack: {'fill' : 'both'}})
mainWidget.mainloop()
if __name__ == '__main__':
diff --git a/Tools/modulator/genmodule.py b/Tools/modulator/genmodule.py
index e5c69bf..1974502 100755
--- a/Tools/modulator/genmodule.py
+++ b/Tools/modulator/genmodule.py
@@ -28,7 +28,7 @@ error = 'genmodule.error'
# Names of functions in the object-description struct.
#
FUNCLIST = ['new', 'tp_dealloc', 'tp_print', 'tp_getattr', 'tp_setattr',
- 'tp_compare', 'tp_repr', 'tp_hash', 'tp_call', 'tp_str']
+ 'tp_compare', 'tp_repr', 'tp_hash', 'tp_call', 'tp_str']
TYPELIST = ['tp_as_number', 'tp_as_sequence', 'tp_as_mapping', 'structure']
#
@@ -37,112 +37,112 @@ TYPELIST = ['tp_as_number', 'tp_as_sequence', 'tp_as_mapping', 'structure']
#
class writer:
def __init__(self):
- self._subst = None
+ self._subst = None
def makesubst(self):
- if not self._subst:
- if not self.__dict__.has_key('abbrev'):
- self.abbrev = self.name
- self.Abbrev = string.upper(self.abbrev[0])+self.abbrev[1:]
- subst = varsubst.Varsubst(self.__dict__)
- subst.useindent(1)
- self._subst = subst.subst
+ if not self._subst:
+ if not self.__dict__.has_key('abbrev'):
+ self.abbrev = self.name
+ self.Abbrev = string.upper(self.abbrev[0])+self.abbrev[1:]
+ subst = varsubst.Varsubst(self.__dict__)
+ subst.useindent(1)
+ self._subst = subst.subst
def addcode(self, name, fp):
- ifp = self.opentemplate(name)
- self.makesubst()
- d = ifp.read()
- d = self._subst(d)
- fp.write(d)
+ ifp = self.opentemplate(name)
+ self.makesubst()
+ d = ifp.read()
+ d = self._subst(d)
+ fp.write(d)
def opentemplate(self, name):
- for p in sys.path:
- fn = os.path.join(p, name)
- if os.path.exists(fn):
- return open(fn, 'r')
- fn = os.path.join(p, 'Templates')
- fn = os.path.join(fn, name)
- if os.path.exists(fn):
- return open(fn, 'r')
- raise error, 'Template '+name+' not found for '+self._type+' '+ \
- self.name
-
+ for p in sys.path:
+ fn = os.path.join(p, name)
+ if os.path.exists(fn):
+ return open(fn, 'r')
+ fn = os.path.join(p, 'Templates')
+ fn = os.path.join(fn, name)
+ if os.path.exists(fn):
+ return open(fn, 'r')
+ raise error, 'Template '+name+' not found for '+self._type+' '+ \
+ self.name
+
class module(writer):
_type = 'module'
def writecode(self, fp):
- self.addcode('copyright', fp)
- self.addcode('module_head', fp)
- for o in self.objects:
- o.writehead(fp)
- for o in self.objects:
- o.writebody(fp)
- new_ml = ''
- for fn in self.methodlist:
- self.method = fn
- self.addcode('module_method', fp)
- new_ml = new_ml + (
- '{"%s",\t(PyCFunction)%s_%s,\tMETH_VARARGS,\t%s_%s__doc__},\n'
- %(fn, self.abbrev, fn, self.abbrev, fn))
- self.methodlist = new_ml
- self.addcode('module_tail', fp)
+ self.addcode('copyright', fp)
+ self.addcode('module_head', fp)
+ for o in self.objects:
+ o.writehead(fp)
+ for o in self.objects:
+ o.writebody(fp)
+ new_ml = ''
+ for fn in self.methodlist:
+ self.method = fn
+ self.addcode('module_method', fp)
+ new_ml = new_ml + (
+ '{"%s",\t(PyCFunction)%s_%s,\tMETH_VARARGS,\t%s_%s__doc__},\n'
+ %(fn, self.abbrev, fn, self.abbrev, fn))
+ self.methodlist = new_ml
+ self.addcode('module_tail', fp)
class object(writer):
_type = 'object'
def __init__(self):
- self.typelist = []
- self.methodlist = []
- self.funclist = ['new']
- writer.__init__(self)
+ self.typelist = []
+ self.methodlist = []
+ self.funclist = ['new']
+ writer.__init__(self)
def writecode(self, fp):
- self.addcode('copyright', fp)
- self.writehead(fp)
- self.writebody(fp)
+ self.addcode('copyright', fp)
+ self.writehead(fp)
+ self.writebody(fp)
def writehead(self, fp):
- self.addcode('object_head', fp)
+ self.addcode('object_head', fp)
def writebody(self, fp):
- new_ml = ''
- for fn in self.methodlist:
- self.method = fn
- self.addcode('object_method', fp)
- new_ml = new_ml + (
- '{"%s",\t(PyCFunction)%s_%s,\tMETH_VARARGS,\t%s_%s__doc__},\n'
- %(fn, self.abbrev, fn, self.abbrev, fn))
- self.methodlist = new_ml
- self.addcode('object_mlist', fp)
+ new_ml = ''
+ for fn in self.methodlist:
+ self.method = fn
+ self.addcode('object_method', fp)
+ new_ml = new_ml + (
+ '{"%s",\t(PyCFunction)%s_%s,\tMETH_VARARGS,\t%s_%s__doc__},\n'
+ %(fn, self.abbrev, fn, self.abbrev, fn))
+ self.methodlist = new_ml
+ self.addcode('object_mlist', fp)
- # Add getattr if we have methods
- if self.methodlist and not 'tp_getattr' in self.funclist:
- self.funclist.insert(0, 'tp_getattr')
-
- for fn in FUNCLIST:
- setattr(self, fn, '0')
+ # Add getattr if we have methods
+ if self.methodlist and not 'tp_getattr' in self.funclist:
+ self.funclist.insert(0, 'tp_getattr')
+
+ for fn in FUNCLIST:
+ setattr(self, fn, '0')
- #
- # Special case for structure-access objects: put getattr in the
- # list of functions but don't generate code for it directly,
- # the code is obtained from the object_structure template.
- # The same goes for setattr.
- #
- if 'structure' in self.typelist:
- if 'tp_getattr' in self.funclist:
- self.funclist.remove('tp_getattr')
- if 'tp_setattr' in self.funclist:
- self.funclist.remove('tp_setattr')
- self.tp_getattr = self.abbrev + '_getattr'
- self.tp_setattr = self.abbrev + '_setattr'
- for fn in self.funclist:
- self.addcode('object_'+fn, fp)
- setattr(self, fn, '%s_%s'%(self.abbrev, fn[3:]))
- for tn in TYPELIST:
- setattr(self, tn, '0')
- for tn in self.typelist:
- self.addcode('object_'+tn, fp)
- setattr(self, tn, '&%s_%s'%(self.abbrev, tn[3:]))
- self.addcode('object_tail', fp)
+ #
+ # Special case for structure-access objects: put getattr in the
+ # list of functions but don't generate code for it directly,
+ # the code is obtained from the object_structure template.
+ # The same goes for setattr.
+ #
+ if 'structure' in self.typelist:
+ if 'tp_getattr' in self.funclist:
+ self.funclist.remove('tp_getattr')
+ if 'tp_setattr' in self.funclist:
+ self.funclist.remove('tp_setattr')
+ self.tp_getattr = self.abbrev + '_getattr'
+ self.tp_setattr = self.abbrev + '_setattr'
+ for fn in self.funclist:
+ self.addcode('object_'+fn, fp)
+ setattr(self, fn, '%s_%s'%(self.abbrev, fn[3:]))
+ for tn in TYPELIST:
+ setattr(self, tn, '0')
+ for tn in self.typelist:
+ self.addcode('object_'+tn, fp)
+ setattr(self, tn, '&%s_%s'%(self.abbrev, tn[3:]))
+ self.addcode('object_tail', fp)
def write(fp, obj):
obj.writecode(fp)
diff --git a/Tools/modulator/modulator.py b/Tools/modulator/modulator.py
index da3ce12..c5cc79f 100755
--- a/Tools/modulator/modulator.py
+++ b/Tools/modulator/modulator.py
@@ -18,7 +18,8 @@
import sys, os
if os.name <> 'mac':
- sys.path.append(os.path.join(os.environ['HOME'], 'src/python/Tools/modulator'))
+ sys.path.append(os.path.join(os.environ['HOME'],
+ 'src/python/Tools/modulator'))
from Tkinter import *
from Tkextra import *
@@ -33,347 +34,347 @@ oops = 'oops'
def checkid(str):
if not str: return 0
if not str[0] in string.letters+'_':
- return 0
+ return 0
for c in str[1:]:
- if not c in string.letters+string.digits+'_':
- return 0
+ if not c in string.letters+string.digits+'_':
+ return 0
return 1
def getlistlist(list):
rv = []
n = list.size()
for i in range(n):
- rv.append(list.get(i))
+ rv.append(list.get(i))
return rv
class UI:
def __init__(self):
- self.main = Frame()
- self.main.pack()
- self.main.master.title('Modulator: Module view')
- self.cmdframe = Frame(self.main, {'relief':'raised', 'bd':'0.5m',
- Pack:{'side':'top',
- 'fill':'x'}})
- self.objframe = Frame(self.main, {Pack:{'side':'top', 'fill':'x',
- 'expand':1}})
-
-
- self.check_button = Button(self.cmdframe,
- {'text':'Check', 'command':self.cb_check,
- Pack:{'side':'left', 'padx':'0.5m'}})
- self.save_button = Button(self.cmdframe,
- {'text':'Save...', 'command':self.cb_save,
- Pack:{'side':'left', 'padx':'0.5m'}})
- self.code_button = Button(self.cmdframe,
- {'text':'Generate code...',
- 'command':self.cb_gencode,
- Pack:{'side':'left', 'padx':'0.5m'}})
- self.quit_button = Button(self.cmdframe,
- {'text':'Quit',
- 'command':self.cb_quit,
- Pack:{'side':'right', 'padx':'0.5m'}})
-
- self.module = UI_module(self)
- self.objects = []
- self.modified = 0
+ self.main = Frame()
+ self.main.pack()
+ self.main.master.title('Modulator: Module view')
+ self.cmdframe = Frame(self.main, {'relief':'raised', 'bd':'0.5m',
+ Pack:{'side':'top',
+ 'fill':'x'}})
+ self.objframe = Frame(self.main, {Pack:{'side':'top', 'fill':'x',
+ 'expand':1}})
+
+
+ self.check_button = Button(self.cmdframe,
+ {'text':'Check', 'command':self.cb_check,
+ Pack:{'side':'left', 'padx':'0.5m'}})
+ self.save_button = Button(self.cmdframe,
+ {'text':'Save...', 'command':self.cb_save,
+ Pack:{'side':'left', 'padx':'0.5m'}})
+ self.code_button = Button(self.cmdframe,
+ {'text':'Generate code...',
+ 'command':self.cb_gencode,
+ Pack:{'side':'left', 'padx':'0.5m'}})
+ self.quit_button = Button(self.cmdframe,
+ {'text':'Quit',
+ 'command':self.cb_quit,
+ Pack:{'side':'right', 'padx':'0.5m'}})
+
+ self.module = UI_module(self)
+ self.objects = []
+ self.modified = 0
def run(self):
- self.main.mainloop()
+ self.main.mainloop()
def cb_quit(self, *args):
- if self.modified:
- if not askyn('You have not saved\nAre you sure you want to quit?'):
- return
- sys.exit(0)
+ if self.modified:
+ if not askyn('You have not saved\nAre you sure you want to quit?'):
+ return
+ sys.exit(0)
def cb_check(self, *args):
- try:
- self.module.synchronize()
- for o in self.objects:
- o.synchronize()
- except oops:
- pass
-
+ try:
+ self.module.synchronize()
+ for o in self.objects:
+ o.synchronize()
+ except oops:
+ pass
+
def cb_save(self, *args):
- try:
- pycode = self.module.gencode('m', self.objects)
- except oops:
- return
+ try:
+ pycode = self.module.gencode('m', self.objects)
+ except oops:
+ return
- fn = askfile('Python file name: ')
- if not fn:
- return
+ fn = askfile('Python file name: ')
+ if not fn:
+ return
- fp = open(fn, 'w')
+ fp = open(fn, 'w')
- fp.write(pycode)
- fp.close()
+ fp.write(pycode)
+ fp.close()
def cb_gencode(self, *args):
- try:
- pycode = self.module.gencode('m', self.objects)
- except oops:
- pass
+ try:
+ pycode = self.module.gencode('m', self.objects)
+ except oops:
+ pass
- fn = askfile('C file name: ')
- if not fn:
- return
+ fn = askfile('C file name: ')
+ if not fn:
+ return
- fp = open(fn, 'w')
+ fp = open(fn, 'w')
- try:
- exec pycode
- except:
- message('An error occurred:-)')
- return
- genmodule.write(fp, m)
- fp.close()
+ try:
+ exec pycode
+ except:
+ message('An error occurred:-)')
+ return
+ genmodule.write(fp, m)
+ fp.close()
class UI_module:
def __init__(self, parent):
- self.parent = parent
- self.frame = Frame(parent.objframe, {'relief':'raised', 'bd':'0.2m',
- Pack:{'side':'top',
- 'fill':'x'}})
- self.f1 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
- self.f2 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
- self.f3 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
- self.f4 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
-
- self.l1 = Label(self.f1, {'text':'Module:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.name_entry = Entry(self.f1, {'relief':'sunken',
- Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
- self.l2 = Label(self.f1, {'text':'Abbrev:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.abbrev_entry = Entry(self.f1, {'relief':'sunken', 'width':5,
- Pack:{'side':'left', 'padx':'0.5m'}})
-
- self.l3 = Label(self.f2, {'text':'Methods:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.method_list = ScrolledListbox(self.f2, {'relief':'sunken','bd':2,
- Pack:{'side':'left', 'expand':1,
- 'padx':'0.5m', 'fill':'both'}})
-
- self.l4 = Label(self.f3, {'text':'Add method:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.method_entry = Entry(self.f3, {'relief':'sunken',
- Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
- self.method_entry.bind('<Return>', self.cb_method)
- self.delete_button = Button(self.f3, {'text':'Delete method',
- 'command':self.cb_delmethod,
- Pack:{'side':'left',
- 'padx':'0.5m'}})
-
- self.newobj_button = Button(self.f4, {'text':'new object',
- 'command':self.cb_newobj,
- Pack:{'side':'left',
- 'padx':'0.5m'}})
-
+ self.parent = parent
+ self.frame = Frame(parent.objframe, {'relief':'raised', 'bd':'0.2m',
+ Pack:{'side':'top',
+ 'fill':'x'}})
+ self.f1 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.f2 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.f3 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.f4 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+
+ self.l1 = Label(self.f1, {'text':'Module:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.name_entry = Entry(self.f1, {'relief':'sunken',
+ Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
+ self.l2 = Label(self.f1, {'text':'Abbrev:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.abbrev_entry = Entry(self.f1, {'relief':'sunken', 'width':5,
+ Pack:{'side':'left', 'padx':'0.5m'}})
+
+ self.l3 = Label(self.f2, {'text':'Methods:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.method_list = ScrolledListbox(self.f2, {'relief':'sunken','bd':2,
+ Pack:{'side':'left', 'expand':1,
+ 'padx':'0.5m', 'fill':'both'}})
+
+ self.l4 = Label(self.f3, {'text':'Add method:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.method_entry = Entry(self.f3, {'relief':'sunken',
+ Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
+ self.method_entry.bind('<Return>', self.cb_method)
+ self.delete_button = Button(self.f3, {'text':'Delete method',
+ 'command':self.cb_delmethod,
+ Pack:{'side':'left',
+ 'padx':'0.5m'}})
+
+ self.newobj_button = Button(self.f4, {'text':'new object',
+ 'command':self.cb_newobj,
+ Pack:{'side':'left',
+ 'padx':'0.5m'}})
+
def cb_delmethod(self, *args):
- list = self.method_list.curselection()
- for i in list:
- self.method_list.delete(i)
-
+ list = self.method_list.curselection()
+ for i in list:
+ self.method_list.delete(i)
+
def cb_newobj(self, *arg):
- self.parent.objects.append(UI_object(self.parent))
+ self.parent.objects.append(UI_object(self.parent))
def cb_method(self, *arg):
- name = self.method_entry.get()
- if not name:
- return
- self.method_entry.delete('0', 'end')
- self.method_list.insert('end', name)
+ name = self.method_entry.get()
+ if not name:
+ return
+ self.method_entry.delete('0', 'end')
+ self.method_list.insert('end', name)
def synchronize(self):
- n = self.name_entry.get()
- if not n:
- message('Module name not set')
- raise oops
- if not checkid(n):
- message('Module name not an identifier:\n'+n)
- raise oops
- if not self.abbrev_entry.get():
- self.abbrev_entry.insert('end', n)
- m = getlistlist(self.method_list)
- for n in m:
- if not checkid(n):
- message('Method name not an identifier:\n'+n)
- raise oops
-
+ n = self.name_entry.get()
+ if not n:
+ message('Module name not set')
+ raise oops
+ if not checkid(n):
+ message('Module name not an identifier:\n'+n)
+ raise oops
+ if not self.abbrev_entry.get():
+ self.abbrev_entry.insert('end', n)
+ m = getlistlist(self.method_list)
+ for n in m:
+ if not checkid(n):
+ message('Method name not an identifier:\n'+n)
+ raise oops
+
def gencode(self, name, objects):
- rv = ''
- self.synchronize()
- for o in objects:
- o.synchronize()
- onames = []
- for i in range(len(objects)):
- oname = 'o'+`i+1`
- rv = rv + objects[i].gencode(oname)
- onames.append(oname)
- rv = rv + (name+' = genmodule.module()\n')
- rv = rv + (name+'.name = '+`self.name_entry.get()`+'\n')
- rv = rv + (name+'.abbrev = '+`self.abbrev_entry.get()`+'\n')
- rv = rv + (name+'.methodlist = '+`getlistlist(self.method_list)`+'\n')
- rv = rv + (name+'.objects = ['+string.joinfields(onames, ',')+']\n')
- rv = rv + ('\n')
- return rv
-
+ rv = ''
+ self.synchronize()
+ for o in objects:
+ o.synchronize()
+ onames = []
+ for i in range(len(objects)):
+ oname = 'o'+`i+1`
+ rv = rv + objects[i].gencode(oname)
+ onames.append(oname)
+ rv = rv + (name+' = genmodule.module()\n')
+ rv = rv + (name+'.name = '+`self.name_entry.get()`+'\n')
+ rv = rv + (name+'.abbrev = '+`self.abbrev_entry.get()`+'\n')
+ rv = rv + (name+'.methodlist = '+`getlistlist(self.method_list)`+'\n')
+ rv = rv + (name+'.objects = ['+string.joinfields(onames, ',')+']\n')
+ rv = rv + ('\n')
+ return rv
+
object_number = 0
class UI_object:
def __init__(self, parent):
- global object_number
-
- object_number = object_number + 1
- self.num = object_number
- self.vpref = 'o'+`self.num`+'_'
- self.frame = Toplevel(parent.objframe)
-# self.frame.pack()
- self.frame.title('Modulator: object view')
-# self.frame = Frame(parent.objframe, {'relief':'raised', 'bd':'0.2m',
-# Pack:{'side':'top',
-# 'fill':'x'}})
- self.f1 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
- self.f2 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
- self.f3 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
- self.f4 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
- 'fill':'x'}})
-
-
- self.l1 = Label(self.f1, {'text':'Object:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.name_entry = Entry(self.f1, {'relief':'sunken',
- Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
- self.l2 = Label(self.f1, {'text':'Abbrev:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.abbrev_entry = Entry(self.f1, {'relief':'sunken', 'width':5,
- Pack:{'side':'left', 'padx':'0.5m'}})
-
- self.l3 = Label(self.f2, {'text':'Methods:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.method_list = ScrolledListbox(self.f2, {'relief':'sunken','bd':2,
- Pack:{'side':'left', 'expand':1,
- 'padx':'0.5m', 'fill':'both'}})
-
- self.l4 = Label(self.f3, {'text':'Add method:', Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.method_entry = Entry(self.f3, {'relief':'sunken',
- Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
- self.method_entry.bind('<Return>', self.cb_method)
- self.delete_button = Button(self.f3, {'text':'Delete method',
- 'command':self.cb_delmethod,
- Pack:{'side':'left',
- 'padx':'0.5m'}})
-
-
- self.l5 = Label(self.f4, {'text':'functions:',
- Pack:{'side':'left',
- 'padx':'0.5m'}})
- self.f5 = Frame(self.f4, {Pack:{'side':'left', 'pady':'0.5m',
- 'fill':'both'}})
- self.l6 = Label(self.f4, {'text':'Types:',
- Pack:{'side':'left', 'padx':'0.5m'}})
- self.f6 = Frame(self.f4, {Pack:{'side':'left', 'pady':'0.5m',
- 'fill':'x'}})
- self.funcs = {}
- for i in genmodule.FUNCLIST:
- vname = self.vpref+i
- self.f5.setvar(vname, 0)
- b = Checkbutton(self.f5, {'variable':vname, 'text':i,
- Pack:{'side':'top', 'pady':'0.5m',
- 'anchor':'w','expand':1}})
- self.funcs[i] = b
- self.f5.setvar(self.vpref+'new', 1)
-
- self.types = {}
- for i in genmodule.TYPELIST:
- vname = self.vpref + i
- self.f6.setvar(vname, 0)
- b = Checkbutton(self.f6, {'variable':vname, 'text':i,
- Pack:{'side':'top', 'pady':'0.5m',
- 'anchor':'w'}})
- self.types[i] = b
-
+ global object_number
+
+ object_number = object_number + 1
+ self.num = object_number
+ self.vpref = 'o'+`self.num`+'_'
+ self.frame = Toplevel(parent.objframe)
+# self.frame.pack()
+ self.frame.title('Modulator: object view')
+# self.frame = Frame(parent.objframe, {'relief':'raised', 'bd':'0.2m',
+# Pack:{'side':'top',
+# 'fill':'x'}})
+ self.f1 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.f2 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.f3 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.f4 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m',
+ 'fill':'x'}})
+
+
+ self.l1 = Label(self.f1, {'text':'Object:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.name_entry = Entry(self.f1, {'relief':'sunken',
+ Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
+ self.l2 = Label(self.f1, {'text':'Abbrev:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.abbrev_entry = Entry(self.f1, {'relief':'sunken', 'width':5,
+ Pack:{'side':'left', 'padx':'0.5m'}})
+
+ self.l3 = Label(self.f2, {'text':'Methods:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.method_list = ScrolledListbox(self.f2, {'relief':'sunken','bd':2,
+ Pack:{'side':'left', 'expand':1,
+ 'padx':'0.5m', 'fill':'both'}})
+
+ self.l4 = Label(self.f3, {'text':'Add method:', Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.method_entry = Entry(self.f3, {'relief':'sunken',
+ Pack:{'side':'left', 'padx':'0.5m', 'expand':1}})
+ self.method_entry.bind('<Return>', self.cb_method)
+ self.delete_button = Button(self.f3, {'text':'Delete method',
+ 'command':self.cb_delmethod,
+ Pack:{'side':'left',
+ 'padx':'0.5m'}})
+
+
+ self.l5 = Label(self.f4, {'text':'functions:',
+ Pack:{'side':'left',
+ 'padx':'0.5m'}})
+ self.f5 = Frame(self.f4, {Pack:{'side':'left', 'pady':'0.5m',
+ 'fill':'both'}})
+ self.l6 = Label(self.f4, {'text':'Types:',
+ Pack:{'side':'left', 'padx':'0.5m'}})
+ self.f6 = Frame(self.f4, {Pack:{'side':'left', 'pady':'0.5m',
+ 'fill':'x'}})
+ self.funcs = {}
+ for i in genmodule.FUNCLIST:
+ vname = self.vpref+i
+ self.f5.setvar(vname, 0)
+ b = Checkbutton(self.f5, {'variable':vname, 'text':i,
+ Pack:{'side':'top', 'pady':'0.5m',
+ 'anchor':'w','expand':1}})
+ self.funcs[i] = b
+ self.f5.setvar(self.vpref+'new', 1)
+
+ self.types = {}
+ for i in genmodule.TYPELIST:
+ vname = self.vpref + i
+ self.f6.setvar(vname, 0)
+ b = Checkbutton(self.f6, {'variable':vname, 'text':i,
+ Pack:{'side':'top', 'pady':'0.5m',
+ 'anchor':'w'}})
+ self.types[i] = b
+
def cb_method(self, *arg):
- name = self.method_entry.get()
- if not name:
- return
- self.method_entry.delete('0', 'end')
- self.method_list.insert('end', name)
+ name = self.method_entry.get()
+ if not name:
+ return
+ self.method_entry.delete('0', 'end')
+ self.method_list.insert('end', name)
def cb_delmethod(self, *args):
- list = self.method_list.curselection()
- for i in list:
- self.method_list.delete(i)
-
+ list = self.method_list.curselection()
+ for i in list:
+ self.method_list.delete(i)
+
def synchronize(self):
- n = self.name_entry.get()
- if not n:
- message('Object name not set')
- raise oops
- if not self.abbrev_entry.get():
- self.abbrev_entry.insert('end', n)
- n = self.abbrev_entry.get()
- if not checkid(n):
- message('Abbreviation not an identifier:\n'+n)
- raise oops
- m = getlistlist(self.method_list)
- for n in m:
- if not checkid(n):
- message('Method name not an identifier:\n'+n)
- raise oops
- if m:
- self.f5.setvar(self.vpref+'tp_getattr', 1)
- pass
-
+ n = self.name_entry.get()
+ if not n:
+ message('Object name not set')
+ raise oops
+ if not self.abbrev_entry.get():
+ self.abbrev_entry.insert('end', n)
+ n = self.abbrev_entry.get()
+ if not checkid(n):
+ message('Abbreviation not an identifier:\n'+n)
+ raise oops
+ m = getlistlist(self.method_list)
+ for n in m:
+ if not checkid(n):
+ message('Method name not an identifier:\n'+n)
+ raise oops
+ if m:
+ self.f5.setvar(self.vpref+'tp_getattr', 1)
+ pass
+
def gencode(self, name):
- rv = ''
- rv = rv + (name+' = genmodule.object()\n')
- rv = rv + (name+'.name = '+`self.name_entry.get()`+'\n')
- rv = rv + (name+'.abbrev = '+`self.abbrev_entry.get()`+'\n')
- rv = rv + (name+'.methodlist = '+`getlistlist(self.method_list)`+'\n')
- fl = []
- for fn in genmodule.FUNCLIST:
- vname = self.vpref + fn
- if self.f5.getvar(vname) == '1':
- fl.append(fn)
- rv = rv + (name+'.funclist = '+`fl`+'\n')
-
- fl = []
- for fn in genmodule.TYPELIST:
- vname = self.vpref + fn
- if self.f5.getvar(vname) == '1':
- fl.append(fn)
-
- rv = rv + (name+'.typelist = '+`fl`+'\n')
-
- rv = rv + ('\n')
- return rv
-
+ rv = ''
+ rv = rv + (name+' = genmodule.object()\n')
+ rv = rv + (name+'.name = '+`self.name_entry.get()`+'\n')
+ rv = rv + (name+'.abbrev = '+`self.abbrev_entry.get()`+'\n')
+ rv = rv + (name+'.methodlist = '+`getlistlist(self.method_list)`+'\n')
+ fl = []
+ for fn in genmodule.FUNCLIST:
+ vname = self.vpref + fn
+ if self.f5.getvar(vname) == '1':
+ fl.append(fn)
+ rv = rv + (name+'.funclist = '+`fl`+'\n')
+
+ fl = []
+ for fn in genmodule.TYPELIST:
+ vname = self.vpref + fn
+ if self.f5.getvar(vname) == '1':
+ fl.append(fn)
+
+ rv = rv + (name+'.typelist = '+`fl`+'\n')
+
+ rv = rv + ('\n')
+ return rv
+
def main():
if len(sys.argv) < 2:
- ui = UI()
- ui.run()
+ ui = UI()
+ ui.run()
elif len(sys.argv) == 2:
- fp = open(sys.argv[1])
- pycode = fp.read()
- try:
- exec pycode
- except:
- sys.stderr.write('An error occurred:-)\n')
- sys.exit(1)
- genmodule.write(sys.stdout, m)
+ fp = open(sys.argv[1])
+ pycode = fp.read()
+ try:
+ exec pycode
+ except:
+ sys.stderr.write('An error occurred:-)\n')
+ sys.exit(1)
+ genmodule.write(sys.stdout, m)
else:
- sys.stderr.write('Usage: modulator [file]\n')
- sys.exit(1)
-
+ sys.stderr.write('Usage: modulator [file]\n')
+ sys.exit(1)
+
main()
diff --git a/Tools/modulator/varsubst.py b/Tools/modulator/varsubst.py
index ec89fe3..06e9683 100644
--- a/Tools/modulator/varsubst.py
+++ b/Tools/modulator/varsubst.py
@@ -9,42 +9,42 @@ error = 'varsubst.error'
class Varsubst:
def __init__(self, dict):
- self.dict = dict
- self.prog = regex.compile('\$[a-zA-Z0-9_]*\$')
- self.do_useindent = 0
+ self.dict = dict
+ self.prog = regex.compile('\$[a-zA-Z0-9_]*\$')
+ self.do_useindent = 0
def useindent(self, onoff):
- self.do_useindent = onoff
-
+ self.do_useindent = onoff
+
def subst(self, str):
- rv = ''
- while 1:
- pos = self.prog.search(str)
- if pos < 0:
- return rv + str
- if pos:
- rv = rv + str[:pos]
- str = str[pos:]
- len = self.prog.match(str)
- if len == 2:
- # Escaped dollar
- rv = rv + '$'
- str = str[2:]
- continue
- name = str[1:len-1]
- str = str[len:]
- if not self.dict.has_key(name):
- raise error, 'No such variable: '+name
- value = self.dict[name]
- if self.do_useindent and '\n' in value:
- value = self._modindent(value, rv)
- rv = rv + value
+ rv = ''
+ while 1:
+ pos = self.prog.search(str)
+ if pos < 0:
+ return rv + str
+ if pos:
+ rv = rv + str[:pos]
+ str = str[pos:]
+ len = self.prog.match(str)
+ if len == 2:
+ # Escaped dollar
+ rv = rv + '$'
+ str = str[2:]
+ continue
+ name = str[1:len-1]
+ str = str[len:]
+ if not self.dict.has_key(name):
+ raise error, 'No such variable: '+name
+ value = self.dict[name]
+ if self.do_useindent and '\n' in value:
+ value = self._modindent(value, rv)
+ rv = rv + value
def _modindent(self, value, old):
- lastnl = string.rfind(old, '\n', 0) + 1
- lastnl = len(old) - lastnl
- sub = '\n' + (' '*lastnl)
- return regsub.gsub('\n', sub, value)
+ lastnl = string.rfind(old, '\n', 0) + 1
+ lastnl = len(old) - lastnl
+ sub = '\n' + (' '*lastnl)
+ return regsub.gsub('\n', sub, value)
def _test():
import sys