
#include <stdio.h>
#include <ctype.h>
#include "jsh.h"

void 
bcopy_ptrs(s, d, count)
register char **s, **d;
register int count;
{
if (s == NULL || d == NULL)
   {
   puts("warning, NULL in bcopy_ptrs");
   return;
   }
s += count;
d += count;
while (--count >= 0)
   *(--d )= *(--s);
}

char *
clone_string(s)
register char *s;
{
register char *r;
register int count;

if (s == NULL)
   return(NULL);
count = strlen(s);
if ((r = malloc(count+1)) == NULL)
   return(NULL);
strcpy(r, s);
return(r);
}

void
free_string(s)
register char *s;
{
if (s == NULL)
   return;
free(s);
}


void
free_name_list(list)
register Name_list *list;
{
register Name_list *next;

while (list)
   {
   free_string(list->name);
   next = list->next;
   free(list);
   list = next;
   }
}

is_head(head, of)
register char *head;
register char *of;
{
register char c, o;

if (head == NULL || of == NULL)
   return(0);
while ( c = *head++ )
   {
   if ( (o = *of++) == 0)
      return(0);
   if ( c != o)
      return(0);
   }
return(1);
}

char *
lasthead(head, table, size)
register char *head;
register char **table;
register int size;
{
while (--size >= 0)
   {
   if ( is_head(head, *table++) )
      return( *(--table) );
   }
return(NULL);
}


char *
skip_space(pt)
register char *pt;
{
register char c;

if (!pt)
   return(NULL);
for (;;)
   {
   c = *pt++;
   if ( !isspace(c) )
      return(--pt);
   }
}

char *
skip_to_space(pt)
register char *pt;
{
register char c;

if (!pt)
   return(NULL);
for (;;)
   {
   c = *pt++;
   if ( isspace(c) || c == 0 )
      return(--pt);
   }
}


char *
next_word(s)
register char *s;
{
register char c;

if (s == NULL)
   return(NULL);
s = skip_space(s);
s = skip_to_space(s);
s = skip_space(s);
if (s[0] == 0)
   return(NULL);
return(s);
}

char *
first_word(head, list)
register char *head;
char *list;
{
register int count;
register char c;
register char *pt;

if (list == NULL)
   return(NULL);
pt = list;
count = MAX_WORD-1;
pt = skip_space(pt);
while(--count >= 0)
   {
   c = *pt++;
   if (c == 0 || isspace(c) )
	  {
      *head++ = 0;
	  return(pt);
	  }
   else
      *head++ = c;
   }
puts("word too long in:");
puts(list);
return(NULL);
}
