strtok(3) for 4.2 & typo(1)
Intergalactic Psychic Police Of Uranus
jmg at dolphy.UUCP
Wed Oct 16 07:55:43 AEST 1985
*** RE: a program that stands up for America ***
It seems that the evil empire has struck again: there is no
strtok(3) in ucb UNIX, or 4.2 at least...and that means that
those of you who received typo(1), a program to prevent
typing errors caused by the red scourge, were left defenseless.
So, I've oil't down my body, built up my pecks, plugged a few
slant-eye commie automatons, donned the clothes of a middle-america
down home television minister and implemented strtok(3) according
to the specs of at&t 5.2 manual. Here is its, caveats and all:
/* strtok(3) (from the manual system 5.2):
* char *strtok(s1,s2)
* char *s1, *s2;
* strtok considers the string s1 to consist of a sequence
* of zero or more text tokens separated by spans of one or more
* characters from the separator string s2. The first call (with
* pointer s1 specified) returns a pointer to the first character of
* the first token, and will have written a null character into s1
* immediatlely following the returned token. The function keeps
* track of its position in the string between separate calls, so
* that subsequent calls (which must be made with the first arguemtn
* a NULL pointer) will work through the string s1 immediately
* following that token. In this way subsequent calls will work
* through the string s1 until no tokens remain. The separator
* string s2 may be different from call to call. When no token
* remains in s1, a NULL pointer is returned.
*
* Below is my simulation of at&t unix 5.2 strtok(3) function for use
* with the typo(1) program for ucb unix 4.2... I tried to make
* it do what the description above says, but I didn't try very
* hard...just enough for it to work with typo(1), which I
* submitted a few days ago. That is, it may be correct...but, I
* haven't rigorously tested it... If it's adequate in general, tell me!
*
* Jeffrey Greenberg ihnp4!allegra!phri!dolphy!jmg
* Tue Oct 15 17:25:23 EDT 1985
*/
#include <stdio.h>
char *
strtok( source, separators )
char *source, *separators;
{
static char *ch;
register char *sep, *token;
/* if no source supplied, use the previous one.
*/
if( source != (char *) NULL )
ch = source;
/* For each character in the source string, see if it is a separator
* character.
*/
for( token = ch; *ch; ++ch ) {
for( sep = separators; *sep; ++sep ) {
/* look for a separator
*/
if( *ch == *sep ) {
/* Got one, put a null there and move the
* saved source pointer up one for next time.
*/
*ch = 0;
++ch;
return token;
break;
}
}
}
/* If nothing was found, then return nothing
* else return the token
*/
if( token == ch )
return (char *) NULL;
else
return token;
}
More information about the Comp.sources.unix
mailing list