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