Commit | Line | Data |
---|---|---|
ef79bbde P |
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 | } |