32 lines
		
	
	
		
			582 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			32 lines
		
	
	
		
			582 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include "tai.h"
							 | 
						||
| 
								 | 
							
								#include "leapsecs.h"
							 | 
						||
| 
								 | 
							
								#include "caldate.h"
							 | 
						||
| 
								 | 
							
								#include "caltime.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* XXX: breaks tai encapsulation */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void caltime_utc(struct caltime *ct, struct tai *t, int *pwday, int *pyday)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  struct tai t2 = *t;
							 | 
						||
| 
								 | 
							
								  uint64_t u;
							 | 
						||
| 
								 | 
							
								  int leap;
							 | 
						||
| 
								 | 
							
								  long s;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /* XXX: check for overfow? */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  leap = leapsecs_sub(&t2);
							 | 
						||
| 
								 | 
							
								  u = t2.x;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  u += 58486;
							 | 
						||
| 
								 | 
							
								  s = (long)(u % ULL(86400));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ct->second = (s % 60) + leap; s /= 60;
							 | 
						||
| 
								 | 
							
								  ct->minute = s % 60; s /= 60;
							 | 
						||
| 
								 | 
							
								  ct->hour = s;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  u /= ULL(86400);
							 | 
						||
| 
								 | 
							
								  caldate_frommjd(&ct->date, (int64_t)u - LL(53375995543064), pwday, pyday);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ct->offset = 0;
							 | 
						||
| 
								 | 
							
								}
							 |