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