annotate system/System.h @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents be6d31baecb9
children
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam and QMUL.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #ifndef _SYSTEM_H_
lbajardsilogic@0 17 #define _SYSTEM_H_
lbajardsilogic@0 18
lbajardsilogic@188 19 //#include <cmath>
lbajardsilogic@188 20
lbajardsilogic@0 21 #ifdef _WIN32
lbajardsilogic@0 22
lbajardsilogic@0 23 #include <windows.h>
lbajardsilogic@0 24 #include <malloc.h>
lbajardsilogic@0 25 #include <process.h>
lbajardsilogic@0 26
lbajardsilogic@0 27 #ifdef USE_VC
lbajardsilogic@0 28 #include <time.h>
lbajardsilogic@0 29 #include <io.h>
lbajardsilogic@0 30 #include <math.h>
lbajardsilogic@0 31 #include <float.h>
lbajardsilogic@0 32
lbajardsilogic@190 33 #ifndef MIN
lbajardsilogic@190 34 #define MIN(x, y) min(x, y)
lbajardsilogic@190 35 #endif
lbajardsilogic@190 36
lbajardsilogic@190 37 #ifndef MAX
lbajardsilogic@190 38 #define MAX(x, y) max(x, y)
lbajardsilogic@190 39 #endif
lbajardsilogic@190 40
lbajardsilogic@190 41 #ifndef ISNAN
lbajardsilogic@190 42 #define ISNAN(x) isnan((x))
lbajardsilogic@190 43 #endif
lbajardsilogic@190 44
lbajardsilogic@190 45 #ifndef ISINF
lbajardsilogic@190 46 #define ISINF(x) isinf((x))
lbajardsilogic@190 47 #endif
lbajardsilogic@190 48
lbajardsilogic@0 49 typedef int WINBOOL;
lbajardsilogic@0 50
lbajardsilogic@188 51 typedef signed char int8_t;
lbajardsilogic@188 52 typedef unsigned char uint8_t;
lbajardsilogic@188 53 typedef short int16_t;
lbajardsilogic@188 54 typedef unsigned short uint16_t;
lbajardsilogic@0 55 typedef long ssize_t;
lbajardsilogic@0 56 typedef unsigned short mode_t;
lbajardsilogic@0 57
lbajardsilogic@188 58 #define _S_IWUSR _S_IWRITE
lbajardsilogic@188 59 #define _S_IRUSR _S_IREAD
lbajardsilogic@188 60 #define S_IRUSR _S_IRUSR
lbajardsilogic@0 61 #define S_IWUSR _S_IWUSR
lbajardsilogic@0 62
lbajardsilogic@188 63 /* If we're not using GNU C, elide __attribute__ */
lbajardsilogic@188 64 #ifndef __GNUC__
lbajardsilogic@188 65 # define __attribute__(x) /*NOTHING*/
lbajardsilogic@0 66 #endif
lbajardsilogic@0 67
lbajardsilogic@188 68 /* Win32 doesn't seem to have these functions.
lbajardsilogic@188 69 ** Therefore implement inline versions of these functions here.
lbajardsilogic@188 70 */
lbajardsilogic@188 71
lbajardsilogic@188 72 __inline long int lrint (double flt)
lbajardsilogic@188 73 { int intgr;
lbajardsilogic@188 74 _asm
lbajardsilogic@188 75 { fld flt
lbajardsilogic@188 76 fistp intgr
lbajardsilogic@188 77 } ;
lbajardsilogic@188 78
lbajardsilogic@188 79 return intgr ;
lbajardsilogic@188 80 }
lbajardsilogic@188 81
lbajardsilogic@188 82 __inline long int lrintf (float flt)
lbajardsilogic@188 83 { int intgr;
lbajardsilogic@188 84 _asm
lbajardsilogic@188 85 { fld flt
lbajardsilogic@188 86 fistp intgr
lbajardsilogic@188 87 } ;
lbajardsilogic@188 88
lbajardsilogic@188 89 return intgr ;
lbajardsilogic@0 90 }
lbajardsilogic@0 91
lbajardsilogic@188 92 __inline double nearbyint(double x)
lbajardsilogic@188 93 {
lbajardsilogic@188 94 unsigned int tmpMSW1;
lbajardsilogic@188 95 unsigned int tmpMSW2;
lbajardsilogic@188 96 __asm {
lbajardsilogic@188 97 // get current state
lbajardsilogic@188 98 fnstcw tmpMSW1
lbajardsilogic@188 99 }
lbajardsilogic@188 100 // set bit 5
lbajardsilogic@188 101 tmpMSW2 = tmpMSW1 | 0x00000020;
lbajardsilogic@188 102 __asm {
lbajardsilogic@188 103 // and load
lbajardsilogic@188 104 fldcw tmpMSW2
lbajardsilogic@188 105 // do the job
lbajardsilogic@188 106 fld x
lbajardsilogic@188 107 frndint
lbajardsilogic@188 108 // clear exception
lbajardsilogic@188 109 fclex
lbajardsilogic@188 110 // restore old state
lbajardsilogic@188 111 fldcw tmpMSW1
lbajardsilogic@188 112 }
lbajardsilogic@188 113 }
lbajardsilogic@188 114
lbajardsilogic@188 115 #ifndef isinf
lbajardsilogic@188 116 #define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \
lbajardsilogic@188 117 : ((_fpclass(d) == _FPCLASS_NINF) ? -1 : 0))
lbajardsilogic@188 118 #endif
lbajardsilogic@188 119 /* _isnan(x) returns nonzero if (x == NaN) and zero otherwise. */
lbajardsilogic@188 120 #ifndef isnan
lbajardsilogic@188 121 #define isnan(d) (_isnan(d))
lbajardsilogic@188 122 #endif
lbajardsilogic@188 123
lbajardsilogic@188 124 #define ftruncate _chsize
lbajardsilogic@0 125
lbajardsilogic@0 126 #else /*USE_VC*/
lbajardsilogic@0 127 #include <sys/time.h>
lbajardsilogic@0 128 #include <stdint.h>
lbajardsilogic@0 129 #endif /*USE_VC*/
lbajardsilogic@0 130
lbajardsilogic@0 131 #define MLOCK(a,b) 1
lbajardsilogic@0 132 #define MUNLOCK(a,b) 1
lbajardsilogic@0 133 #define MUNLOCK_SAMPLEBLOCK(a) 1
lbajardsilogic@0 134
lbajardsilogic@0 135 #define DLOPEN(a,b) LoadLibrary((a).toStdWString().c_str())
lbajardsilogic@0 136 #define DLSYM(a,b) GetProcAddress((HINSTANCE)(a),(b))
lbajardsilogic@0 137 #define DLCLOSE(a) (!FreeLibrary((HINSTANCE)(a)))
lbajardsilogic@0 138 #define DLERROR() ""
lbajardsilogic@0 139
lbajardsilogic@0 140 #define PLUGIN_GLOB "*.dll"
lbajardsilogic@0 141 #define PATH_SEPARATOR ';'
lbajardsilogic@0 142
lbajardsilogic@0 143 // The default Vamp plugin path is obtained from a function in the
lbajardsilogic@0 144 // Vamp SDK (Vamp::PluginHostAdapter::getPluginPath).
lbajardsilogic@0 145
lbajardsilogic@0 146 // At the time of writing, at least, the vast majority of LADSPA
lbajardsilogic@0 147 // plugins on Windows hosts will have been put there for use in
lbajardsilogic@0 148 // Audacity. It's a bit of a shame that Audacity uses its own Program
lbajardsilogic@0 149 // Files directory for plugins that any host may want to use... maybe
lbajardsilogic@0 150 // they were just following the example of VSTs, which are usually
lbajardsilogic@0 151 // found in Steinberg's Program Files directory. Anyway, we can
lbajardsilogic@0 152 // greatly increase our chances of picking up some LADSPA plugins by
lbajardsilogic@0 153 // default if we include the Audacity plugin location as well as an
lbajardsilogic@0 154 // (imho) more sensible place.
lbajardsilogic@0 155
lbajardsilogic@0 156 #define DEFAULT_LADSPA_PATH "%ProgramFiles%\\LADSPA Plugins;%ProgramFiles%\\Audacity\\Plug-Ins"
lbajardsilogic@0 157 #define DEFAULT_DSSI_PATH "%ProgramFiles%\\DSSI Plugins"
lbajardsilogic@0 158
lbajardsilogic@0 159 #define getpid _getpid
lbajardsilogic@0 160
lbajardsilogic@0 161 extern "C" {
lbajardsilogic@0 162 void usleep(unsigned long usec);
lbajardsilogic@0 163 void gettimeofday(struct timeval *p, void *tz);
lbajardsilogic@0 164 }
lbajardsilogic@0 165
lbajardsilogic@0 166 #else /* ! _WIN32 */
lbajardsilogic@0 167
lbajardsilogic@191 168 #include <sys/time.h>
lbajardsilogic@191 169 #include <stdint.h>
lbajardsilogic@191 170
lbajardsilogic@0 171 #include <sys/mman.h>
lbajardsilogic@0 172 #include <dlfcn.h>
lbajardsilogic@0 173
lbajardsilogic@0 174 #define MLOCK(a,b) ::mlock((a),(b))
lbajardsilogic@0 175 #define MUNLOCK(a,b) (::munlock((a),(b)) ? (::perror("munlock failed"), 0) : 0)
lbajardsilogic@0 176 #define MUNLOCK_SAMPLEBLOCK(a) do { if (!(a).empty()) { const float &b = *(a).begin(); MUNLOCK(&b, (a).capacity() * sizeof(float)); } } while(0);
lbajardsilogic@0 177 //#define MLOCK(a,b) 1
lbajardsilogic@0 178 //#define MUNLOCK(a,b) 1
lbajardsilogic@0 179 //#define MUNLOCK_SAMPLEBLOCK(a) 1
lbajardsilogic@0 180
lbajardsilogic@0 181 #define DLOPEN(a,b) dlopen((a).toStdString().c_str(),(b))
lbajardsilogic@0 182 #define DLSYM(a,b) dlsym((a),(b))
lbajardsilogic@0 183 #define DLCLOSE(a) dlclose((a))
lbajardsilogic@0 184 #define DLERROR() dlerror()
lbajardsilogic@0 185
lbajardsilogic@0 186 #ifdef __APPLE__
lbajardsilogic@0 187
lbajardsilogic@0 188 #define PLUGIN_GLOB "*.dylib *.so"
lbajardsilogic@0 189 #define PATH_SEPARATOR ':'
lbajardsilogic@0 190
lbajardsilogic@0 191 #define DEFAULT_LADSPA_PATH "$HOME/Library/Audio/Plug-Ins/LADSPA:/Library/Audio/Plug-Ins/LADSPA"
lbajardsilogic@0 192 #define DEFAULT_DSSI_PATH "$HOME/Library/Audio/Plug-Ins/DSSI:/Library/Audio/Plug-Ins/DSSI"
lbajardsilogic@0 193
lbajardsilogic@0 194 #else
lbajardsilogic@0 195
lbajardsilogic@0 196 #define PLUGIN_GLOB "*.so"
lbajardsilogic@0 197 #define PATH_SEPARATOR ':'
lbajardsilogic@0 198
lbajardsilogic@0 199 #define DEFAULT_LADSPA_PATH "$HOME/ladspa:$HOME/.ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"
lbajardsilogic@0 200 #define DEFAULT_DSSI_PATH "$HOME/dssi:$HOME/.dssi:/usr/local/lib/dssi:/usr/lib/dssi"
lbajardsilogic@0 201
lbajardsilogic@0 202 #endif /* __APPLE__ */
lbajardsilogic@0 203
lbajardsilogic@0 204 #endif /* ! _WIN32 */
lbajardsilogic@0 205
lbajardsilogic@188 206 #include <cmath>
lbajardsilogic@188 207 #include <algorithm>
lbajardsilogic@188 208
lbajardsilogic@188 209 #ifdef __GNUC__
lbajardsilogic@188 210
lbajardsilogic@188 211 #ifndef MIN
lbajardsilogic@188 212 #define MIN(x, y) std::min(x, y)
lbajardsilogic@0 213 #endif
lbajardsilogic@188 214
lbajardsilogic@188 215 #ifndef MAX
lbajardsilogic@188 216 #define MAX(x, y) std::max(x, y)
lbajardsilogic@0 217 #endif
lbajardsilogic@188 218
lbajardsilogic@190 219 #ifndef ISNAN
lbajardsilogic@190 220 #define ISNAN(x) std::isnan((x))
lbajardsilogic@188 221 #endif
lbajardsilogic@188 222
lbajardsilogic@190 223 #ifndef ISINF
lbajardsilogic@190 224 #define ISINF(x) std::isinf((x))
lbajardsilogic@0 225 #endif
lbajardsilogic@0 226
lbajardsilogic@0 227 #endif /* __GNUC__ */
lbajardsilogic@0 228
lbajardsilogic@0 229 enum ProcessStatus { ProcessRunning, ProcessNotRunning, UnknownProcessStatus };
lbajardsilogic@0 230 extern ProcessStatus GetProcessStatus(int pid);
lbajardsilogic@0 231
lbajardsilogic@0 232 // Return a vague approximation to the number of free megabytes of real memory.
lbajardsilogic@0 233 // Return -1 if unknown.
lbajardsilogic@0 234 extern void GetRealMemoryMBAvailable(int &available, int &total);
lbajardsilogic@0 235
lbajardsilogic@0 236 // Return a vague approximation to the number of free megabytes of disc space
lbajardsilogic@0 237 // on the partition containing the given path. Return -1 if unknown.
lbajardsilogic@0 238 extern int GetDiscSpaceMBAvailable(const char *path);
lbajardsilogic@0 239
lbajardsilogic@188 240 //#include <cmath>
lbajardsilogic@0 241
lbajardsilogic@0 242 extern double mod(double x, double y);
lbajardsilogic@0 243 extern float modf(float x, float y);
lbajardsilogic@0 244
lbajardsilogic@0 245 extern double princarg(double a);
lbajardsilogic@0 246 extern float princargf(float a);
lbajardsilogic@0 247
lbajardsilogic@0 248 #endif /* ! _SYSTEM_H_ */
lbajardsilogic@0 249
lbajardsilogic@0 250