Annotation of 43BSDTahoe/usr.lib/sendmail/src/convtime.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Eric P. Allman
                      3:  * Copyright (c) 1988 Regents of the University of California.
                      4:  * All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms are permitted
                      7:  * provided that the above copyright notice and this paragraph are
                      8:  * duplicated in all such forms and that any documentation,
                      9:  * advertising materials, and other materials related to such
                     10:  * distribution and use acknowledge that the software was developed
                     11:  * by the University of California, Berkeley.  The name of the
                     12:  * University may not be used to endorse or promote products derived
                     13:  * from this software without specific prior written permission.
                     14:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     15:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     16:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     17:  */
                     18: 
                     19: #ifndef lint
                     20: static char sccsid[] = "@(#)convtime.c 5.3 (Berkeley) 6/30/88";
                     21: #endif /* not lint */
                     22: 
                     23: # include <ctype.h>
                     24: # include "useful.h"
                     25: 
                     26: /*
                     27: **  CONVTIME -- convert time
                     28: **
                     29: **     Takes a time as an ascii string with a trailing character
                     30: **     giving units:
                     31: **       s -- seconds
                     32: **       m -- minutes
                     33: **       h -- hours
                     34: **       d -- days (default)
                     35: **       w -- weeks
                     36: **     For example, "3d12h" is three and a half days.
                     37: **
                     38: **     Parameters:
                     39: **             p -- pointer to ascii time.
                     40: **
                     41: **     Returns:
                     42: **             time in seconds.
                     43: **
                     44: **     Side Effects:
                     45: **             none.
                     46: */
                     47: 
                     48: time_t
                     49: convtime(p)
                     50:        char *p;
                     51: {
                     52:        register time_t t, r;
                     53:        register char c;
                     54: 
                     55:        r = 0;
                     56:        while (*p != '\0')
                     57:        {
                     58:                t = 0;
                     59:                while (isdigit(c = *p++))
                     60:                        t = t * 10 + (c - '0');
                     61:                if (c == '\0')
                     62:                        p--;
                     63:                switch (c)
                     64:                {
                     65:                  case 'w':             /* weeks */
                     66:                        t *= 7;
                     67: 
                     68:                  case 'd':             /* days */
                     69:                  default:
                     70:                        t *= 24;
                     71: 
                     72:                  case 'h':             /* hours */
                     73:                        t *= 60;
                     74: 
                     75:                  case 'm':             /* minutes */
                     76:                        t *= 60;
                     77: 
                     78:                  case 's':             /* seconds */
                     79:                        break;
                     80:                }
                     81:                r += t;
                     82:        }
                     83: 
                     84:        return (r);
                     85: }
                     86: /*
                     87: **  PINTVL -- produce printable version of a time interval
                     88: **
                     89: **     Parameters:
                     90: **             intvl -- the interval to be converted
                     91: **             brief -- if TRUE, print this in an extremely compact form
                     92: **                     (basically used for logging).
                     93: **
                     94: **     Returns:
                     95: **             A pointer to a string version of intvl suitable for
                     96: **                     printing or framing.
                     97: **
                     98: **     Side Effects:
                     99: **             none.
                    100: **
                    101: **     Warning:
                    102: **             The string returned is in a static buffer.
                    103: */
                    104: 
                    105: # define PLURAL(n)     ((n) == 1 ? "" : "s")
                    106: 
                    107: char *
                    108: pintvl(intvl, brief)
                    109:        time_t intvl;
                    110:        bool brief;
                    111: {
                    112:        static char buf[256];
                    113:        register char *p;
                    114:        int wk, dy, hr, mi, se;
                    115: 
                    116:        if (intvl == 0 && !brief)
                    117:                return ("zero seconds");
                    118: 
                    119:        /* decode the interval into weeks, days, hours, minutes, seconds */
                    120:        se = intvl % 60;
                    121:        intvl /= 60;
                    122:        mi = intvl % 60;
                    123:        intvl /= 60;
                    124:        hr = intvl % 24;
                    125:        intvl /= 24;
                    126:        if (brief)
                    127:                dy = intvl;
                    128:        else
                    129:        {
                    130:                dy = intvl % 7;
                    131:                intvl /= 7;
                    132:                wk = intvl;
                    133:        }
                    134: 
                    135:        /* now turn it into a sexy form */
                    136:        p = buf;
                    137:        if (brief)
                    138:        {
                    139:                if (dy > 0)
                    140:                {
                    141:                        (void) sprintf(p, "%d+", dy);
                    142:                        p += strlen(p);
                    143:                }
                    144:                (void) sprintf(p, "%02d:%02d:%02d", hr, mi, se);
                    145:                return (buf);
                    146:        }
                    147: 
                    148:        /* use the verbose form */
                    149:        if (wk > 0)
                    150:        {
                    151:                (void) sprintf(p, ", %d week%s", wk, PLURAL(wk));
                    152:                p += strlen(p);
                    153:        }
                    154:        if (dy > 0)
                    155:        {
                    156:                (void) sprintf(p, ", %d day%s", dy, PLURAL(dy));
                    157:                p += strlen(p);
                    158:        }
                    159:        if (hr > 0)
                    160:        {
                    161:                (void) sprintf(p, ", %d hour%s", hr, PLURAL(hr));
                    162:                p += strlen(p);
                    163:        }
                    164:        if (mi > 0)
                    165:        {
                    166:                (void) sprintf(p, ", %d minute%s", mi, PLURAL(mi));
                    167:                p += strlen(p);
                    168:        }
                    169:        if (se > 0)
                    170:        {
                    171:                (void) sprintf(p, ", %d second%s", se, PLURAL(se));
                    172:                p += strlen(p);
                    173:        }
                    174: 
                    175:        return (buf + 2);
                    176: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.