Index: trunk/BNC/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 341)
+++ trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 366)
@@ -90,5 +90,5 @@
         if (rr == 2) {
           std::cerr << "No valid RINEX! All values are modulo 299792.458!\n";
-          exit(1);
+//        exit(1); 
         }
 
@@ -107,13 +107,30 @@
 
           for (int jj = 0; jj < _Parser.numdatatypes; jj++) {
-
-            if ( !(_Parser.Data.dataflags[ii] & _Parser.dataflag[jj])
-                 || isnan(_Parser.Data.measdata[ii][_Parser.datapos[jj]])
-                 || isinf(_Parser.Data.measdata[ii][_Parser.datapos[jj]]) ) {
-              continue;
+            int v = 0;
+            int df = _Parser.dataflag[jj];
+            int pos = _Parser.datapos[jj];
+            if ( (_Parser.Data.dataflags[ii] & df)
+                 && !isnan(_Parser.Data.measdata[ii][pos])
+                 && !isinf(_Parser.Data.measdata[ii][pos])) {
+              v = 1;
             }
-              
+            else {
+              df = _Parser.dataflag2[jj];
+              pos = _Parser.datapos2[jj];
+              if ( (_Parser.Data.dataflags[ii] & df)
+                   && !isnan(_Parser.Data.measdata[ii][pos])
+                   && !isinf(_Parser.Data.measdata[ii][pos])) {
+              v = 1;
+              }
+            }
+          if(!v)
+          { continue; }
+          else
+          {
             if      (_Parser.dataflag[jj] & GNSSDF_C1DATA) {
               obs->C1 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
+            }
+            else if (_Parser.dataflag[jj] & GNSSDF_C2DATA) {
+              obs->C2 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
             }
             else if (_Parser.dataflag[jj] & GNSSDF_P1DATA) {
@@ -123,12 +140,13 @@
               obs->P2 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
             }
-            else if (_Parser.dataflag[jj] & (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) {
-              obs->L1   = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
+            else if (df & (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) {
+              obs->L1   = _Parser.Data.measdata[ii][pos];
               obs->SNR1 = _Parser.Data.snrL1[ii];
             }
-            else if (_Parser.dataflag[jj] & (GNSSDF_L2CDATA|GNSSDF_L2PDATA)) {
-              obs->L2   = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
+            else if (df & (GNSSDF_L2CDATA|GNSSDF_L2PDATA)) {
+              obs->L2   = _Parser.Data.measdata[ii][pos];
               obs->SNR2 = _Parser.Data.snrL2[ii];
             }
+          }
           }
           _obsList.push_back(obs);
Index: trunk/BNC/RTCM3/rtcm3torinex.cpp
===================================================================
--- trunk/BNC/RTCM3/rtcm3torinex.cpp	(revision 341)
+++ trunk/BNC/RTCM3/rtcm3torinex.cpp	(revision 366)
@@ -1,5 +1,5 @@
 /*
   Converter for RTCM3 data to RINEX.
-  $Id: rtcm3torinex.c,v 1.11 2006/11/21 08:27:35 stoecker Exp $
+  $Id: rtcm3torinex.c,v 1.16 2007/01/11 15:32:26 stoecker Exp $
   Copyright (C) 2005-2006 by Dirk Stoecker <stoecker@euronik.eu>
 
@@ -51,5 +51,5 @@
 
 /* CVS revision and version */
-static char revisionstr[] = "$Revision: 1.11 $";
+static char revisionstr[] = "$Revision: 1.16 $";
 
 static uint32_t CRC24(long size, const unsigned char *buf)
@@ -332,5 +332,5 @@
               gnss->dataflags[num] |= s;
               gnss->measdata[num][se] = i*0.25;
-              i /= 4*4;
+              i /= 4*6;
               if(i > 9) i = 9;
               else if(i < 1) i = 1;
@@ -380,5 +380,5 @@
                 gnss->dataflags[num] |= s;
                 gnss->measdata[num][se] = i*0.25;
-                i /= 4*4;
+                i /= 4*6;
                 if(i > 9) i = 9;
                 else if(i < 1) i = 1;
@@ -495,5 +495,5 @@
               gnss->dataflags[num] |= s;
               gnss->measdata[num][se] = i*0.25;
-              i /= 4*4;
+              i /= 4*6;
               if(i > 9) i = 9;
               else if(i < 1) i = 1;
@@ -543,5 +543,5 @@
                 gnss->dataflags[num] |= s;
                 gnss->measdata[num][se] = i*0.25;
-                i /= 4*4;
+                i /= 4*6;
                 if(i > 9) i = 9;
                 else if(i < 1) i = 1;
@@ -654,92 +654,15 @@
 }
 
-#define NUMSTARTSKIP 3
+#define NUMSTARTSKIP 1
+
+////////////////////////////////////////////////////////////////////
+// Aenderung Perlt - kein check auf vorhandene Daten 
+// Abgefragt werden : C1 C2 L1 L2 P1 P2 S1 S2
+
 void HandleHeader(struct RTCM3ParserData *Parser)
 {
-  struct HeaderData hdata;
-  char thebuffer[MAXHEADERBUFFERSIZE];
-  char *buffer = thebuffer;
-  size_t buffersize = sizeof(thebuffer);
   int i;
-
-  hdata.data.named.version =
-  "     2.11           OBSERVATION DATA    M (Mixed)"
-  "           RINEX VERSION / TYPE";
-
-  {
-    const char *str;
-    time_t t;
-    struct tm * t2;
-
-#ifdef NO_RTCM3_MAIN
-    if(revisionstr[0] == '$')
-    {
-      char *a;
-      int i=0;
-      for(a = revisionstr+11; *a && *a != ' '; ++a)
-        revisionstr[i++] = *a;
-      revisionstr[i] = 0;
-    }
-#endif
-
-    str = getenv("USER");
-    if(!str) str = "";
-    t = time(&t);
-    t2 = gmtime(&t);
-    hdata.data.named.pgm = buffer;
-    i = 1+snprintf(buffer, buffersize,
-    "RTCM3TORINEX %-7.7s%-20.20s%04d-%02d-%02d %02d:%02d    "
-    "PGM / RUN BY / DATE",
-    revisionstr, str, 1900+t2->tm_year, t2->tm_mon+1, t2->tm_mday, t2->tm_hour,
-    t2->tm_min);
-    buffer += i; buffersize -= i;
-
-    hdata.data.named.observer = buffer;
-    i = 1+snprintf(buffer, buffersize,
-    "%-20.20s                                        "
-    "OBSERVER / AGENCY", str);
-    buffer += i; buffersize -= i;
-  }
-
-  hdata.data.named.marker =
-  "RTCM3TORINEX                                                "
-  "MARKER NAME";
-
-  hdata.data.named.receiver =
-  "                                                            "
-  "REC # / TYPE / VERS";
-
-  hdata.data.named.antenna =
-  "                                                            "
-  "ANT # / TYPE";
-
-  hdata.data.named.position =
-  "         .0000         .0000         .0000                  "
-  "APPROX POSITION XYZ";
-
-  hdata.data.named.antennaposition =
-  "         .0000         .0000         .0000                  "
-  "ANTENNA: DELTA H/E/N";
-  
-  hdata.data.named.wavelength =
-  "     1     1                                                "
-  "WAVELENGTH FACT L1/2";
-
-  {
-#define CHECKFLAGS(a, b) \
-    if(flags & GNSSDF_##a##DATA \
-    && !data[RINEXENTRY_##b##DATA]) \
-    { \
-      Parser->dataflag[Parser->numdatatypes] = GNSSDF_##a##DATA; \
-      Parser->datapos[Parser->numdatatypes++] = data[RINEXENTRY_##b##DATA] \
-      = GNSSENTRY_##a##DATA; \
-      snprintf(tbuffer+tbufferpos, sizeof(tbuffer)-tbufferpos, "    "#b); \
-      tbufferpos += 6; \
-    }
-
     int flags = Parser->startflags;
     int data[RINEXENTRY_NUMBER];
-    char tbuffer[6*RINEXENTRY_NUMBER+1];
-    int tbufferpos = 0;
     for(i = 0; i < RINEXENTRY_NUMBER; ++i)
       data[i] = 0;
@@ -747,138 +670,58 @@
       flags |= Parser->Data.dataflags[i];
 
-    CHECKFLAGS(C1,C1)
-    CHECKFLAGS(C2,C2)
-    CHECKFLAGS(P1,P1)
-    CHECKFLAGS(P2,P2)
-    CHECKFLAGS(L1C,L1)
-    CHECKFLAGS(L1P,L1)
-    CHECKFLAGS(L2C,L2)
-    CHECKFLAGS(L2P,L2)
-    CHECKFLAGS(D1C,D1)
-    CHECKFLAGS(D1P,D1)
-    CHECKFLAGS(D2C,D2)
-    CHECKFLAGS(D2P,D2)
-    CHECKFLAGS(S1C,S1)
-    CHECKFLAGS(S1P,S1)
-    CHECKFLAGS(S2C,S2)
-    CHECKFLAGS(S2P,S2)
-
-    hdata.data.named.typesofobs = buffer;
-    i = 1+snprintf(buffer, buffersize,
-    "%6i%-54.54s# / TYPES OF OBSERV", Parser->numdatatypes, tbuffer);
-    if(Parser->numdatatypes>9)
-    {
-      i += snprintf(buffer+i-1, buffersize,
-      "\n      %-54.54s# / TYPES OF OBSERV", tbuffer+9*6);
-    }
-    buffer += i; buffersize -= i;
-  }
-
-  {
-    struct converttimeinfo cti;
-    converttime(&cti, Parser->Data.week,
-    (int)floor(Parser->Data.timeofweek/1000.0));
-    hdata.data.named.timeoffirstobs = buffer;
-      i = 1+snprintf(buffer, buffersize,
-    "  %4d    %2d    %2d    %2d    %2d   %10.7f     GPS         "
-    "TIME OF FIRST OBS", cti.year%100, cti.month, cti.day, cti.hour,
-    cti.minute, cti.second + fmod(Parser->Data.timeofweek/1000.0,1.0));
-
-    buffer += i; buffersize -= i;
-  }
-
-  hdata.numheaders = 11;
-
-  if(Parser->headerfile)
-  {
-    FILE *fh;
-    if((fh = fopen(Parser->headerfile, "r")))
-    {
-      size_t siz;
-      char *lastblockstart;
-      if((siz = fread(buffer, 1, buffersize-1, fh)) > 0)
-      {
-        buffer[siz] = '\n';
-        if(siz == buffersize)
-        {
-          RTCM3Error("Header file is too large. Only %d bytes read.",
-          siz);
-        }
-        /* scan the file line by line and enter the entries in the list */
-        /* warn for "# / TYPES OF OBSERV" and "TIME OF FIRST OBS" */
-        /* overwrites entries, except for comments */
-        lastblockstart = buffer;
-        for(i = 0; i < (int)siz; ++i)
-        {
-          if(buffer[i] == '\n')
-          { /* we found a line */
-            char *end;
-            while(buffer[i+1] == '\r')
-              ++i; /* skip \r in case there are any */
-            end = buffer+i;
-            while(*end == '\t' || *end == ' ' || *end == '\r' || *end == '\n')
-              *(end--) = 0;
-            if(end-lastblockstart < 60+5) /* short line */
-              RTCM3Error("Short Header line '%s' ignored.\n", lastblockstart);
-            else
-            {
-              int pos;
-              if(!strcmp("COMMENT", lastblockstart+60))
-                pos = hdata.numheaders;
-              else
-              {
-                for(pos = 0; pos < hdata.numheaders; ++pos)
-                {
-                  if(!strcmp(hdata.data.unnamed[pos]+60, lastblockstart+60))
-                    break;
-                }
-                if(!strcmp("# / TYPES OF OBSERV", lastblockstart+60)
-                || !strcmp("TIME OF FIRST OBS", lastblockstart+60))
-                {
-                  RTCM3Error("Overwriting header '%s' is dangerous.\n",
-                  lastblockstart+60);
-                }
-              }
-              if(pos >= MAXHEADERLINES)
-              {
-                RTCM3Error("Maximum number of header lines of %d reached.\n",
-                MAXHEADERLINES);
-              }
-              else if(!strcmp("END OF HEADER", lastblockstart+60))
-              {
-                RTCM3Error("End of header ignored.\n");
-              }
-              else
-              {
-                hdata.data.unnamed[pos] = lastblockstart;
-                if(pos == hdata.numheaders)
-                  ++hdata.numheaders;
-              }
-            }
-            lastblockstart = buffer+i+1;
-          }
-        }
-      }
-      else
-      {
-        RTCM3Error("Could not read data from headerfile '%s'.\n",
-        Parser->headerfile);
-      }
-      fclose(fh);
-    }
-    else
-    {
-      RTCM3Error("Could not open header datafile '%s'.\n",
-      Parser->headerfile);
-    }
-  }
-
-#ifndef NO_RTCM3_MAIN
-  for(i = 0; i < hdata.numheaders; ++i)
-    RTCM3Text("%s\n", hdata.data.unnamed[i]);
-  RTCM3Text("                                                            "
-  "END OF HEADER\n");
-#endif
-}
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_C1DATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_C1DATA; 
+data[RINEXENTRY_C1DATA] = ++Parser->numdatatypes; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_C2DATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_C2DATA; 
+data[RINEXENTRY_C2DATA] = ++Parser->numdatatypes; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_P1DATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_P1DATA; 
+data[RINEXENTRY_P1DATA] = ++Parser->numdatatypes; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_P2DATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_P2DATA; 
+data[RINEXENTRY_P2DATA] = ++Parser->numdatatypes; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_L1CDATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_L1CDATA; 
+data[RINEXENTRY_L1DATA] = ++Parser->numdatatypes; 
+Parser->dataflag2[data[RINEXENTRY_L1DATA]-1] = GNSSDF_L1PDATA; 
+Parser->datapos2[data[RINEXENTRY_L1DATA]-1] = GNSSENTRY_L1PDATA; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_L2CDATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_L2CDATA; 
+data[RINEXENTRY_L2DATA] = ++Parser->numdatatypes; 
+Parser->dataflag2[data[RINEXENTRY_L2DATA]-1] = GNSSDF_L2PDATA; 
+Parser->datapos2[data[RINEXENTRY_L2DATA]-1] = GNSSENTRY_L2PDATA; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_S1CDATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_S1CDATA; 
+data[RINEXENTRY_S1DATA] = ++Parser->numdatatypes; 
+Parser->dataflag2[data[RINEXENTRY_S1DATA]-1] = GNSSDF_S1PDATA; 
+Parser->datapos2[data[RINEXENTRY_S1DATA]-1] = GNSSENTRY_S1PDATA; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_S2CDATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_S2CDATA; 
+data[RINEXENTRY_S2DATA] = ++Parser->numdatatypes; 
+Parser->dataflag2[data[RINEXENTRY_S2DATA]-1] = GNSSDF_S2PDATA; 
+Parser->datapos2[data[RINEXENTRY_S2DATA]-1] = GNSSENTRY_S2PDATA; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_D1CDATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_D1CDATA; 
+data[RINEXENTRY_D1DATA] = ++Parser->numdatatypes; 
+Parser->dataflag2[data[RINEXENTRY_D1DATA]-1] = GNSSDF_D1PDATA; 
+Parser->datapos2[data[RINEXENTRY_D1DATA]-1] = GNSSENTRY_D1PDATA; 
+
+Parser->dataflag[Parser->numdatatypes] = GNSSDF_D2CDATA; 
+Parser->datapos[Parser->numdatatypes] = GNSSENTRY_D2CDATA; 
+data[RINEXENTRY_D2DATA] = ++Parser->numdatatypes; 
+Parser->dataflag2[data[RINEXENTRY_D2DATA]-1] = GNSSDF_D2PDATA; 
+Parser->datapos2[data[RINEXENTRY_D2DATA]-1] = GNSSENTRY_D2PDATA; 
+}
+// Ende Aenderung Perlt - kein check auf vorhandene Daten 
+
 
 void HandleByte(struct RTCM3ParserData *Parser, unsigned int byte)
@@ -955,7 +798,27 @@
         for(j = 0; j < Parser->numdatatypes; ++j)
         {
-          if(!(Parser->Data.dataflags[i] & Parser->dataflag[j])
-          || isnan(Parser->Data.measdata[i][Parser->datapos[j]])
-          || isinf(Parser->Data.measdata[i][Parser->datapos[j]]))
+          int v = 0;
+          int df = Parser->dataflag[j];
+          int pos = Parser->datapos[j];
+          if((Parser->Data.dataflags[i] & df)
+          && !isnan(Parser->Data.measdata[i][pos])
+          && !isinf(Parser->Data.measdata[i][pos]))
+          {
+            v = 1;
+          }
+          else
+          {
+            df = Parser->dataflag2[j];
+            pos = Parser->datapos2[j];
+
+            if((Parser->Data.dataflags[i] & df)
+            && !isnan(Parser->Data.measdata[i][pos])
+            && !isinf(Parser->Data.measdata[i][pos]))
+            {
+              v = 1;
+            }
+          }
+
+          if(!v)
           { /* no or illegal data */
             RTCM3Text("                ");
@@ -965,5 +828,5 @@
             char lli = ' ';
             char snr = ' ';
-            if(Parser->dataflag[j] & (GNSSDF_L1CDATA|GNSSDF_L1PDATA))
+            if(df & (GNSSDF_L1CDATA|GNSSDF_L1PDATA))
             {
               if(Parser->Data.dataflags[i] & GNSSDF_LOCKLOSSL1)
@@ -971,5 +834,5 @@
               snr = '0'+Parser->Data.snrL1[i];
             }
-            if(Parser->dataflag[j] & (GNSSDF_L2CDATA|GNSSDF_L2PDATA))
+            if(df & (GNSSDF_L2CDATA|GNSSDF_L2PDATA))
             {
               if(Parser->Data.dataflags[i] & GNSSDF_LOCKLOSSL2)
@@ -978,5 +841,5 @@
             }
             RTCM3Text("%14.3f%c%c",
-            Parser->Data.measdata[i][Parser->datapos[j]],lli,snr);
+            Parser->Data.measdata[i][pos],lli,snr);
           }
           if(j%5 == 4 || j == Parser->numdatatypes-1)
@@ -989,5 +852,5 @@
 
 #ifndef NO_RTCM3_MAIN
-static char datestr[]     = "$Date: 2006/11/21 08:27:35 $";
+static char datestr[]     = "$Date: 2007/01/11 15:32:26 $";
 
 /* The string, which is send as agent in HTTP request */
@@ -1286,10 +1149,10 @@
     if(!(he=gethostbyname(args.server)))
     {
-      perror("gethostbyname");
+      RTCM3Error("Function gethostbyname: %s\n", strerror(errno));
       exit(1);
     }
     if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
     {
-      perror("socket");
+      RTCM3Error("Function socket: %s\n", strerror(errno));
       exit(1);
     }
@@ -1301,5 +1164,5 @@
     sizeof(struct sockaddr)) == -1)
     {
-      perror("connect");
+      RTCM3Error("Function connect: %s\n", strerror(errno));
       exit(1);
     }
@@ -1339,10 +1202,12 @@
         exit(1);
       }
-      snprintf(buf+i, 5, "\r\n\r\n");
-      i += 5;
+      buf[i++] = '\r';
+      buf[i++] = '\n';
+      buf[i++] = '\r';
+      buf[i++] = '\n';
     }
     if(send(sockfd, buf, (size_t)i, 0) != i)
     {
-      perror("send");
+      RTCM3Error("Function send: %s\n", strerror(errno));
       exit(1);
     }
Index: trunk/BNC/RTCM3/rtcm3torinex.h
===================================================================
--- trunk/BNC/RTCM3/rtcm3torinex.h	(revision 341)
+++ trunk/BNC/RTCM3/rtcm3torinex.h	(revision 366)
@@ -1,8 +1,8 @@
 #ifndef RTCM3TORINEX_H
-#define RTCM3TORINES_H
+#define RTCM3TORINEX_H
 
 /*
   Converter for RTCM3 data to RINEX.
-  $Id: rtcm3torinex.h,v 1.3 2006/11/15 12:31:31 stoecker Exp $
+  $Id: rtcm3torinex.h,v 1.5 2007/01/11 14:10:13 stoecker Exp $
   Copyright (C) 2005-2006 by Dirk Stoecker <stoecker@euronik.eu>
 
@@ -94,10 +94,9 @@
 #define GLO_WAVELENGTH_L2(a) (LIGHTSPEED / GLO_FREQU_L2(a)) /* m */
 
-/* unimportant, only for approx. time needed */
-#define LEAPSECONDS 14
-
 /* Additional flags for the data field, which tell us more. */
 #define GNSSDF_LOCKLOSSL1     (1<<29)  /* lost lock on L1 */
 #define GNSSDF_LOCKLOSSL2     (1<<30)  /* lost lock on L2 */
+
+#define LEAPSECONDS     14 /* only needed for approx. time */
 
 struct gnssdata {
@@ -127,4 +126,6 @@
   int    datapos[RINEXENTRY_NUMBER];
   int    dataflag[RINEXENTRY_NUMBER];
+  int    datapos2[RINEXENTRY_NUMBER];
+  int    dataflag2[RINEXENTRY_NUMBER];
   int    numdatatypes;
   int    validwarning;
