blob: 07745635c672d956c10c476ed628d465ee2a6ded [file] [log] [blame]
/* Copyright (c) 1988 Bellcore
** All Rights Reserved
** Permission is granted to copy or use this program, EXCEPT that it
** may not be sold for profit, the copyright notice must be reproduced
** on copies, and credit should be given to Bellcore where it is due.
** BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
*/
#ifndef lint
static char rcsid[]= "$Header$";
#endif
#include <ctype.h>
#include "misc.h"
#include "strings.h"
/*
** routines for handling strings.
** several routines manipulate "words"
** a "word" is a string not containing whitespace
*/
/*
** copy a single word. similar to strcpy
*/
void
S_wordcpy(to,from)
char *to, *from;
{
while ((*from != '\0') && isprint(*from) && (!isspace(*from)))
{
*to++ = *from++;
}
*to = '\0';
return;
}
/*
** find the next whitespace character. The address of the pointer
** is passed and the pointer itself is changed.
*/
void
S_skipword(theptr)
char **theptr;
{
while((**theptr != '\0') && isprint(**theptr) && (!isspace(**theptr)))
{
(*theptr)++; /* increment the pointer, NOT the pointer
to the pointer */
}
return;
}
/*
** find the next non-whitespace character. The address of the pointer
** is passed and the pointer itself is changed.
*/
void
S_skipspace(theptr)
char **theptr;
{
while((**theptr != '\0') && isspace(**theptr))
{
(*theptr)++; /* increment the pointer, NOT the pointer
to the pointer */
}
return;
}
/*
** move the pointer to the beginning of the next word
*/
void
S_nextword(theptr)
char **theptr;
{
S_skipword(theptr);
S_skipspace(theptr);
return;
}
/*
** see if the first string is a prefix of the second
** returns 0 if yes
** non zero if now
** sigh -- the way strcmp does
*/
int
S_wordcmp(s1,s2)
char *s1,*s2;
{
return(strncmp(s1,s2,strlen(s2)));
}
/*
** chop off any trailing zeros on a string
** but leave one zero if there are only zeros
*/
void
S_trimzeros(str)
char *str;
{
/*
** end starts out pointing at the null terminator
*/
char *end = str + strlen(str);
/*
** if there is more than one character left in the string
*/
while(end > (str+1))
{
--end;
if ('0' == *end)
{
*end = '\0';
}
else
{
return;
}
}
return;
}
/*
** save a copy of the string
*/
void
S_savestr(to,from)
char **to,*from;
{
S_allocstr(to,strlen(from));
(void) strcpy(*to,from);
return;
}
/*
** save cnt characters of the string
*/
void
S_savenstr(to,from,cnt)
char **to,*from;
{
S_allocstr(to,cnt);
(void) strncpy(*to,from,cnt);
*((*to)+cnt) = '\0';
return;
}
/*
** allocate space for a string, add 1 to size to
** make sure that there is room for the terminating null character
*/
void
S_allocstr(to,size)
char **to;
int size;
{
*to = Z_ALLOC(size+1,char);
}