@@ -61,14 +61,14 @@ class MainWindow:
6161 #
6262 # where does input come from?
6363 frame = Frame (root , bd = 1 , relief = RAISED )
64- frame .grid (row = 0 , column = 0 )
64+ frame .grid (row = 0 , column = 0 , sticky = 'NSEW' )
6565 label = Label (frame , text = 'Input From:' )
6666 label .grid (row = 0 , column = 0 , sticky = E )
67- self .__micvar = IntVar ()
68- btn = Checkbutton (frame ,
67+ self .__inputvar = IntVar ()
68+ btn = Radiobutton (frame ,
6969 text = 'Microphone' ,
70- variable = self .__micvar ,
71- onvalue = MICROPHONE ,
70+ variable = self .__inputvar ,
71+ value = MICROPHONE ,
7272 command = self .__pushtodev ,
7373 underline = 0 )
7474 btn .grid (row = 0 , column = 1 , sticky = W )
@@ -78,11 +78,10 @@ class MainWindow:
7878 btn .configure (state = DISABLED )
7979 buttons .append (btn )
8080 ##
81- self .__lineinvar = IntVar ()
82- btn = Checkbutton (frame ,
81+ btn = Radiobutton (frame ,
8382 text = 'Line In' ,
84- variable = self .__lineinvar ,
85- onvalue = LINE_IN ,
83+ variable = self .__inputvar ,
84+ value = LINE_IN ,
8685 command = self .__pushtodev ,
8786 underline = 5 )
8887 btn .grid (row = 1 , column = 1 , sticky = W )
@@ -92,11 +91,10 @@ class MainWindow:
9291 btn .configure (state = DISABLED )
9392 buttons .append (btn )
9493 ##
95- self .__cdvar = IntVar ()
96- btn = Checkbutton (frame ,
94+ btn = Radiobutton (frame ,
9795 text = 'CD' ,
98- variable = self .__cdvar ,
99- onvalue = CD ,
96+ variable = self .__inputvar ,
97+ value = CD ,
10098 command = self .__pushtodev ,
10199 underline = 0 )
102100 btn .grid (row = 2 , column = 1 , sticky = W )
@@ -108,7 +106,7 @@ class MainWindow:
108106 #
109107 # where does output go to?
110108 frame = Frame (root , bd = 1 , relief = RAISED )
111- frame .grid (row = 1 , column = 0 )
109+ frame .grid (row = 1 , column = 0 , sticky = 'NSEW' )
112110 label = Label (frame , text = 'Output To:' )
113111 label .grid (row = 0 , column = 0 , sticky = E )
114112 self .__spkvar = IntVar ()
@@ -181,10 +179,8 @@ class MainWindow:
181179 except AttributeError :
182180 pass
183181 else :
184- import struct
185182 import fcntl
186183 import signal
187- import FCNTL
188184 import STROPTS
189185 # set up the signal handler
190186 signal .signal (signal .SIGPOLL , self .__update )
@@ -207,21 +203,19 @@ class MainWindow:
207203 # underlying module does not support the SIGPOLL notification
208204 # interface.
209205 info = self .__devctl .getinfo ()
206+ # input
207+ self .__inputvar .set (info .i_port )
208+ # output
210209 self .__spkvar .set (info .o_port & SPEAKER )
211210 self .__headvar .set (info .o_port & HEADPHONE )
212211 self .__linevar .set (info .o_port & LINE_OUT )
213- self .__micvar .set (info .i_port & MICROPHONE )
214- self .__lineinvar .set (info .i_port & LINE_IN )
215- self .__cdvar .set (info .i_port & CD )
216212
217213 def __pushtodev (self , event = None ):
218214 info = self .__devctl .getinfo ()
219215 info .o_port = self .__spkvar .get () + \
220216 self .__headvar .get () + \
221217 self .__linevar .get ()
222- info .i_port = self .__micvar .get () + \
223- self .__lineinvar .get () + \
224- self .__cdvar .get ()
218+ info .i_port = self .__inputvar .get ()
225219 self .__devctl .setinfo (info )
226220
227221 def __getset (self , var , onvalue ):
@@ -232,15 +226,13 @@ class MainWindow:
232226 self .__pushtodev ()
233227
234228 def __mic (self , event = None ):
235- self .__getset (self .__micvar , MICROPHONE )
229+ self .__getset (self .__inputvar , MICROPHONE )
236230
237231 def __linein (self , event = None ):
238- self .__getset (self .__lineinvar , LINE_IN )
232+ self .__getset (self .__inputvar , LINE_IN )
239233
240234 def __cd (self , event = None ):
241- print 'pre:' , self .__cdvar .get ()
242- self .__getset (self .__cdvar , CD )
243- print 'post:' , self .__cdvar .get ()
235+ self .__getset (self .__inputvar , CD )
244236
245237 def __speaker (self , event = None ):
246238 self .__getset (self .__spkvar , SPEAKER )
@@ -286,113 +278,47 @@ def main():
286278 ('--speaker' , '-s' , 1 , SPEAKER ),
287279 ('--lineout' , '-o' , 1 , LINE_OUT ),
288280 )
289- values = []
290281 info = device .getinfo ()
291282 # first get the existing values
292- for long , short , io , mask in options :
293- if io == 0 :
294- flags = info .i_port
295- else :
296- flags = info .o_port
297- values .append (flags & mask )
298-
299- sval = None
300- hval = None
301- lval = None
302283 for arg in sys .argv [1 :]:
303284 if arg in ('-h' , '--help' ):
304285 usage (code = 0 )
305- # SPEAKER
306- elif arg in ('-s' , '--speaker' ):
307- sval = - 1
308- elif arg [:3 ] == '-s=' :
309- try :
310- sval = int (arg [3 :])
311- except ValueError :
312- pass
313- if sval <> 0 and sval <> 1 :
314- usage ('Invalid option: ' + arg )
315- elif arg [:10 ] == '--speaker=' :
316- try :
317- sval = int (arg [10 :])
318- except ValueError :
319- pass
320- if sval <> 0 and sval <> 1 :
321- usage ('Invalid option: ' + arg )
322- # HEADPHONES
323- elif arg in ('-p' , '--headphones' ):
324- hval = - 1
325- elif arg [:3 ] == '-p=' :
326- try :
327- hval = int (arg [3 :])
328- except ValueError :
329- pass
330- if hval <> 0 and hval <> 1 :
331- usage ('Invalid option: ' + arg )
332- elif arg [:13 ] == '--headphones=' :
333- try :
334- hval = int (arg [130 :])
335- except ValueError :
336- pass
337- if hval <> 0 and hval <> 1 :
338- usage ('Invalid option: ' + arg )
339- # LINEOUT
340- elif arg in ('-l' , '--lineout' ):
341- lval = - 1
342- elif arg [:3 ] == '-l=' :
343- try :
344- lval = int (arg [3 :])
345- except ValueError :
346- pass
347- if lval <> 0 and lval <> 1 :
348- usage ('Invalid option: ' + arg )
349- elif arg [:10 ] == '--lineout=' :
286+ # does not return
287+ for long , short , io , mask in options :
288+ if arg in (long , short ):
289+ # toggle the option
290+ if io == 0 :
291+ info .i_port = info .i_port ^ mask
292+ else :
293+ info .o_port = info .o_port ^ mask
294+ break
295+ val = None
350296 try :
351- lval = int (arg [10 :])
297+ if arg [:len (long )+ 1 ] == long + '=' :
298+ val = int (arg [len (long )+ 1 :])
299+ elif arg [:len (short )+ 1 ] == short + '=' :
300+ val = int (arg [len (short )+ 1 :])
352301 except ValueError :
353- pass
354- if lval <> 0 and lval <> 1 :
355- usage ('Invalid option: ' + arg )
356- else :
357- usage ('Invalid option: ' + arg )
358- # now set the values
359- try :
360- devctl = sunaudiodev .open ('control' )
361- info = devctl .getinfo ()
362- if sval is not None :
363- if sval == - 1 :
364- if info .o_port & SPEAKER :
365- sval = 0
302+ usage (msg = 'Invalid option: ' + arg )
303+ # does not return
304+ if val == 0 :
305+ if io == 0 :
306+ info .i_port = info .i_port & ~ mask
366307 else :
367- sval = SPEAKER
368- else :
369- sval = sval * SPEAKER
370- else :
371- sval = info .o_port & SPEAKER
372- if hval is not None :
373- if hval == - 1 :
374- if info .o_port & HEADPHONE :
375- hval = 0
308+ info .o_port = info .o_port & ~ mask
309+ break
310+ elif val == 1 :
311+ if io == 0 :
312+ info .i_port = info .i_port | mask
376313 else :
377- hval = HEADPHONE
378- else :
379- hval = hval * HEADPHONE
314+ info . o_port = info . o_port | mask
315+ break
316+ # else keep trying next option
380317 else :
381- hval = info .o_port & HEADPHONE
382- if lval is not None :
383- if lval == - 1 :
384- if info .o_port & LINE_OUT :
385- lval = 0
386- else :
387- lval = LINE_OUT
388- else :
389- lval = lval * LINE_OUT
390- else :
391- lval = info .o_port & LINE_OUT
392- info .o_port = sval + hval + lval
393- devctl .setinfo (info )
394- finally :
395- devctl .close ()
318+ usage (msg = 'Invalid option: ' + arg )
319+ # now set the values
320+ device .setinfo (info )
321+ device .close ()
396322
397323
398324
0 commit comments