BOOL TSteering::GetFileLine( FILE* hFile, LPSTR dst, int dstsize ) { // Function tested; Last changes 950811 char data[3]; BOOL EoL = FALSE; int cnt = 0; int rdl; dst[cnt] = '\0'; // bis Anzahl einzulesender Zeichen erreicht wird do { // ein Zeichen einlesen if (!fread( data, 1, 1, hFile )) // Dateilesefehler return FALSE; switch (data[0]) { // Zeilenende erreicht case '\n': case '\r': if (!EoL) // Erreichen des Zeilenendes festhalten EoL = TRUE; // naechstes Zeichen einlesen (!?) continue; default: // solange nicht Zeilenende erreicht if (!EoL) { // Zeichen stückweise übernehmen dst[cnt++] = data[0]; // switch vorzeitig verlassen break; } // da war doch schon ein Zeilenende? // na dann den Dateipositionszeiger lieber wieder eins zurück // (Folge von continue weiter oben) rdl = fseek( hFile, -1, SEEK_CUR ); // do-while-Schleife verlassen goto Ready; } } while(cnt < dstsize); Ready: // Null-Terminierung sicherstellen dst[cnt] = '\0'; // angegebene Zeichenzahl erreicht if (cnt == dstsize) // interpretiert als: "Zeile zu lang" return FALSE; return TRUE; }
Die Funktion GetFileLine() schlägt die Funktion LoadMacro() in den haarsträubenden Implemtentationsdetails um Längen. Hier scheint als Wartungsmassnahme eigentlich nur eine komplette Ersetzung in Frage zu kommen.