-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTAB.H
executable file
·362 lines (284 loc) · 12 KB
/
TAB.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
/* Datei: tab.h */
#define TabMaxPlayers 100
/* maximale Anzahl der Spieler, die verwaltet werden koennen */
#define TabNameLength 50
/* maximale Anzahl der Buchstaben, die der Name eines Spielers
oder eines Spieles besitzen darf */
#define TAB_FORMAT_IDENT 4
/* Identifikation der Version des Formats, das die Funktionen
'TabWriteFile' und 'TabReadFile' fuer die Spielerdateien
voraussetzen; ausserdem wird noch verstanden: 1, 2, 3
*/
typedef char tTabName[ TabNameLength ];
/* Name eines Spielers */
typedef struct{
int offense, defense;
} tsTabOneThird;
/* Daten fuer ein Drittel */
typedef struct{
char GotFrom[10]; /* Kuerzel der Datei, deren Daten fuer die
aktuelle uebernommen wurden */
char myself[10]; /* Kuerzel der eigenen Datei */
int game; /* verwendetes Spiel:
0: keins, 1: Eishockey, 2: Tennis, 3: beide
*/
int IceMode;
int TennisMode;
/* jeweils: 0: Normalmodus; 1: jeder gegen jeden */
int IceRankList;
int TennisRankList;
/* jeweils: 0: ausgeschaltet; 1: eingeschaltet */
int ChartSum;
/* 0: ausgeschaltet; 1: eingeschaltet */
} tsTabFileRecord;
/* Datensatz einer Spielerdatei */
typedef struct{
tTabName name;
int index; /* aktueller Index in der Liste aller Spiel;
-1: Index bisher nicht bestimmt
*/
} tsTabGameRecord;
/* Datensatz eines Spiels */
typedef struct{
tTabName name; /* Name des Spielers */
tsTabOneThird data[4]; /* Staerken fuer jedes Drittel und
sudden death */
int IceValid; /* boolean: 1 --> nimmt am Eishockey teil
0 --> nimmt nicht teil
*/
int member; /* boolean: 1 --> Mitglied;
0 --> kein Mitglied;
*/
tsTabGameRecord charts[5];
/* Auswahl HippoCharts des Spielers */
char IceUpdatedIn[5];
/* Kuerzel der Datei, in der die Eishockey
Aufstellung zuletzt vom Benutzer ge-
aendert wurde */
int IceUpdateCount;
/* Anzahl der Uebernahmen des Datensatzes
aus einer alten Datei, ohne dass seitdem
die Eishockey Aufstellung vom Benutzer
geaendert wurde */
int tennis[3]; /* Staerken fuer die drei Tennissaetze */
int TennisValid; /* boolean: 1 --> nimmt am Tennis teil
0 --> nimmt nicht teil
*/
char TennisUpdatedIn[5];
/* wie 'IceUpdatedIn' jedoch fuer Tennis */
int TennisUpdateCount;
/* wie 'IceUpdatedIn' jedoch fuer Tennis */
int IceRankPoints[10];
/* Eishockey-Ranglisten-Punkte */
int IceOldRankHead;
/* alter RankHead-Wert fuer Sonderpunkte */
int IceNewRankHead;
/* neuer RankHead-Wert fuer Sonderpunkte */
int TennisRankPoints[10];
/* Tennis-Ranglisten-Punkte */
int TennisOldRankHead;
/* alter RankHead-Wert fuer Sonderpunkte */
int TennisNewRankHead;
/* neuer RankHead-Wert fuer Sonderpunkte */
} tsTabPlayer, *tpTabPlayer;
/* Datensatz eines Spielers */
/*********** Modul- und Dateimanagement **************/
void TabStart(void);
/* Die Tabelle zur Verwaltung der Spieler wird initialisiert. */
void TabEnd(void);
/* Die Tabelle zur Spielerverwaltung wird deinitialisiert. */
int TabReadFile(void);
/* Die Tabelle wird mit Hilfe der Daten in der neu gefuellt,
die mit TabSetName zuvor festgelegt wurde.
Funktionswert: 0: OK, 1: Fehler */
int TabWriteFile(void);
/* Die Tabelle wird in die Datei geschrieben, die mit TabSetName
zuvor festgelegt wurde.
Funktionswert: 0: OK; 1: Fehler */
int TabCopyFile(char *source, char *target);
/*
Die Datei mit dem Kuerzel '*source' wird in die Datei mit dem
Kuerzel '*target' kopiert.
Funktionswert: 0: ok; 1: Fehler
*/
int TabFileExists(char *file, int *FileExists);
/*
Es wird getestet, ob die Datei mit dem Kuerzel (d. h. 4 Zeichen !)
'*file' existiert; '*FileExists == 1' --> ja; '*FileExists == 2'
--> nein;
Funktionswert: 0: ok; 1: Fehler
*/
/************ Header-Datensatz *************/
char *TabGetMyself(void);
/* liefert Kuerzel der eigenen Datei */
void TabSetGame(int flag);
/* setze Flagge fuer ein-/ausgeschaltete Spiele:
0: kein Spiel, 1: Eishockey, 2: Tennis, 3: beide
*/
int TabGetGame(void);
/* lese Flagge fuer ein-/ausgeschaltete Spiele
*/
void TabSetIceMode(int mode);
/*
Tourniermodus: 0: KO-System; 1: jeder gegen jeden
*/
void TabGetIceMode(int *mode);
void TabSetTennisMode(int mode);
/*
0: Normalmodus; 1: jeder gegen jeden
*/
void TabGetTennisMode(int *mode);
void TabGetIceRankList(int *flag);
/* 0: ausgeschaltet; 1: eingeschaltet */
void TabSetIceRankList(int flag);
void TabGetTennisRankList(int *flag);
void TabSetTennisRankList(int flag);
void TabSetChartSum(int flag);
int TabChartSum(void);
/************ Handhabung aller Datensaetze ************/
void TabSetGamesReferences(void);
/* Referenzen Spielertabelle-->Spieledatenbank werden gesetzt */
void TabDeleteGamesReference(int index);
/* Referenz 'index' Spielertabelle-->Spieledatenbank wird geloescht */
void TabDeleteAllGamesReferences(void);
/*
alle Referenzen Spielertabelle-->Spieledatenbank werden geloescht
*/
int TabGetFirstUnused(void);
/* liefert als Funktionswert den Index des ersten unbenutzten
Eintrags in der Stimmzetteltabelle
*/
void TabSweepAfterCopyFile(void);
/*
Die im Speicher befindliche Datei wird bereinigt in Annahme einer
vorangegangenen Kopieroperation mit 'TabCopyFile()'.
Auswirkungen:
- Eishockey- und Tennismannschaften altern (Zaehler fuer Ueber-
nahmen wird inkrementiert)
- Ranglistenpunkte altern (Werte werden in der Liste nach hinten
geschoben; aktueller Wert wird auf 0 gesetzt; Wert fuer
'RankHead-Sonderpunkte (--> vgl. entsprechende Funktionen)
in 'New' wird auf 'Old' uebertragen)
- Eishockey- und Tennismannschaften, deren Aufstellungen zu lange
nicht geaendert wurden, werden deaktiviert
- Eintraege deren Eishocke- und Tennismannschaften deaktiviert
sind und die keine Ranglistenpunkte aufweisen, werden geloescht
- HippoWINNER-Teilnahme wird ausgeschaltet
*/
void TabSearch(char *name, int StartIndex, int mode,
int *FoundIndex);
/*
sucht Spieler mit 'name' in Stimmzetteldatei; beginnt Suche bei
'StartIndex';
mode: Suchmodus; Bedeutung bitweise:
Bit 0: Flagge fuer 'Suche exakt':
1: 'name' gilt als gefunden, wenn identisch mit Spieler-
name in Datenbank;
0: 'name' gilt als gefunden, wenn 'name' im Namen des
Spielers in der Datenbank vorkommt;
Bit 1: Flagge fuer 'Gross-/Kleinschreibung beachten':
1: beim Suchen wird die Gross-/Kleinschreibung beachtet
0: ...nicht beachtet;
gefunden: Index in '*FoundIndex';
nicht gefunden: '*FoundIndex == -1';
*/
void TabSort(void);
/* Der Inhalt der Spielertabelle wird alphabetisch nach dem Namen
sortiert (Bubble-Sort).
*/
void TabPrint(void);
/* Die Spielertabelle wird auf den Bildschirm ausgegeben.
*/
/************ Handhabung einzelner Datensaetze ***********/
int TabNew(void);
/* Funktionsergebnis ist der Index eines neuen Tabellenelementes.
Dieser Index ist nur g"ultig, solange die Tabelle nicht
sortiert wurde.
*/
void TabSetName(int index, tTabName name);
/* Fuer den Datensatz mit dem angegebenen 'index' wird der Name
neu gesetzt.
*/
char *TabGetName(int index);
/* Funktionswert: Name des Spielers, dessen Index der Parameter
angibt
*/
int TabDelete(int index);
/* Der Datensatz mit dem angegebenen Index wird geloescht.
Funktionswert: 0: ok; -1: Fehler aufgetreten;
*/
/************** HippoWINNER ****************/
void TabSetMember(int index, int member);
/* Fuer den Datensatz mit dem angegebenen 'index' wird die
Mitgliedschaft neu gesetzt.
*/
int TabGetMember(int index);
/* Funktionswert: mit 'TabSetMember()' gesetzter Wert fuer die Mitglied-
schaft
*/
/************ HippoCHARTS *************/
void TabSetCharts(int index, int rank, char *name, int GameIndex);
/* Fuer den Datensatz mit dem angegebenen 'index' wird der
Charts-Spielename fuer den mit 'rank' angegebenen Platz neu
gesetzt.
*/
void TabGetCharts(int index, int rank, char **name, int *GameIndex);
/*
Aus dem Datensatz mit dem angegebenen 'index' wird der
Charts-Spielename und der zugehoerige Index fuer den mit 'rank'
angegebenen Platz gelesen.
*/
/************** Eishockey **************/
void TabGetIce(int index,
int *o1, int *d1, int *o2, int *d2,
int *o3, int *d3, int *o4, int *d4);
/* Fuer den Datensatz mit dem angegebenen 'index' werden die
Daten fuer das Eishockey-Spiel gelesen
*/
void TabSetIce(int index,
int o1, int d1, int o2, int d2,
int o3, int d3, int o4, int d4);
/* Fuer den Datensatz mit dem angegebenen 'index' werden die
Daten fuer das Eishockey-Spiel neu gesetzt.
*/
void TabSetIceValid(int index, int valid);
void TabGetIceValid(int index, int *valid);
void TabGetIceUpdatedIn(int index, char **IceUpdatedIn);
void TabGetIceUpdateCount(int index, int *UpdateCount);
void TabSetIceRankPoints(int index, int points);
/* Ranglisten-Punkte des aktuellen Zeitraumes setzen */
void TabGetIceRankPoints(int index, int *points);
/* Ranglisten-Punkte des aktuellen Zeitraumes lesen */
void TabGetIceRankSum(int index, int *points);
/* Summe aller Ranglisten-Punkte lesen (--> bestimmend fuer Ranglisten-
Platz) */
void TabGetOldIceRankHead(int index, int *flag);
/* alten RankHead-Wert lesen (bestimmend fuer Ranglisten-Sonderpunkte
in der aktuellen Auswertung) */
void TabSetNewIceRankHead(int index, int flag);
/* neuen RankHead-Wert setzen (bestimmend fuer Ranglisten-Sonderpunkte
der Auswertung im naechsten Zeitraum */
void TabGetNewIceRankHead(int index, int *flag);
/* neuen RankHead-Wert lesen */
/************* Tennis *************/
void TabGetTennis(int index, int *s1, int *s2, int *s3);
void TabSetTennis(int index, int s1, int s2, int s3);
void TabGetTennisValid(int index, int *TennisValid);
void TabSetTennisValid(int index, int TennisValid);
void TabGetTennisUpdatedIn(int index, char **UpdatedIn);
void TabGetTennisUpdateCount(int index, int *UpdateCount);
void TabSetTennisRankPoints(int index, int points);
/* Ranglisten-Punkte des aktuellen Zeitraumes setzen */
void TabGetTennisRankPoints(int index, int *points);
/* Ranglisten-Punkte des aktuellen Zeitraumes lesen */
void TabGetTennisRankSum(int index, int *points);
/* Summe aller Ranglisten-Punkte lesen (--> bestimmend fuer Ranglisten-
Platz) */
void TabGetOldTennisRankHead(int index, int *flag);
/* alten RankHead-Wert lesen (bestimmend fuer Ranglisten-Sonderpunkte
in der aktuellen Auswertung) */
void TabSetNewTennisRankHead(int index, int flag);
/* neuen RankHead-Wert setzen (bestimmend fuer Ranglisten-Sonderpunkte
der Auswertung im naechsten Zeitraum */
void TabGetNewTennisRankHead(int index, int *flag);
/* neuen RankHead-Wert lesen */