115 lines
2.4 KiB
C
115 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 1995 FirePower Systems, Inc.
|
|
* DO NOT DISTRIBUTE without permission
|
|
*
|
|
* $RCSfile: fplibc.c $
|
|
* $Revision: 1.3 $
|
|
* $Date: 1996/04/30 23:25:53 $
|
|
* $Locker: $
|
|
*/
|
|
|
|
/*
|
|
* This file contains libc support routines that the kernel/hal do
|
|
* not include but that the HAL wants to use, so we have created
|
|
* our own.
|
|
*/
|
|
|
|
#include "fpproto.h"
|
|
|
|
int
|
|
atoi(char *s)
|
|
{
|
|
int temp = 0, base = 10;
|
|
|
|
if (*s == '0') {
|
|
++s;
|
|
if (*s == 'x') {
|
|
++s;
|
|
base = 16;
|
|
} else {
|
|
base = 8;
|
|
}
|
|
}
|
|
while (*s) {
|
|
switch (*s) {
|
|
case '0': case '1': case '2': case '3': case '4':
|
|
case '5': case '6': case '7': case '8': case '9':
|
|
temp = (temp * base) + (*s++ - '0');
|
|
break;
|
|
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
|
|
temp = (temp * base) + (*s++ - 'a' + 10);
|
|
break;
|
|
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
|
|
temp = (temp * base) + (*s++ - 'A' + 10);
|
|
break;
|
|
default:
|
|
return (temp);
|
|
}
|
|
}
|
|
return (temp);
|
|
}
|
|
|
|
char *
|
|
FpStrtok (
|
|
char * string,
|
|
const char * control
|
|
)
|
|
{
|
|
unsigned char *str;
|
|
const unsigned char *ctrl = control;
|
|
|
|
unsigned char map[32];
|
|
int count;
|
|
|
|
static char *nextoken;
|
|
|
|
/* Clear control map */
|
|
for (count = 0; count < 32; count++) {
|
|
map[count] = 0;
|
|
}
|
|
|
|
/* Set bits in delimiter table */
|
|
do {
|
|
map[*ctrl >> 3] |= (1 << (*ctrl & 7));
|
|
} while (*ctrl++);
|
|
|
|
/* Initialize str. If string is NULL, set str to the saved
|
|
* pointer (i.e., continue breaking tokens out of the string
|
|
* from the last strtok call) */
|
|
if (string) {
|
|
str = string;
|
|
}else {
|
|
str = nextoken;
|
|
}
|
|
|
|
/* Find beginning of token (skip over leading delimiters). Note that
|
|
* there is no token iff this loop sets str to point to the terminal
|
|
* null (*str == '\0') */
|
|
while ( (map[*str >> 3] & (1 << (*str & 7))) && *str ) {
|
|
str++;
|
|
}
|
|
|
|
string = str;
|
|
|
|
/* Find the end of the token. If it is not the end of the string,
|
|
* put a null there. */
|
|
for ( ; *str ; str++ ) {
|
|
if ( map[*str >> 3] & (1 << (*str & 7)) ) {
|
|
*str++ = '\0';
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* Update nextoken (or the corresponding field in the per-thread data
|
|
* structure */
|
|
nextoken = str;
|
|
|
|
/* Determine if a token has been found. */
|
|
if ( string == str ) {
|
|
return '\0';
|
|
} else {
|
|
return string;
|
|
}
|
|
}
|
|
|