Index: trunk/psLib/src/astro/psTime.c
===================================================================
--- trunk/psLib/src/astro/psTime.c	(revision 3708)
+++ trunk/psLib/src/astro/psTime.c	(revision 3712)
@@ -10,6 +10,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.58 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-04-19 00:17:05 $
+ *  @version $Revision: 1.59 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-04-19 02:13:53 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -64,5 +64,5 @@
 
                 /** Microseconds per day */
-                #define USEC_PER_DAY 86400000000.0
+                #define NSEC_PER_DAY 86400000000000.0
 
                 /** Time metadata read from config file */
@@ -363,6 +363,7 @@
 
     outTime->sec = 0;
-    outTime->usec = 0;
+    outTime->nsec = 0;
     outTime->type = type;
+    outTime->leapsecond = false;
 
     return outTime;
@@ -386,5 +387,5 @@
     // Convert timeval time to psTime
     time->sec = now.tv_sec;
-    time->usec = now.tv_usec;
+    time->nsec = now.tv_usec*1000;
 
     // Add most leapseconds to UTC time to get TAI time if necessary
@@ -403,5 +404,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NULL);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
 
     if (time->type == type) { // time already right type.  That was easy!
@@ -448,5 +449,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NAN);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
 
     // Calculate TAI or UTC time based on type of time user passes
@@ -455,10 +456,10 @@
         utcTime = psTimeAlloc(PS_TIME_UTC);
         utcTime->sec = taiTime->sec - psTimeGetTAIDelta(time);
-        utcTime->usec = taiTime->usec;
+        utcTime->nsec = taiTime->nsec;
     } else if(time->type == PS_TIME_UTC) {
         utcTime = psMemIncrRefCounter(time);
         taiTime = psTimeAlloc(PS_TIME_TAI);
         taiTime->sec = utcTime->sec + psTimeGetTAIDelta(time);
-        taiTime->usec = utcTime->usec;
+        taiTime->nsec = utcTime->nsec;
     }
 
@@ -519,5 +520,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NAN);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
 
     if(time->type != PS_TIME_TAI) {
@@ -592,5 +593,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NULL);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
 
     if(time->type != PS_TIME_TAI)
@@ -715,5 +716,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NAN);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
 
     // Check time metadata
@@ -768,6 +769,6 @@
     PS_PTR_CHECK_NULL(time1,0);
     PS_PTR_CHECK_NULL(time2,0);
-    PS_INT_CHECK_RANGE(time1->usec,0,1e6-1,0);
-    PS_INT_CHECK_RANGE(time2->usec,0,1e6-1,0);
+    PS_INT_CHECK_RANGE(time1->nsec,0,1e9-1,0);
+    PS_INT_CHECK_RANGE(time2->nsec,0,1e9-1,0);
     diff = abs((psS64)psTimeGetTAIDelta((psTime*)time1)-(psS64)psTimeGetTAIDelta((psTime*)time2));
 
@@ -781,11 +782,11 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NAN);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
 
     // Julian date conversion
     if(time->sec < 0) {
-        jd = time->sec / SEC_PER_DAY - time->usec / USEC_PER_DAY + 2440587.5; // psTime earlier than epoch
+        jd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + 2440587.5; // psTime earlier than epoch
     } else {
-        jd = time->sec / SEC_PER_DAY + time->usec / USEC_PER_DAY + 2440587.5; // psTime greater than epoch
+        jd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + 2440587.5; // psTime greater than epoch
     }
 
@@ -800,11 +801,11 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NAN);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
 
     // Modified Julian date conversion
     if(time->sec < 0) {
-        mjd = time->sec / SEC_PER_DAY - time->usec / USEC_PER_DAY + 40587.0; // psTime earlier than epoch
+        mjd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + 40587.0; // psTime earlier than epoch
     } else {
-        mjd = time->sec / SEC_PER_DAY + time->usec / USEC_PER_DAY + 40587.0; // psTime greater than epoch
+        mjd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + 40587.0; // psTime greater than epoch
     }
 
@@ -823,10 +824,10 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NULL);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
 
     tempString = psAlloc(MAX_TIME_STRING_LENGTH);
     timeString = psAlloc(MAX_TIME_STRING_LENGTH);
 
-    ms = time->usec / 1000;
+    ms = time->nsec / 1000000;
     sec = time->sec;
 
@@ -856,8 +857,8 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,timevalTime);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,timevalTime);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,timevalTime);
 
     timevalTime.tv_sec = time->sec;
-    timevalTime.tv_usec = time->usec;
+    timevalTime.tv_usec = time->nsec / 1000;
 
     return timevalTime;
@@ -879,5 +880,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NULL);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
 
     seconds = time->sec%60;
@@ -941,12 +942,12 @@
     seconds = days * SEC_PER_DAY;
     if(seconds < 0.0) {
-        outTime->usec = (seconds - (psS64)seconds) * -1000000.0;  // psTime earlier than epoch
+        outTime->nsec = (seconds - (psS64)seconds) * -1000000000.0;  // psTime earlier than epoch
     } else {
-        outTime->usec = (seconds - (psS64)seconds) * 1000000.0;   // psTime greater than epoch
+        outTime->nsec = (seconds - (psS64)seconds) * 1000000000.0;   // psTime greater than epoch
     }
     outTime->sec = seconds;
 
     // Error check
-    PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
+    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
 
     return outTime;
@@ -967,12 +968,12 @@
     seconds = days * SEC_PER_DAY;
     if(seconds < 0.0) {
-        outTime->usec = (seconds - (psS64)seconds) * -1000000.0;  // psTime earlier than epoch
+        outTime->nsec = (seconds - (psS64)seconds) * -1000000000.0;  // psTime earlier than epoch
     } else {
-        outTime->usec = (seconds - (psS64)seconds) * 1000000.0;   // psTime greater than epoch
+        outTime->nsec = (seconds - (psS64)seconds) * 1000000000.0;   // psTime greater than epoch
     }
     outTime->sec = seconds;
 
     // Error check
-    PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
+    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
 
     return outTime;
@@ -1006,5 +1007,5 @@
     // Convert tm time to psTime
     outTime = psTimeFromTM(&tmTime);
-    outTime->usec = millisecond * 1000;
+    outTime->nsec = millisecond * 1000000;
 
     return outTime;
@@ -1024,8 +1025,8 @@
     // Convert to psTime
     outTime->sec = time->tv_sec;
-    outTime->usec = time->tv_usec;
+    outTime->nsec = time->tv_usec * 1000;
 
     // Error check
-    PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
+    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
 
     return outTime;
@@ -1083,8 +1084,8 @@
 
     // C's TM does not define a microsecond field. Microseconds must be manipulated by calling function.
-    outTime->usec = 0;
+    outTime->nsec = 0;
 
     // Error check
-    PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
+    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
 
     return outTime;
@@ -1100,5 +1101,5 @@
     // Error checks
     PS_PTR_CHECK_NULL(time,NULL);
-    PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
+    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
 
     // Convert time to TAI if necessary, but without changing input arguments
@@ -1106,5 +1107,5 @@
         tempTime = psTimeAlloc(PS_TIME_UTC);
         tempTime->sec = time->sec;
-        tempTime->usec = time->usec;
+        tempTime->nsec = time->nsec;
         tempTime = psTimeConvert(tempTime, PS_TIME_TAI);
     } else {
@@ -1114,10 +1115,10 @@
     // Create output time
     outTime = psTimeAlloc(PS_TIME_TAI);
-    sec = delta + (psF64)tempTime->sec + (psF64)tempTime->usec/1e6;
+    sec = delta + (psF64)tempTime->sec + (psF64)tempTime->nsec/1e9;
     outTime->sec = sec;
-    outTime->usec = (sec - outTime->sec)*1e6;
+    outTime->nsec = (sec - outTime->sec)*1e9;
 
     // Error check
-    PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
+    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
 
     // Convert result to same time type as input
@@ -1142,7 +1143,7 @@
     // Error checks
     PS_PTR_CHECK_NULL(time1,0.0);
-    PS_INT_CHECK_RANGE(time1->usec,0,1e6-1,0.0);
+    PS_INT_CHECK_RANGE(time1->nsec,0,1e9-1,0.0);
     PS_PTR_CHECK_NULL(time2,0.0);
-    PS_INT_CHECK_RANGE(time2->usec,0,1e6-1,0.0);
+    PS_INT_CHECK_RANGE(time2->nsec,0,1e9-1,0.0);
 
     // Convert time to TAI if necessary, but without changing input arguments
@@ -1150,5 +1151,5 @@
         tempTime1 = psTimeAlloc(PS_TIME_UTC);
         tempTime1->sec = time1->sec;
-        tempTime1->usec = time1->usec;
+        tempTime1->nsec = time1->nsec;
         tempTime1 = psTimeConvert(tempTime1, PS_TIME_TAI);
     } else {
@@ -1158,5 +1159,5 @@
         tempTime2 = psTimeAlloc(PS_TIME_UTC);
         tempTime2->sec = time2->sec;
-        tempTime2->usec = time2->usec;
+        tempTime2->nsec = time2->nsec;
         tempTime2 = psTimeConvert(tempTime2, PS_TIME_TAI);
     } else {
@@ -1165,7 +1166,7 @@
 
     uSec1 = tempTime1->sec >= 0 ? 1.0 : -1.0;
-    uSec1 = uSec1*tempTime1->usec/1e6;
+    uSec1 = uSec1*tempTime1->nsec/1e9;
     uSec2 = tempTime2->sec >= 0 ? 1.0 : -1.0;
-    uSec2 = uSec2*tempTime2->usec/1e6;
+    uSec2 = uSec2*tempTime2->nsec/1e9;
     out = (tempTime1->sec-tempTime2->sec) + (uSec1-uSec2);
 
