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.