|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 3630 (0xe2e)
Types: TextFile
Names: »convtime.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦bfebc70e2⟧ »EurOpenD3/mail/sendmail-5.65b+IDA-1.4.3.tar.Z«
└─⟦f9e35cd84⟧
└─⟦this⟧ »sendmail/src/convtime.c«
/*
* Copyright (c) 1983 Eric P. Allman
* Copyright (c) 1988 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted provided
* that: (1) source distributions retain this entire copyright notice and
* comment, and (2) distributions including binaries display the following
* acknowledgement: ``This product includes software developed by the
* University of California, Berkeley and its contributors'' in the
* documentation or other materials provided with the distribution and in
* all advertising materials mentioning features or use of this software.
* Neither the name of the University nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef lint
static char sccsid[] = "@(#)convtime.c 5.4 (Berkeley) 6/1/90";
#endif /* not lint */
# include <ctype.h>
# include "useful.h"
/*
** CONVTIME -- convert time
**
** Takes a time as an ascii string with a trailing character
** giving units:
** s -- seconds
** m -- minutes
** h -- hours
** d -- days (default)
** w -- weeks
** For example, "3d12h" is three and a half days.
**
** Parameters:
** p -- pointer to ascii time.
**
** Returns:
** time in seconds.
**
** Side Effects:
** none.
*/
time_t
convtime(p)
char *p;
{
register time_t t, r;
register char c;
r = 0;
while (*p != '\0')
{
t = 0;
while (isdigit(c = *p++))
t = t * 10 + (c - '0');
if (c == '\0')
p--;
switch (c)
{
case 'w': /* weeks */
t *= 7;
case 'd': /* days */
default:
t *= 24;
case 'h': /* hours */
t *= 60;
case 'm': /* minutes */
t *= 60;
case 's': /* seconds */
break;
}
r += t;
}
return (r);
}
\f
/*
** PINTVL -- produce printable version of a time interval
**
** Parameters:
** intvl -- the interval to be converted
** brief -- if TRUE, print this in an extremely compact form
** (basically used for logging).
**
** Returns:
** A pointer to a string version of intvl suitable for
** printing or framing.
**
** Side Effects:
** none.
**
** Warning:
** The string returned is in a static buffer.
*/
# define PLURAL(n) ((n) == 1 ? "" : "s")
char *
pintvl(intvl, brief)
time_t intvl;
bool brief;
{
static char buf[256];
register char *p;
int wk = 0;
int dy, hr, mi, se;
if (intvl == 0 && !brief)
return ("zero seconds");
/* decode the interval into weeks, days, hours, minutes, seconds */
se = intvl % 60;
intvl /= 60;
mi = intvl % 60;
intvl /= 60;
hr = intvl % 24;
intvl /= 24;
if (brief)
dy = intvl;
else
{
dy = intvl % 7;
intvl /= 7;
wk = intvl;
}
/* now turn it into a sexy form */
p = buf;
if (brief)
{
if (dy > 0)
{
(void) sprintf(p, "%d+", dy);
p += strlen(p);
}
(void) sprintf(p, "%02d:%02d:%02d", hr, mi, se);
return (buf);
}
/* use the verbose form */
if (wk > 0)
{
(void) sprintf(p, ", %d week%s", wk, PLURAL(wk));
p += strlen(p);
}
if (dy > 0)
{
(void) sprintf(p, ", %d day%s", dy, PLURAL(dy));
p += strlen(p);
}
if (hr > 0)
{
(void) sprintf(p, ", %d hour%s", hr, PLURAL(hr));
p += strlen(p);
}
if (mi > 0)
{
(void) sprintf(p, ", %d minute%s", mi, PLURAL(mi));
p += strlen(p);
}
if (se > 0)
{
(void) sprintf(p, ", %d second%s", se, PLURAL(se));
/* p += strlen(p); unused -pbp */
}
return (buf + 2);
}