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
|