X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fctsupport.h;h=cea4f14dc7e86e6211326f400aed3dc22be65030;hp=349aaf5db270a704d64d8aac7c9cfc483953a5bc;hb=fd1d136a94a6d20013f38d6a997bdfefad0f5e98;hpb=12e2c29153a0f55ac23bdeec06b404638672985b diff --git a/include/ctsupport.h b/include/ctsupport.h index 349aaf5..cea4f14 100644 --- a/include/ctsupport.h +++ b/include/ctsupport.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: ctsupport.h,v 1.2 2000/06/19 19:04:05 kevin Exp $ +** $Id: ctsupport.h,v 1.15 2000/12/20 20:08:48 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -33,24 +33,23 @@ #include "config.h" #endif -#ifdef _WIN32 -#define snprintf _snprintf +#ifdef MSVC +#include "msvc_compat.h" #endif #define STR_MAX_LEN 255 #define STR_SIZE STR_MAX_LEN+1 -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #define TRUE 1 #define FALSE 0 #define OK TRUE -#define ERROR FALSE -#define YES TRUE -#define NO FALSE /*----------------------------------------------------------------------*/ @@ -65,25 +64,6 @@ /*----------------------------------------------------------------------*/ -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 ERR_WARNING 0 #define ERR_SEVERE 1 #define ERR_FATAL 2 @@ -92,7 +72,7 @@ typedef struct timedate_st TIMEDATE; /* codes for open command */ -#if MICROSOFT +#ifdef MSVC #define OPEN_RDONLY O_RDONLY /* other system use standard codes */ #define OPEN_WRONLY O_WRONLY /* for binary */ #define OPEN_RDWR O_RDWR @@ -104,7 +84,7 @@ typedef struct timedate_st TIMEDATE; /*----------------------------------------------------------------------*/ -#ifndef O_BINARY +#if !defined(O_BINARY) && !defined(MSVC) #define O_BINARY (0) #endif @@ -114,7 +94,7 @@ typedef struct timedate_st TIMEDATE; /*----------------------------------------------------------------------*/ -#if defined(MICROSOFT) || ! defined(SIZEOF_INT) +#if defined(MSVC) || ! defined(SIZEOF_INT) #define SIZEOF_INT 4 #define SIZEOF_LONG 4 #define SIZEOF_SHORT 2 @@ -149,10 +129,13 @@ typedef unsigned char kuint8; #endif -/* filefuncs.cpp */ -bool file_exists(const char* fname); -const char* fileBasename(const char* filename); -FILE *sys_fopen(const char *filename, const char *mode, const char *progname); +inline const char* +fileBasename (const char* const filename) +{ + const char* p = strrchr (filename, '/'); + return (p ? p + 1 : filename); +} + /* strfuncs.cpp */ char* str_skip_head(const char* str, const char* const charlist); @@ -167,28 +150,9 @@ void sys_error(int severity, const char *msg, ...); void sys_verror(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); - - // Math Section -#include +#include #define PI 3.14159265358979323846 #define HALFPI 1.57079632679489661923 /* PI divided by 2 */ @@ -219,6 +183,12 @@ 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); } + +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 )); } @@ -245,49 +215,30 @@ inline void minmax_array (const T* array, const int n, T& min, T& max) ////////////////////////////////////////////////////////////// // clip.cpp -int clip_rect(double& x1, double& y1, double& x2, double& y2, const double rect[4]); -int clip_segment(double& x1, double& y1, double& x2, double& y2, const double u, const double v); -int clip_sector(double& x1, double& y1, double& x2, double& y2, const double u, const double v); -int clip_circle(double& x1, double& y1, double& x2, double& y2, const double cx, const double cy, const double radius, double t1, double t2); -int clip_triangle(double& x1, double& y1, double& x2, double& y2, const double u, const double v, const int clip_xaxis); +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); +bool clip_circle (double& x1, double& y1, double& x2, double& y2, const double cx, const double cy, const double radius, double t1, double t2); +bool clip_triangle (double& x1, double& y1, double& x2, double& y2, const double u, const double v, const int clip_xaxis); -// norm_ang.cpp -double norm_ang (double theta); // 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(GRFMTX_2D m1, GRFMTX_2D m2, GRFMTX_2D result); -void xform_mtx2(GRFMTX_2D m, double& x, double& y); -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); - -// simpson.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 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); + +// 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, double& min, double& max, double& mean, double& mode, double& median, double& stddev); -// Console I/O Section - -#define C_BLACK 0 /* color codes */ -#define C_BLUE 1 -#define C_GREEN 2 -#define C_CYAN 3 -#define C_RED 4 -#define C_MAGENTA 5 -#define C_BROWN 6 -#define C_WHITE 7 -#define C_GREY 8 -#define C_LTBLUE 9 -#define C_LTGREEN 10 -#define C_LTCYAN 11 -#define C_LTRED 12 -#define C_LTMAGENTA 13 -#define C_YELLOW 14 -#define C_LTWHITE 15 - /*----------------------------------------------------------------------*/ /* screen character codes */ @@ -359,4 +310,4 @@ unsigned int cio_kb_waitc(const char *astr, int beep); #define PERIOD '.' #define VERTBAR '|' -#endif /* #ifndef ASCII_H */ +#endif /* #ifndef CTSUPPORT_H */