1*10898Sroland.mainz@nrubsig.org /*********************************************************************** 2*10898Sroland.mainz@nrubsig.org * * 3*10898Sroland.mainz@nrubsig.org * This software is part of the ast package * 4*10898Sroland.mainz@nrubsig.org * Copyright (c) 1985-2009 AT&T Intellectual Property * 5*10898Sroland.mainz@nrubsig.org * and is licensed under the * 6*10898Sroland.mainz@nrubsig.org * Common Public License, Version 1.0 * 7*10898Sroland.mainz@nrubsig.org * by AT&T Intellectual Property * 8*10898Sroland.mainz@nrubsig.org * * 9*10898Sroland.mainz@nrubsig.org * A copy of the License is available at * 10*10898Sroland.mainz@nrubsig.org * http://www.opensource.org/licenses/cpl1.0.txt * 11*10898Sroland.mainz@nrubsig.org * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12*10898Sroland.mainz@nrubsig.org * * 13*10898Sroland.mainz@nrubsig.org * Information and Software Systems Research * 14*10898Sroland.mainz@nrubsig.org * AT&T Research * 15*10898Sroland.mainz@nrubsig.org * Florham Park NJ * 16*10898Sroland.mainz@nrubsig.org * * 17*10898Sroland.mainz@nrubsig.org * Glenn Fowler <gsf@research.att.com> * 18*10898Sroland.mainz@nrubsig.org * David Korn <dgk@research.att.com> * 19*10898Sroland.mainz@nrubsig.org * Phong Vo <kpv@research.att.com> * 20*10898Sroland.mainz@nrubsig.org * * 21*10898Sroland.mainz@nrubsig.org ***********************************************************************/ 22*10898Sroland.mainz@nrubsig.org #pragma prototyped 23*10898Sroland.mainz@nrubsig.org 24*10898Sroland.mainz@nrubsig.org #include <tmx.h> 25*10898Sroland.mainz@nrubsig.org #include <ctype.h> 26*10898Sroland.mainz@nrubsig.org 27*10898Sroland.mainz@nrubsig.org /* 28*10898Sroland.mainz@nrubsig.org * parse duration expression in s and return Time_t value 29*10898Sroland.mainz@nrubsig.org * if non-null, e points to the first unused char in s 30*10898Sroland.mainz@nrubsig.org * returns 0 with *e==s on error 31*10898Sroland.mainz@nrubsig.org */ 32*10898Sroland.mainz@nrubsig.org 33*10898Sroland.mainz@nrubsig.org Time_t 34*10898Sroland.mainz@nrubsig.org tmxduration(const char* s, char** e) 35*10898Sroland.mainz@nrubsig.org { 36*10898Sroland.mainz@nrubsig.org double d; 37*10898Sroland.mainz@nrubsig.org Time_t ns; 38*10898Sroland.mainz@nrubsig.org Time_t ts; 39*10898Sroland.mainz@nrubsig.org Time_t now; 40*10898Sroland.mainz@nrubsig.org char* last; 41*10898Sroland.mainz@nrubsig.org char* t; 42*10898Sroland.mainz@nrubsig.org char* x; 43*10898Sroland.mainz@nrubsig.org Sfio_t* f; 44*10898Sroland.mainz@nrubsig.org int i; 45*10898Sroland.mainz@nrubsig.org 46*10898Sroland.mainz@nrubsig.org now = TMX_NOW; 47*10898Sroland.mainz@nrubsig.org while (isspace(*s)) 48*10898Sroland.mainz@nrubsig.org s++; 49*10898Sroland.mainz@nrubsig.org if (*s == 'P' || *s == 'p') 50*10898Sroland.mainz@nrubsig.org ns = tmxdate(s, &last, now) - now; 51*10898Sroland.mainz@nrubsig.org else 52*10898Sroland.mainz@nrubsig.org { 53*10898Sroland.mainz@nrubsig.org ns = strtod(s, &last) * TMX_RESOLUTION; 54*10898Sroland.mainz@nrubsig.org if (*last && (f = sfstropen())) 55*10898Sroland.mainz@nrubsig.org { 56*10898Sroland.mainz@nrubsig.org sfprintf(f, "exact %s", s); 57*10898Sroland.mainz@nrubsig.org t = sfstruse(f); 58*10898Sroland.mainz@nrubsig.org ts = tmxdate(t, &x, now); 59*10898Sroland.mainz@nrubsig.org if ((i = x - t - 6) > (last - s)) 60*10898Sroland.mainz@nrubsig.org { 61*10898Sroland.mainz@nrubsig.org last = (char*)s + i; 62*10898Sroland.mainz@nrubsig.org ns = ts - now; 63*10898Sroland.mainz@nrubsig.org } 64*10898Sroland.mainz@nrubsig.org else 65*10898Sroland.mainz@nrubsig.org { 66*10898Sroland.mainz@nrubsig.org sfprintf(f, "p%s", s); 67*10898Sroland.mainz@nrubsig.org t = sfstruse(f); 68*10898Sroland.mainz@nrubsig.org ts = tmxdate(t, &x, now); 69*10898Sroland.mainz@nrubsig.org if ((i = x - t - 1) > (last - s)) 70*10898Sroland.mainz@nrubsig.org { 71*10898Sroland.mainz@nrubsig.org last = (char*)s + i; 72*10898Sroland.mainz@nrubsig.org ns = ts - now; 73*10898Sroland.mainz@nrubsig.org } 74*10898Sroland.mainz@nrubsig.org } 75*10898Sroland.mainz@nrubsig.org sfstrclose(f); 76*10898Sroland.mainz@nrubsig.org } 77*10898Sroland.mainz@nrubsig.org } 78*10898Sroland.mainz@nrubsig.org if (e) 79*10898Sroland.mainz@nrubsig.org *e = last; 80*10898Sroland.mainz@nrubsig.org return ns; 81*10898Sroland.mainz@nrubsig.org } 82