diff --git a/app/rtkvideo/videomain.cpp b/app/rtkvideo/videomain.cpp
index d0b30cd24b33abdadc5d9f220a84136d7f899e9d..1ea65e7d820fffeff46d9461788fc0ab4ed3c570 100644
--- a/app/rtkvideo/videomain.cpp
+++ b/app/rtkvideo/videomain.cpp
@@ -54,13 +54,13 @@ void __fastcall TStreamWriterThread::Execute(void)
 	
 	while (!Terminated) {
 		
-		lock(&Parent->Lock); ////
+		rtk_lock(&Parent->Lock); ////
 		
 		if (Parent->FrameCount > Parent->SentFrameCount) {
 			surf->Assign(Bitmap);
 			Parent->SentFrameCount = Parent->FrameCount;
 			
-			unlock(&Parent->Lock); ////
+			rtk_unlock(&Parent->Lock); ////
 			
 			buff->Clear();
 			codec->SaveToStream(buff, surf, L".jpg", params);
@@ -71,7 +71,7 @@ void __fastcall TStreamWriterThread::Execute(void)
 			}
 		}
 		else {
-			unlock(&Parent->Lock); ////
+			rtk_unlock(&Parent->Lock); ////
 		}
 		sleepms(15);
 	}
@@ -268,7 +268,7 @@ void __fastcall TMainForm::CaptureStop(void)
 //---------------------------------------------------------------------------
 void __fastcall TMainForm::SampleBufferReady(TObject *Sender, const TMediaTime ATime)
 {
-	lock(&Lock); ////
+	rtk_lock(&Lock); ////
 	
 	CaptureTime = utc2gpst(timeget());
 	CaptureTick = tickget();
@@ -277,7 +277,7 @@ void __fastcall TMainForm::SampleBufferReady(TObject *Sender, const TMediaTime A
 	if (CaptionPos) {
 		DrawCaption(CapImage->Bitmap);
 	}
-	unlock(&Lock); ////
+	rtk_unlock(&Lock); ////
 }
 //---------------------------------------------------------------------------
 void __fastcall TMainForm::DrawCaption(TBitmap *bitmap)
@@ -310,7 +310,7 @@ void __fastcall TMainForm::Timer1Timer(TObject *Sender)
 	char msg[1024], str_msg[4096] = "", *p, *q;
 	int outb = 0, outr = 0, frame_count;
 	
-	lock(&Lock); ////
+	rtk_lock(&Lock); ////
 	
 	frame_count = SentFrameCount;
 	capture_time = CaptureTime;
@@ -319,7 +319,7 @@ void __fastcall TMainForm::Timer1Timer(TObject *Sender)
 		DispImage->Bitmap->Assign(CapImage->Bitmap);
 		DispFrameCount = SentFrameCount;
 	}
-	unlock(&Lock); ////
+	rtk_unlock(&Lock); ////
 	
 	if (++TimerCount*Timer1->Interval >= 1000) {
 		FrameRate = frame_count-FrameCount0;
diff --git a/app/strsvr/svrmain.cpp b/app/strsvr/svrmain.cpp
index 8ffd62ad923797e95c1318a2b11535fd1180e4bd..10dcc5e56abbb963f0362e2ad6d382d4f0fd64cc 100644
--- a/app/strsvr/svrmain.cpp
+++ b/app/strsvr/svrmain.cpp
@@ -616,13 +616,13 @@ void __fastcall TMainForm::Timer2Timer(TObject *Sender)
 	int i,len,inb,inr,outb,outr;
 	
 	if (StrMonDialog->StrFmt) {
-		lock(&strsvr.lock);
+		rtk_lock(&strsvr.lock);
 		len=strsvr.npb;
 		if (len>0&&(msg=(unsigned char *)malloc(len))) {
 			memcpy(msg,strsvr.pbuf,len);
 			strsvr.npb=0;
 		}
-		unlock(&strsvr.lock);
+		rtk_unlock(&strsvr.lock);
 		if (len<=0||!msg) return;
 		StrMonDialog->AddMsg(msg,len);
 		free(msg);
diff --git a/app/strsvr_qt/svrmain.cpp b/app/strsvr_qt/svrmain.cpp
index b0aa4a0de740fd349fef5b9274aaafe8d4c5a206..a80d7275dc1f7c9689c757efaf2f6d6c814fa5c1 100644
--- a/app/strsvr_qt/svrmain.cpp
+++ b/app/strsvr_qt/svrmain.cpp
@@ -647,14 +647,14 @@ void MainForm::Timer2Timer()
     unsigned char *msg=0;
     int len;
     
-    lock(&strsvr.lock);
+    rtk_lock(&strsvr.lock);
     
     len=strsvr.npb;
     if (len>0&&(msg=(unsigned char *)malloc(len))) {
         memcpy(msg,strsvr.pbuf,len);
         strsvr.npb=0;
     }
-    unlock(&strsvr.lock);
+    rtk_unlock(&strsvr.lock);
     
     if (len<=0||!msg) return;
     
diff --git a/src/rtkcmn.c b/src/rtkcmn.c
index 9c1f206f3858c45ef7846b7f92732f7b101745ca..9d1ab9631c331dc4a5831cf3ffb6a8c7ca18411c 100644
--- a/src/rtkcmn.c
+++ b/src/rtkcmn.c
@@ -2517,6 +2517,12 @@ extern int geterp(const erp_t *erp, gtime_t time, double *erpv)
     return 1;
 }
 /* compare ephemeris ---------------------------------------------------------*/
+static int cmpeph_toe(const void *p1, const void *p2)
+{
+  eph_t *q1=(eph_t *)p1,*q2=(eph_t *)p2;
+  return q1->toe.time!=q2->toe.time?(int)(q1->toe.time-q2->toe.time):
+         q1->sat-q2->sat;
+}
 static int cmpeph(const void *p1, const void *p2)
 {
     eph_t *q1=(eph_t *)p1,*q2=(eph_t *)p2;
@@ -2905,17 +2911,17 @@ static void traceswap(void)
     gtime_t time=utc2gpst(timeget());
     char path[1024];
     
-    lock(&lock_trace);
+    rtk_lock(&lock_trace);
     
     if ((int)(time2gpst(time      ,NULL)/INT_SWAP_TRAC)==
         (int)(time2gpst(time_trace,NULL)/INT_SWAP_TRAC)) {
-        unlock(&lock_trace);
+        rtk_unlock(&lock_trace);
         return;
     }
     time_trace=time;
     
     if (!reppath(file_trace,path,time,"","")) {
-        unlock(&lock_trace);
+        rtk_unlock(&lock_trace);
         return;
     }
     if (fp_trace) fclose(fp_trace);
@@ -2923,7 +2929,7 @@ static void traceswap(void)
     if (!(fp_trace=fopen(path,"w"))) {
         fp_trace=stderr;
     }
-    unlock(&lock_trace);
+    rtk_unlock(&lock_trace);
 }
 extern void traceopen(const char *file)
 {
diff --git a/src/rtklib.h b/src/rtklib.h
index f1f2fa66af52fdb8c85431b4e641c11895c57c4b..eab337a9acef80637d2501e3e839a41d539bd4bc 100644
--- a/src/rtklib.h
+++ b/src/rtklib.h
@@ -526,15 +526,15 @@ extern "C" {
 #define thread_t    HANDLE
 #define lock_t      CRITICAL_SECTION
 #define initlock(f) InitializeCriticalSection(f)
-#define lock(f)     EnterCriticalSection(f)
-#define unlock(f)   LeaveCriticalSection(f)
+#define rtk_lock(f)     EnterCriticalSection(f)
+#define rtk_unlock(f)   LeaveCriticalSection(f)
 #define FILEPATHSEP '\\'
 #else
 #define thread_t    pthread_t
 #define lock_t      pthread_mutex_t
 #define initlock(f) pthread_mutex_init(f,NULL)
-#define lock(f)     pthread_mutex_lock(f)
-#define unlock(f)   pthread_mutex_unlock(f)
+#define rtk_lock(f) pthread_mutex_lock(f)
+#define rtk_unlock(f)   pthread_mutex_unlock(f)
 #define FILEPATHSEP '/'
 #endif
 
diff --git a/src/rtksvr.c b/src/rtksvr.c
index 3e3f02d9bf1f9c4a0cffe77cf67e02bfe48a2eb8..a82da2cfe48e98dbba00ba318b794ad139aa9a17 100644
--- a/src/rtksvr.c
+++ b/src/rtksvr.c
@@ -754,7 +754,7 @@ extern void rtksvrfree(rtksvr_t *svr)
 * return : status (1:ok 0:error)
 *-----------------------------------------------------------------------------*/
 extern void rtksvrlock  (rtksvr_t *svr) {lock  (&svr->lock);}
-extern void rtksvrunlock(rtksvr_t *svr) {unlock(&svr->lock);}
+extern void rtksvrunlock(rtksvr_t *svr) {rtk_unlock(&svr->lock);}
 
 /* start rtk server ------------------------------------------------------------
 * start rtk server thread
diff --git a/src/stream.c b/src/stream.c
index d87aa2890614af47d887c7472b144877fe7978a0..15c3903ecfed3bc5b4fe9c7d4cb24476c793a5a3 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -276,12 +276,12 @@ static int readseribuff(serial_t *serial, unsigned char *buff, int nmax)
     
     tracet(5,"readseribuff: dev=%d\n",serial->dev);
     
-    lock(&serial->lock);
+    rtk_lock(&serial->lock);
     for (ns=0;serial->rp!=serial->wp&&ns<nmax;ns++) {
        buff[ns]=serial->buff[serial->rp];
        if (++serial->rp>=serial->buffsize) serial->rp=0;
     }
-    unlock(&serial->lock);
+    rtk_unlock(&serial->lock);
     tracet(5,"readseribuff: ns=%d rp=%d wp=%d\n",ns,serial->rp,serial->wp);
     return ns;
 }
@@ -291,7 +291,7 @@ static int writeseribuff(serial_t *serial, unsigned char *buff, int n)
     
     tracet(5,"writeseribuff: dev=%d n=%d\n",serial->dev,n);
     
-    lock(&serial->lock);
+    rtk_lock(&serial->lock);
     for (ns=0;ns<n;ns++) {
         serial->buff[wp=serial->wp]=buff[ns];
         if (++wp>=serial->buffsize) wp=0;
@@ -301,7 +301,7 @@ static int writeseribuff(serial_t *serial, unsigned char *buff, int n)
             break;
         }
     }
-    unlock(&serial->lock);
+    rtk_unlock(&serial->lock);
     tracet(5,"writeseribuff: ns=%d rp=%d wp=%d\n",ns,serial->rp,serial->wp);
     return ns;
 }
@@ -1826,16 +1826,16 @@ static int test_mntpnt(ntripc_t *ntripc, const char *mntpnt)
 {
     char *p,str[256];
     
-    lock(&ntripc->lock_srctbl);
+    rtk_lock(&ntripc->lock_srctbl);
     
     if (!ntripc->srctbl) {
-        unlock(&ntripc->lock_srctbl);
+        rtk_unlock(&ntripc->lock_srctbl);
         return 1;
     }
     for (p=ntripc->srctbl;(p=strstr(p,"STR;"));p++) {
         if (sscanf(p,"STR;%255[^;]",str)&&!strcmp(str,mntpnt)) break;
     }
-    unlock(&ntripc->lock_srctbl);
+    rtk_unlock(&ntripc->lock_srctbl);
     
     return p!=NULL;
 }
@@ -1845,7 +1845,7 @@ static void send_srctbl(ntripc_t *ntripc, socket_t sock)
     char buff[1024],*p=buff;
     int len;
     
-    lock(&ntripc->lock_srctbl);
+    rtk_lock(&ntripc->lock_srctbl);
     
     len=ntripc->srctbl?strlen(ntripc->srctbl):0;
     p+=sprintf(p,"%s",NTRIP_RSP_SRCTBL);
@@ -1858,7 +1858,7 @@ static void send_srctbl(ntripc_t *ntripc, socket_t sock)
     if (len>0) {
         send_nb(sock,(unsigned char *)ntripc->srctbl,len);
     }
-    unlock(&ntripc->lock_srctbl);
+    rtk_unlock(&ntripc->lock_srctbl);
 }
 /* test ntrip-caster client request ------------------------------------------*/
 static void rsp_ntripc_c(ntripc_t *ntripc, int i)
@@ -2581,14 +2581,14 @@ static int readmembuf(membuf_t *membuf, unsigned char *buff, int n, char *msg)
     
     if (!membuf) return 0;
     
-    lock(&membuf->lock);
+    rtk_lock(&membuf->lock);
     
     for (i=membuf->rp;i!=membuf->wp&&nr<n;i++) {
         if (i>=membuf->bufsize) i=0;
         buff[nr++]=membuf->buf[i];
     }
     membuf->rp=i;
-    unlock(&membuf->lock);
+    rtk_unlock(&membuf->lock);
     return nr;
 }
 /* write memory buffer -------------------------------------------------------*/
@@ -2600,7 +2600,7 @@ static int writemembuf(membuf_t *membuf, unsigned char *buff, int n, char *msg)
     
     if (!membuf) return 0;
     
-    lock(&membuf->lock);
+    rtk_lock(&membuf->lock);
     
     for (i=0;i<n;i++) {
         membuf->buf[membuf->wp++]=buff[i];
@@ -2608,11 +2608,11 @@ static int writemembuf(membuf_t *membuf, unsigned char *buff, int n, char *msg)
         if (membuf->wp==membuf->rp) {
            strcpy(msg,"mem-buffer overflow");
            membuf->state=-1;
-           unlock(&membuf->lock);
+           rtk_unlock(&membuf->lock);
            return i+1;
         }
     }
-    unlock(&membuf->lock);
+    rtk_unlock(&membuf->lock);
     return i;
 }
 /* get state memory buffer ---------------------------------------------------*/
@@ -2874,7 +2874,7 @@ extern void strsync(stream_t *stream1, stream_t *stream2)
 * return : none
 *-----------------------------------------------------------------------------*/
 extern void strlock  (stream_t *stream) {lock  (&stream->lock);}
-extern void strunlock(stream_t *stream) {unlock(&stream->lock);}
+extern void strunlock(stream_t *stream) {rtk_unlock(&stream->lock);}
 
 /* read stream -----------------------------------------------------------------
 * read data from stream (unblocked)
@@ -3157,12 +3157,12 @@ extern int strsetsrctbl(stream_t *stream, const char *file)
     fclose(fp);
     tracet(3,"strsetsrctbl: n=%d\n",n);
     
-    lock(&ntripc->lock_srctbl);
+    rtk_lock(&ntripc->lock_srctbl);
     
     free(ntripc->srctbl);
     ntripc->srctbl=srctbl;
     
-    unlock(&ntripc->lock_srctbl);
+    rtk_unlock(&ntripc->lock_srctbl);
     strunlock(stream);
     return 1;
 }
diff --git a/src/streamsvr.c b/src/streamsvr.c
index 801351f23265ae7814fb0cc8ec2aaabbc04f8890..2e0dc32e31501cea1b6563a449184b3d36eac57c 100644
--- a/src/streamsvr.c
+++ b/src/streamsvr.c
@@ -484,11 +484,11 @@ static void *strsvrthread(void *arg)
                     strwrite(svr->stream+i,svr->buff,n);
                 }
             }
-            lock(&svr->lock);
+            rtk_lock(&svr->lock);
             for (i=0;i<n&&svr->npb<svr->buffsize;i++) {
                 svr->pbuf[svr->npb++]=svr->buff[i];
             }
-            unlock(&svr->lock);
+            rtk_unlock(&svr->lock);
         }
         for (i=1;i<svr->nstr;i++) {
             
@@ -745,7 +745,7 @@ extern int strsvrpeek(strsvr_t *svr, unsigned char *buff, int nmax)
     
     if (!svr->state) return 0;
     
-    lock(&svr->lock);
+    rtk_lock(&svr->lock);
     n=svr->npb<nmax?svr->npb:nmax;
     if (n>0) {
         memcpy(buff,svr->pbuf,n);
@@ -754,7 +754,7 @@ extern int strsvrpeek(strsvr_t *svr, unsigned char *buff, int nmax)
         memmove(svr->pbuf,svr->pbuf+n,svr->npb-n);
     }
     svr->npb-=n;
-    unlock(&svr->lock);
+    rtk_unlock(&svr->lock);
     return n;
 }
 /* set ntrip source table for stream server ------------------------------------