/* vim: set shiftwidth=3 softtabstop=3 expandtab: */

/*
Copyright (C) 2002  Erik Fears
 
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
 
      Foundation, Inc.
      59 Temple Place - Suite 330
      Boston, MA  02111-1307, USA.
 
*/

#include "setup.h"

#include <stdio.h>
#include <time.h>

#ifdef STDC_HEADERS
# include <string.h>
#endif

#include "compat.h"
#include "config.h"
#include "extern.h"
#include "misc.h"


/*
 * Split a time_t into an English-language explanation of how
 * much time it represents, e.g. "2 hours 45 minutes 8 seconds"
 */
char *dissect_time(time_t time)
{
   static char buf[64];
   unsigned int years, weeks, days, hours, minutes, seconds;

   years = weeks = days = hours = minutes = seconds = 0;

   while (time >= 60 * 60 * 24 * 365)
   {
      time -= 60 * 60 * 24 * 365;
      years++;
   }

   while (time >= 60 * 60 * 24 * 7)
   {
      time -= 60 * 60 * 24 * 7;
      weeks++;
   }

   while (time >= 60 * 60 * 24)
   {
      time -= 60 * 60 * 24;
      days++;
   }

   while (time >= 60 * 60)
   {
      time -= 60 * 60;
      hours++;
   }

   while (time >= 60)
   {
      time -= 60;
      minutes++;
   }

   seconds = time;

   if (years)
   {
      snprintf(buf, sizeof(buf),
               "%d year%s, %d week%s, %d day%s, %02d:%02d:%02d",
               years, years == 1 ? "" : "s", weeks,
               weeks == 1 ? "" : "s", days, days == 1 ? "" : "s",
               hours, minutes, seconds);
   }
   else if (weeks)
   {
      snprintf(buf, sizeof(buf),
               "%d week%s, %d day%s, %02d:%02d:%02d", weeks,
               weeks == 1 ? "" : "s", days, days == 1 ? "" : "s",
               hours, minutes, seconds);
   }
   else if (days)
   {
      snprintf(buf, sizeof(buf), "%d day%s, %02d:%02d:%02d",
               days, days == 1 ? "" : "s", hours, minutes, seconds);
   }
   else if (hours)
   {
      if (minutes || seconds)
      {
         snprintf(buf, sizeof(buf),
                  "%d hour%s, %d minute%s, %d second%s", hours,
                  hours == 1 ? "" : "s", minutes,
                  minutes == 1 ? "" : "s", seconds,
                  seconds == 1 ? "" : "s");
      }
      else
      {
         snprintf(buf, sizeof(buf), "%d hour%s", hours,
                  hours == 1 ? "" : "s");
      }
   }
   else if (minutes)
   {
      snprintf(buf, sizeof(buf), "%d minute%s, %d second%s",
               minutes, minutes == 1 ? "" : "s", seconds,
               seconds == 1 ? "" : "s");
   }
   else
   {
      snprintf(buf, sizeof(buf), "%d second%s", seconds,
               seconds == 1 ? "" : "s");
   }

   return(buf);
}

/*
 * Strip leading/tailing characters from null terminated str and return a
 * pointer to the new string.
 */

char *clean(char *str)
{
   size_t i;
   /* Position of last non space. */
   int ln;
   /* Position of first non space. */
   int fn;
   int gf;

   ln = 0;
   fn = 0;
   gf = 0;

   /* Dont need to deal with 1 character */
   if (strlen(str) <= 1)
      return str;

   for (i = 0; i < strlen(str); i++)
   {
      if (fn == 0 && str[i] != ' ' && !gf)
      {
         fn = i;
         gf = 1;
      }
      if (str[i] != ' ')
         ln = i;
   }

   /* Null terminate before the tailing spaces. */
   str[ln + 1] = 0;

   /* Return pointer to point after leading spaces. */
   return(str + (fn));
}


syntax highlighted by Code2HTML, v. 0.9.1