40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #include "tai.h"
 | ||
|  | #include "caltime.h"
 | ||
|  | 
 | ||
|  | unsigned int caltime_scan(char *s, struct caltime *ct) | ||
|  | { | ||
|  |   char *t = s; | ||
|  |   unsigned long z; | ||
|  |   unsigned long c; | ||
|  |   int sign; | ||
|  | 
 | ||
|  |   t += caldate_scan(t,&ct->date); | ||
|  | 
 | ||
|  |   while ((*t == ' ') || (*t == '\t') || (*t == 'T')) ++t; | ||
|  |   z = 0; while ((c = (unsigned char) (*t - '0')) <= 9) { z = z * 10 + c; ++t; } | ||
|  |   ct->hour = z; | ||
|  | 
 | ||
|  |   if (*t++ != ':') return 0; | ||
|  |   z = 0; while ((c = (unsigned char) (*t - '0')) <= 9) { z = z * 10 + c; ++t; } | ||
|  |   ct->minute = z; | ||
|  | 
 | ||
|  |   if (*t != ':') | ||
|  |     ct->second = 0; | ||
|  |   else { | ||
|  |     ++t; | ||
|  |     z = 0; while ((c = (unsigned char) (*t - '0')) <= 9) { z = z * 10 + c; ++t; } | ||
|  |     ct->second = z; | ||
|  |   } | ||
|  | 
 | ||
|  |   while ((*t == ' ') || (*t == '\t')) ++t; | ||
|  |   if (*t == '+') sign = 1; else if (*t == '-') sign = -1; else return 0; | ||
|  |   ++t; | ||
|  |   c = (unsigned char) (*t++ - '0'); if (c > 9) return 0; z = c; | ||
|  |   c = (unsigned char) (*t++ - '0'); if (c > 9) return 0; z = z * 10 + c; | ||
|  |   c = (unsigned char) (*t++ - '0'); if (c > 9) return 0; z = z * 6 + c; | ||
|  |   c = (unsigned char) (*t++ - '0'); if (c > 9) return 0; z = z * 10 + c; | ||
|  |   ct->offset = z * sign; | ||
|  | 
 | ||
|  |   return (unsigned int)(t - s); | ||
|  | } |