Commit | Line | Data |
---|---|---|
ef79bbde P |
1 | #include "config.h" |
2 | ||
3 | #include <gtk/gtk.h> | |
4 | ||
5 | #include "interface.h" | |
6 | #include "support.h" | |
7 | #include <unistd.h> | |
8 | #include <stdio.h> | |
9 | #include <stdlib.h> | |
10 | #include <string.h> | |
11 | ||
12 | #ifdef ENABLE_NLS | |
13 | #include <libintl.h> | |
14 | #include <locale.h> | |
15 | #endif | |
16 | ||
17 | #define SETCHECK(winame) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON ((GtkWidget*) gtk_object_get_data (GTK_OBJECT (CfgWnd),winame)), TRUE) | |
18 | #define SETEDIT(winame,sz) gtk_entry_set_text(GTK_ENTRY((GtkWidget*) gtk_object_get_data (GTK_OBJECT (CfgWnd),winame)), sz) | |
19 | #define SETEDITVAL(winame,v) sprintf(t,"%d",v);gtk_entry_set_text(GTK_ENTRY((GtkWidget*) gtk_object_get_data (GTK_OBJECT (CfgWnd),winame)), t) | |
20 | #define SETLIST(winame,v) gtk_list_select_item(GTK_LIST(GTK_COMBO((GtkWidget*) gtk_object_get_data (GTK_OBJECT (CfgWnd),winame))->list),v) | |
21 | ||
22 | static GtkWidget * wndMain=0; | |
23 | ||
24 | int main (int argc, char *argv[]) | |
25 | { | |
26 | GtkWidget *CfgWnd; | |
27 | FILE *in;char t[256];int len,val; | |
28 | char * pB, * p; | |
29 | ||
30 | if(argc!=2) return 0; | |
31 | if(strcmp(argv[1],"CFG")!=0 && strcmp(argv[1],"ABOUT")!=0) | |
32 | return 0; | |
33 | ||
34 | #ifdef ENABLE_NLS | |
35 | setlocale (LC_ALL, ""); | |
36 | bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR); | |
37 | bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); | |
38 | textdomain (GETTEXT_PACKAGE); | |
39 | #endif | |
40 | ||
41 | gtk_set_locale (); | |
42 | gtk_init (&argc, &argv); | |
43 | ||
44 | if (strcmp(argv[1],"ABOUT") == 0) | |
45 | { | |
46 | CfgWnd = create_AboutWnd (); | |
47 | gtk_widget_show (CfgWnd); | |
48 | gtk_main (); | |
49 | return 0; | |
50 | } | |
51 | ||
52 | CfgWnd = create_CfgWnd (); | |
53 | wndMain = CfgWnd; | |
54 | ||
55 | in = fopen("gpuPeopsMesaGL.cfg","rb"); | |
56 | if(in) | |
57 | { | |
58 | pB=(char *)malloc(32767); | |
59 | memset(pB,0,32767); | |
60 | len = fread(pB, 1, 32767, in); | |
61 | fclose(in); | |
62 | } | |
63 | else pB=0; | |
64 | ||
65 | val=640; | |
66 | if(pB) | |
67 | { | |
68 | strcpy(t,"\nResX");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
69 | if(p) val=atoi(p+len); | |
70 | if(val<10) val=10; | |
71 | } | |
72 | SETEDITVAL("edtXSize",val); | |
73 | ||
74 | val=480; | |
75 | if(pB) | |
76 | { | |
77 | strcpy(t,"\nResY");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
78 | if(p) val=atoi(p+len); | |
79 | if(val<10) val=10; | |
80 | } | |
81 | SETEDITVAL("edtYSize",val); | |
82 | ||
83 | val=0; | |
84 | if(pB) | |
85 | { | |
86 | strcpy(t,"\nKeepRatio");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
87 | if(p) val=atoi(p+len); | |
88 | if(val<0) val=0; | |
89 | if(val>1) val=1; | |
90 | } | |
91 | if(val) SETCHECK("chkKeepRatio"); | |
92 | ||
93 | val=0; | |
94 | if(pB) | |
95 | { | |
96 | strcpy(t,"\nVRamSize");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
97 | if(p) val=atoi(p+len); | |
98 | if(val<0) val=0; | |
99 | if(val>1024) val=1024; | |
100 | } | |
101 | SETEDITVAL("edtMaxTex",val); | |
102 | ||
103 | val=0; | |
104 | if(pB) | |
105 | { | |
106 | strcpy(t,"\n15bitMdec");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
107 | if(p) val=atoi(p+len); | |
108 | if(val<0) val=0; | |
109 | if(val>1) val=1; | |
110 | } | |
111 | if(val) SETCHECK("chk15bitMdec"); | |
112 | ||
113 | val=0; | |
114 | if(pB) | |
115 | { | |
116 | strcpy(t,"\nHiResTextures");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
117 | if(p) val=atoi(p+len); | |
118 | if(val<0) val=0; | |
119 | if(val>2) val=2; | |
120 | } | |
121 | SETLIST("cmbHiresTex",val); | |
122 | ||
123 | val=0; | |
124 | if(pB) | |
125 | { | |
126 | strcpy(t,"\nFullScreen");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
127 | if(p) val=atoi(p+len); | |
128 | if(val<0) val=0; | |
129 | if(val>1) val=1; | |
130 | } | |
131 | if(val) SETCHECK("chkFullScreen"); | |
132 | ||
133 | val=0; | |
134 | if(pB) | |
135 | { | |
136 | strcpy(t,"\nScanLines");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
137 | if(p) val=atoi(p+len); | |
138 | if(val<0) val=0; | |
139 | if(val>1) val=1; | |
140 | } | |
141 | if(val) SETCHECK("chkScanlines"); | |
142 | ||
143 | val=0; | |
144 | if(pB) | |
145 | { | |
146 | strcpy(t,"\nScanLinesBlend");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
147 | if(p) val=atoi(p+len); | |
148 | if(val<-1) val=-1; | |
149 | if(val>255) val=255; | |
150 | } | |
151 | SETEDITVAL("edtScanBlend",val); | |
152 | ||
153 | val=1; | |
154 | if(pB) | |
155 | { | |
156 | strcpy(t,"\nFrameTextures");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
157 | if(p) val=atoi(p+len); | |
158 | if(val<0) val=0; | |
159 | if(val>3) val=3; | |
160 | } | |
161 | SETLIST("cmbFrameTex",val); | |
162 | ||
163 | val=0; | |
164 | if(pB) | |
165 | { | |
166 | strcpy(t,"\nFrameAccess");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
167 | if(p) val=atoi(p+len); | |
168 | if(val<0) val=0; | |
169 | if(val>4) val=4; | |
170 | } | |
171 | SETLIST("cmbFrameAcc",val); | |
172 | ||
173 | val=0; | |
174 | if(pB) | |
175 | { | |
176 | strcpy(t,"\nTexFilter");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
177 | if(p) val=atoi(p+len); | |
178 | if(val<0) val=0; | |
179 | if(val>6) val=6; | |
180 | } | |
181 | SETLIST("cmbFilter",val); | |
182 | ||
183 | val=0; | |
184 | if(pB) | |
185 | { | |
186 | strcpy(t,"\nAdvancedBlend");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
187 | if(p) val=atoi(p+len); | |
188 | if(val<0) val=0; | |
189 | if(val>1) val=1; | |
190 | } | |
191 | if(val) SETCHECK("chkABlend"); | |
192 | ||
193 | val=0; | |
194 | if(pB) | |
195 | { | |
196 | strcpy(t,"\nDithering");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
197 | if(p) val=atoi(p+len); | |
198 | if(val<0) val=0; | |
199 | if(val>1) val=1; | |
200 | } | |
201 | if(val) SETCHECK("chkDither"); | |
202 | ||
203 | val=0; | |
204 | if(pB) | |
205 | { | |
206 | strcpy(t,"\nLineMode");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
207 | if(p) val=atoi(p+len); | |
208 | if(val<0) val=0; | |
209 | if(val>1) val=1; | |
210 | } | |
211 | if(val) SETCHECK("chkLinemode"); | |
212 | ||
213 | val=0; | |
214 | if(pB) | |
215 | { | |
216 | strcpy(t,"\nShowFPS");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
217 | if(p) val=atoi(p+len); | |
218 | if(val<0) val=0; | |
219 | if(val>1) val=1; | |
220 | } | |
221 | if(val) SETCHECK("chkShowFPS"); | |
222 | ||
223 | val=1; | |
224 | if(pB) | |
225 | { | |
226 | strcpy(t,"\nUseFrameLimit");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
227 | if(p) val=atoi(p+len); | |
228 | if(val<0) val=0; | |
229 | if(val>1) val=1; | |
230 | } | |
231 | if(val) SETCHECK("chkFPSLimit"); | |
232 | ||
233 | val=0; | |
234 | if(pB) | |
235 | { | |
236 | strcpy(t,"\nUseFrameSkip");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
237 | if(p) val=atoi(p+len); | |
238 | if(val<0) val=0; | |
239 | if(val>1) val=1; | |
240 | } | |
241 | if(val) SETCHECK("chkFPSSkip"); | |
242 | ||
243 | val=2; | |
244 | if(pB) | |
245 | { | |
246 | strcpy(t,"\nFPSDetection");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
247 | if(p) val=atoi(p+len)+1; | |
248 | if(val<1) val=1; | |
249 | if(val>2) val=2; | |
250 | } | |
251 | if(val==2) SETCHECK("rdbLimAuto"); | |
252 | if(val==1) SETCHECK("rdbLimMan"); | |
253 | ||
254 | val=200; | |
255 | if(pB) | |
256 | { | |
257 | strcpy(t,"\nFrameRate");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
258 | if(p) val=atoi(p+len); | |
259 | if(val<0) val=0; | |
260 | if(val>1000) val=1000; | |
261 | } | |
262 | SETEDITVAL("edtFPSlim",val); | |
263 | ||
264 | val=2; | |
265 | if(pB) | |
266 | { | |
267 | strcpy(t,"\nOffscreenDrawing");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
268 | if(p) val=atoi(p+len); | |
269 | if(val<0) val=0; | |
270 | if(val>4) val=4; | |
271 | } | |
272 | SETLIST("cmbOffscreen",val); | |
273 | ||
274 | val=1; | |
275 | if(pB) | |
276 | { | |
277 | strcpy(t,"\nOpaquePass");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
278 | if(p) val=atoi(p+len); | |
279 | if(val<0) val=0; | |
280 | if(val>1) val=1; | |
281 | } | |
282 | if(val) SETCHECK("chkOpaque"); | |
283 | ||
284 | val=0; | |
285 | if(pB) | |
286 | { | |
287 | strcpy(t,"\nAntiAlias");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
288 | if(p) val=atoi(p+len); | |
289 | if(val<0) val=0; | |
290 | if(val>1) val=1; | |
291 | } | |
292 | if(val) SETCHECK("chkAntiA"); | |
293 | ||
294 | val=0; | |
295 | if(pB) | |
296 | { | |
297 | strcpy(t,"\nTexQuality");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
298 | if(p) val=atoi(p+len); | |
299 | if(val<0) val=0; | |
300 | if(val>4) val=4; | |
301 | } | |
302 | SETLIST("cmbQuality",val); | |
303 | ||
304 | val=0; | |
305 | if(pB) | |
306 | { | |
307 | strcpy(t,"\nMaskDetect");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
308 | if(p) val=atoi(p+len); | |
309 | if(val<0) val=0; | |
310 | if(val>1) val=1; | |
311 | } | |
312 | if(val) SETCHECK("chkMaskBit"); | |
313 | ||
314 | val=1; | |
315 | if(pB) | |
316 | { | |
317 | strcpy(t,"\nFastMdec");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
318 | if(p) val=atoi(p+len); | |
319 | if(val<0) val=0; | |
320 | if(val>1) val=1; | |
321 | } | |
322 | if(val) SETCHECK("chkFastMdec"); | |
323 | ||
324 | val=0; | |
325 | if(pB) | |
326 | { | |
327 | strcpy(t,"\nOGLExtensions");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
328 | if(p) val=atoi(p+len); | |
329 | if(val<0) val=0; | |
330 | if(val>1) val=1; | |
331 | } | |
332 | if(val) SETCHECK("chkExtensions"); | |
333 | ||
334 | val=0; | |
335 | if(pB) | |
336 | { | |
337 | strcpy(t,"\nScreenSmoothing");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
338 | if(p) val=atoi(p+len); | |
339 | if(val<0) val=0; | |
340 | if(val>1) val=1; | |
341 | } | |
342 | if(val) SETCHECK("chkBlur"); | |
343 | ||
344 | val=0; | |
345 | if(pB) | |
346 | { | |
347 | strcpy(t,"\nUseFixes");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
348 | if(p) val=atoi(p+len); | |
349 | if(val<0) val=0; | |
350 | if(val>1) val=1; | |
351 | } | |
352 | if(val) SETCHECK("chkGameFixes"); | |
353 | ||
354 | val=0; | |
355 | if(pB) | |
356 | { | |
357 | strcpy(t,"\nCfgFixes");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;} | |
358 | if(p) val=atoi(p+len); | |
359 | } | |
360 | ||
361 | for(len=0;len<18;len++) | |
362 | { | |
363 | if(val & (1<<len)) | |
364 | { | |
365 | sprintf(t,"chkFix%d",len); | |
366 | SETCHECK(t); | |
367 | } | |
368 | } | |
369 | ||
370 | if(pB) free(pB); | |
371 | ||
372 | gtk_widget_show (CfgWnd); | |
373 | gtk_main (); | |
374 | return 0; | |
375 | } | |
376 | ||
377 | //////////////////////////////////////////////////////////////////////////////////////////////// | |
378 | ||
379 | void SetCfgVal(char * pB,char * pE,int val) | |
380 | { | |
381 | char * p, *ps, *pC;char t[32]; | |
382 | ||
383 | sprintf(t,"%d",val); | |
384 | ||
385 | p=strstr(pB,pE); | |
386 | if(p) | |
387 | { | |
388 | p=strstr(p,"="); | |
389 | if(!p) return; | |
390 | p++; | |
391 | while(*p && *p!='\n' && *p!='-' && (*p<'0' || *p>'9')) p++; | |
392 | if(*p==0 || *p=='\n') return; | |
393 | ps=p; | |
394 | while((*p>='0' && *p<='9') || *p=='-') p++; | |
395 | pC=(char *)malloc(32767); | |
396 | strcpy(pC,p); | |
397 | strcpy(ps,t); | |
398 | strcat(pB,pC); | |
399 | free(pC); | |
400 | } | |
401 | else | |
402 | { | |
403 | strcat(pB,pE); | |
404 | strcat(pB," = "); | |
405 | strcat(pB,t); | |
406 | strcat(pB,"\n"); | |
407 | } | |
408 | } | |
409 | ||
410 | //////////////////////////////////////////////////////////////////////////////////////////////// | |
411 | ||
412 | #define GETEDITVAL(winame) atoi(gtk_entry_get_text(GTK_ENTRY((GtkWidget*) gtk_object_get_data (GTK_OBJECT (wndMain),winame)))) | |
413 | #define GETCHECK(winame) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON ((GtkWidget*) gtk_object_get_data (GTK_OBJECT (wndMain),winame)))?1:0 | |
414 | #define GETLIST(winame) atoi(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO((GtkWidget*) gtk_object_get_data (GTK_OBJECT (wndMain),winame))->entry))) | |
415 | ||
416 | void SaveConfig(void) | |
417 | { | |
418 | FILE *in;int len,val;char * pB;char t[16]; | |
419 | ||
420 | pB=(char *)malloc(32767); | |
421 | memset(pB,0,32767); | |
422 | ||
423 | in = fopen("gpuPeopsMesaGL.cfg","rb"); | |
424 | if(in) | |
425 | { | |
426 | len = fread(pB, 1, 32767, in); | |
427 | fclose(in); | |
428 | } | |
429 | ||
430 | /////////////////////////////////////////////////////////////////////////////// | |
431 | ||
432 | val=GETEDITVAL("edtXSize"); | |
433 | if(val<10) val=10; | |
434 | SetCfgVal(pB,"\nResX",val); | |
435 | ||
436 | val=GETEDITVAL("edtYSize"); | |
437 | if(val<10) val=10; | |
438 | SetCfgVal(pB,"\nResY",val); | |
439 | ||
440 | val=GETCHECK("chkKeepRatio"); | |
441 | SetCfgVal(pB,"\nKeepRatio",val); | |
442 | ||
443 | val=GETEDITVAL("edtMaxTex"); | |
444 | if(val<0) val=0; | |
445 | if(val>1024) val=1024; | |
446 | SetCfgVal(pB,"\nVRamSize",val); | |
447 | ||
448 | val=GETCHECK("chk15bitMdec"); | |
449 | SetCfgVal(pB,"\n15bitMdec",val); | |
450 | ||
451 | val=GETLIST("cmbHiresTex"); | |
452 | SetCfgVal(pB,"\nHiResTextures",val); | |
453 | ||
454 | val=GETCHECK("chkFullScreen"); | |
455 | SetCfgVal(pB,"\nFullScreen",val); | |
456 | ||
457 | val=GETCHECK("chkScanlines"); | |
458 | SetCfgVal(pB,"\nScanLines",val); | |
459 | ||
460 | val=GETEDITVAL("edtScanBlend"); | |
461 | if(val<-1) val=-1; | |
462 | if(val>255) val=255; | |
463 | SetCfgVal(pB,"\nScanLinesBlend",val); | |
464 | ||
465 | val=GETLIST("cmbFrameTex"); | |
466 | SetCfgVal(pB,"\nFrameTextures",val); | |
467 | ||
468 | val=GETLIST("cmbFrameAcc"); | |
469 | SetCfgVal(pB,"\nFrameAccess",val); | |
470 | ||
471 | val=GETLIST("cmbFilter"); | |
472 | SetCfgVal(pB,"\nTexFilter",val); | |
473 | ||
474 | val=GETCHECK("chkABlend"); | |
475 | SetCfgVal(pB,"\nAdvancedBlend",val); | |
476 | ||
477 | val=GETCHECK("chkDither"); | |
478 | SetCfgVal(pB,"\nDithering",val); | |
479 | ||
480 | val=GETCHECK("chkLinemode"); | |
481 | SetCfgVal(pB,"\nLineMode",val); | |
482 | ||
483 | val=GETCHECK("chkShowFPS"); | |
484 | SetCfgVal(pB,"\nShowFPS",val); | |
485 | ||
486 | val=GETCHECK("chkFPSLimit"); | |
487 | SetCfgVal(pB,"\nUseFrameLimit",val); | |
488 | ||
489 | val=GETCHECK("chkFPSSkip"); | |
490 | SetCfgVal(pB,"\nUseFrameSkip",val); | |
491 | ||
492 | val=GETCHECK("rdbLimAuto"); | |
493 | if(val) val=1; else val=0; | |
494 | SetCfgVal(pB,"\nFPSDetection",val); | |
495 | ||
496 | val=GETEDITVAL("edtFPSlim"); | |
497 | if(val<0) val=0; | |
498 | if(val>1000) val=1000; | |
499 | SetCfgVal(pB,"\nFrameRate",val); | |
500 | ||
501 | val=GETLIST("cmbOffscreen"); | |
502 | SetCfgVal(pB,"\nOffscreenDrawing",val); | |
503 | ||
504 | val=GETCHECK("chkOpaque"); | |
505 | SetCfgVal(pB,"\nOpaquePass",val); | |
506 | ||
507 | val=GETCHECK("chkAntiA"); | |
508 | SetCfgVal(pB,"\nAntiAlias",val); | |
509 | ||
510 | val=GETLIST("cmbQuality"); | |
511 | SetCfgVal(pB,"\nTexQuality",val); | |
512 | ||
513 | val=GETCHECK("chkMaskBit"); | |
514 | SetCfgVal(pB,"\nMaskDetect",val); | |
515 | ||
516 | val=GETCHECK("chkFastMdec"); | |
517 | SetCfgVal(pB,"\nFastMdec",val); | |
518 | ||
519 | val=GETCHECK("chkExtensions"); | |
520 | SetCfgVal(pB,"\nOGLExtensions",val); | |
521 | ||
522 | val=GETCHECK("chkBlur"); | |
523 | SetCfgVal(pB,"\nScreenSmoothing",val); | |
524 | ||
525 | val=GETCHECK("chkGameFixes"); | |
526 | SetCfgVal(pB,"\nUseFixes",val); | |
527 | ||
528 | val=0; | |
529 | for(len=0;len<18;len++) | |
530 | { | |
531 | sprintf(t,"chkFix%d",len); | |
532 | if(GETCHECK(t)) val|=(1<<len); | |
533 | } | |
534 | SetCfgVal(pB,"\nCfgFixes",val); | |
535 | ||
536 | /////////////////////////////////////////////////////////////////////////////// | |
537 | ||
538 | if((in=fopen("gpuPeopsMesaGL.cfg","wb"))!=NULL) | |
539 | { | |
540 | fwrite(pB,strlen(pB),1,in); | |
541 | fclose(in); | |
542 | } | |
543 | ||
544 | free(pB); | |
545 | } | |
546 | ||
547 | ||
548 |