| 1 | /***************************************************************************\r |
| 2 | cfg.c - description\r |
| 3 | -------------------\r |
| 4 | begin : Sun Mar 08 2009\r |
| 5 | copyright : (C) 1999-2009 by Pete Bernert\r |
| 6 | web : www.pbernert.com \r |
| 7 | ***************************************************************************/\r |
| 8 | \r |
| 9 | /***************************************************************************\r |
| 10 | * *\r |
| 11 | * This program is free software; you can redistribute it and/or modify *\r |
| 12 | * it under the terms of the GNU General Public License as published by *\r |
| 13 | * the Free Software Foundation; either version 2 of the License, or *\r |
| 14 | * (at your option) any later version. See also the license.txt file for *\r |
| 15 | * additional informations. *\r |
| 16 | * *\r |
| 17 | ***************************************************************************/\r |
| 18 | \r |
| 19 | //*************************************************************************// \r |
| 20 | // History of changes:\r |
| 21 | //\r |
| 22 | // 2009/03/08 - Pete \r |
| 23 | // - generic cleanup for the Peops release\r |
| 24 | //\r |
| 25 | //*************************************************************************// \r |
| 26 | \r |
| 27 | #define _IN_CFG\r |
| 28 | \r |
| 29 | #include "stdafx.h"\r |
| 30 | #include "externals.h"\r |
| 31 | #include "cfg.h"\r |
| 32 | \r |
| 33 | char *pConfigFile = NULL;\r |
| 34 | \r |
| 35 | void ReadConfigFile()\r |
| 36 | {\r |
| 37 | FILE *in = NULL;\r |
| 38 | int len;\r |
| 39 | char *pB, *p, t[256];\r |
| 40 | \r |
| 41 | if (pConfigFile != NULL)\r |
| 42 | in = fopen(pConfigFile, "rb");\r |
| 43 | else\r |
| 44 | in = fopen("gpuPeopsMesaGL.cfg", "rb"); \r |
| 45 | \r |
| 46 | if (in == NULL) return;\r |
| 47 | \r |
| 48 | pB=(char *)malloc(32767); // buffer for reading config (32k)\r |
| 49 | memset(pB, 0, 32767);\r |
| 50 | \r |
| 51 | len = fread(pB, 1, 32767, in); // read config in buffer\r |
| 52 | fclose(in); // close config file\r |
| 53 | \r |
| 54 | strcpy(t,"\nResX");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 55 | if(p) iResX=atoi(p+len);\r |
| 56 | if(iResX<10) iResX=10;\r |
| 57 | \r |
| 58 | strcpy(t,"\nResY");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 59 | if(p) iResY=atoi(p+len);\r |
| 60 | if(iResY<10) iResY=10;\r |
| 61 | \r |
| 62 | strcpy(t,"\nKeepRatio");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 63 | if(p) bKeepRatio=atoi(p+len);\r |
| 64 | if(bKeepRatio<0) bKeepRatio=0;\r |
| 65 | if(bKeepRatio>1) bKeepRatio=1;\r |
| 66 | \r |
| 67 | strcpy(t,"\nScreenSmoothing");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 68 | if(p) iBlurBuffer=atoi(p+len);\r |
| 69 | if(iBlurBuffer<0) iBlurBuffer=0;\r |
| 70 | if(iBlurBuffer>1) iBlurBuffer=1;\r |
| 71 | \r |
| 72 | strcpy(t,"\nHiResTextures");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 73 | if(p) iHiResTextures=atoi(p+len);\r |
| 74 | if(iHiResTextures<0) iHiResTextures=0;\r |
| 75 | if(iHiResTextures>2) iHiResTextures=2;\r |
| 76 | \r |
| 77 | iSortTexCnt =0;\r |
| 78 | strcpy(t,"\nVRamSize");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 79 | if(p) iVRamSize=atoi(p+len);\r |
| 80 | if(iVRamSize<0) iVRamSize=0;\r |
| 81 | if(iVRamSize>1024) iVRamSize=1024;\r |
| 82 | \r |
| 83 | strcpy(t,"\nFullScreen");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 84 | if(p) bFullScreen=atoi(p+len);\r |
| 85 | if(bFullScreen>1) bFullScreen=1;\r |
| 86 | \r |
| 87 | strcpy(t,"\nScanLines");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 88 | if(p) iUseScanLines=atoi(p+len);\r |
| 89 | if(iUseScanLines<0) iUseScanLines=0;\r |
| 90 | if(iUseScanLines>1) iUseScanLines=1;\r |
| 91 | \r |
| 92 | strcpy(t,"\nScanLinesBlend");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 93 | if(p) iScanBlend=atoi(p+len);\r |
| 94 | if(iScanBlend<-1) iScanBlend=-1;\r |
| 95 | if(iScanBlend>255) iScanBlend=255;\r |
| 96 | \r |
| 97 | strcpy(t,"\nFrameTextures");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 98 | if(p) iFrameTexType=atoi(p+len);\r |
| 99 | if(iFrameTexType<0) iFrameTexType=0;\r |
| 100 | if(iFrameTexType>3) iFrameTexType=3;\r |
| 101 | \r |
| 102 | strcpy(t,"\nFrameAccess");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 103 | if(p) iFrameReadType=atoi(p+len);\r |
| 104 | if(iFrameReadType<0) iFrameReadType=0;\r |
| 105 | if(iFrameReadType>4) iFrameReadType=4;\r |
| 106 | if(iFrameReadType==4) bFullVRam=TRUE;\r |
| 107 | else bFullVRam=FALSE;\r |
| 108 | \r |
| 109 | strcpy(t,"\nTexFilter");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 110 | if(p) iFilterType=atoi(p+len);\r |
| 111 | if(iFilterType<0) iFilterType=0;\r |
| 112 | if(iFilterType>6) iFilterType=6;\r |
| 113 | \r |
| 114 | strcpy(t,"\nAdvancedBlend");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 115 | if(p) bAdvancedBlend=atoi(p+len);\r |
| 116 | if(bAdvancedBlend<0) bAdvancedBlend=0;\r |
| 117 | if(bAdvancedBlend>1) bAdvancedBlend=1;\r |
| 118 | \r |
| 119 | strcpy(t,"\nDithering");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 120 | if(p) bDrawDither=atoi(p+len);\r |
| 121 | if(bDrawDither<0) bDrawDither=0;\r |
| 122 | if(bDrawDither>1) bDrawDither=1;\r |
| 123 | \r |
| 124 | strcpy(t,"\nLineMode");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 125 | if(p) bUseLines=atoi(p+len);\r |
| 126 | if(bUseLines<0) bUseLines=0;\r |
| 127 | if(bUseLines>1) bUseLines=1;\r |
| 128 | \r |
| 129 | strcpy(t,"\nShowFPS");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 130 | if(p) iShowFPS=atoi(p+len);\r |
| 131 | if(iShowFPS<0) iShowFPS=0;\r |
| 132 | if(iShowFPS>1) iShowFPS=1;\r |
| 133 | \r |
| 134 | strcpy(t,"\nUseFrameLimit");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 135 | if(p) bUseFrameLimit=atoi(p+len);\r |
| 136 | if(bUseFrameLimit<0) bUseFrameLimit=0;\r |
| 137 | if(bUseFrameLimit>1) bUseFrameLimit=1;\r |
| 138 | \r |
| 139 | strcpy(t,"\nUseFrameSkip");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 140 | if(p) bUseFrameSkip=atoi(p+len);\r |
| 141 | if(bUseFrameSkip<0) bUseFrameSkip=0;\r |
| 142 | if(bUseFrameSkip>1) bUseFrameSkip=1;\r |
| 143 | \r |
| 144 | strcpy(t,"\nFPSDetection");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 145 | if(p) iFrameLimit=atoi(p+len)+1;\r |
| 146 | if(iFrameLimit<1) iFrameLimit=1;\r |
| 147 | if(iFrameLimit>2) iFrameLimit=2;\r |
| 148 | \r |
| 149 | strcpy(t,"\nFrameRate");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 150 | if(p) fFrameRate=(float)atof(p+len);\r |
| 151 | if(fFrameRate<0.0f) fFrameRate=0.0f;\r |
| 152 | if(fFrameRate>1000.0f) fFrameRate=1000.0f;\r |
| 153 | \r |
| 154 | strcpy(t,"\nOffscreenDrawing");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 155 | if(p) iOffscreenDrawing=atoi(p+len);\r |
| 156 | if(iOffscreenDrawing<0) iOffscreenDrawing=0;\r |
| 157 | if(iOffscreenDrawing>4) iOffscreenDrawing=4;\r |
| 158 | \r |
| 159 | strcpy(t,"\nOpaquePass");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 160 | if(p) bOpaquePass=atoi(p+len);\r |
| 161 | if(bOpaquePass<0) bOpaquePass=0;\r |
| 162 | if(bOpaquePass>1) bOpaquePass=1;\r |
| 163 | \r |
| 164 | strcpy(t,"\nAntiAlias");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 165 | if(p) bUseAntiAlias=atoi(p+len);\r |
| 166 | if(bUseAntiAlias<0) bUseAntiAlias=0;\r |
| 167 | if(bUseAntiAlias>1) bUseAntiAlias=1;\r |
| 168 | \r |
| 169 | strcpy(t,"\nTexQuality");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 170 | if(p) iTexQuality=atoi(p+len);\r |
| 171 | if(iTexQuality<0) iTexQuality=0;\r |
| 172 | if(iTexQuality>4) iTexQuality=4;\r |
| 173 | \r |
| 174 | strcpy(t,"\n15bitMdec");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 175 | if(p) bUse15bitMdec=atoi(p+len);\r |
| 176 | if(bUse15bitMdec<0) bUse15bitMdec=0;\r |
| 177 | if(bUse15bitMdec>1) bUse15bitMdec=1;\r |
| 178 | \r |
| 179 | strcpy(t,"\nMaskDetect");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 180 | if(p) iUseMask=atoi(p+len);\r |
| 181 | if(iUseMask<0) iUseMask=0;\r |
| 182 | if(iUseMask>1) iUseMask=1;\r |
| 183 | \r |
| 184 | strcpy(t,"\nFastMdec");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 185 | if(p) bUseFastMdec=atoi(p+len);\r |
| 186 | if(bUseFastMdec<0) bUseFastMdec=0;\r |
| 187 | if(bUseFastMdec>1) bUseFastMdec=1;\r |
| 188 | \r |
| 189 | strcpy(t,"\nCfgFixes");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 190 | if(p) dwCfgFixes=atoi(p+len);\r |
| 191 | \r |
| 192 | strcpy(t,"\nUseFixes");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 193 | if(p) bUseFixes=atoi(p+len);\r |
| 194 | if(bUseFixes<0) bUseFixes=0;\r |
| 195 | if(bUseFixes>1) bUseFixes=1;\r |
| 196 | \r |
| 197 | strcpy(t,"\nOGLExtensions");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}\r |
| 198 | if(p) iUseExts=atoi(p+len);\r |
| 199 | if(iUseExts>1) iUseExts=1;\r |
| 200 | \r |
| 201 | free(pB);\r |
| 202 | }\r |
| 203 | \r |
| 204 | void ReadConfig(void) // read config (linux file)\r |
| 205 | {\r |
| 206 | iResX=640;\r |
| 207 | iResY=480;\r |
| 208 | iColDepth=16;\r |
| 209 | bChangeRes=FALSE;\r |
| 210 | bWindowMode=TRUE;\r |
| 211 | iUseScanLines=0;\r |
| 212 | bFullScreen=FALSE;\r |
| 213 | bFullVRam=FALSE;\r |
| 214 | iFilterType=0;\r |
| 215 | bAdvancedBlend=FALSE;\r |
| 216 | bDrawDither=FALSE;\r |
| 217 | bUseLines=FALSE;\r |
| 218 | bUseFrameLimit=TRUE;\r |
| 219 | bUseFrameSkip=FALSE;\r |
| 220 | iFrameLimit=2;\r |
| 221 | fFrameRate=200.0f;\r |
| 222 | iOffscreenDrawing=2;\r |
| 223 | bOpaquePass=TRUE;\r |
| 224 | bUseAntiAlias=FALSE;\r |
| 225 | iTexQuality=0;\r |
| 226 | iUseMask=0;\r |
| 227 | iZBufferDepth=0;\r |
| 228 | bUseFastMdec=TRUE;\r |
| 229 | dwCfgFixes=0;\r |
| 230 | bUseFixes=FALSE;\r |
| 231 | iFrameTexType=1;\r |
| 232 | iFrameReadType=0;\r |
| 233 | bUse15bitMdec=FALSE;\r |
| 234 | iShowFPS=0;\r |
| 235 | bKeepRatio=FALSE;\r |
| 236 | iScanBlend=0;\r |
| 237 | iVRamSize=0;\r |
| 238 | iTexGarbageCollection=1;\r |
| 239 | iBlurBuffer=0;\r |
| 240 | iHiResTextures=0;\r |
| 241 | iForceVSync=-1;\r |
| 242 | \r |
| 243 | ReadConfigFile(); // read file\r |
| 244 | \r |
| 245 | if(!iColDepth) iColDepth=32; // adjust color info\r |
| 246 | if(iUseMask) iZBufferDepth=16; // set zbuffer depth \r |
| 247 | else iZBufferDepth=0;\r |
| 248 | if(bUseFixes) dwActFixes=dwCfgFixes; // init game fix global\r |
| 249 | }\r |