File: INCLUDE\UTILS\U_FILES.H

    1 //#############################################################################
    2 //                                                                           //
    3 // U_FILES.H                                                                 //
    4 // Subsystem: Utilities - Dateizugriff                                       //
    5 // Benutzung durch andere Subsysteme erforderlich: JA                         //
    6 // Implementation: U_FILES.CPP                                               //
    7 //---------------------------------------------------------------------------//
    8 // Autoren: Thomas Kullmann, Günther Reinecker                               //
    9 // Stand:   03.08.2002                                                       //
   10 //                                                                           //
   11 //#############################################################################
   12 
   13 #ifndef __U_FILES_H
   14 #define __U_FILES_H
   15 
   16 #include "utils\u_values.h"
   17 
   18 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
   19 
   20 //#############################################################################
   21 // globale Methoden (Lesen/ Schreiben von String-, Double- und Long-Werten aus/ in ini-Dateien)
   22 //#############################################################################
   23 
   24 // Signatur: IniReadString( out aReturn, in aFile, in aSection, in aKey,
   25 //                          in aDef, in aLength )
   26 // liest einen String-Wert aus der ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
   27 // und gibt das Ergebnis in <aReturn> zurück.
   28 // Hat der gelesene Wert mehr als <aLength> Zeichen, wird der Rest abgeschnitten.
   29 // Ist der Eintrag nicht vorhanden, wird <aDef> zurückgegeben.
   30 void _CURVECLASS WINAPI IniReadString ( char*,
   31                 LPCSTR, LPCSTR, LPCSTR,
   32                 LPCSTR, const UINT );
   33 
   34 // Signatur: IniWriteString( in aFile, in aSection, in aKey,
   35 //                           in aString )
   36 // schreibt <aString> in die ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
   37 // ==> TRUE <--> Wert erfolgreich geschrieben
   38 BOOL _CURVECLASS WINAPI IniWriteString ( LPCSTR, LPCSTR, LPCSTR,
   39                 LPCSTR );
   40 
   41 // Signatur: IniReadLong( in aFile, in aSection, in aKey,
   42 //                        in aDef )
   43 // ==> der Bool-Wert aus der ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
   44 // Ist der Eintrag kein Bool-Wert (weder "0" noch "1"), wird <aDef> zurückgegeben.
   45 // Hat der gelesene Wert Nachkommastellen, werden diese ignoriert.
   46 BOOL _CURVECLASS WINAPI IniReadBool ( LPCSTR, LPCSTR, LPCSTR,
   47                 const BOOL );
   48 
   49 // Signatur: IniWriteBool( in aFile, in aSection, in aKey,
   50 //                         in aBool )
   51 // schreibt <aBool> in die ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
   52 // ==> TRUE <--> Wert erfolgreich geschrieben
   53 BOOL _CURVECLASS WINAPI IniWriteBool ( LPCSTR, LPCSTR, LPCSTR,
   54                 const BOOL );
   55 
   56 // Signatur: IniReadLong( in aFile, in aSection, in aKey,
   57 //                        in aDef )
   58 // ==> der Long-Wert aus der ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
   59 // Hat der gelesene Wert Nachkommastellen, werden diese verworfen.(ABRUNDEN).
   60 // Ist der Eintrag nicht vorhanden oder kein Long-Wert, wird <aDef> zurückgegeben.
   61 // ACHTUNG: Im Gegensatz zur bisherigen Konvertierung mittels atof(...) wird "1a234" nicht als
   62 //          Long-Wert akzeptiert! Es wird also <aDef> zurückgegeben.
   63 LONG _CURVECLASS WINAPI IniReadLong ( LPCSTR, LPCSTR, LPCSTR,
   64                 const LONG );
   65 
   66 // Signatur: IniReadLong( in aFile, in aSection, in aKey,
   67 //                        in aMin, in aDef, in aMax )
   68 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins
   69 //     Intervall [<aMin>..<aMax>]
   70 LONG _CURVECLASS WINAPI IniReadLong ( LPCSTR, LPCSTR, LPCSTR,
   71                 const LONG, const LONG, const LONG );
   72 
   73 // Signatur: IniWriteLong( in aFile, in aSection, in aKey,
   74 //                         in aLong )
   75 // schreibt <aLong> in die ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
   76 // ==> TRUE <--> Wert erfolgreich geschrieben
   77 BOOL _CURVECLASS WINAPI IniWriteLong ( LPCSTR, LPCSTR, LPCSTR,
   78                 const LONG );
   79 
   80 // Signatur: IniReadFloat( in aFile, in aSection, in aKey,
   81 //                         in aDef, in aDigits )
   82 // WIE IniReadDouble, jedoch für Float
   83 float _CURVECLASS WINAPI IniReadFloat ( LPCSTR, LPCSTR, LPCSTR,
   84                 const float, const UINT );
   85 
   86 // Signatur: IniReadFloat( in aFile, in aSection, in aKey,
   87 //                         in aMin, in aDef, in aMax, in aDigits )
   88 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins
   89 //     Intervall [<aMin>..<aMax>] eingepasst
   90 float _CURVECLASS WINAPI IniReadFloat ( LPCSTR, LPCSTR, LPCSTR,
   91                 const float, const float, const float, const UINT );
   92 
   93 // Signatur: IniWriteFloat( in aFile, in aSection, in aKey,
   94 //                          in aFloat, in aDigits )
   95 // WIE IniWriteDouble, jedoch für Float
   96 BOOL _CURVECLASS WINAPI IniWriteFloat ( LPCSTR, LPCSTR, LPCSTR,
   97                 const float, const UINT );
   98 
   99 // Signatur: IniReadDouble( in aFile, in aSection, in aKey,
  100 //                          in aDef, in aDigits )
  101 // ==> der Double-Wert aus der ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
  102 // Hat der gelesene Wert mehr als <aDigits> Nachkommastellen, werden nachfolgendene verworfen.(ABRUNDEN)
  103 // Ist der Eintrag nicht vorhanden oder kein Double-Wert, wird <aDef> zurückgegeben.
  104 // ACHTUNG: Im Gegensatz zur bisherigen Konvertierung mittels atof(...) wird "1a234" nicht als
  105 //          Double-Wert akzeptiert! Es wird also <aDef> zurückgegeben.
  106 double _CURVECLASS WINAPI IniReadDouble ( LPCSTR, LPCSTR, LPCSTR,
  107                 const double, const UINT );
  108 
  109 // Signatur: IniReadDouble( in aFile, in aSection, in aKey,
  110 //                          in aDef, in aDigits )
  111 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins
  112 //     Intervall [<aMin>..<aMax>]
  113 double _CURVECLASS WINAPI IniReadDouble ( LPCSTR, LPCSTR, LPCSTR,
  114                                                           const double, const UINT );
  115 
  116 
  117 // Signatur: IniReadDouble( in aFile, in aSection, in aKey,
  118 //                          in aMin, in aDef, in aMax, in aDigits )
  119 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins
  120 //     Intervall [<aMin>..<aMax>] eingepasst
  121 double _CURVECLASS WINAPI IniReadDouble ( LPCSTR, LPCSTR, LPCSTR,
  122                 const double, const double, const double, const UINT );
  123 
  124 //### Statt der Nachkommastellengenauigkeit kann auch NKAUTO+<x> angegeben werden. Dann wird die Genauigkeit anhand des Zahlenwertes berechnet, per <x> kann man die Genauigkeit weiter vergrößern.
  125 // Signatur: IniWriteDouble( in aFile, in aSection, in aKey,
  126 //                           in aDouble, in aDigits### )
  127 // schreibt <aDouble> in die ini-Datei <aFile>, in Sektion <aSection>, Schlüssel <aKey>
  128 // Nach der zu schreibende Wert mehr als <aDigits> Nachkommastellen, werden nachfolgende verworfen.(ABRUNDEN)
  129 // ==> TRUE <--> Wert erfolgreich geschrieben
  130 BOOL _CURVECLASS WINAPI IniWriteDouble ( LPCSTR, LPCSTR, LPCSTR,
  131                 const double, const UINT );
  132 
  133 //#############################################################################
  134 // TTxtRead
  135 //#############################################################################
  136 
  137 class _CURVECLASS TTxtRead
  138 {
  139 private:
  140         TTxtRead ( TTxtRead& ) {} // kein Copy-Konstruktor
  141 
  142 public:
  143         // versucht die Datei zu öffnen und zählt die Zeilen in der Datei
  144         TTxtRead ( const char* );
  145 
  146         virtual  ~TTxtRead ( void );
  147 
  148 public:
  149         // beginnt wieder am Anfang der Datei
  150         void Restart();
  151 
  152         // liest die nächste Zeile und gibt sie in <result> zurück
  153         // ==> FALSE <--> Fehler oder Dateiende
  154         BOOL NextLine (string &result);
  155 
  156         // WIEVOR, die Zeile wird jedoch per Rückgabewert zurückgegeben ( 0 <--> Fehler oder Dateiende )
  157         // der zurückgegebene Wert darf nicht freigegeben werden, das erledigt TTxtRead
  158         char *NextLine ();
  159 
  160         // ==> TRUE <--> Dateiende erreicht oder Datei nicht vorhanden
  161         BOOL IsEOF ();
  162 
  163         // ==> TRUE <--> Datei ist vorhanden
  164         BOOL Exists ();
  165 
  166         // ==> Anzahl der Zeilen in dieser Datei; 0 bei leeren oder nicht vorhandenen Dateien
  167         UINT GetLines ();
  168 
  169 private:
  170         FILE *m_File;
  171         char *m_Line;
  172         UINT m_Lines;
  173         BOOL m_Eof;
  174         BOOL m_Exists;
  175 };
  176 
  177 #endif //__U_FILES_H
  178 
  179 //#############################################################################
  180 // LASTLINE
  181 //#############################################################################
  182