5c38737fd9cad599114149670d401431faf772a4
[pcsx_rearmed.git] / plugins / peopsxgl / gpucfg / main.c
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