/* Copyright 1989, 1990 by James Aspnes, David Applegate, and Bennet Yee */
/* See the file COPYING for distribution information */
#include "os.h"
#include "db.h"

/* note: it's ok if from == to */
void strip_whitespace (const char *from, char *to)
{
  while (*from) {
    /* scan over word */
    while (*from && !isspace (*from))
      *to++ = *from++;
    /* smash spaces */
    while (*from && isspace (*from))
      from++;
    if (*from)
      *to++ = ' ';              /* add a space to separate next word */
  }
  /* terminate */
  *to = '\0';
}

const char *time_string (datum t)
{
  char *time_string;

  time_string = ctime (&t);

  /* kludge to get around high-octane ctime brain-damage */
  time_string[24] = '\0';

  return time_string;
}

const char *alloc_string (const char *string)
{
  char *s;

  /* NULL->NULL */
  if (string == 0)
    return 0;

  if ((s = (char *) malloc (strlen (string) + 1)) == 0) {
    abort ();
  }
  strcpy (s, string);
  return s;
}

datum concat (datum s1, datum s2)
{
  char buf[MAX_STRLEN];
  const char *c1;
  const char *c2;

  if ((c1 = string (s1)) == NOTHING) {
    return s2;
  } else if ((c2 = string (s2)) == NOTHING) {
    return s1;
  } else if (strlen (c1) + strlen (c2) + 1 > MAX_STRLEN) {
    /* too big, you lose */
    return NOTHING;
  } else {
    strcpy (buf, c1);
    strcat (buf, c2);
    return intern (buf);
  }
}

datum num_to_string (datum x)
{
  char buf[MAX_STRLEN];

  sprintf (buf, "%ld", x);
  return intern (buf);
}