Index: trunk/psLib/src/astronomy/psTime.c
===================================================================
--- trunk/psLib/src/astronomy/psTime.c	(revision 2048)
+++ trunk/psLib/src/astronomy/psTime.c	(revision 2075)
@@ -11,6 +11,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.31 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-10-12 01:34:09 $
+ *  @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-10-13 19:04:42 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -541,4 +541,5 @@
     psF64  t            =  0.0;
     psF64  tu           =  0.0;
+    psF64  ut1UtcDbl    =  0.0;
     psF64  const1       =  24110.5493771;
     psF64  const2       =  8639877.3173760;
@@ -573,6 +574,13 @@
     ALLOC_TIME(ut1UtcDelta);
     ut1UtcDelta->type = PS_TIME_UTC;
-    ut1UtcDelta->usec = psTimeGetUT1Delta(utcTime)*1e6;
-    ut1Time = psTimeAdd(utcTime, ut1UtcDelta);
+
+    ut1UtcDbl = psTimeGetUT1Delta(utcTime)*1e6;
+    ut1UtcDelta->usec = (psU32)fabs(ut1UtcDbl);
+    if(ut1UtcDbl<0) {
+        ut1Time = psTimeSubtract(utcTime, ut1UtcDelta);
+    } else {
+        ut1Time = psTimeAdd(utcTime, ut1UtcDelta);
+    }
+
 
     // Calculate UT1 as Julian Centuries since J2000.0
@@ -993,4 +1001,5 @@
 psTime* psTimeAdd(const psTime *tai1, const psTime *tai2)
 {
+    long deltaUsec = 0;
     psTime *outTime = NULL;
 
@@ -1003,11 +1012,13 @@
     ALLOC_TIME(outTime);
     outTime->type = tai1->type;
-
     outTime->sec = tai1->sec + tai2->sec;
-    outTime->usec = tai1->usec + tai2->usec;
-
-    // Increment seconds in case of microsecond overflow after addition
-    if(outTime->usec<tai1->usec || outTime->usec<tai2->usec) {
+    deltaUsec = tai1->usec + tai2->usec;
+
+    // Adjust time in case of microsecond overflow after subtraction
+    if(deltaUsec > 1e6) {
         outTime->sec++;
+        outTime->usec = 2e6 - deltaUsec;
+    } else {
+        outTime->usec = deltaUsec;
     }
 
@@ -1017,4 +1028,5 @@
 psTime* psTimeSubtract(const psTime *tai1, const psTime *tai2)
 {
+    long deltaUsec = 0;
     psTime *outTime = NULL;
 
@@ -1027,11 +1039,13 @@
     ALLOC_TIME(outTime);
     outTime->type = tai1->type;
-
     outTime->sec = tai1->sec - tai2->sec;
-    outTime->usec = tai1->usec - tai2->usec;
-
-    // Decrement seconds in case of microsecond underflow after subtraction
-    if(outTime->usec>tai1->usec || outTime->usec>tai2->usec) {
+    deltaUsec = tai1->usec - tai2->usec;
+
+    // Adjust time in case of microsecond underflow after subtraction
+    if(deltaUsec < 0) {
         outTime->sec--;
+        outTime->usec = 1e6+deltaUsec;
+    } else {
+        outTime->usec = deltaUsec;
     }
 
@@ -1041,9 +1055,10 @@
 psTime* psTimeDelta(const psTime *tai1, const psTime *tai2)
 {
+    long deltaUsec = 0;
     psTime *outTime = NULL;
 
 
     if(tai1->type != tai2->type) {
-        psError(__func__, " : Line %d - Argument types inconsistent for time delta", __LINE__);
+        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
         return NULL;
     }
@@ -1051,11 +1066,13 @@
     ALLOC_TIME(outTime);
     outTime->type = tai1->type;
-
     outTime->sec = tai1->sec - tai2->sec;
-    outTime->usec = tai1->usec - tai2->usec;
-
-    // Decrement seconds in case of microsecond underflow after subtraction
-    if(outTime->usec>tai1->usec || outTime->usec>tai2->usec) {
+    deltaUsec = tai1->usec - tai2->usec;
+
+    // Adjust time in case of microsecond underflow after subtraction
+    if(deltaUsec < 0) {
         outTime->sec--;
+        outTime->usec = 1e6+deltaUsec;
+    } else {
+        outTime->usec = deltaUsec;
     }
 
