annotate system/System.h @ 661:a4faa1840384

* If a FileSource URL won't convert at all in strict mode, try again in tolerant mode (necessary for e.g. filenames with square brackets in them)
author Chris Cannam
date Tue, 19 Oct 2010 21:47:55 +0100
parents 1415e35881f6
children badbbf0921fa
rev   line source
Chris@150 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@150 2
Chris@150 3 /*
Chris@150 4 Sonic Visualiser
Chris@150 5 An audio file viewer and annotation editor.
Chris@150 6 Centre for Digital Music, Queen Mary, University of London.
Chris@202 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@150 8
Chris@150 9 This program is free software; you can redistribute it and/or
Chris@150 10 modify it under the terms of the GNU General Public License as
Chris@150 11 published by the Free Software Foundation; either version 2 of the
Chris@150 12 License, or (at your option) any later version. See the file
Chris@150 13 COPYING included with this distribution for more information.
Chris@150 14 */
Chris@150 15
Chris@150 16 #ifndef _SYSTEM_H_
Chris@150 17 #define _SYSTEM_H_
Chris@150 18
Chris@150 19 #ifdef _WIN32
Chris@150 20
Chris@150 21 #include <windows.h>
Chris@150 22 #include <malloc.h>
Chris@150 23 #include <process.h>
Chris@606 24 #include <math.h>
Chris@150 25
Chris@150 26 #define MLOCK(a,b) 1
Chris@150 27 #define MUNLOCK(a,b) 1
Chris@150 28 #define MUNLOCK_SAMPLEBLOCK(a) 1
Chris@368 29 #define MUNLOCKALL() 1
Chris@150 30
Chris@150 31 #define DLOPEN(a,b) LoadLibrary((a).toStdWString().c_str())
Chris@150 32 #define DLSYM(a,b) GetProcAddress((HINSTANCE)(a),(b))
Chris@223 33 #define DLCLOSE(a) (!FreeLibrary((HINSTANCE)(a)))
Chris@150 34 #define DLERROR() ""
Chris@150 35
Chris@150 36 #define PLUGIN_GLOB "*.dll"
Chris@223 37 #define PATH_SEPARATOR ';'
Chris@186 38
Chris@219 39 // The default Vamp plugin path is obtained from a function in the
Chris@219 40 // Vamp SDK (Vamp::PluginHostAdapter::getPluginPath).
Chris@186 41
Chris@219 42 // At the time of writing, at least, the vast majority of LADSPA
Chris@219 43 // plugins on Windows hosts will have been put there for use in
Chris@219 44 // Audacity. It's a bit of a shame that Audacity uses its own Program
Chris@219 45 // Files directory for plugins that any host may want to use... maybe
Chris@219 46 // they were just following the example of VSTs, which are usually
Chris@219 47 // found in Steinberg's Program Files directory. Anyway, we can
Chris@219 48 // greatly increase our chances of picking up some LADSPA plugins by
Chris@219 49 // default if we include the Audacity plugin location as well as an
Chris@219 50 // (imho) more sensible place.
Chris@219 51
Chris@223 52 #define DEFAULT_LADSPA_PATH "%ProgramFiles%\\LADSPA Plugins;%ProgramFiles%\\Audacity\\Plug-Ins"
Chris@186 53 #define DEFAULT_DSSI_PATH "%ProgramFiles%\\DSSI Plugins"
Chris@150 54
Chris@150 55 #define getpid _getpid
Chris@150 56
Chris@150 57 extern "C" {
Chris@150 58 void usleep(unsigned long usec);
Chris@501 59 int gettimeofday(struct timeval *p, void *tz);
Chris@150 60 }
Chris@150 61
Chris@606 62 #define ISNAN isnan
Chris@606 63 #define ISINF isinf
Chris@606 64
Chris@150 65 #else
Chris@150 66
Chris@150 67 #include <sys/mman.h>
Chris@150 68 #include <dlfcn.h>
Chris@602 69 #include <stdio.h> // for perror
Chris@606 70 #include <cmath>
Chris@150 71
Chris@150 72 #define MLOCK(a,b) ::mlock((a),(b))
Chris@150 73 #define MUNLOCK(a,b) (::munlock((a),(b)) ? (::perror("munlock failed"), 0) : 0)
Chris@150 74 #define MUNLOCK_SAMPLEBLOCK(a) do { if (!(a).empty()) { const float &b = *(a).begin(); MUNLOCK(&b, (a).capacity() * sizeof(float)); } } while(0);
Chris@232 75 //#define MLOCK(a,b) 1
Chris@232 76 //#define MUNLOCK(a,b) 1
Chris@232 77 //#define MUNLOCK_SAMPLEBLOCK(a) 1
Chris@150 78
Chris@150 79 #define DLOPEN(a,b) dlopen((a).toStdString().c_str(),(b))
Chris@150 80 #define DLSYM(a,b) dlsym((a),(b))
Chris@150 81 #define DLCLOSE(a) dlclose((a))
Chris@150 82 #define DLERROR() dlerror()
Chris@150 83
Chris@606 84 #include <cmath>
Chris@606 85 #define ISNAN std::isnan
Chris@606 86 #define ISINF std::isinf
Chris@606 87
Chris@150 88 #ifdef __APPLE__
Chris@150 89
Chris@255 90 #define PLUGIN_GLOB "*.dylib *.so"
Chris@223 91 #define PATH_SEPARATOR ':'
Chris@186 92
Chris@186 93 #define DEFAULT_LADSPA_PATH "$HOME/Library/Audio/Plug-Ins/LADSPA:/Library/Audio/Plug-Ins/LADSPA"
Chris@186 94 #define DEFAULT_DSSI_PATH "$HOME/Library/Audio/Plug-Ins/DSSI:/Library/Audio/Plug-Ins/DSSI"
Chris@150 95
Chris@368 96 #define MUNLOCKALL() 1
Chris@368 97
Chris@150 98 #else
Chris@150 99
Chris@606 100 #ifdef sun
Chris@606 101 #undef MLOCK
Chris@606 102 #undef MUNLOCK
Chris@606 103 #define MLOCK(a,b) ::mlock((char *)a,b)
Chris@606 104 #define MUNLOCK(a,b) ::munlock((char *)a,b)
Chris@606 105 #ifdef __SUNPRO_CC
Chris@606 106 #undef ISNAN
Chris@606 107 #undef ISINF
Chris@606 108 #define ISNAN(x) ((x)!=(x))
Chris@606 109 #define ISINF(x) 0
Chris@606 110 #endif
Chris@606 111 #endif
Chris@606 112
Chris@150 113 #define PLUGIN_GLOB "*.so"
Chris@223 114 #define PATH_SEPARATOR ':'
Chris@186 115
Chris@186 116 #define DEFAULT_LADSPA_PATH "$HOME/ladspa:$HOME/.ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"
Chris@186 117 #define DEFAULT_DSSI_PATH "$HOME/dssi:$HOME/.dssi:/usr/local/lib/dssi:/usr/lib/dssi"
Chris@150 118
Chris@368 119 #define MUNLOCKALL() ::munlockall()
Chris@368 120
Chris@150 121 #endif /* __APPLE__ */
Chris@150 122
Chris@150 123 #endif /* ! _WIN32 */
Chris@150 124
Chris@150 125 enum ProcessStatus { ProcessRunning, ProcessNotRunning, UnknownProcessStatus };
Chris@150 126 extern ProcessStatus GetProcessStatus(int pid);
Chris@150 127
Chris@168 128 // Return a vague approximation to the number of free megabytes of real memory.
Chris@168 129 // Return -1 if unknown.
Chris@170 130 extern void GetRealMemoryMBAvailable(int &available, int &total);
Chris@168 131
Chris@168 132 // Return a vague approximation to the number of free megabytes of disc space
Chris@168 133 // on the partition containing the given path. Return -1 if unknown.
Chris@168 134 extern int GetDiscSpaceMBAvailable(const char *path);
Chris@168 135
Chris@303 136 extern void StoreStartupLocale();
Chris@303 137 extern void RestoreStartupLocale();
Chris@303 138
Chris@150 139 #include <cmath>
Chris@150 140
Chris@150 141 extern double mod(double x, double y);
Chris@150 142 extern float modf(float x, float y);
Chris@150 143
Chris@150 144 extern double princarg(double a);
Chris@150 145 extern float princargf(float a);
Chris@150 146
Chris@573 147 #ifdef USE_POW_NO_F
Chris@573 148 #define powf pow
Chris@573 149 #endif
Chris@573 150
Chris@150 151 #endif /* ! _SYSTEM_H_ */
Chris@150 152
Chris@150 153