/*	$Id: FmtTime.c++ 734 2007-12-11 20:16:50Z faxguy $ */
/*
 * Copyright (c) 1990-1996 Sam Leffler
 * Copyright (c) 1991-1996 Silicon Graphics, Inc.
 * HylaFAX is a trademark of Silicon Graphics
 *
 * Permission to use, copy, modify, distribute, and sell this software and 
 * its documentation for any purpose is hereby granted without fee, provided
 * that (i) the above copyright notices and this permission notice appear in
 * all copies of the software and related documentation, and (ii) the names of
 * Sam Leffler and Silicon Graphics may not be used in any advertising or
 * publicity relating to the software without the specific, prior written
 * permission of Sam Leffler and Silicon Graphics.
 * 
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 * 
 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 * OF THIS SOFTWARE.
 */
#include <time.h>

/*
 * Convert a time_t to a compact printable
 * ``HH:MM:SS'' string.  Note that time values
 * are expected to not overflow this range;
 * if they do, the ``upper part'' of the value
 * is discarded.
 */
const char*
fmtTime(time_t t)
{
    static char tbuf[10];
    const char* digits = "0123456789";
    char* cp = tbuf;
    long v;

    if (t < 0)
	return ("0:00:00");
    if (t > 365*24*60*60)
	return ("??:??:??");
    v = t/3600;
    if (v >= 1000)
	*cp++ = digits[v / 1000];
    if (v >= 100)
	*cp++ = digits[(v % 1000) / 100];
    if (v >= 10)
	*cp++ = digits[((v % 1000) % 100) / 10];
    *cp++ = digits[((v % 1000) % 100) % 10];
    *cp++ = ':';
    t -= v*3600;
    v = t/60;
    *cp++ = digits[v / 10];
    *cp++ = digits[v % 10];
    t -= v*60;
    *cp++ = ':';
    *cp++ = digits[t / 10];
    *cp++ = digits[t % 10];
    *cp = '\0';
    return tbuf;
}
