genUtil(API)
General/genUtil is API that define general value, calculation, and process for Eos.
Contents
constant
Maximum value of float
#ifndef I386MAC #ifndef X86MAC64 #ifndef I386CYGWIN #include <values.h> #else #define MAXFLOAT 1e30 #endif #else #include <math.h> #endif #else #define MAXFLOAT 1e30 #endif
Maximum value of string
#define GEN_UTIL_MAX_STRING_LENGTH (1024)
Ratio
Pi
#define PI M_PI
(degree)/(radian)
#define DEGREE (180.0/PI)
(radian)/(degree)
#define RADIAN (PI/180.0)
(percentage)/(fraction)
#define PERCENT (100.0)
struct
API
Calculation of value
Square
#define SQR(x) ((x)*(x))
Positive square root
#define SQRT(x) ((x)>0?sqrt(x):0)
Cube
#define CUBIC(x) ((x)*(x)*(x))
Maximum value(Among 2 value)
#ifndef MAX #define MAX(x,y) ((x)>(y)?(x):(y)) #endif
Minimum value(Among 2 or 3 value)
#ifndef MIN #define MIN(x,y) ((x)<(y)?(x):(y)) #define MIN3(x,y,z) MIN( MIN(x,y), z) #endif
Correction of value
Correction of radian as angle between 0 and 2π.
#define NORMAL_PHASE(x) ((x)>=(0)?(fmod((x),2*M_PI)):(fmod((x),2*M_PI)+2*M_PI)) /* 0 ~ 2M_PI */
Correction of radian as angle between 0 and π.
#define MIN_NORMAL_PHASE(x) MIN(NORMAL_PHASE(x), 2*M_PI-NORMAL_PHASE(x)) /* 0 ~ M_PI */
Correction of integer x as integer between 0 and y.
#define POSITIVE_MODE(x,y) ((x)>=(0)?( (x)%(y) ):((y)==1?0: (x)%(y) +(y)))
Correction of real number x as real number between 0 and y.
#define POSITIVE_FMODE(x,y) ((x)>=(0)?(fmod((x),(y)) ):((y)==1?0:fmod((x),(y)) +(y)))
Compare strings
It can work as switch expression by combining the following syntax.
#define SSWITCH(x) { char* __sswitch_tmp_=x; \ if(0==strcmp(__sswitch_tmp_, "")) { \ fprintf(stderr, "SSWITCH Error\n"); \ exit(EXIT_FAILURE); \ } #define SCASE(x) else if(0==strcmp(x,__sswitch_tmp_)) #define SDEFAULT else #define SBREAK ; #define SSWITCHEND }
Determination of odd or even
#define IsOdd(x) ((x)%2==1?1:0) #define IsEven(x) ((x)%2==0?1:0)
Byte process
#ifdef M68 #define BYTE4SET(x3,x2,x1,x0) ((((x0)<< 0)&0x000f) \ |(((x1)<< 8)&0x00f0) \ |(((x2)<<16)&0x0f00) \ |(((x3)<<24)&0xf000)) #define BYTE4GETBYTE(x,byte) (((x)>>(byte*8))&0x000f) #else #define BYTE4SET(x3,x2,x1,x0) ((((x3)<< 0)&0x000f) \ |(((x2)<< 8)&0x00f0) \ |(((x1)<<16)&0x0f00) \ |(((x0)<<24)&0xf000)) #define BYTE4GETBYTE(x,byte) (((x)>>((3-byte)*8))&0x000f) #endif
usageCreate
You can use up to 2 arguments as option.
#define USAGEPRINT(x) fprintf(stderr,x); #define USAGEPRINT1(x,x1) fprintf(stderr,x,x1); #define USAGEPRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);
Output log message
You can use up to 12 arguments.
#define LOGPRINT(fpt,ID,ID2,x) \ fprintf(fpt, "%-6s %-15s",ID,ID2); \ fprintf(fpt, x); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s",ID,ID2); \ fprintf(stdout, x); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT1(fpt,ID,ID2,x,d1) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT2(fpt,ID,ID2,x,d1,d2) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT3(fpt,ID,ID2,x,d1,d2,d3) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT4(fpt,ID,ID2,x,d1,d2,d3,d4) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT5(fpt,ID,ID2,x,d1,d2,d3,d4,d5) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT6(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT7(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT8(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT9(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT10(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT11(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11); \ fprintf(stdout, "\n"); fflush(stdout); #define LOGPRINT12(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12) \ fprintf(fpt, "%-6s %-15s ",ID,ID2); \ fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12); \ fprintf(fpt, "\n"); fflush(fpt); \ fprintf(stdout, "%-6s %-15s ",ID,ID2); \ fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12); \ fprintf(stdout, "\n"); fflush(stdout);
Output debug message
You can use up to 7 arguments as option.
Add #define to DEBUG when debugging, and add #undef when releasing. Then, you can output the debug message only when debugging.
#ifdef DEBUG #define DEBUGPRINT(x) fprintf(stderr,x);fflush(stderr); #define DEBUGPRINT1(x,x1) fprintf(stderr,x,x1);fflush(stderr); #define DEBUGPRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);fflush(stderr); #define DEBUGPRINT3(x,x1,x2,x3) fprintf(stderr,x,x1,x2,x3);fflush(stderr); #define DEBUGPRINT4(x,x1,x2,x3,x4) fprintf(stderr,x,x1,x2,x3,x4);fflush(stderr); #define DEBUGPRINT5(x,x1,x2,x3,x4,x5) fprintf(stderr,x,x1,x2,x3,x4,x5);fflush(stderr); #define DEBUGPRINT6(x,x1,x2,x3,x4,x5,x6) fprintf(stderr,x,x1,x2,x3,x4,x5,x6);fflush(stderr); #define DEBUGPRINT7(x,x1,x2,x3,x4,x5,x6,x7) fprintf(stderr,x,x1,x2,x3,x4,x5,x6,x7);fflush(stderr) #define DEBUGCOMMAND(x) (x); #else #define DEBUGPRINT(x) #define DEBUGPRINT1(x,x1) #define DEBUGPRINT2(x,x1,x2) #define DEBUGPRINT3(x,x1,x2,x3) #define DEBUGPRINT4(x,x1,x2,x3,x4) #define DEBUGPRINT5(x,x1,x2,x3,x4,x5) #define DEBUGPRINT6(x,x1,x2,x3,x4,x5,x6) #define DEBUGPRINT7(x,x1,x2,x3,x4,x5,x6,x7) #define DEBUGCOMMAND(x) #endif
#ifdef DEBUG2 #define DEBUG2PRINT(x) fprintf(stderr,x);fflush(stderr); #define DEBUG2PRINT1(x,x1) fprintf(stderr,x,x1);fflush(stderr); #define DEBUG2PRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);fflush(stderr); #define DEBUG2PRINT3(x,x1,x2,x3) fprintf(stderr,x,x1,x2,x3);fflush(stderr); #define DEBUG2PRINT4(x,x1,x2,x3,x4) fprintf(stderr,x,x1,x2,x3,x4);fflush(stderr); #define DEBUG2PRINT5(x,x1,x2,x3,x4,x5) fprintf(stderr,x,x1,x2,x3,x4,x5);fflush(stderr); #define DEBUG2PRINT6(x,x1,x2,x3,x4,x5,x6) fprintf(stderr,x,x1,x2,x3,x4,x5,x6);fflush(stderr); #define DEBUG2PRINT7(x,x1,x2,x3,x4,x5,x6,x7) fprintf(stderr,x,x1,x2,x3,x4,x5,x6,x7);fflush(stderr) #else #define DEBUG2PRINT(x) #define DEBUG2PRINT1(x,x1) #define DEBUG2PRINT2(x,x1,x2) #define DEBUG2PRINT3(x,x1,x2,x3) #define DEBUG2PRINT4(x,x1,x2,x3,x4) #define DEBUG2PRINT5(x,x1,x2,x3,x4,x5) #define DEBUG2PRINT6(x,x1,x2,x3,x4,x5,x6) #define DEBUG2PRINT7(x,x1,x2,x3,x4,x5,x6,x7) #endif
Output error message
You can use up to 7 arguments as option.
#define ERRORPRINT(x) fprintf(stderr,x); #define ERRORPRINT1(x,x1) fprintf(stderr,x,x1); #define ERRORPRINT2(x,x1,x2) fprintf(stderr,x,x1,x2); #define ERRORPRINT3(x,x1,x2,x3) fprintf(stderr,x,x1,x2,x3); #define ERRORPRINT4(x,x1,x2,x3,x4) fprintf(stderr,x,x1,x2,x3,x4); #define ERRORPRINT5(x,x1,x2,x3,x4,x5) fprintf(stderr,x,x1,x2,x3,x4,x5); #define ERRORPRINT6(x,x1,x2,x3,x4,x5,x6) fprintf(stderr,x,x1,x2,x3,x4,x5,x6); #define ERRORPRINT7(x,x1,x2,x3,x4,x5,x6,x7) fprintf(stderr,x,x1,x2,x3,x4,x5,x6,x7);