Index: trunk/BNC/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 661)
+++ trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 689)
@@ -72,4 +72,7 @@
 
   const int LEAPSECONDS = 14; /* only needed for approx. time */
+
+// Ensure, that the Decoder uses the "old" convention for the data structure for Rinex2. Perlt
+  _Parser.rinex3 = 0;
 
   time_t tim;
@@ -133,6 +136,9 @@
             for (int jj = 0; jj < _Parser.numdatatypesGPS; jj++) {
               int v = 0;
-              int df = _Parser.dataflag[jj];
-              int pos = _Parser.datapos[jj];
+// sepearated declaration and initalization of df and pos. Perlt
+              int df;
+              int pos;
+              df = _Parser.dataflag[jj];
+              pos = _Parser.datapos[jj];
               if ( (_Parser.Data.dataflags[ii] & df)
                    && !isnan(_Parser.Data.measdata[ii][pos])
@@ -154,15 +160,16 @@
               else
               {
-                if      (_Parser.dataflag[jj] & GNSSDF_C1DATA) {
-                  obs->_o.C1 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
-                }
-                else if (_Parser.dataflag[jj] & GNSSDF_C2DATA) {
-                  obs->_o.C2 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
-                }
-                else if (_Parser.dataflag[jj] & GNSSDF_P1DATA) {
-                  obs->_o.P1 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
-                }
-                else if (_Parser.dataflag[jj] & GNSSDF_P2DATA) {
-                  obs->_o.P2 = _Parser.Data.measdata[ii][_Parser.datapos[jj]];
+// variables df and pos are used consequently. Perlt
+                if      (df & GNSSDF_C1DATA) {
+                  obs->_o.C1 = _Parser.Data.measdata[ii][pos];
+                }
+                else if (df & GNSSDF_C2DATA) {
+                  obs->_o.C2 = _Parser.Data.measdata[ii][pos];
+                }
+                else if (df & GNSSDF_P1DATA) {
+                  obs->_o.P1 = _Parser.Data.measdata[ii][pos];
+                }
+                else if (df & GNSSDF_P2DATA) {
+                  obs->_o.P2 = _Parser.Data.measdata[ii][pos];
                 }
                 else if (df & (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) {
Index: trunk/BNC/RTCM3/rtcm3torinex.c
===================================================================
--- trunk/BNC/RTCM3/rtcm3torinex.c	(revision 661)
+++ trunk/BNC/RTCM3/rtcm3torinex.c	(revision 689)
@@ -1,5 +1,5 @@
 /*
   Converter for RTCM3 data to RINEX.
-  $Id: rtcm3torinex.c,v 1.25 2007/10/25 09:37:42 stoecker Exp $
+  $Id: rtcm3torinex.c,v 1.8 2007/10/28 08:50:37 mervart Exp $
   Copyright (C) 2005-2006 by Dirk Stoecker <stoecker@alberding.eu>
 
@@ -51,5 +51,5 @@
 
 /* CVS revision and version */
-static char revisionstr[] = "$Revision: 1.25 $";
+static char revisionstr[] = "$Revision: 1.8 $";
 
 #ifndef COMPILEDATE
@@ -846,7 +846,100 @@
 }
 
+// Inserted parts for BNC Perlt
+#ifdef NO_RTCM3_MAIN
+#define NUMSTARTSKIP 1
+#else
 #define NUMSTARTSKIP 3
+#endif
+
 void HandleHeader(struct RTCM3ParserData *Parser)
 {
+#ifdef NO_RTCM3_MAIN
+// Part of Handle Header for data request for BNC (independently on actually delivered data), original is commented out by ifndef NO_RTCM3_MAIN. Perlt
+  int i;
+  if(Parser->rinex3)
+  {
+#define CHECKFLAGSNEW(a, b, c) \
+    { \
+      Parser->dataflag##a[Parser->numdatatypes##a] = GNSSDF_##b##DATA; \
+      Parser->datapos##a[Parser->numdatatypes##a] = GNSSENTRY_##b##DATA; \
+      ++Parser->numdatatypes##a; \
+    }
+
+    CHECKFLAGSNEW(GPS, C1,  C1C)
+    CHECKFLAGSNEW(GPS, L1C, L1C)
+    CHECKFLAGSNEW(GPS, D1C, D1C)
+    CHECKFLAGSNEW(GPS, S1C, S1C)
+    CHECKFLAGSNEW(GPS, P1,  C1P)
+    CHECKFLAGSNEW(GPS, L1P, L1P)
+    CHECKFLAGSNEW(GPS, D1P, D1P)
+    CHECKFLAGSNEW(GPS, S1P, S1P)
+    CHECKFLAGSNEW(GPS, P2,  C2P)
+    CHECKFLAGSNEW(GPS, L2P, L2P)
+    CHECKFLAGSNEW(GPS, D2P, D2P)
+    CHECKFLAGSNEW(GPS, S2P, S2P)
+    CHECKFLAGSNEW(GPS, C2,  C2X)
+    CHECKFLAGSNEW(GPS, L2C, L2X)
+    CHECKFLAGSNEW(GPS, D2C, D2X)
+    CHECKFLAGSNEW(GPS, S2C, S2X)
+    CHECKFLAGSNEW(GLO, C1,  C1C)
+    CHECKFLAGSNEW(GLO, L1C, L1C)
+    CHECKFLAGSNEW(GLO, D1C, D1C)
+    CHECKFLAGSNEW(GLO, S1C, S1C)
+    CHECKFLAGSNEW(GLO, P1,  C1P)
+    CHECKFLAGSNEW(GLO, L1P, L1P)
+    CHECKFLAGSNEW(GLO, D1P, D1P)
+    CHECKFLAGSNEW(GLO, S1P, S1P)
+    CHECKFLAGSNEW(GLO, P2,  C2P)
+    CHECKFLAGSNEW(GLO, L2P, L2P)
+    CHECKFLAGSNEW(GLO, D2P, D2P)
+    CHECKFLAGSNEW(GLO, S2P, S2P)
+    CHECKFLAGSNEW(GLO, C2,  C2C)
+    CHECKFLAGSNEW(GLO, L2C, L2C)
+    CHECKFLAGSNEW(GLO, D2C, D2C)
+    CHECKFLAGSNEW(GLO, S2C, S2C)
+
+  }
+  else
+  {
+#define CHECKFLAGS(a, b) \
+    { \
+      if(data[RINEXENTRY_##b##DATA]) \
+      { \
+        Parser->dataflagGPS[data[RINEXENTRY_##b##DATA]-1] = GNSSDF_##a##DATA; \
+        Parser->dataposGPS[data[RINEXENTRY_##b##DATA]-1] = GNSSENTRY_##a##DATA; \
+      } \
+      else \
+      { \
+        Parser->dataflag[Parser->numdatatypesGPS] = GNSSDF_##a##DATA; \
+        Parser->datapos[Parser->numdatatypesGPS] = GNSSENTRY_##a##DATA; \
+        data[RINEXENTRY_##b##DATA] = ++Parser->numdatatypesGPS; \
+      } \
+    }
+
+    int data[RINEXENTRY_NUMBER];
+    for(i = 0; i < RINEXENTRY_NUMBER; ++i) data[i] = 0;
+
+    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)
+  }
+// End Part of Handle Header for BNC Perlt
+#endif
+
+#ifndef NO_RTCM3_MAIN
   struct HeaderData hdata;
   char thebuffer[MAXHEADERBUFFERSIZE];
@@ -1139,5 +1232,4 @@
   }
 
-#ifndef NO_RTCM3_MAIN
   for(i = 0; i < hdata.numheaders; ++i)
   {
@@ -1536,5 +1628,5 @@
 
 #ifndef NO_RTCM3_MAIN
-static char datestr[]     = "$Date: 2007/10/25 09:37:42 $";
+static char datestr[]     = "$Date: 2007/10/28 08:50:37 $";
 
 /* The string, which is send as agent in HTTP request */
