Ja tylko napisalem o takiej opcji...
Nowy parser EU07.INI
// ************************************************************************************************
// Alternatywny parser plikow konfiguracyjnych
// ************************************************************************************************
void Global::ConfigParseQ(AnsiString filename)
{
TStringList *slINI;
slINI = new TStringList();
//char szINIFILE[200];
AnsiString line;
AnsiString test, key, p01, p02, p03, p04, p05, p06, debuglog, skyen, defaultext;
int calprtI, caliP1, caliP2, caliP3, caliP4, maxtexsize;
int calprtO, caloP1, caloP2, caloP3, caloP4;
int pos1, pos2, pos3;
bool calprtOok, calprtIok, i;
// sprintf(szINIFILE,"%s%s", QGlobal::asAPPDIR , "eu07.ini");
// WriteLog("READING CONFIG FILE... (" + AnsiString(szINIFILE) + ")");
char *strings[30];
char Policystr[4096] = "the|string|to|split";
char delims[] = " ";
slINI->LoadFromFile(QGlobal::asAPPDIR + "eu07.ini");
// std::ifstream FileINI("eu07.ini");
WriteLog("Config parsing...");
//if(FileINI)
// {
// while(std::getline(FileINI,line))
// {
for (int l = 0; l<slINI->Count-1; l++)
{
line = slINI->Strings[l];
pos1 = pos2 = pos3 = 0;
pos1 = line.Pos("//");
pos2 = line.Pos(":");
pos3 = line.Pos("//");
test = line.SubString(1, pos1-1);
strcpy(Policystr, test.c_str());
i = 0;
strings[i] = strtok( Policystr, delims );
while( strings[i] != NULL )
{
printf("%d '%s'\n", i, strings[i]);
strings[++i] = strtok( NULL, delims );
}
if (pos1 > 4) // gdy nie ma komentarza przed kluczem, troche prowizorycznie
{
WriteLog(test + ": " + strings[0] + "-> [" + Trim(strings[1]) + "][" + Trim(strings[2]) + "]");
key = LowerCase(Trim(strings[0]));
p01 = LowerCase(Trim(strings[1]));
p02 = LowerCase(Trim(strings[2]));
p03 = LowerCase(Trim(strings[3]));
p04 = LowerCase(Trim(strings[4]));
p05 = LowerCase(Trim(strings[5]));
p06 = LowerCase(Trim(strings[6]));
if (key == "sceneryfile") strcpy(szSceneryFile, p01.c_str());
if (key == "humanctrlvehicle") asHumanCtrlVehicle = p01;
if (key == "width") iWindowWidth = p01.ToIntDef(800);
if (key == "height") iWindowHeight = p01.ToIntDef(600);
if (key == "fullscreen") bFullScreen = YNToBool(p01);
if (key == "bpp") iBpp = p01.ToIntDef(32);
if (key == "debugmode") DebugModeFlag = YNToBool(p01);
if (key == "soundenabled") bSoundEnabled = YNToBool(p01);
if (key == "physicslog") WriteLogFlag = YNToBool(p01);
if (key == "debuglog") debuglog = p01;
if (key == "wireframe") bWireFrame = YNToBool(p01);
if (key == "physicsdeactivation") PhysicActivationFlag = YNToBool(p01);
if (key == "adjustscreenfreq") bAdjustScreenFreq = YNToBool(p01);
if (key == "enabletraction") bEnableTraction = YNToBool(p01);
if (key == "loadtraction") bLoadTraction = YNToBool(p01);
if (key == "livetraction") bLiveTraction = YNToBool(p01);
if (key == "managenodes") bManageNodes = YNToBool(p01);
if (key == "friction") fFriction = p01.ToDouble();
if (key == "skyenabled") skyen = p01;
if (key == "brakestep") fBrakeStep = p01.ToDouble();
if (key == "mousescale") {fMouseXScale = p01.ToDouble(); fMouseYScale = p02.ToDouble();}
if (key == "defaultext") defaultext = p01;
if (key == "maxtexturesize") maxtexsize = p01.ToIntDef(16384);
if (key == "defaultfiltering") iDefaultFiltering = p01.ToIntDef(-1);
if (key == "ballastfiltering") iBallastFiltering = p01.ToIntDef(-1);
if (key == "railprofiltering") iRailProFiltering = p01.ToIntDef(-1);
if (key == "dynamicfiltering") iDynamicFiltering = YNToBool(p01);
if (key == "newaircouplers") bnewAirCouplers = YNToBool(p01);
if (key == "usevbo") bUseVBO = YNToBool(p01);
if (key == "feedbackmode") iFeedbackMode = p01.ToIntDef(1);
if (key == "feedbackport") iFeedbackPort = p01.ToIntDef(0);
if (key == "smoothtraction") bSmoothTraction = YNToBool(p01);
if (key == "timespeed") fTimeSpeed = p01.ToIntDef(1);
if (key == "multisampling") iMultisampling = p01.ToIntDef(2); // domyślnie 2
if (key == "glufont") bGlutFont = YNToBool(p01);
if (key == "lang") asLang = p01;
if (key == "decompressdds") bDecompressDDS = YNToBool(p01);
if (key == "freefly") { bFreeFly = YNToBool(p01);pFreeCameraInit[0].x = p02.ToDouble(); pFreeCameraInit[0].y = p03.ToDouble(); pFreeCameraInit[0].z = p04.ToDouble();}
if (key == "convertmodels") iConvertModels = p01.ToIntDef(7);
if (key == "inactivepause") bInactivePause = YNToBool(p01);
if (key == "modifytga") iModifyTGA = p01.ToIntDef(0);
if (key == "hideconsole") Global::bHideConsole = YNToBool(p01);
if (key == "rollfix") bRollFix = YNToBool(p01);
if (key == "fpsaverage") fFpsAverage = p01.ToDouble();
if (key == "fpsdeviation") fFpsDeviation = p01.ToDouble();
if (key == "fpsradiusmax") fFpsRadiusMax = p01.ToDouble();
if (key == "joinduplicatedevents") bJoinEvents = YNToBool(p01);
if (key == "hiddenevents") iHiddenEvents = p01.ToIntDef(0);
if (key == "opengl") fOpenGL = p01.ToDouble();
if (key == "latitude") fLatitudeDeg = p01.ToDouble();
if (key == "heightbase") fDistanceFactor = p01.ToInt();
if (key == "doubleambient") bDoubleAmbient = YNToBool(p01);
if (key == "slowmotion") iSlowMotionMask = p01.ToIntDef(-1);
if (key == "calibratein") { calprtI = p01.ToIntDef(-1); caliP1 = p02.ToDouble(); caliP2 = p03.ToDouble(); caliP3 = p04.ToDouble(); caliP4 = p05.ToDouble(); calprtIok = true;}
if (key == "calibrateout"){ calprtO = p01.ToIntDef(-1); caloP1 = p02.ToDouble(); caloP2 = p03.ToDouble(); caloP3 = p04.ToDouble(); caloP4 = p05.ToDouble(); calprtOok = true;}
}
}
// }
// na koniec trochę zależności
if (defaultext == "tga") szDefaultExt = szTexturesTGA; // domyślnie od TGA
if (debuglog == "yes") iWriteLogEnabled = 3;
if (debuglog == "no") iWriteLogEnabled = 0;
else iWriteLogEnabled = 3;
if (skyen == "yes") asSky = "1";
else asSky = "0";
if (maxtexsize <= 64) iMaxTextureSize = 64;
else
if (maxtexsize <= 128) iMaxTextureSize = 128;
else
if (maxtexsize <= 256) iMaxTextureSize = 256;
else
if (maxtexsize <= 512) iMaxTextureSize = 512;
else
if (maxtexsize <= 1024) iMaxTextureSize = 1024;
else
if (maxtexsize <= 2048) iMaxTextureSize = 2048;
else
if (maxtexsize <= 4096) iMaxTextureSize = 4096;
else
if (maxtexsize <= 8192) iMaxTextureSize = 8192;
else
iMaxTextureSize = 16384;
if (!bLoadTraction) // wczytywanie drutów i słupów
{ // tutaj wyłączenie, bo mogą nie być zdefiniowane w INI
bEnableTraction = false; // false = pantograf się nie połamie
bLiveTraction = false; // false = pantografy zawsze zbierają 95% MaxVoltage
}
// if (fMoveLight>0) bDoubleAmbient=false; //wtedy tylko jedno światło ruchome
// if (fOpenGL<1.3) iMultisampling=0; //można by z góry wyłączyć, ale nie mamy jeszcze fOpenGL
if (iMultisampling)
{ // antyaliasing całoekranowy wyłącza rozmywanie drutów
bSmoothTraction = false;
}
if (iMultiplayer > 0)
{
bInactivePause = false; // okno "w tle" nie może pauzować, jeśli włączona komunikacja
// pauzowanie jest zablokowane dla (iMultiplayer&2)>0, więc iMultiplayer=1 da się zapauzować
// (tryb instruktora)
}
fFpsMin = fFpsAverage -
fFpsDeviation; // dolna granica FPS, przy której promień scenerii będzie zmniejszany
fFpsMax = fFpsAverage +
fFpsDeviation; // górna granica FPS, przy której promień scenerii będzie zwiększany
if (iPause)
iTextMode = VK_F1; // jak pauza, to pokazać zegar
if (calprtIok && calprtOok)
{
if ((calprtI < 0) || (calprtI > 5)) calprtI = 5; // na ostatni, bo i tak trzeba pominąć wartości
fCalibrateIn[calprtI][0] = caliP1; // wyraz wolny
fCalibrateIn[calprtI][1] = caliP2; // mnożnik
fCalibrateIn[calprtI][2] = caliP3; // mnożnik dla kwadratu
fCalibrateIn[calprtI][3] = caliP4; // mnożnik dla sześcianu
if ((calprtO < 0) || (calprtO > 6)) calprtO = 6; // na ostatni, bo i tak trzeba pominąć wartości
fCalibrateOut[calprtO][0] = caloP1; // wyraz wolny
fCalibrateOut[calprtO][1] = caloP2; // mnożnik liniowy
fCalibrateOut[calprtO][2] = caloP3; // mnożnik dla kwadratu
fCalibrateOut[calprtO][3] = caloP4; // mnożnik dla sześcianu
}
{ // to poniżej wykonywane tylko raz, jedynie po wczytaniu eu07.ini
Console::ModeSet(iFeedbackMode, iFeedbackPort); // tryb pracy konsoli sterowniczej
iFpsRadiusMax = 0.000025 * fFpsRadiusMax * fFpsRadiusMax; // maksymalny promień renderowania 3000.0 -> 225
if (iFpsRadiusMax > 400)
iFpsRadiusMax = 400;
if (fDistanceFactor > 1.0)
{ // dla 1.0 specjalny tryb bez przeliczania
fDistanceFactor = iWindowHeight / fDistanceFactor; // fDistanceFactor>1.0 dla rozdzielczości większych niż bazowa
fDistanceFactor *= (iMultisampling + 1.0) * fDistanceFactor; // do kwadratu, bo większość odległości to ich kwadraty
}
}
WriteLog("INI FILE OK.");
WriteLog("");
// FileINI.close();
}
A stary po nastepnym bo sie nie zmieszcze :/... A moze lepiej nie bo jescze mi zawalu dostaniecie ;d
Dodano: 22 Stycznia 2016, 08:08:06
2933246009 2016.01.22 075647 6 Config parsing... Windows 7 ?
environment informations:
appfile: [D:\MaSzyna\EU07-180116-1.exe]
apppath: [D:\MaSzyna\]
shotdir: [D:\MaSzyna\SCR\]
aparams: [-s $.scn -v ET22-768]
appvers: 15 4 1171 474
appdate: 20160117 253232
release: 20160117 253232, 15.4.1171.474
rundate: 20160122 075640
deskdim: 1280x1024
userpid: 2933246009
sysvers: 6.1.7601
sysname: Windows 7
servpak: Service Pack 1
klayout: 415(Polish)
Reading eu07.ini...
LoadIniFile() - 1
LoadIniFile() - 2
LoadIniFile() - 3
LoadIniFile() - 4
Config parsing...
Panie kolego, wydanie 200116 prosze sciagnac, na pewno bedzie dzialac. Hmm... znaczy sie to chyba dnia 21 zostalo naprawione, ja juz ine ogarniam d;
Dodano: 22 Stycznia 2016, 16:34:22
19.01.16 - definiowanie dodatkowych tekstur wymiennych w pliku charakterystyki indywidualnej pojazdu
20.01.16 - rozpoczeto wprowadzanie nowego parsera dla pliku EU07.INI (nie wszystkie polecenia dzialaja)
21.01.16 - jest juz nowy parser EU07.INI
21.01.16 - przygotowania do wprowadzenia wbudowanego startera
21.01.16 - pasazerowie powinni przerwac wsiadanie gdy szalony maszynista nagle ruszy.
EU07-220116-1