diff --git a/programs/develop/open watcom/trunk/clib/char/chartest.c b/programs/develop/open watcom/trunk/clib/char/chartest.c new file mode 100644 index 0000000000..c7d3f6fbc3 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/chartest.c @@ -0,0 +1,374 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Non-exhaustive test of ctype.h functions and macros. +* Note: Tests assume the C locale. +* +****************************************************************************/ + + +#include +#include +#include +#include +#include + + +#define VERIFY( exp ) if( !(exp) ) { \ + printf( "%s: ***FAILURE*** at line %d of %s.\n",\ + ProgramName, __LINE__, \ + strlwr(__FILE__) ); \ + NumErrors++; \ + } + +#define TEST_ARRAY_SIZE 256 +#define TEST_ARRAY_SIZE_WIDE 512 + + +struct CtypeBits { + unsigned alnum : 1; + unsigned alpha : 1; + unsigned blank : 1; + unsigned cntrl : 1; + unsigned digit : 1; + unsigned graph : 1; + unsigned lower : 1; + unsigned print : 1; + unsigned punct : 1; + unsigned space : 1; + unsigned upper : 1; + unsigned xdigit : 1; + unsigned ascii : 1; + unsigned csym : 1; + unsigned csymf : 1; +}; + +struct CtypeBits MacroResults[TEST_ARRAY_SIZE]; +struct CtypeBits FunctResults[TEST_ARRAY_SIZE]; +struct CtypeBits WideMacroResults[TEST_ARRAY_SIZE_WIDE]; +struct CtypeBits WideFunctResults[TEST_ARRAY_SIZE_WIDE]; + +char ProgramName[_MAX_PATH]; /* executable filename */ +int NumErrors = 0; /* number of errors */ + +int far far_data = 0; + +void TestClassifyMacro( void ) +/****************************/ +{ + int i; + + far_data++; // set ds outside DGROUP + + MacroResults[0].alnum = isalnum( EOF ); + MacroResults[0].alpha = isalpha( EOF ); + MacroResults[0].blank = isblank( EOF ); + MacroResults[0].cntrl = iscntrl( EOF ); + MacroResults[0].digit = isdigit( EOF ); + MacroResults[0].graph = isgraph( EOF ); + MacroResults[0].lower = islower( EOF ); + MacroResults[0].print = isprint( EOF ); + MacroResults[0].punct = ispunct( EOF ); + MacroResults[0].space = isspace( EOF ); + MacroResults[0].upper = isupper( EOF ); + MacroResults[0].xdigit = isxdigit( EOF ); + MacroResults[0].ascii = isascii( EOF ); + MacroResults[0].csym = __iscsym( EOF ); + MacroResults[0].csymf = __iscsymf( EOF ); + + for( i = 1; i < TEST_ARRAY_SIZE; i++ ) { + MacroResults[i].alnum = isalnum( i ); + MacroResults[i].alpha = isalpha( i ); + MacroResults[i].blank = isblank( i ); + MacroResults[i].cntrl = iscntrl( i ); + MacroResults[i].digit = isdigit( i ); + MacroResults[i].graph = isgraph( i ); + MacroResults[i].lower = islower( i ); + MacroResults[i].print = isprint( i ); + MacroResults[i].punct = ispunct( i ); + MacroResults[i].space = isspace( i ); + MacroResults[i].upper = isupper( i ); + MacroResults[i].xdigit = isxdigit( i ); + MacroResults[i].ascii = isascii( i ); + MacroResults[i].csym = __iscsym( i ); + MacroResults[i].csymf = __iscsymf( i ); + } +} + +void TestClassifyFunct( void ) +/****************************/ +{ + int i; + + far_data++; // set ds outside DGROUP + + FunctResults[0].alnum = (isalnum)( EOF ); + FunctResults[0].alpha = (isalpha)( EOF ); + FunctResults[0].blank = (isblank)( EOF ); + FunctResults[0].cntrl = (iscntrl)( EOF ); + FunctResults[0].digit = (isdigit)( EOF ); + FunctResults[0].graph = (isgraph)( EOF ); + FunctResults[0].lower = (islower)( EOF ); + FunctResults[0].print = (isprint)( EOF ); + FunctResults[0].punct = (ispunct)( EOF ); + FunctResults[0].space = (isspace)( EOF ); + FunctResults[0].upper = (isupper)( EOF ); + FunctResults[0].xdigit = (isxdigit)( EOF ); + FunctResults[0].ascii = (isascii)( EOF ); + FunctResults[0].csym = (__iscsym)( EOF ); + FunctResults[0].csymf = (__iscsymf)( EOF ); + + for( i = 1; i < TEST_ARRAY_SIZE; i++ ) { + FunctResults[i].alnum = (isalnum)( i ); + FunctResults[i].alpha = (isalpha)( i ); + FunctResults[i].blank = (isblank)( i ); + FunctResults[i].cntrl = (iscntrl)( i ); + FunctResults[i].digit = (isdigit)( i ); + FunctResults[i].graph = (isgraph)( i ); + FunctResults[i].lower = (islower)( i ); + FunctResults[i].print = (isprint)( i ); + FunctResults[i].punct = (ispunct)( i ); + FunctResults[i].space = (isspace)( i ); + FunctResults[i].upper = (isupper)( i ); + FunctResults[i].xdigit = (isxdigit)( i ); + FunctResults[i].ascii = (isascii)( i ); + FunctResults[i].csym = (__iscsym)( i ); + FunctResults[i].csymf = (__iscsymf)( i ); + } +} + +void TestClassifyWideMacro( void ) +/********************************/ +{ + int i; + + far_data++; // set ds outside DGROUP + + WideMacroResults[0].alnum = iswalnum( WEOF ); + WideMacroResults[0].alpha = iswalpha( WEOF ); + WideMacroResults[0].blank = iswblank( WEOF ); + WideMacroResults[0].cntrl = iswcntrl( WEOF ); + WideMacroResults[0].digit = iswdigit( WEOF ); + WideMacroResults[0].graph = iswgraph( WEOF ); + WideMacroResults[0].lower = iswlower( WEOF ); + WideMacroResults[0].print = iswprint( WEOF ); + WideMacroResults[0].punct = iswpunct( WEOF ); + WideMacroResults[0].space = iswspace( WEOF ); + WideMacroResults[0].upper = iswupper( WEOF ); + WideMacroResults[0].xdigit = iswxdigit( WEOF ); + WideMacroResults[0].ascii = isascii( WEOF ); + WideMacroResults[0].csym = __iscsym( WEOF ); + WideMacroResults[0].csymf = __iscsymf( WEOF ); + + for( i = 1; i < TEST_ARRAY_SIZE_WIDE; i++ ) { + WideMacroResults[i].alnum = iswalnum( i ); + WideMacroResults[i].alpha = iswalpha( i ); + WideMacroResults[i].blank = iswblank( i ); + WideMacroResults[i].cntrl = iswcntrl( i ); + WideMacroResults[i].digit = iswdigit( i ); + WideMacroResults[i].graph = iswgraph( i ); + WideMacroResults[i].lower = iswlower( i ); + WideMacroResults[i].print = iswprint( i ); + WideMacroResults[i].punct = iswpunct( i ); + WideMacroResults[i].space = iswspace( i ); + WideMacroResults[i].upper = iswupper( i ); + WideMacroResults[i].xdigit = iswxdigit( i ); + WideMacroResults[i].ascii = isascii( i ); + WideMacroResults[i].csym = __iscsym( i ); + WideMacroResults[i].csymf = __iscsymf( i ); + } +} + +void TestClassifyWideFunct( void ) +/********************************/ +{ + int i; + + far_data++; // set ds outside DGROUP + + WideFunctResults[0].alnum = (iswalnum)( WEOF ); + WideFunctResults[0].alpha = (iswalpha)( WEOF ); + WideFunctResults[0].blank = (iswblank)( WEOF ); + WideFunctResults[0].cntrl = (iswcntrl)( WEOF ); + WideFunctResults[0].digit = (iswdigit)( WEOF ); + WideFunctResults[0].graph = (iswgraph)( WEOF ); + WideFunctResults[0].lower = (iswlower)( WEOF ); + WideFunctResults[0].print = (iswprint)( WEOF ); + WideFunctResults[0].punct = (iswpunct)( WEOF ); + WideFunctResults[0].space = (iswspace)( WEOF ); + WideFunctResults[0].upper = (iswupper)( WEOF ); + WideFunctResults[0].xdigit = (iswxdigit)( WEOF ); + WideFunctResults[0].ascii = (isascii)( WEOF ); + WideFunctResults[0].csym = (__iscsym)( WEOF ); + WideFunctResults[0].csymf = (__iscsymf)( WEOF ); + + for( i = 1; i < TEST_ARRAY_SIZE_WIDE; i++ ) { + WideFunctResults[i].alnum = (iswalnum)( i ); + WideFunctResults[i].alpha = (iswalpha)( i ); + WideFunctResults[i].blank = (iswblank)( i ); + WideFunctResults[i].cntrl = (iswcntrl)( i ); + WideFunctResults[i].digit = (iswdigit)( i ); + WideFunctResults[i].graph = (iswgraph)( i ); + WideFunctResults[i].lower = (iswlower)( i ); + WideFunctResults[i].print = (iswprint)( i ); + WideFunctResults[i].punct = (iswpunct)( i ); + WideFunctResults[i].space = (iswspace)( i ); + WideFunctResults[i].upper = (iswupper)( i ); + WideFunctResults[i].xdigit = (iswxdigit)( i ); + WideFunctResults[i].ascii = (isascii)( i ); + WideFunctResults[i].csym = (__iscsym)( i ); + WideFunctResults[i].csymf = (__iscsymf)( i ); + } +} + +/* Helper function to print mismatches in human readable form */ +void CheckResults( struct CtypeBits *s1, struct CtypeBits *s2, int count ) +/************************************************************************/ +{ + int i; + + far_data++; // set ds outside DGROUP + + for( i = 0; i < TEST_ARRAY_SIZE; i++ ) { + if( s1[i].alnum != WideMacroResults[i].alnum ) + printf( "Mismatch at %d (alnum)\n", i ); + if( s1[i].alpha != s2[i].alpha ) + printf( "Mismatch at %d (alpha)\n", i ); + if( s1[i].blank != s2[i].blank ) + printf( "Mismatch at %d (blank)\n", i ); + if( s1[i].cntrl != s2[i].cntrl ) + printf( "Mismatch at %d (cntrl)\n", i ); + if( s1[i].digit != s2[i].digit ) + printf( "Mismatch at %d (digit)\n", i ); + if( s1[i].graph != s2[i].graph ) + printf( "Mismatch at %d (graph)\n", i ); + if( s1[i].lower != s2[i].lower ) + printf( "Mismatch at %d (lower)\n", i ); + if( s1[i].print != s2[i].print ) + printf( "Mismatch at %d (print)\n", i ); + if( s1[i].punct != s2[i].punct ) + printf( "Mismatch at %d (punct)\n", i ); + if( s1[i].space != s2[i].space ) + printf( "Mismatch at %d (space)\n", i ); + if( s1[i].upper != s2[i].upper ) + printf( "Mismatch at %d (upper)\n", i ); + if( s1[i].xdigit != s2[i].xdigit ) + printf( "Mismatch at %d (xdigit)\n", i ); + if( s1[i].ascii != s2[i].ascii ) + printf( "Mismatch at %d (ascii)\n", i ); + if( s1[i].csym != s2[i].csym ) + printf( "Mismatch at %d (csym)\n", i ); + if( s1[i].csymf != s2[i].csymf ) + printf( "Mismatch at %d (csymf)\n", i ); + } +} + +void TestResults( void ) +/**********************/ +{ + size_t len; + size_t wide_len; + + far_data++; // set ds outside DGROUP + + len = sizeof( MacroResults ); + wide_len = sizeof( WideMacroResults ); + + CheckResults( MacroResults, FunctResults, TEST_ARRAY_SIZE ); + VERIFY( !memcmp( MacroResults, FunctResults, len ) ); + VERIFY( !memcmp( WideMacroResults, WideFunctResults, wide_len ) ); + VERIFY( !memcmp( MacroResults, WideMacroResults, len ) ); + VERIFY( !memcmp( MacroResults, WideFunctResults, len ) ); +} + +void TestConversion( void ) +/*************************/ +{ + int c, c1, c2; + + far_data++; // set ds outside DGROUP + + for( c = 0; c < 256; c++ ) { + c1 = tolower( c ); + c2 = toupper( c ); + if( isalpha( c ) ) { + if( islower( c ) ) + VERIFY( (c1 == c) && (c2 != c) ); + if( isupper( c ) ) + VERIFY( (c1 != c) && (c2 == c) ); + } else { + VERIFY( !isalpha( c1 ) && !isalpha( c2 ) ); + } + } +} + +void TestWideConversion( void ) +/*****************************/ +{ + wchar_t c, c1, c2; + + far_data++; // set ds outside DGROUP + + for( c = 0; c < 1024; c++ ) { + c1 = towlower( c ); + c2 = towupper( c ); + if( iswalpha( c ) ) { + if( iswlower( c ) ) + VERIFY( (c1 == c) && (c2 != c) ); + if( iswupper( c ) ) + VERIFY( (c1 != c) && (c2 == c) ); + } else { + VERIFY( !iswalpha( c1 ) && !iswalpha( c2 ) ); + } + } +} + +int main( int argc, char *argv[] ) +/********************************/ +{ + far_data++; // set ds outside DGROUP + + /*** Initialize ***/ + strcpy( ProgramName, strlwr(argv[0]) ); + + /*** Test stuff ***/ + TestClassifyMacro(); + TestClassifyFunct(); + TestClassifyWideMacro(); + TestClassifyWideFunct(); + TestResults(); + TestConversion(); + TestWideConversion(); + + /*** Print a pass/fail message and quit ***/ + if( NumErrors == 0 ) { + printf( "%s: SUCCESS.\n", ProgramName ); + return( EXIT_SUCCESS ); + } else { + printf( "%s: FAILURE (%d errors).\n", ProgramName, NumErrors ); + return( EXIT_FAILURE ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/intwctrn.h b/programs/develop/open watcom/trunk/clib/char/intwctrn.h new file mode 100644 index 0000000000..3e4f6d3b78 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/intwctrn.h @@ -0,0 +1,38 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Identifiers for internal use by wctrans() and towctrans(). +* +****************************************************************************/ + + +#ifndef INTWCTRN_H +#define INTWCTRN_H + +#define WCTRANS_TOLOWER 128 +#define WCTRANS_TOUPPER 129 + +#endif diff --git a/programs/develop/open watcom/trunk/clib/char/intwctyp.h b/programs/develop/open watcom/trunk/clib/char/intwctyp.h new file mode 100644 index 0000000000..346622e6ae --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/intwctyp.h @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Identifiers for internal use by iswctype() and wctype(). +* +****************************************************************************/ + + +#ifndef INTWCTYP_H +#define INTWCTYP_H + +#define WCTYPE_ALNUM 1 +#define WCTYPE_ALPHA 2 +#define WCTYPE_CNTRL 3 +#define WCTYPE_DIGIT 4 +#define WCTYPE_GRAPH 5 +#define WCTYPE_LOWER 6 +#define WCTYPE_PRINT 7 +#define WCTYPE_PUNCT 8 +#define WCTYPE_SPACE 9 +#define WCTYPE_UPPER 10 +#define WCTYPE_XDIGIT 11 +#define WCTYPE_BLANK 12 + +#endif diff --git a/programs/develop/open watcom/trunk/clib/char/isalnum.c b/programs/develop/open watcom/trunk/clib/char/isalnum.c new file mode 100644 index 0000000000..4ad3751772 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isalnum.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of isalnum(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isalnum + +_WCRTLINK int __F_NAME(isalnum,iswalnum)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & (_LOWER|_UPPER|_DIGIT) ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isalpha.c b/programs/develop/open watcom/trunk/clib/char/isalpha.c new file mode 100644 index 0000000000..fb0a415464 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isalpha.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of isalpha(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isalpha + +_WCRTLINK int __F_NAME(isalpha,iswalpha)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & (_LOWER|_UPPER) ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isascii.c b/programs/develop/open watcom/trunk/clib/char/isascii.c new file mode 100644 index 0000000000..c59e11528b --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isascii.c @@ -0,0 +1,43 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of isascii(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#undef isascii + +_WCRTLINK int __F_NAME(isascii,iswascii)( INTCHAR_TYPE c ) +{ + return( (unsigned)(c) <= 0x7f ); +} diff --git a/programs/develop/open watcom/trunk/clib/char/isblank.c b/programs/develop/open watcom/trunk/clib/char/isblank.c new file mode 100644 index 0000000000..0581b9de8e --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isblank.c @@ -0,0 +1,47 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if isblank(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#undef isblank + +_WCRTLINK int __F_NAME(isblank,iswblank)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( (c == ' ') || (c == '\t') ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/iscntrl.c b/programs/develop/open watcom/trunk/clib/char/iscntrl.c new file mode 100644 index 0000000000..706db3f478 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/iscntrl.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of iscntrl(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef iscntrl + +_WCRTLINK int __F_NAME(iscntrl,iswcntrl)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _CNTRL ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/iscsym.c b/programs/develop/open watcom/trunk/clib/char/iscsym.c new file mode 100644 index 0000000000..0c3319d4fe --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/iscsym.c @@ -0,0 +1,45 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of __iscsym(). +* +****************************************************************************/ + + +#include "variety.h" +#include +#include "widechar.h" +#include "istable.h" +#undef __iscsym + +_WCRTLINK int (__iscsym)( int c ) +{ + if( IS_ASCII( c ) ) { + return( (IsWhat( c ) & (_LOWER|_UPPER|_DIGIT)) || (c == '_') ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/iscsymf.c b/programs/develop/open watcom/trunk/clib/char/iscsymf.c new file mode 100644 index 0000000000..d7cf3e8fe0 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/iscsymf.c @@ -0,0 +1,45 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of __iscsymf(). +* +****************************************************************************/ + + +#include "variety.h" +#include +#include "widechar.h" +#include "istable.h" +#undef __iscsymf + +_WCRTLINK int (__iscsymf)( int c ) +{ + if( IS_ASCII( c ) ) { + return( (IsWhat( c ) & (_LOWER|_UPPER)) || (c == '_') ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isdigit.c b/programs/develop/open watcom/trunk/clib/char/isdigit.c new file mode 100644 index 0000000000..fde8c166d8 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isdigit.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of isdigit(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isdigit + +_WCRTLINK int __F_NAME(isdigit,iswdigit)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _DIGIT ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isgraph.c b/programs/develop/open watcom/trunk/clib/char/isgraph.c new file mode 100644 index 0000000000..848e8daa87 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isgraph.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if isgraph(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isgraph + +_WCRTLINK int __F_NAME(isgraph,iswgraph)( INTCHAR_TYPE c ) +{ + if( IS_ASCII(c) ) { + return( (IsWhat( c ) & (_PRINT|_SPACE)) == _PRINT ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/islower.c b/programs/develop/open watcom/trunk/clib/char/islower.c new file mode 100644 index 0000000000..c45460eb75 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/islower.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of islower(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef islower + +_WCRTLINK int __F_NAME(islower,iswlower)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _LOWER ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isprint.c b/programs/develop/open watcom/trunk/clib/char/isprint.c new file mode 100644 index 0000000000..ae1d21b17d --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isprint.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if isprint(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isprint + +_WCRTLINK int __F_NAME(isprint,iswprint)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _PRINT ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/ispunct.c b/programs/develop/open watcom/trunk/clib/char/ispunct.c new file mode 100644 index 0000000000..82724ff85b --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/ispunct.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of ispunct(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef ispunct + +_WCRTLINK int __F_NAME(ispunct,iswpunct)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _PUNCT ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isspace.c b/programs/develop/open watcom/trunk/clib/char/isspace.c new file mode 100644 index 0000000000..678a7c5922 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isspace.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if isspace(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isspace + +_WCRTLINK int __F_NAME(isspace,iswspace)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _SPACE ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/istable.c b/programs/develop/open watcom/trunk/clib/char/istable.c new file mode 100644 index 0000000000..ecceb54ef2 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/istable.c @@ -0,0 +1,295 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Character classification table. +* +****************************************************************************/ + + +#include "variety.h" +#include + +_WCRTLINKD const char _HUGEDATA _IsTable[257] = { + +#define ___0__ 0 + +/* -1,EOF */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 00,NUL */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 01,SOH */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 02,STX */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 03,ETX */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 04,EOT */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 05,ENQ */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 06,NAK */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 07,BEL */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 08,BS */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 09,TAB */ ___0__|___0__|___0__|___0__|___0__|___0__|_SPACE|_CNTRL, +/* 0A,LF */ ___0__|___0__|___0__|___0__|___0__|___0__|_SPACE|_CNTRL, +/* 0B,VT */ ___0__|___0__|___0__|___0__|___0__|___0__|_SPACE|_CNTRL, +/* 0C,FF */ ___0__|___0__|___0__|___0__|___0__|___0__|_SPACE|_CNTRL, +/* 0D,CR */ ___0__|___0__|___0__|___0__|___0__|___0__|_SPACE|_CNTRL, +/* 0E,SI */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 0F,SO */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 10, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 11, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 12, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 13, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 14, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 15, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 16, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 17, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 18, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 19, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 1A, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 1B, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 1C, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 1D, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 1E, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 1F, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 20, */ ___0__|___0__|___0__|___0__|_PRINT|___0__|_SPACE|___0__, +/* 21, ! */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 22, " */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 23, # */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 24, $ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 25, % */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 26, & */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 27, ' */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 28, ( */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 29, ) */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 2A, * */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 2B, + */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 2C, , */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 2D, - */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 2E, . */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 2F, / */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 30, 0 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 31, 1 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 32, 2 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 33, 3 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 34, 4 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 35, 5 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 36, 6 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 37, 7 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 38, 8 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 39, 9 */ ___0__|___0__|_DIGIT|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 3A, : */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 3B, ; */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 3C, < */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 3D, = */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 3E, > */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 3F, ? */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 40, @ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 41, A */ ___0__|_UPPER|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 42, B */ ___0__|_UPPER|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 43, C */ ___0__|_UPPER|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 44, D */ ___0__|_UPPER|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 45, E */ ___0__|_UPPER|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 46, F */ ___0__|_UPPER|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 47, G */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 48, H */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 49, I */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 4A, J */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 4B, K */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 4C, L */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 4D, M */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 4E, N */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 4F, O */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 50, P */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 51, Q */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 52, R */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 53, S */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 54, T */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 55, U */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 56, V */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 57, W */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 58, X */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 59, Y */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 5A, Z */ ___0__|_UPPER|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 5B, [ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 5C, \ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 5D, ] */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 5E, ^ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 5F, _ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 60, ` */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 61, a */ _LOWER|___0__|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 62, b */ _LOWER|___0__|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 63, c */ _LOWER|___0__|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 64, d */ _LOWER|___0__|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 65, e */ _LOWER|___0__|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 66, f */ _LOWER|___0__|___0__|_XDIGT|_PRINT|___0__|___0__|___0__, +/* 67, g */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 68, h */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 69, i */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 6A, j */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 6B, k */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 6C, l */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 6D, m */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 6E, n */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 6F, o */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 70, p */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 71, q */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 72, r */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 73, s */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 74, t */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 75, u */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 76, v */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 77, w */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 78, x */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 79, y */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 7A, z */ _LOWER|___0__|___0__|___0__|_PRINT|___0__|___0__|___0__, +/* 7B, { */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 7C, | */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 7D, } */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 7E, ~ */ ___0__|___0__|___0__|___0__|_PRINT|_PUNCT|___0__|___0__, +/* 7F,DEL */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|_CNTRL, +/* 80, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 81, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 82, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 83, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 84, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 85, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 86, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 87, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 88, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 89, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 8A, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 8B, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 8C, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 8D, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 8E, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 8F, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 90, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 91, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 92, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 93, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 94, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 95, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 96, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 97, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 98, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 99, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 9A, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 9B, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 9C, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 9D, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 9E, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* 9F, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A0, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A1, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A2, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A3, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A4, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A5, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A6, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A7, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A8, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* A9, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* AA, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* AB, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* AC, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* AD, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* AE, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* AF, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B0, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B1, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B2, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B3, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B4, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B5, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B6, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B7, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B8, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* B9, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* BA, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* BB, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* BC, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* BD, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* BE, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* BF, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C0, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C1, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C2, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C3, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C4, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C5, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C6, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C7, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C8, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* C9, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* CA, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* CB, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* CC, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* CD, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* CE, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* CF, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D0, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D1, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D2, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D3, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D4, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D5, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D6, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D7, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D8, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* D9, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* DA, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* DB, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* DC, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* DD, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* DE, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* DF, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E0, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E1, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E2, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E3, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E4, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E5, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E6, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E7, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E8, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* E9, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* EA, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* EB, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* EC, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* ED, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* EE, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* EF, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F0, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F1, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F2, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F3, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F4, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F5, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F6, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F7, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F8, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* F9, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* FA, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* FB, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* FC, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* FD, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* FE, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__, +/* FF, */ ___0__|___0__|___0__|___0__|___0__|___0__|___0__|___0__ }; diff --git a/programs/develop/open watcom/trunk/clib/char/istable.h b/programs/develop/open watcom/trunk/clib/char/istable.h new file mode 100644 index 0000000000..cfbd3e38de --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/istable.h @@ -0,0 +1,68 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: _IsTable accessors (with x86 optimized versions). +* +****************************************************************************/ + + +#ifndef _ISTABLE_H_INCLUDED +#define _ISTABLE_H_INCLUDED + +#if defined(__386__) +extern int IsWhat( int ); +#pragma aux IsWhat = \ + "and eax,0xff" \ + "mov al,_IsTable+0x1[eax]" \ + parm loadds [eax] +#elif defined(M_I86HM) +extern int IsWhat( int ); +#pragma aux IsWhat = \ + "push bx" \ + "mov bx,seg _IsTable" \ + "mov ds,bx" \ + "and ax,0xff" \ + "mov bx,ax" \ + "mov al,_IsTable+0x1[bx]" \ + "pop bx" \ + parm [ax] modify [ds] +#elif defined(__I86__) +extern int IsWhat( int ); +#pragma aux IsWhat = \ + "push bx" \ + "and ax,0xff" \ + "mov bx,ax" \ + "mov al,_IsTable+0x1[bx]" \ + "pop bx" \ + parm loadds [ax] +#else +static int IsWhat( int c ) +{ + return( _IsTable[TO_ASCII( c )+1] ); +} +#endif + +#endif diff --git a/programs/develop/open watcom/trunk/clib/char/isupper.c b/programs/develop/open watcom/trunk/clib/char/isupper.c new file mode 100644 index 0000000000..601cac18ad --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isupper.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of isupper(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isupper + +_WCRTLINK int __F_NAME(isupper,iswupper)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _UPPER ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/iswctype.c b/programs/develop/open watcom/trunk/clib/char/iswctype.c new file mode 100644 index 0000000000..1016eb9eff --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/iswctype.c @@ -0,0 +1,54 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if iswctype(). +* +****************************************************************************/ + + +#include "variety.h" +#include +#include "intwctyp.h" + +/* Determine if the given character is of the specified type. */ +_WCRTLINK int iswctype( wint_t wc, wctype_t desc ) +{ + switch( desc ) { + case WCTYPE_ALNUM: return( iswalnum( wc ) ); + case WCTYPE_ALPHA: return( iswalpha( wc ) ); + case WCTYPE_BLANK: return( iswblank( wc ) ); + case WCTYPE_CNTRL: return( iswcntrl( wc ) ); + case WCTYPE_DIGIT: return( iswdigit( wc ) ); + case WCTYPE_GRAPH: return( iswgraph( wc ) ); + case WCTYPE_LOWER: return( iswlower( wc ) ); + case WCTYPE_PRINT: return( iswprint( wc ) ); + case WCTYPE_PUNCT: return( iswpunct( wc ) ); + case WCTYPE_SPACE: return( iswspace( wc ) ); + case WCTYPE_UPPER: return( iswupper( wc ) ); + case WCTYPE_XDIGIT: return( iswxdigit( wc ) ); + default: return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/char/isxdigit.c b/programs/develop/open watcom/trunk/clib/char/isxdigit.c new file mode 100644 index 0000000000..ff186bb844 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/isxdigit.c @@ -0,0 +1,48 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if isxdigit(). +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#endif +#include "istable.h" +#undef isxdigit + +_WCRTLINK int __F_NAME(isxdigit,iswxdigit)( INTCHAR_TYPE c ) +{ + if( IS_ASCII( c ) ) { + return( IsWhat( c ) & _XDIGT ); + } else { + return( 0 ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/src/tolower.c b/programs/develop/open watcom/trunk/clib/char/tolower.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/tolower.c rename to programs/develop/open watcom/trunk/clib/char/tolower.c diff --git a/programs/develop/open watcom/trunk/clib/src/toupper.c b/programs/develop/open watcom/trunk/clib/char/toupper.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/toupper.c rename to programs/develop/open watcom/trunk/clib/char/toupper.c diff --git a/programs/develop/open watcom/trunk/clib/char/towctrns.c b/programs/develop/open watcom/trunk/clib/char/towctrns.c new file mode 100644 index 0000000000..a8a99f5987 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/char/towctrns.c @@ -0,0 +1,45 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of towctrans(). +* +****************************************************************************/ + + +#include "variety.h" +#include +#include "intwctrn.h" + + +/* Transform character as specified by 'desc'. */ +_WCRTLINK wint_t towctrans( wint_t wc, wctrans_t desc ) +{ + switch( desc ) { + case WCTRANS_TOLOWER: return( towlower( wc ) ); + case WCTRANS_TOUPPER: return( towupper( wc ) ); + default: return( wc ); + } +} diff --git a/programs/develop/open watcom/trunk/clib/src/alphabet.c b/programs/develop/open watcom/trunk/clib/convert/alphabet.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/alphabet.c rename to programs/develop/open watcom/trunk/clib/convert/alphabet.c diff --git a/programs/develop/open watcom/trunk/clib/src/atoi.c b/programs/develop/open watcom/trunk/clib/convert/atoi.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/atoi.c rename to programs/develop/open watcom/trunk/clib/convert/atoi.c diff --git a/programs/develop/open watcom/trunk/clib/convert/atol.c b/programs/develop/open watcom/trunk/clib/convert/atol.c new file mode 100644 index 0000000000..c105e38539 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/atol.c @@ -0,0 +1,61 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#ifdef __WIDECHAR__ + #include +#else + #include +#endif +#include + + +_WCRTLINK long int __F_NAME(atol,_wtol)( const CHAR_TYPE *p ) /* convert ASCII string to long integer */ + { + register long int value; + CHAR_TYPE sign; + + __ptr_check( p, 0 ); + + while( __F_NAME(isspace,iswspace)( *p ) ) ++p; + sign = *p; + if( sign == '+' || sign == '-' ) ++p; + value = 0; + while( __F_NAME(isdigit,iswdigit)(*p) ) { + value = value * 10 + *p - '0'; + ++p; + } + if( sign == '-' ) value = - value; + return( value ); + } diff --git a/programs/develop/open watcom/trunk/clib/convert/atoll.c b/programs/develop/open watcom/trunk/clib/convert/atoll.c new file mode 100644 index 0000000000..8c5a9b8f44 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/atoll.c @@ -0,0 +1,61 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: ASCII to long long conversion routine. +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include "watcom.h" +#include +#ifdef __WIDECHAR__ + #include +#else + #include +#endif +#include + +_WCRTLINK long long int __F_NAME(atoll,_wtoll)( const CHAR_TYPE *p ) /* convert ASCII string to long long int */ +{ + unsigned long long int value = 0; + CHAR_TYPE sign; + + __ptr_check( p, 0 ); + + while( __F_NAME(isspace,iswspace)( *p ) ) + ++p; + sign = *p; + if( sign == '+' || sign == '-' ) ++p; + while( __F_NAME(isdigit,iswdigit)(*p) ) { + value = value * 10 + *p - '0'; + ++p; + } + if( sign == '-' ) + value = -value; + return( value ); +} diff --git a/programs/develop/open watcom/trunk/clib/convert/fdmd386.asm b/programs/develop/open watcom/trunk/clib/convert/fdmd386.asm new file mode 100644 index 0000000000..48bc8945df --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/fdmd386.asm @@ -0,0 +1,118 @@ +;***************************************************************************** +;* +;* Open Watcom Project +;* +;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +;* +;* ======================================================================== +;* +;* This file contains Original Code and/or Modifications of Original +;* Code as defined in and that are subject to the Sybase Open Watcom +;* Public License version 1.0 (the 'License'). You may not use this file +;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +;* provided with the Original Code and Modifications, and is also +;* available at www.sybase.com/developer/opensource. +;* +;* The Original Code and all software distributed under the License are +;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +;* NON-INFRINGEMENT. Please see the License for the specific language +;* governing rights and limitations under the License. +;* +;* ======================================================================== +;* +;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +;* DESCRIBE IT HERE! +;* +;***************************************************************************** + + +include mdef.inc +include struct.inc + + modstart fdmd386 + + xdefp "C",_dieeetomsbin + defpe _dieeetomsbin + +ifdef __STACK__ + mov eax,dword ptr +4H[esp] ; load src double ptr + mov edx,dword ptr +8H[esp] ; load dst double ptt +else + push ecx ; save register +endif + +; At this point: +; eax - ptr to IEEE source double +; edx - ptr to MBF dest double +; ecx - spare register + +; Check for IEEE Underflow first + mov ecx,+4h[eax] ; load IEEE double (hi) + rol ecx,1 ; rotate sign bit away for comparisons + cmp ecx,6fe00000H ; exponent < 1023 - 128 ? + jae IEEENoUnderflow ; yes, jump + +; IEEE Underflow, store MBF 0.0 + xor eax,eax ; make 0 + mov [edx],eax ; store MBF 0.0 (lo) + mov +4h[edx],eax ; store MBF 0.0 (hi) +ifndef __STACK__ + pop ecx ; clean up +endif + ret ; return 0 (no overflow) + +; Check for IEEE Overflow +IEEENoUnderflow: + cmp ecx,8fc00000H ; exponent >= 1023 + 127 ? + jae IEEEOverflow ; yes, jump + +; General IEEE case, load rest of double + mov eax,[eax] ; load IEEE double (lo) + ror ecx,1 ; rotate sign bit back into place + +; At this point: +; ecx:eax - IEEE source double +; edx - ptr to MBF dest double + + push ecx ; save sign bit + +; shift exponent & mantissa into place + shld ecx,eax,3 ; shift exponent and mantissa + shl eax,3 ; : + mov [edx],eax ; save mantissa + rol ecx,9 ; convert IEEE exponent to MBF + shr ecx,1 ; : + adc cl,cl ; : + add cl,82h ; correct MBF exponent + pop eax ; restore sign bit + add eax,eax ; shift sign bit into carry + adc ecx,ecx ; add in sign bit + ror ecx,9 ; MBF double (hi) + mov +4h[edx],ecx ; store MBF double (hi) + xor eax,eax ; 0 +ifndef __STACK__ + pop ecx ; clean up +endif + ret ; return 0 (no overflow) + +; IEEE Overflow, store maximum MBF, preserving sign +IEEEOverflow: or ecx,0FFFFFFFFEh ; set MBF exponent and mantissa to maximum + mov eax,ecx ; : + ror ecx,9 ; rotate sign bit into place for MBF + sar eax,1 ; now -1 + mov +4h[edx],ecx ; store IEEE double (hi) + mov [edx],eax ; store IEEE double (lo) + neg eax ; 1 +ifndef __STACK__ + pop ecx ; clean up +endif + ret ; return 1 (overflow) + + endproc _dieeetomsbin + + endmod + end diff --git a/programs/develop/open watcom/trunk/clib/convert/fsms386.asm b/programs/develop/open watcom/trunk/clib/convert/fsms386.asm new file mode 100644 index 0000000000..2bc5b48f5b --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/fsms386.asm @@ -0,0 +1,109 @@ +;***************************************************************************** +;* +;* Open Watcom Project +;* +;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +;* +;* ======================================================================== +;* +;* This file contains Original Code and/or Modifications of Original +;* Code as defined in and that are subject to the Sybase Open Watcom +;* Public License version 1.0 (the 'License'). You may not use this file +;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +;* provided with the Original Code and Modifications, and is also +;* available at www.sybase.com/developer/opensource. +;* +;* The Original Code and all software distributed under the License are +;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +;* NON-INFRINGEMENT. Please see the License for the specific language +;* governing rights and limitations under the License. +;* +;* ======================================================================== +;* +;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +;* DESCRIBE IT HERE! +;* +;***************************************************************************** + + +include mdef.inc +include struct.inc + + modstart fsms386 + + xdefp "C",_fieeetomsbin + defpe _fieeetomsbin + +ifdef __STACK__ + mov eax,dword ptr +4H[esp] + mov edx,dword ptr +8H[esp] +endif + +; At this point: +; eax - ptr to IEEE source float +; edx - ptr to MBF dest float + + mov eax,[eax] ; load IEEE float + test eax,7fe00000h ; IEEE exponent != 0 or convertable + ; denormal ? + jne IEEENonZero ; : + +; IEEE Zero or IEEE unconvertable denormal, store MBF Zero + xor eax,eax ; 0 + mov [edx],eax ; store MBF 0.0F + ret ; return 0 (no overflow) + +; At this point: +; eax - IEEE source float +; edx - ptr to MBF dest float + +IEEENonZero: rol eax,9 ; rotate for exponent analysis + test al,al ; IEEE convertable denormal ? + je IEEEDenormal ; yes, jump + add al,2 ; MBF exponent = IEEE exponent + 2 + jc IEEEOverflow ; jump if overflow + shr eax,1 ; rotate sign bit and exponent + adc al,al ; : + adc eax,eax ; : + ror eax,9 ; rotate so MBF float + +MBFStore: mov [edx],eax ; store MBF float + xor eax,eax ; 0 + ret ; return 0 (no overflow) + +; One of leading 2 bits of mantissa is a 1 +IEEEDenormal: +ifndef __STACK__ + push ecx ; save register +endif + mov ecx,eax ; save sign bit and exponent + and ah,0FEh ; eliminate sign bit +DenormalLoop: inc ecx ; increment count + add eax,eax ; shift mantissa + jnc DenormalLoop ; loop while no implied 1 + xor ecx,3h ; invert count (new exponent) + shr ecx,1 ; rotate exponent and sign bit + adc cl,cl ; : + adc ecx,ecx ; : + shrd eax,ecx,9 ; combine mantissa (eax) and + ; exponent& sign bit (ecx) +ifndef __STACK__ + pop ecx ; restore register +endif + jmp MBFStore ; continue + +IEEEOverflow: rol eax,15 ; rotate sign bit into place + or eax,0FF7FFFFFh ; set MBF exponent and mantissa to + ; maximum but preserve MBF sign + mov [edx],eax ; store MBF float + and eax,1 ; 1 + ret ; return 1 (overflow) + + endproc _fieeetomsbin + + endmod + end diff --git a/programs/develop/open watcom/trunk/clib/src/itoa.c b/programs/develop/open watcom/trunk/clib/convert/itoa.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/itoa.c rename to programs/develop/open watcom/trunk/clib/convert/itoa.c diff --git a/programs/develop/open watcom/trunk/clib/src/lltoa.c b/programs/develop/open watcom/trunk/clib/convert/lltoa.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/lltoa.c rename to programs/develop/open watcom/trunk/clib/convert/lltoa.c diff --git a/programs/develop/open watcom/trunk/clib/src/ltoa.c b/programs/develop/open watcom/trunk/clib/convert/ltoa.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/ltoa.c rename to programs/develop/open watcom/trunk/clib/convert/ltoa.c diff --git a/programs/develop/open watcom/trunk/clib/convert/mdfd386.asm b/programs/develop/open watcom/trunk/clib/convert/mdfd386.asm new file mode 100644 index 0000000000..c149a61a0c --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/mdfd386.asm @@ -0,0 +1,105 @@ +;***************************************************************************** +;* +;* Open Watcom Project +;* +;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +;* +;* ======================================================================== +;* +;* This file contains Original Code and/or Modifications of Original +;* Code as defined in and that are subject to the Sybase Open Watcom +;* Public License version 1.0 (the 'License'). You may not use this file +;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +;* provided with the Original Code and Modifications, and is also +;* available at www.sybase.com/developer/opensource. +;* +;* The Original Code and all software distributed under the License are +;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +;* NON-INFRINGEMENT. Please see the License for the specific language +;* governing rights and limitations under the License. +;* +;* ======================================================================== +;* +;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +;* DESCRIBE IT HERE! +;* +;***************************************************************************** + + +include mdef.inc +include struct.inc + + modstart mdfd386 + + xdefp "C",_dmsbintoieee + defpe _dmsbintoieee + +ifdef __STACK__ + mov eax,dword ptr +4H[esp] + mov edx,dword ptr +8H[esp] +else + push ecx +endif + +; At this point: +; eax - ptr to MBF source double +; edx - ptr to IEEE dest double +; ecx - spare register + +; Check for and process MBF 0.0 first + mov ecx,+4h[eax] ; load MBF double (hi) + test ecx,0ff000000h ; MBF exponent = 0 ? + jne MBFNonZero ; no, jump + +; MBF 0.0, store IEEE 0.0 + xor eax,eax ; make 0 + mov [edx],eax ; store IEEE 0.0 (lo) + mov +4h[edx],eax ; store IEEE 0.0 (hi) +ifndef __STACK__ + pop ecx ; clean up +endif + ret ; return 0 (no overflow) + +MBFNonZero: mov eax,[eax] ; load MBF double (lo) + +; At this point: +; ecx:eax - MBF source double +; edx - ptr to IEEE dest double + + rol ecx,9 ; rotate exponent & sign bit low + shr ecx,1 ; move sign bit before exponent + rcr cl,1 ; : + adc ecx,ecx ; : + ror ecx,9 ; rotate exponent & sign bit back + +; shift mantissa into place + shrd eax,ecx,2 ; shift mantissa + sar ecx,3 ; shift exponent & mantissa, save sign bit + rcr eax,1 ; shift mantissa + jc MBFRound ; jump if rounding up + and ecx,8FFFFFFFh ; mask out surplus sign bits + add ecx,37e00000h ; convert MBF to IEEE exponent + +IEEEStore: + mov [edx],eax ; store IEEE double (lo) + mov +4h[edx],ecx ; store IEEE double (hi) + xor eax,eax ; 0 +ifndef __STACK__ + pop ecx ; clean up +endif + ret ; return 0 (no overflow) + +; add rounding bit +MBFRound: and ecx,8FFFFFFFh ; mask out surplus sign bits + add eax,1 ; add round bit + adc ecx,37e00000h ; convert MBF to IEEE exponent + jmp IEEEStore ; store result + + endproc _dmsbintoieee + + endmod + end diff --git a/programs/develop/open watcom/trunk/clib/convert/msfs386.asm b/programs/develop/open watcom/trunk/clib/convert/msfs386.asm new file mode 100644 index 0000000000..593e78fc58 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/msfs386.asm @@ -0,0 +1,93 @@ +;***************************************************************************** +;* +;* Open Watcom Project +;* +;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +;* +;* ======================================================================== +;* +;* This file contains Original Code and/or Modifications of Original +;* Code as defined in and that are subject to the Sybase Open Watcom +;* Public License version 1.0 (the 'License'). You may not use this file +;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +;* provided with the Original Code and Modifications, and is also +;* available at www.sybase.com/developer/opensource. +;* +;* The Original Code and all software distributed under the License are +;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +;* NON-INFRINGEMENT. Please see the License for the specific language +;* governing rights and limitations under the License. +;* +;* ======================================================================== +;* +;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +;* DESCRIBE IT HERE! +;* +;***************************************************************************** + + +include mdef.inc +include struct.inc + + modstart msfs386 + + xdefp "C",_fmsbintoieee + defpe _fmsbintoieee + +ifdef __STACK__ + mov eax,dword ptr +4H[esp] + mov edx,dword ptr +8H[esp] +endif + +; At this point: +; eax - ptr to MBF source float +; edx - ptr to IEEE dest float + + mov eax,[eax] ; load MBF float + ; MBF exponent = 0 ? + test eax,0ff000000h + jne MBFNonZero ; yes, jump + + xor eax,eax ; IEEE 0.0 + mov [edx],eax ; store IEEE float + ret ; return 0 (no overflow) + +; At this point: +; eax - MBF source float +; edx - ptr to IEEE dest float + +MBFNonZero: rol eax,9 ; rotate exponent for better analysis + shr eax,1 ; shift out + rcr al,1 ; move sign bit + adc eax,eax ; shift back + sub al,2 ; convert exponent + jc MBFExp1 ; jump if MBF exponent 1 + je MBFExp2 ; jump if MBF exponent 2 + ror eax,9 ; rotate so IEEE float +IEEEStore: + mov [edx],eax ; store IEEE float + xor eax,eax ; return 0 (no overflow) + ret ; : + +MBFExp1: and al,1 ; zero exponent except implied 1 + ror eax,9 ; rotate so IEEE float + sar eax,2 ; convert to IEEE denormal + adc eax,0 ; add in round bit + and eax,80FFFFFFh ; zero surplus sign bits + jmp short IEEEStore ; continue + +MBFExp2: or al,1 ; set implied 1 + ror eax,9 ; rotate so IEEE float + sar eax,1 ; convert to IEEE denormal + adc eax,0 ; add in round bit + and eax,80FFFFFFh ; zero surplus sign bit + jmp short IEEEStore ; continue + + endproc _fmsbintoieee + + endmod + end diff --git a/programs/develop/open watcom/trunk/clib/convert/strtol.c b/programs/develop/open watcom/trunk/clib/convert/strtol.c new file mode 100644 index 0000000000..79f95deadc --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/strtol.c @@ -0,0 +1,148 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#include +#ifdef __WIDECHAR__ + #include +#else + #include +#endif +#include +#include +#include "seterrno.h" + +/* + * this table is the largest value that can safely be multiplied + * by the associated base without overflowing + */ +static unsigned long nearly_overflowing[] = { + ULONG_MAX / 2, ULONG_MAX / 3, ULONG_MAX / 4, ULONG_MAX / 5, + ULONG_MAX / 6, ULONG_MAX / 7, ULONG_MAX / 8, ULONG_MAX / 9, + ULONG_MAX / 10, ULONG_MAX / 11, ULONG_MAX / 12, ULONG_MAX / 13, + ULONG_MAX / 14, ULONG_MAX / 15, ULONG_MAX / 16, ULONG_MAX / 17, + ULONG_MAX / 18, ULONG_MAX / 19, ULONG_MAX / 20, ULONG_MAX / 21, + ULONG_MAX / 22, ULONG_MAX / 23, ULONG_MAX / 24, ULONG_MAX / 25, + ULONG_MAX / 26, ULONG_MAX / 27, ULONG_MAX / 28, ULONG_MAX / 29, + ULONG_MAX / 30, ULONG_MAX / 31, ULONG_MAX / 32, ULONG_MAX / 33, + ULONG_MAX / 34, ULONG_MAX / 35, ULONG_MAX / 36 +}; + +#define hexstr(p) (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) + + +static int radix_value( CHAR_TYPE c ) + { + if( c >= '0' && c <= '9' ) return( c - '0' ); + c = __F_NAME(tolower,towlower)(c); + if( c >= 'a' && c <= 'i' ) return( c - 'a' + 10 ); + if( c >= 'j' && c <= 'r' ) return( c - 'j' + 19 ); + if( c >= 's' && c <= 'z' ) return( c - 's' + 28 ); + return( 37 ); + } + + +static unsigned long int _stol( const CHAR_TYPE *nptr,CHAR_TYPE **endptr,int base,int who) + { + const CHAR_TYPE *p; + const CHAR_TYPE *startp; + int digit; + unsigned long int value; + unsigned long int prev_value; + CHAR_TYPE sign; + char overflow; /*overflow is used as a flag so it does not + *need to be of type CHAR_TYPE */ + + if( endptr != NULL ) *endptr = (CHAR_TYPE *)nptr; + p = nptr; + while( __F_NAME(isspace,iswspace)(*p) ) ++p; + sign = *p; + if( sign == '+' || sign == '-' ) ++p; + if( base == 0 ) { + if( hexstr(p) ) base = 16; + else if( *p == '0' ) base = 8; + else base = 10; + } + if( base < 2 || base > 36 ) { + __set_errno( EDOM ); + return( 0 ); + } + if( base == 16 ) { + if( hexstr(p) ) p += 2; /* skip over '0x' */ + } + startp = p; + overflow = 0; + value = 0; + for(;;) { + digit = radix_value( *p ); + if( digit >= base ) break; + if( value > nearly_overflowing[base-2] ) overflow = 1; + prev_value = value; + value = value * base + digit; + if( value < prev_value ) overflow = 1; + ++p; + } + if( p == startp ) p = nptr; + if( endptr != NULL ) *endptr = (CHAR_TYPE *)p; + if( who == 1 ) { + if( value >= 0x80000000 ) { + if( value == 0x80000000 && sign == '-' ) { + ; /* OK */ + } else { + overflow = 1; + } + } + } + if( overflow ) { + __set_errno( ERANGE ); + if( who == 0 ) return( ULONG_MAX ); + if( sign == '-' ) return( LONG_MIN ); + return( LONG_MAX ); + } + if( sign == '-' ) value = - value; + return( value ); + } + + +_WCRTLINK unsigned long int __F_NAME(strtoul,wcstoul)( const CHAR_TYPE *nptr, + CHAR_TYPE **endptr, int base ) + { + return( _stol( nptr, endptr, base, 0 ) ); + } + + +_WCRTLINK long int __F_NAME(strtol,wcstol)( const CHAR_TYPE *nptr, CHAR_TYPE **endptr, int base ) + { + return( _stol( nptr, endptr, base, 1 ) ); + } diff --git a/programs/develop/open watcom/trunk/clib/convert/strtoll.c b/programs/develop/open watcom/trunk/clib/convert/strtoll.c new file mode 100644 index 0000000000..358ac44006 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/convert/strtoll.c @@ -0,0 +1,177 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: String to long long conversion routines. +* +****************************************************************************/ + + +#include "variety.h" +#include "widechar.h" +#include +#include +#include +#ifdef __WIDECHAR__ + #include +#else + #include +#endif +#include +#include +#include "seterrno.h" + +/* This is heavily based on strtol() implementation; however this code needs + * to use 64-bit arithmetic and there is little need to drag in all the + * supporting code for people who just need 16- or 32-bit string to integer + * conversion. + */ + +/* + * this table is the largest value that can safely be multiplied + * by the associated base without overflowing + */ +static unsigned long long nearly_overflowing[] = { + ULLONG_MAX / 2, ULLONG_MAX / 3, ULLONG_MAX / 4, ULLONG_MAX / 5, + ULLONG_MAX / 6, ULLONG_MAX / 7, ULLONG_MAX / 8, ULLONG_MAX / 9, + ULLONG_MAX / 10, ULLONG_MAX / 11, ULLONG_MAX / 12, ULLONG_MAX / 13, + ULLONG_MAX / 14, ULLONG_MAX / 15, ULLONG_MAX / 16, ULLONG_MAX / 17, + ULLONG_MAX / 18, ULLONG_MAX / 19, ULLONG_MAX / 20, ULLONG_MAX / 21, + ULLONG_MAX / 22, ULLONG_MAX / 23, ULLONG_MAX / 24, ULLONG_MAX / 25, + ULLONG_MAX / 26, ULLONG_MAX / 27, ULLONG_MAX / 28, ULLONG_MAX / 29, + ULLONG_MAX / 30, ULLONG_MAX / 31, ULLONG_MAX / 32, ULLONG_MAX / 33, + ULLONG_MAX / 34, ULLONG_MAX / 35, ULLONG_MAX / 36 +}; + +static int radix_value( CHAR_TYPE c ) +{ + if( c >= '0' && c <= '9' ) return( c - '0' ); + c = __F_NAME(tolower,towlower)(c); + if( c >= 'a' && c <= 'i' ) return( c - 'a' + 10 ); + if( c >= 'j' && c <= 'r' ) return( c - 'j' + 19 ); + if( c >= 's' && c <= 'z' ) return( c - 's' + 28 ); + return( 37 ); +} + +#define hexstr(p) (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) + +static unsigned long long int _stoll( const CHAR_TYPE *nptr, CHAR_TYPE **endptr, int base, int who ) +{ + const CHAR_TYPE *p; + const CHAR_TYPE *startp; + int digit; + unsigned long long int value; + unsigned long long int prev_value; + CHAR_TYPE sign; + char overflow; /*overflow is used as a flag so it does not + *need to be of type CHAR_TYPE */ + + if( endptr != NULL ) + *endptr = (CHAR_TYPE *)nptr; + p = nptr; + while( __F_NAME(isspace,iswspace)(*p) ) + ++p; + sign = *p; + if( sign == '+' || sign == '-' ) + ++p; + if( base == 0 ) { + if( hexstr(p) ) + base = 16; + else if( *p == '0' ) + base = 8; + else + base = 10; + } + if( base < 2 || base > 36 ) { + __set_errno( EDOM ); + return( 0 ); + } + if( base == 16 ) { + if( hexstr(p) ) + p += 2; /* skip over '0x' */ + } + startp = p; + overflow = 0; + value = 0; + for(;;) { + digit = radix_value( *p ); + if( digit >= base ) + break; + if( value > nearly_overflowing[base-2] ) + overflow = 1; + prev_value = value; + value = value * base + digit; + if( value < prev_value ) + overflow = 1; + ++p; + } + if( p == startp ) + p = nptr; + if( endptr != NULL ) + *endptr = (CHAR_TYPE *)p; + if( who == 1 ) { + if( value >= 0x8000000000000000 ) { + if( value == 0x8000000000000000 && sign == '-' ) { + ; /* OK */ + } else { + overflow = 1; + } + } + } + if( overflow ) { + __set_errno( ERANGE ); + if( who == 0 ) + return( ULLONG_MAX ); + if( sign == '-' ) + return( LLONG_MIN ); + return( LLONG_MAX ); + } + if( sign == '-' ) + value = - value; + return( value ); +} + + +_WCRTLINK unsigned long long int __F_NAME(strtoull,wcstoull)( const CHAR_TYPE *nptr, CHAR_TYPE **endptr, int base ) +{ + return( _stoll( nptr, endptr, base, 0 ) ); +} + + +_WCRTLINK long long int __F_NAME(strtoll,wcstoll)( const CHAR_TYPE *nptr, CHAR_TYPE **endptr, int base ) +{ + return( _stoll( nptr, endptr, base, 1 ) ); +} + +/* Assuming that intmax_t is equal to long long and uintmax_t to unsigned long long */ +_WCRTLINK uintmax_t __F_NAME(strtoumax,wcstoumax)( const CHAR_TYPE *nptr, CHAR_TYPE **endptr, int base ) +{ + return( _stoll( nptr, endptr, base, 0 ) ); +} + +_WCRTLINK intmax_t __F_NAME(strtoimax,wcstoimax)( const CHAR_TYPE *nptr, CHAR_TYPE **endptr, int base ) +{ + return( _stoll( nptr, endptr, base, 1 ) ); +} diff --git a/programs/develop/open watcom/trunk/clib/src/chipa32.asm b/programs/develop/open watcom/trunk/clib/fpu/chipa32.asm similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/chipa32.asm rename to programs/develop/open watcom/trunk/clib/fpu/chipa32.asm diff --git a/programs/develop/open watcom/trunk/clib/src/chipd32.asm b/programs/develop/open watcom/trunk/clib/fpu/chipd32.asm similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/chipd32.asm rename to programs/develop/open watcom/trunk/clib/fpu/chipd32.asm diff --git a/programs/develop/open watcom/trunk/clib/src/chipr32.asm b/programs/develop/open watcom/trunk/clib/fpu/chipr32.asm similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/chipr32.asm rename to programs/develop/open watcom/trunk/clib/fpu/chipr32.asm diff --git a/programs/develop/open watcom/trunk/clib/src/chipt32.asm b/programs/develop/open watcom/trunk/clib/fpu/chipt32.asm similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/chipt32.asm rename to programs/develop/open watcom/trunk/clib/fpu/chipt32.asm diff --git a/programs/develop/open watcom/trunk/clib/fpu/clearfpe.h b/programs/develop/open watcom/trunk/clib/fpu/clearfpe.h new file mode 100644 index 0000000000..94e803b9a9 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/fpu/clearfpe.h @@ -0,0 +1,32 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: prototype for _ClearFPE clib internal function +* +****************************************************************************/ + + +extern void _ClearFPE( void ); diff --git a/programs/develop/open watcom/trunk/clib/fpu/cntrl87.c b/programs/develop/open watcom/trunk/clib/fpu/cntrl87.c new file mode 100644 index 0000000000..8974b1ff6c --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/fpu/cntrl87.c @@ -0,0 +1,149 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include +#include +#include "rtdata.h" + +extern void __fstcw(); +extern void __fldcw(); + +#if defined(__WINDOWS__) && !defined(__WINDOWS_386__) + +extern void __far _fpmath(); +#pragma aux _fpmath "__fpmath"; + +void __win87em_fldcw(unsigned int); +#pragma aux __win87em_fldcw = \ + "push bx" \ + "mov bx, 4h" \ + "call far ptr _fpmath" \ + "pop bx" \ + parm [ax] + +unsigned int __win87em_fstcw(void); +#pragma aux __win87em_fstcw = \ + "push bx" \ + "mov bx, 5h" \ + "call far ptr _fpmath" \ + "pop bx" \ + value [ax] + +#elif defined( __DOS_086__ ) + +extern unsigned char __dos87real; +#pragma aux __dos87real "*"; + +extern unsigned short __dos87emucall; +#pragma aux __dos87emucall "*"; + +void _WCI86NEAR __dos_emu_fldcw( unsigned short * ); +#pragma aux __dos_emu_fldcw "*" = \ + "mov ax,3" \ + "call __dos87emucall" \ + parm [bx]; + +void _WCI86NEAR __dos_emu_fstcw( unsigned short * ); +#pragma aux __dos_emu_fstcw "*" = \ + "mov ax,4" \ + "call __dos87emucall" \ + parm [bx]; + +#endif + +#if defined(__386__) +#pragma aux __fstcw = \ + "fstcw ss:[edi]" \ + "fwait" \ + parm caller [edi]; +#pragma aux __fldcw = \ + "fldcw ss:[edi]" \ + parm caller [edi]; +#else +#pragma aux __fstcw = \ + "xchg ax,bp" \ + "fstcw [bp]" \ + "fwait" \ + "xchg ax,bp" \ + parm caller [ax]; +#pragma aux __fldcw = \ + "xchg ax,bp" \ + "fldcw [bp]" \ + "xchg ax,bp" \ + parm caller [ax]; +#endif + +_WCRTLINK unsigned _control87( unsigned new, unsigned mask ) +/**********************************************************/ +{ + auto short unsigned int control_word; + + control_word = 0; + if( _RWD_8087 ) { +#if defined(__WINDOWS__) && !defined(__WINDOWS_386__) + __fstcw( &control_word ); + control_word = __win87em_fstcw(); + if( mask != 0 ) { + control_word = (control_word & ~mask) | (new & mask); + __fldcw( &control_word ); + __fstcw( &control_word ); /* 17-sep-91 */ + __win87em_fldcw(control_word); + } +#elif defined( __DOS_086__ ) + if( __dos87real ) { + __fstcw( &control_word ); + if( mask != 0 ) { + control_word = (control_word & ~mask) | (new & mask); + __fldcw( &control_word ); + __fstcw( &control_word ); + } + } + if( __dos87emucall ) { + __dos_emu_fstcw( &control_word ); + if( mask != 0 ) { + control_word = (control_word & ~mask) | (new & mask); + __dos_emu_fldcw( &control_word ); + __dos_emu_fstcw( &control_word ); + } + } +#else + __fstcw( &control_word ); + if( mask != 0 ) { + control_word = (control_word & ~mask) | (new & mask); + __fldcw( &control_word ); + __fstcw( &control_word ); /* 17-sep-91 */ + } +#endif + } + return( control_word ); +} diff --git a/programs/develop/open watcom/trunk/clib/fpu/cntrlfp.c b/programs/develop/open watcom/trunk/clib/fpu/cntrlfp.c new file mode 100644 index 0000000000..903ae33435 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/fpu/cntrlfp.c @@ -0,0 +1,132 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include +#include +#include "rtdata.h" + +#if defined(__AXP__) + +/* + * FPCR Trap Disable Flags + */ +#define FPCR_INEXACT 0x40000000 +#define FPCR_UNDERFLOW 0x20000000 +#define FPCR_OVERFLOW 0x00080000 +#define FPCR_ZERODIVIDE 0x00040000 +#define FPCR_INVALID 0x00020000 + +extern unsigned long _GetFPCR(void); +extern void _SetFPCR(unsigned long); + +static unsigned int MapToCW(unsigned long fpcr) +{ + unsigned int cw; + + /* + * The rounding bits are identical but in the highword of the fpcr. + */ + cw = (fpcr >> 16) & ~(_MCW_RC); + + if (fpcr & FPCR_INEXACT) + cw &= ~_EM_INEXACT; + + if (fpcr & FPCR_ZERODIVIDE) + cw &= ~_EM_ZERODIVIDE; + + if (fpcr & FPCR_OVERFLOW) + cw &= ~_EM_OVERFLOW; + + if (fpcr & FPCR_UNDERFLOW) + cw &= ~_EM_UNDERFLOW; + + if (fpcr & FPCR_INVALID) + cw &= ~_EM_INVALID; + + return cw; +} /* MapToCW() */ + + +static unsigned long MapFromCW(unsigned int cw) +{ + unsigned long fpcr = 0L; + + /* + * The rounding bits are identical but in the highword of the fpcr. + */ + fpcr = (cw & ~_MCW_RC) << 16; + + if (!(cw & _EM_INEXACT)) + fpcr |= FPCR_INEXACT; + + if (!(cw & _EM_INVALID)) + fpcr |= FPCR_INVALID; + + if (!(cw & _EM_ZERODIVIDE)) + fpcr |= FPCR_ZERODIVIDE; + + if (!(cw & _EM_OVERFLOW)) + fpcr |= FPCR_OVERFLOW; + + if (!(cw & _EM_UNDERFLOW)) + fpcr |= FPCR_UNDERFLOW; + + return fpcr; +} /* MapFromCW() */ +#endif + + +_WCRTLINK unsigned _controlfp(unsigned new, unsigned mask) +{ +#if defined(_M_IX86) + return _control87(new, mask); /* JBS 99/09/16 */ +#elif defined(__AXP__) + unsigned int cw; + + cw = MapToCW(_GetFPCR()); + + if (mask) + { + cw = (cw & ~mask) | (new & mask); + _SetFPCR(MapFromCW(cw)); + } + + return cw; +#elif defined(__PPC__) + // No idea yet + return( 0 ); +#elif defined(__MIPS__) + // No idea yet either + return( 0 ); +#endif +} /* _controlfp() */ diff --git a/programs/develop/open watcom/trunk/clib/fpu/fclex387.c b/programs/develop/open watcom/trunk/clib/fpu/fclex387.c new file mode 100644 index 0000000000..2e20c69af9 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/fpu/fclex387.c @@ -0,0 +1,43 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "rtdata.h" +#include "variety.h" +#include "clearfpe.h" + +extern void __ClearFPE(void); +#pragma aux __ClearFPE = "fnclex" + +void _ClearFPE( void ) +{ + __ClearFPE(); +} /* _ClearFPE() */ diff --git a/programs/develop/open watcom/trunk/clib/fpu/ini87386.asm b/programs/develop/open watcom/trunk/clib/fpu/ini87386.asm new file mode 100644 index 0000000000..80b1b0b02d --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/fpu/ini87386.asm @@ -0,0 +1,68 @@ +;***************************************************************************** +;* +;* Open Watcom Project +;* +;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +;* +;* ======================================================================== +;* +;* This file contains Original Code and/or Modifications of Original +;* Code as defined in and that are subject to the Sybase Open Watcom +;* Public License version 1.0 (the 'License'). You may not use this file +;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +;* provided with the Original Code and Modifications, and is also +;* available at www.sybase.com/developer/opensource. +;* +;* The Original Code and all software distributed under the License are +;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +;* NON-INFRINGEMENT. Please see the License for the specific language +;* governing rights and limitations under the License. +;* +;* ======================================================================== +;* +;* Description: routine for checking FPU type +;* +;***************************************************************************** + + +include mdef.inc + + modstart init8087 + + xdefp __x87id + +__x87id proc + sub EAX,EAX + push EAX ; allocate space for status word + finit ; use default infinity mode + fstcw word ptr [ESP] ; save control word + fwait + pop EAX + mov AL,0 + cmp AH,3 + jnz nox87 + push EAX ; allocate space for status word + fld1 ; generate infinity by + fldz ; dividing 1 by 0 + fdiv ; ... + fld st ; form negative infinity + fchs ; ... + fcompp ; compare +/- infinity + fstsw word ptr [ESP] ; equal for 87/287 + fwait ; wait fstsw to complete + pop EAX ; get NDP status word + mov AL,2 ; assume 80287 + sahf ; store condition bits in flags + jz not387 ; it's 287 if infinities equal + mov AL,3 ; indicate 80387 +not387: finit ; re-initialize the 8087 +nox87: mov AH,0 + ret ; return +__x87id endp + + endmod + end diff --git a/programs/develop/open watcom/trunk/clib/src/chipbug.c b/programs/develop/open watcom/trunk/clib/intel/chipbug.c similarity index 99% rename from programs/develop/open watcom/trunk/clib/src/chipbug.c rename to programs/develop/open watcom/trunk/clib/intel/chipbug.c index dff2fcb3ee..28e3b41cd6 100644 --- a/programs/develop/open watcom/trunk/clib/src/chipbug.c +++ b/programs/develop/open watcom/trunk/clib/intel/chipbug.c @@ -30,7 +30,7 @@ #include "variety.h" -#include "rtinit.h" +#include #include "rtdata.h" extern unsigned _WCNEAR __chipbug; diff --git a/programs/develop/open watcom/trunk/clib/src/chipvar.asm b/programs/develop/open watcom/trunk/clib/intel/chipvar.asm similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/chipvar.asm rename to programs/develop/open watcom/trunk/clib/intel/chipvar.asm diff --git a/programs/develop/open watcom/trunk/clib/intel/grabfp87.c b/programs/develop/open watcom/trunk/clib/intel/grabfp87.c new file mode 100644 index 0000000000..29be8e04bc --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/intel/grabfp87.c @@ -0,0 +1,59 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +//#include +#include "rtdata.h" + +extern void __Init_FPE_handler(); +extern void __Fini_FPE_handler(); +#ifdef __DOS_386__ +extern int __FPEHandlerStart_; +extern int __FPEHandlerEnd_; +extern int __DPMI_hosted(void); +#endif + +void __GrabFP87( void ) +{ +#ifndef __WINDOWS__ + if( _RWD_FPE_handler_exit != __Fini_FPE_handler ) { +#ifdef __DOS_386__ + if( !_IsPharLap() && ( __DPMI_hosted() == 1 )) { + DPMILockLinearRegion((long)&__FPEHandlerStart_, + ((long)&__FPEHandlerEnd_ - (long)&__FPEHandlerStart_)); + } +#endif + __Init_FPE_handler(); + _RWD_FPE_handler_exit = __Fini_FPE_handler; + } +#endif +} diff --git a/programs/develop/open watcom/trunk/clib/intel/i64ts386.asm b/programs/develop/open watcom/trunk/clib/intel/i64ts386.asm new file mode 100644 index 0000000000..a3ced0dc6b --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/intel/i64ts386.asm @@ -0,0 +1,265 @@ +;***************************************************************************** +;* +;* Open Watcom Project +;* +;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +;* +;* ======================================================================== +;* +;* This file contains Original Code and/or Modifications of Original +;* Code as defined in and that are subject to the Sybase Open Watcom +;* Public License version 1.0 (the 'License'). You may not use this file +;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +;* provided with the Original Code and Modifications, and is also +;* available at www.sybase.com/developer/opensource. +;* +;* The Original Code and all software distributed under the License are +;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +;* NON-INFRINGEMENT. Please see the License for the specific language +;* governing rights and limitations under the License. +;* +;* ======================================================================== +;* +;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +;* DESCRIBE IT HERE! +;* +;***************************************************************************** + + +include mdef.inc +include struct.inc + + modstart i64tos + +; +; +; int _CmpBigInt( int sigdigits, int near *bigint ) +; EAX EDX +; + xdefp __CmpBigInt + xdefp __Rnd2Int + xdefp __Bin2String + + defpe __CmpBigInt + push EDI ; save EDI + push ECX ; save ECX + call getpow10 ; get address of Power of 10 table + inc EAX ; ++sigdigits + lea EDI,[EDI+EAX*8] ; point to Pow10Table[sigdigits+1] + mov ECX,[EDX] ; get 64-bit integer + mov EDX,4[EDX] ; ...(high part) + sub EAX,EAX ; set adjustment to 0 + _loop ; loop + cmp EDX,cs:[EDI] ; - check against 10**k + _if e ; - if high parts equal + cmp ECX,cs:4[EDI] ; - - compare low part + _endif ; - endif + _quif b ; - quit if num < 10**k + add EDI,8 ; - set pointer to 10**(k+1) + inc EAX ; - increment adjustment word + _endloop ; endloop + sub EDI,8 ; point at 10**(k-1) + _loop ; loop + cmp EDX,cs:[EDI] ; - check against 10**k + _if e ; - if high parts equal + cmp ECX,cs:4[EDI] ; - - compare low part + _endif ; - endif + _quif nb ; - quit if num >= 10**(k-1) + sub EDI,8 ; - set pointer to 10**(k-2) + dec EAX ; - increment adjustment word + _endloop ; endloop + pop ECX ; restore ECX + pop EDI ; restore EDI + ret ; return to caller + endproc __CmpBigInt + +;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] +;[] +;[] Rnd2int rounds the real pointed to by EAX to a 64 bit integer. +;[] +;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] +; void _Rnd2Int( double near *realnum, int near *bigint ) +; EAX EDX +; + defpe __Rnd2Int + push EBX ; save registers + push ECX ; save ECX + push EDX ; save EDX + push EBP ; save EBP + push ESI ; save ESI + push EDX ; save address of bigint array + mov EBP,EAX ; get address of realnum + mov ECX,[EBP] ; load the number + mov EBX,4[EBP] ; . . . + mov EBP,EBX ; save high word + and EBP,0FFF00000h ; isolate exponent in EBP + xor EBX,EBP ; isolate mantissa in EDX + xor EBX,00100000h ; turn on implied '1' bit in mantissa + shr EBP,20 ; move exponent to bottom part of word + sub EBP,0433h ; calculate difference from 2**53 + _if ne ; if not already the right size + _if a ; - if too big + _loop ; - - loop + shl ECX,1 ; - - - shift real left by one + rcl EBX,1 ; - - - . . . + dec EBP ; - - - decrement count + _until e ; - - until count = 0 + _else ; - else + sub EAX,EAX ; - - clear remainder + sub ESI,ESI ; - - clear remainder bit bucket + _loop ; - - loop + shr EBX,1 ; - - - shift real right by one + rcr ECX,1 ; - - - . . . + rcr EAX,1 ; - - - save remainder + adc ESI,ESI ; - - - remember if any bits fell off end + inc EBP ; - - - increment count + _until e ; - - until e + _guess rup ; - - do we have to round up? + cmp EAX,80000000h;- - - compare remainder with .5000000 + _quif b,rup ; - - - kick out if less than .5 + _if e ; - - - magical stuff if looks like a .5 + or ESI,ESI ; - - - any bits dropped off the bottom + _if e ; - - - if not + test ECX,1 ; - - - - - is bottom digit even? + _quif e,rup ; - - - - - kick out if it is + _endif ; - - - - endif + _endif ; - - - endif + add ECX,01 ; - - - round up the number + adc EBX,00 ; - - - . . . + _endguess ; - - endguess + _endif ; - endif + _endif ; endif + pop EBP ; get address of bigint array + mov [EBP],ECX ; store 64-bit integer + mov 4[EBP],EBX ; . . . + pop ESI ; restore ESI + pop EBP ; restore EBP + pop EDX ; restore EDX + pop ECX ; restore ECX + pop EBX ; restore EBX + ret ; return + endproc __Rnd2Int + +;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] +;[] +;[] Bin2string converts a binary integer into a string +;[] +;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] +; void _Bin2String( +; int near *bigint, /* EAX */ +; char near *bufptr, /* EDX */ +; int sigdigits ) /* EBX */ +; + defpe __Bin2String + push EBP ; save EBP + push EDI ; save EDI + push ECX ; save ECX + push EBX ; save EBX + mov EBP,EAX ; get address of bigint array + mov ECX,[EBP] ; get 64-bit integer + mov EAX,4[EBP] ; . . . + mov EBP,EDX ; get buffer pointer + add EBP,EBX ; point to end of buffer + mov byte ptr [EBP],0; put in null character +; +; input: +; EAX:ECX - 64-bit integer +; EBP - pointer to buffer for digits +; EBX - digit count + + push EAX ; save high word of quotient + _loop ; loop + pop EAX ; - restore high word of quotient + mov EDI,10000 ; - divisor is 10000 + sub EDX,EDX ; - zero high word + or EAX,EAX ; - check high word + jne div1 ; - do all divides + or ECX,ECX ; - check low order word + jne div2 ; - skip first divide + push EAX ; - save high word of quotient + jmp short div5 ; - result is 0 +div1: div EDI ; - divide EAX:ECX by 10000 +div2: xchg ECX,EAX ; - ... + div EDI ; - ... + +; quotient is in ECX:EAX +; remainder is in EDX + + xchg ECX,EAX ; - move quotient to EAX:ECX + push EAX ; - save high word of quotient + mov EAX,EDX ; - get remainder + mov DL,100 ; - get divisor + div DL ; - split remainder into 2 parts + mov DL,AH ; - save low order part + mov AH,0 ; - zero + aam ; - split top part into 2 digits + xchg EDX,EAX ; - DH, DL gets top 2 digits, AX gets low part + mov AH,0 ; - zero + aam ; - split low part into 2 digits +div5: add AX,3030h ; - make ASCII digits + add DX,3030h ; - ... + sub EBP,4 ; - move back 4 + mov 3[EBP],AL ; - put low order digit in buffer + dec EBX ; - decrement digit count + _quif e ; - quit if done + mov 2[EBP],AH ; - ... + dec EBX ; - decrement digit count + _quif e ; - quit if done + mov 1[EBP],DL ; - ... + dec EBX ; - decrement digit count + _quif e ; - quit if done + mov [EBP],DH ; - put high order digit in buffer + dec EBX ; - decrement digit count + _until e ; until done + + pop EAX ; remove high word of quotient + pop EBX ; restore EBX + pop ECX ; restore ECX + pop EDI ; restore EDI + pop EBP ; restore EBP + ret ; return + endproc __Bin2String + +;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> +;<> <> +;<> 64-bit integer powers of 10 table <> +;<> <> +;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> +getpow10 proc near ; get address of powers of 10 table + call pow10end ; call around the table +pow10table: ; powers of 10 table + dd 000000000h,000000000h ; 0 + dd 000000000h,000000001h ; 10**00 + dd 000000000h,00000000ah ; 10**01 + dd 000000000h,000000064h ; 10**02 + dd 000000000h,0000003e8h ; 10**03 + dd 000000000h,000002710h ; 10**04 + dd 000000000h,0000186a0h ; 10**05 + dd 000000000h,0000f4240h ; 10**06 + dd 000000000h,000989680h ; 10**07 + dd 000000000h,005f5e100h ; 10**08 + dd 000000000h,03b9aca00h ; 10**09 + dd 000000002h,0540be400h ; 10**10 + dd 000000017h,04876e800h ; 10**11 + dd 0000000e8h,0d4a51000h ; 10**12 + dd 000000918h,04e72a000h ; 10**13 + dd 000005af3h,0107a4000h ; 10**14 + dd 000038d7eh,0a4c68000h ; 10**15 + dd 0002386f2h,06fc10000h ; 10**16 + dd 001634578h,05d8a0000h ; 10**17 + dd 00de0b6b3h,0a7640000h ; 10**18 + dd 08ac72304h,089e80000h ; 10**19 + dd 0ffffffffh,0ffffffffh ; MAX + +pow10end proc near + pop EDI ; get address of table + ret ; return + endproc pow10end + endproc getpow10 + + endmod + end diff --git a/programs/develop/open watcom/trunk/clib/intel/save8087.c b/programs/develop/open watcom/trunk/clib/intel/save8087.c new file mode 100644 index 0000000000..f68f51be14 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/intel/save8087.c @@ -0,0 +1,40 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include "87state.h" +#include "rtdata.h" + +static void _do_nothing( _87state *st ) {} + +void (*_RWD_Save8087)(_87state *) = _do_nothing; +void (*_RWD_Rest8087)(_87state *) = _do_nothing; diff --git a/programs/develop/open watcom/trunk/clib/intel/segread.c b/programs/develop/open watcom/trunk/clib/intel/segread.c new file mode 100644 index 0000000000..ee9bb98a7e --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/intel/segread.c @@ -0,0 +1,60 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include + +extern unsigned short _CS(), _DS(), _ES(), _SS(); + +#pragma aux _CS = 0x8C 0xC8 /* mov ax,cs */ value [ax]; +#pragma aux _DS = 0x8C 0xD8 /* mov ax,ds */ value [ax]; +#pragma aux _ES = 0x8C 0xC0 /* mov ax,es */ value [ax]; +#pragma aux _SS = 0x8C 0xD0 /* mov ax,ss */ value [ax]; +#if defined(__386__) +extern unsigned short _FS(), _GS(); +#pragma aux _FS = 0x8C 0xE0 /* mov ax,fs */ value [ax]; +#pragma aux _GS = 0x8C 0xE8 /* mov ax,gs */ value [ax]; +#endif + + +_WCRTLINK void segread( struct SREGS *segregs ) + { + __ptr_check( segregs, 0 ); + segregs->cs = _CS(); + segregs->ds = _DS(); + segregs->es = _ES(); + segregs->ss = _SS(); +#if defined(__386__) + segregs->fs = _FS(); + segregs->gs = _GS(); +#endif + } diff --git a/programs/develop/open watcom/trunk/clib/src/abs.c b/programs/develop/open watcom/trunk/clib/math/abs.c similarity index 100% rename from programs/develop/open watcom/trunk/clib/src/abs.c rename to programs/develop/open watcom/trunk/clib/math/abs.c diff --git a/programs/develop/open watcom/trunk/clib/math/hugeval.c b/programs/develop/open watcom/trunk/clib/math/hugeval.c new file mode 100644 index 0000000000..b254884823 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/hugeval.c @@ -0,0 +1,34 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +_WCRTLINKD unsigned short const _HUGEDATA _HugeValue[] = { 0x0000, 0x0000, 0x0000, 0x7ff0 }; diff --git a/programs/develop/open watcom/trunk/clib/math/hvalptr.c b/programs/develop/open watcom/trunk/clib/math/hvalptr.c new file mode 100644 index 0000000000..8d25ca6fbc --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/hvalptr.c @@ -0,0 +1,39 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#include +#include "rtdata.h" + +_WCRTLINK const double (*__get_HugeValue_ptr()) { + return &_HugeValue; +} diff --git a/programs/develop/open watcom/trunk/clib/math/imaxabs.c b/programs/develop/open watcom/trunk/clib/math/imaxabs.c new file mode 100644 index 0000000000..913b1773af --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/imaxabs.c @@ -0,0 +1,42 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation if imaxabs(). +* +****************************************************************************/ + + +#include "variety.h" +#include + + +_WCRTLINK intmax_t imaxabs( intmax_t j ) +/**************************************/ +{ + if( j < 0 ) + j = - j; + return( j ); +} diff --git a/programs/develop/open watcom/trunk/clib/math/imaxdiv.c b/programs/develop/open watcom/trunk/clib/math/imaxdiv.c new file mode 100644 index 0000000000..d39394fe0e --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/imaxdiv.c @@ -0,0 +1,44 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of imaxdiv(). +* +****************************************************************************/ + + +#include "variety.h" +#include + + +_WCRTLINK imaxdiv_t imaxdiv( intmax_t numer, intmax_t denom ) +/*************************************************************/ +{ + imaxdiv_t result; + + result.quot = numer / denom; + result.rem = numer % denom; + return( result ); +} diff --git a/programs/develop/open watcom/trunk/clib/math/labs.c b/programs/develop/open watcom/trunk/clib/math/labs.c new file mode 100644 index 0000000000..99c3987d77 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/labs.c @@ -0,0 +1,43 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of labs(). +* +****************************************************************************/ + + +#undef __INLINE_FUNCTIONS__ +#include "variety.h" +#include + + +_WCRTLINK long int labs( long int i ) +/***********************************/ +{ + if( i < 0 ) + i = - i; + return( i ); +} diff --git a/programs/develop/open watcom/trunk/clib/math/llabs.c b/programs/develop/open watcom/trunk/clib/math/llabs.c new file mode 100644 index 0000000000..f0d272a91e --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/llabs.c @@ -0,0 +1,42 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of llabs(). +* +****************************************************************************/ + + +#include "variety.h" +#include + + +_WCRTLINK long long int llabs( long long int i ) +/**********************************************/ +{ + if( i < 0 ) + i = - i; + return( i ); +} diff --git a/programs/develop/open watcom/trunk/clib/math/max.c b/programs/develop/open watcom/trunk/clib/math/max.c new file mode 100644 index 0000000000..289bc28dcd --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/max.c @@ -0,0 +1,40 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of max(). +* +****************************************************************************/ + + +#include "variety.h" +#undef max + + +_WCRTLINK int max( int a, int b ) +/*******************************/ +{ + return( ( a > b ) ? a : b ); +} diff --git a/programs/develop/open watcom/trunk/clib/math/min.c b/programs/develop/open watcom/trunk/clib/math/min.c new file mode 100644 index 0000000000..840a7cfb3d --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/min.c @@ -0,0 +1,40 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of min(). +* +****************************************************************************/ + + +#include "variety.h" +#undef min + + +_WCRTLINK int min( int a, int b ) +/*******************************/ +{ + return( ( a < b ) ? a : b ); +} diff --git a/programs/develop/open watcom/trunk/clib/math/rand.c b/programs/develop/open watcom/trunk/clib/math/rand.c new file mode 100644 index 0000000000..c27e503d3b --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/rand.c @@ -0,0 +1,68 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: Implementation of rand() and srand(). +* +****************************************************************************/ + + +#include "variety.h" +#include +#include "randnext.h" +#include "rtdata.h" + + +static unsigned long *initrandnext( void ) +{ + _INITRANDNEXT( RETURN_ARG( unsigned long *, NULL ) ); + return( (unsigned long *)&_RWD_randnext ); +} + + +_WCRTLINK int rand( void ) +/************************/ +{ + unsigned long *randptr; + + randptr = initrandnext(); + if( randptr == NULL ) { + return( 0 ); + } + *randptr = *randptr * 1103515245 + 12345; + return( (int)( (*randptr >> 16) & 0x7FFF ) ); +} + + +_WCRTLINK void srand( unsigned int seed ) +/***************************************/ +{ + unsigned long *randptr; + + randptr = initrandnext(); + if( randptr != NULL ) { + *randptr = seed; + } +} diff --git a/programs/develop/open watcom/trunk/clib/math/randnext.h b/programs/develop/open watcom/trunk/clib/math/randnext.h new file mode 100644 index 0000000000..3c54d32710 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/math/randnext.h @@ -0,0 +1,59 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE +* DESCRIBE IT HERE! +* +****************************************************************************/ + + +#include "variety.h" +#define _INITRANDNEXT(p) +#if defined(__OS2__) || defined(__NT__) || defined(__NETWARE__) + // OS/2, NT and NETWARE versions are identical + // note that NETWARE is always multi-threaded + #if defined(__SW_BM) + + #include "thread.h" + #if 0 + // who ever allocates the thread_data should initialize __randnext + if( __THREADDATAPTR->__randnextinit == 0 ) { \ + __THREADDATAPTR->__randnextinit = 1; \ + __THREADDATAPTR->__randnext = 1; \ + } + #endif + #define _RANDNEXT (__THREADDATAPTR->__randnext) + + #else + + static unsigned long int next = 1; + #define _RANDNEXT next + + #endif +#else + static unsigned long int next = 1; + #define _RANDNEXT next +#endif diff --git a/programs/develop/open watcom/trunk/clib/src/87state.h b/programs/develop/open watcom/trunk/clib/src/87state.h new file mode 100644 index 0000000000..b164a5e695 --- /dev/null +++ b/programs/develop/open watcom/trunk/clib/src/87state.h @@ -0,0 +1,45 @@ +/**************************************************************************** +* +* Open Watcom Project +* +* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. +* +* ======================================================================== +* +* This file contains Original Code and/or Modifications of Original +* Code as defined in and that are subject to the Sybase Open Watcom +* Public License version 1.0 (the 'License'). You may not use this file +* except in compliance with the License. BY USING THIS FILE YOU AGREE TO +* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is +* provided with the Original Code and Modifications, and is also +* available at www.sybase.com/developer/opensource. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM +* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR +* NON-INFRINGEMENT. Please see the License for the specific language +* governing rights and limitations under the License. +* +* ======================================================================== +* +* Description: prototype for 8087 save/restore state functions and data +* +****************************************************************************/ + + +#if defined(_M_IX86) + +typedef struct _87state { /* 80x87 save area */ +#if defined( __386__ ) + char data[108]; /* 32-bit save area size */ +#else + char data[94]; /* 16-bit save area size */ +#endif +} _87state; + +extern void (*__Save8087)(_87state *); +extern void (*__Rest8087)(_87state *); + +#endif