Index: trunk/BNC/src/rinex/rnxnavfile.cpp
===================================================================
--- trunk/BNC/src/rinex/rnxnavfile.cpp	(revision 10573)
+++ trunk/BNC/src/rinex/rnxnavfile.cpp	(revision 10574)
@@ -149,5 +149,5 @@
 ////////////////////////////////////////////////////////////////////////////
 void t_rnxNavFile::read(QTextStream* stream) {
-  QString navTypeStr;
+  QString navType;
 
   while (stream->status() == QTextStream::Ok && !stream->atEnd()) {
@@ -159,26 +159,53 @@
 
     QStringList hlp = line.split(QRegExp("\\s+"), Qt::SkipEmptyParts);
+    QString key, prn, navSubType;
+    char sys;
+
     QString firstStr = hlp.at(0);
-    QString prn;
-
     if      (version() >= 3.0 &&  firstStr != ">") {
       prn = firstStr;
+      sys = prn[0].toLatin1();
     }
     else if (version() >= 4.0 && firstStr == ">") {
+      key = hlp.at(1);
+      prn = hlp.at(2);
+      sys = prn[0].toLatin1();
+      navType = hlp.at(3);
+
+      // ALL Non-EPH messages are currently ignored
       int lines2skip = 0;
-      QString key = hlp.at(1);
-      // EPH is used
-      if (key == "EPH") {
-          navTypeStr = hlp.at(3);
-      }
-      // all others are currently ignored
-      else if (key == "STO") {
+      // STO
+      if (key == "STO") {
         lines2skip = 2;
       }
-      else if (key == "EOP" || key == "ION") {
+      // EOP
+      else if (key == "EOP") {
         lines2skip = 3;
       }
+      // ION
+      else if (key == "ION") {
+        if (sys == 'R') {
+          lines2skip = 1; //if (navType == "LXOC") {}
+        }
+        else if (sys == 'E') {
+          lines2skip = 2;
+        }
+        else if (sys == 'G' || sys == 'C' ||
+                 sys == 'J' || sys == 'I') {
+          lines2skip = 3;
+          if (sys == 'I' && navType == "L1NV" || // I: KLOB, NEQN
+              sys == 'J' && navType == "CNVX") { // J: WIDE, JAPN
+            navSubType = hlp.at(4);
+            if      (navSubType == "KLOB") {
+              lines2skip += 1;
+            }
+            else if (navSubType == "NEQN") {
+              lines2skip += 4;
+            }
+          }
+        }
+      }
       if (lines2skip) {
-        for (int ii = 1; ii < lines2skip; ii++) {
+        for (int ii = 1; ii <= lines2skip; ii++) {
           stream->readLine();
         }
@@ -196,6 +223,7 @@
 
     t_eph* eph = 0;
-    QStringList lines; lines << line;
-    if      (prn[0] == 'G') {
+    QStringList lines;
+    lines << line;
+    if      (sys == 'G') {
       for (int ii = 1; ii < 8; ii++) {
         lines << stream->readLine();
@@ -203,5 +231,5 @@
       eph = new t_ephGPS(version(), lines);
     }
-    else if (prn[0] == 'R') {
+    else if (sys == 'R') {
       int num = 4;
       if (version() >= 3.05) {
@@ -213,5 +241,5 @@
       eph = new t_ephGlo(version(), lines);
     }
-    else if (prn[0] == 'E') {
+    else if (sys == 'E') {
       for (int ii = 1; ii < 8; ii++) {
         lines << stream->readLine();
@@ -219,5 +247,5 @@
       eph = new t_ephGal(version(), lines);
     }
-    else if (prn[0] == 'J') {
+    else if (sys == 'J') {
       for (int ii = 1; ii < 8; ii++) {
         lines << stream->readLine();
@@ -225,5 +253,5 @@
       eph = new t_ephGPS(version(), lines);
     }
-    else if (prn[0] == 'S') {
+    else if (sys== 'S') {
       for (int ii = 1; ii < 4; ii++) {
         lines << stream->readLine();
@@ -231,5 +259,5 @@
       eph = new t_ephSBAS(version(), lines);
     }
-    else if (prn[0] == 'C') {
+    else if (sys == 'C') {
       for (int ii = 1; ii < 8; ii++) {
         lines << stream->readLine();
@@ -237,5 +265,5 @@
       eph = new t_ephBDS(version(), lines);
     }
-    else if (prn[0] == 'I') {
+    else if (sys == 'I') {
       for (int ii = 1; ii < 8; ii++) {
         lines << stream->readLine();
@@ -244,6 +272,6 @@
     }
 
-    if (version() >= 4.0) {
-      if (eph->setNavType(navTypeStr) != success) {
+    if (version() >= 4.0 && key == "EPH") {
+      if (eph->setNavType(navType) != success) {
         delete eph;
         continue;
