222{
223
224
225 __DCL_ASSERT(0 <= _s->dt_dec.dec_exp && _s->dt_dec.dec_exp <= 7);
227
228 int nYear, nMonth, nDay, nHour, nMin, nSec, nFSec;
229 nYear = nMonth = nDay = nHour = nMin = nSec = nFSec = 0;
230
231 const char* p = _s->dt_dec.dec_dgts;
232 int ndgts = _s->dt_dec.dec_ndgts;
233 switch(TU_START(_s->dt_qual))
234 {
235 case TU_YEAR :
236 if (_s->dt_dec.dec_exp >= 7)
237 {
238 nYear = (*p++) * 100;
239 if (--ndgts == 0)
240 break;
241 }
242 if (_s->dt_dec.dec_exp >= 6)
243 {
244 nYear += (*p++);
245 if (--ndgts == 0)
246 break;
247 }
248 case TU_MONTH :
249 if (_s->dt_dec.dec_exp >= 5)
250 {
251 nMonth = *p++;
252 if (--ndgts == 0)
253 break;
254 }
255 case TU_DAY :
256 if (_s->dt_dec.dec_exp >= 4)
257 {
258 nDay = *p++;
259 if (--ndgts == 0)
260 break;
261 }
262 case TU_HOUR :
263 if (_s->dt_dec.dec_exp >= 3)
264 {
265 nHour = *p++;
266 if (--ndgts == 0)
267 break;
268 }
269 case TU_MINUTE :
270 if (_s->dt_dec.dec_exp >= 2)
271 {
272 nMin = *p++;
273 if (--ndgts == 0)
274 break;
275 }
276 case TU_SECOND :
277 if (_s->dt_dec.dec_exp >= 1)
278 {
279 nSec = *p++;
280 if (--ndgts == 0)
281 break;
282 }
283 case TU_FRAC :
284
285 if (_s->dt_dec.dec_exp >= 0)
286 {
287 nFSec = *p++ * 10000;
288 if (--ndgts == 0)
289 break;
290 }
291
292 if (_s->dt_dec.dec_exp >= -1)
293 {
294 nFSec += *p * 100;
295 if (--ndgts == 0)
296 break;
297 }
298
299 if (_s->dt_dec.dec_exp >= -2)
300 nFSec += *p;
301 }
302
309 _r->nFrac = nFSec * 1000;
311}
#define __DCL_ASSERT(expr)