pcsxr-1.9.92
[pcsx_rearmed.git] / plugins / dfsound / spucfg-0.1df / main.c
1 #include "config.h"
2
3 #include <unistd.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7 #include <sys/stat.h>
8
9 #include <glade/glade.h>
10 #include <gtk/gtk.h>
11
12 #ifdef ENABLE_NLS
13 #include <libintl.h>
14 #include <locale.h>
15 #endif
16
17 #define READBINARY "rb"
18 #define WRITEBINARY "wb"
19 #define CONFIG_FILENAME "dfsound.cfg"
20
21 void SaveConfig(GtkWidget *widget, gpointer user_datal);
22
23 /*      This function checks for the value being outside the accepted range,
24         and returns the appropriate boundary value */
25 int set_limit (char *p, int len, int lower, int upper)
26 {
27         int val = 0;
28
29         if (p)
30             val = atoi(p + len);
31
32         if (val < lower)
33             val = lower;
34         if (val > upper)
35             val = upper;
36
37     return val;
38 }
39
40 void on_about_clicked (GtkWidget *widget, gpointer user_data)
41 {
42         gtk_widget_destroy (widget);
43         exit (0);
44 }
45
46 void OnConfigClose(GtkWidget *widget, gpointer user_data)
47 {
48         GladeXML *xml = (GladeXML *)user_data;
49
50         gtk_widget_destroy(glade_xml_get_widget(xml, "CfgWnd"));
51         gtk_exit(0);
52 }
53
54 int main(int argc, char *argv[])
55 {
56     GtkWidget *widget;
57     GladeXML *xml;
58     FILE *in;
59     char t[256];
60     int len, val = 0;
61     char *pB, *p;
62     char cfg[255];
63
64 #ifdef ENABLE_NLS
65     setlocale (LC_ALL, "");
66     bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
67     bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
68     textdomain (GETTEXT_PACKAGE);
69 #endif
70
71     if (argc != 2) {
72         printf ("Usage: cfgDFSound {ABOUT | CFG}\n");
73                 return 0;
74         }
75
76     if (strcmp(argv[1], "CFG") != 0 && strcmp(argv[1], "ABOUT") != 0) {
77                 printf ("Usage: cfgDFSound {ABOUT | CFG}\n");
78                 return 0;
79     }
80
81     gtk_set_locale();
82     gtk_init(&argc, &argv);
83
84     if (strcmp(argv[1], "ABOUT") == 0) {
85                 const char *authors[]= {"Pete Bernert and the P.E.Op.S. team", "Ryan Schultz", "Andrew Burton", NULL};
86                 widget = gtk_about_dialog_new ();
87                 gtk_about_dialog_set_name (GTK_ABOUT_DIALOG (widget), "dfsound PCSX Sound Plugin");
88                 gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (widget), "1.6");
89                 gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (widget), authors);
90                 gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (widget), "http://pcsx-df.sourceforge.net/");
91
92                 g_signal_connect_data(GTK_OBJECT(widget), "response",
93                         GTK_SIGNAL_FUNC(on_about_clicked), NULL, NULL, G_CONNECT_AFTER);
94
95                 gtk_widget_show (widget);
96                 gtk_main();
97
98                 return 0;
99     }
100
101     xml = glade_xml_new(DATADIR "dfsound.glade2", "CfgWnd", NULL);
102     if (!xml) {
103                 g_warning("We could not load the interface!");
104                 return 255;
105     }
106
107     strcpy(cfg, CONFIG_FILENAME);
108
109     in = fopen(cfg, READBINARY);
110     if (in) {
111                 pB = (char *)malloc(32767);
112                 memset(pB, 0, 32767);
113                 len = fread(pB, 1, 32767, in);
114                 fclose(in);
115     } else {
116                 pB = 0;
117                 printf ("Error - no configuration file\n");
118                 /* TODO Raise error - no configuration file */
119     }
120
121         /* ADB TODO Replace a lot of the following with common functions */
122     if (pB) {
123                 strcpy(t, "\nVolume");
124                 p = strstr(pB, t);
125                 if (p) {
126                     p = strstr(p, "=");
127                 len = 1;
128                 }
129             val = set_limit (p, len, 0, 4);
130     } else val = 2;
131
132     gtk_combo_box_set_active(GTK_COMBO_BOX (glade_xml_get_widget(xml, "cbVolume2")), val);
133
134     if (pB) {
135         strcpy(t, "\nUseInterpolation");
136         p = strstr(pB, t);
137         if (p) {
138             p = strstr(p, "=");
139             len = 1;
140         }
141             val = set_limit (p, len, 0, 3);
142     } else val = 2;
143
144     gtk_combo_box_set_active(GTK_COMBO_BOX (glade_xml_get_widget(xml, "cbInterpolation2")), val);
145
146     if (pB) {
147                 strcpy(t, "\nXAPitch");
148                 p = strstr(pB, t);
149                 if (p) {
150                     p = strstr(p, "=");
151                 len = 1;
152                 }
153                 val = set_limit (p, len, 0, 1);
154     } else val = 0;
155
156     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (glade_xml_get_widget(xml, "chkXASpeed")), val);
157
158     if (pB) {
159                 strcpy(t, "\nHighCompMode");
160                 p = strstr(pB, t);
161                 if (p) {
162                     p = strstr(p, "=");
163                 len = 1;
164                 }
165                 val = set_limit (p, len, 0, 1);
166     } else val = 0;
167
168     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (glade_xml_get_widget(xml, "chkHiCompat")), val);
169
170     if (pB) {
171                 strcpy(t, "\nSPUIRQWait");
172                 p = strstr(pB, t);
173                 if (p) {
174                     p = strstr(p, "=");
175                     len = 1;
176                 }
177
178                 val = set_limit (p, len, 0, 1);
179     } else val = 1;
180
181     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (glade_xml_get_widget(xml, "chkIRQWait")), val);
182
183     if (pB) {
184                 strcpy(t, "\nDisStereo");
185                 p = strstr(pB, t);
186                 if (p) {
187                     p = strstr(p, "=");
188                     len = 1;
189                 }
190
191                 val = set_limit (p, len, 0, 1);
192     } else val = 0;
193
194     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (glade_xml_get_widget(xml, "chkDisStereo")), val);
195
196     if (pB) {
197                 strcpy(t, "\nUseReverb");
198                 p = strstr(pB, t);
199                 if (p) {
200                     p = strstr(p, "=");
201                     len = 1;
202                 }
203                 val = set_limit (p, len, 0, 2);
204     } else val = 2;
205
206     gtk_combo_box_set_active(GTK_COMBO_BOX(glade_xml_get_widget(xml, "cbReverb2")), val);
207
208     if (pB)
209                 free(pB);
210
211         widget = glade_xml_get_widget(xml, "CfgWnd");
212         g_signal_connect_data(GTK_OBJECT(widget), "destroy",
213                 GTK_SIGNAL_FUNC(SaveConfig), xml, NULL, 0);
214
215         widget = glade_xml_get_widget(xml, "btn_close");
216         g_signal_connect_data(GTK_OBJECT(widget), "clicked",
217                 GTK_SIGNAL_FUNC(OnConfigClose), xml, NULL, G_CONNECT_AFTER);
218
219     gtk_main();
220     return 0;
221 }
222
223 void SaveConfig(GtkWidget *widget, gpointer user_data)
224 {
225         GladeXML *xml = (GladeXML *)user_data;
226         FILE *fp;
227         int val;
228
229         fp = fopen(CONFIG_FILENAME, WRITEBINARY);
230         if (fp == NULL) {
231                 fprintf(stderr, "Unable to write to configuration file %s!\n", CONFIG_FILENAME);
232                 gtk_exit(0);
233         }
234
235         val = gtk_combo_box_get_active(GTK_COMBO_BOX(glade_xml_get_widget(xml, "cbVolume2")));
236         fprintf(fp, "\nVolume = %d\n", val);
237
238         val = gtk_combo_box_get_active(GTK_COMBO_BOX(glade_xml_get_widget(xml, "cbInterpolation2")));
239         fprintf(fp, "\nUseInterpolation = %d\n", val);
240
241         val = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "chkXASpeed")));
242         fprintf(fp, "\nXAPitch = %d\n", val);
243
244         val = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "chkHiCompat")));
245         fprintf(fp, "\nHighCompMode = %d\n", val);
246
247         val = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "chkIRQWait")));
248         fprintf(fp, "\nSPUIRQWait = %d\n", val);
249
250         val = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "chkDisStereo")));
251         fprintf(fp, "\nDisStereo = %d\n", val);
252
253         val = gtk_combo_box_get_active(GTK_COMBO_BOX(glade_xml_get_widget(xml, "cbReverb2")));
254         fprintf(fp, "\nUseReverb = %d\n", val);
255
256         fclose(fp);
257         gtk_exit(0);
258 }