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