NT4/private/ntos/nthals/halfire/ppc/fplibc.c
2020-09-30 17:12:29 +02:00

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;
}
}