annotate system/System.h @ 0:fc9323a41f5a

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