Index: libcfa/src/clock.hfa
===================================================================
--- libcfa/src/clock.hfa	(revision 846c026c176ce0693b7dc5e3cb2cc03da4e5ccaa)
+++ libcfa/src/clock.hfa	(revision 846c026c176ce0693b7dc5e3cb2cc03da4e5ccaa)
@@ -0,0 +1,93 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// clock --
+//
+// Author           : Peter A. Buhr
+// Created On       : Thu Apr 12 14:36:06 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jan  6 12:49:58 2020
+// Update Count     : 9
+//
+
+#include <time.hfa>
+
+//######################### C time #########################
+
+static inline char * ctime( time_t tp ) { char * buf = ctime( &tp ); buf[24] = '\0'; return buf; }
+static inline char * ctime_r( time_t tp, char * buf ) { ctime_r( &tp, buf ); buf[24] = '\0'; return buf; }
+static inline tm * gmtime( time_t tp ) { return gmtime( &tp ); }
+static inline tm * gmtime_r( time_t tp, tm * result ) { return gmtime_r( &tp, result ); }
+static inline tm * localtime( time_t tp ) { return localtime( &tp ); }
+static inline tm * localtime_r( time_t tp, tm * result ) { return localtime_r( &tp, result ); }
+
+//######################### Clock #########################
+
+struct Clock {											// private
+	Duration offset;									// for virtual clock: contains offset from real-time
+};
+
+static inline {
+	void resetClock( Clock & clk, Duration adj ) with( clk ) {
+		offset = adj + __timezone`s;					// timezone (global) is (UTC - local time) in seconds
+	} // resetClock
+
+	void ?{}( Clock & clk, Duration adj ) { resetClock( clk, adj ); }
+
+	Duration getResNsec() {
+		struct timespec res;
+		clock_getres( CLOCK_REALTIME, &res );
+		return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
+	} // getRes
+
+	Duration getRes() {
+		struct timespec res;
+		clock_getres( CLOCK_REALTIME_COARSE, &res );
+		return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
+	} // getRes
+
+	Time getTimeNsec() {								// with nanoseconds
+		timespec curr;
+		clock_gettime( CLOCK_REALTIME, &curr );
+		return (Time){ curr };
+	} // getTimeNsec
+
+	Time getTime() {									// without nanoseconds
+		timespec curr;
+		clock_gettime( CLOCK_REALTIME_COARSE, &curr );
+		curr.tv_nsec = 0;
+		return (Time){ curr };
+	} // getTime
+
+	Time getTime( Clock & clk ) with( clk ) {
+		return getTime() + offset;
+	} // getTime
+
+	Time ?()( Clock & clk ) with( clk ) {				// alternative syntax
+		return getTime() + offset;
+	} // getTime
+
+	timeval getTime( Clock & clk ) {
+		return (timeval){ clk() };
+	} // getTime
+
+	tm getTime( Clock & clk ) with( clk ) {
+		tm ret;
+		localtime_r( getTime( clk ).tv_sec, &ret );
+		return ret;
+	} // getTime
+
+	Time getCPUTime() {
+		timespec ts;
+		clock_gettime( CLOCK_THREAD_CPUTIME_ID, &ts );
+		return (Time){ ts };
+    } // getCPUTime
+} // distribution
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: libcfa/src/startup.cfa
===================================================================
--- libcfa/src/startup.cfa	(revision e0c235ca8e62339b4cd07c92fdf5cb4522119b86)
+++ libcfa/src/startup.cfa	(revision 846c026c176ce0693b7dc5e3cb2cc03da4e5ccaa)
@@ -10,13 +10,13 @@
 // Created On       : Tue Jul 24 16:21:57 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Nov 30 07:07:56 2019
-// Update Count     : 13
+// Last Modified On : Fri Dec 13 13:16:45 2019
+// Update Count     : 29
 //
 
+#include <time.h>										// tzset
 #include "startup.hfa"
-#include <time.h>										// tzset
 
 extern "C" {
-    static void __cfaabi_appready_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_APPREADY ) ));
+    void __cfaabi_appready_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_APPREADY ) ));
     void __cfaabi_appready_startup( void ) {
 		tzset();										// initialize time global variables
@@ -27,5 +27,5 @@
     } // __cfaabi_appready_startup
 
-    static void __cfaabi_appready_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_APPREADY ) ));
+    void __cfaabi_appready_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_APPREADY ) ));
     void __cfaabi_appready_shutdown( void ) {
 		#ifdef __CFA_DEBUG__
Index: libcfa/src/time.hfa
===================================================================
--- libcfa/src/time.hfa	(revision e0c235ca8e62339b4cd07c92fdf5cb4522119b86)
+++ libcfa/src/time.hfa	(revision 846c026c176ce0693b7dc5e3cb2cc03da4e5ccaa)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 14 23:18:57 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jan  5 19:01:07 2020
-// Update Count     : 652
+// Last Modified On : Mon Jan  6 12:50:16 2020
+// Update Count     : 653
 //
 
@@ -207,76 +207,4 @@
 } // ?{}
 
-//######################### C time #########################
-
-static inline char * ctime( time_t tp ) { char * buf = ctime( &tp ); buf[24] = '\0'; return buf; }
-static inline char * ctime_r( time_t tp, char * buf ) { ctime_r( &tp, buf ); buf[24] = '\0'; return buf; }
-static inline tm * gmtime( time_t tp ) { return gmtime( &tp ); }
-static inline tm * gmtime_r( time_t tp, tm * result ) { return gmtime_r( &tp, result ); }
-static inline tm * localtime( time_t tp ) { return localtime( &tp ); }
-static inline tm * localtime_r( time_t tp, tm * result ) { return localtime_r( &tp, result ); }
-
-//######################### Clock #########################
-
-struct Clock {											// private
-	Duration offset;									// for virtual clock: contains offset from real-time
-};
-
-static inline {
-	void resetClock( Clock & clk, Duration adj ) with( clk ) {
-		offset = adj + __timezone`s;					// timezone (global) is (UTC - local time) in seconds
-	} // resetClock
-
-	void ?{}( Clock & clk, Duration adj ) { resetClock( clk, adj ); }
-
-	Duration getResNsec() {
-		struct timespec res;
-		clock_getres( CLOCK_REALTIME, &res );
-		return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
-	} // getRes
-
-	Duration getRes() {
-		struct timespec res;
-		clock_getres( CLOCK_REALTIME_COARSE, &res );
-		return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
-	} // getRes
-
-	Time getTimeNsec() {								// with nanoseconds
-		timespec curr;
-		clock_gettime( CLOCK_REALTIME, &curr );
-		return (Time){ curr };
-	} // getTimeNsec
-
-	Time getTime() {									// without nanoseconds
-		timespec curr;
-		clock_gettime( CLOCK_REALTIME_COARSE, &curr );
-		curr.tv_nsec = 0;
-		return (Time){ curr };
-	} // getTime
-
-	Time getTime( Clock & clk ) with( clk ) {
-		return getTime() + offset;
-	} // getTime
-
-	Time ?()( Clock & clk ) with( clk ) {				// alternative syntax
-		return getTime() + offset;
-	} // getTime
-
-	timeval getTime( Clock & clk ) {
-		return (timeval){ clk() };
-	} // getTime
-
-	tm getTime( Clock & clk ) with( clk ) {
-		tm ret;
-		localtime_r( getTime( clk ).tv_sec, &ret );
-		return ret;
-	} // getTime
-
-	Time getCPUTime() {
-		timespec ts;
-		clock_gettime( CLOCK_THREAD_CPUTIME_ID, &ts );
-		return (Time){ ts };
-    } // getCPUTime
-} // distribution
-
 // Local Variables: //
 // mode: c //
