Blame envy24control/envy24control.c

Packit 427e91
/*****************************************************************************
Packit 427e91
   envy24control.c - Env24 chipset (ICE1712) control utility
Packit 427e91
   Copyright (C) 2000 by Jaroslav Kysela <perex@perex.cz>
Packit 427e91
Packit 427e91
   (2003/03/22) Changed to hbox/vbox layout.
Packit 427e91
   Copyright (C) 2003 by Søren Wedel Nielsen
Packit 427e91
   
Packit 427e91
   (16.12.2005)  Re-worked user interface -digital mixer display permanently
Packit 427e91
   visible; pcms split to another page; controls re-arranged and all pages
Packit 427e91
   scrollable for min window size and greater flexibility; pop-up menu enabled.
Packit 427e91
   Changes to levelmeters.c to prevent invalid redraws.
Packit 427e91
   New options added: 'w' to set initial window pixel width and 't' for tall equal mixer height style.
Packit 427e91
   Copyright (C) 2005 by Alan Horstmann
Packit 427e91
Packit 427e91
   This program is free software; you can redistribute it and/or
Packit 427e91
   modify it under the terms of the GNU General Public License
Packit 427e91
   as published by the Free Software Foundation; either version 2
Packit 427e91
   of the License, or (at your option) any later version.
Packit 427e91
   
Packit 427e91
   This program is distributed in the hope that it will be useful,
Packit 427e91
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 427e91
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 427e91
   GNU General Public License for more details.
Packit 427e91
   
Packit 427e91
   You should have received a copy of the GNU General Public License
Packit 427e91
   along with this program; if not, write to the Free Software
Packit 427e91
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit 427e91
******************************************************************************/
Packit 427e91
Packit 427e91
#include "envy24control.h"
Packit 427e91
#include "midi.h"
Packit 427e91
#include "config.h"
Packit 427e91
#define _GNU_SOURCE
Packit 427e91
#include <getopt.h>
Packit 427e91
Packit 427e91
int input_channels, output_channels, pcm_output_channels, spdif_channels, view_spdif_playback, card_number;
Packit 427e91
int card_is_dmx6fire = FALSE, tall_equal_mixer_ht = 0;
Packit 427e91
char *profiles_file_name, *default_profile;
Packit 427e91
Packit 427e91
ice1712_eeprom_t card_eeprom;
Packit 427e91
snd_ctl_t *ctl;
Packit 427e91
Packit 427e91
GtkWidget *window;
Packit 427e91
Packit 427e91
GtkWidget *mixer_mix_drawing;
Packit 427e91
GtkWidget *mixer_clear_peaks_button;
Packit 427e91
GtkWidget *mixer_drawing[20];
Packit 427e91
GtkObject *mixer_adj[20][2];
Packit 427e91
GtkWidget *mixer_vscale[20][2];
Packit 427e91
GtkWidget *mixer_mute_toggle[20][2];
Packit 427e91
GtkWidget *mixer_stereo_toggle[20];
Packit 427e91
Packit 427e91
GtkWidget *router_radio[10][12];
Packit 427e91
Packit 427e91
//GtkWidget *hw_master_clock_xtal_radio;
Packit 427e91
GtkWidget *hw_master_clock_xtal_22050;
Packit 427e91
GtkWidget *hw_master_clock_xtal_32000;
Packit 427e91
GtkWidget *hw_master_clock_xtal_44100;
Packit 427e91
GtkWidget *hw_master_clock_xtal_48000;
Packit 427e91
GtkWidget *hw_master_clock_xtal_88200;
Packit 427e91
GtkWidget *hw_master_clock_xtal_96000;
Packit 427e91
GtkWidget *hw_master_clock_spdif_radio;
Packit 427e91
GtkWidget *hw_master_clock_word_radio;
Packit 427e91
GtkWidget *hw_master_clock_status_label;
Packit 427e91
GtkWidget *hw_master_clock_actual_rate_label;
Packit 427e91
Packit 427e91
GtkWidget *hw_clock_state_label;
Packit 427e91
GtkWidget *hw_clock_state_locked;
Packit 427e91
GtkWidget *hw_clock_state_reset;
Packit 427e91
Packit 427e91
GtkWidget *hw_rate_locking_check;
Packit 427e91
GtkWidget *hw_rate_reset_check;
Packit 427e91
Packit 427e91
GtkObject *hw_volume_change_adj;
Packit 427e91
GtkWidget *hw_volume_change_spin;
Packit 427e91
Packit 427e91
GtkWidget *hw_spdif_profi_nonaudio_radio;
Packit 427e91
GtkWidget *hw_spdif_profi_audio_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_profi_stream_stereo_radio;
Packit 427e91
GtkWidget *hw_profi_stream_notid_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_profi_emphasis_none_radio;
Packit 427e91
GtkWidget *hw_profi_emphasis_5015_radio;
Packit 427e91
GtkWidget *hw_profi_emphasis_ccitt_radio;
Packit 427e91
GtkWidget *hw_profi_emphasis_notid_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_consumer_copyright_on_radio;
Packit 427e91
GtkWidget *hw_consumer_copyright_off_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_consumer_copy_1st_radio;
Packit 427e91
GtkWidget *hw_consumer_copy_original_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_consumer_emphasis_none_radio;
Packit 427e91
GtkWidget *hw_consumer_emphasis_5015_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_consumer_category_dat_radio;
Packit 427e91
GtkWidget *hw_consumer_category_pcm_radio;
Packit 427e91
GtkWidget *hw_consumer_category_cd_radio;
Packit 427e91
GtkWidget *hw_consumer_category_general_radio;
Packit 427e91
Packit 427e91
GtkWidget *hw_spdif_professional_radio;
Packit 427e91
GtkWidget *hw_spdif_consumer_radio;
Packit 427e91
GtkWidget *hw_spdif_output_notebook;
Packit 427e91
Packit 427e91
GtkWidget *hw_spdif_input_coaxial_radio;
Packit 427e91
GtkWidget *hw_spdif_input_optical_radio;
Packit 427e91
GtkWidget *hw_spdif_switch_off_radio;
Packit 427e91
Packit 427e91
GtkWidget *input_interface_internal;
Packit 427e91
GtkWidget *input_interface_front_input;
Packit 427e91
GtkWidget *input_interface_rear_input;
Packit 427e91
GtkWidget *input_interface_wavetable;
Packit 427e91
Packit 427e91
GtkWidget *hw_phono_input_on_radio;
Packit 427e91
GtkWidget *hw_phono_input_off_radio;
Packit 427e91
Packit 427e91
GtkObject *av_dac_volume_adj[10];
Packit 427e91
GtkObject *av_adc_volume_adj[10];
Packit 427e91
GtkObject *av_ipga_volume_adj[10];
Packit 427e91
GtkLabel *av_dac_volume_label[10];
Packit 427e91
GtkLabel *av_adc_volume_label[10];
Packit 427e91
GtkLabel *av_ipga_volume_label[10];
Packit 427e91
GtkWidget *av_dac_sense_radio[10][4];
Packit 427e91
GtkWidget *av_adc_sense_radio[10][4];
Packit 427e91
Packit 427e91
struct profile_button {
Packit 427e91
	GtkWidget *toggle_button;
Packit 427e91
	GtkWidget *entry;
Packit 427e91
} profiles_toggle_buttons[MAX_PROFILES];
Packit 427e91
Packit 427e91
GtkWidget *active_button = NULL;
Packit 427e91
GtkObject *card_number_adj;
Packit 427e91
Packit 427e91
Packit 427e91
static void create_mixer_frame(GtkWidget *box, int stream)
Packit 427e91
{
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *vbox1;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkObject *adj;
Packit 427e91
	GtkWidget *vscale;
Packit 427e91
	GtkWidget *drawing;
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *toggle;
Packit 427e91
	char str[64], drawname[32];
Packit 427e91
Packit 427e91
	if (stream <= MAX_PCM_OUTPUT_CHANNELS) {
Packit 427e91
		sprintf(str, "PCM Out %i", stream);
Packit 427e91
	} else if (stream <= (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS)) {
Packit 427e91
		sprintf(str, "SPDIF Out %s", stream & 1 ? "L": "R");
Packit 427e91
	} else if (card_is_dmx6fire) {
Packit 427e91
		switch (stream) {
Packit 427e91
		case 11: sprintf(str, "CD In L");break;
Packit 427e91
		case 12: sprintf(str, "CD In R");break;
Packit 427e91
		case 13: sprintf(str, "Line In L");break;
Packit 427e91
		case 14: sprintf(str, "Line In R");break;
Packit 427e91
		case 15: sprintf(str, "Phono/Mic L");break;
Packit 427e91
		case 16: sprintf(str, "Phono/Mic R");break;
Packit 427e91
		case 19: sprintf(str, "Digital In L");break;
Packit 427e91
		case 20: sprintf(str, "Digital In R");break;
Packit 427e91
		default : sprintf(str, "????");break;
Packit 427e91
		}
Packit 427e91
	} else if (stream <= (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS)) {
Packit 427e91
		sprintf(str, "H/W In %i", stream - (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS));
Packit 427e91
	} else if (stream <= (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + MAX_SPDIF_CHANNELS)) {
Packit 427e91
		sprintf(str, "SPDIF In %s", stream & 1 ? "L": "R");
Packit 427e91
	} else {
Packit 427e91
		strcpy(str, "???");
Packit 427e91
	}
Packit 427e91
Packit 427e91
	frame = gtk_frame_new(str);
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(frame), 2);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 6);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 2);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 2);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
Packit 427e91
Packit 427e91
	adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0);
Packit 427e91
	mixer_adj[stream-1][0] = adj;
Packit 427e91
	vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
Packit 427e91
	mixer_vscale[stream-1][0] = vscale;
Packit 427e91
        gtk_widget_show(vscale);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0);
Packit 427e91
	gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
Packit 427e91
	gtk_scale_set_digits(GTK_SCALE(vscale), 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
Packit 427e91
			   GTK_SIGNAL_FUNC(mixer_adjust),
Packit 427e91
			   (gpointer)(long)((stream << 16) + 0));
Packit 427e91
Packit 427e91
	vbox1 = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox1);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0);
Packit 427e91
Packit 427e91
	drawing = gtk_drawing_area_new();
Packit 427e91
	mixer_drawing[stream-1] = drawing;
Packit 427e91
	sprintf(drawname, "Mixer%i", stream);
Packit 427e91
	gtk_widget_set_name(drawing, drawname);
Packit 427e91
	gtk_widget_show(drawing);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(drawing), "expose_event",
Packit 427e91
			   GTK_SIGNAL_FUNC(level_meters_expose_event), NULL);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(drawing), "configure_event",
Packit 427e91
			   GTK_SIGNAL_FUNC(level_meters_configure_event), NULL);
Packit 427e91
	gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK);
Packit 427e91
	gtk_widget_set_usize(drawing, 36, (60 * tall_equal_mixer_ht + 204));
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox1), drawing, FALSE, FALSE, 1);
Packit 427e91
Packit 427e91
	label = gtk_label_new("");
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox1), label, TRUE, TRUE, 2);
Packit 427e91
Packit 427e91
	adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0);
Packit 427e91
	mixer_adj[stream-1][1] = adj;
Packit 427e91
	vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
Packit 427e91
	mixer_vscale[stream-1][1] = vscale;
Packit 427e91
        gtk_widget_show(vscale);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0);
Packit 427e91
	gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
Packit 427e91
	gtk_scale_set_digits(GTK_SCALE(vscale), 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
Packit 427e91
			   GTK_SIGNAL_FUNC(mixer_adjust),
Packit 427e91
			   (gpointer)(long)((stream << 16) + 1));
Packit 427e91
	
Packit 427e91
	hbox = gtk_hbox_new(TRUE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0);
Packit 427e91
Packit 427e91
	label = gtk_label_new("Left");
Packit 427e91
	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
Packit 427e91
	
Packit 427e91
	label = gtk_label_new("Right");
Packit 427e91
	gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	toggle = gtk_toggle_button_new_with_label("L/R Gang");
Packit 427e91
	mixer_stereo_toggle[stream-1] = toggle;
Packit 427e91
	gtk_widget_show(toggle);
Packit 427e91
	gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
Packit 427e91
	/* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); */
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
Packit 427e91
			   GTK_SIGNAL_FUNC(config_set_stereo), (gpointer)stream-1);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(TRUE, 6);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
Packit 427e91
Packit 427e91
	toggle = gtk_toggle_button_new_with_label("Mute");
Packit 427e91
	mixer_mute_toggle[stream-1][0] = toggle;
Packit 427e91
	gtk_widget_show(toggle);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0);
Packit 427e91
	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
Packit 427e91
			   GTK_SIGNAL_FUNC(mixer_toggled_mute),
Packit 427e91
			   (gpointer)(long)((stream << 16) + 0));
Packit 427e91
Packit 427e91
	toggle = gtk_toggle_button_new_with_label("Mute");
Packit 427e91
	mixer_mute_toggle[stream-1][1] = toggle;
Packit 427e91
	gtk_widget_show(toggle);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0);
Packit 427e91
	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
Packit 427e91
			   GTK_SIGNAL_FUNC(mixer_toggled_mute),
Packit 427e91
			   (gpointer)(long)((stream << 16) + 1));
Packit 427e91
}
Packit 427e91
Packit 427e91
Packit 427e91
static void create_inputs_mixer(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
        GtkWidget *hbox;
Packit 427e91
        GtkWidget *vbox;
Packit 427e91
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
	int stream;
Packit 427e91
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 3);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
        label = gtk_label_new("Monitor Inputs");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	/* build scrolling area */
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
Packit 427e91
					GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), vbox);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1); \
Packit 427e91
		stream <= input_channels + (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS); stream ++) {
Packit 427e91
		if (mixer_stream_is_active(stream))
Packit 427e91
			create_mixer_frame(hbox, stream);
Packit 427e91
	}
Packit 427e91
	for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + 1); \
Packit 427e91
		stream <= spdif_channels + (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS); stream ++) {
Packit 427e91
		if (mixer_stream_is_active(stream))
Packit 427e91
			create_mixer_frame(hbox, stream);
Packit 427e91
	}
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_pcms_mixer(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
        GtkWidget *hbox;
Packit 427e91
        GtkWidget *vbox;
Packit 427e91
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
	int stream;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 3);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
        label = gtk_label_new("Monitor PCMs");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page),
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	/* build scrolling area */
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), 
Packit 427e91
					GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), vbox);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	for(stream = 1; stream <= pcm_output_channels; stream ++) {
Packit 427e91
		if (mixer_stream_is_active(stream))
Packit 427e91
			create_mixer_frame(hbox, stream);
Packit 427e91
	}
Packit 427e91
	for(stream = (MAX_PCM_OUTPUT_CHANNELS + 1); \
Packit 427e91
		stream <= spdif_channels + MAX_PCM_OUTPUT_CHANNELS; stream ++) {
Packit 427e91
		if (mixer_stream_is_active(stream) && view_spdif_playback)
Packit 427e91
			create_mixer_frame(hbox, stream);
Packit 427e91
	}
Packit 427e91
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_router_frame(GtkWidget *box, int stream, int pos)
Packit 427e91
{
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *hseparator;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
	char str[64], str1[64];
Packit 427e91
	int idx;
Packit 427e91
	static char *table[10] = {
Packit 427e91
		"S/PDIF In L",
Packit 427e91
		"S/PDIF In R",
Packit 427e91
		"H/W In 1",
Packit 427e91
		"H/W In 2",
Packit 427e91
		"H/W In 3",
Packit 427e91
		"H/W In 4",
Packit 427e91
		"H/W In 5",
Packit 427e91
		"H/W In 6",
Packit 427e91
		"H/W In 7",
Packit 427e91
		"H/W In 8"
Packit 427e91
	};
Packit 427e91
Packit 427e91
	if (card_is_dmx6fire)
Packit 427e91
	{
Packit 427e91
                table[0] = "Digital In L";
Packit 427e91
                table[1] = "Digital In R";
Packit 427e91
                table[2] = "CD In L";
Packit 427e91
                table[3] = "CD In R";
Packit 427e91
                table[4] = "Line In L";
Packit 427e91
                table[5] = "Line In R";
Packit 427e91
                table[6] = "Phono/Mic L";
Packit 427e91
                table[7] = "Phono/Mic R";
Packit 427e91
	}
Packit 427e91
Packit 427e91
	if (stream <= MAX_OUTPUT_CHANNELS) {
Packit 427e91
		sprintf(str, "H/W Out %i (%s)", stream, stream & 1 ? "L" : "R");
Packit 427e91
	} else if (stream == (MAX_OUTPUT_CHANNELS + 1)) {
Packit 427e91
		if (card_is_dmx6fire) {
Packit 427e91
				strcpy(str, "Digital Out (L)");
Packit 427e91
			} else {
Packit 427e91
				strcpy(str, "S/PDIF Out (L)");
Packit 427e91
				}
Packit 427e91
	} else if (stream == (MAX_OUTPUT_CHANNELS + 2)) {
Packit 427e91
		if (card_is_dmx6fire) {
Packit 427e91
				strcpy(str, "Digital Out (R)");
Packit 427e91
			} else {
Packit 427e91
				strcpy(str, "S/PDIF Out (R)");
Packit 427e91
				}
Packit 427e91
	} else {
Packit 427e91
		strcpy(str, "???");
Packit 427e91
		}
Packit 427e91
	if ((stream == MAX_PCM_OUTPUT_CHANNELS + 1) || (stream == MAX_PCM_OUTPUT_CHANNELS + 2)) {
Packit 427e91
		sprintf(str1, "S/PDIF Out (%s)", stream & 1 ? "L" : "R");
Packit 427e91
	} else { 
Packit 427e91
		sprintf(str1, "PCM Out %i", stream);
Packit 427e91
	}
Packit 427e91
Packit 427e91
	frame = gtk_frame_new(str);
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start (GTK_BOX(box), frame, FALSE, FALSE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(TRUE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, str1);
Packit 427e91
	router_radio[stream-1][0] = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)patchbay_toggled, 
Packit 427e91
			   (gpointer)(long)((stream << 16) + 0));
Packit 427e91
Packit 427e91
Packit 427e91
	hseparator = gtk_hseparator_new();
Packit 427e91
	gtk_widget_show(hseparator);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	label = gtk_label_new("");
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
Packit 427e91
	/* the digital mixer can only be routed to HW1/2 or SPDIF1/2 */
Packit 427e91
	if( (stream <= 2) /* hw1/2 */ ||
Packit 427e91
	    ((stream > MAX_OUTPUT_CHANNELS) && (stream <= MAX_OUTPUT_CHANNELS + 2)) /* spdif1/2 */
Packit 427e91
	    ) {
Packit 427e91
		radiobutton = gtk_radio_button_new_with_label(group, stream & 1 ? "Digital Mix L" : "Digital Mix R");
Packit 427e91
		router_radio[stream-1][1] = radiobutton;
Packit 427e91
		group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
		gtk_widget_show(radiobutton);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), 
Packit 427e91
				    radiobutton, FALSE, FALSE, 0);
Packit 427e91
		gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
				  (GtkSignalFunc)patchbay_toggled, 
Packit 427e91
				   (gpointer)(long)((stream << 16) + 1));
Packit 427e91
	}
Packit 427e91
	else {
Packit 427e91
	  label = gtk_label_new("");
Packit 427e91
	  gtk_widget_show(label);
Packit 427e91
	  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
Packit 427e91
	}
Packit 427e91
Packit 427e91
Packit 427e91
	hseparator = gtk_hseparator_new();
Packit 427e91
	gtk_widget_show(hseparator);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
Packit 427e91
	for(idx = 2 - spdif_channels; idx < input_channels + 2; idx++) {
Packit 427e91
		radiobutton = gtk_radio_button_new_with_label(group, table[idx]);
Packit 427e91
		router_radio[stream-1][2+idx] = radiobutton;
Packit 427e91
		group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
		gtk_widget_show(radiobutton);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), 
Packit 427e91
				    radiobutton, FALSE, FALSE, 0);
Packit 427e91
		gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
				  (GtkSignalFunc)patchbay_toggled, 
Packit 427e91
				   (gpointer)(long)((stream << 16) + 2 + idx));
Packit 427e91
	}
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_router(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
	int stream, pos;
Packit 427e91
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow);
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), 
Packit 427e91
				       GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
Packit 427e91
        label = gtk_label_new("Patchbay / Router");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), hbox);
Packit 427e91
Packit 427e91
	pos = 0;
Packit 427e91
	for (stream = 1; stream <= output_channels; stream++) {
Packit 427e91
		if (patchbay_stream_is_active(stream))
Packit 427e91
			create_router_frame(hbox, stream, pos++);
Packit 427e91
	}
Packit 427e91
	for (stream = MAX_OUTPUT_CHANNELS + 1; stream <= MAX_OUTPUT_CHANNELS + spdif_channels; stream++) {
Packit 427e91
		if (patchbay_stream_is_active(stream))
Packit 427e91
			create_router_frame(hbox, stream, pos++);
Packit 427e91
	}
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_master_clock(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Master Clock");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Int 22050");
Packit 427e91
	hw_master_clock_xtal_22050 = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"22050");
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Int 32000");
Packit 427e91
	hw_master_clock_xtal_32000 = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"32000");
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Int 44100");
Packit 427e91
	hw_master_clock_xtal_44100 = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"44100");
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Int 48000");
Packit 427e91
	hw_master_clock_xtal_48000 = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"48000");
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Int 88200");
Packit 427e91
	hw_master_clock_xtal_88200 = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"88200");
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Int 96000");
Packit 427e91
	hw_master_clock_xtal_96000 = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"96000");
Packit 427e91
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "S/PDIF In");
Packit 427e91
	hw_master_clock_spdif_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"SPDIF");
Packit 427e91
Packit 427e91
Packit 427e91
Packit 427e91
	if (card_eeprom.subvendor != ICE1712_SUBDEVICE_DELTA1010 &&
Packit 427e91
	    card_eeprom.subvendor != ICE1712_SUBDEVICE_DELTA1010LT)
Packit 427e91
		return;
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Word Clock");
Packit 427e91
	hw_master_clock_word_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)internal_clock_toggled, 
Packit 427e91
			  (gpointer)"WordClock");
Packit 427e91
	
Packit 427e91
        label = gtk_label_new("Locked");
Packit 427e91
        hw_master_clock_status_label = label;
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_rate_state(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *check;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Rate State");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(TRUE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), hbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
Packit 427e91
Packit 427e91
	check = gtk_check_button_new_with_label("Locked");
Packit 427e91
	hw_rate_locking_check = check;
Packit 427e91
	gtk_widget_show(check);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(check), "toggled",
Packit 427e91
			  (GtkSignalFunc)rate_locking_toggled, 
Packit 427e91
			  (gpointer)"locked");
Packit 427e91
Packit 427e91
Packit 427e91
	check = gtk_check_button_new_with_label("Reset");
Packit 427e91
	hw_rate_reset_check = check;
Packit 427e91
	gtk_widget_show(check);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(check), "toggled",
Packit 427e91
			  (GtkSignalFunc)rate_reset_toggled, 
Packit 427e91
			  (gpointer)"reset");
Packit 427e91
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_actual_rate(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *label;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Actual Rate");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
Packit 427e91
Packit 427e91
	label = gtk_label_new("");
Packit 427e91
	hw_master_clock_actual_rate_label = label;
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), label);
Packit 427e91
	gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
Packit 427e91
	gtk_misc_set_padding(GTK_MISC(label), 6, 6);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_volume_change(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkObject *spinbutton_adj;
Packit 427e91
	GtkWidget *spinbutton;
Packit 427e91
	GtkWidget *label;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Volume Change");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), hbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
Packit 427e91
Packit 427e91
	label = gtk_label_new("Rate");
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
Packit 427e91
	gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
Packit 427e91
Packit 427e91
	spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 10);
Packit 427e91
	hw_volume_change_adj = spinbutton_adj;
Packit 427e91
	spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(spinbutton_adj), 1, 0);
Packit 427e91
	gtk_widget_show(spinbutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), spinbutton, TRUE, FALSE, 0);
Packit 427e91
	gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spinbutton), TRUE);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(spinbutton_adj), "value_changed",
Packit 427e91
			   GTK_SIGNAL_FUNC(volume_change_rate_adj), NULL);
Packit 427e91
	
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_profi_data(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Data Mode");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Non-audio");
Packit 427e91
	hw_spdif_profi_nonaudio_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_data_toggled, 
Packit 427e91
			  (gpointer)"Non-audio");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Audio");
Packit 427e91
	hw_spdif_profi_audio_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_data_toggled, 
Packit 427e91
			  (gpointer)"Audio");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_profi_stream(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Stream");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Stereophonic");
Packit 427e91
	hw_profi_stream_stereo_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_stream_toggled, 
Packit 427e91
			  (gpointer)"Stereo");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Not indicated");
Packit 427e91
	hw_profi_stream_notid_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_stream_toggled, 
Packit 427e91
			  (gpointer)"NOTID");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_profi_emphasis(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Emphasis");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "No emphasis");
Packit 427e91
	hw_profi_emphasis_none_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_emphasis_toggled, 
Packit 427e91
			  (gpointer)"No");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "50/15us");
Packit 427e91
	hw_profi_emphasis_5015_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_emphasis_toggled, 
Packit 427e91
			  (gpointer)"5015");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "CCITT J.17");
Packit 427e91
	hw_profi_emphasis_ccitt_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_emphasis_toggled, 
Packit 427e91
			  (gpointer)"CCITT");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Not indicated");
Packit 427e91
	hw_profi_emphasis_notid_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)profi_emphasis_toggled, 
Packit 427e91
			  (gpointer)"NOTID");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_profi(GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *label;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
        label = gtk_label_new("Professional");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	create_spdif_output_settings_profi_data(vbox);
Packit 427e91
	create_spdif_output_settings_profi_stream(vbox);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	create_spdif_output_settings_profi_emphasis(vbox);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_consumer_copyright(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Copyright");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
	
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Copyrighted");
Packit 427e91
	hw_consumer_copyright_on_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_copyright_toggled, 
Packit 427e91
			  (gpointer)"Copyright");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Copy permitted");
Packit 427e91
	hw_consumer_copyright_off_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_copyright_toggled,
Packit 427e91
			  (gpointer)"Permitted");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_consumer_copy(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Copy");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group,
Packit 427e91
						      "1-st generation");
Packit 427e91
	hw_consumer_copy_1st_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_copy_toggled, 
Packit 427e91
			  (gpointer)"1st");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Original");
Packit 427e91
	hw_consumer_copy_original_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_copy_toggled, 
Packit 427e91
			  (gpointer)"Original");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Emphasis");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "No emphasis");
Packit 427e91
	hw_consumer_emphasis_none_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_emphasis_toggled, 
Packit 427e91
			  (gpointer)"No");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "50/15us");
Packit 427e91
	hw_consumer_emphasis_5015_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_emphasis_toggled, 
Packit 427e91
			  (gpointer)"5015");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_consumer_category(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Category");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "DAT");
Packit 427e91
	hw_consumer_category_dat_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_category_toggled, 
Packit 427e91
			  (gpointer)"DAT");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "PCM encoder");
Packit 427e91
	hw_consumer_category_pcm_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_category_toggled, 
Packit 427e91
			  (gpointer)"PCM");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "CD (ICE-908)");
Packit 427e91
	hw_consumer_category_cd_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_category_toggled, 
Packit 427e91
			  (gpointer)"CD");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "General");
Packit 427e91
	hw_consumer_category_general_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)consumer_category_toggled, 
Packit 427e91
			  (gpointer)"General");
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *label;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
Packit 427e91
Packit 427e91
	label = gtk_label_new("Consumer");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	create_spdif_output_settings_consumer_copyright(vbox);
Packit 427e91
	create_spdif_output_settings_consumer_copy(vbox);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	create_spdif_output_settings_consumer_emphasis(vbox);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	create_spdif_output_settings_consumer_category(vbox);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_output_settings(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GtkWidget *notebook;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("S/PDIF Output Settings");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(NULL, "Professional");
Packit 427e91
	hw_spdif_professional_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)spdif_output_toggled, 
Packit 427e91
			  (gpointer)"Professional");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Consumer");
Packit 427e91
	hw_spdif_consumer_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)spdif_output_toggled, 
Packit 427e91
			  (gpointer)"Consumer");
Packit 427e91
Packit 427e91
Packit 427e91
	notebook = gtk_notebook_new();
Packit 427e91
	hw_spdif_output_notebook = notebook;
Packit 427e91
	gtk_widget_show(notebook);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
Packit 427e91
Packit 427e91
Packit 427e91
	create_spdif_output_settings_profi(notebook, 0);
Packit 427e91
 	create_spdif_output_settings_consumer(notebook, 1); 
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_spdif_input_select(GtkWidget *box)
Packit 427e91
{
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group = NULL;
Packit 427e91
	int hide = 1;
Packit 427e91
Packit 427e91
	if((card_eeprom.subvendor == ICE1712_SUBDEVICE_DELTADIO2496) || (card_is_dmx6fire))
Packit 427e91
		hide = 0;
Packit 427e91
Packit 427e91
	frame = gtk_frame_new("Digital Input");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Coaxial");
Packit 427e91
	hw_spdif_input_coaxial_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)spdif_input_toggled, 
Packit 427e91
			  (gpointer)"Coaxial");
Packit 427e91
Packit 427e91
	radiobutton = gtk_radio_button_new_with_label(group, "Optical");
Packit 427e91
	hw_spdif_input_optical_radio = radiobutton;
Packit 427e91
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	gtk_widget_show(radiobutton);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
			  (GtkSignalFunc)spdif_input_toggled, 
Packit 427e91
			  (gpointer)"Optical");
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Internal CD");
Packit 427e91
        hw_spdif_switch_off_radio = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
	if(card_is_dmx6fire)
Packit 427e91
	        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)spdif_input_toggled,
Packit 427e91
                          (gpointer)"Off");
Packit 427e91
Packit 427e91
        if(hide)
Packit 427e91
                gtk_widget_hide_all(frame);
Packit 427e91
}
Packit 427e91
Packit 427e91
Packit 427e91
static void create_phono_input(GtkWidget *box)
Packit 427e91
{
Packit 427e91
        GtkWidget *frame;
Packit 427e91
        GtkWidget *vbox;
Packit 427e91
        GtkWidget *radiobutton;
Packit 427e91
        GSList *group = NULL;
Packit 427e91
        int hide = 1;
Packit 427e91
Packit 427e91
        if(card_is_dmx6fire)
Packit 427e91
                hide = 0;
Packit 427e91
Packit 427e91
        frame = gtk_frame_new("Phono Input Switch");
Packit 427e91
        gtk_widget_show(frame);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 7);
Packit 427e91
        gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
        vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
        gtk_widget_show(vbox);
Packit 427e91
        gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
        gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Phono");
Packit 427e91
        hw_phono_input_on_radio = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)phono_input_toggled,
Packit 427e91
                          (gpointer)"Phono");
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Mic");
Packit 427e91
        hw_phono_input_off_radio = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)phono_input_toggled,
Packit 427e91
                          (gpointer)"Mic");
Packit 427e91
Packit 427e91
        if(hide)
Packit 427e91
                gtk_widget_hide_all(frame);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_input_interface(GtkWidget *box)
Packit 427e91
{
Packit 427e91
        GtkWidget *frame;
Packit 427e91
        GtkWidget *vbox;
Packit 427e91
        GtkWidget *radiobutton;
Packit 427e91
        GSList *group = NULL;
Packit 427e91
        int hide = 1;
Packit 427e91
Packit 427e91
        if (card_is_dmx6fire)
Packit 427e91
                hide = 0;
Packit 427e91
Packit 427e91
        frame = gtk_frame_new("Line In Selector");
Packit 427e91
        gtk_widget_show(frame);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 4);
Packit 427e91
        //gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
        vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
        gtk_widget_show(vbox);
Packit 427e91
        gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
        gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Internal");
Packit 427e91
        input_interface_internal = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)analog_input_select_toggled,
Packit 427e91
                          (gpointer)"Internal");
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Front Input");
Packit 427e91
        input_interface_front_input = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)analog_input_select_toggled,
Packit 427e91
                          (gpointer)"Front Input");
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Rear Input");
Packit 427e91
        input_interface_rear_input = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)analog_input_select_toggled,
Packit 427e91
                          (gpointer)"Rear Input");
Packit 427e91
Packit 427e91
        radiobutton = gtk_radio_button_new_with_label(group, "Wavetable");
Packit 427e91
        input_interface_wavetable = radiobutton;
Packit 427e91
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
        gtk_widget_show(radiobutton);
Packit 427e91
        gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
                          (GtkSignalFunc)analog_input_select_toggled,
Packit 427e91
                          (gpointer)"Wave Table");
Packit 427e91
Packit 427e91
        if(hide)
Packit 427e91
                gtk_widget_hide_all(frame);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *hbox1;
Packit 427e91
	GtkWidget *hbox2;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *vbox1;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
	GtkWidget *hseparator;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
	label = gtk_label_new("Hardware Settings");
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	/* Build scrolling area */
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
Packit 427e91
					GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
	/* Outer box */
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), hbox);
Packit 427e91
Packit 427e91
	/* Create boxes for controls */
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 6);
Packit 427e91
Packit 427e91
	hbox1 = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox1);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0);
Packit 427e91
Packit 427e91
	hseparator = gtk_hseparator_new();
Packit 427e91
	gtk_widget_show(hseparator);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 2);
Packit 427e91
Packit 427e91
	hbox2 = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox2);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
Packit 427e91
Packit 427e91
	create_master_clock(hbox1);
Packit 427e91
Packit 427e91
	vbox1 = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox1);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox1), vbox1, FALSE, FALSE, 20);
Packit 427e91
Packit 427e91
	create_rate_state(vbox1);
Packit 427e91
	create_actual_rate(vbox1);
Packit 427e91
	create_volume_change(vbox1);
Packit 427e91
	create_input_interface(hbox2);
Packit 427e91
	create_phono_input(hbox2);
Packit 427e91
	create_spdif_input_select(hbox2);
Packit 427e91
	create_spdif_output_settings(hbox);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_about(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
        label = gtk_label_new("About");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	/* build scrolling area */
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
Packit 427e91
					GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), vbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
Packit 427e91
	/* Create text as labels */
Packit 427e91
	label = gtk_label_new("");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6);
Packit 427e91
Packit 427e91
	/* create first line */
Packit 427e91
	label = gtk_label_new("Envy24 Control Utility " VERSION);
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
Packit 427e91
	/* create second line */
Packit 427e91
	label = gtk_label_new("A GTK Tool for Envy24 PCI Audio Chip");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
Packit 427e91
Packit 427e91
	/* create third line */
Packit 427e91
	label = gtk_label_new("Copyright(c) 2000 by Jaroslav Kysela <perex@perex.cz>");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
Packit 427e91
	label = gtk_label_new("");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *vbox;
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkObject *adj;
Packit 427e91
	GtkWidget *vscale;
Packit 427e91
	GtkWidget *radiobutton;
Packit 427e91
	GSList *group;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
	int i, j;
Packit 427e91
	static char* dmx6fire_inputs[6] = {
Packit 427e91
		"CD In (L)",
Packit 427e91
		"CD In (R)",
Packit 427e91
		"Line  (L)",
Packit 427e91
		"Line  (R)",
Packit 427e91
		"Phono (L)",
Packit 427e91
		"Phono (R)"
Packit 427e91
	};
Packit 427e91
	static char* dmx6fire_outputs[6] = {
Packit 427e91
		"Front (L)",
Packit 427e91
		"Front (R)",
Packit 427e91
		"Rear (L)",
Packit 427e91
		"Rear (R)",
Packit 427e91
		"Centre",
Packit 427e91
		"LFE"
Packit 427e91
	};
Packit 427e91
Packit 427e91
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow);
Packit 427e91
Packit 427e91
        label = gtk_label_new("Analog Volume");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), 
Packit 427e91
				       GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), hbox);
Packit 427e91
Packit 427e91
	/* create DAC */
Packit 427e91
	for(i = 0; i < envy_dac_volumes(); i++) {
Packit 427e91
		char name[32];
Packit 427e91
		sprintf(name, "DAC %d", i);
Packit 427e91
		frame = gtk_frame_new(name);
Packit 427e91
		gtk_widget_show(frame);
Packit 427e91
		//gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
Packit 427e91
		gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
		vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
		gtk_widget_show(vbox);
Packit 427e91
		gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
		gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
		/* Add friendly labels for DMX 6Fires */
Packit 427e91
		if(card_is_dmx6fire && (i < 6)){
Packit 427e91
			label = gtk_label_new(dmx6fire_outputs[i]);
Packit 427e91
			gtk_widget_show(label);
Packit 427e91
			gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
		}
Packit 427e91
Packit 427e91
		adj = gtk_adjustment_new(0, -(envy_dac_max()), 0, 1, 16, 0);
Packit 427e91
		av_dac_volume_adj[i] = adj;
Packit 427e91
		vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
Packit 427e91
		gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE);
Packit 427e91
		gtk_widget_show(vscale);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6);
Packit 427e91
		gtk_scale_set_digits(GTK_SCALE(vscale), 0);
Packit 427e91
		gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
Packit 427e91
				   GTK_SIGNAL_FUNC(dac_volume_adjust), 
Packit 427e91
				   (gpointer)(long)(i));
Packit 427e91
Packit 427e91
	        label = gtk_label_new("000");
Packit 427e91
	        av_dac_volume_label[i] =(GtkLabel *)label;
Packit 427e91
	        gtk_widget_show(label);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
Packit 427e91
Packit 427e91
		if (i >= envy_dac_senses())
Packit 427e91
			continue;
Packit 427e91
		group = NULL;
Packit 427e91
		for (j = 0; j < envy_dac_sense_items(); j++) {
Packit 427e91
		  radiobutton = gtk_radio_button_new_with_label(group, 
Packit 427e91
								envy_dac_sense_enum_name(j));
Packit 427e91
			av_dac_sense_radio[i][j] = radiobutton;
Packit 427e91
			gtk_widget_show(radiobutton);
Packit 427e91
			gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
					  (GtkSignalFunc)dac_sense_toggled, 
Packit 427e91
					   (gpointer)(long)((i << 8) + j));
Packit 427e91
			gtk_box_pack_start(GTK_BOX(vbox), 
Packit 427e91
					    radiobutton, FALSE, TRUE, 0);
Packit 427e91
			group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
Packit 427e91
	/* create ADC */
Packit 427e91
	for (i = 0; i < envy_adc_volumes(); i++) {
Packit 427e91
		char name[32];
Packit 427e91
		sprintf(name, "ADC %d", i);
Packit 427e91
		frame = gtk_frame_new(name);
Packit 427e91
		gtk_widget_show(frame);
Packit 427e91
		//gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
Packit 427e91
		gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
		vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
		gtk_widget_show(vbox);
Packit 427e91
		gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
		gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
		/* Add friendly labels for DMX 6Fires */
Packit 427e91
		if(card_is_dmx6fire && (i < 6)){
Packit 427e91
			label = gtk_label_new(dmx6fire_inputs[i]);
Packit 427e91
			gtk_widget_show(label);
Packit 427e91
			gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
		}
Packit 427e91
Packit 427e91
		adj = gtk_adjustment_new(0, -(envy_adc_max()), 0, 1, 16, 0);
Packit 427e91
		av_adc_volume_adj[i] = adj;
Packit 427e91
		vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
Packit 427e91
		gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE);
Packit 427e91
		gtk_widget_show(vscale);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6);
Packit 427e91
		gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
Packit 427e91
		gtk_scale_set_digits(GTK_SCALE(vscale), 0);
Packit 427e91
		gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
Packit 427e91
				   GTK_SIGNAL_FUNC(adc_volume_adjust), 
Packit 427e91
				   (gpointer)(long)(i));
Packit 427e91
Packit 427e91
	        label = gtk_label_new("000");
Packit 427e91
	        av_adc_volume_label[i] =(GtkLabel *)label;
Packit 427e91
	        gtk_widget_show(label);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
Packit 427e91
		if (i >= envy_adc_senses())
Packit 427e91
			continue;
Packit 427e91
		group = NULL;
Packit 427e91
		for (j = 0; j < envy_adc_sense_items(); j++) {
Packit 427e91
			radiobutton = gtk_radio_button_new_with_label(group, 
Packit 427e91
								      envy_adc_sense_enum_name(j));
Packit 427e91
			av_adc_sense_radio[i][j] = radiobutton;
Packit 427e91
			gtk_widget_show(radiobutton);
Packit 427e91
			gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
Packit 427e91
					  (GtkSignalFunc)adc_sense_toggled, 
Packit 427e91
					   (gpointer)(long)((i << 8) + j));
Packit 427e91
			gtk_box_pack_start(GTK_BOX(vbox), 
Packit 427e91
					    radiobutton, FALSE, TRUE, 0);
Packit 427e91
			group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
Packit 427e91
	/* create IPGA */
Packit 427e91
	for (i = 0; i < envy_ipga_volumes(); i++) {
Packit 427e91
		char name[32];
Packit 427e91
		sprintf(name, "IPGA %d", i);
Packit 427e91
		frame = gtk_frame_new(name);
Packit 427e91
		gtk_widget_show(frame);
Packit 427e91
		//gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
Packit 427e91
		gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
		vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
		gtk_widget_show(vbox);
Packit 427e91
		gtk_container_add(GTK_CONTAINER(frame), vbox);
Packit 427e91
		gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
Packit 427e91
Packit 427e91
		/* Add friendly labels for DMX 6Fires */
Packit 427e91
		if(card_is_dmx6fire && (i < 6)){
Packit 427e91
			label = gtk_label_new(dmx6fire_inputs[i]);
Packit 427e91
			gtk_widget_show(label);
Packit 427e91
			gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
		}
Packit 427e91
Packit 427e91
		adj = gtk_adjustment_new(0, -36, 0, 1, 16, 0);
Packit 427e91
		av_ipga_volume_adj[i] = adj;
Packit 427e91
		vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
Packit 427e91
		gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE);
Packit 427e91
		gtk_widget_show(vscale);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6);
Packit 427e91
		gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
Packit 427e91
		gtk_scale_set_digits(GTK_SCALE(vscale), 0);
Packit 427e91
		gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
Packit 427e91
				   GTK_SIGNAL_FUNC(ipga_volume_adjust), 
Packit 427e91
				   (gpointer)(long)(i));
Packit 427e91
Packit 427e91
	        label = gtk_label_new("000");
Packit 427e91
	        av_ipga_volume_label[i] = (GtkLabel *)label;
Packit 427e91
	        gtk_widget_show(label);
Packit 427e91
		gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
Packit 427e91
	}
Packit 427e91
}
Packit 427e91
Packit 427e91
int index_active_profile()
Packit 427e91
{
Packit 427e91
	gint index;
Packit 427e91
	gboolean found;
Packit 427e91
Packit 427e91
	found = FALSE;
Packit 427e91
	for (index = 0; index < MAX_PROFILES; index++)
Packit 427e91
	{
Packit 427e91
		if (active_button == profiles_toggle_buttons[index].toggle_button) {
Packit 427e91
			found = TRUE;
Packit 427e91
			break;
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
Packit 427e91
	if (found)
Packit 427e91
		return index;
Packit 427e91
Packit 427e91
	return NOTFOUND;
Packit 427e91
}
Packit 427e91
Packit 427e91
int delete_card_number(GtkWidget *delete_button)
Packit 427e91
{
Packit 427e91
	gint res;
Packit 427e91
	gint card_nr;
Packit 427e91
	gint index;
Packit 427e91
Packit 427e91
	if (!(GTK_TOGGLE_BUTTON (delete_button)->active))
Packit 427e91
		return EXIT_SUCCESS;
Packit 427e91
Packit 427e91
	card_nr = GTK_ADJUSTMENT (card_number_adj)->value;
Packit 427e91
	if ((card_nr < 0) || (card_nr >= MAX_CARD_NUMBERS)) {
Packit 427e91
		fprintf(stderr, "card number not in [0 ... %d]\n", MAX_CARD_NUMBERS - 1);
Packit 427e91
		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE);
Packit 427e91
		return -EINVAL;
Packit 427e91
	}
Packit 427e91
Packit 427e91
	res = delete_card(card_number, profiles_file_name);
Packit 427e91
	if (res < 0) {
Packit 427e91
		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE);
Packit 427e91
		return res;
Packit 427e91
	}
Packit 427e91
	if (card_nr == card_number) {
Packit 427e91
		for (index = 0; index < MAX_PROFILES; index++)
Packit 427e91
		{
Packit 427e91
			gtk_entry_set_text(GTK_ENTRY (profiles_toggle_buttons[index].entry), get_profile_name(index + 1, card_number, profiles_file_name));
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
Packit 427e91
	gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE);
Packit 427e91
Packit 427e91
	return EXIT_SUCCESS;
Packit 427e91
}
Packit 427e91
Packit 427e91
int restore_active_profile(const gint profile_number)
Packit 427e91
{
Packit 427e91
	gint res;
Packit 427e91
Packit 427e91
	res = save_restore(ALSACTL_OP_RESTORE, profile_number, card_number, profiles_file_name, NULL);
Packit 427e91
Packit 427e91
	return res;
Packit 427e91
}
Packit 427e91
Packit 427e91
int save_active_profile(GtkWidget *save_button)
Packit 427e91
{
Packit 427e91
	gint res;
Packit 427e91
	gint index;
Packit 427e91
Packit 427e91
	if (!(GTK_TOGGLE_BUTTON (save_button)->active))
Packit 427e91
		return EXIT_SUCCESS;
Packit 427e91
	if ((index = index_active_profile()) >= 0) {
Packit 427e91
		res = save_restore(ALSACTL_OP_STORE, index + 1, card_number, profiles_file_name, \
Packit 427e91
			gtk_entry_get_text(GTK_ENTRY (profiles_toggle_buttons[index].entry)));
Packit 427e91
	} else {
Packit 427e91
		fprintf(stderr, "No active profile found.\n");
Packit 427e91
		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE);
Packit 427e91
		return -EXIT_FAILURE;
Packit 427e91
	}
Packit 427e91
Packit 427e91
	gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE);
Packit 427e91
Packit 427e91
	return res;
Packit 427e91
}
Packit 427e91
Packit 427e91
void entry_toggle_editable(GtkWidget *toggle_button, GtkWidget *entry)
Packit 427e91
{
Packit 427e91
	gint index;
Packit 427e91
	gint profile_number;
Packit 427e91
Packit 427e91
	if (active_button == toggle_button) {
Packit 427e91
		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (toggle_button), TRUE);
Packit 427e91
		gtk_editable_set_editable(GTK_EDITABLE (entry), TRUE);
Packit 427e91
		gtk_widget_grab_focus(entry);
Packit 427e91
		return;
Packit 427e91
	} else if (GTK_TOGGLE_BUTTON (toggle_button)->active) {
Packit 427e91
		active_button = toggle_button;
Packit 427e91
	}
Packit 427e91
	gtk_editable_set_editable(GTK_EDITABLE (entry), GTK_TOGGLE_BUTTON (toggle_button)->active);
Packit 427e91
	if (GTK_TOGGLE_BUTTON (toggle_button)->active) {
Packit 427e91
		gtk_widget_grab_focus(entry);
Packit 427e91
		profile_number = NOTFOUND;
Packit 427e91
		for (index = 0; index < MAX_PROFILES; index++)
Packit 427e91
		{
Packit 427e91
			if (profiles_toggle_buttons[index].toggle_button != toggle_button) {
Packit 427e91
				gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[index].toggle_button), FALSE);
Packit 427e91
			} else {
Packit 427e91
				profile_number = index + 1;
Packit 427e91
			}
Packit 427e91
		}
Packit 427e91
		if (profile_number >= 0)
Packit 427e91
			restore_active_profile(profile_number);
Packit 427e91
	}
Packit 427e91
}
Packit 427e91
Packit 427e91
void enter_callback( const GtkWidget *widget, const GtkWidget *entry )
Packit 427e91
{
Packit 427e91
	const gchar *entry_text;
Packit 427e91
	entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
Packit 427e91
	printf("Inhalt : %s\n", entry_text);
Packit 427e91
}
Packit 427e91
Packit 427e91
static GtkWidget *toggle_button_entry(const GtkWidget *parent, const gchar *profile_name, const gint index)
Packit 427e91
{
Packit 427e91
	GtkWidget *box;
Packit 427e91
	GtkWidget *entry_label;
Packit 427e91
	GtkWidget *toggle_button;
Packit 427e91
Packit 427e91
	box = gtk_hbox_new(FALSE, 0);
Packit 427e91
Packit 427e91
	toggle_button = gtk_toggle_button_new();
Packit 427e91
	gtk_container_border_width(GTK_CONTAINER(toggle_button), 3);
Packit 427e91
Packit 427e91
	profiles_toggle_buttons[index].entry = entry_label = gtk_entry_new();
Packit 427e91
	gtk_entry_set_max_length(GTK_ENTRY (entry_label), MAX_PROFILE_NAME_LENGTH);
Packit 427e91
	gtk_entry_set_text(GTK_ENTRY (entry_label), profile_name);
Packit 427e91
	/* only the active profile can be modified */
Packit 427e91
	gtk_editable_set_editable(GTK_EDITABLE (entry_label), FALSE);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT (entry_label), "activate",
Packit 427e91
			 GTK_SIGNAL_FUNC (enter_callback),
Packit 427e91
			 (gpointer) entry_label);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT (toggle_button), "toggled",
Packit 427e91
			 GTK_SIGNAL_FUNC (entry_toggle_editable),
Packit 427e91
			 (gpointer) entry_label);
Packit 427e91
Packit 427e91
	gtk_box_pack_start(GTK_BOX (box), entry_label, FALSE, FALSE, 20);
Packit 427e91
	gtk_widget_show(entry_label);
Packit 427e91
	gtk_widget_show(box);
Packit 427e91
	gtk_container_add(GTK_CONTAINER (toggle_button), box);
Packit 427e91
	gtk_widget_show(toggle_button);
Packit 427e91
	return (toggle_button);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *label_card_nr;
Packit 427e91
	GtkWidget *vbox1;
Packit 427e91
	GtkWidget *vbox2;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
	GtkWidget *hbox1;
Packit 427e91
	GtkWidget *save_button;
Packit 427e91
	GtkWidget *delete_button;
Packit 427e91
	GtkObject *card_button_adj;
Packit 427e91
	GtkWidget *card_button;
Packit 427e91
	GtkWidget *scrolledwindow;
Packit 427e91
	GtkWidget *viewport;
Packit 427e91
	gint index;
Packit 427e91
	gint profile_number;
Packit 427e91
	gchar *profile_name;
Packit 427e91
	gint max_profiles;
Packit 427e91
	gint max_digits;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
Packit 427e91
        label = gtk_label_new("Profiles");
Packit 427e91
        gtk_widget_show(label);
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), 
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), 
Packit 427e91
				   label);
Packit 427e91
Packit 427e91
	/* build scrolling area */
Packit 427e91
	scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(scrolledwindow);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
Packit 427e91
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
Packit 427e91
					GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
Packit 427e91
Packit 427e91
	viewport = gtk_viewport_new(NULL, NULL);
Packit 427e91
	gtk_widget_show(viewport);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(viewport), hbox);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
Packit 427e91
Packit 427e91
Packit 427e91
	/* Create button boxes */
Packit 427e91
	vbox1 = gtk_vbutton_box_new();
Packit 427e91
Packit 427e91
	gtk_vbutton_box_set_spacing_default(0);
Packit 427e91
	for (index = 0; index < MAX_PROFILES; index++)	{
Packit 427e91
		profile_name = get_profile_name(index + 1, card_number, profiles_file_name);
Packit 427e91
		profiles_toggle_buttons[index].toggle_button = toggle_button_entry(window, profile_name, index);
Packit 427e91
		gtk_box_pack_start(GTK_BOX (vbox1), profiles_toggle_buttons[index].toggle_button, FALSE, FALSE, 0);
Packit 427e91
	}
Packit 427e91
	gtk_widget_show(vbox1);
Packit 427e91
	gtk_container_border_width(GTK_CONTAINER(vbox1), 6);
Packit 427e91
Packit 427e91
	vbox2 = gtk_vbutton_box_new();
Packit 427e91
	gtk_widget_show(vbox2);
Packit 427e91
	gtk_container_border_width(GTK_CONTAINER(vbox2), 50);
Packit 427e91
Packit 427e91
	hbox1 = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox1);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 20);
Packit 427e91
Packit 427e91
        label_card_nr = gtk_label_new("Card Number:");
Packit 427e91
        gtk_widget_show(label_card_nr);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox1), label_card_nr, FALSE, FALSE, 20);
Packit 427e91
	gtk_label_set_justify(GTK_LABEL(label_card_nr), GTK_JUSTIFY_LEFT);
Packit 427e91
Packit 427e91
	card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 10);
Packit 427e91
	card_number_adj = card_button_adj;
Packit 427e91
	card_button = gtk_spin_button_new(GTK_ADJUSTMENT (card_button_adj), 1, 0);
Packit 427e91
	gtk_widget_show(card_button);
Packit 427e91
	gtk_box_pack_start(GTK_BOX (hbox1), card_button, TRUE, FALSE, 0);
Packit 427e91
	gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (card_button), TRUE);
Packit 427e91
	gtk_adjustment_set_value(GTK_ADJUSTMENT (card_button_adj), card_number);
Packit 427e91
Packit 427e91
	delete_button = gtk_toggle_button_new_with_label("Delete card from profiles");
Packit 427e91
	gtk_widget_show(delete_button);
Packit 427e91
	gtk_box_pack_start(GTK_BOX (vbox2), delete_button, FALSE, FALSE, 20);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT (delete_button), "toggled",
Packit 427e91
			 GTK_SIGNAL_FUNC (delete_card_number),
Packit 427e91
			 NULL);
Packit 427e91
Packit 427e91
	save_button = gtk_toggle_button_new_with_label("Save active profile");
Packit 427e91
	gtk_widget_show(save_button);
Packit 427e91
	gtk_box_pack_end(GTK_BOX (vbox2), save_button, FALSE, FALSE, 20);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT (save_button), "toggled",
Packit 427e91
			 GTK_SIGNAL_FUNC (save_active_profile),
Packit 427e91
			 NULL);
Packit 427e91
Packit 427e91
	gtk_container_add(GTK_CONTAINER(hbox), vbox1);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(hbox), vbox2);
Packit 427e91
Packit 427e91
	if (default_profile != NULL)
Packit 427e91
	{
Packit 427e91
		/*
Packit 427e91
		 * only if default_profile is numerical and lower or equal than MAX_PROFILES it will be a profile_number
Packit 427e91
		 * otherwise it will be a profile name
Packit 427e91
		 */
Packit 427e91
		if (strcspn(default_profile, "0123456789") == 0) {
Packit 427e91
			for (max_profiles = MAX_PROFILES, max_digits = 0; max_profiles > 9; max_digits++, max_profiles /= 10)
Packit 427e91
				;
Packit 427e91
			max_digits++;
Packit 427e91
			if (strlen(default_profile) <= max_digits) {
Packit 427e91
				profile_number = atoi(default_profile);
Packit 427e91
				if (profile_number < 1 || profile_number > MAX_PROFILES)
Packit 427e91
					profile_number = get_profile_number(default_profile, card_number, profiles_file_name);
Packit 427e91
			} else {
Packit 427e91
				profile_number = get_profile_number(default_profile, card_number, profiles_file_name);
Packit 427e91
			}
Packit 427e91
		} else {
Packit 427e91
			profile_number = get_profile_number(default_profile, card_number, profiles_file_name);
Packit 427e91
		}
Packit 427e91
		if ((profile_number > 0) && (profile_number <= MAX_PROFILES)) {
Packit 427e91
			gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[profile_number - 1].toggle_button), TRUE);
Packit 427e91
		} else {
Packit 427e91
			fprintf(stderr, "Cannot find profile '%s' for card '%d'.\n", default_profile, card_number);
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
}
Packit 427e91
Packit 427e91
static void create_outer(GtkWidget *main)
Packit 427e91
{
Packit 427e91
        GtkWidget *hbox1;
Packit 427e91
        GtkWidget *vbox;
Packit 427e91
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *frame;
Packit 427e91
	GtkWidget *drawing;
Packit 427e91
Packit 427e91
	/* Create digital mixer frame */
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 1);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(main), vbox, FALSE, FALSE, 0);
Packit 427e91
Packit 427e91
	label = gtk_label_new(" Rt-clk Menu >>");
Packit 427e91
	//gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 3);
Packit 427e91
	frame = gtk_frame_new("Digital Mixer");
Packit 427e91
	gtk_widget_show(frame);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
Packit 427e91
Packit 427e91
	/* Create controls in the digital mixer frame */
Packit 427e91
Packit 427e91
	vbox = gtk_vbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(vbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(frame), vbox);	
Packit 427e91
Packit 427e91
	hbox1 = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_widget_show(hbox1);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 6);
Packit 427e91
Packit 427e91
	drawing = gtk_drawing_area_new();
Packit 427e91
	mixer_mix_drawing = drawing;
Packit 427e91
	gtk_widget_set_name(drawing, "DigitalMixer");
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox1), drawing, TRUE, FALSE, 6);
Packit 427e91
	if (tall_equal_mixer_ht > 1 ) {
Packit 427e91
		gtk_widget_set_usize(drawing, 60, 264 + 60 * (tall_equal_mixer_ht - 1));
Packit 427e91
	} else {
Packit 427e91
		gtk_widget_set_usize(drawing, 60, 264);
Packit 427e91
	}
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(drawing), "expose_event",
Packit 427e91
			   (GtkSignalFunc)level_meters_expose_event, NULL);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(drawing), "configure_event",
Packit 427e91
			   (GtkSignalFunc)level_meters_configure_event, NULL);
Packit 427e91
	gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK);
Packit 427e91
	gtk_widget_show(drawing);
Packit 427e91
Packit 427e91
	hbox1 = gtk_hbox_new(TRUE, 0);
Packit 427e91
	gtk_widget_show(hbox1);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6);
Packit 427e91
Packit 427e91
	label = gtk_label_new("Left");
Packit 427e91
	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
	label = gtk_label_new("Right");
Packit 427e91
	gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
Packit 427e91
	gtk_widget_show(label);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0);
Packit 427e91
Packit 427e91
Packit 427e91
	mixer_clear_peaks_button = gtk_button_new_with_label("Reset Peaks");
Packit 427e91
	gtk_widget_show(mixer_clear_peaks_button);
Packit 427e91
	gtk_box_pack_start(GTK_BOX(vbox), mixer_clear_peaks_button, TRUE, FALSE, 0);
Packit 427e91
	gtk_container_set_border_width(GTK_CONTAINER(mixer_clear_peaks_button), 4);
Packit 427e91
	gtk_signal_connect(GTK_OBJECT(mixer_clear_peaks_button), "clicked",
Packit 427e91
			   GTK_SIGNAL_FUNC(level_meters_reset_peaks), NULL);
Packit 427e91
}/* End create_outer  */
Packit 427e91
Packit 427e91
static void create_blank(GtkWidget *main, GtkWidget *notebook, int page)
Packit 427e91
{
Packit 427e91
/*	This is a little workaround for a problem with the pop-up menu.
Packit 427e91
	For some reason the label of the last page is not accessed by the menu
Packit 427e91
	so all it shows is 'page 7'.  Here a blank extra page is created, unseen,
Packit 427e91
	which seems to satisfy gtk, and we see the menu last page label correct. AH 12.7.2005 */
Packit 427e91
Packit 427e91
	GtkWidget *label;
Packit 427e91
	GtkWidget *hbox;
Packit 427e91
Packit 427e91
	hbox = gtk_hbox_new(FALSE, 0);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(notebook), hbox);
Packit 427e91
Packit 427e91
        label = gtk_label_new("Blank");
Packit 427e91
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
Packit 427e91
				   gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
Packit 427e91
				   label);
Packit 427e91
}
Packit 427e91
Packit 427e91
static void usage(void)
Packit 427e91
{
Packit 427e91
	fprintf(stderr, "usage: envy24control [-c card#] [-D control-name] [-o num-outputs] [-i num-inputs] [-p num-pcm-outputs] [-s num-spdif-in/outs] [-v] [-f profiles-file] [profile name|profile id] [-m channel-num] [-w initial-window-width] [-t height-num]\n");
Packit 427e91
	fprintf(stderr, "\t-c, --card\tAlsa card number to control\n");
Packit 427e91
	fprintf(stderr, "\t-D, --device\tcontrol-name\n");
Packit 427e91
	fprintf(stderr, "\t-o, --outputs\tLimit number of analog line outputs to display\n");
Packit 427e91
	fprintf(stderr, "\t-i, --input\tLimit number of analog line inputs to display\n");
Packit 427e91
	fprintf(stderr, "\t-p, --pcm_output\tLimit number of PCM outputs to display\n");
Packit 427e91
	fprintf(stderr, "\t-s, --spdif\tLimit number of spdif inputs/outputs to display\n");
Packit 427e91
	fprintf(stderr, "\t-v, --view_spdif_playback\tshows the spdif playback channels in the mixer\n");
Packit 427e91
	fprintf(stderr, "\t-f, --profiles_file\tuse file as profiles file\n");
Packit 427e91
	fprintf(stderr, "\t-m, --midichannel\tmidi channel number for controller control\n");
Packit 427e91
	fprintf(stderr, "\t-M, --midienhanced\tUse an enhanced mapping from midi controller to db slider\n");
Packit 427e91
	fprintf(stderr, "\t-w, --window_width\tSet initial window width (try 2,6 or 8; 280,626, or 968)\n");
Packit 427e91
	fprintf(stderr, "\t-t, --tall_eq_mixer_heights\tSet taller height mixer displays (1-9)\n");
Packit 427e91
}
Packit 427e91
Packit 427e91
int main(int argc, char **argv)
Packit 427e91
{
Packit 427e91
        GtkWidget *notebook;
Packit 427e91
	GtkWidget *outerbox;
Packit 427e91
        char *name, tmpname[8], title[128];
Packit 427e91
	int i, c, err;
Packit 427e91
	snd_ctl_card_info_t *hw_info;
Packit 427e91
	snd_ctl_elem_value_t *val;
Packit 427e91
	int npfds;
Packit 427e91
	struct pollfd *pfds;
Packit 427e91
	int midi_fd = -1, midi_channel = -1, midi_enhanced = 0;
Packit 427e91
	int page;
Packit 427e91
	int input_channels_set = 0;
Packit 427e91
	int output_channels_set = 0;
Packit 427e91
	int pcm_output_channels_set = 0;
Packit 427e91
	int width_val;
Packit 427e91
	int wwidth_set =FALSE;
Packit 427e91
	int wwidth = 796;
Packit 427e91
	const int chanwidth = 86;
Packit 427e91
	const int fixwidth = 108;
Packit 427e91
Packit 427e91
	static struct option long_options[] = {
Packit 427e91
		{"device", 1, 0, 'D'},
Packit 427e91
		{"card", 1, 0, 'c'},
Packit 427e91
		{"profiles_file", 1, 0, 'f'},
Packit 427e91
		{"inputs", 1, 0, 'i'},
Packit 427e91
		{"midichannel", 1, 0, 'm'},
Packit 427e91
		{"midienhanced", 0, 0, 'M'},
Packit 427e91
		{"outputs", 1, 0, 'o'},
Packit 427e91
		{"pcm_outputs", 1, 0, 'p'},
Packit 427e91
		{"spdif", 1, 0, 's'},
Packit 427e91
		{"window_width", 1, 0, 'w'},
Packit 427e91
		{"view_spdif_playback", 0, 0, 'v'},
Packit 427e91
		{"tall_eq_mixer_heights", 1, 0, 't'},
Packit 427e91
		{ NULL }
Packit 427e91
	};
Packit 427e91
Packit 427e91
Packit 427e91
	snd_ctl_card_info_alloca(&hw_info);
Packit 427e91
	snd_ctl_elem_value_alloca(&val;;
Packit 427e91
Packit 427e91
	/* Go through gtk initialization */
Packit 427e91
        gtk_init(&argc, &argv);
Packit 427e91
Packit 427e91
	name = NULL; /* probe */
Packit 427e91
	card_number = 0;
Packit 427e91
	input_channels = MAX_INPUT_CHANNELS;
Packit 427e91
	output_channels = MAX_OUTPUT_CHANNELS;
Packit 427e91
	pcm_output_channels = MAX_PCM_OUTPUT_CHANNELS;
Packit 427e91
	spdif_channels = MAX_SPDIF_CHANNELS;
Packit 427e91
	view_spdif_playback = 0;
Packit 427e91
	profiles_file_name = DEFAULT_PROFILERC;
Packit 427e91
	default_profile = NULL;
Packit 427e91
	while ((c = getopt_long(argc, argv, "D:c:f:i:m:Mo:p:s:w:vt:", long_options, NULL)) != -1) {
Packit 427e91
		switch (c) {
Packit 427e91
		case 'D':
Packit 427e91
			name = optarg;
Packit 427e91
			card_number = atoi(strchr(name, ':') + sizeof(char));
Packit 427e91
			if (card_number < 0 || card_number >= MAX_CARD_NUMBERS) {
Packit 427e91
				fprintf(stderr, "envy24control: invalid card number %d\n", card_number);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			break;
Packit 427e91
		case 'c':
Packit 427e91
			i = atoi(optarg);
Packit 427e91
			if (i < 0 || i >= MAX_CARD_NUMBERS) {
Packit 427e91
				fprintf(stderr, "envy24control: invalid card number %d\n", i);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			card_number = i;
Packit 427e91
			sprintf(tmpname, "hw:%d", i);
Packit 427e91
			name = tmpname;
Packit 427e91
			break;
Packit 427e91
		case 'f':
Packit 427e91
			profiles_file_name = optarg;
Packit 427e91
			break;
Packit 427e91
		case 'i':
Packit 427e91
			input_channels = atoi(optarg);
Packit 427e91
			if (input_channels < 0 || input_channels > MAX_INPUT_CHANNELS) {
Packit 427e91
				fprintf(stderr, "envy24control: must have 0-%i inputs\n", MAX_INPUT_CHANNELS);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			input_channels_set = 1;
Packit 427e91
			break;
Packit 427e91
		case 'm':
Packit 427e91
			midi_channel = atoi(optarg);
Packit 427e91
			if (midi_channel < 1 || midi_channel > 16) {
Packit 427e91
				fprintf(stderr, "envy24control: invalid midi channel number %i\n", midi_channel);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			--midi_channel;
Packit 427e91
			break;
Packit 427e91
		case 'M': midi_enhanced = 1; break;
Packit 427e91
		case 'o':
Packit 427e91
			output_channels = atoi(optarg);
Packit 427e91
			if (output_channels < 0 || output_channels > MAX_OUTPUT_CHANNELS) {
Packit 427e91
				fprintf(stderr, "envy24control: must have 0-%i outputs\n", MAX_OUTPUT_CHANNELS);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			output_channels_set = 1;
Packit 427e91
			break;
Packit 427e91
		case 'p':
Packit 427e91
			pcm_output_channels = atoi(optarg);
Packit 427e91
			if (pcm_output_channels < 0 || pcm_output_channels > MAX_PCM_OUTPUT_CHANNELS) {
Packit 427e91
				fprintf(stderr, "envy24control: must have 0-%i pcm outputs\n", MAX_PCM_OUTPUT_CHANNELS);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			pcm_output_channels_set = 1;
Packit 427e91
			break;
Packit 427e91
		case 's':
Packit 427e91
			spdif_channels = atoi(optarg);
Packit 427e91
			if (spdif_channels < 0 || spdif_channels > MAX_SPDIF_CHANNELS) {
Packit 427e91
				fprintf(stderr, "envy24control: must have 0-%i spdifs\n", MAX_SPDIF_CHANNELS);
Packit 427e91
				exit(1);
Packit 427e91
			}
Packit 427e91
			break;
Packit 427e91
		case 'w':
Packit 427e91
			width_val = atoi(optarg);
Packit 427e91
			if ((width_val >= 1) && (width_val <= 20)) {
Packit 427e91
				wwidth = (width_val * chanwidth + fixwidth);
Packit 427e91
			} else {
Packit 427e91
				wwidth = width_val;
Packit 427e91
			}
Packit 427e91
			wwidth_set = TRUE;
Packit 427e91
			break;
Packit 427e91
		case 'v':
Packit 427e91
			view_spdif_playback = 1;
Packit 427e91
			break;
Packit 427e91
		case 't':
Packit 427e91
			tall_equal_mixer_ht = atoi(optarg);
Packit 427e91
			if ((tall_equal_mixer_ht < 0) || (tall_equal_mixer_ht >= 10))
Packit 427e91
				tall_equal_mixer_ht = 0;
Packit 427e91
			break;
Packit 427e91
		default:
Packit 427e91
			usage();
Packit 427e91
			exit(1);
Packit 427e91
			break;
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
	if (optind < argc) {
Packit 427e91
		default_profile = argv[optind];
Packit 427e91
	}
Packit 427e91
Packit 427e91
	if (! name) {
Packit 427e91
		/* probe cards */
Packit 427e91
		static char cardname[8];
Packit 427e91
		/* FIXME: hardcoded max number of cards */
Packit 427e91
		for (card_number = 0; card_number < 8; card_number++) {
Packit 427e91
			sprintf(cardname, "hw:%d", card_number);
Packit 427e91
			if (snd_ctl_open(&ctl, cardname, 0) < 0)
Packit 427e91
				continue;
Packit 427e91
			if (snd_ctl_card_info(ctl, hw_info) < 0 ||
Packit 427e91
			    strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
Packit 427e91
				snd_ctl_close(ctl);
Packit 427e91
				continue;
Packit 427e91
			}
Packit 427e91
			/* found */
Packit 427e91
			name = cardname;
Packit 427e91
			break;
Packit 427e91
		}
Packit 427e91
		if (! name) {
Packit 427e91
			fprintf(stderr, "No ICE1712 cards found\n");
Packit 427e91
			exit(EXIT_FAILURE);
Packit 427e91
		}
Packit 427e91
	} else {
Packit 427e91
		if ((err = snd_ctl_open(&ctl, name, 0)) < 0) {
Packit 427e91
			fprintf(stderr, "snd_ctl_open: %s\n", snd_strerror(err));
Packit 427e91
			exit(EXIT_FAILURE);
Packit 427e91
		}
Packit 427e91
		if ((err = snd_ctl_card_info(ctl, hw_info)) < 0) {
Packit 427e91
			fprintf(stderr, "snd_ctl_card_info: %s\n", snd_strerror(err));
Packit 427e91
			exit(EXIT_FAILURE);
Packit 427e91
		}
Packit 427e91
		if (strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
Packit 427e91
			fprintf(stderr, "invalid card type (driver is %s)\n", snd_ctl_card_info_get_driver(hw_info));
Packit 427e91
			exit(EXIT_FAILURE);
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
Packit 427e91
	snd_ctl_elem_value_set_interface(val, SND_CTL_ELEM_IFACE_CARD);
Packit 427e91
	snd_ctl_elem_value_set_name(val, "ICE1712 EEPROM");
Packit 427e91
	if ((err = snd_ctl_elem_read(ctl, val)) < 0) {
Packit 427e91
		fprintf(stderr, "Unable to read EEPROM contents: %s\n", snd_strerror(err));
Packit 427e91
		exit(EXIT_FAILURE);
Packit 427e91
	}
Packit 427e91
	memcpy(&card_eeprom, snd_ctl_elem_value_get_bytes(val), 32);
Packit 427e91
Packit 427e91
	if(card_eeprom.subvendor == ICE1712_SUBDEVICE_DMX6FIRE)
Packit 427e91
		card_is_dmx6fire = TRUE;
Packit 427e91
Packit 427e91
	/* Set a better default for input_channels and output_channels */
Packit 427e91
	if(!input_channels_set)
Packit 427e91
		if(card_is_dmx6fire)
Packit 427e91
			input_channels = 6;
Packit 427e91
Packit 427e91
	if(!output_channels_set)
Packit 427e91
		if(card_is_dmx6fire)
Packit 427e91
			output_channels = 6;
Packit 427e91
Packit 427e91
	if(!pcm_output_channels_set)
Packit 427e91
		if(card_is_dmx6fire)
Packit 427e91
			pcm_output_channels = 6; /* PCMs 7&8 can be used -set using option -p8 */
Packit 427e91
Packit 427e91
	if (!wwidth_set)
Packit 427e91
		if (card_is_dmx6fire)
Packit 427e91
			wwidth = 626;
Packit 427e91
Packit 427e91
Packit 427e91
	/* Initialize code */
Packit 427e91
	config_open();
Packit 427e91
	level_meters_init();
Packit 427e91
	mixer_init();
Packit 427e91
	patchbay_init();
Packit 427e91
	hardware_init();
Packit 427e91
	analog_volume_init();
Packit 427e91
	if (midi_channel >= 0)
Packit 427e91
		midi_fd = midi_init(argv[0], midi_channel, midi_enhanced);
Packit 427e91
Packit 427e91
	fprintf(stderr, "using\t --- input_channels: %i\n\t --- output_channels: %i\n\t --- pcm_output_channels: %i\n\t --- spdif in/out channels: %i\n", \
Packit 427e91
		input_channels, output_channels, pcm_output_channels, spdif_channels);
Packit 427e91
Packit 427e91
        /* Make the title */
Packit 427e91
        sprintf(title, "Envy24 Control Utility %s (%s)", VERSION, snd_ctl_card_info_get_longname(hw_info));
Packit 427e91
Packit 427e91
        /* Create the main window */
Packit 427e91
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
Packit 427e91
        gtk_window_set_title(GTK_WINDOW(window), title);
Packit 427e91
        gtk_signal_connect(GTK_OBJECT (window), "delete_event", 
Packit 427e91
                           (GtkSignalFunc) gtk_main_quit, NULL);
Packit 427e91
        signal(SIGINT, (void *)gtk_main_quit);
Packit 427e91
Packit 427e91
	gtk_window_set_default_size(GTK_WINDOW(window), wwidth, 300);
Packit 427e91
Packit 427e91
	outerbox = gtk_hbox_new(FALSE, 3);
Packit 427e91
	gtk_widget_show(outerbox);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(window), outerbox);
Packit 427e91
Packit 427e91
	create_outer(outerbox);
Packit 427e91
Packit 427e91
        /* Create the notebook */
Packit 427e91
        notebook = gtk_notebook_new();
Packit 427e91
	gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
Packit 427e91
	gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook));
Packit 427e91
        gtk_widget_show(notebook);
Packit 427e91
	gtk_container_add(GTK_CONTAINER(outerbox), notebook);
Packit 427e91
Packit 427e91
	page = 0;
Packit 427e91
Packit 427e91
	create_inputs_mixer(outerbox, notebook, page++);
Packit 427e91
	create_pcms_mixer(outerbox, notebook, page++);
Packit 427e91
	create_router(outerbox, notebook, page++);
Packit 427e91
	create_hardware(outerbox, notebook, page++);
Packit 427e91
	if (envy_analog_volume_available())
Packit 427e91
		create_analog_volume(outerbox, notebook, page++);
Packit 427e91
	create_profiles(outerbox, notebook, page++);
Packit 427e91
	create_about(outerbox, notebook, page++);
Packit 427e91
	create_blank(outerbox, notebook, page++);
Packit 427e91
Packit 427e91
	npfds = snd_ctl_poll_descriptors_count(ctl);
Packit 427e91
	if (npfds > 0) {
Packit 427e91
		pfds = alloca(sizeof(*pfds) * npfds);
Packit 427e91
		npfds = snd_ctl_poll_descriptors(ctl, pfds, npfds);
Packit 427e91
		for (i = 0; i < npfds; i++)
Packit 427e91
			gdk_input_add(pfds[i].fd,
Packit 427e91
				      GDK_INPUT_READ,
Packit 427e91
				      control_input_callback,
Packit 427e91
				      ctl);
Packit 427e91
		snd_ctl_subscribe_events(ctl, 1);
Packit 427e91
	}
Packit 427e91
	if (midi_fd >= 0) {
Packit 427e91
		gdk_input_add(midi_fd, GDK_INPUT_READ, midi_process, NULL);
Packit 427e91
	}
Packit 427e91
	gtk_timeout_add(40, level_meters_timeout_callback, NULL);
Packit 427e91
	gtk_timeout_add(100, master_clock_status_timeout_callback, NULL);
Packit 427e91
	gtk_timeout_add(100, internal_clock_status_timeout_callback, NULL);
Packit 427e91
	gtk_timeout_add(100, rate_locking_status_timeout_callback, NULL);
Packit 427e91
	gtk_timeout_add(100, rate_reset_status_timeout_callback, NULL);
Packit 427e91
Packit 427e91
Packit 427e91
	gtk_widget_show(window);
Packit 427e91
Packit 427e91
	level_meters_postinit();
Packit 427e91
	mixer_postinit();
Packit 427e91
	patchbay_postinit();	
Packit 427e91
	hardware_postinit();
Packit 427e91
	analog_volume_postinit();
Packit 427e91
Packit 427e91
	gtk_main();
Packit 427e91
Packit 427e91
	snd_ctl_close(ctl);
Packit 427e91
	midi_close();
Packit 427e91
	config_close();
Packit 427e91
Packit 427e91
	return EXIT_SUCCESS;
Packit 427e91
}