diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/ndis/digi/pcimac/ansihelp.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/ndis/digi/pcimac/ansihelp.c')
-rw-r--r-- | private/ntos/ndis/digi/pcimac/ansihelp.c | 487 |
1 files changed, 487 insertions, 0 deletions
diff --git a/private/ntos/ndis/digi/pcimac/ansihelp.c b/private/ntos/ndis/digi/pcimac/ansihelp.c new file mode 100644 index 000000000..1886e88d1 --- /dev/null +++ b/private/ntos/ndis/digi/pcimac/ansihelp.c @@ -0,0 +1,487 @@ + +#include <ndis.h> +//#include <ansihelp.h> + +#define _XA 0x200 +#define _XS 0x100 +#define _BB 0x80 +#define _CN 0x40 +#define _DI 0x20 +#define _LO 0x10 +#define _PU 0x08 +#define _SP 0x04 +#define _UP 0x02 +#define _XD 0x01 +#define XDI (_DI | _XD) +#define XLO (_LO | _XD) +#define XUP (_UP | _XD) + +static const SHORT CTypeTable[257] = { + 0, + _BB, _BB, _BB, _BB, _BB, _BB, _BB, _BB, + _BB, _CN, _CN, _CN, _CN, _CN, _BB, _BB, + _BB, _BB, _BB, _BB, _BB, _BB, _BB, _BB, + _BB, _BB, _BB, _BB, _BB, _BB, _BB, _BB, + _SP, _PU, _PU, _PU, _PU, _PU, _PU, _PU, + _PU, _PU, _PU, _PU, _PU, _PU, _PU, _PU, + XDI, XDI, XDI, XDI, XDI, XDI, XDI, XDI, + XDI, XDI, _PU, _PU, _PU, _PU, _PU, _PU, + _PU, XUP, XUP, XUP, XUP, XUP, XUP, _PU, + _UP, _UP, _UP, _UP, _UP, _UP, _UP, _UP, + _UP, _UP, _UP, _UP, _UP, _UP, _UP, _UP, + _UP, _UP, _UP, _PU, _PU, _PU, _PU, _PU, + _PU, XLO, XLO, XLO, XLO, XLO, XLO, _LO, + _LO, _LO, _LO, _LO, _LO, _LO, _LO, _LO, + _LO, _LO, _LO, _LO, _LO, _LO, _LO, _LO, + _LO, _LO, _LO, _PU, _PU, _PU, _PU, _BB, }; + +const SHORT *_Ctype = &CTypeTable[1]; + +#define BASE_MAX 36 +static const CHAR digits[] = {"0123456789abcdefghijklmnopqrstuvwxyz"}; +static const CHAR ndigs[BASE_MAX+1] = { + 0, 0, 33, 21, 17, 14, 13, 12, 11, 11, + 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, + 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7 }; + +ULONG __Stoul (const CHAR *s, CHAR **endptr, INT base); + +/****************************************************************************** + + @doc INTERNAL + + @internal ULONG | __strlen | string length + + @parm PUCHAR | str | the string. + + @rdesc ULONG | the length of the string. + +******************************************************************************/ +ULONG +__strlen(PUCHAR str) +{ + ULONG len = 0; + + if (str == NULL) { + return(0); + } + + while (str[len] != '\0') { + len++; + } + + return(len); + +} // end of __strlen + + +/****************************************************************************** + + @doc INTERNAL + + @internal LONG | __strcmp | compare strings + + @parm PUCHAR | str1 | one string. + + @parm PUCHAR | str2 | another string. + + @rdesc ULONG | the comparison result. + +******************************************************************************/ +LONG +__strcmp(PUCHAR str1, PUCHAR str2) +{ + ULONG len = 0; + + if (str1 == str2) { + return(0); + } + if ((str1 == NULL) || (str2 == NULL)) { + return(-1); + } + + while ((str1[len] == str2[len]) && (str1[len] != '\0') && + (str2[len] != '\0')) { + len++; + } + + if (str1[len] == str2[len]) { + return(0); + } else if (str1[len] < str2[len]) { + return(-1); + } else { + return(1); + } + +} // end of __strcmp + + +/****************************************************************************** + + @doc INTERNAL + + @internal LONG | __strncmp | compare strings + + @parm PUCHAR | str1 | one string. + + @parm PUCHAR | str2 | another string. + + @parm ULONG | count | maximum characters to compare + + @rdesc ULONG | the comparison result. + +******************************************************************************/ +LONG +__strncmp(PUCHAR str1, PUCHAR str2, ULONG count) +{ + ULONG len = 0; + + if (str1 == str2) { + return(0); + } + if ((str1 == NULL) || (str2 == NULL)) { + return(-1); + } + + while (count-- && (str1[len] == str2[len]) && (str1[len] != '\0') && + (str2[len] != '\0')) { + len++; + } + + if (count == 0) { + len--; + } + if (str1[len] == str2[len]) { + return(0); + } else if (str1[len] < str2[len]) { + return(-1); + } else { + return(1); + } + +} // end of __strncmp + + +/****************************************************************************** + + @doc INTERNAL + + @internal LONG | __strnicmp | compare strings (case insensitive) + + @parm PUCHAR | str1 | one string. + + @parm PUCHAR | str2 | another string. + + @parm ULONG | count | maximum characters to compare + + @rdesc ULONG | the comparison result. + +******************************************************************************/ +LONG +__strnicmp(PUCHAR str1, PUCHAR str2, ULONG count) +{ + ULONG len = 0; + + if (str1 == str2) { + return(0); + } + if ((str1 == NULL) || (str2 == NULL)) { + return(-1); + } + + while (count-- && (str1[len] == str2[len]) && (str1[len] != '\0') && + (str2[len] != '\0')) { + len++; + } + + if (count == 0) { + len--; + } + if (str1[len] == str2[len]) { + return(0); + } else if (str1[len] < str2[len]) { + return(-1); + } else { + return(1); + } + +} // end of __strnicmp + + + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __strncpy | copy strings + + @parm PUCHAR | str1 | one string. + + @parm PUCHAR | str2 | another string. + + @parm ULONG | count | maximum characters to copy + + @rdesc ULONG | + +******************************************************************************/ +PUCHAR +__strncpy(PUCHAR str1, PUCHAR str2, ULONG count) +{ + PUCHAR tmp = str1; + + if (str1 && str2 && *str2 && count) { + while (count-- && (*str2 != '\0')) { + *str1++ = *str2++; + } + *str1 = '\0'; + } + + + return (tmp); +} // end of __strncpy + + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __strcpy | copy strings + + @parm PUCHAR | str1 | one string. + + @parm PUCHAR | str2 | another string. + + @rdesc PUCHAR | the comparison result. + +******************************************************************************/ +PUCHAR +__strcpy(PUCHAR str1, PUCHAR str2) +{ + PUCHAR tmp = str1; + + if (str1 && str2 && *str2) { + while (*str2 != '\0') { + *str1++ = *str2++; + } + *str1 = *str2; + } + + return (tmp); +} // end of __strcpy + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __strstr | search for substring with another string + + @parm PUCHAR | str1 | source string. + + @parm PUCHAR | str2 | substring string. + + @rdesc PUCHAR | + +******************************************************************************/ +PUCHAR +__strstr(PUCHAR str1, PUCHAR str2) +{ + return (NULL); +} // end of __strstr + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __memchr | search for char within buffer[0..count] + + @parm PUCHAR | buffer | starting address. + + @parm CHAR | chr | chr + + @parm ULONG | count | count + + @rdesc PUCHAR | + +******************************************************************************/ +PUCHAR +__memchr(PUCHAR buffer, CHAR chr, ULONG count) +{ + ULONG len = 0; + + if (buffer == NULL) { + return(NULL); + } + + while ((len<count) && (buffer[len] != chr)) { + len++; + } + + return ((len<count)?(buffer+len):NULL); +} // end of __memchr + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __strchr | search for char within a string + + @parm PUCHAR | str1 | source string. + + @parm CHAR | chr | chr + + @rdesc PUCHAR | + +******************************************************************************/ +PUCHAR +__strchr(PUCHAR str1, CHAR chr) +{ + ULONG len = 0; + + if (str1 == NULL) { + return(NULL); + } + + while ((str1[len] != '\0') && (str1[len] != chr)) { + len++; + } + + return ((str1[len])?(str1+len):NULL); +} // end of __strchr + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __strrchr | reverse search for char within a string + + @parm PUCHAR | str1 | source string. + + @parm CHAR | chr | chr + + @rdesc PUCHAR | + +******************************************************************************/ +PUCHAR +__strrchr(PUCHAR str1, CHAR chr) +{ + ULONG len = 0; + + return(NULL); + +} // end of __strrchr + + + +/****************************************************************************** + + @doc INTERNAL + + @internal PUCHAR | __strlwr | convert a string to lowercase + + @parm PUCHAR | str1 | source string. + + @rdesc PUCHAR | + +******************************************************************************/ +PUCHAR +__strlwr(PUCHAR str1) +{ + for( ; str1 != NULL, *str1 != '\0'; str1++ ) + *str1 = tolower( *str1 ); + + return( str1 ); +} // end of __strlwr + +ULONG +__strtoul (const CHAR *s, INT base) +{ + return(__Stoul (s, (CHAR **)NULL, base)); +} + +ULONG +__Stoul (const CHAR *s, CHAR **endptr, INT base) +{ + const CHAR *sc, *sd; + const CHAR *s1, *s2; + CHAR sign; + LONG n; + ULONG x, y; + + for (sc = s; isspace (*sc); ++sc); + + sign = *sc == '-' || *sc == '+' ? *sc++ : '+'; + + if (base < 0 || base == 1 || BASE_MAX < base) + { + if (endptr) + *endptr = (CHAR *)s; + return( (ULONG)-1 ); + } + else if (base) + { + if (base == 16 && *sc == '0' && (sc[1] == 'x' || sc[1] == 'X')) + sc += 2; + } + else if (*sc != '0') + base = 10; + else if (sc[1] == 'x' || sc[1] == 'X') + { + base = 16; + sc += 2; + } + else + base = 8; + for (s1 = sc; *sc == '0'; ++sc ); + x = 0; + for (s2 = sc; (sd = memchr (digits, (INT)tolower(*sc), (UINT)base)) != NULL; ++sc) + { + y = x; + x = x * base + (sd - digits); + } + if (s1 == sc) + { + if (endptr) + *endptr = (CHAR *)s; + return( (ULONG)-1 ); + } + n = sc - s2 - ndigs[base]; + if (n < 0) + ; + else if (0 < n || x < x - sc[-1] || (x - sc[-1]) / base != y) + { + // overflow + x = 0xFFFFFFFF; + } + if (sign == '-') + x = (ULONG)(0 - x); + if (endptr) + *endptr = (CHAR *)sc; + return(x); +} + +INT +__isspace (INT c) +{ + return(_Ctype[(INT)c] & (_CN | _SP | _XS)); +} + +PCHAR +__vsprintf() +{ + return( NULL ); +} + + |