brender-1997/inc/fixed.h
2022-05-03 14:31:40 -07:00

59 lines
1.8 KiB
C

/*
* Copyright (c) 1992,1993-1995 by Argonaut Technologies Limited. All rights reserved.
*
* $Id: fixed.h 2.5 1996/12/06 13:04:01 sam Exp $
* $Locker: $
*/
#ifndef _FIXED_H_
#define _FIXED_H_
#ifndef INLINE_FIXED
#define INLINE_FIXED 1
#endif
/*
* Fixed point types
*/
typedef long br_fixed_ls; /* Long Signed fixed 15.16 */
typedef short br_fixed_lsf; /* Long Signed fraction 0.15 */
typedef unsigned long br_fixed_lu; /* Long unsigned fixed 16.16 */
typedef unsigned short br_fixed_luf;/* Long unsigned fixed fraction 0.16 */
typedef short br_fixed_ss; /* Short Signed fixed 7.8 */
typedef char br_fixed_ssf; /* Short Signed fraction 0.7 */
typedef unsigned short br_fixed_su; /* Short unsigned fixed 8.8 */
typedef unsigned char br_fixed_suf; /* Short unsigned fixed fraction 0.8 */
/*
* 1 in various fixed point forms
*/
#define BR_ONE_LS 65536 /* (1<<16) */
#define BR_ONE_LSF 32768 /* (1<<15) */
#define BR_ONE_LU 65536 /* (1<<16) */
#define BR_ONE_LUF 65536 /* (1<<16) */
#define BR_ONE_SS 256 /* (1<<8) */
#define BR_ONE_SSF 128 /* (1<<7) */
#define BR_ONE_SU 256 /* (1<<8) */
#define BR_ONE_SUF 256 /* (1<<8) */
#define BrIntToFixed(i) ((i) << 16)
#define BrFixedToInt(i) ((i) >> 16)
#define BrFloatToFixed(f) ((br_fixed_ls)((f)*(float)BR_ONE_LS))
#define BrFixedToFloat(s) ((float)((s)*(1.0/(float)BR_ONE_LS)))
#define BrFloatToFixedLS(f) ((br_fixed_ls)((f)*(float)BR_ONE_LS))
#define BrFixedLSToFloat(s) ((float)((s)*(1.0/(float)BR_ONE_LS)))
#define BrFixedLSFToFloat(s) ((float)((s)*(1.0/(float)BR_ONE_LSF)))
#define BrFixedLUFToFloat(s) ((float)((s)*(1.0/(float)BR_ONE_LUF)))
#define BrFloatToFixedLSF(f) ((br_fixed_lsf)((f)*(float)BR_ONE_LSF))
#define BrFloatToFixedLUF(f) ((br_fixed_luf)((f)*(float)BR_ONE_LUF))
#endif