Index: src/common.c =================================================================== RCS file: /home/aumix/cvs/aumix/src/common.c,v retrieving revision 1.4 diff -u -r1.4 common.c --- src/common.c 28 Mar 2002 09:37:24 -0000 1.4 +++ src/common.c 29 Apr 2002 20:38:27 -0000 @@ -149,7 +149,7 @@ if (mixer_fd == -1) ErrorExitWarn(InitializeMixer(device_filename), 'e'); for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { - if ((1 << ii) & devmask) + if ((1 << ii) & (devmask | recmask)) ErrorExitWarn(SetShowNoninter(ii), 'e'); } break; @@ -342,7 +342,7 @@ return EFILE; ErrorExitWarn(ReadRecSrc(), 'e'); for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { - if ((1 << ii) & devmask) { + if ((1 << ii) & (devmask | recmask)) { ErrorExitWarn(ReadLevel(ii, &tmp), 'e'); fprintf(setfile, "%s:%i:%i:%c\n", dev_name[ii], (tmp & 0xFF), ((tmp >> 8) & 0xFF), ((1 << ii) & recsrc ? 'R' : 'P')); } @@ -394,7 +394,7 @@ Bit masks indicating: - devmask = valid devices + devmask = devices with adjustable levels recmask = valid input devices recsrc = devices currently selected for input stereodevs = stereo devices @@ -459,7 +459,7 @@ * * Bit masks indicating: * - * devmask = valid devices + * devmask = devices with adjustable levels * recmask = valid input devices * recsrc = devices currently selected for input * stereodevs = stereo devices @@ -494,9 +494,10 @@ if (result) return result; /* Is the given device index valid? */ - if (!((1 << device) & devmask)) + if (!((1 << device) & (devmask | recmask))) return 0; - if (*rw == 'r') { /* Read settings. */ +/* Read settings. */ + if (((1 << device) & devmask) & (*rw == 'r') { ErrorExitWarn(ReadLevel(device, &rightleft), 'e'); /* Unpack left and right settings. */ if ((1 << device) & stereodevs) { @@ -522,20 +523,20 @@ rightleft = *left + (*right << 8); /* Write settings. */ ErrorExitWarn(WriteLevel(device, rightleft), 'e'); + } /* Is the current device capable of being a recording source? */ - if ((1 << device) & recmask) { - *rp = *rp & 0xDF; - if (*rp == 'R') { - recsrc = recsrc | (1 << device); - } else { - recsrc = recsrc & ~(1 << device); - *rp = 'P'; - } -/* Set recording or playing mode. */ - ErrorExitWarn(WriteRecSrc(), 'e'); + if ((1 << device) & recmask) { + *rp = *rp & 0xDF; + if (*rp == 'R') { + recsrc = recsrc | (1 << device); } else { - *rp = '\0'; + recsrc = recsrc & ~(1 << device); + *rp = 'P'; } +/* Set recording or playing mode. */ + ErrorExitWarn(WriteRecSrc(), 'e'); + } else { + *rp = '\0'; } return 0; } @@ -546,7 +547,7 @@ /* How many mixing channels are less than limit? */ int ii, y = 0; for (ii = 0; ii < limit; ii++) - if (devmask & (1 << ii)) + if ((devmask | recmask) & (1 << ii)) y++; return y; } Index: src/curses.c =================================================================== RCS file: /home/aumix/cvs/aumix/src/curses.c,v retrieving revision 1.3 diff -u -r1.3 curses.c --- src/curses.c 28 Mar 2002 09:37:25 -0000 1.3 +++ src/curses.c 29 Apr 2002 19:30:32 -0000 @@ -119,7 +119,7 @@ } y = 0; /* Now recycle it for a different use. */ for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { - if ((1 << ii) & devmask) { + if ((1 << ii) & (devmask | recmask)) { attrset(COLOR_PAIR(AXIS_COLOR)); /* draw control labels */ mvaddstr(YOFFSET + y++, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH, LOCAL_TEXT(dev_label[ii])); @@ -329,14 +329,16 @@ #endif /* HAVE_GETMOUSE */ levelbalmode = 0; /* Find first existing channel. */ - for (dev = 0; !(devmask & (1 << dev)); dev++); + for (dev = 0; !((devmask | recmask) & (1 << dev)); dev++); y = CountChannels(dev); current_dev = dev; /* Highlight the label. */ HighlightLabelCurses(); - EraseLevel(current_dev); - DrawLevel(current_dev); - DrawLevelBalMode(current_dev, 0); + if (devmask & (1 << dev)) { + EraseLevel(current_dev); + DrawLevel(current_dev); + DrawLevelBalMode(current_dev, 0); + } PlaceCursor(); signal(SIGALRM, AumixSignalHandler); alarm(REFRESH_PERIOD); @@ -400,7 +402,7 @@ current_dev = SOUND_MIXER_NRDEVICES - 1; } } - while (!((1 << current_dev) & devmask)); + while (!((1 << current_dev) & (devmask | recmask))); HighlightLabelCurses(); EraseLevel(current_dev); DrawLevel(current_dev); @@ -482,10 +484,12 @@ int y; y = CountChannels(dev); attrset(COLOR_PAIR(ACTIVE_COLOR) | ((has_colors()) ? A_BOLD : A_REVERSE)); - if ((mode) && ((1 << dev) & stereodevs)) { - mvaddch(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH + label_width, '>'); - } else { - mvaddch(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width, '<'); + if ((1 << dev) & devmask) { + if ((mode) && ((1 << dev) & stereodevs)) { + mvaddch(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width + ARROW_WIDTH + label_width, '>'); + } else { + mvaddch(YOFFSET + y, XOFFSET + menu_width + R_P_WIDTH + level_width, '<'); + } } PlaceCursor(); } Index: src/gtk.c =================================================================== RCS file: /home/aumix/cvs/aumix/src/gtk.c,v retrieving revision 1.5 diff -u -r1.5 gtk.c --- src/gtk.c 28 Mar 2002 09:37:26 -0000 1.5 +++ src/gtk.c 29 Apr 2002 19:30:48 -0000 @@ -216,7 +216,7 @@ } for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { visible[ii] = TRUE; - if ((1 << ii) & devmask) { + if ((1 << ii) & (devmask | recmask)) { viewmenuitems[ii] = gtk_check_menu_item_new_with_label(LOCAL_TEXT(dev_label[ii])); gtk_menu_append(GTK_MENU(viewmenu), viewmenuitems[ii]); gtk_widget_show(viewmenuitems[ii]); @@ -279,20 +279,6 @@ max = (left > right) ? left : right; /* See rangewidgets example. */ adjustment[ii] = GTK_ADJUSTMENT(gtk_adjustment_new(((right + left) / 2), 0, MAXLEVEL, 1, 1, 0)); - colormap = gtk_widget_get_colormap(window); - record_pixmap = gdk_pixmap_colormap_create_from_xpm_d(window->window, colormap, &rmask, &style->bg[GTK_STATE_NORMAL], (gchar **) record_xpm); - play_pixmap = gdk_pixmap_colormap_create_from_xpm_d(window->window, colormap, &pmask, &style->bg[GTK_STATE_NORMAL], (gchar **) play_xpm); - if ((1 << ii) & recmask) { - ErrorExitWarn(ReadRecSrc(), 'e'); - /* a pixmap widget to contain the pixmap */ - pixmapwid[ii] = gtk_pixmap_new((1 << ii) & recsrc ? record_pixmap : play_pixmap, (1 << ii) & recsrc ? rmask : pmask); - gtk_widget_show(pixmapwid[ii]); - rpbuttons[ii] = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); - gtk_container_add(GTK_CONTAINER(rpbuttons[ii]), pixmapwid[ii]); - gtk_widget_show(GTK_WIDGET(rpbuttons[ii])); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE); - rpcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(rpbuttons[ii]), "clicked", GTK_SIGNAL_FUNC(SwitchRecordPlay), (gpointer) ii); - } if ((1 << ii) & stereodevs) { if (tmp) { balset = (left > right) ? (MAXLEVEL / 2) * right / max : MAXLEVEL - ((MAXLEVEL / 2) * left / max); @@ -315,6 +301,20 @@ gtk_widget_show(GTK_WIDGET(levels[ii])); gtk_range_set_update_policy(GTK_RANGE(levels[ii]), GTK_UPDATE_CONTINUOUS); } + if ((1 << ii) & recmask) { + colormap = gtk_widget_get_colormap(window); + record_pixmap = gdk_pixmap_colormap_create_from_xpm_d(window->window, colormap, &rmask, &style->bg[GTK_STATE_NORMAL], (gchar **) record_xpm); + play_pixmap = gdk_pixmap_colormap_create_from_xpm_d(window->window, colormap, &pmask, &style->bg[GTK_STATE_NORMAL], (gchar **) play_xpm); + ErrorExitWarn(ReadRecSrc(), 'e'); + /* a pixmap widget to contain the pixmap */ + pixmapwid[ii] = gtk_pixmap_new((1 << ii) & recsrc ? record_pixmap : play_pixmap, (1 << ii) & recsrc ? rmask : pmask); + gtk_widget_show(pixmapwid[ii]); + rpbuttons[ii] = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); + gtk_container_add(GTK_CONTAINER(rpbuttons[ii]), pixmapwid[ii]); + gtk_widget_show(GTK_WIDGET(rpbuttons[ii])); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE); + rpcallback[ii] = gtk_signal_connect_object(GTK_OBJECT(rpbuttons[ii]), "clicked", GTK_SIGNAL_FUNC(SwitchRecordPlay), (gpointer) ii); + } } gtk_signal_connect_object(GTK_OBJECT(viewmenuitems[SOUND_MIXER_NRDEVICES]), "activate", GTK_SIGNAL_FUNC(HideShowMenuGTK), GTK_OBJECT(menubar)); gtk_signal_connect_object(GTK_OBJECT(viewmenuitems[SOUND_MIXER_NRDEVICES + 1]), "activate", GTK_SIGNAL_FUNC(HideShowBalancesGTK), 0); @@ -332,15 +332,17 @@ gtk_table_attach_defaults(GTK_TABLE(maintable), labelbalance, 6, 7, 0, 1); y = 0; for (ii = 0; ii < SOUND_MIXER_NRDEVICES; ii++) { - if ((1 << ii) & devmask) { + if ((1 << ii) & (devmask | recmask)) { if ((1 << ii) & recmask) gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(rpbuttons[ii]), 0, 1, y + 1, y + 2); channellabel[ii] = gtk_label_new(LOCAL_TEXT(dev_label[ii])); gtk_widget_show(channellabel[ii]); gtk_table_attach_defaults(GTK_TABLE(maintable), channellabel[ii], 4, 5, y + 1, y + 2); - gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(levels[ii]), 1, 4, y + 1, y + 2); - if ((1 << ii) & stereodevs) - gtk_table_attach_defaults(GTK_TABLE(maintable), baltracks[ii], 5, 8, y + 1, y + 2); + if ((1 << ii) & devmask) { + gtk_table_attach_defaults(GTK_TABLE(maintable), GTK_WIDGET(levels[ii]), 1, 4, y + 1, y + 2); + if ((1 << ii) & stereodevs) + gtk_table_attach_defaults(GTK_TABLE(maintable), baltracks[ii], 5, 8, y + 1, y + 2); + } y++; } } @@ -386,15 +388,6 @@ gtk_adjustment_set_value(adjustment[ii], (right + left) / 2); gtk_signal_handler_unblock(GTK_OBJECT(adjustment[ii]), lvlcallback[ii]); max = (left > right) ? left : right; - if ((1 << ii) & recmask) { - gtk_signal_handler_block(GTK_OBJECT(rpbuttons[ii]), rpcallback[ii]); - ErrorExitWarn(ReadRecSrc(), 'e'); - gtk_widget_show(pixmapwid[ii]); - gtk_pixmap_set(GTK_PIXMAP(pixmapwid[ii]), (1 << ii) & recsrc ? record_pixmap : play_pixmap, NULL); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE); - gtk_widget_show(pixmapwid[ii]); - gtk_signal_handler_unblock(GTK_OBJECT(rpbuttons[ii]), rpcallback[ii]); - } if ((1 << ii) & stereodevs) { if (tmp) { balset = (left > right) ? (MAXLEVEL / 2) * right / max : MAXLEVEL - ((MAXLEVEL / 2) * left / max); @@ -405,6 +398,15 @@ gtk_adjustment_set_value(balance[ii], balset); gtk_signal_handler_unblock(GTK_OBJECT(balance[ii]), balcallback[ii]); } + } + if ((1 << ii) & recmask) { + gtk_signal_handler_block(GTK_OBJECT(rpbuttons[ii]), rpcallback[ii]); + ErrorExitWarn(ReadRecSrc(), 'e'); + gtk_widget_show(pixmapwid[ii]); + gtk_pixmap_set(GTK_PIXMAP(pixmapwid[ii]), (1 << ii) & recsrc ? record_pixmap : play_pixmap, NULL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[ii]), (1 << ii) & recsrc ? TRUE : FALSE); + gtk_widget_show(pixmapwid[ii]); + gtk_signal_handler_unblock(GTK_OBJECT(rpbuttons[ii]), rpcallback[ii]); } } } Index: src/interactive.c =================================================================== RCS file: /home/aumix/cvs/aumix/src/interactive.c,v retrieving revision 1.4 diff -u -r1.4 interactive.c --- src/interactive.c 28 Mar 2002 09:37:26 -0000 1.4 +++ src/interactive.c 29 Apr 2002 19:24:39 -0000 @@ -74,10 +74,10 @@ EraseLevel(dev); RedrawBalance(dev); DrawLevel(dev); - /* print record/play indicators */ - if ((1 << dev) & recmask) - DrawRecordPlay(dev); } + /* print record/play indicators */ + if ((1 << dev) & recmask) + DrawRecordPlay(dev); } } @@ -87,25 +87,25 @@ { int dev, ii = 0; for (dev = 0; dev < SOUND_MIXER_NRDEVICES; dev++) { + /* record/play indicators */ + if ((1 << dev) & recmask) { + ErrorExitWarn(ReadRecSrc(), 'e'); + /* Redraw if the setting changed. */ + if (our_recplay[dev] - recsrc) + DrawRecordPlay(dev); + our_recplay[dev] = recsrc; + } if ((1 << dev) & devmask) { -/* record/play indicators */ - if ((1 << dev) & recmask) { - ErrorExitWarn(ReadRecSrc(), 'e'); -/* Redraw if the setting changed. */ - if (our_recplay[dev] - recsrc) - DrawRecordPlay(dev); - our_recplay[dev] = recsrc; - } ErrorExitWarn(ReadLevel(dev, &ii), 'e'); if (ii - ourlevel[dev]) { /* Has the setting changed? */ EraseLevel(dev); RedrawBalance(dev); DrawLevel(dev); - if ((1 << dev) & recmask) - DrawRecordPlay(dev); - ourlevel[dev] = ii; } } + if ((1 << dev) & recmask) + DrawRecordPlay(dev); + ourlevel[dev] = ii; } }