35 #define PATHSEPSTRING "\\" 36 #define PATHLISTSEP ';' 37 #define PATHLISTSEPSTRING ";" 38 #define ISPATHSEP(c) ((c)=='\\' || (c)=='/') 39 #define ISPATHCOMP(c) ((c) && (c)!='/' && (c)!='\\') 42 #define PATHSEPSTRING "/" 43 #define PATHLISTSEP ':' 44 #define PATHLISTSEPSTRING ":" 45 #define ISPATHSEP(c) ((c)=='/') 46 #define ISPATHCOMP(c) ((c) && (c)!='/') 52 #define ENDLINE "\r\n" 59 #if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) 60 #define FOX_BIGENDIAN 0 61 #elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) 62 #define FOX_BIGENDIAN 1 63 #elif defined(__BYTE_ORDER__) && defined(__ORDER_PDP_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_PDP_ENDIAN__) 64 #error "FOX_BIGENDIAN: does not support PDP endianness!" 65 #elif defined(__LITTLE_ENDIAN__) || defined(__LITTLE_ENDIAN) 66 #define FOX_BIGENDIAN 0 67 #elif defined(__BIG_ENDIAN__) || defined(__BIG_ENDIAN) 68 #define FOX_BIGENDIAN 1 69 #elif defined(_MSC_VER) || defined(__i386__) || defined(__x86_64__) 70 #define FOX_BIGENDIAN 0 72 #error "FOX_BIGENDIAN: endianness could not be determined!" 80 #define FXEXPORT __attribute__ ((dllexport)) 81 #define FXIMPORT __attribute__ ((dllimport)) 84 #define FXEXPORT __declspec(dllexport) 85 #define FXIMPORT __declspec(dllimport) 88 #if defined(__GNUC__) && (__GNUC__ >= 4) 89 #define FXLOCAL __attribute__((visibility("hidden"))) 90 #define FXEXPORT __attribute__((visibility("default"))) 91 #define FXIMPORT __attribute__((visibility("default"))) 102 #ifdef FOXDLL_EXPORTS 103 #define FXAPI FXEXPORT 104 #define FXTEMPLATE_EXTERN 106 #define FXAPI FXIMPORT 107 #define FXTEMPLATE_EXTERN extern 111 #define FXTEMPLATE_EXTERN 115 #if defined(_MSC_VER) && defined(_WIN32) 116 #define FXDEPRECATED __declspec(deprecated) 117 #elif defined(__GNUC__) 118 #define FXDEPRECATED __attribute__((deprecated)) 124 #if defined(__GNUC__) 125 #define __align(x) __attribute__((aligned(x))) 126 #elif defined(_MSC_VER) 127 #define __align(x) __declspec(align(x)) 133 #define __alignment(p,b) (((FXival)(p))&((b)-1)) 136 #define __isaligned(p,b) (__alignment(p,b)==0) 139 #define __alignto(p,b) ((void*)((((FXival)(p))+((FXival)((b)-1)))&~((FXival)((b)-1)))) 143 #if defined(__GNUC__) 144 #define __threadlocal __thread 145 #elif defined(_MSC_VER) 146 #define __threadlocal __declspec(thread) 148 #define __threadlocal 152 #if defined(__GNUC__) 153 #define __noreturn __attribute__((__noreturn__)) 154 #elif (_MSC_VER >= 1400) 155 #define __noreturn __declspec(noreturn) 162 #define __likely(cond) __builtin_expect(!!(cond),1) 163 #define __unlikely(cond) __builtin_expect(!!(cond),0) 165 #define __likely(cond) (!!(cond)) 166 #define __unlikely(cond) (!!(cond)) 171 #define __assume(expr) __attribute__((__assume__(expr))) 172 #elif (__clang__ >= 14) 173 #define __assume(expr) __builtin_assume(expr) 174 #elif !defined(_MSC_VER) 175 #define __assume(expr) 180 #define __unreachable() __builtin_unreachable() 181 #elif defined(_MSC_VER) 182 #define __unreachable() __assume(false) 184 #define __unreachable() 188 #if defined(__clang__) 190 #elif defined(__GNUC__) 191 #define __restrict __restrict__ 192 #elif !defined(_MSC_VER) 197 #if (__GNUC__ >= 4) && (defined(__i386__) || defined(__x86_64__)) 198 #define __prefetch(addr) __builtin_prefetch((addr),0) 199 #define __prefetchw(addr) __builtin_prefetch((addr),1) 201 #define __prefetch(addr) 202 #define __prefetchw(addr) 208 #define CALLBACK __stdcall 215 #define CDECL __cdecl 224 #define FXUNUSED(prm) (void)(prm) 227 #if defined(_CC_GNU_) || defined(__GNUG__) || defined(__GNUC__) 228 #define FX_PRINTF(fmt,arg) __attribute__((format(printf,fmt,arg))) 229 #define FX_SCANF(fmt,arg) __attribute__((format(scanf,fmt,arg))) 230 #define FX_FORMAT(arg) __attribute__((format_arg(arg))) 232 #define FX_PRINTF(fmt,arg) 233 #define FX_SCANF(fmt,arg) 234 #define FX_FORMAT(arg) 238 #if defined(_MSC_VER) || defined(__MINGW32__) // Windows 240 #define LLP64 1 // Long longs and pointers are 64 bit 242 #define ILP32 1 // Ints, longs, and pointers are 32 bit 244 #elif defined(__LP64__) || defined(_LP64) || (_MIPS_SZLONG == 64) || (__WORDSIZE == 64) 245 #define LP64 1 // Longs and pointers are 64 bit 247 #define ILP32 1 // Longs, integers, and pointers are 32 bit 252 #define FXLONG(c) c ## L // Long suffix for 64 bit 253 #define FXULONG(c) c ## UL 254 #elif defined(_MSC_VER) && (_MSC_VER < 1900) 255 #define FXLONG(c) c ## i64 // Special suffix for 64 bit 256 #define FXULONG(c) c ## ui64 258 #define FXLONG(c) c ## LL // Long long suffix for 64 bit 259 #define FXULONG(c) c ## ULL 284 typedef signed char FXschar;
285 typedef unsigned char FXuchar;
287 typedef unsigned short FXushort;
288 typedef short FXshort;
289 typedef unsigned int FXuint;
291 typedef float FXfloat;
292 typedef double FXdouble;
294 typedef unsigned int FXwchar;
295 #if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED) 296 typedef unsigned short FXnchar;
297 #elif defined(__WATCOMC__) && !defined(_WCHAR_T_DEFINED) 298 typedef long char FXnchar;
300 typedef wchar_t FXnchar;
303 typedef wchar_t FXwchar;
304 typedef unsigned short FXnchar;
308 typedef unsigned long FXulong;
309 #elif defined(_MSC_VER) && (_MSC_VER < 1900) 310 typedef __int64 FXlong;
311 typedef unsigned __int64 FXulong;
313 typedef long long FXlong;
314 typedef unsigned long long FXulong;
318 #if defined(LP64) || defined(ILP32) // Long for LP64 and ILP32 models 320 typedef unsigned long FXuval;
321 #elif defined(LLP64) // Long long for LLP64 models 322 #if defined(_MSC_VER) && (_MSC_VER < 1900) 323 typedef __int64 FXival;
324 typedef unsigned __int64 FXuval;
326 typedef long long FXival;
327 typedef unsigned long long FXuval;
339 typedef unsigned long FXID;
343 typedef FXlong FXTime;
346 typedef unsigned long FXPixel;
349 typedef FXuint FXColor;
352 typedef FXuint FXHotKey;
356 typedef void* FXInputHandle;
358 typedef FXint FXInputHandle;
363 typedef void* FXProcessID;
365 typedef int FXProcessID;
370 typedef void* FXThreadID;
372 typedef unsigned long FXThreadID;
376 typedef FXuval FXThreadStorageKey;
380 typedef tagMSG FXRawEvent;
382 typedef _XEvent FXRawEvent;
388 typedef FXushort FXDragType;
390 typedef FXID FXDragType;
398 const FXTime forever=FXLONG(9223372036854775807);
407 SEARCH_IGNORECASE = 8,
417 #define FXBIT(val,b) (((val)>>(b))&1) 420 #define FXABS(val) (((val)>=0)?(val):-(val)) 423 #define FXSGN(val) (((val)<0)?-1:1) 426 #define FXSGNZ(val) ((val)<0?-1:(val)>0?1:0) 429 #define FXSGNX(x,b) (((FXint)((x)<<(32-(b))))>>(32-(b))) 432 #define FXMAX(a,b) (((a)>(b))?(a):(b)) 435 #define FXMIN(a,b) (((a)>(b))?(b):(a)) 438 #define FXMIN3(x,y,z) ((x)<(y)?FXMIN(x,z):FXMIN(y,z)) 441 #define FXMAX3(x,y,z) ((x)>(y)?FXMAX(x,z):FXMAX(y,z)) 444 #define FXMIN4(x,y,z,w) (FXMIN(FXMIN(x,y),FXMIN(z,w))) 447 #define FXMAX4(x,y,z,w) (FXMAX(FXMAX(x,y),FXMAX(z,w))) 450 #define FXMINMAX(lo,hi,a,b) ((a)<(b)?((lo)=(a),(hi)=(b)):((lo)=(b),(hi)=(a))) 453 #define FXCLAMP(lo,x,hi) ((x)<(lo)?(lo):((x)>(hi)?(hi):(x))) 456 #define FXSWAP(a,b,t) ((t)=(a),(a)=(b),(b)=(t)) 459 #define FXLERP(a,b,f) ((a)+((b)-(a))*(f)) 462 #define ARRAYNUMBER(array) (sizeof(array)/sizeof(array[0])) 465 #define STRUCTOFFSET(str,member) ((FXival)&(((str *)0)->member)) 468 #define CONTAINER(ptr,str,mem) ((str*)(((FXival)(ptr))-STRUCTOFFSET(str,mem))) 471 #define MKUINT(l,h) ((((FX::FXuint)(l))&0xffff) | (((FX::FXuint)(h))<<16)) 474 #define FXSEL(type,id) ((((FX::FXuint)(id))&0xffff) | (((FX::FXuint)(type))<<16)) 477 #define FXSELTYPE(s) ((FX::FXushort)(((s)>>16)&0xffff)) 480 #define FXSELID(s) ((FX::FXushort)((s)&0xffff)) 483 #define FXAVGCOLOR(ca,cb) (((ca)&(cb))+((((ca)^(cb))&0xFEFEFEFE)>>1)) 487 #if (FOX_BIGENDIAN == 1) 490 #define FXRGBA(r,g,b,a) (((FX::FXuint)(FX::FXuchar)(a)) | ((FX::FXuint)(FX::FXuchar)(r)<<8) | ((FX::FXuint)(FX::FXuchar)(g)<<16) | ((FX::FXuint)(FX::FXuchar)(b)<<24)) 493 #define FXRGB(r,g,b) (((FX::FXuint)(FX::FXuchar)(r)<<8) | ((FX::FXuint)(FX::FXuchar)(g)<<16) | ((FX::FXuint)(FX::FXuchar)(b)<<24) | 0x000000ff) 496 #define FXREDVAL(rgba) ((FX::FXuchar)(((rgba)>>8)&0xff)) 499 #define FXGREENVAL(rgba) ((FX::FXuchar)(((rgba)>>16)&0xff)) 502 #define FXBLUEVAL(rgba) ((FX::FXuchar)(((rgba)>>24)&0xff)) 505 #define FXALPHAVAL(rgba) ((FX::FXuchar)((rgba)&0xff)) 508 #define FXRGBACOMPVAL(rgba,comp) ((FX::FXuchar)(((rgba)>>((comp)<<3))&0xff)) 511 #define FXCOLORREF2RGB(ref) (FX::FXuint)((((ref)<<8)&0xff000000) | (((ref)<<8)&0xff0000) | (((ref)<<8)&0xff00) | 0x000000ff) 514 #define FXRGB2COLORREF(rgb) (FX::FXuint)((((rgb)>>8)&0xff0000) | (((rgb)>>8)&0xff00) | (((rgb)>>8)&0xff)) 520 #if (FOX_BIGENDIAN == 0) 523 #define FXRGBA(r,g,b,a) (((FX::FXuint)(FX::FXuchar)(a)<<24) | ((FX::FXuint)(FX::FXuchar)(r)<<16) | ((FX::FXuint)(FX::FXuchar)(g)<<8) | ((FX::FXuint)(FX::FXuchar)(b))) 526 #define FXRGB(r,g,b) (((FX::FXuint)(FX::FXuchar)(r)<<16) | ((FX::FXuint)(FX::FXuchar)(g)<<8) | ((FX::FXuint)(FX::FXuchar)(b)) | 0xff000000) 529 #define FXREDVAL(rgba) ((FX::FXuchar)(((rgba)>>16)&0xff)) 532 #define FXGREENVAL(rgba) ((FX::FXuchar)(((rgba)>>8)&0xff)) 535 #define FXBLUEVAL(rgba) ((FX::FXuchar)((rgba)&0xff)) 538 #define FXALPHAVAL(rgba) ((FX::FXuchar)(((rgba)>>24)&0xff)) 541 #define FXRGBACOMPVAL(rgba,comp) ((FX::FXuchar)(((rgba)>>((3-(comp))<<3))&0xff)) 544 #define FXCOLORREF2RGB(ref) (FX::FXuint)((((ref)>>16)&0xff) | ((ref)&0xff00) | (((ref)<<16)&0xff0000) | 0xff000000) 547 #define FXRGB2COLORREF(rgb) (FX::FXuint)((((rgb)<<16)&0xff0000) | ((rgb)&0xff00) | (((rgb)>>16)&0xff)) 559 #define FXASSERT(exp) (__likely(exp)?((void)0):(void)FX::fxassert(#exp,__FILE__,__LINE__)) 561 #define FXASSERT(exp) ((void)0) 573 #define FXVERIFY(exp) (__likely(exp)?((void)0):(void)FX::fxverify(#exp,__FILE__,__LINE__)) 575 #define FXVERIFY(exp) ((void)(exp)) 585 #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSC_VER) && (_MSC_VER >= 1600)) 586 #define FXSTATIC_ASSERT(expr) static_assert(expr,#expr) 588 #define FXSTATIC_ASSERT(expr) FXASSERT(expr) 595 #define VA_NUM_ARGS(...) VA_NUM_ARGS_IMPL(__VA_ARGS__,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1) 596 #define VA_NUM_ARGS_IMPL(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,N,...) N 614 #define FXTRACE(topic, ...) FX::fxtrace(topic, __VA_ARGS__) 616 #define FXTRACE(topic, ...) ((void)0) 625 #define FXMALLOC(ptr,type,no) (FX::fxmalloc((void **)(ptr),sizeof(type)*(no))) 633 #define FXCALLOC(ptr,type,no) (FX::fxcalloc((void **)(ptr),sizeof(type)*(no))) 644 #define FXRESIZE(ptr,type,no) (FX::fxresize((void **)(ptr),sizeof(type)*(no))) 653 #define FXMEMDUP(ptr,src,type,no) (FX::fxmemdup((void **)(ptr),(const void*)(src),sizeof(type)*(no))) 661 #define FXFREE(ptr) (FX::fxfree((void **)(ptr))) 666 template <
typename to_type>
667 static inline to_type* alias_cast(
void* ptr){
668 union UNI { to_type dst[1]; };
669 return reinterpret_cast<UNI*
>(ptr)->dst;
673 template <
typename to_type>
674 static inline const to_type* alias_cast(
const void* ptr){
675 union UNI { to_type dst[1]; };
676 return reinterpret_cast<const UNI*
>(ptr)->dst;
680 extern FXAPI FXbool fxmalloc(
void** ptr,FXuval size);
683 extern FXAPI FXbool fxcalloc(
void** ptr,FXuval size);
686 extern FXAPI FXbool fxresize(
void** ptr,FXuval size);
689 extern FXAPI
void fxfree(
void** ptr);
692 extern FXAPI FXbool fxmemdup(
void** ptr,
const void* src,FXuval size);
695 extern FXAPI __noreturn
void fxerror(
const FXchar* format,...) FX_PRINTF(1,2) ;
698 extern FXAPI
void fxwarning(const FXchar* format,...) FX_PRINTF(1,2) ;
701 extern FXAPI
void fxmessage(const FXchar* format,...) FX_PRINTF(1,2) ;
704 extern FXAPI
void fxassert(const FXchar* expression,const FXchar* filename,
unsigned int lineno);
707 extern FXAPI
void fxverify(const FXchar* expression,const FXchar* filename,
unsigned int lineno);
710 extern FXAPI
void fxtrace(FXuint level,const FXchar* format,...) FX_PRINTF(2,3) ;
713 extern FXAPI FXbool fxtoDOS(FXchar*&
string,FXint& len);
716 extern FXAPI FXbool fxfromDOS(FXchar*&
string,FXint& len);
719 extern FXAPI FXchar *fxstrdup(const FXchar* str);
722 extern FXAPI FXuint fxstrhash(const FXchar* str);
725 extern FXAPI FXival fxstrlcpy(FXchar* dst,const FXchar* src,FXival len);
728 extern FXAPI FXival fxstrlcat(FXchar* dst,const FXchar* src,FXival len);
731 extern FXAPI FXchar* fxstrstr(const FXchar *haystack,const FXchar *needle);
734 extern FXAPI FXchar* fxstrcasestr(const FXchar *haystack,const FXchar *needle);
737 extern FXAPI
void fxrgb_to_hsv(FXfloat& h,FXfloat& s,FXfloat& v,FXfloat r,FXfloat g,FXfloat b);
740 extern FXAPI
void fxhsv_to_rgb(FXfloat& r,FXfloat& g,FXfloat& b,FXfloat h,FXfloat s,FXfloat v);
743 extern FXAPI
void fxrgb_to_hsl(FXfloat& h,FXfloat& s,FXfloat& l,FXfloat r,FXfloat g,FXfloat b);
746 extern FXAPI
void fxhsl_to_rgb(FXfloat& r,FXfloat& g,FXfloat& b,FXfloat h,FXfloat s,FXfloat l);
749 extern FXchar* fxencode64(FXchar* dst,FXchar* dstend,const FXchar* src,const FXchar* srcend);
752 extern FXchar* fxdecode64(FXchar* dst,FXchar* dstend,const FXchar* src,const FXchar* srcend);
755 extern FXchar* fxencode85(FXchar* dst,FXchar* dstend,const FXchar* src,const FXchar* srcend);
758 extern FXchar* fxdecode85(FXchar* dst,FXchar* dstend,const FXchar* src,const FXchar* srcend);
761 extern FXAPI FXwchar fxkeysym2ucs(FXwchar sym);
764 extern FXAPI FXwchar fxucs2keysym(FXwchar ucs);
767 extern FXAPI FXint fxparsegeometry(const FXchar *
string,FXint& x,FXint& y,FXint& w,FXint& h);
770 extern FXAPI FXbool fxisconsole(const FXchar *path);
773 extern FXAPI const FXuchar fxversion[3];
776 extern FXAPI FXbool getTraceTopic(FXuint topic);
779 extern FXAPI
void setTraceTopic(FXuint topic,FXbool flag=true);
782 extern FXAPI
void setTraceLevel(FXuint level,FXbool flag=true);
794 extern FXAPI FXbool setTraceTopics(const FXchar* topics,FXbool flag=true);
797 extern FXAPI FXival fxosversion(FXchar version[],FXival len);
Definition: FX4Splitter.h:28