X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f From: Kbwms AT aol DOT com Message-ID: <1eb.12bb4eae.2cdd71ca@aol.com> Date: Fri, 7 Nov 2003 17:08:10 EST Subject: Re: C99 Functions Under Development and Checkout To: djgpp-workers AT delorie DOT com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="part1_1eb.12bb4eae.2cdd71ca_boundary" X-Mailer: 8.0 for Windows sub 6021 Reply-To: djgpp-workers AT delorie DOT com --part1_1eb.12bb4eae.2cdd71ca_boundary Content-Type: multipart/alternative; boundary="part1_1eb.12bb4eae.2cdd71ca_alt_boundary" --part1_1eb.12bb4eae.2cdd71ca_alt_boundary Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Attached to this email is the C code that implements global variable math_errhandling and associated macros. Noted below are additions to math.h: #define MATH_ERRNO 1 #define MATH_ERREXCEPT 2 extern int math_errhandling; int get_math_errhandling (void); int set_math_errhandling (int); void set_errno (int); int raise_except (int); Here are the headers for the four functions: // ------------------------------------------------------------ // set_math_errhandling - Sets global variable math_errhandling // ------------------------------------------------------------ // --------------------------------------------------------------------- // get_math_errhandling - Returns value of math_errhandling for this run // --------------------------------------------------------------------- // ---------------------------------------------------- // set_errno - Sets global variable errno when required // ---------------------------------------------------- // ------------------------------------------------------------- // raise_except - Raises floating point exceptions when required // ------------------------------------------------------------- I have implemented this feature in 49 C functions. My thanks to all who contributed to this effort. Comments are welcome. Please look the code over and let me know whether there is a gotcha lurking. KB Williams --part1_1eb.12bb4eae.2cdd71ca_alt_boundary Content-Type: text/html; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable Attached to this email is the C code that implements glo= bal variable math_errhandling and associated macros.  Noted below are a= dditions to math.h:

#define MATH_ERRNO        1
#define MATH_ERREXCEPT 2
extern int math_errhandling;


int get_math_errhandling (void);
int set_math_errhandling (int);
void set_errno (int);
int raise_except (int);

Here are the headers for the four functions:

// ------------------------------------------------------------
// set_math_errhandling - Sets global variable math_errhandling
// ------------------------------------------------------------

// ---------------------------------------------------------------------
// get_math_errhandling - Returns value of math_errhandling for this run
// ---------------------------------------------------------------------

// ----------------------------------------------------
// set_errno - Sets global variable errno when required
// ----------------------------------------------------

// -------------------------------------------------------------
// raise_except - Raises floating point exceptions when required
// -------------------------------------------------------------


I have implemented this feature in 49 C functions.  My thanks to all wh= o contributed to this effort.


Comments are welcome.  Please look the code over and let me know whethe= r there is a gotcha lurking.


KB Williams
--part1_1eb.12bb4eae.2cdd71ca_alt_boundary-- --part1_1eb.12bb4eae.2cdd71ca_boundary Content-Type: text/plain; name="errhndlr.c" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="errhndlr.c" // ---------- // errhndlr.c // ---------- #include #include #include int=09 math_errhandling; static int LocalMathErrHandling =3D 0; // ------------------------------------------------------------ // set_math_errhandling - Sets global variable math-errhandling // ------------------------------------------------------------ int=09set_math_errhandling(int Value) { if (LocalMathErrHandling =3D=3D 0)=09=09// First Pass? { =09Value &=3D (MATH_ERRNO | MATH_ERREXCEPT);=09// Yes =09if (Value =3D=3D 0) =09{ =09 Value =3D MATH_ERRNO | MATH_ERREXCEPT; =09} =09LocalMathErrHandling =3D Value;=09=09// Set local value } math_errhandling =3D LocalMathErrHandling;=09// (Re)set global value return Value; } // --------------------------------------------------------------------- // get_math_errhandling - Returns value of math_errhandling for this run // --------------------------------------------------------------------- int=09get_math_errhandling(void) { if (LocalMathErrHandling =3D=3D 0)=09=09// First Pass? { =09set_math_errhandling(math_errhandling);=09// Yes. } return LocalMathErrHandling; } // ---------------------------------------------------- // set_errno - Sets global variable errno when required // ---------------------------------------------------- void=09set_errno(int Value) { if (LocalMathErrHandling =3D=3D 0)=09=09// First pass here? { =09set_math_errhandling(math_errhandling);=09// Yes - set control variable } math_errhandling =3D LocalMathErrHandling;=09// Reset control variable if (math_errhandling & MATH_ERRNO)=09=09// Set errno when required { =09errno =3D Value; } } // ------------------------------------------------------------- // raise_except - Raises floating point exceptions when required // ------------------------------------------------------------- int raise_except(int Value) { int Retval =3D -1;=09=09=09// Default Return Value if (LocalMathErrHandling =3D=3D 0)=09=09// First pass here? { =09set_math_errhandling(math_errhandling); // Yes - set control variable } math_errhandling =3D LocalMathErrHandling; // Reset control variable if (math_errhandling & MATH_ERREXCEPT) // Raise exception when requ= ired { =09Retval =3D feraiseexcept(Value); } return Retval; } --part1_1eb.12bb4eae.2cdd71ca_boundary--