File: PROTOCOL\TProtocolDiffractometry.cpp
1 //******************************************************************************
2 //Datei : TProtocolDiffractometry.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 TProtocolDiffractometry <-- TProtocol
9 //******************************************************************************
10 //!neu klier Protokollbuch
11
12 #include "internls\evrythng.h"
13 #include <ctype.h>
14
15 //! neu: klier Allgemeine Einstellungen
16 #include "mespara\mespara.h"
17
18 #include "protocol\TProtocolLanguage.h"
19 #include "protocol\TProtocol.h"
20 #include "protocol\TProtocolDiffractometry.h"
21
22 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
23
24 //!neu klier Allgemeine Einstellungen
25 extern TMeasurementParameter *MeasurementParameter;
26
27
28 TProtocolDiffractometry::TProtocolDiffractometry() : TProtocol(Feldelemente)
29 {
30 int i= 0;
31
32 if ( Parameter != NULL )
33 {
34 strcpy(Parameter[i].Name, "Lfd.-Nr.");
35 Parameter[i++].MaxLen= 8;
36 strcpy(Parameter[i].Name, "Datum");
37 Parameter[i++].MaxLen= 10;
38 strcpy(Parameter[i].Name, "Nutzer");
39 Parameter[i++].MaxLen= 15;
40 strcpy(Parameter[i].Name, "Probennummer");
41 Parameter[i++].MaxLen= 25;
42 strcpy(Parameter[i].Name, "Material");
43 Parameter[i++].MaxLen= 20;
44 strcpy(Parameter[i].Name, "Orientierung");
45 Parameter[i++].MaxLen= 6;
46 strcpy(Parameter[i].Name, "Untersuchter Reflex");
47 Parameter[i++].MaxLen= 6;
48 strcpy(Parameter[i].Name, "Fehlschnitt Winkel");
49 Parameter[i++].MaxLen= 6;
50 strcpy(Parameter[i].Name, "Fehlschnitt Richtung");
51 Parameter[i++].MaxLen= 6;
52 strcpy(Parameter[i].Name, "Scanart");
53 Parameter[i++].MaxLen= 10;
54 strcpy(Parameter[i].Name, "Scanmethode");
55 Parameter[i++].MaxLen= 15;
56 strcpy(Parameter[i].Name, "Strom");
57 Parameter[i++].MaxLen= 3;
58 strcpy(Parameter[i].Name, "Spannung");
59 Parameter[i++].MaxLen= 3;
60 strcpy(Parameter[i].Name, "Wellenlänge");
61 Parameter[i++].MaxLen= 8;
62 strcpy(Parameter[i].Name, "Messdateiname");
63 Parameter[i++].MaxLen= 32;
64 strcpy(Parameter[i].Name, "Scantyp");
65 Parameter[i++].MaxLen= 15;
66 strcpy(Parameter[i].Name, "Scanachse1");
67 Parameter[i++].MaxLen= 15;
68 strcpy(Parameter[i].Name, "Offset1");
69 Parameter[i++].MaxLen= 8;
70 strcpy(Parameter[i].Name, "Minnimum1/Start1");
71 Parameter[i++].MaxLen= 8;
72 strcpy(Parameter[i].Name, "Maximum1/Ende1");
73 Parameter[i++].MaxLen= 8;
74 strcpy(Parameter[i].Name, "Schrittweite1/Bereichsgröße1");
75 Parameter[i++].MaxLen= 8;
76 strcpy(Parameter[i].Name, "Geschwindigkeit1");
77 Parameter[i++].MaxLen= 8;
78 strcpy(Parameter[i].Name, "Scanachse2");
79 Parameter[i++].MaxLen= 10;
80 strcpy(Parameter[i].Name, "Offset2");
81 Parameter[i++].MaxLen= 10;
82 strcpy(Parameter[i].Name, "Minnimum2/Start2");
83 Parameter[i++].MaxLen= 10;
84 strcpy(Parameter[i].Name, "Maximum2/Ende2");
85 Parameter[i++].MaxLen= 10;
86 strcpy(Parameter[i].Name, "Schrittweite2/Bereichsgröße2");
87 Parameter[i++].MaxLen= 10;
88 strcpy(Parameter[i].Name, "Geschwindigkeit2");
89 Parameter[i++].MaxLen= 10;
90 strcpy(Parameter[i].Name, "Primärstrahlblende horizontal");
91 Parameter[i++].MaxLen= 4;
92 strcpy(Parameter[i].Name, "Primärstrahlblende vertikal");
93 Parameter[i++].MaxLen= 4;
94 strcpy(Parameter[i].Name, "Detektorblende horizontal");
95 Parameter[i++].MaxLen= 4;
96 strcpy(Parameter[i].Name, "Detektorblende vertikal");
97 Parameter[i++].MaxLen= 4;
98 strcpy(Parameter[i].Name, "Absorber Art");
99 Parameter[i++].MaxLen= 6;
100 strcpy(Parameter[i].Name, "Absorber Faktor");
101 Parameter[i++].MaxLen= 10;
102 strcpy(Parameter[i].Name, "Detektor");
103 Parameter[i++].MaxLen= 10;
104 strcpy(Parameter[i].Name, "Messzeit");
105 Parameter[i++].MaxLen= 6;
106 strcpy(Parameter[i].Name, "Impulse");
107 Parameter[i++].MaxLen= 10;
108 strcpy(Parameter[i].Name, "Distanz/PSD Winkelbereich");
109 Parameter[i++].MaxLen= 8;
110 strcpy(Parameter[i].Name, "PSD Kanalabstand");
111 Parameter[i++].MaxLen= 8;
112 strcpy(Parameter[i].Name, "PSD Kanalnummer");
113 Parameter[i++].MaxLen= 8;
114 strcpy(Parameter[i].Name, "PSD Addiere");
115 Parameter[i++].MaxLen= 6;
116 strcpy(Parameter[i].Name, "Monitordetektor");
117 Parameter[i++].MaxLen= 10;
118 strcpy(Parameter[i].Name, "Bemerkung");
119 Parameter[i++].MaxLen= 161;
120 strcpy(Parameter[i].Name, "Status");
121 Parameter[i++].MaxLen= 1;
122 }
123 strcpy(szProtocolSection, "ProtocolDiffractometry");
124 };
125
126 void TProtocolDiffractometry::InitializeDefaultParameter( void )
127 {
128 if ( bDebug )
129 MessageBox(GetFocus(), "InitializeDefaultParameter!", "Debug Info", MBINFO);
130 if (IsProtocolOn() && IsProtocolOnBegin())
131 {
132 GetProtocolValue(Scanart, DefaultScanart);
133 GetProtocolValue(Scanmethode, DefaultScanmethode);
134 GetProtocolValue(Messdatei, DefaultMessdatei);
135 GetProtocolValue(Scantyp, DefaultScantyp);
136 GetProtocolValue(Scanachse1, DefaultScanachse1);
137 GetProtocolValue(SOffset1, DefaultSOffset1);
138 GetProtocolValue(Minimum1, DefaultMinimum1);
139 GetProtocolValue(Maximum1, DefaultMaximum1);
140 GetProtocolValue(Schrittweite1, DefaultSchrittweite1);
141 GetProtocolValue(Geschwindigkeit1, DefaultGeschwindigkeit1);
142 GetProtocolValue(Scanachse2, DefaultScanachse2);
143 GetProtocolValue(SOffset2, DefaultSOffset2);
144 GetProtocolValue(Minimum2, DefaultMinimum2);
145 GetProtocolValue(Maximum2, DefaultMaximum2);
146 GetProtocolValue(Schrittweite2, DefaultSchrittweite2);
147 GetProtocolValue(Geschwindigkeit2, DefaultGeschwindigkeit2);
148 GetProtocolValue(Detektor, DefaultDetektor);
149 GetProtocolValue(Monitor, DefaultMonitor);
150 GetProtocolValue(Messzeit, DefaultMesszeit);
151 GetProtocolValue(Impulse, DefaultImpulse);
152 GetProtocolValue(Winkelbereich, DefaultWinkelbereich);
153 GetProtocolValue(Kanalabstand, DefaultKanalabstand);
154 GetProtocolValue(Messkanal, DefaultMesskanal);
155 GetProtocolValue(Addiere, DefaultAddiere);
156 }
157 else
158 {
159 strcpy(DefaultScanart, "-");
160 strcpy(DefaultScanmethode, "-");
161 strcpy(DefaultMessdatei, "");
162 strcpy(DefaultScantyp, "-");
163 strcpy(DefaultScanachse1, "-");
164 strcpy(DefaultSOffset1, "");
165 strcpy(DefaultMinimum1, "");
166 strcpy(DefaultMaximum1, "");
167 strcpy(DefaultSchrittweite1, "");
168 strcpy(DefaultGeschwindigkeit1, "");
169 strcpy(DefaultScanachse2, "");
170 strcpy(DefaultSOffset2, "");
171 strcpy(DefaultMinimum2, "");
172 strcpy(DefaultMaximum2, "");
173 strcpy(DefaultSchrittweite2, "");
174 strcpy(DefaultGeschwindigkeit2, "");
175 strcpy(DefaultDetektor, "-");
176 strcpy(DefaultMonitor, "-");
177 strcpy(DefaultMesszeit, "");
178 strcpy(DefaultImpulse, "");
179 strcpy(DefaultWinkelbereich, "");
180 strcpy(DefaultKanalabstand, "");
181 strcpy(DefaultMesskanal, "");
182 strcpy(DefaultAddiere, "");
183 }
184 };
185
186 void TProtocolDiffractometry::SetDefaultParameter( void )
187 {
188 char buf[MaxString];
189
190 if ( bDebug )
191 MessageBox(GetFocus(), "SetDefaultParameter!", "Debug Info", MBINFO);
192 SetProtocolValue(Scanart, DefaultScanart);
193 SetProtocolValue(Scanmethode, DefaultScanmethode);
194 SetProtocolValue(Messdatei, DefaultMessdatei);
195 SetProtocolValue(Scantyp, DefaultScantyp);
196 SetProtocolValue(Scanachse1, DefaultScanachse1);
197 SetProtocolValue(SOffset1, DefaultSOffset1);
198 SetProtocolValue(Minimum1, DefaultMinimum1);
199 SetProtocolValue(Maximum1, DefaultMaximum1);
200 SetProtocolValue(Schrittweite1, DefaultSchrittweite1);
201 SetProtocolValue(Geschwindigkeit1, DefaultGeschwindigkeit1);
202 SetProtocolValue(Scanachse2, DefaultScanachse2);
203 SetProtocolValue(SOffset2, DefaultSOffset2);
204 SetProtocolValue(Minimum2, DefaultMinimum2);
205 SetProtocolValue(Maximum2, DefaultMaximum2);
206 SetProtocolValue(Schrittweite2, DefaultSchrittweite2);
207 SetProtocolValue(Geschwindigkeit2, DefaultGeschwindigkeit2);
208 SetProtocolValue(Detektor, DefaultDetektor);
209 SetProtocolValue(Monitor, DefaultMonitor);
210 SetProtocolValue(Messzeit, DefaultMesszeit);
211 SetProtocolValue(Impulse, DefaultImpulse);
212 SetProtocolValue(Winkelbereich, DefaultWinkelbereich);
213 SetProtocolValue(Kanalabstand, DefaultKanalabstand);
214 SetProtocolValue(Messkanal, DefaultMesskanal);
215 SetProtocolValue(Addiere, DefaultAddiere);
216
217 SetProtocolValue(Nutzer, MeasurementParameter->GetUser());
218 SetProtocolValue(UReflex, MeasurementParameter->GetReflection(buf));
219 SetProtocolValue(Orientierung, MeasurementParameter->GetOrientation(buf));
220 SetProtocolValue(Wellenlaenge, MeasurementParameter->GetWaveLength(buf));
221 SetProtocolValue(Strom, MeasurementParameter->GetCurrent(buf));
222 SetProtocolValue(Spannung, MeasurementParameter->GetVoltage(buf));
223 SetProtocolValue(Bemerkung, MeasurementParameter->GetComment());
224 };
225
226 void TProtocolDiffractometry::SetOnDefaultParameterReadOnly( void )
227 {
228 SetAllParameterReadWrite();
229 SetParameterReadOnly(Nutzer);
230 SetParameterReadOnly(Orientierung);
231 SetParameterReadOnly(UReflex);
232 SetParameterReadOnly(Strom);
233 SetParameterReadOnly(Spannung);
234 SetParameterReadOnly(Wellenlaenge);
235 SetParameterReadOnly(Messdatei);
236 SetParameterReadOnly(Scanart);
237 SetParameterReadOnly(Scantyp);
238 SetParameterReadOnly(Scanmethode);
239 SetParameterReadOnly(Scanachse1);
240 SetParameterReadOnly(Minimum1);
241 SetParameterReadOnly(Maximum1);
242 SetParameterReadOnly(Schrittweite1);
243 SetParameterReadOnly(Geschwindigkeit1);
244 SetParameterReadOnly(SOffset1);
245 SetParameterReadOnly(Scanachse2);
246 SetParameterReadOnly(Minimum2);
247 SetParameterReadOnly(Maximum2);
248 SetParameterReadOnly(Schrittweite2);
249 SetParameterReadOnly(Geschwindigkeit2);
250 SetParameterReadOnly(SOffset2);
251 SetParameterReadOnly(Detektor);
252 SetParameterReadOnly(Monitor);
253 SetParameterReadOnly(Messzeit);
254 SetParameterReadOnly(Impulse);
255 SetParameterReadOnly(Kanalabstand);
256 SetParameterReadOnly(Messkanal);
257 SetParameterReadOnly(Addiere);
258 };
259
260 void TProtocolDiffractometry::SetDefaultParameterReadOnly( void )
261 {
262 SetOnDefaultParameterReadOnly();
263 };
264
265 void TProtocolDiffractometry::ClearOldParameter( void )
266 {
267 SetProtocolValue(LfdNr, "");
268 ClearProtocolString(Messdatei, Geschwindigkeit2);
269 ClearProtocolString(AArt, Status);
270 };
271
272 BOOL TProtocolDiffractometry::TestLfdNr( LPCSTR Value )
273 {
274 int i, iStrLen;
275
276 iStrLen= strlen(Value);
277 if (iStrLen != GetParameterMaxLen(LfdNr))
278 return FALSE;
279 for (i= 0; i < iStrLen; i++)
280 if ( !isdigit(Value[i]) )
281 return FALSE;
282 return TRUE;
283 };
284
285 BOOL TProtocolDiffractometry::SearchProtocolString( LPCSTR lLfdNr )
286 {
287 return TProtocol::SearchProtocolString( lLfdNr );
288 };
289
290 BOOL TProtocolDiffractometry::SearchProtocolString( LPCSTR lLfdNr,
291 LPCSTR lDatum1, LPCSTR lDatum2, LPCSTR lProbenNr,
292 LPCSTR lMaterial )
293 {
294 char Date1[MaxDate], Date2[MaxDate];
295
296 while ( currentINDEX != NULL )
297 {
298 if (iSearch++ > 0)
299 currentINDEX= currentINDEX->next;
300 if (currentINDEX == NULL)
301 return FALSE;
302 if ( strlen(lLfdNr) == 0 || strncmp(currentINDEX->LfdNr, lLfdNr, strlen(lLfdNr)) == 0 )
303 {
304 MakeDateString(lDatum1, Date1);
305 MakeDateString(lDatum2, Date2);
306 if ( strlen(lDatum1) == 0 || strcmp(currentINDEX->Date, Date1) >= 0 )
307 if ( strlen(lDatum2) == 0 || strcmp(currentINDEX->Date, Date2) <= 0 )
308 {
309 if ( !LoadProtocolString( currentINDEX->Pos) )
310 return FALSE;
311 if ( strlen(lProbenNr) == 0 || strncmp(Parameter[ProbenNr].Wert, lProbenNr, strlen(lProbenNr)) == 0 )
312 if ( strlen(lMaterial) == 0 || strncmp(Parameter[Material].Wert, lMaterial, strlen(lMaterial)) == 0 )
313 return TRUE;
314 }
315 }
316 }
317 return FALSE;
318 };
319
320 void TProtocolDiffractometry::SaveLfdNr( LPCSTR Value)
321 {
322 strcpy(CurrentLfdNr, Value);
323 strcpy(Parameter[LfdNr].Wert, Value);
324 };
325
326 LPSTR TProtocolDiffractometry::GetParameterLfdNr( LPSTR lLfdNr)
327 {
328 strcpy(lLfdNr, Parameter[LfdNr].Wert);
329 return lLfdNr;
330 };
331
332 LPSTR TProtocolDiffractometry::GetParameterDate( LPSTR lDate)
333 {
334 strcpy(lDate, Parameter[Datum].Wert);
335 return lDate;
336 };
337
338 void TProtocolDiffractometry::SetParameterDate( LPCSTR lDate)
339 {
340 strcpy(Parameter[Datum].Wert, lDate);
341 };
342
343 LPSTR TProtocolDiffractometry::GetNewLfdNr( LPSTR lLfdNr )
344 {
345 char buf[MaxLfdNr];
346
347 strcpy(lLfdNr, "00000000");
348 if (lastINDEX != NULL)
349 {
350 strcpy(buf, lastINDEX->LfdNr);
351 do
352 {
353 sprintf(lLfdNr, "%ld", atol(buf) + 1);
354 strcpy(buf, lLfdNr);
355 strrev(lLfdNr);
356 while (strlen(lLfdNr) < (GetParameterMaxLen(LfdNr)))
357 strcat(lLfdNr, "0");
358 strrev(lLfdNr);
359 } while (SearchProtocolString(lLfdNr) && (atol(buf) < 99999999));
360 }
361 return lLfdNr;
362 };
363
364 BOOL TProtocolDiffractometry::IsMaxLfdNr( void )
365 {
366 char buf[MaxLfdNr], lLfdNr[MaxLfdNr];
367
368 if (lastINDEX == NULL)
369 return FALSE;
370 strcpy(buf, lastINDEX->LfdNr);
371 if (atol(buf) == 99999999)
372 return TRUE;
373 do
374 {
375 sprintf(lLfdNr, "%ld", atol(buf) + 1);
376 strcpy(buf, lLfdNr);
377 strrev(lLfdNr);
378 while (strlen(lLfdNr) < (GetParameterMaxLen(LfdNr)))
379 strcat(lLfdNr, "0");
380 strrev(lLfdNr);
381 } while (SearchProtocolString(lLfdNr) && (atol(buf) <= 99999999));
382 SearchProtocolString(GetLfdNr(lLfdNr));
383 if (atol(buf) > 99999999)
384 return TRUE;
385 return FALSE;
386 };
387
388 LPCSTR TProtocolDiffractometry::GetPName( )
389 {
390 return GetPDiffName();
391 };
392
393 LPCSTR TProtocolDiffractometry::GetPDirectory( )
394 {
395 return GetPDiffDirectory();
396 };
397
398 LPCSTR TProtocolDiffractometry::GetPBackupDirectory( )
399 {
400 return GetPDiffBackupDirectory();
401 };
402
403 BOOL TProtocolDiffractometry::SetPBackupDirectory( LPCSTR lDir )
404 {
405 return SetPDiffBackupDirectory(lDir);
406 };
407
408 LPCSTR TProtocolDiffractometry::GetPFile( )
409 {
410 return GetPDiffFile();
411 };
412
413 BOOL TProtocolDiffractometry::SetPFile( LPCSTR FileName )
414 {
415 if (!SetPDiffFile( FileName ))
416 return FALSE;
417 WritePrivateProfileString(szProtocolSection, "ProtocolFile", GetPDiffFile(), GetCFile());
418 return TRUE;
419 };
420
421 // LastLine
422