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