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
|