File: PROTOCOL\PROTOCOL.CPP
1 //******************************************************************************
2 //Datei : protocol.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 Ein- und Austrittspunkte der protocol.dll und
9 // die zu exportierenden Variablen und Methoden
10 // (Protokollbuchinterface für das Messprogramm)
11 //******************************************************************************
12 //!neu klier Protokollbuch
13 #include "internls\evrythng.h"
14 #include "winresrc\rc_prtow.h" // Ressourcen-IDs
15 #include "help\help_def.h" // Help-IDs
16
17 #include "utils\CheckMemory.h" // CHECKMEM
18
19 // Bibliotheken zum Zugriff auf das Dateisystem (16/32bit)
20 // damit koennen die Dateiattribute der Protokolldatei
21 // geaendert werden
22 #include <winbase.h>
23
24 //! neu: klier Allgemeine Einstellungen
25 #include "mespara\mespara.h"
26
27 #include "protocol\TProtocolLanguage.h"
28 #include "protocol\TProtocol.h"
29 #include "protocol\protocol.h"
30 #include "protocol\TProtocolTopography.h"
31 #include "protocol\TProtocolDiffractometry.h"
32 #include "protocol\TProtocolDlg.h"
33 #include "protocol\TProtocolTopographyDlg.h"
34 #include "protocol\TProtocolDiffractometryDlg.h"
35
36 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
37
38 HINSTANCE hModuleInstance;
39
40 // Zeiger auf die Instanz der Allgemeine Einstellungen wird in m_mail.cpp
41 // initialisiert
42 TMeasurementParameter *MeasurementParameter;
43
44 // Fensterhandle des Programmfensters wird in m_mail.cpp initialisiert und
45 // fuer die Anzeige des Dialogfensters benoetigt
46 HWND MainHWND;
47
48
49 // Diese Klassenobjekte verwalten alle im jeweiligen Protokollbuch verwendeten
50 // Parameter einer Messung
51 TProtocolLanguage *ProtocolLanguage= NULL;
52 TProtocolTopography *ProtocolTopography= NULL;
53 TProtocolDiffractometry *ProtocolDiffractometry= NULL;
54
55
56 BOOL SetProtocolValue( TProtocol *Protocol, int Parameter, LPCSTR Value )
57 {
58 if ( Protocol != NULL )
59 if ( Protocol->IsProtocolOn() )
60 {
61 if (Protocol->SetProtocolValue(Parameter, Value))
62 {
63 Protocol->SetParameterReadOnly(Parameter);
64 return TRUE;
65 }
66 Protocol->SetParameterReadWrite(Parameter);
67 }
68 return FALSE;
69 };
70
71 BOOL SetProtocolValue( TProtocol *Protocol, int Parameter, LPCSTR Format, float fValue )
72 {
73 char buf[MaxString];
74
75 if ( Protocol != NULL )
76 {
77 if ( Protocol->IsProtocolOn() )
78 {
79 sprintf(buf, Format, fValue);
80 return SetProtocolValue(Protocol, Parameter, buf);
81 }
82 }
83 return FALSE;
84 };
85
86 // Initialisiert die vom Protokollbuch benoetigten Variablen
87 void _PROTOCOLCLASS WINAPI InitializeProtocol( HWND hwnd, TMeasurementParameter *MeasPara )
88 {
89 MainHWND= hwnd;
90 MeasurementParameter= MeasPara;
91
92 // Schreibschutzattribut der Protokolldatei wird gesetzt
93 SetFileAttributes(GetPTopoFile(), FILE_ATTRIBUTE_ARCHIVE + FILE_ATTRIBUTE_READONLY);
94 SetFileAttributes(GetPDiffFile(), FILE_ATTRIBUTE_ARCHIVE + FILE_ATTRIBUTE_READONLY);
95 };
96
97 // Funktion erzeugt einen ProtokollTopographieDialog und zeigt ihn an,
98 // beim ersten Aufruf wird das ProtocolTopography Objekt initialisiert
99 BOOL _PROTOCOLCLASS WINAPI ViewOnProtocolTopographyDlg()
100 {
101 TModalDlg *dlg= 0;
102
103 if ( ProtocolTopography != NULL )
104 {
105 dlg= (TProtocolTopographyDlg *)new TProtocolTopographyDlg("ProtocolTopographyDlg");
106 if ( dlg ) dlg->ExecuteDialog(MainHWND);
107 _FREEOBJ(dlg);
108 return TRUE;
109 }
110 return FALSE;
111 };
112
113 BOOL _PROTOCOLCLASS WINAPI ViewProtocolTopographyDlg()
114 {
115 if ( !IsProtocolTopographyOn() && !IsProtocolDiffractometryOn() )
116 return ViewOnProtocolTopographyDlg();
117 return FALSE;
118 };
119
120 // Funktion erzeugt einen ProtokollDiffractometryDialog und zeigt ihn an,
121 // beim ersten Aufruf wird das ProtocolDiffractometry Objekt initialisiert
122 BOOL _PROTOCOLCLASS WINAPI ViewOnProtocolDiffractometryDlg()
123 {
124 TModalDlg *dlg= 0;
125
126 if ( ProtocolDiffractometry != NULL )
127 {
128 dlg= (TProtocolDiffractometryDlg *)new TProtocolDiffractometryDlg("ProtocolDiffractometryDlg");
129 if ( dlg ) dlg->ExecuteDialog(MainHWND);
130 _FREEOBJ(dlg);
131 return TRUE;
132 }
133 return FALSE;
134 };
135
136 BOOL _PROTOCOLCLASS WINAPI ViewProtocolDiffractometryDlg()
137 {
138 if ( !IsProtocolTopographyOn() && !IsProtocolDiffractometryOn() )
139 return ViewOnProtocolDiffractometryDlg();
140 return FALSE;
141 };
142
143 // Diese Methoden werden von m_topo.cpp aufgerufen
144 // und setzen einen ProtokollTopographyParameter
145 //-------------------------------------------------------------
146
147 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyOn( void )
148 {
149 if ( ProtocolTopography != NULL )
150 {
151 ProtocolTopography->SetProtocolOn();
152 return TRUE;
153 }
154 return FALSE;
155 };
156
157 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyOff( void )
158 {
159 if ( ProtocolTopography != NULL )
160 {
161 ProtocolTopography->SetProtocolOn(FALSE);
162 return TRUE;
163 }
164 return FALSE;
165 };
166
167 BOOL _PROTOCOLCLASS WINAPI IsProtocolTopographyOn( void )
168 {
169 if ( ProtocolTopography != NULL )
170 return ProtocolTopography->IsProtocolOn();
171 return FALSE;
172 };
173
174 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyKKruemmung( float fValue ) //Maximale Anzahl Impulse
175 {
176 return SetProtocolValue(ProtocolTopography, ProtocolTopography->KKruemmung, "%.2f", fValue);
177 };
178
179 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyImpMax( float fValue ) //Maximale Anzahl Impulse
180 {
181 return SetProtocolValue(ProtocolTopography, ProtocolTopography->ImpMax, "%.0f", fValue);
182 };
183
184 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyImpsvor( float fValue )
185 {
186 return SetProtocolValue(ProtocolTopography, ProtocolTopography->Impsvor, "%.0f", fValue);
187 };
188
189 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyImpsnach( float fValue )
190 {
191 return SetProtocolValue(ProtocolTopography, ProtocolTopography->Impsnach, "%.0f", fValue);
192 };
193
194 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographySTE()
195 {
196 // return SetProtocolValue(ProtocolTopography, ProtocolTopography->STE, "?");
197 return TRUE;
198 };
199
200 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyCONLIMIT()
201 {
202 // return SetProtocolValue(ProtocolTopography, ProtocolTopography->CONLIMIT, "?");
203 return TRUE;
204 };
205
206 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyCRT( float fValue )
207 {
208 return SetProtocolValue(ProtocolTopography, ProtocolTopography->CRT, "%.0f", fValue);
209 };
210
211 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyHWB( float fValue )
212 {
213 if (fValue != 0)
214 return SetProtocolValue(ProtocolTopography, ProtocolTopography->HWB, "%.2f", fValue);
215 else
216 return TRUE;
217 };
218
219 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyINCDF( float fValue )
220 {
221 return SetProtocolValue(ProtocolTopography, ProtocolTopography->INCDF, "%.1f", fValue);
222 };
223
224 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyNBEXPOS( WORD nValue )
225 {
226 char buf[MaxString];
227
228 sprintf(buf, "%d", nValue);
229 return SetProtocolValue(ProtocolTopography, ProtocolTopography->NBEXPOS, buf);
230 };
231
232 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyRSA( double dValue )
233 {
234 char buf[MaxString];
235
236 sprintf(buf, "%.1f", dValue);
237 return SetProtocolValue(ProtocolTopography, ProtocolTopography->RSA, buf);
238 };
239
240 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyABE( float fValue )
241 {
242 return SetProtocolValue(ProtocolTopography, ProtocolTopography->ABE, "%.1f", fValue);
243 };
244
245 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyEXPT( long lValue ) //Belichtungszeit
246 {
247 return SetProtocolValue(ProtocolTopography, ProtocolTopography->EXPT, "%.1f", (lValue / 60l) / 60);
248 };
249
250 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyCONPOINT( float fValue ) //Arbeitspunkt
251 {
252 return SetProtocolValue(ProtocolTopography, ProtocolTopography->CONPOINT, "%.0f", fValue*100);
253 };
254
255 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyDFvor( float fValue )
256 {
257 return SetProtocolValue(ProtocolTopography, ProtocolTopography->DFvor, "%.2lf", fValue);
258 };
259
260 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyDFnach( float fValue )
261 {
262 return SetProtocolValue(ProtocolTopography, ProtocolTopography->DFnach, "%.2lf", fValue);
263 };
264
265 BOOL _PROTOCOLCLASS WINAPI SaveProtocolTopographyParameter( void )
266 {
267 if ( ProtocolTopography != NULL )
268 if ( ProtocolTopography->IsProtocolOn() )
269 return ProtocolTopography->SaveProtocolString();
270 return FALSE;
271 };
272
273 BOOL _PROTOCOLCLASS WINAPI SetProtocolTopographyReadOnly( void )
274 {
275 if ( ProtocolTopography != NULL )
276 {
277 if ( ProtocolTopography->IsProtocolOn() && !ProtocolTopography->IsProtocolOnBegin() )
278 {
279 ProtocolTopography->SetProtocolReadOnly();
280 return TRUE;
281 }
282 }
283 return FALSE;
284 };
285 //-------------------------------------------------------------
286 // Diese Methoden werden von m_scan.cpp und m_arscan aufgerufen
287 // und setzen einen ProtokollDiffractometryParameter
288 //-------------------------------------------------------------
289 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryOn( void )
290 {
291 if ( ProtocolDiffractometry != NULL )
292 {
293 ProtocolDiffractometry->SetProtocolOn();
294 return TRUE;
295 }
296 return FALSE;
297 };
298
299 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryOff( void )
300 {
301 if ( ProtocolDiffractometry != NULL )
302 {
303 ProtocolDiffractometry->SetProtocolOn(FALSE);
304 return TRUE;
305 }
306 return FALSE;
307 };
308
309 BOOL _PROTOCOLCLASS WINAPI IsProtocolDiffractometryOn( void )
310 {
311 if ( ProtocolDiffractometry != NULL )
312 return ProtocolDiffractometry->IsProtocolOn();
313 return FALSE;
314 };
315
316 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMessdatei( LPCSTR Value )
317 {
318 char Drive[_MAX_DRIVE], Dir[_MAX_DIR], Name[_MAX_FNAME], Ext[_MAX_EXT], File[MaxString];
319
320 _splitpath( Value, Drive, Dir, Name, Ext );
321 sprintf( File, "%s%s", Name, Ext );
322 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Messdatei, File);
323 };
324
325 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryNutzer( LPCSTR Value )
326 {
327 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Nutzer, Value);
328 };
329
330 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryScanart( LPCSTR Value )
331 {
332 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Scanart, Value);
333 };
334
335 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryOrientierung( LPCSTR Value )
336 {
337 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Orientierung, Value);
338 };
339
340 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryUReflex( LPCSTR Value )
341 {
342 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->UReflex, Value);
343 };
344
345 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometrySpannung( LPCSTR Value )
346 {
347 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Spannung, Value);
348 };
349
350 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryWellenlaenge( LPCSTR Value )
351 {
352 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Wellenlaenge, Value);
353 };
354
355 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryScantyp( LPCSTR Value )
356 {
357 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Scantyp, Value);
358 };
359
360 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryScanmethode( LPCSTR Value )
361 {
362 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Scanmethode, Value);
363 };
364
365 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryStrom( LPCSTR Value )
366 {
367 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Strom, Value);
368 };
369
370 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryScanachse1( LPCSTR Value )
371 {
372 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Scanachse1, Value);
373 };
374
375 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometrySOffset1( LPCSTR Value )
376 {
377 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->SOffset1, Value);
378 };
379
380 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMinimum1( LPCSTR Value )
381 {
382 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Minimum1, Value);
383 };
384
385 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMaximum1( LPCSTR Value )
386 {
387 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Maximum1, Value);
388 };
389
390 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometrySchrittweite1( LPCSTR Value )
391 {
392 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Schrittweite1, Value);
393 };
394
395 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryGeschwindigkeit1( LPCSTR Value )
396 {
397 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Geschwindigkeit1, Value);
398 };
399
400 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryScanachse2( LPCSTR Value )
401 {
402 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Scanachse2, Value);
403 };
404
405 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometrySOffset2( LPCSTR Value )
406 {
407 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->SOffset2, Value);
408 };
409
410 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMinimum2( LPCSTR Value )
411 {
412 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Minimum2, Value);
413 };
414
415 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMaximum2( LPCSTR Value )
416 {
417 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Maximum2, Value);
418 };
419
420 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometrySchrittweite2( LPCSTR Value )
421 {
422 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Schrittweite2, Value);
423 };
424
425 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryGeschwindigkeit2( LPCSTR Value )
426 {
427 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Geschwindigkeit2, Value);
428 };
429
430 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryDetektor( LPCSTR Value )
431 {
432 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Detektor, Value);
433 };
434
435 /*
436 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryDetektor( int iValue )
437 {
438 if(iValue==1)
439 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Detektor, "PSD");
440 else
441 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Detektor, "Counter");
442 };
443 */
444
445 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMonitor( LPCSTR Value )
446 {
447 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Monitor, Value);
448 };
449
450 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMesszeit( float fValue )
451 {
452 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Messzeit, "%.2f", fValue);
453 };
454
455 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryImpulse( DWORD dwValue )
456 {
457 char buf[MaxString];
458
459 sprintf( buf, "%lu", dwValue );
460 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Impulse, buf);
461 };
462
463 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryWinkelbereich( float fValue )
464 {
465 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Winkelbereich, "%.2f", fValue);
466 };
467
468 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryKanalabstand( float fValue )
469 {
470 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Kanalabstand, "%.2f", fValue);
471 };
472
473 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryMesskanal( float fValue )
474 {
475 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Messkanal, "%.0f", fValue);
476 };
477
478 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryAddiere( int iValue )
479 {
480 char buf[MaxString];
481
482 sprintf( buf, "%d", iValue );
483 return SetProtocolValue(ProtocolDiffractometry, ProtocolDiffractometry->Addiere, buf);
484 };
485
486 BOOL _PROTOCOLCLASS WINAPI SaveProtocolDiffractometryParameter( void )
487 {
488 if ( ProtocolDiffractometry != NULL )
489 if ( ProtocolDiffractometry->IsProtocolOn() )
490 return ProtocolDiffractometry->SaveProtocolString();
491 return FALSE;
492 };
493
494 BOOL _PROTOCOLCLASS WINAPI SetProtocolDiffractometryReadOnly( void )
495 {
496 if ( ProtocolDiffractometry != NULL )
497 {
498 if ( ProtocolDiffractometry->IsProtocolOn() && !ProtocolTopography->IsProtocolOnBegin() )
499 {
500 ProtocolDiffractometry->SetProtocolReadOnly();
501 return TRUE;
502 }
503 }
504 return FALSE;
505 };
506 //-------------------------------------------------------------
507
508
509 //Ein- und Austrittspunkte der protocol.dll
510 // Die Klassen ProtocolTopography und ProtocolDiffractometry werden erzeugt!
511
512 BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwFunction, LPVOID)
513 {
514 switch (dwFunction)
515 {
516 case DLL_PROCESS_ATTACH:
517 hModuleInstance= hModule;
518 // Initialize function array.
519 if ( ProtocolLanguage == NULL )
520 ProtocolLanguage= new TProtocolLanguage();
521
522 if ( ProtocolLanguage != NULL && ProtocolTopography == NULL )
523 ProtocolTopography= new TProtocolTopography();
524
525 if ( ProtocolLanguage != NULL && ProtocolDiffractometry == NULL )
526 ProtocolDiffractometry= new TProtocolDiffractometry();
527 break;
528
529 case DLL_PROCESS_DETACH:
530 _FREEOBJ(ProtocolTopography);
531 _FREEOBJ(ProtocolDiffractometry);
532 _FREEOBJ(ProtocolLanguage);
533 //CHECKMEM("PROTOCOL.DLL"); //hp
534 break;
535 }
536 return TRUE;
537 }
538
539 // __LastLine__
540
541
542