Die Funktion GetFileLine( FILE*, LPSTR, int )

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;
}


Anmerkungen:

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.


Zurück zu LoadMacro()

Startseite


Kay Schützler
Last modified: Fri Sep 17 12:51:13 MET DST 1999