150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Decimal Context module */ 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Copyright (c) IBM Corporation, 2000-2010. All rights reserved. */ 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* This software is made available under the terms of the */ 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ICU License -- ICU 1.8.1 and later. */ 850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* The description and User's Guide ("The decNumber C Library") for */ 1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* this software is called decNumber.pdf. This document is */ 1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* available, together with arithmetic and format specifications, */ 1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* testcases, and Web links, on the General Decimal Arithmetic page. */ 1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Please send comments, suggestions, and corrections to the author: */ 1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* mfc@uk.ibm.com */ 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Mike Cowlishaw, IBM Fellow */ 1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK */ 1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* This module comprises the routines for handling arithmetic */ 2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context structures. */ 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <string.h> /* for strcmp */ 2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <stdio.h> /* for printf if DECCHECK */ 2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "decContext.h" /* context and base types */ 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "decNumberLocal.h" /* decNumber local types, etc. */ 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* compile-time endian tester [assumes sizeof(Int)>1] */ 2950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const Int mfcone=1; /* constant 1 */ 3050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const Flag *mfctop=(Flag *)&mfcone; /* -> top byte */ 3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define LITEND *mfctop /* named flag; 1=little-endian */ 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* round-for-reround digits */ 3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst uByte DECSTICKYTAB[10]={1,1,2,3,4,6,6,7,8,9}; /* used if sticky */ 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Powers of ten (powers[n]==10**n, 0<=n<=9) */ 4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst uInt DECPOWERS[10]={1, 10, 100, 1000, 10000, 100000, 1000000, 4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10000000, 100000000, 1000000000}; 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextClearStatus -- clear bits in current status */ 4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be queried */ 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* mask indicates the bits to be cleared (the status bit that */ 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* corresponds to each 1 bit in the mask is cleared) */ 5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns context */ 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextClearStatus(decContext *context, uInt mask) { 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status&=~mask; 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context; 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextClearStatus */ 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextDefault -- initialize a context structure */ 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the structure to be initialized */ 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* kind selects the required set of default values, one of: */ 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* DEC_INIT_BASE -- select ANSI X3-274 defaults */ 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* DEC_INIT_DECIMAL32 -- select IEEE 754 defaults, 32-bit */ 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* DEC_INIT_DECIMAL64 -- select IEEE 754 defaults, 64-bit */ 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* DEC_INIT_DECIMAL128 -- select IEEE 754 defaults, 128-bit */ 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* For any other value a valid context is returned, but with */ 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Invalid_operation set in the status field. */ 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns a context structure with the appropriate initial values. */ 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextDefault(decContext *context, Int kind) { 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* set defaults... */ 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->digits=9; /* 9 digits */ 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emax=DEC_MAX_EMAX; /* 9-digit exponents */ 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emin=DEC_MIN_EMIN; /* .. balanced */ 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->round=DEC_ROUND_HALF_UP; /* 0.5 rises */ 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->traps=DEC_Errors; /* all but informational */ 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status=0; /* cleared */ 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->clamp=0; /* no clamping */ 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->extended=0; /* cleared */ 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho switch (kind) { 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case DEC_INIT_BASE: 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* [use defaults] */ 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case DEC_INIT_DECIMAL32: 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->digits=7; /* digits */ 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emax=96; /* Emax */ 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emin=-95; /* Emin */ 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->round=DEC_ROUND_HALF_EVEN; /* 0.5 to nearest even */ 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->traps=0; /* no traps set */ 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->clamp=1; /* clamp exponents */ 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->extended=1; /* set */ 9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case DEC_INIT_DECIMAL64: 10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->digits=16; /* digits */ 10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emax=384; /* Emax */ 10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emin=-383; /* Emin */ 10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->round=DEC_ROUND_HALF_EVEN; /* 0.5 to nearest even */ 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->traps=0; /* no traps set */ 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->clamp=1; /* clamp exponents */ 10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->extended=1; /* set */ 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case DEC_INIT_DECIMAL128: 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->digits=34; /* digits */ 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emax=6144; /* Emax */ 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->emin=-6143; /* Emin */ 11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->round=DEC_ROUND_HALF_EVEN; /* 0.5 to nearest even */ 11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->traps=0; /* no traps set */ 11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->clamp=1; /* clamp exponents */ 11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->extended=1; /* set */ 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho default: /* invalid Kind */ 12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* use defaults, and .. */ 12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uprv_decContextSetStatus(context, DEC_Invalid_operation); /* trap */ 12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context;} /* decContextDefault */ 12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextGetRounding -- return current rounding mode */ 13150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 13250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be queried */ 13350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns the rounding mode */ 13450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 13550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 13650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 13750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI enum rounding U_EXPORT2 uprv_decContextGetRounding(decContext *context) { 13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context->round; 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextGetRounding */ 14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 14250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextGetStatus -- return current status */ 14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be queried */ 14550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns status */ 14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 14950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI uInt U_EXPORT2 uprv_decContextGetStatus(decContext *context) { 15050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context->status; 15150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextGetStatus */ 15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 15350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextRestoreStatus -- restore bits in current status */ 15550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 15650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 15750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* newstatus is the source for the bits to be restored */ 15850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* mask indicates the bits to be restored (the status bit that */ 15950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* corresponds to each 1 bit in the mask is set to the value of */ 16050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* the correspnding bit in newstatus) */ 16150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns context */ 16250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 16350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 16550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextRestoreStatus(decContext *context, 16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uInt newstatus, uInt mask) { 16750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status&=~mask; /* clear the selected bits */ 16850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status|=(mask&newstatus); /* or in the new bits */ 16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context; 17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextRestoreStatus */ 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextSaveStatus -- save bits in current status */ 17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be queried */ 17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* mask indicates the bits to be saved (the status bits that */ 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* correspond to each 1 bit in the mask are saved) */ 17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns the AND of the mask and the current status */ 17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 18050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 18250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI uInt U_EXPORT2 uprv_decContextSaveStatus(decContext *context, uInt mask) { 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context->status&mask; 18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextSaveStatus */ 18550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 18650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextSetRounding -- set current rounding mode */ 18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 19050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* newround is the value which will replace the current mode */ 19150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns context */ 19250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 19450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 19550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextSetRounding(decContext *context, 19650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho enum rounding newround) { 19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->round=newround; 19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context; 19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextSetRounding */ 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 20150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 20250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextSetStatus -- set status and raise trap if appropriate */ 20350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 20450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* status is the DEC_ exception code */ 20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns the context structure */ 20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Control may never return from this routine, if there is a signal */ 20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* handler and it takes a long jump. */ 21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 21150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextSetStatus(decContext *context, uInt status) { 21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status|=status; 21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status & context->traps) raise(SIGFPE); 21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context;} /* decContextSetStatus */ 21550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextSetStatusFromString -- set status from a string + trap */ 21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 21950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 22050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* string is a string exactly equal to one that might be returned */ 22150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* by decContextStatusToString */ 22250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* The status bit corresponding to the string is set, and a trap */ 22450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* is raised if appropriate. */ 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns the context structure, unless the string is equal to */ 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* DEC_Condition_MU or is not recognized. In these cases NULL is */ 22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returned. */ 22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 23050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextSetStatusFromString(decContext *context, 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *string) { 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_CS)==0) 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Conversion_syntax); 23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_DZ)==0) 23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Division_by_zero); 23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_DI)==0) 23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Division_impossible); 23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_DU)==0) 23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Division_undefined); 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IE)==0) 24150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Inexact); 24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IS)==0) 24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Insufficient_storage); 24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IC)==0) 24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Invalid_context); 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IO)==0) 24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Invalid_operation); 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_LD)==0) 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Lost_digits); 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_OV)==0) 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Overflow); 25450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_PA)==0) 25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Clamped); 25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_RO)==0) 25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Rounded); 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_SU)==0) 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Subnormal); 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_UN)==0) 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatus(context, DEC_Underflow); 26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_ZE)==0) 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context; 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return NULL; /* Multiple status, or unknown */ 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextSetStatusFromString */ 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextSetStatusFromStringQuiet -- set status from a string */ 26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* string is a string exactly equal to one that might be returned */ 27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* by decContextStatusToString */ 27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 27450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* The status bit corresponding to the string is set; no trap is */ 27550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* raised. */ 27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns the context structure, unless the string is equal to */ 27850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* DEC_Condition_MU or is not recognized. In these cases NULL is */ 27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returned. */ 28050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 28150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextSetStatusFromStringQuiet(decContext *context, 28250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *string) { 28350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_CS)==0) 28450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Conversion_syntax); 28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_DZ)==0) 28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Division_by_zero); 28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_DI)==0) 28850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Division_impossible); 28950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_DU)==0) 29050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Division_undefined); 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IE)==0) 29250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Inexact); 29350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IS)==0) 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Insufficient_storage); 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IC)==0) 29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Invalid_context); 29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_IO)==0) 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Invalid_operation); 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_LD)==0) 30150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Lost_digits); 30250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 30350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_OV)==0) 30450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Overflow); 30550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_PA)==0) 30650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Clamped); 30750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_RO)==0) 30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Rounded); 30950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_SU)==0) 31050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Subnormal); 31150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_UN)==0) 31250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uprv_decContextSetStatusQuiet(context, DEC_Underflow); 31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(string, DEC_Condition_ZE)==0) 31450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context; 31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return NULL; /* Multiple status, or unknown */ 31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextSetStatusFromStringQuiet */ 31750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextSetStatusQuiet -- set status without trap */ 32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 32150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* status is the DEC_ exception code */ 32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns the context structure */ 32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 32750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextSetStatusQuiet(decContext *context, uInt status) { 32850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status|=status; 32950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context;} /* decContextSetStatusQuiet */ 33050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 33250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextStatusToString -- convert status flags to a string */ 33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 33450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is a context with valid status field */ 33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns a constant string describing the condition. If multiple */ 33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* (or no) flags are set, a generic constant message is returned. */ 33850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 33950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI const char * U_EXPORT2 uprv_decContextStatusToString(const decContext *context) { 34050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Int status=context->status; 34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 34250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* test the five IEEE first, as some of the others are ambiguous when */ 34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* DECEXTFLAG=0 */ 34450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Invalid_operation ) return DEC_Condition_IO; 34550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Division_by_zero ) return DEC_Condition_DZ; 34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Overflow ) return DEC_Condition_OV; 34750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Underflow ) return DEC_Condition_UN; 34850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Inexact ) return DEC_Condition_IE; 34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 35050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Division_impossible ) return DEC_Condition_DI; 35150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Division_undefined ) return DEC_Condition_DU; 35250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Rounded ) return DEC_Condition_RO; 35350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Clamped ) return DEC_Condition_PA; 35450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Subnormal ) return DEC_Condition_SU; 35550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Conversion_syntax ) return DEC_Condition_CS; 35650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Insufficient_storage ) return DEC_Condition_IS; 35750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Invalid_context ) return DEC_Condition_IC; 35850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #if DECSUBSET 35950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==DEC_Lost_digits ) return DEC_Condition_LD; 36050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho #endif 36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (status==0 ) return DEC_Condition_ZE; 36250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return DEC_Condition_MU; /* Multiple errors */ 36350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextStatusToString */ 36450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 36550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 36650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextTestEndian -- test whether DECLITEND is set correctly */ 36750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 36850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* quiet is 1 to suppress message; 0 otherwise */ 36950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns 0 if DECLITEND is correct */ 37050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* 1 if DECLITEND is incorrect and should be 1 */ 37150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* -1 if DECLITEND is incorrect and should be 0 */ 37250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 37350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* A message is displayed if the return value is not 0 and quiet==0. */ 37450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 37550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 37650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 37750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI Int U_EXPORT2 uprv_decContextTestEndian(Flag quiet) { 37850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Int res=0; /* optimist */ 37950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uInt dle=(uInt)DECLITEND; /* unsign */ 38050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (dle>1) dle=1; /* ensure 0 or 1 */ 38150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 38250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (LITEND!=DECLITEND) { 38350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *adj; 38450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!quiet) { 38550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (LITEND) adj="little"; 38650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho else adj="big"; 38750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho printf("Warning: DECLITEND is set to %d, but this computer appears to be %s-endian\n", 38850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DECLITEND, adj); 38950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 39050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho res=(Int)LITEND-dle; 39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 39250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return res; 39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextTestEndian */ 39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextTestSavedStatus -- test bits in saved status */ 39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* oldstatus is the status word to be tested */ 39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* mask indicates the bits to be tested (the oldstatus bits that */ 40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* correspond to each 1 bit in the mask are tested) */ 40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns 1 if any of the tested bits are 1, or 0 otherwise */ 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI uInt U_EXPORT2 uprv_decContextTestSavedStatus(uInt oldstatus, uInt mask) { 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (oldstatus&mask)!=0; 40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextTestSavedStatus */ 40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextTestStatus -- test bits in current status */ 41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 41250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 41350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* mask indicates the bits to be tested (the status bits that */ 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* correspond to each 1 bit in the mask are tested) */ 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns 1 if any of the tested bits are 1, or 0 otherwise */ 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 41950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI uInt U_EXPORT2 uprv_decContextTestStatus(decContext *context, uInt mask) { 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (context->status&mask)!=0; 42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextTestStatus */ 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* decContextZeroStatus -- clear all status bits */ 42550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* context is the context structure to be updated */ 42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* returns context */ 42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* */ 42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* No error is possible. */ 43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* ------------------------------------------------------------------ */ 43150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI decContext * U_EXPORT2 uprv_decContextZeroStatus(decContext *context) { 43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->status=0; 43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return context; 43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } /* decContextZeroStatus */ 43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 436