8 while(*q!='\0' && *q!=' ' && *q!='\t' && *q!='\r' && *q!='\n')
16 while(*q==' ' || *q=='\t' || *q=='\r' || *q=='\n')
21 static char* months[] = {
22 "jan", "feb", "mar", "apr",
23 "may", "jun", "jul", "aug",
24 "sep", "oct", "nov", "dec"
28 strcmplwr(char *a, char *b, int n)
33 while(*a && *b && b<eb){
34 if(tolower(*a) != tolower(*b))
45 strtotm(char *p, Tm *tmp)
53 memset(&tm, 0, sizeof(tm));
59 for(p=skipwhite(p); *p; p=skipwhite(q)){
62 /* look for time in hh:mm[:ss] */
63 if(r = memchr(p, ':', q-p)){
64 tm.hour = strtol(p, 0, 10);
65 tm.min = strtol(r+1, 0, 10);
66 if(r = memchr(r+1, ':', q-(r+1)))
67 tm.sec = strtol(r+1, 0, 10);
75 if(strcmplwr(p, months[j], 3)==0){
83 /* look for time zone [A-Z][A-Z]T */
84 if(q-p==3 && 'A' <= p[0] && p[0] <= 'Z'
85 && 'A' <= p[1] && p[1] <= 'Z' && p[2] == 'T'){
86 strecpy(tm.zone, tm.zone+4, p);
90 if(p[0]=='+'||p[0]=='-')
91 if(q-p==5 && strspn(p+1, "0123456789") == 4){
92 delta = (((p[1]-'0')*10+p[2]-'0')*60+(p[3]-'0')*10+p[4]-'0')*60;
97 if(strspn(p, "0123456789") == q-p){
98 j = strtol(p, nil, 10);
106 if(tm.mon<0 || tm.year<0
107 || tm.hour<0 || tm.min<0
111 *tmp = *localtime(tm2sec(&tm)-delta);