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);
|
||
|
}
|