Guido van Rossum | f06ee5f | 1996-11-27 19:52:01 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 2 | # |
| 3 | # Modulator - Generate skeleton modules. |
| 4 | # |
| 5 | # The user fills out some forms with information about what the module |
| 6 | # should support (methods, objects), names of these things, prefixes to |
| 7 | # use for C code, whether the objects should also support access as numbers, |
| 8 | # etc etc etc. |
| 9 | # When the user presses 'Generate code' we generate a complete skeleton |
| 10 | # module in C. |
| 11 | # |
| 12 | # Alternatively, the selections made can be save to a python sourcefile and |
| 13 | # this sourcefile can be passed on the command line (resulting in the same |
| 14 | # skeleton C code). |
| 15 | # |
| 16 | # Jack Jansen, CWI, October 1994. |
| 17 | # |
| 18 | |
| 19 | import sys, os |
Guido van Rossum | a0e2422 | 1996-03-07 16:16:54 +0000 | [diff] [blame] | 20 | if os.name <> 'mac': |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 21 | sys.path.append(os.path.join(os.environ['HOME'], |
| 22 | 'src/python/Tools/modulator')) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 23 | |
| 24 | from Tkinter import * |
| 25 | from Tkextra import * |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 26 | from ScrolledListbox import ScrolledListbox |
| 27 | import sys |
| 28 | import genmodule |
| 29 | import string |
| 30 | |
| 31 | oops = 'oops' |
| 32 | |
Jack Jansen | 9aaee93 | 2001-12-27 23:35:43 +0000 | [diff] [blame] | 33 | IDENTSTARTCHARS = string.letters + '_' |
| 34 | IDENTCHARS = string.letters + string.digits + '_' |
Fred Drake | cd694c4 | 2001-07-20 18:58:42 +0000 | [diff] [blame] | 35 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 36 | # Check that string is a legal C identifier |
| 37 | def checkid(str): |
| 38 | if not str: return 0 |
Fred Drake | cd694c4 | 2001-07-20 18:58:42 +0000 | [diff] [blame] | 39 | if not str[0] in IDENTSTARTCHARS: |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 40 | return 0 |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 41 | for c in str[1:]: |
Fred Drake | cd694c4 | 2001-07-20 18:58:42 +0000 | [diff] [blame] | 42 | if not c in IDENTCHARS: |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 43 | return 0 |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 44 | return 1 |
| 45 | |
| 46 | def getlistlist(list): |
| 47 | rv = [] |
| 48 | n = list.size() |
| 49 | for i in range(n): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 50 | rv.append(list.get(i)) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 51 | return rv |
| 52 | |
| 53 | class UI: |
| 54 | def __init__(self): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 55 | self.main = Frame() |
| 56 | self.main.pack() |
| 57 | self.main.master.title('Modulator: Module view') |
| 58 | self.cmdframe = Frame(self.main, {'relief':'raised', 'bd':'0.5m', |
| 59 | Pack:{'side':'top', |
| 60 | 'fill':'x'}}) |
| 61 | self.objframe = Frame(self.main, {Pack:{'side':'top', 'fill':'x', |
| 62 | 'expand':1}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 63 | |
| 64 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 65 | self.check_button = Button(self.cmdframe, |
| 66 | {'text':'Check', 'command':self.cb_check, |
| 67 | Pack:{'side':'left', 'padx':'0.5m'}}) |
| 68 | self.save_button = Button(self.cmdframe, |
| 69 | {'text':'Save...', 'command':self.cb_save, |
| 70 | Pack:{'side':'left', 'padx':'0.5m'}}) |
| 71 | self.code_button = Button(self.cmdframe, |
| 72 | {'text':'Generate code...', |
| 73 | 'command':self.cb_gencode, |
| 74 | Pack:{'side':'left', 'padx':'0.5m'}}) |
| 75 | self.quit_button = Button(self.cmdframe, |
| 76 | {'text':'Quit', |
| 77 | 'command':self.cb_quit, |
| 78 | Pack:{'side':'right', 'padx':'0.5m'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 79 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 80 | self.module = UI_module(self) |
| 81 | self.objects = [] |
| 82 | self.modified = 0 |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 83 | |
| 84 | def run(self): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 85 | self.main.mainloop() |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 86 | |
| 87 | def cb_quit(self, *args): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 88 | if self.modified: |
| 89 | if not askyn('You have not saved\nAre you sure you want to quit?'): |
| 90 | return |
| 91 | sys.exit(0) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 92 | |
| 93 | def cb_check(self, *args): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 94 | try: |
| 95 | self.module.synchronize() |
| 96 | for o in self.objects: |
| 97 | o.synchronize() |
| 98 | except oops: |
| 99 | pass |
| 100 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 101 | def cb_save(self, *args): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 102 | try: |
| 103 | pycode = self.module.gencode('m', self.objects) |
| 104 | except oops: |
| 105 | return |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 106 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 107 | fn = askfile('Python file name: ') |
| 108 | if not fn: |
| 109 | return |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 110 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 111 | fp = open(fn, 'w') |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 112 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 113 | fp.write(pycode) |
| 114 | fp.close() |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 115 | |
| 116 | def cb_gencode(self, *args): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 117 | try: |
| 118 | pycode = self.module.gencode('m', self.objects) |
| 119 | except oops: |
| 120 | pass |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 121 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 122 | fn = askfile('C file name: ') |
| 123 | if not fn: |
| 124 | return |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 125 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 126 | fp = open(fn, 'w') |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 127 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 128 | try: |
| 129 | exec pycode |
| 130 | except: |
| 131 | message('An error occurred:-)') |
| 132 | return |
| 133 | genmodule.write(fp, m) |
| 134 | fp.close() |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 135 | |
| 136 | class UI_module: |
| 137 | def __init__(self, parent): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 138 | self.parent = parent |
| 139 | self.frame = Frame(parent.objframe, {'relief':'raised', 'bd':'0.2m', |
| 140 | Pack:{'side':'top', |
| 141 | 'fill':'x'}}) |
| 142 | self.f1 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 143 | 'fill':'x'}}) |
| 144 | self.f2 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 145 | 'fill':'x'}}) |
| 146 | self.f3 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 147 | 'fill':'x'}}) |
| 148 | self.f4 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 149 | 'fill':'x'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 150 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 151 | self.l1 = Label(self.f1, {'text':'Module:', Pack:{'side':'left', |
| 152 | 'padx':'0.5m'}}) |
| 153 | self.name_entry = Entry(self.f1, {'relief':'sunken', |
| 154 | Pack:{'side':'left', 'padx':'0.5m', 'expand':1}}) |
| 155 | self.l2 = Label(self.f1, {'text':'Abbrev:', Pack:{'side':'left', |
| 156 | 'padx':'0.5m'}}) |
| 157 | self.abbrev_entry = Entry(self.f1, {'relief':'sunken', 'width':5, |
| 158 | Pack:{'side':'left', 'padx':'0.5m'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 159 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 160 | self.l3 = Label(self.f2, {'text':'Methods:', Pack:{'side':'left', |
| 161 | 'padx':'0.5m'}}) |
| 162 | self.method_list = ScrolledListbox(self.f2, {'relief':'sunken','bd':2, |
| 163 | Pack:{'side':'left', 'expand':1, |
| 164 | 'padx':'0.5m', 'fill':'both'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 165 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 166 | self.l4 = Label(self.f3, {'text':'Add method:', Pack:{'side':'left', |
| 167 | 'padx':'0.5m'}}) |
| 168 | self.method_entry = Entry(self.f3, {'relief':'sunken', |
| 169 | Pack:{'side':'left', 'padx':'0.5m', 'expand':1}}) |
| 170 | self.method_entry.bind('<Return>', self.cb_method) |
| 171 | self.delete_button = Button(self.f3, {'text':'Delete method', |
| 172 | 'command':self.cb_delmethod, |
| 173 | Pack:{'side':'left', |
| 174 | 'padx':'0.5m'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 175 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 176 | self.newobj_button = Button(self.f4, {'text':'new object', |
| 177 | 'command':self.cb_newobj, |
| 178 | Pack:{'side':'left', |
| 179 | 'padx':'0.5m'}}) |
| 180 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 181 | def cb_delmethod(self, *args): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 182 | list = self.method_list.curselection() |
| 183 | for i in list: |
| 184 | self.method_list.delete(i) |
| 185 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 186 | def cb_newobj(self, *arg): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 187 | self.parent.objects.append(UI_object(self.parent)) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 188 | |
| 189 | def cb_method(self, *arg): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 190 | name = self.method_entry.get() |
| 191 | if not name: |
| 192 | return |
| 193 | self.method_entry.delete('0', 'end') |
| 194 | self.method_list.insert('end', name) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 195 | |
| 196 | def synchronize(self): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 197 | n = self.name_entry.get() |
| 198 | if not n: |
| 199 | message('Module name not set') |
| 200 | raise oops |
| 201 | if not checkid(n): |
| 202 | message('Module name not an identifier:\n'+n) |
| 203 | raise oops |
| 204 | if not self.abbrev_entry.get(): |
| 205 | self.abbrev_entry.insert('end', n) |
| 206 | m = getlistlist(self.method_list) |
| 207 | for n in m: |
| 208 | if not checkid(n): |
| 209 | message('Method name not an identifier:\n'+n) |
| 210 | raise oops |
| 211 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 212 | def gencode(self, name, objects): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 213 | rv = '' |
| 214 | self.synchronize() |
| 215 | for o in objects: |
| 216 | o.synchronize() |
| 217 | onames = [] |
| 218 | for i in range(len(objects)): |
| 219 | oname = 'o'+`i+1` |
| 220 | rv = rv + objects[i].gencode(oname) |
| 221 | onames.append(oname) |
| 222 | rv = rv + (name+' = genmodule.module()\n') |
| 223 | rv = rv + (name+'.name = '+`self.name_entry.get()`+'\n') |
| 224 | rv = rv + (name+'.abbrev = '+`self.abbrev_entry.get()`+'\n') |
| 225 | rv = rv + (name+'.methodlist = '+`getlistlist(self.method_list)`+'\n') |
Walter Dörwald | aaab30e | 2002-09-11 20:36:02 +0000 | [diff] [blame] | 226 | rv = rv + (name+'.objects = ['+','.join(onames)+']\n') |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 227 | rv = rv + ('\n') |
| 228 | return rv |
| 229 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 230 | object_number = 0 |
| 231 | |
| 232 | class UI_object: |
| 233 | def __init__(self, parent): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 234 | global object_number |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 235 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 236 | object_number = object_number + 1 |
| 237 | self.num = object_number |
| 238 | self.vpref = 'o'+`self.num`+'_' |
| 239 | self.frame = Toplevel(parent.objframe) |
| 240 | # self.frame.pack() |
| 241 | self.frame.title('Modulator: object view') |
| 242 | # self.frame = Frame(parent.objframe, {'relief':'raised', 'bd':'0.2m', |
| 243 | # Pack:{'side':'top', |
| 244 | # 'fill':'x'}}) |
| 245 | self.f1 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 246 | 'fill':'x'}}) |
| 247 | self.f2 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 248 | 'fill':'x'}}) |
| 249 | self.f3 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 250 | 'fill':'x'}}) |
| 251 | self.f4 = Frame(self.frame, {Pack:{'side':'top', 'pady':'0.5m', |
| 252 | 'fill':'x'}}) |
| 253 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 254 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 255 | self.l1 = Label(self.f1, {'text':'Object:', Pack:{'side':'left', |
| 256 | 'padx':'0.5m'}}) |
| 257 | self.name_entry = Entry(self.f1, {'relief':'sunken', |
| 258 | Pack:{'side':'left', 'padx':'0.5m', 'expand':1}}) |
| 259 | self.l2 = Label(self.f1, {'text':'Abbrev:', Pack:{'side':'left', |
| 260 | 'padx':'0.5m'}}) |
| 261 | self.abbrev_entry = Entry(self.f1, {'relief':'sunken', 'width':5, |
| 262 | Pack:{'side':'left', 'padx':'0.5m'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 263 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 264 | self.l3 = Label(self.f2, {'text':'Methods:', Pack:{'side':'left', |
| 265 | 'padx':'0.5m'}}) |
| 266 | self.method_list = ScrolledListbox(self.f2, {'relief':'sunken','bd':2, |
| 267 | Pack:{'side':'left', 'expand':1, |
| 268 | 'padx':'0.5m', 'fill':'both'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 269 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 270 | self.l4 = Label(self.f3, {'text':'Add method:', Pack:{'side':'left', |
| 271 | 'padx':'0.5m'}}) |
| 272 | self.method_entry = Entry(self.f3, {'relief':'sunken', |
| 273 | Pack:{'side':'left', 'padx':'0.5m', 'expand':1}}) |
| 274 | self.method_entry.bind('<Return>', self.cb_method) |
| 275 | self.delete_button = Button(self.f3, {'text':'Delete method', |
| 276 | 'command':self.cb_delmethod, |
| 277 | Pack:{'side':'left', |
| 278 | 'padx':'0.5m'}}) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 279 | |
| 280 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 281 | self.l5 = Label(self.f4, {'text':'functions:', |
| 282 | Pack:{'side':'left', |
| 283 | 'padx':'0.5m'}}) |
| 284 | self.f5 = Frame(self.f4, {Pack:{'side':'left', 'pady':'0.5m', |
| 285 | 'fill':'both'}}) |
| 286 | self.l6 = Label(self.f4, {'text':'Types:', |
| 287 | Pack:{'side':'left', 'padx':'0.5m'}}) |
| 288 | self.f6 = Frame(self.f4, {Pack:{'side':'left', 'pady':'0.5m', |
| 289 | 'fill':'x'}}) |
| 290 | self.funcs = {} |
| 291 | for i in genmodule.FUNCLIST: |
| 292 | vname = self.vpref+i |
| 293 | self.f5.setvar(vname, 0) |
| 294 | b = Checkbutton(self.f5, {'variable':vname, 'text':i, |
| 295 | Pack:{'side':'top', 'pady':'0.5m', |
| 296 | 'anchor':'w','expand':1}}) |
| 297 | self.funcs[i] = b |
| 298 | self.f5.setvar(self.vpref+'new', 1) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 299 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 300 | self.types = {} |
| 301 | for i in genmodule.TYPELIST: |
| 302 | vname = self.vpref + i |
| 303 | self.f6.setvar(vname, 0) |
| 304 | b = Checkbutton(self.f6, {'variable':vname, 'text':i, |
| 305 | Pack:{'side':'top', 'pady':'0.5m', |
| 306 | 'anchor':'w'}}) |
| 307 | self.types[i] = b |
| 308 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 309 | def cb_method(self, *arg): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 310 | name = self.method_entry.get() |
| 311 | if not name: |
| 312 | return |
| 313 | self.method_entry.delete('0', 'end') |
| 314 | self.method_list.insert('end', name) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 315 | |
| 316 | def cb_delmethod(self, *args): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 317 | list = self.method_list.curselection() |
| 318 | for i in list: |
| 319 | self.method_list.delete(i) |
| 320 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 321 | def synchronize(self): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 322 | n = self.name_entry.get() |
| 323 | if not n: |
| 324 | message('Object name not set') |
| 325 | raise oops |
| 326 | if not self.abbrev_entry.get(): |
| 327 | self.abbrev_entry.insert('end', n) |
| 328 | n = self.abbrev_entry.get() |
| 329 | if not checkid(n): |
| 330 | message('Abbreviation not an identifier:\n'+n) |
| 331 | raise oops |
| 332 | m = getlistlist(self.method_list) |
| 333 | for n in m: |
| 334 | if not checkid(n): |
| 335 | message('Method name not an identifier:\n'+n) |
| 336 | raise oops |
| 337 | if m: |
| 338 | self.f5.setvar(self.vpref+'tp_getattr', 1) |
| 339 | pass |
| 340 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 341 | def gencode(self, name): |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 342 | rv = '' |
| 343 | rv = rv + (name+' = genmodule.object()\n') |
| 344 | rv = rv + (name+'.name = '+`self.name_entry.get()`+'\n') |
| 345 | rv = rv + (name+'.abbrev = '+`self.abbrev_entry.get()`+'\n') |
| 346 | rv = rv + (name+'.methodlist = '+`getlistlist(self.method_list)`+'\n') |
| 347 | fl = [] |
| 348 | for fn in genmodule.FUNCLIST: |
| 349 | vname = self.vpref + fn |
| 350 | if self.f5.getvar(vname) == '1': |
| 351 | fl.append(fn) |
| 352 | rv = rv + (name+'.funclist = '+`fl`+'\n') |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 353 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 354 | fl = [] |
| 355 | for fn in genmodule.TYPELIST: |
| 356 | vname = self.vpref + fn |
| 357 | if self.f5.getvar(vname) == '1': |
| 358 | fl.append(fn) |
| 359 | |
| 360 | rv = rv + (name+'.typelist = '+`fl`+'\n') |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 361 | |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 362 | rv = rv + ('\n') |
| 363 | return rv |
| 364 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 365 | |
| 366 | def main(): |
| 367 | if len(sys.argv) < 2: |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 368 | ui = UI() |
| 369 | ui.run() |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 370 | elif len(sys.argv) == 2: |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 371 | fp = open(sys.argv[1]) |
| 372 | pycode = fp.read() |
| 373 | try: |
| 374 | exec pycode |
| 375 | except: |
| 376 | sys.stderr.write('An error occurred:-)\n') |
| 377 | sys.exit(1) |
Guido van Rossum | b0f99a6 | 1999-02-18 14:22:05 +0000 | [diff] [blame] | 378 | ##genmodule.write(sys.stdout, m) |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 379 | else: |
Guido van Rossum | a16a509 | 1998-04-10 19:15:27 +0000 | [diff] [blame] | 380 | sys.stderr.write('Usage: modulator [file]\n') |
| 381 | sys.exit(1) |
| 382 | |
Guido van Rossum | d211220 | 1995-03-02 14:05:29 +0000 | [diff] [blame] | 383 | main() |