154359Sroberto/* 254359Sroberto * uglydate - convert a time stamp to something barely readable 354359Sroberto * The string returned is 37 characters long. 454359Sroberto */ 5290000Sglebius#include <config.h> 654359Sroberto#include <stdio.h> 754359Sroberto 854359Sroberto#include "ntp_fp.h" 954359Sroberto#include "ntp_unixtime.h" 1054359Sroberto#include "lib_strbuf.h" 1154359Sroberto#include "ntp_stdlib.h" 1254359Sroberto 1382498Sroberto 1454359Srobertochar * 1554359Srobertouglydate( 1654359Sroberto l_fp *ts 1754359Sroberto ) 1854359Sroberto{ 1954359Sroberto char *bp; 2054359Sroberto char *timep; 2154359Sroberto struct tm *tm; 2254359Sroberto time_t sec; 2354359Sroberto long msec; 2454359Sroberto int year; 2554359Sroberto 2654359Sroberto timep = ulfptoa(ts, 6); /* returns max 17 characters */ 2754359Sroberto LIB_GETBUF(bp); 2854359Sroberto sec = ts->l_ui - JAN_1970; 2954359Sroberto msec = ts->l_uf / 4294967; /* fract / (2**32/1000) */ 3054359Sroberto tm = gmtime(&sec); 3154359Sroberto if (ts->l_ui == 0) { 3254359Sroberto /* 3354359Sroberto * Probably not a real good thing to do. Oh, well. 3454359Sroberto */ 3554359Sroberto year = 0; 3654359Sroberto tm->tm_yday = 0; 3754359Sroberto tm->tm_hour = 0; 3854359Sroberto tm->tm_min = 0; 3954359Sroberto tm->tm_sec = 0; 4054359Sroberto } else { 4154359Sroberto year = tm->tm_year; 4254359Sroberto while (year >= 100) 4354359Sroberto year -= 100; 4454359Sroberto } 45290000Sglebius snprintf(bp, LIB_BUFLENGTH, 46290000Sglebius "%17s %02d:%03d:%02d:%02d:%02d.%03ld", timep, year, 47290000Sglebius tm->tm_yday, tm->tm_hour, tm->tm_min, tm->tm_sec, 48290000Sglebius msec); 49290000Sglebius 5054359Sroberto return bp; 5154359Sroberto} 52