File: PROTOCOL\TProtocolTopography.cpp
1 //******************************************************************************
2 //Datei : TProtocolTopography.cpp
3 //Projekt : XCTL
4 //Subsystem : Protokollbuch
5 //Autor : Jens Klier <klier@informatik.hu-berlin.de>
6 // Institut fuer Informatik,
7 // Humboldt-Universitaet Berlin
8 //Inhalt : Implementation der Klasse TProtocolTopography <-- TProtocol
9 //******************************************************************************
10 //!neu klier Protokollbuch
11 #include "internls\evrythng.h"
12 #include <ctype.h>
13
14 #include "protocol\TProtocolLanguage.h"
15 #include "protocol\TProtocol.h"
16 #include "protocol\TProtocolTopography.h"
17
18 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
19
20
21 TProtocolTopography::TProtocolTopography() : TProtocol(Feldelemente)
22 {
23 int i= 0;
24
25 if ( Parameter != NULL )
26 {
27 strcpy(Parameter[i].Name, "Lfd.-Nr.");
28 Parameter[i++].MaxLen= 6;
29 strcpy(Parameter[i].Name, "RTK-Nr.");
30 Parameter[i++].MaxLen= 2;
31 strcpy(Parameter[i].Name, "Datum");
32 Parameter[i++].MaxLen= 10;
33 strcpy(Parameter[i].Name, "Nutzer");
34 Parameter[i++].MaxLen= 15;
35 strcpy(Parameter[i].Name, "Probennummer");
36 Parameter[i++].MaxLen= 25;
37 strcpy(Parameter[i].Name, "Lieferant");
38 Parameter[i++].MaxLen= 20;
39 strcpy(Parameter[i].Name, "Merkmal");
40 Parameter[i++].MaxLen= 20;
41 strcpy(Parameter[i].Name, "Material");
42 Parameter[i++].MaxLen= 10;
43 strcpy(Parameter[i].Name, "Winkel");
44 Parameter[i++].MaxLen= 4;
45 strcpy(Parameter[i].Name, "Größe");
46 Parameter[i++].MaxLen= 3;
47 strcpy(Parameter[i].Name, "Größe-b");
48 Parameter[i++].MaxLen= 3;
49 strcpy(Parameter[i].Name, "Reflex");
50 Parameter[i++].MaxLen= 10;
51 strcpy(Parameter[i].Name, "Einfallswinkel");
52 Parameter[i++].MaxLen= 2;
53 strcpy(Parameter[i].Name, "Beugungswinkel");
54 Parameter[i++].MaxLen= 2;
55 strcpy(Parameter[i].Name, "Kollimator-Material");
56 Parameter[i++].MaxLen= 6;
57 strcpy(Parameter[i].Name, "Kollimator-Reflex");
58 Parameter[i++].MaxLen= 8;
59 strcpy(Parameter[i].Name, "Kollimator-Nr.");
60 Parameter[i++].MaxLen= 3;
61 strcpy(Parameter[i].Name, "Kollimator-Krümmung");
62 Parameter[i++].MaxLen= 7;
63 strcpy(Parameter[i].Name, "Röhre-Material");
64 Parameter[i++].MaxLen= 2;
65 strcpy(Parameter[i].Name, "Röhre-Strom");
66 Parameter[i++].MaxLen= 2;
67 strcpy(Parameter[i].Name, "Röhre-Spannung");
68 Parameter[i++].MaxLen= 2;
69 strcpy(Parameter[i].Name, "Imp/s Max");
70 Parameter[i++].MaxLen= 6;
71 strcpy(Parameter[i].Name, "Messung-Imp/s Max");
72 Parameter[i++].MaxLen= 6;
73 strcpy(Parameter[i].Name, "Messung-Strom");
74 Parameter[i++].MaxLen= 2;
75 strcpy(Parameter[i].Name, "Messung-Spannung");
76 Parameter[i++].MaxLen= 2;
77 strcpy(Parameter[i].Name, "HWB");
78 Parameter[i++].MaxLen= 7;
79 strcpy(Parameter[i].Name, "Film-Anzahl");
80 Parameter[i++].MaxLen= 1;
81 strcpy(Parameter[i].Name, "Aufnahmematerial");
82 Parameter[i++].MaxLen= 5;
83 strcpy(Parameter[i].Name, "Plattengröße");
84 Parameter[i++].MaxLen= 3;
85 strcpy(Parameter[i].Name, "Plattengröße-b");
86 Parameter[i++].MaxLen= 3;
87 strcpy(Parameter[i].Name, "Abstand");
88 Parameter[i++].MaxLen= 3;
89 strcpy(Parameter[i].Name, "stat. Fehler");
90 Parameter[i++].MaxLen= 3;
91 strcpy(Parameter[i].Name, "Zählzeit");
92 Parameter[i++].MaxLen= 2;
93 strcpy(Parameter[i].Name, "Schrittweite");
94 Parameter[i++].MaxLen= 3;
95 strcpy(Parameter[i].Name, "Anzahl Belichtungen");
96 Parameter[i++].MaxLen= 2;
97 strcpy(Parameter[i].Name, "Winkel zw. Belichtungen");
98 Parameter[i++].MaxLen= 5;
99 strcpy(Parameter[i].Name, "kleinster Startwinkel");
100 Parameter[i++].MaxLen= 5;
101 strcpy(Parameter[i].Name, "proz. Abweichung");
102 Parameter[i++].MaxLen= 3;
103 strcpy(Parameter[i].Name, "Arbeitspunkt");
104 Parameter[i++].MaxLen= 3;
105 strcpy(Parameter[i].Name, "Belichtungszeit");
106 Parameter[i++].MaxLen= 4;
107 strcpy(Parameter[i].Name, "Imp/s vor Messung");
108 Parameter[i++].MaxLen= 5;
109 strcpy(Parameter[i].Name, "Imp/s nach Messung");
110 Parameter[i++].MaxLen= 5;
111 strcpy(Parameter[i].Name, "DF vor Messung");
112 Parameter[i++].MaxLen= 7;
113 strcpy(Parameter[i].Name, "DF nach Messung");
114 Parameter[i++].MaxLen= 7;
115 strcpy(Parameter[i].Name, "Bemerkung");
116 Parameter[i++].MaxLen= 80;
117 strcpy(Parameter[i].Name, "Status");
118 Parameter[i++].MaxLen= 1;
119 }
120 strcpy(szProtocolSection, "ProtocolTopography");
121 };
122
123 void TProtocolTopography::InitializeDefaultParameter( void )
124 {
125 if ( bDebug )
126 MessageBox(GetFocus(), "InitializeDefaultParameter!", "Debug Info", MBINFO);
127 if (IsProtocolOn() && IsProtocolOnBegin())
128 {
129 GetProtocolValue(KKruemmung, DefaultKKruemmung);
130 GetProtocolValue(ImpMax, DefaultImpMax);
131 GetProtocolValue(HWB, DefaultHWB);
132 GetProtocolValue(STE, DefaultSTE);
133 GetProtocolValue(CONLIMIT, DefaultCONLIMIT);
134 GetProtocolValue(CRT, DefaultCRT);
135 GetProtocolValue(INCDF, DefaultINCDF);
136 GetProtocolValue(NBEXPOS, DefaultNBEXPOS);
137 GetProtocolValue(RSA, DefaultRSA);
138 GetProtocolValue(ABE, DefaultABE);
139 GetProtocolValue(EXPT, DefaultEXPT);
140 GetProtocolValue(CONPOINT, DefaultCONPOINT);
141 }
142 else
143 {
144 strcpy(DefaultKKruemmung, "");
145 strcpy(DefaultImpMax, "");
146 strcpy(DefaultHWB, "");
147 strcpy(DefaultSTE, "");
148 strcpy(DefaultCONLIMIT, "");
149 strcpy(DefaultCRT, "");
150 strcpy(DefaultINCDF, "");
151 strcpy(DefaultNBEXPOS, "");
152 strcpy(DefaultRSA, "");
153 strcpy(DefaultABE, "");
154 strcpy(DefaultEXPT, "");
155 strcpy(DefaultCONPOINT, "");
156 }
157 };
158
159 void TProtocolTopography::SetDefaultParameter( void )
160 {
161 if ( bDebug )
162 MessageBox(GetFocus(), "SetDefaultParameter!", "Debug Info", MBINFO);
163 SetProtocolValue(KKruemmung, DefaultKKruemmung);
164 SetProtocolValue(ImpMax, DefaultImpMax);
165 SetProtocolValue(HWB, DefaultHWB);
166 SetProtocolValue(STE, DefaultSTE);
167 SetProtocolValue(CONLIMIT, DefaultCONLIMIT);
168 SetProtocolValue(CRT, DefaultCRT);
169 SetProtocolValue(INCDF, DefaultINCDF);
170 SetProtocolValue(NBEXPOS, DefaultNBEXPOS);
171 SetProtocolValue(RSA, DefaultRSA);
172 SetProtocolValue(ABE, DefaultABE);
173 SetProtocolValue(EXPT, DefaultEXPT);
174 SetProtocolValue(CONPOINT, DefaultCONPOINT);
175 };
176
177 void TProtocolTopography::SetOnDefaultParameterReadOnly( void )
178 {
179 if ( bDebug )
180 MessageBox(GetFocus(), "SetDefaultParameter!", "Debug Info", MBINFO);
181 SetAllParameterReadWrite();
182 SetParameterReadOnly(KKruemmung);
183 SetParameterReadOnly(ImpMax);
184 SetParameterReadOnly(HWB);
185 SetParameterReadOnly(Impsvor);
186 SetParameterReadOnly(Impsnach);
187 // SetParameterReadOnly(STE);
188 // SetParameterReadOnly(CONLIMIT);
189 SetParameterReadOnly(CRT);
190 SetParameterReadOnly(INCDF);
191 SetParameterReadOnly(NBEXPOS);
192 SetParameterReadOnly(RSA);
193 SetParameterReadOnly(ABE);
194 SetParameterReadOnly(EXPT);
195 SetParameterReadOnly(CONPOINT);
196 SetParameterReadOnly(DFvor);
197 SetParameterReadOnly(DFnach);
198 };
199
200 void TProtocolTopography::SetDefaultParameterReadOnly( void )
201 {
202 SetAllParameterReadWrite();
203 };
204
205 void TProtocolTopography::ClearOldParameter( void )
206 {
207 SetProtocolValue(LfdNr, "");
208 SetProtocolValue(RTKNr, "");
209 ClearProtocolString(STE, Status);
210 SetProtocolValue(KKruemmung, "");
211 SetProtocolValue(HWB, "");
212 SetProtocolValue(ImpMax, "");
213 };
214
215 BOOL TProtocolTopography::TestLfdNr( LPCSTR Value1, LPCSTR Value2, LPCSTR Value3 )
216 {
217 int i;
218
219 if ( (strlen(Value1) != 1) || (strlen(Value2) != 5) || (strlen(Value3) < 1) ||
220 (strlen(Value3) > 2))
221 return FALSE;
222 if ( !isalpha(Value1[0]) )
223 return FALSE;
224 for (i= 0; i < 5; i++)
225 if ( !isdigit(Value2[i]) )
226 return FALSE;
227 for (i= 0; i < strlen(Value3); i++)
228 if ( !isdigit(Value3[i]) )
229 return FALSE;
230 return TRUE;
231 };
232
233 BOOL TProtocolTopography::TestLfdNr( LPCSTR Value1, LPCSTR Value2)
234 {
235 int i;
236
237 if ( (strlen(Value1) != GetParameterMaxLen(LfdNr)) || (strlen(Value2) < 1) || (strlen(Value2) > 2))
238 return FALSE;
239 if ( !isalpha(Value1[0]) )
240 return FALSE;
241 for (i= 1; i < GetParameterMaxLen(LfdNr); i++)
242 if ( !isdigit(Value1[i]) )
243 return FALSE;
244 for (i= 0; i < strlen(Value2); i++)
245 if ( !isdigit(Value2[i]) )
246 return FALSE;
247 return TRUE;
248 };
249
250 BOOL TProtocolTopography::TestLfdNr( LPCSTR Value )
251 {
252 int i;
253
254 if ( (strlen(Value) > (GetParameterMaxLen(LfdNr) + GetParameterMaxLen(RTKNr))) ||
255 (strlen(Value) < (GetParameterMaxLen(LfdNr) + GetParameterMaxLen(RTKNr) - 1)) )
256 return FALSE;
257 if ( !isalpha(Value[0]) )
258 return FALSE;
259 for (i= 1; i < strlen(Value); i++)
260 if ( !isdigit(Value[i]) )
261 return FALSE;
262 return TRUE;
263 };
264
265 BOOL TProtocolTopography::SearchProtocolString( LPCSTR lLfdNr )
266 {
267 return TProtocol::SearchProtocolString( lLfdNr );
268 };
269
270 BOOL TProtocolTopography::SearchProtocolString( LPCSTR lLfdNr, LPCSTR lRTKNr,
271 LPCSTR lDatum1, LPCSTR lDatum2, LPCSTR lProbenNr,
272 LPCSTR lLieferant, LPCSTR lMaterial )
273 {
274 char Date1[MaxDate], Date2[MaxDate];
275
276 while ( currentINDEX != NULL )
277 {
278 if (iSearch++ > 0)
279 currentINDEX= currentINDEX->next;
280 if (currentINDEX == NULL)
281 return FALSE;
282 if ( strlen(lLfdNr) == 0 || strncmp(currentINDEX->LfdNr, lLfdNr, strlen(lLfdNr)) == 0 )
283 {
284 MakeDateString(lDatum1, Date1);
285 MakeDateString(lDatum2, Date2);
286 if ( strlen(lDatum1) == 0 || strcmp(currentINDEX->Date, Date1) >= 0 )
287 if ( strlen(lDatum2) == 0 || strcmp(currentINDEX->Date, Date2) <= 0 )
288 {
289 if ( !LoadProtocolString( currentINDEX->Pos) )
290 return FALSE;
291 if ( strlen(lRTKNr) == 0 || strncmp(Parameter[RTKNr].Wert, lRTKNr, strlen(lRTKNr)) == 0 )
292 if ( strlen(lProbenNr) == 0 || strncmp(Parameter[ProbenNr].Wert, lProbenNr, strlen(lProbenNr)) == 0 )
293 if ( strlen(lMaterial) == 0 || strncmp(Parameter[Material].Wert, lMaterial, strlen(lMaterial)) == 0 )
294 if ( strlen(lLieferant) == 0 || strncmp(Parameter[Lieferant].Wert, lLieferant, strlen(lLieferant)) == 0 )
295 return TRUE;
296 }
297 }
298 }
299 return FALSE;
300 };
301
302 LPSTR TProtocolTopography::GetParameterLfdNr( LPSTR lLfdNr)
303 {
304 strcpy(lLfdNr, Parameter[LfdNr].Wert);
305 strcat(lLfdNr, Parameter[RTKNr].Wert);
306 return lLfdNr;
307 };
308
309 LPSTR TProtocolTopography::GetParameterDate( LPSTR lDate)
310 {
311 strcpy(lDate, Parameter[Datum].Wert);
312 return lDate;
313 };
314
315 void TProtocolTopography::SetParameterDate( LPCSTR lDate)
316 {
317 strcpy(Parameter[Datum].Wert, lDate);
318 };
319
320 void TProtocolTopography::SaveLfdNr( LPCSTR Value )
321 {
322 strcpy(CurrentLfdNr, "");
323 strncat(CurrentLfdNr, Value, 6);
324 strcpy(Parameter[LfdNr].Wert, CurrentLfdNr);
325 strncat(CurrentLfdNr, Value + 6, 2);
326 strcpy(Parameter[RTKNr].Wert, "");
327 strncat(Parameter[RTKNr].Wert, Value + 6, 2);
328 };
329
330 void TProtocolTopography::SaveLfdNr( LPCSTR Value1, LPCSTR Value2, LPCSTR Value3 )
331 {
332 strcpy(CurrentLfdNr, Value1);
333 strcat(CurrentLfdNr, Value2);
334 strcpy(Parameter[LfdNr].Wert, CurrentLfdNr);
335 strcat(CurrentLfdNr, Value3);
336 strcpy(Parameter[RTKNr].Wert, Value3);
337 };
338
339 LPSTR TProtocolTopography::GetLfdNrBereich( LPSTR LfdNrBereich )
340 {
341 if (strlen(CurrentLfdNr) > 6)
342 {
343 LfdNrBereich[0]= CurrentLfdNr[0];
344 LfdNrBereich[1]= '\0';
345 }
346 else
347 strcpy(LfdNrBereich, "");
348 return LfdNrBereich;
349 };
350
351 LPSTR TProtocolTopography::GetLfdNrNummer( LPSTR LfdNrNummer )
352 {
353 if (strlen(CurrentLfdNr) > 6)
354 {
355 for (int i= 0; i < 5; i++)
356 LfdNrNummer[i]= CurrentLfdNr[i + 1];
357 LfdNrNummer[5]= '\0';
358 }
359 else
360 strcpy(LfdNrNummer, "");
361 return LfdNrNummer;
362 };
363
364 LPSTR TProtocolTopography::GetRTKNr( LPSTR RTKNr )
365 {
366 if (strlen(CurrentLfdNr) > 6)
367 {
368 for (int i= 0; i < strlen(CurrentLfdNr) - 6; i++)
369 RTKNr[i]= CurrentLfdNr[i + 6];
370 RTKNr[strlen(CurrentLfdNr) - 6]= '\0';
371 }
372 else
373 strcpy(RTKNr, "");
374 return RTKNr;
375 };
376
377 LPSTR TProtocolTopography::GetNewLfdNr( LPSTR lLfdNr )
378 {
379 char buf[MaxLfdNr];
380
381 GetPrivateProfileString(GetProtocolSection(), "LfdNrBereich", "C", lLfdNr, MaxLfdNr, GetCFile( ));
382 strcat(lLfdNr, "00000");
383 GetPrivateProfileString(GetProtocolSection(), "RTKNr", "12", buf, MaxLfdNr, GetCFile( ));
384 strcat(lLfdNr, buf);
385 if (lastINDEX != NULL)
386 {
387 strcpy(buf, "");
388 strncat(buf, lastINDEX->LfdNr + 1, 5);
389 do
390 {
391 sprintf(lLfdNr, "%ld", atol(buf) + 1);
392 strcpy(buf, lLfdNr);
393 strrev(lLfdNr);
394 while (strlen(lLfdNr) < (GetParameterMaxLen(LfdNr) - 1))
395 strcat(lLfdNr, "0");
396 strncat(lLfdNr, lastINDEX->LfdNr, 1);
397 strrev(lLfdNr);
398 strncat(lLfdNr, lastINDEX->LfdNr + 6, 2);
399 } while (SearchProtocolString(lLfdNr) && (atol(buf) < 99999));
400 }
401 return lLfdNr;
402 };
403
404 BOOL TProtocolTopography::IsMaxLfdNr( )
405 {
406 char buf[MaxLfdNr], lLfdNr[MaxLfdNr];
407
408 if (lastINDEX == NULL)
409 return FALSE;
410 strcpy(buf, "");
411 strncat(buf, lastINDEX->LfdNr + 1, 5);
412 if (atol(buf) == 99999)
413 return TRUE;
414 do
415 {
416 sprintf(lLfdNr, "%ld", atol(buf) + 1);
417 strcpy(buf, lLfdNr);
418 strrev(lLfdNr);
419 while (strlen(lLfdNr) < (GetParameterMaxLen(LfdNr) - 1))
420 strcat(lLfdNr, "0");
421 strncat(lLfdNr, lastINDEX->LfdNr, 1);
422 strrev(lLfdNr);
423 strncat(lLfdNr, lastINDEX->LfdNr + 6, 2);
424 } while (SearchProtocolString(lLfdNr) && (atol(buf) <= 99999));
425 SearchProtocolString(GetLfdNr(lLfdNr));
426 if (atol(buf) > 99999)
427 return TRUE;
428 return FALSE;
429 };
430
431 LPCSTR TProtocolTopography::GetPName( )
432 {
433 return GetPTopoName();
434 };
435
436 LPCSTR TProtocolTopography::GetPDirectory( )
437 {
438 return GetPTopoDirectory();
439 };
440
441 LPCSTR TProtocolTopography::GetPBackupDirectory( )
442 {
443 return GetPTopoBackupDirectory();
444 };
445
446 BOOL TProtocolTopography::SetPBackupDirectory( LPCSTR lDir )
447 {
448 return SetPTopoBackupDirectory(lDir);
449 };
450
451 LPCSTR TProtocolTopography::GetPFile( )
452 {
453 return GetPTopoFile();
454 };
455
456 BOOL TProtocolTopography::SetPFile( LPCSTR FileName )
457 {
458 if (!SetPTopoFile( FileName ))
459 return FALSE;
460 WritePrivateProfileString(szProtocolSection, "ProtocolFile", GetPTopoFile(), GetCFile());
461 return TRUE;
462 };
463
464 // LastLine
465