1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2010 AT&T Intellectual Property * 5* and is licensed under the * 6* Common Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.opensource.org/licenses/cpl1.0.txt * 11* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12* * 13* Information and Software Systems Research * 14* AT&T Research * 15* Florham Park NJ * 16* * 17* Glenn Fowler <gsf@research.att.com> * 18* David Korn <dgk@research.att.com> * 19* Phong Vo <kpv@research.att.com> * 20* * 21***********************************************************************/ 22#pragma prototyped 23/* 24 * Glenn Fowler 25 * AT&T Bell Laboratories 26 * 27 * time conversion support 28 */ 29 30#include <ast.h> 31#include <tm.h> 32#include <ctype.h> 33 34/* 35 * return minutes offset from absolute timezone expression 36 * 37 * [[-+]hh[:mm[:ss]]] 38 * [-+]hhmm 39 * 40 * if e is non-null then it points to the first unrecognized char in s 41 * d returned if no offset in s 42 */ 43 44int 45tmgoff(register const char* s, char** e, int d) 46{ 47 register int n = d; 48 int east; 49 const char* t = s; 50 51 if ((east = *s == '+') || *s == '-') 52 { 53 s++; 54 if (isdigit(*s) && isdigit(*(s + 1))) 55 { 56 n = ((*s - '0') * 10 + (*(s + 1) - '0')) * 60; 57 s += 2; 58 if (*s == ':') 59 s++; 60 if (isdigit(*s) && isdigit(*(s + 1))) 61 { 62 n += ((*s - '0') * 10 + (*(s + 1) - '0')); 63 s += 2; 64 if (*s == ':') 65 s++; 66 if (isdigit(*s) && isdigit(*(s + 1))) 67 s += 2; 68 } 69 if (east) 70 n = -n; 71 t = s; 72 } 73 } 74 if (e) 75 *e = (char*)t; 76 return n; 77} 78