X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fctsupport.h;h=6d1c1dcf8a9a6ad0c9249655a868a73d65f8d78e;hp=ce05b3bb59e9cc3b737f0f07eb9ec61984653305;hb=9ac3b88884957e2c07bf365c2503c6c1fbeaa60e;hpb=0aa7e912bb58a67d9952c83767ce244b974763ab diff --git a/include/ctsupport.h b/include/ctsupport.h index ce05b3b..6d1c1dc 100644 --- a/include/ctsupport.h +++ b/include/ctsupport.h @@ -1,16 +1,13 @@ /***************************************************************************** ** FILE IDENTIFICATION ** -** File Name: ctsupport.h -** Author: Kevin Rosenberg -** Purpose: Header file for CT support library -** Date Started: Dec. 83 +** File Name: ctsupport.h +** Author: Kevin Rosenberg +** Purpose: Header file for CT support library +** Date Started: Dec. 83 ** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg -** -** $Id: ctsupport.h,v 1.10 2000/12/06 16:41:17 kevin Exp $ -** +** Copyright (c) 1983-2009 Kevin Rosenberg ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -34,7 +31,7 @@ #endif #ifdef MSVC -#define snprintf _snprintf +#include "msvc_compat.h" #endif #define STR_MAX_LEN 255 @@ -44,67 +41,59 @@ #include #include #include +#include +#include +#include -#define TRUE 1 -#define FALSE 0 -#define OK TRUE -#define ERROR FALSE -#define YES TRUE -#define NO FALSE - -/*----------------------------------------------------------------------*/ +#if defined(MSVC) || HAVE_SSTREAM +#include +#else +#include +#endif -#define SHOW(var, fmt) { cerr << "var = " << var << endl; } +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif +#define OK TRUE /*----------------------------------------------------------------------*/ -#define NEWLINE '\n' -#define TAB '\t' -#define EOS '\0' -#define BLANK ' ' +#define SHOW(var, fmt) { cerr << "var = " << var << endl; } /*----------------------------------------------------------------------*/ -struct time_st { - int hour, minute, second, ms; -}; - -struct date_st { - int year, month, date, dow; -}; - -struct timedate_st { - struct time_st t; - struct date_st d; -}; - -typedef struct time_st TIME; -typedef struct date_st DATE; -typedef struct timedate_st TIMEDATE; +#define NEWLINE '\n' +#define TAB '\t' +#define EOS '\0' +#define BLANK ' ' /*----------------------------------------------------------------------*/ -#define ERR_WARNING 0 -#define ERR_SEVERE 1 -#define ERR_FATAL 2 +#define ERR_TRACE -1 +#define ERR_WARNING 0 +#define ERR_SEVERE 1 +#define ERR_FATAL 2 /*----------------------------------------------------------------------*/ /* codes for open command */ #ifdef MSVC -#define OPEN_RDONLY O_RDONLY /* other system use standard codes */ -#define OPEN_WRONLY O_WRONLY /* for binary */ +#define OPEN_RDONLY O_RDONLY /* other system use standard codes */ +#define OPEN_WRONLY O_WRONLY /* for binary */ #define OPEN_RDWR O_RDWR #else -#define OPEN_RDONLY 0 /* other system use standard codes */ -#define OPEN_WRONLY 1 /* for binary */ +#define OPEN_RDONLY 0 /* other system use standard codes */ +#define OPEN_WRONLY 1 /* for binary */ #define OPEN_RDWR 2 #endif /*----------------------------------------------------------------------*/ -#ifndef O_BINARY +#if !defined(O_BINARY) && !defined(MSVC) #define O_BINARY (0) #endif @@ -149,7 +138,7 @@ typedef unsigned char kuint8; #endif -inline const char* +inline const char* fileBasename (const char* const filename) { const char* p = strrchr (filename, '/'); @@ -167,50 +156,32 @@ char *str_upper(char *str); /* syserror.cpp */ void sys_error(int severity, const char *msg, ...); -void sys_verror(int severity, const char *msg, va_list arg); +void sys_verror (std::string& strOutput, int severity, const char *msg, va_list arg); void sys_error_level(int severity); - -/* timedate.cpp */ -DATE *td_get_date(DATE *d); -TIME *td_get_time(TIME *t); -double td_current_sec(void); -double td_time_to_sec(TIME *t); -TIME *td_time_sub(const TIME *t1, const TIME *t2, TIME *tdiff); -TIME *td_time_add(const TIME *t1, const TIME *t2, TIME *tsum); -TIME *td_time_copy(TIME *to, const TIME *from); -TIME *td_time_norm(TIME *t); -void td_get_tmdt(TIMEDATE *td); -const char *td_str_tmdt(const TIMEDATE *td); -const char *td_str_time(const TIME *t); -const char *td_str_stime(const TIME *t); -const char *td_str_date(const DATE *d); -char *td_str_cdate(DATE *d); -char *td_month_name(int n); -char *td_day_name(int n); - +extern unsigned long int g_lSysErrorMaxCount; // Math Section #include #define PI 3.14159265358979323846 -#define HALFPI 1.57079632679489661923 /* PI divided by 2 */ -#define QUARTPI 0.78539816339744830962 /* PI divided by 4 */ -#define I_PI 0.31830988618379067154 /* Inverse of PI */ -#define I_PID2 0.63661977236758134308 /* Inverse of PID2 */ - -#define TWOPI 6.28318530717958647692 +#define HALFPI 1.57079632679489661923 /* PI divided by 2 */ +#define QUARTPI 0.78539816339744830962 /* PI divided by 4 */ +#define I_PI 0.31830988618379067154 /* Inverse of PI */ +#define I_PID2 0.63661977236758134308 /* Inverse of PID2 */ + +#define TWOPI 6.28318530717958647692 #define SQRT2 1.414213562373095049 -#define F_EPSILON 1.0E-6 -#define D_EPSILON 1.0E-10 +#define F_EPSILON 1.0E-6 +#define D_EPSILON 1.0E-10 #define ASSUMEDZERO 1E-10 typedef double GRFMTX_2D[3][3]; typedef double GRFMTX_3D[4][4]; -inline double +inline double convertDegreesToRadians (double x) { return (x * (PI/180.)); } @@ -222,9 +193,30 @@ template inline T nearest (double x) { return (x > 0 ? static_cast(x+0.5) : static_cast(x-0.5)); } -inline int imax (int a, int b) -{ return (a >= b ? a : b); } - +template +inline T maxValue (T x, T y) +{ return (x > y ? x : y); } + +inline bool isEven (int n) +{ return (n % 2) == 0; } + +inline bool isOdd (int n) +{ return (n % 2) != 0; } + +#if 0 +inline bool isEven (long n) +{ return (n % 2) == 0; } + +inline bool isOdd (long n) +{ return (n % 2) != 0; } +#endif + +inline int imax (int a, int b) +{ return (a >= b ? a : b); } + +inline double dmax (double a, double b) +{ return (a >= b ? a : b); } + template inline T clamp (T value, T lowerBounds, T upperBounds) { return (value >= upperBounds ? upperBounds : (value <= lowerBounds ? lowerBounds : value )); } @@ -250,7 +242,7 @@ inline void minmax_array (const T* array, const int n, T& min, T& max) // FUNTION DECLARATIONS ////////////////////////////////////////////////////////////// -// clip.cpp +// clip.cpp bool clip_rect (double& x1, double& y1, double& x2, double& y2, const double rect[4]); bool clip_segment (double& x1, double& y1, double& x2, double& y2, const double u, const double v); bool clip_sector (double& x1, double& y1, double& x2, double& y2, const double u, const double v); @@ -258,13 +250,14 @@ bool clip_circle (double& x1, double& y1, double& x2, double& y2, const double c bool clip_triangle (double& x1, double& y1, double& x2, double& y2, const double u, const double v, const int clip_xaxis); -// xform.cpp +// xform.cpp void indent_mtx2 (GRFMTX_2D m); void xlat_mtx2 (GRFMTX_2D m, const double x, const double y); void scale_mtx2 (GRFMTX_2D m, const double sx, const double sy); void rot_mtx2 (GRFMTX_2D m, const double theta); void mult_mtx2 (const GRFMTX_2D m1, const GRFMTX_2D m2, GRFMTX_2D result); void xform_mtx2 (const GRFMTX_2D m, double& x, double& y); +void copy_mtx2 (GRFMTX_2D to, const GRFMTX_2D from); void rotate2d (double x[], double y[], int pts, double angle); void xlat2d (double x[], double y[], int pts, double xoffset, double yoffset); void scale2d (double x[], double y[], int pts, double xfact, double yfact); @@ -272,15 +265,16 @@ void scale2d (double x[], double y[], int pts, double xfact, double yfact); // mathfuncs.cpp double normalizeAngle (double theta); double integrateSimpson (const double xmin, const double xmax, const double *y, const int np); +void vectorNumericStatistics (std::vector vec, const int nPoints, double& min, double& max, double& mean, double& mode, double& median, double& stddev); /*----------------------------------------------------------------------*/ /* screen character codes */ -#define SC_BKSP 8 -#define SC_TAB 9 -#define SC_BLANK ' ' +#define SC_BKSP 8 +#define SC_TAB 9 +#define SC_BLANK ' ' /* audio.cpp */ @@ -300,17 +294,17 @@ unsigned int cio_kb_waitc(const char *astr, int beep); // Keyboard Section -#define KEY_BKSP 8 -#define KEY_TAB 9 -#define KEY_RETURN 13 -#define KEY_ESCAPE 27 +#define KEY_BKSP 8 +#define KEY_TAB 9 +#define KEY_RETURN 13 +#define KEY_ESCAPE 27 // ASCII Section #define BACKSPACE 8 -#define LF 0x0A -#define CR 0x0D -#define BELL 0x07 +// #define LF 0x0A +// #define CR 0x0D +#define BELL 0x07 #define SQUOTE '\'' #define DQUOTE '\"' @@ -319,30 +313,30 @@ unsigned int cio_kb_waitc(const char *astr, int beep); #define SHARP '#' #define SLASH '/' #define ASTERICK '*' -#define COLON ':' +#define COLON ':' #define LBRACE '{' #define RBRACE '}' -#define LPAREN '(' +#define LPAREN '(' #define RPAREN ')' -#define LBRACK '[' -#define RBRACK ']' +#define LBRACK '[' +#define RBRACK ']' #define LANBRACK '<' #define RANBRACK '>' #define SEMICOL ';' #define UNDERLIN '_' -#define COMMA ',' -#define CARET '^' -#define TILDE '~' -#define ATSIGN '@' +#define COMMA ',' +#define CARET '^' +#define TILDE '~' +#define ATSIGN '@' #define AMPERSAND '&' -#define EXCLAM '!' -#define DOLLAR '$' +#define EXCLAM '!' +#define DOLLAR '$' #define PERCENT '%' -#define PLUS '+' -#define HYPHEN '-' -#define EQUALS '=' +#define PLUS '+' +#define HYPHEN '-' +#define EQUALS '=' #define QUESTION '?' -#define PERIOD '.' +#define PERIOD '.' #define VERTBAR '|' -#endif /* #ifndef CTSUPPORT_H */ +#endif /* #ifndef CTSUPPORT_H */