Index: /trunk/BNC/bncclockrinex.cpp
===================================================================
--- /trunk/BNC/bncclockrinex.cpp	(revision 3183)
+++ /trunk/BNC/bncclockrinex.cpp	(revision 3184)
@@ -26,9 +26,8 @@
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
-bncClockRinex::bncClockRinex(const QString& prep, const QString& ext, const QString& path,
-                             const QString& intr, int sampl) 
-  : bncoutf(prep, ext, path, intr, sampl) {
+bncClockRinex::bncClockRinex(const QString& sklFileName, const QString& intr, 
+                             int sampl) 
+  : bncoutf(sklFileName, intr, sampl) {
   bncSettings settings;
-  _append = Qt::CheckState(settings.value("rnxAppend").toInt()) == Qt::Checked;
 }
 
@@ -43,5 +42,5 @@
                    const ColumnVector& xx) {
 
-  if (bncoutf::write(GPSweek, GPSweeks, prn, xx, _append) == success) {
+  if (reopen(GPSweek, GPSweeks) == success) {
 
       QDateTime datTim = dateAndTimeFromGPSweek(GPSweek, GPSweeks);
Index: /trunk/BNC/bncclockrinex.h
===================================================================
--- /trunk/BNC/bncclockrinex.h	(revision 3183)
+++ /trunk/BNC/bncclockrinex.h	(revision 3184)
@@ -10,6 +10,5 @@
 class bncClockRinex : public bncoutf {
  public:
-  bncClockRinex(const QString& prep, const QString& ext, const QString& path,
-                const QString& intr, int sampl);
+  bncClockRinex(const QString& sklFileName, const QString& intr, int sampl);
   virtual ~bncClockRinex();
   virtual t_irc write(int GPSweek, double GPSweeks, const QString& prn, 
Index: /trunk/BNC/bncoutf.cpp
===================================================================
--- /trunk/BNC/bncoutf.cpp	(revision 3183)
+++ /trunk/BNC/bncoutf.cpp	(revision 3184)
@@ -20,4 +20,5 @@
 
 #include "bncoutf.h"
+#include "bncsettings.h"
 
 using namespace std;
@@ -25,17 +26,23 @@
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
-bncoutf::bncoutf(const QString& prep, const QString& ext, const QString& path,
-                 const QString& intr, int sampl) {
+bncoutf::bncoutf(const QString& sklFileName, const QString& intr, int sampl) {
+
+  bncSettings settings;
 
   _headerWritten = false;
-  _prep          = prep;
-  _ext           = ext;
   _sampl         = sampl;
   _intr          = intr;
-  _path          = path;
+
+  QFileInfo fileInfo(sklFileName);
+  _path        = fileInfo.absolutePath() + QDir::separator();
+  _sklBaseName = fileInfo.baseName();
+  _extension   = fileInfo.completeSuffix(); 
+
   expandEnvVar(_path);
-  if ( _path.length() > 0 && _path[_path.length()-1] != QDir::separator() ) {
-    _path += QDir::separator();
+  if (!_extension.isEmpty()) {
+    _extension = "." + _extension;
   }
+
+  _append = Qt::CheckState(settings.value("rnxAppend").toInt()) == Qt::Checked;
 }
 
@@ -52,13 +59,9 @@
 }
 
-// Next File Epoch (static)
+// Epoch String
 ////////////////////////////////////////////////////////////////////////////
-QString bncoutf::nextEpochStr(const QDateTime& datTim, 
-                             const QString& intStr, QDateTime* nextEpoch) {
+QString bncoutf::epochStr(const QDateTime& datTim, const QString& intStr) {
 
   QString epoStr;
-
-  QTime nextTime;
-  QDate nextDate;
 
   int indHlp = intStr.indexOf("min");
@@ -70,12 +73,4 @@
     if (datTim.time().minute() >= 60-step) {
       epoStr += QString("%1").arg(60-step, 2, 10, QChar('0'));
-      if (datTim.time().hour() < 23) {
-        nextTime.setHMS(datTim.time().hour() + 1 , 0, 0);
-        nextDate = datTim.date();
-      }
-      else {
-        nextTime.setHMS(0, 0, 0);
-        nextDate = datTim.date().addDays(1);
-      }
     }
     else {
@@ -83,6 +78,4 @@
         if (datTim.time().minute() < limit) {
           epoStr += QString("%1").arg(limit-step, 2, 10, QChar('0'));
-          nextTime.setHMS(datTim.time().hour(), limit, 0);
-          nextDate = datTim.date();
           break;
         }
@@ -93,21 +86,7 @@
     char ch = 'A' + datTim.time().hour();
     epoStr = QString("_") + ch;
-    if (datTim.time().hour() < 23) {
-      nextTime.setHMS(datTim.time().hour() + 1 , 0, 0);
-      nextDate = datTim.date();
-    }
-    else {
-      nextTime.setHMS(0, 0, 0);
-      nextDate = datTim.date().addDays(1);
-    }
   }
   else {
     epoStr = "";
-    nextTime.setHMS(0, 0, 0);
-    nextDate = datTim.date().addDays(1);
-  }
-
-  if (nextEpoch) {
-    *nextEpoch = QDateTime(nextDate, nextTime, Qt::UTC);
   }
 
@@ -117,7 +96,5 @@
 // File Name according to RINEX Standards
 ////////////////////////////////////////////////////////////////////////////
-void bncoutf::resolveFileName(int GPSweek, const QDateTime& datTim) {
-
-  QString epoStr = nextEpochStr(datTim, _intr, &_nextCloseEpoch);
+QString bncoutf::resolveFileName(int GPSweek, const QDateTime& datTim) {
 
   int dayOfWeek = datTim.date().dayOfWeek();
@@ -125,16 +102,14 @@
     dayOfWeek = 0;
   }
+  QString gpswd    = QString().arg(GPSweek).arg(dayOfWeek);
+  QString baseName = _sklBaseName.replace("${GPSWD}", gpswd);
+  QString epoStr   = epochStr(datTim, _intr);
 
-  _fName = (_path + _prep
-            + QString("%1").arg(GPSweek)
-            + QString("%1").arg(dayOfWeek)
-            + epoStr 
-            + _ext).toAscii();
+  return _path + baseName + epoStr + _extension;
 }
 
-// Write One Epoch
+// Re-Open Output File
 ////////////////////////////////////////////////////////////////////////////
-t_irc bncoutf::write(int GPSweek, double GPSweeks, const QString&, 
-                     const ColumnVector&, bool append) {
+t_irc bncoutf::reopen(int GPSweek, double GPSweeks) {
 
   if (_sampl != 0 && fmod(GPSweeks, _sampl) != 0.0) {
@@ -144,21 +119,23 @@
   QDateTime datTim = dateAndTimeFromGPSweek(GPSweek, GPSweeks);
 
+  QString newFileName = resolveFileName(GPSweek, datTim);
+
   // Close the file
   // --------------
-  if (_nextCloseEpoch.isValid() && datTim >= _nextCloseEpoch) {
+  if (newFileName != _fName) {
     closeFile();
     _headerWritten = false;
+    _fName = newFileName;
   }
 
-  // Write Header
-  // ------------
+  // Re-Open File, Write Header
+  // --------------------------
   if (!_headerWritten) {
-    resolveFileName(GPSweek, datTim);
     _out.setf(ios::showpoint | ios::fixed);
-    if (append && QFile::exists(_fName)) {
-      _out.open(_fName.data(), ios::out | ios::app);
+    if (_append && QFile::exists(_fName)) {
+      _out.open(_fName.toAscii().data(), ios::out | ios::app);
     }
     else {
-      _out.open(_fName.data());
+      _out.open(_fName.toAscii().data());
       writeHeader(datTim);
     }
@@ -168,2 +145,11 @@
   return success;
 }
+
+// Write String
+////////////////////////////////////////////////////////////////////////////
+t_irc bncoutf::write(int GPSweek, double GPSweeks, const QString& str) {
+  reopen(GPSweek, GPSweeks);
+  _out << str.toAscii().data();
+  _out.flush();
+  return success;
+}
Index: /trunk/BNC/bncoutf.h
===================================================================
--- /trunk/BNC/bncoutf.h	(revision 3183)
+++ /trunk/BNC/bncoutf.h	(revision 3184)
@@ -10,30 +10,26 @@
 class bncoutf {
  public:
-  bncoutf(const QString& prep, const QString& ext, const QString& path,
-          const QString& intr, int sampl);
+  bncoutf(const QString& sklFileName, const QString& intr, int sampl);
   virtual ~bncoutf();
-
-  virtual t_irc write(int GPSweek, double GPSweeks, const QString& prn, 
-                      const ColumnVector& xx, bool append);
+  t_irc write(int GPSweek, double GPSweeks, const QString& str);
 
  protected:
-  virtual void writeHeader(const QDateTime& /* datTim */) {}
-  virtual void closeFile();
+  virtual t_irc reopen(int GPSweek, double GPSweeks);
+  virtual void  writeHeader(const QDateTime& /* datTim */) {}
+  virtual void  closeFile();
   std::ofstream _out;
   int           _sampl;
 
  private:
-  QString nextEpochStr(const QDateTime& datTim,
-                       const QString& intStr, 
-                       QDateTime* nextEpoch = 0);
-  void resolveFileName(int GPSweek, const QDateTime& datTim);
+  QString epochStr(const QDateTime& datTim, const QString& intStr);
+  QString resolveFileName(int GPSweek, const QDateTime& datTim);
 
-  bool          _headerWritten;
-  QDateTime     _nextCloseEpoch;
-  QString       _path;
-  QString       _intr;
-  QString       _ext;
-  QString       _prep;
-  QByteArray    _fName;
+  bool    _headerWritten;
+  QString _path;
+  QString _sklBaseName;
+  QString _extension;
+  QString _intr;
+  QString _fName;
+  bool    _append;
 };
 
Index: /trunk/BNC/bncsp3.cpp
===================================================================
--- /trunk/BNC/bncsp3.cpp	(revision 3183)
+++ /trunk/BNC/bncsp3.cpp	(revision 3184)
@@ -26,7 +26,6 @@
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
-bncSP3::bncSP3(const QString& prep, const QString& ext, const QString& path,
-               const QString& intr, int sampl) 
-  : bncoutf(prep, ext, path, intr, sampl) {
+bncSP3::bncSP3(const QString& sklFileName, const QString& intr, int sampl) 
+  : bncoutf(sklFileName, intr, sampl) {
 
   _lastGPSweek  = 0;
@@ -42,7 +41,7 @@
 ////////////////////////////////////////////////////////////////////////////
 t_irc bncSP3::write(int GPSweek, double GPSweeks, const QString& prn, 
-                    const ColumnVector& xx, bool append) {
+                    const ColumnVector& xx) {
 
-  if ( bncoutf::write(GPSweek, GPSweeks, prn, xx, append) == success) {
+  if (reopen(GPSweek, GPSweeks) == success) {
 
     if (_lastGPSweek != GPSweek || _lastGPSweeks != GPSweeks) {
Index: /trunk/BNC/bncsp3.h
===================================================================
--- /trunk/BNC/bncsp3.h	(revision 3183)
+++ /trunk/BNC/bncsp3.h	(revision 3184)
@@ -10,9 +10,8 @@
 class bncSP3 : public bncoutf {
  public:
-  bncSP3(const QString& prep, const QString& ext, const QString& path,
-         const QString& intr, int sampl);
+  bncSP3(const QString& sklFileName, const QString& intr, int sampl);
   virtual ~bncSP3();
-  virtual t_irc write(int GPSweek, double GPSweeks, const QString& prn, 
-                      const ColumnVector& xx, bool append);
+  t_irc write(int GPSweek, double GPSweeks, const QString& prn, 
+              const ColumnVector& xx);
 
  private:
Index: /trunk/BNC/combination/bnccomb.cpp
===================================================================
--- /trunk/BNC/combination/bnccomb.cpp	(revision 3183)
+++ /trunk/BNC/combination/bnccomb.cpp	(revision 3184)
@@ -180,13 +180,10 @@
   }
   else {
-    QString prep      = "BNC";
-    QString ext       = ".sp3";
-    QString path      = settings.value("cmbSP3Path").toString();
+    QString sklFileName = settings.value("cmbSP3Path").toString() 
+                        + QDir::separator() + "BNC.sp3";
     QString interval  = "";
     int     sampl     = 0;
-    _sp3 = new bncSP3(prep, ext, path, interval, sampl);
-  }
-
-  _append = Qt::CheckState(settings.value("rnxAppend").toInt()) == Qt::Checked;
+    _sp3 = new bncSP3(sklFileName, interval, sampl);
+  }
 
   // ANTEX File
@@ -449,5 +446,5 @@
         }
       }
-      _sp3->write(resTime.gpsw(), resTime.gpssec(), corr->prn, xc, _append);
+      _sp3->write(resTime.gpsw(), resTime.gpssec(), corr->prn, xc);
     }
 
Index: /trunk/BNC/combination/bnccomb.h
===================================================================
--- /trunk/BNC/combination/bnccomb.h	(revision 3183)
+++ /trunk/BNC/combination/bnccomb.h	(revision 3184)
@@ -90,5 +90,4 @@
   std::ofstream*        _out;
   bncSP3*               _sp3;
-  bool                  _append;
   bncAntex*             _antex;
 };
Index: /trunk/BNC/upload/bncuploadcaster.cpp
===================================================================
--- /trunk/BNC/upload/bncuploadcaster.cpp	(revision 3183)
+++ /trunk/BNC/upload/bncuploadcaster.cpp	(revision 3184)
@@ -49,6 +49,4 @@
   _outSocket  = 0;
   _sOpenTrial = 0;
-
-  _append = Qt::CheckState(settings.value("rnxAppend").toInt()) == Qt::Checked;
 
   if (outFileName.isEmpty()) {
