Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

130 lines
5.1 KiB

/*
* Adobe Universal Font Library
*
* Copyright (c) 1996 Adobe Systems Inc.
* All Rights Reserved
*
* UFLMath
*
*
* $Header:
*/
#ifndef _H_UFLMath
#define _H_UFLMath
/*===============================================================================*
* Include files used by this interface *
*===============================================================================*/
#include "UFLCnfig.h"
#ifndef _H_UFLTypes
#include "UFLTypes.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Floating point arithmathics */
#ifdef WIN32KERNEL
typedef FLOATOBJ UFLFLOATOBJ;
typedef PFLOATOBJ PUFLFLOATOBJ;
#define UFLFLOATOBJ_SetFloat(pf,f) FLOATOBJ_SetFloat((pf),(f))
#define UFLFLOATOBJ_SetLong(pf,l) FLOATOBJ_SetLong((pf),(l))
#define UFLFLOATOBJ_GetFloat(pf) FLOATOBJ_GetFloat((pf))
#define UFLFLOATOBJ_GetLong(pf) FLOATOBJ_GetLong((pf))
#define UFLFLOATOBJ_AddFloat(pf,f) FLOATOBJ_AddFloat((pf),(f))
#define UFLFLOATOBJ_AddLong(pf,l) FLOATOBJ_AddLong((pf),(l))
#define UFLFLOATOBJ_Add(pf,pf1) FLOATOBJ_Add((pf),(pf1))
#define UFLFLOATOBJ_SubFloat(pf,f) FLOATOBJ_SubFloat((pf),(f))
#define UFLFLOATOBJ_SubLong(pf,l) FLOATOBJ_SubLong((pf),(l))
#define UFLFLOATOBJ_Sub(pf,pf1) FLOATOBJ_Sub((pf),(pf1))
#define UFLFLOATOBJ_MulFloat(pf,f) FLOATOBJ_MulFloat((pf),(f))
#define UFLFLOATOBJ_MulLong(pf,l) FLOATOBJ_MulLong((pf),(l))
#define UFLFLOATOBJ_Mul(pf,pf1) FLOATOBJ_Mul((pf),(pf1))
#define UFLFLOATOBJ_DivFloat(pf,f) FLOATOBJ_DivFloat((pf),(f))
#define UFLFLOATOBJ_DivLong(pf,l) FLOATOBJ_DivLong((pf),(l))
#define UFLFLOATOBJ_Div(pf,pf1) FLOATOBJ_Div((pf),(pf1))
#define UFLFLOATOBJ_Neg(pf) FLOATOBJ_Neg((pf))
#define UFLFLOATOBJ_EqualLong(pf,l) FLOATOBJ_EqualLong((pf),(l))
#define UFLFLOATOBJ_GreaterThanLong(pf,l) FLOATOBJ_GreaterThanLong((pf),(l))
#define UFLFLOATOBJ_LessThanLong(pf,l) FLOATOBJ_LessThanLong((pf),(l))
#define UFLFLOATOBJ_Equal(pf,pf1) FLOATOBJ_Equal((pf),(pf1))
#define UFLFLOATOBJ_GreaterThan(pf,pf1) FLOATOBJ_GreaterThan((pf),(pf1))
#define UFLFLOATOBJ_LessThan(pf,pf1) FLOATOBJ_LessThan((pf),(pf1))
#else
// any platform that has support for floats in the kernel
typedef float UFLFLOATOBJ;
typedef float *PUFLFLOATOBJ;
#define UFLFLOATOBJ_SetFloat(pf,f) {*(pf) = (float)(f); }
#define UFLFLOATOBJ_SetLong(pf,l) {*(pf) = (float)(l); }
#define UFLFLOATOBJ_GetFloat(pf) *((unsigned long *)pf)
#define UFLFLOATOBJ_GetLong(pf) (long)*(pf)
#define UFLFLOATOBJ_AddFloat(pf,f) {*(pf) += (float)(f); }
#define UFLFLOATOBJ_AddLong(pf,l) {*(pf) += (long)(l); }
#define UFLFLOATOBJ_Add(pf,pf1) {*(pf) += *(pf1); }
#define UFLFLOATOBJ_SubFloat(pf,f) {*(pf) -= (float)(f); }
#define UFLFLOATOBJ_SubLong(pf,l) {*(pf) -= (long)(l); }
#define UFLFLOATOBJ_Sub(pf,pf1) {*(pf) -= *(pf1); }
#define UFLFLOATOBJ_MulFloat(pf,f) {*(pf) *= (float)(f); }
#define UFLFLOATOBJ_MulLong(pf,l) {*(pf) *= (long)(l); }
#define UFLFLOATOBJ_Mul(pf,pf1) {*(pf) *= *(pf1); }
#define UFLFLOATOBJ_DivFloat(pf,f) {*(pf) /= (float)(f); }
#define UFLFLOATOBJ_DivLong(pf,l) {*(pf) /= (long)(l); }
#define UFLFLOATOBJ_Div(pf,pf1) {*(pf) /= *(pf1); }
#define UFLFLOATOBJ_Neg(pf) {*(pf) = -*(pf); }
#define UFLFLOATOBJ_EqualLong(pf,l) (*(pf) == (float)(l))
#define UFLFLOATOBJ_GreaterThanLong(pf,l) (*(pf) > (float)(l))
#define UFLFLOATOBJ_LessThanLong(pf,l) (*(pf) < (float)(l))
#define UFLFLOATOBJ_Equal(pf,pf1) (*(pf) == *(pf1))
#define UFLFLOATOBJ_GreaterThan(pf,pf1) (*(pf) > *(pf1))
#define UFLFLOATOBJ_LessThan(pf,pf1) (*(pf) < *(pf1))
#endif /* WIN32KERNEL */
/* UFLFixed macros */
#define UFLFixedMant( x ) ( ((UFLSepFixed*)&x)->mant )
#define UFLFixedFraction( x ) ( ((UFLSepFixed*)&x)->frac )
#define UFLTruncFixedToShort( x ) (short)( (x) >> 16 )
#define UFLRoundFixedToShort( x ) (short)( ((x) + 0x08000) >> 16 )
#define UFLCeilingFixedToShort( x ) (short)( ((x) + 0x0ffff) >> 16 )
#define UFLShortToFixed( x ) ( ((UFLFixed)(x)) << 16 )
#define UFLTruncFixed( x ) ( (x) & 0xffff0000 )
#define UFLFixedOne (UFLFixed)0x00010000
#define UFLRoundFixed( x ) (((x) + 0x08000) & 0xffff0000)
UFLFixed UFLFltToFix(float x);
UFLFixed UFLFixedDiv( UFLFixed a, UFLFixed b );
UFLFixed UFLFixedMul( UFLFixed a, UFLFixed b );
#ifdef __cplusplus
}
#endif
#endif