| 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 | } |