77,6 → 77,9 |
sys.stdout.write('Enter choice number[%d]: ' % defopt) |
else: |
sys.stdout.write('Enter choice number: ') |
|
def menu(self, text, choices, button, defopt=None): |
return self.choice(text, [button] + choices) |
|
def choice(self, text, choices, defopt=None): |
self.print_title() |
102,7 → 105,8 |
def __init__(self): |
NoDialog.__init__(self) |
self.dlgcmd = os.environ.get('DIALOG','dialog') |
self.title = 'HelenOS Configuration' |
self.title = '' |
self.backtitle = 'HelenOS Kernel Configuration' |
|
if os.system('%s --print-maxsize >/dev/null 2>&1' % self.dlgcmd) != 0: |
raise NotImplementedError |
119,7 → 123,8 |
os.dup(outdesc) |
os.close(indesc) |
|
dlgargs = [self.dlgcmd,'--title',self.title] |
dlgargs = [self.dlgcmd,'--title',self.title, |
'--backtitle', self.backtitle] |
for key,val in kw.items(): |
dlgargs.append('--'+key) |
dlgargs.append(val) |
156,6 → 161,28 |
if res == 0: |
return 'y' |
return 'n' |
|
def menu(self, text, choices, button, defopt=None): |
text = text + ':' |
width = '70' |
height = str(8 + len(choices)) |
args = [] |
for key,val in choices: |
args.append(key) |
args.append(val) |
|
kw = {} |
if defopt: |
kw['default-item'] = choices[defopt][0] |
res,data = self.calldlg('--cancel-label',button[1], |
'--menu',text,height,width, |
str(len(choices)),*args,**kw) |
if res == 1: |
return button[0] |
elif res: |
print data |
raise EOFError |
return data |
|
def choice(self, text, choices, defopt=None): |
text = text + ':' |
219,7 → 246,7 |
return True |
return False |
|
def parse_config(input, output, dlg, defaults={}): |
def parse_config(input, output, dlg, defaults={}, askonly=None): |
"Parse configuration file and create Makefile.config on the fly" |
f = file(input, 'r') |
outf = file(output, 'w') |
228,6 → 255,8 |
outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
outf.write('#########################################\n\n') |
|
asked_names = [] |
|
comment = '' |
default = None |
choices = [] |
242,13 → 271,7 |
args = res.group(2).strip().split(' ') |
cmd = args[0].lower() |
args = args[1:] |
if cmd == 'askdefault': |
if isinstance(dlg, DefaultDialog): |
continue |
res = dlg.noyes('Change kernel configuration') |
if res == 'n': |
dlg = DefaultDialog(dlg) |
elif cmd == 'saveas': |
if cmd == 'saveas': |
outf.write('%s = %s\n' % (args[1],defaults[args[0]])) |
|
continue |
262,7 → 285,7 |
vartype = res.group(3) |
|
default = defaults.get(varname,None) |
|
|
if res.group(1): |
if not check_condition(res.group(1), defaults): |
if default is not None: |
272,7 → 295,13 |
default = None |
choices = [] |
continue |
|
asked_names.append((varname,comment)) |
|
if default is not None and askonly and askonly != varname: |
outf.write('%s = %s\n' % (varname, default)) |
continue |
|
if vartype == 'y/n': |
result = dlg.yesno(comment, default) |
elif vartype == 'n/y': |
318,6 → 347,7 |
|
outf.close() |
f.close() |
return asked_names |
|
def main(): |
defaults = {} |
326,15 → 356,35 |
except NotImplementedError: |
dlg = NoDialog() |
|
if len(sys.argv) == 2 and sys.argv[1]=='default': |
defmode = True |
else: |
defmode = False |
|
# Default run will update the configuration file |
# with newest options |
if len(sys.argv) == 2 and sys.argv[1]=='default': |
dlg = DefaultDialog(dlg) |
|
if os.path.exists(OUTPUT): |
read_defaults(OUTPUT, defaults) |
|
parse_config(INPUT, TMPOUTPUT, dlg, defaults) |
varnames = parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults) |
# If not in default mode, present selection of all possibilities |
if not defmode: |
defopt = 0 |
while 1: |
choices = [ (x[1],defaults[x[0]]) for x in varnames ] |
res = dlg.menu('Configuration',choices,('save','Save'),defopt) |
if res == 'save': |
parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults) |
break |
# transfer description back to varname |
for i,(vname,descr) in enumerate(varnames): |
if res == descr: |
defopt = i |
break |
varnames = parse_config(INPUT, TMPOUTPUT, dlg, defaults, |
askonly=varnames[i][0]) |
|
|
if os.path.exists(OUTPUT): |
os.unlink(OUTPUT) |
os.rename(TMPOUTPUT, OUTPUT) |