+char * strtok( char * restrict src, const char * restrict seperators )
+{
+ static char * store = NULL;
+ size_t token_length;
+
+ if ( src != NULL )
+ {
+ /* new string */
+ store = src;
+ }
+ if ( store == NULL )
+ {
+ /* no old string, no new string, nothing to do */
+ return NULL;
+ }
+ src += strspn( src, seperators ); /* skipping leading seperators */
+ if ( strlen( src ) == 0 )
+ {
+ /* no more to parse */
+ return ( store = NULL );
+ }
+ token_length = strcspn( src, seperators );
+ if ( src[ token_length ] == '\0' )
+ {
+ /* parsed to end of string */
+ store = NULL;
+ return src;
+ }
+ src[ token_length ] = '\0';
+ store = src + token_length + 1;
+ return src;
+}