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