Index: trunk/psLib/src/astro/psTime.c
===================================================================
--- trunk/psLib/src/astro/psTime.c	(revision 5015)
+++ trunk/psLib/src/astro/psTime.c	(revision 5083)
@@ -10,6 +10,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.70 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-09-13 01:09:58 $
+ *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-09-21 02:11:16 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -1611,2 +1611,88 @@
 }
 
+static psHash *timers = NULL;
+static char timerName[256] = "\0";
+
+static void psTimerFree ()
+{
+
+    psFree (timers);
+    p_psTimeFinalize();
+    return;
+}
+
+// start/restart a named timer
+bool psTimerStart (char *name)
+{
+
+    psTime *start;
+
+    if (timers == NULL) {
+        timers = psHashAlloc (16);
+        //        psMemSetDeallocator(timers, (psFreeFunc)psTimerFree);
+    }
+    strncpy(timerName, name, 256);
+    start = psTimeGetNow (PS_TIME_UTC);
+    psHashAdd (timers, name, start);
+    psFree (start);
+    return (true);
+}
+
+psF64 psTimerClear (char *name)
+{
+    psF64 timerTime = 0.0;
+    bool status;
+
+    if (name == NULL)
+        return false;
+    timerTime = psTimerMark(name);
+    status = psHashRemove (timers, name);
+    strncpy(timerName, "\0", 256);
+    if ( !status )
+        return 0.0;
+    else
+        return timerTime;
+}
+
+// get current elapsed time on named timer
+psF64 psTimerMark (char *name)
+{
+
+    psTime *start;
+    psTime *mark;
+    psF64   delta;
+
+    if (timers == NULL)
+        return (0);
+    start = (psTime*)psHashLookup (timers, name);
+    if (start == NULL)
+        return (0);
+    mark = psTimeGetNow (PS_TIME_UTC);
+    delta = psTimeDelta (mark, start);
+    psFree (mark);
+    // psFree (start); -- XXX is psHashLookup not psMemCopying?
+
+    return (delta);
+}
+
+psF64 psTimerStop(void)
+{
+    psF64 timerTime = 0.0;
+
+    if ( strncmp(timerName, "\0", 256) )
+        timerTime = psTimerMark(timerName);
+    strncpy(timerName, "\0", 2);
+    psTimerFree();
+    return timerTime;
+}
+
+void psTimeInitialize(const char *timeConfig)
+{
+    p_psTimeInit(timeConfig);
+}
+
+void psTimeFinalize(void)
+{
+    p_psTimeFinalize();
+}
+
