diff --git a/3rdparty/README.md b/3rdparty/README.md index f60fb7c168b..00616b7773d 100644 --- a/3rdparty/README.md +++ b/3rdparty/README.md @@ -24,11 +24,11 @@ genie - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) glm - [The MIT License (MIT)](http://opensource.org/licenses/MIT) -libflac - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) +libflac - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) (codecs), [The GNU General Public License, version 2](https://opensource.org/licenses/GPL-2.0) libjpeg - [Custom BSD-like](https://github.com/numenta/nupic/blob/master/external/licenses/LICENSE.libjpeg-6b.txt) -linenoise-ng - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) +linenoise - [The BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause) lsqlite3 - [The MIT License (MIT)](http://opensource.org/licenses/MIT) @@ -40,7 +40,7 @@ lua-zlib - [The MIT License (MIT)](http://opensource.org/licenses/MIT) luafilesystem - [The MIT License (MIT)](http://opensource.org/licenses/MIT) -lzma - [The GNU Lesser General Public License](http://opensource.org/licenses/LGPL-2.1) +lzma - Custom public domain license minimp3 - [Creative Commons Zero v1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) @@ -52,7 +52,7 @@ portmidi - [The MIT License (MIT)](http://opensource.org/licenses/MIT) pugixml - [The MIT License (MIT)](http://opensource.org/licenses/MIT) -rapidjson - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) +rapidjson - [The MIT License (MIT)](http://opensource.org/licenses/MIT), [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) (msinttypes), JSON license (JSON_checker) sdl2 - [zlib license](http://opensource.org/licenses/Zlib) @@ -62,12 +62,14 @@ softfloat3 - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Cla sol2 - [The MIT License (MIT)](http://opensource.org/licenses/MIT) -sqlite3 - Public Domain +sqlite3 - Custom public domain license tap-windows6.h - Dual-licensed [The GNU General Public License, version 2](https://opensource.org/licenses/GPL-2.0) and [The MIT License (MIT)](http://opensource.org/licenses/MIT) utf8proc - [The MIT License (MIT)](http://opensource.org/licenses/MIT) +wdlfft - [zlib license](http://opensource.org/licenses/Zlib) + winpcap - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) zlib - [zlib license](http://opensource.org/licenses/Zlib) diff --git a/3rdparty/wdlfft/fft.c b/3rdparty/wdlfft/fft.c new file mode 100644 index 00000000000..8b15d6ca35b --- /dev/null +++ b/3rdparty/wdlfft/fft.c @@ -0,0 +1,1199 @@ +/* + WDL - fft.cpp + Copyright (C) 2006 and later Cockos Incorporated + Copyright 1999 D. J. Bernstein + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + + + This file implements the WDL FFT library. These routines are based on the + DJBFFT library, which are Copyright 1999 D. J. Bernstein, djb@pobox.com + + The DJB FFT web page is: http://cr.yp.to/djbfft.html + +*/ + + +// this is based on djbfft + +#include +#include "fft.h" + + +#define FFT_MAXBITLEN 15 + +#ifdef _MSC_VER +#define inline __inline +#endif + +#define PI 3.1415926535897932384626433832795 + +static WDL_FFT_COMPLEX d16[3]; +static WDL_FFT_COMPLEX d32[7]; +static WDL_FFT_COMPLEX d64[15]; +static WDL_FFT_COMPLEX d128[31]; +static WDL_FFT_COMPLEX d256[63]; +static WDL_FFT_COMPLEX d512[127]; +static WDL_FFT_COMPLEX d1024[127]; +static WDL_FFT_COMPLEX d2048[255]; +static WDL_FFT_COMPLEX d4096[511]; +static WDL_FFT_COMPLEX d8192[1023]; +static WDL_FFT_COMPLEX d16384[2047]; +static WDL_FFT_COMPLEX d32768[4095]; + + +#define sqrthalf (d16[1].re) + +#define VOL *(volatile WDL_FFT_REAL *)& + +#define TRANSFORM(a0,a1,a2,a3,wre,wim) { \ + t6 = a2.re; \ + t1 = a0.re - t6; \ + t6 += a0.re; \ + a0.re = t6; \ + t3 = a3.im; \ + t4 = a1.im - t3; \ + t8 = t1 - t4; \ + t1 += t4; \ + t3 += a1.im; \ + a1.im = t3; \ + t5 = wre; \ + t7 = t8 * t5; \ + t4 = t1 * t5; \ + t8 *= wim; \ + t2 = a3.re; \ + t3 = a1.re - t2; \ + t2 += a1.re; \ + a1.re = t2; \ + t1 *= wim; \ + t6 = a2.im; \ + t2 = a0.im - t6; \ + t6 += a0.im; \ + a0.im = t6; \ + t6 = t2 + t3; \ + t2 -= t3; \ + t3 = t6 * wim; \ + t7 -= t3; \ + a2.re = t7; \ + t6 *= t5; \ + t6 += t8; \ + a2.im = t6; \ + t5 *= t2; \ + t5 -= t1; \ + a3.im = t5; \ + t2 *= wim; \ + t4 += t2; \ + a3.re = t4; \ + } + +#define TRANSFORMHALF(a0,a1,a2,a3) { \ + t1 = a2.re; \ + t5 = a0.re - t1; \ + t1 += a0.re; \ + a0.re = t1; \ + t4 = a3.im; \ + t8 = a1.im - t4; \ + t1 = t5 - t8; \ + t5 += t8; \ + t4 += a1.im; \ + a1.im = t4; \ + t3 = a3.re; \ + t7 = a1.re - t3; \ + t3 += a1.re; \ + a1.re = t3; \ + t8 = a2.im; \ + t6 = a0.im - t8; \ + t2 = t6 + t7; \ + t6 -= t7; \ + t8 += a0.im; \ + a0.im = t8; \ + t4 = t6 + t5; \ + t3 = sqrthalf; \ + t4 *= t3; \ + a3.re = t4; \ + t6 -= t5; \ + t6 *= t3; \ + a3.im = t6; \ + t7 = t1 - t2; \ + t7 *= t3; \ + a2.re = t7; \ + t2 += t1; \ + t2 *= t3; \ + a2.im = t2; \ + } + +#define TRANSFORMZERO(a0,a1,a2,a3) { \ + t5 = a2.re; \ + t1 = a0.re - t5; \ + t5 += a0.re; \ + a0.re = t5; \ + t8 = a3.im; \ + t4 = a1.im - t8; \ + t7 = a3.re; \ + t6 = t1 - t4; \ + a2.re = t6; \ + t1 += t4; \ + a3.re = t1; \ + t8 += a1.im; \ + a1.im = t8; \ + t3 = a1.re - t7; \ + t7 += a1.re; \ + a1.re = t7; \ + t6 = a2.im; \ + t2 = a0.im - t6; \ + t7 = t2 + t3; \ + a2.im = t7; \ + t2 -= t3; \ + a3.im = t2; \ + t6 += a0.im; \ + a0.im = t6; \ + } + +#define UNTRANSFORM(a0,a1,a2,a3,wre,wim) { \ + t6 = VOL wre; \ + t1 = VOL a2.re; \ + t1 *= t6; \ + t8 = VOL wim; \ + t3 = VOL a2.im; \ + t3 *= t8; \ + t2 = VOL a2.im; \ + t4 = VOL a2.re; \ + t5 = VOL a3.re; \ + t5 *= t6; \ + t7 = VOL a3.im; \ + t1 += t3; \ + t7 *= t8; \ + t5 -= t7; \ + t3 = t5 + t1; \ + t5 -= t1; \ + t2 *= t6; \ + t6 *= a3.im; \ + t4 *= t8; \ + t2 -= t4; \ + t8 *= a3.re; \ + t6 += t8; \ + t1 = a0.re - t3; \ + t3 += a0.re; \ + a0.re = t3; \ + t7 = a1.im - t5; \ + t5 += a1.im; \ + a1.im = t5; \ + t4 = t2 - t6; \ + t6 += t2; \ + t8 = a1.re - t4; \ + t4 += a1.re; \ + a1.re = t4; \ + t2 = a0.im - t6; \ + t6 += a0.im; \ + a0.im = t6; \ + a2.re = t1; \ + a3.im = t7; \ + a3.re = t8; \ + a2.im = t2; \ + } + + +#define UNTRANSFORMHALF(a0,a1,a2,a3) { \ + t6 = sqrthalf; \ + t1 = a2.re; \ + t2 = a2.im - t1; \ + t2 *= t6; \ + t1 += a2.im; \ + t1 *= t6; \ + t4 = a3.im; \ + t3 = a3.re - t4; \ + t3 *= t6; \ + t4 += a3.re; \ + t4 *= t6; \ + t8 = t3 - t1; \ + t7 = t2 - t4; \ + t1 += t3; \ + t2 += t4; \ + t4 = a1.im - t8; \ + a3.im = t4; \ + t8 += a1.im; \ + a1.im = t8; \ + t3 = a1.re - t7; \ + a3.re = t3; \ + t7 += a1.re; \ + a1.re = t7; \ + t5 = a0.re - t1; \ + a2.re = t5; \ + t1 += a0.re; \ + a0.re = t1; \ + t6 = a0.im - t2; \ + a2.im = t6; \ + t2 += a0.im; \ + a0.im = t2; \ + } + +#define UNTRANSFORMZERO(a0,a1,a2,a3) { \ + t2 = a3.im; \ + t3 = a2.im - t2; \ + t2 += a2.im; \ + t1 = a2.re; \ + t4 = a3.re - t1; \ + t1 += a3.re; \ + t5 = a0.re - t1; \ + a2.re = t5; \ + t6 = a0.im - t2; \ + a2.im = t6; \ + t7 = a1.re - t3; \ + a3.re = t7; \ + t8 = a1.im - t4; \ + a3.im = t8; \ + t1 += a0.re; \ + a0.re = t1; \ + t2 += a0.im; \ + a0.im = t2; \ + t3 += a1.re; \ + a1.re = t3; \ + t4 += a1.im; \ + a1.im = t4; \ + } + +static void c2(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1; + + t1 = a[1].re; + a[1].re = a[0].re - t1; + a[0].re += t1; + + t1 = a[1].im; + a[1].im = a[0].im - t1; + a[0].im += t1; +} + +static inline void c4(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + + t5 = a[2].re; + t1 = a[0].re - t5; + t7 = a[3].re; + t5 += a[0].re; + t3 = a[1].re - t7; + t7 += a[1].re; + t8 = t5 + t7; + a[0].re = t8; + t5 -= t7; + a[1].re = t5; + t6 = a[2].im; + t2 = a[0].im - t6; + t6 += a[0].im; + t5 = a[3].im; + a[2].im = t2 + t3; + t2 -= t3; + a[3].im = t2; + t4 = a[1].im - t5; + a[3].re = t1 + t4; + t1 -= t4; + a[2].re = t1; + t5 += a[1].im; + a[0].im = t6 + t5; + t6 -= t5; + a[1].im = t6; +} + +static void c8(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + + t7 = a[4].im; + t4 = a[0].im - t7; + t7 += a[0].im; + a[0].im = t7; + + t8 = a[6].re; + t5 = a[2].re - t8; + t8 += a[2].re; + a[2].re = t8; + + t7 = a[6].im; + a[6].im = t4 - t5; + t4 += t5; + a[4].im = t4; + + t6 = a[2].im - t7; + t7 += a[2].im; + a[2].im = t7; + + t8 = a[4].re; + t3 = a[0].re - t8; + t8 += a[0].re; + a[0].re = t8; + + a[4].re = t3 - t6; + t3 += t6; + a[6].re = t3; + + t7 = a[5].re; + t3 = a[1].re - t7; + t7 += a[1].re; + a[1].re = t7; + + t8 = a[7].im; + t6 = a[3].im - t8; + t8 += a[3].im; + a[3].im = t8; + t1 = t3 - t6; + t3 += t6; + + t7 = a[5].im; + t4 = a[1].im - t7; + t7 += a[1].im; + a[1].im = t7; + + t8 = a[7].re; + t5 = a[3].re - t8; + t8 += a[3].re; + a[3].re = t8; + + t2 = t4 - t5; + t4 += t5; + + t6 = t1 - t4; + t8 = sqrthalf; + t6 *= t8; + a[5].re = a[4].re - t6; + t1 += t4; + t1 *= t8; + a[5].im = a[4].im - t1; + t6 += a[4].re; + a[4].re = t6; + t1 += a[4].im; + a[4].im = t1; + + t5 = t2 - t3; + t5 *= t8; + a[7].im = a[6].im - t5; + t2 += t3; + t2 *= t8; + a[7].re = a[6].re - t2; + t2 += a[6].re; + a[6].re = t2; + t5 += a[6].im; + a[6].im = t5; + + c4(a); +} + +static void c16(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + + TRANSFORMZERO(a[0],a[4],a[8],a[12]); + TRANSFORM(a[1],a[5],a[9],a[13],d16[0].re,d16[0].im); + TRANSFORMHALF(a[2],a[6],a[10],a[14]); + TRANSFORM(a[3],a[7],a[11],a[15],d16[0].im,d16[0].re); + c4(a + 8); + c4(a + 12); + + c8(a); +} + +/* a[0...8n-1], w[0...2n-2]; n >= 2 */ +static void cpass(register WDL_FFT_COMPLEX *a,register const WDL_FFT_COMPLEX *w,register unsigned int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + register WDL_FFT_COMPLEX *a1; + register WDL_FFT_COMPLEX *a2; + register WDL_FFT_COMPLEX *a3; + + a2 = a + 4 * n; + a1 = a + 2 * n; + a3 = a2 + 2 * n; + --n; + + TRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); + TRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); + + for (;;) { + TRANSFORM(a[2],a1[2],a2[2],a3[2],w[1].re,w[1].im); + TRANSFORM(a[3],a1[3],a2[3],a3[3],w[2].re,w[2].im); + if (!--n) break; + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + w += 2; + } +} + +static void c32(register WDL_FFT_COMPLEX *a) +{ + cpass(a,d32,4); + c8(a + 16); + c8(a + 24); + c16(a); +} + +static void c64(register WDL_FFT_COMPLEX *a) +{ + cpass(a,d64,8); + c16(a + 32); + c16(a + 48); + c32(a); +} + +static void c128(register WDL_FFT_COMPLEX *a) +{ + cpass(a,d128,16); + c32(a + 64); + c32(a + 96); + c64(a); +} + +static void c256(register WDL_FFT_COMPLEX *a) +{ + cpass(a,d256,32); + c64(a + 128); + c64(a + 192); + c128(a); +} + +static void c512(register WDL_FFT_COMPLEX *a) +{ + cpass(a,d512,64); + c128(a + 384); + c128(a + 256); + c256(a); +} + +/* a[0...8n-1], w[0...n-2]; n even, n >= 4 */ +static void cpassbig(register WDL_FFT_COMPLEX *a,register const WDL_FFT_COMPLEX *w,register unsigned int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + register WDL_FFT_COMPLEX *a1; + register WDL_FFT_COMPLEX *a2; + register WDL_FFT_COMPLEX *a3; + register unsigned int k; + + a2 = a + 4 * n; + a1 = a + 2 * n; + a3 = a2 + 2 * n; + k = n - 2; + + TRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); + TRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + + do { + TRANSFORM(a[0],a1[0],a2[0],a3[0],w[1].re,w[1].im); + TRANSFORM(a[1],a1[1],a2[1],a3[1],w[2].re,w[2].im); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + w += 2; + } while (k -= 2); + + TRANSFORMHALF(a[0],a1[0],a2[0],a3[0]); + TRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].im,w[0].re); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + + k = n - 2; + do { + TRANSFORM(a[0],a1[0],a2[0],a3[0],w[-1].im,w[-1].re); + TRANSFORM(a[1],a1[1],a2[1],a3[1],w[-2].im,w[-2].re); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + w -= 2; + } while (k -= 2); +} + + +static void c1024(register WDL_FFT_COMPLEX *a) +{ + cpassbig(a,d1024,128); + c256(a + 768); + c256(a + 512); + c512(a); +} + +static void c2048(register WDL_FFT_COMPLEX *a) +{ + cpassbig(a,d2048,256); + c512(a + 1536); + c512(a + 1024); + c1024(a); +} + +static void c4096(register WDL_FFT_COMPLEX *a) +{ + cpassbig(a,d4096,512); + c1024(a + 3072); + c1024(a + 2048); + c2048(a); +} + +static void c8192(register WDL_FFT_COMPLEX *a) +{ + cpassbig(a,d8192,1024); + c2048(a + 6144); + c2048(a + 4096); + c4096(a); +} + +static void c16384(register WDL_FFT_COMPLEX *a) +{ + cpassbig(a,d16384,2048); + c4096(a + 8192 + 4096); + c4096(a + 8192); + c8192(a); +} + +static void c32768(register WDL_FFT_COMPLEX *a) +{ + cpassbig(a,d32768,4096); + c8192(a + 16384 + 8192); + c8192(a + 16384); + c16384(a); +} + + +/* n even, n > 0 */ +void WDL_fft_complexmul(WDL_FFT_COMPLEX *a,WDL_FFT_COMPLEX *b,int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + if (n<2 || (n&1)) return; + + do { + t1 = a[0].re * b[0].re; + t2 = a[0].im * b[0].im; + t3 = a[0].im * b[0].re; + t4 = a[0].re * b[0].im; + t5 = a[1].re * b[1].re; + t6 = a[1].im * b[1].im; + t7 = a[1].im * b[1].re; + t8 = a[1].re * b[1].im; + t1 -= t2; + t3 += t4; + t5 -= t6; + t7 += t8; + a[0].re = t1; + a[1].re = t5; + a[0].im = t3; + a[1].im = t7; + a += 2; + b += 2; + } while (n -= 2); +} + +void WDL_fft_complexmul2(WDL_FFT_COMPLEX *c, WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + if (n<2 || (n&1)) return; + + do { + t1 = a[0].re * b[0].re; + t2 = a[0].im * b[0].im; + t3 = a[0].im * b[0].re; + t4 = a[0].re * b[0].im; + t5 = a[1].re * b[1].re; + t6 = a[1].im * b[1].im; + t7 = a[1].im * b[1].re; + t8 = a[1].re * b[1].im; + t1 -= t2; + t3 += t4; + t5 -= t6; + t7 += t8; + c[0].re = t1; + c[1].re = t5; + c[0].im = t3; + c[1].im = t7; + a += 2; + b += 2; + c += 2; + } while (n -= 2); +} +void WDL_fft_complexmul3(WDL_FFT_COMPLEX *c, WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + if (n<2 || (n&1)) return; + + do { + t1 = a[0].re * b[0].re; + t2 = a[0].im * b[0].im; + t3 = a[0].im * b[0].re; + t4 = a[0].re * b[0].im; + t5 = a[1].re * b[1].re; + t6 = a[1].im * b[1].im; + t7 = a[1].im * b[1].re; + t8 = a[1].re * b[1].im; + t1 -= t2; + t3 += t4; + t5 -= t6; + t7 += t8; + c[0].re += t1; + c[1].re += t5; + c[0].im += t3; + c[1].im += t7; + a += 2; + b += 2; + c += 2; + } while (n -= 2); +} + + +static inline void u4(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + + t1 = VOL a[1].re; + t3 = a[0].re - t1; + t6 = VOL a[2].re; + t1 += a[0].re; + t8 = a[3].re - t6; + t6 += a[3].re; + a[0].re = t1 + t6; + t1 -= t6; + a[2].re = t1; + + t2 = VOL a[1].im; + t4 = a[0].im - t2; + t2 += a[0].im; + t5 = VOL a[3].im; + a[1].im = t4 + t8; + t4 -= t8; + a[3].im = t4; + + t7 = a[2].im - t5; + t5 += a[2].im; + a[1].re = t3 + t7; + t3 -= t7; + a[3].re = t3; + a[0].im = t2 + t5; + t2 -= t5; + a[2].im = t2; +} + +static void u8(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + + u4(a); + + t1 = a[5].re; + a[5].re = a[4].re - t1; + t1 += a[4].re; + + t3 = a[7].re; + a[7].re = a[6].re - t3; + t3 += a[6].re; + + t8 = t3 - t1; + t1 += t3; + + t6 = a[2].im - t8; + t8 += a[2].im; + a[2].im = t8; + + t5 = a[0].re - t1; + a[4].re = t5; + t1 += a[0].re; + a[0].re = t1; + + t2 = a[5].im; + a[5].im = a[4].im - t2; + t2 += a[4].im; + + t4 = a[7].im; + a[7].im = a[6].im - t4; + t4 += a[6].im; + + a[6].im = t6; + + t7 = t2 - t4; + t2 += t4; + + t3 = a[2].re - t7; + a[6].re = t3; + t7 += a[2].re; + a[2].re = t7; + + t6 = a[0].im - t2; + a[4].im = t6; + t2 += a[0].im; + a[0].im = t2; + + t6 = sqrthalf; + + t1 = a[5].re; + t2 = a[5].im - t1; + t2 *= t6; + t1 += a[5].im; + t1 *= t6; + t4 = a[7].im; + t3 = a[7].re - t4; + t3 *= t6; + t4 += a[7].re; + t4 *= t6; + + t8 = t3 - t1; + t1 += t3; + t7 = t2 - t4; + t2 += t4; + + t4 = a[3].im - t8; + a[7].im = t4; + t5 = a[1].re - t1; + a[5].re = t5; + t3 = a[3].re - t7; + a[7].re = t3; + t6 = a[1].im - t2; + a[5].im = t6; + + t8 += a[3].im; + a[3].im = t8; + t1 += a[1].re; + a[1].re = t1; + t7 += a[3].re; + a[3].re = t7; + t2 += a[1].im; + a[1].im = t2; +} + +static void u16(register WDL_FFT_COMPLEX *a) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + + u8(a); + u4(a + 8); + u4(a + 12); + + UNTRANSFORMZERO(a[0],a[4],a[8],a[12]); + UNTRANSFORMHALF(a[2],a[6],a[10],a[14]); + UNTRANSFORM(a[1],a[5],a[9],a[13],d16[0].re,d16[0].im); + UNTRANSFORM(a[3],a[7],a[11],a[15],d16[0].im,d16[0].re); +} + +/* a[0...8n-1], w[0...2n-2] */ +static void upass(register WDL_FFT_COMPLEX *a,register const WDL_FFT_COMPLEX *w,register unsigned int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + register WDL_FFT_COMPLEX *a1; + register WDL_FFT_COMPLEX *a2; + register WDL_FFT_COMPLEX *a3; + + a2 = a + 4 * n; + a1 = a + 2 * n; + a3 = a2 + 2 * n; + n -= 1; + + UNTRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); + UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); + + for (;;) { + UNTRANSFORM(a[2],a1[2],a2[2],a3[2],w[1].re,w[1].im); + UNTRANSFORM(a[3],a1[3],a2[3],a3[3],w[2].re,w[2].im); + if (!--n) break; + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + w += 2; + } +} + +static void u32(register WDL_FFT_COMPLEX *a) +{ + u16(a); + u8(a + 16); + u8(a + 24); + upass(a,d32,4); +} + +static void u64(register WDL_FFT_COMPLEX *a) +{ + u32(a); + u16(a + 32); + u16(a + 48); + upass(a,d64,8); +} + +static void u128(register WDL_FFT_COMPLEX *a) +{ + u64(a); + u32(a + 64); + u32(a + 96); + upass(a,d128,16); +} + +static void u256(register WDL_FFT_COMPLEX *a) +{ + u128(a); + u64(a + 128); + u64(a + 192); + upass(a,d256,32); +} + +static void u512(register WDL_FFT_COMPLEX *a) +{ + u256(a); + u128(a + 256); + u128(a + 384); + upass(a,d512,64); +} + + +/* a[0...8n-1], w[0...n-2]; n even, n >= 4 */ +static void upassbig(register WDL_FFT_COMPLEX *a,register const WDL_FFT_COMPLEX *w,register unsigned int n) +{ + register WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; + register WDL_FFT_COMPLEX *a1; + register WDL_FFT_COMPLEX *a2; + register WDL_FFT_COMPLEX *a3; + register unsigned int k; + + a2 = a + 4 * n; + a1 = a + 2 * n; + a3 = a2 + 2 * n; + k = n - 2; + + UNTRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); + UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + + do { + UNTRANSFORM(a[0],a1[0],a2[0],a3[0],w[1].re,w[1].im); + UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[2].re,w[2].im); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + w += 2; + } while (k -= 2); + + UNTRANSFORMHALF(a[0],a1[0],a2[0],a3[0]); + UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].im,w[0].re); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + + k = n - 2; + do { + UNTRANSFORM(a[0],a1[0],a2[0],a3[0],w[-1].im,w[-1].re); + UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[-2].im,w[-2].re); + a += 2; + a1 += 2; + a2 += 2; + a3 += 2; + w -= 2; + } while (k -= 2); +} + + + +static void u1024(register WDL_FFT_COMPLEX *a) +{ + u512(a); + u256(a + 512); + u256(a + 768); + upassbig(a,d1024,128); +} + +static void u2048(register WDL_FFT_COMPLEX *a) +{ + u1024(a); + u512(a + 1024); + u512(a + 1536); + upassbig(a,d2048,256); +} + + +static void u4096(register WDL_FFT_COMPLEX *a) +{ + u2048(a); + u1024(a + 2048); + u1024(a + 3072); + upassbig(a,d4096,512); +} + +static void u8192(register WDL_FFT_COMPLEX *a) +{ + u4096(a); + u2048(a + 4096); + u2048(a + 6144); + upassbig(a,d8192,1024); +} + +static void u16384(register WDL_FFT_COMPLEX *a) +{ + u8192(a); + u4096(a + 8192); + u4096(a + 8192 + 4096); + upassbig(a,d16384,2048); +} + +static void u32768(register WDL_FFT_COMPLEX *a) +{ + u16384(a); + u8192(a + 16384); + u8192(a + 16384 + 8192 ); + upassbig(a,d32768,4096); +} + + +static void __fft_gen(WDL_FFT_COMPLEX *buf, const WDL_FFT_COMPLEX *buf2, int sz, int isfull) +{ + int x; + double div=PI*0.25/(sz+1); + + if (isfull) div*=2.0; + + for (x = 0; x < sz; x ++) + { + if (!(x & 1) || !buf2) + { + buf[x].re = (WDL_FFT_REAL) cos((x+1)*div); + buf[x].im = (WDL_FFT_REAL) sin((x+1)*div); + } + else + { + buf[x].re = buf2[x >> 1].re; + buf[x].im = buf2[x >> 1].im; + } + } +} + +#ifndef WDL_FFT_NO_PERMUTE + +static unsigned int fftfreq_c(unsigned int i,unsigned int n) +{ + unsigned int m; + + if (n <= 2) return i; + + m = n >> 1; + if (i < m) return fftfreq_c(i,m) << 1; + + i -= m; + m >>= 1; + if (i < m) return (fftfreq_c(i,m) << 2) + 1; + i -= m; + return ((fftfreq_c(i,m) << 2) - 1) & (n - 1); +} + +static int _idxperm[2<> 1, quart = half >> 1, eighth = quart >> 1; + const int *permute = WDL_fft_permute_tab(half); + unsigned int i, j; + + WDL_FFT_COMPLEX *p, *q, tw, sum, diff; + WDL_FFT_REAL tw1, tw2; + + if (!isInverse) + { + WDL_fft((WDL_FFT_COMPLEX*)buf, half, isInverse); + r2(buf); + } + else + { + v2(buf); + } + + /* Source: http://www.katjaas.nl/realFFT/realFFT2.html */ + + for (i = 1; i < quart; ++i) + { + p = (WDL_FFT_COMPLEX*)buf + permute[i]; + q = (WDL_FFT_COMPLEX*)buf + permute[half - i]; + +/* tw.re = cos(2*PI * i / len); + tw.im = sin(2*PI * i / len); */ + + if (i < eighth) + { + j = i - 1; + tw.re = d[j].re; + tw.im = d[j].im; + } + else if (i > eighth) + { + j = quart - i - 1; + tw.re = d[j].im; + tw.im = d[j].re; + } + else + { + tw.re = tw.im = sqrthalf; + } + + if (!isInverse) tw.re = -tw.re; + + sum.re = p->re + q->re; + sum.im = p->im + q->im; + diff.re = p->re - q->re; + diff.im = p->im - q->im; + + tw1 = tw.re * sum.im + tw.im * diff.re; + tw2 = tw.im * sum.im - tw.re * diff.re; + + p->re = sum.re - tw1; + p->im = diff.im - tw2; + q->re = sum.re + tw1; + q->im = -(diff.im + tw2); + } + + p = (WDL_FFT_COMPLEX*)buf + permute[i]; + p->re *= 2; + p->im *= -2; + + if (isInverse) WDL_fft((WDL_FFT_COMPLEX*)buf, half, isInverse); +} + +void WDL_real_fft(WDL_FFT_REAL* buf, int len, int isInverse) +{ + switch (len) + { + case 2: if (!isInverse) r2(buf); else v2(buf); break; + case 4: case 8: two_for_one(buf, 0, len, isInverse); break; +#define TMP(x) case x: two_for_one(buf, d##x, len, isInverse); break; + TMP(16) + TMP(32) + TMP(64) + TMP(128) + TMP(256) + TMP(512) + TMP(1024) + TMP(2048) + TMP(4096) + TMP(8192) + TMP(16384) + TMP(32768) +#undef TMP + } +} diff --git a/3rdparty/wdlfft/fft.h b/3rdparty/wdlfft/fft.h new file mode 100644 index 00000000000..d2be245fb04 --- /dev/null +++ b/3rdparty/wdlfft/fft.h @@ -0,0 +1,77 @@ +/* + WDL - fft.h + Copyright (C) 2006 and later Cockos Incorporated + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + + + This file defines the interface to the WDL FFT library. These routines are based on the + DJBFFT library, which are Copyright 1999 D. J. Bernstein, djb@pobox.com + + The DJB FFT web page is: http://cr.yp.to/djbfft.html + +*/ + +#ifndef _WDL_FFT_H_ +#define _WDL_FFT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef WDL_FFT_REALSIZE +#define WDL_FFT_REALSIZE 4 +#endif + +#if WDL_FFT_REALSIZE == 4 +typedef float WDL_FFT_REAL; +#elif WDL_FFT_REALSIZE == 8 +typedef double WDL_FFT_REAL; +#else +#error invalid FFT item size +#endif + +typedef struct { + WDL_FFT_REAL re; + WDL_FFT_REAL im; +} WDL_FFT_COMPLEX; + +extern void WDL_fft_init(); + +extern void WDL_fft_complexmul(WDL_FFT_COMPLEX *dest, WDL_FFT_COMPLEX *src, int len); +extern void WDL_fft_complexmul2(WDL_FFT_COMPLEX *dest, WDL_FFT_COMPLEX *src, WDL_FFT_COMPLEX *src2, int len); +extern void WDL_fft_complexmul3(WDL_FFT_COMPLEX *destAdd, WDL_FFT_COMPLEX *src, WDL_FFT_COMPLEX *src2, int len); + +/* Expects WDL_FFT_COMPLEX input[0..len-1] scaled by 1.0/len, returns +WDL_FFT_COMPLEX output[0..len-1] order by WDL_fft_permute(len). */ +extern void WDL_fft(WDL_FFT_COMPLEX *, int len, int isInverse); + +/* Expects WDL_FFT_REAL input[0..len-1] scaled by 0.5/len, returns +WDL_FFT_COMPLEX output[0..len/2-1], for len >= 4 order by +WDL_fft_permute(len/2). Note that output[len/2].re is stored in +output[0].im. */ +extern void WDL_real_fft(WDL_FFT_REAL *, int len, int isInverse); + +extern int WDL_fft_permute(int fftsize, int idx); +extern int *WDL_fft_permute_tab(int fftsize); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100644 index 00000000000..74d0fc76826 --- /dev/null +++ b/COPYING @@ -0,0 +1,249 @@ +MAME is a registered trademark of Gregory Ember. + +MAME as a whole is made available under the terms of the GNU General +Public License. Individual source files may be made available under +less restrictive licenses, as noted in their respective header +comments. + +Full license texts may be found in docs/legal in source and binary +distributions. + + +MAME +Copyright (c) 1997-2020 MAMEdev and contributors + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License version 2, as provided +in docs/legal/GPL-2.0. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + + +This software is based in part on the work of the Independent JPEG Group. + + +Asio C++ Library +Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) + +Permission is hereby granted, free of charge, to any person or +organization obtaining a copy of the software and accompanying +documentation covered by this license (the "Software") to use, +reproduce, display, distribute, execute, and transmit the Software, and +to prepare derivative works of the Software, and to permit third-parties +to whom the Software is furnished to do so, all subject to the +following: + +The copyright notices in the Software and this entire statement, +including the above license grant, this restriction and the following +disclaimer, must be included in all copies of the Software, in whole or +in part, and all derivative works of the Software, unless such copies or +derivative works are solely in the form of machine-executable object +code generated by a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND +NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE +DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, +WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Berkeley SoftFloat - software implementation of binary floating-point that conforms to the IEEE Standard for Floating-Point Arithmetic +Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California + +FLAC - Free Lossless Audio Codec +Copyright (c) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +bgfx, bimg and bx +Copyright (c) 2010-2019 Branimir Karadzic + +linenoise.c -- guerrilla line editing library +Copyright (c) 2010, Salvatore Sanfilippo +Copyright (c) 2010, Pieter Noordhuis +Copyright (c) 2011, Steve Bennett + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Expat +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers + +Lua - a powerful, fast, lightweight, embeddable scripting language +Copyright (c) 1994-2017 Lua.org, PUC-Rio + +LuaFileSystem - File System Library for Lua +Copyright (c) 2003-2015 Kepler Project + +LuaSQLite 3 - a Lua 5.1 to 5.3 wrapper for the SQLite3 library +Copyright (c) 2002-2016 Tiago Dionizio, Doug Currie + +lua-linenoise +Copyright (c) 2011-2015 Rob Hoelz + +lua_zlib - Lua 5.1 interface to zlib +Copyright (c) 2009 Brian Maher + +OpenGL Mathematics (GLM) +Copyright (c) 2005 -2016 G-Truc Creation + +PortAudio Portable Real-Time Audio Library +Copyright (c) 1999-2006 Ross Bencina and Phil Burk + +PortMidi Portable Real-Time MIDI Library +Copyright (c) 1999-2000 Ross Bencina and Phil Burk +Copyright (c) 2001-2009 Roger B. Dannenberg + +pugixml - a C++ XML processing library +Copyright (c) 2006-2016 Arseny Kapoulkine + +RapidJSON - A fast JSON parser/generator for C++ with both SAX/DOM style API +Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip. + +Sol - a C++ library binding to Lua +Copyright (c) 2013-2016 Rapptz and contributors + +tap-windows.h +Copyright (C) 2002-2014 OpenVPN Technologies, Inc. + +utf8proc +Copyright (c) 2014-2015 Steven G. Johnson, Jiahao Chen, Tony Kelman, Jonas Fonseca, and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +LZMA SDK + +LZMA SDK is written and placed in the public domain by Igor Pavlov. + +Some code in LZMA SDK is based on public domain code from another +developers: + 1) PPMd var.H (2001): Dmitry Shkarin + 2) SHA-256: Wei Dai (Crypto++ library) + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute the original LZMA SDK code, either in source code form or as +a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +LZMA SDK code is compatible with open source licenses, for example, you +can include it to GNU GPL or GNU LGPL code. + + +Nano SVG = Simple stupid SVG parser +Copyright (c) 2013-14 Mikko Mononen memon@inside.org + +Simple DirectMedia Layer +Copyright (C) 1997-2016 Sam Lantinga + +WDL - fft.cpp +Copyright (c) 2006 and later Cockos Incorporated +Copyright (c) 1999 D. J. Bernstein + +zlib data compression library +Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + + +SQLite + +2001 September 15 + +The author disclaims copyright to this source code. In place of a legal +notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. diff --git a/dist.mak b/dist.mak index d2a0a0d41a2..1c8d9507aa6 100644 --- a/dist.mak +++ b/dist.mak @@ -102,9 +102,9 @@ BINDIR := build/$(PROJECTTYPE)/bin/$(BUILDARCH)/$(BUILDVARIANT) STAGEDIR := build/release/$(BUILDARCH)/$(BUILDVARIANT)/$(TARGET) BINARIES = $(MAINBIN) castool chdman floptool imgtool jedutil ldresample ldverify nltool nlwav romcmp unidasm -SIMPLE_DIRS := ctrlr docs/man docs/swlist hash ini/examples ini/presets nl_examples +SIMPLE_DIRS := ctrlr docs/legal docs/man docs/swlist hash ini/examples ini/presets LOCALISATIONS := $(wildcard language/*/*.mo) -COPIED_FILES := uismall.bdf roms/dir.txt $(foreach DIR,$(SIMPLE_DIRS),$(wildcard $(DIR)/*)) language/LICENSE language/README.md $(LOCALISATIONS) +COPIED_FILES := COPYING uismall.bdf roms/dir.txt $(foreach DIR,$(SIMPLE_DIRS),$(wildcard $(DIR)/*)) language/LICENSE language/README.md $(LOCALISATIONS) CREATED_DIRS := docs ini roms $(SIMPLE_DIRS) language $(dir $(LOCALISATIONS)) GEN_FOLDERS := $(addprefix $(STAGEDIR)/,$(CREATED_DIRS)) diff --git a/docs/legal/BSD-2-Clause b/docs/legal/BSD-2-Clause new file mode 100644 index 00000000000..4f940427222 --- /dev/null +++ b/docs/legal/BSD-2-Clause @@ -0,0 +1,24 @@ +Copyright + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/legal/BSD-3-Clause b/docs/legal/BSD-3-Clause new file mode 100644 index 00000000000..cc9ab753198 --- /dev/null +++ b/docs/legal/BSD-3-Clause @@ -0,0 +1,28 @@ +Copyright + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/legal/BSL-1.0 b/docs/legal/BSL-1.0 new file mode 100644 index 00000000000..08a61a07e8a --- /dev/null +++ b/docs/legal/BSL-1.0 @@ -0,0 +1,23 @@ +Permission is hereby granted, free of charge, to any person or +organization obtaining a copy of the software and accompanying +documentation covered by this license (the "Software") to use, +reproduce, display, distribute, execute, and transmit the Software, and +to prepare derivative works of the Software, and to permit third-parties +to whom the Software is furnished to do so, all subject to the +following: + +The copyright notices in the Software and this entire statement, +including the above license grant, this restriction and the following +disclaimer, must be included in all copies of the Software, in whole or +in part, and all derivative works of the Software, unless such copies or +derivative works are solely in the form of machine-executable object +code generated by a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND +NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE +DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, +WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/legal/CC0 b/docs/legal/CC0 new file mode 100644 index 00000000000..ccb8349e965 --- /dev/null +++ b/docs/legal/CC0 @@ -0,0 +1,114 @@ +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work +of authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without +fear of later claims of infringement build upon, modify, incorporate in +other works, reuse and redistribute as freely as possible in any form +whatsoever and for any purposes, including without limitation commercial +purposes. These owners may contribute to the Commons to promote the +ideal of a free culture and the further production of creative, cultural +and scientific works, or to gain reputation or greater distribution for +their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or +she is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under +its terms, with knowledge of his or her Copyright and Related Rights in +the Work and the meaning and intended legal effect of CC0 on those +rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or + performer(s); + iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a + Work, subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse + of data in a Work; + vi. database rights (such as those arising under Directive 96/9/EC + of the European Parliament and of the Council of 11 March 1996 + on the legal protection of databases, and under any national + implementation thereof, including any amended or successor + version of such directive); and + vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in +contravention of, applicable law, Affirmer hereby overtly, fully, +permanently, irrevocably and unconditionally waives, abandons, and +surrenders all of Affirmer's Copyright and Related Rights and associated +claims and causes of action, whether now known or unknown (including +existing as well as future claims and causes of action), in the Work +(i) in all territories worldwide, (ii) for the maximum duration provided +by applicable law or treaty (including future time extensions), (iii) in +any current or future medium and for any number of copies, and (iv) for +any purpose whatsoever, including without limitation commercial, +advertising or promotional purposes (the "Waiver"). Affirmer makes the +Waiver for the benefit of each member of the public at large and to the +detriment of Affirmer's heirs and successors, fully intending that such +Waiver shall not be subject to revocation, rescission, cancellation, +termination, or any other legal or equitable action to disrupt the quiet +enjoyment of the Work by the public as contemplated by Affirmer's +express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non +exclusive, irrevocable and unconditional license to exercise Affirmer's +Copyright and Related Rights in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose +whatsoever, including without limitation commercial, advertising or +promotional purposes (the "License"). The License shall be deemed +effective as of the date CC0 was applied by Affirmer to the Work. +Should any part of the License for any reason be judged legally invalid +or ineffective under applicable law, such partial invalidity or +ineffectiveness shall not invalidate the remainder of the License, and +in such case Affirmer hereby affirms that he or she will not +(i) exercise any of his or her remaining Copyright and Related Rights in +the Work or (ii) assert any associated claims and causes of action with +respect to the Work, in either case contrary to Affirmer's express +Statement of Purpose. + +4. Limitations and Disclaimers. + + i. No trademark or patent rights held by Affirmer are waived, + abandoned, surrendered, licensed or otherwise affected by this + document. + ii. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties + of title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, + accuracy, or the present or absence of errors, whether or not + discoverable, all to the greatest extent permissible under + applicable law. + iii. Affirmer disclaims responsibility for clearing rights of other + persons that may apply to the Work or any use thereof, including + without limitation any person's Copyright and Related Rights in + the Work. Further, Affirmer disclaims responsibility for + obtaining any necessary consents, permissions or other rights + required for any use of the Work. + iv. Affirmer understands and acknowledges that Creative Commons is + not a party to this document and has no duty or obligation with + respect to this CC0 or use of the Work. diff --git a/docs/legal/GPL-2.0 b/docs/legal/GPL-2.0 new file mode 100644 index 00000000000..2eec45e85ea --- /dev/null +++ b/docs/legal/GPL-2.0 @@ -0,0 +1,341 @@ +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. This General Public +License applies to most of the Free Software Foundation's software and +to any other program whose authors commit to using it. (Some other Free +Software Foundation software is covered by the GNU Library General +Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for this +service if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone +to deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis +or for a fee, you must give the recipients all the rights that you have. +You must make sure that they, too, receive or can get the source code. +And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent +must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a +notice placed by the copyright holder saying it may be distributed under +the terms of this General Public License. The "Program", below, refers +to any such program or work, and a "work based on the Program" means +either the Program or any derivative work under copyright law: that is +to say, a work containing the Program or a portion of it, either +verbatim or with modifications and/or translated into another language. +(Hereinafter, translation is included without limitation in the term +"modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of running +the Program is not restricted, and the output from the Program is +covered only if its contents constitute a work based on the Program +(independent of having been made by running the Program). Whether that +is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy an appropriate copyright notice +and disclaimer of warranty; keep intact all the notices that refer to +this License and to the absence of any warranty; and give any other +recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of +it, thus forming a work based on the Program, and copy and distribute +such modifications or work under the terms of Section 1 above, provided +that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you + provide a warranty) and that users may redistribute the program + under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is + interactive but does not normally print such an announcement, + your work based on the Program is not required to print an + announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, and +can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based on +the Program, the distribution of the whole must be on the terms of this +License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of a +storage or distribution medium does not bring the other work under the +scope of this License. + +3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Sections 1 and 2 above on a medium customarily used for software + interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to control +compilation and installation of the executable. However, as a special +exception, the source code distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies the +executable. + +If distribution of executable or object code is made by offering access +to copy from a designated place, then offering equivalent access to copy +the source code from the same place counts as distribution of the source +code, even though third parties are not compelled to copy the source +along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt otherwise +to copy, modify, sublicense or distribute the Program is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this License +will not have their licenses terminated so long as such parties remain +in full compliance. + +5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and all +its terms and conditions for copying, distributing or modifying the +Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further restrictions +on the recipients' exercise of the rights granted herein. You are not +responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent license +would not permit royalty-free redistribution of the Program by all those +who receive copies directly or indirectly through you, then the only way +you could satisfy both it and this License would be to refrain entirely +from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is implemented +by public license practices. Many people have made generous +contributions to the wide range of software distributed through that +system in reliance on consistent application of that system; it is up to +the author/donor to decide if he or she is willing to distribute +software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be +a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License may +add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among countries +not thus excluded. In such case, this License incorporates the +limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Program does not specify a version +number of this License, you may choose any version ever published by the +Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the +author to ask for permission. For software which is copyrighted by the +Free Software Foundation, write to the Free Software Foundation; we +sometimes make exceptions for this. Our decision will be guided by the +two goals of preserving the free status of all derivatives of our free +software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH +YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF +THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR +OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the + Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and +`show c'; they could even be mouse-clicks or menu items--whatever suits +your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications +with the library. If this is what you want to do, use the GNU Library +General Public License instead of this License. diff --git a/docs/legal/LGPL-2.1 b/docs/legal/LGPL-2.1 new file mode 100644 index 00000000000..fec7e1cee36 --- /dev/null +++ b/docs/legal/LGPL-2.1 @@ -0,0 +1,499 @@ +GNU Lesser General Public License +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + [This is the first released version of the Lesser GPL. It also + counts as the successor of the GNU Library Public License, + version 2, hence the version number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public Licenses are +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the Free +Software Foundation and other authors who decide to use it. You can use +it too, but we suggest you first think carefully about whether this +license or the ordinary General Public License is the better strategy to +use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish); that you receive source code or can get it if +you want it; that you can change the software and use pieces of it in +new free programs; and that you are informed that you can do these +things. + +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or +for a fee, you must give the recipients all the rights that we gave you. +You must make sure that they, too, receive or can get the source code. +If you link other code with the library, you must provide complete +object files to the recipients, so that they can relink them with the +library after making changes to the library and recompiling it. And you +must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is +no warranty for the free library. Also, if the library is modified by +someone else and passed on, the recipients should know that what they +have is not the original version, so that the original author's +reputation will not be affected by problems that might be introduced by +others. + +Finally, software patents pose a constant threat to the existence of any +free program. We wish to make sure that a company cannot effectively +restrict the users of a free program by obtaining a restrictive license +from a patent holder. Therefore, we insist that any patent license +obtained for a version of the library must be consistent with the full +freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License. This license, the GNU Lesser General Public +License, applies to certain designated libraries, and is quite different +from the ordinary General Public License. We use this license for +certain libraries in order to permit linking those libraries into +non-free programs. + +When a program is linked with a library, whether statically or using a +shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the entire +combination fits its criteria of freedom. The Lesser General Public +License permits more lax criteria for linking other code with the +library. + +We call this license the "Lesser" General Public License because it does +Less to protect the user's freedom than the ordinary General Public +License. It also provides other free software developers Less of an +advantage over competing non-free programs. These disadvantages are the +reason we use the ordinary General Public License for many libraries. +However, the Lesser license provides advantages in certain special +circumstances. + +For example, on rare occasions, there may be a special need to encourage +the widest possible use of a certain library, so that it becomes a +de-facto standard. To achieve this, non-free programs must be allowed +to use the library. A more frequent case is that a free library does +the same job as widely used non-free libraries. In this case, there is +little to gain by limiting the free library to free software only, so we +use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of free +software. For example, permission to use the GNU C Library in non-free +programs enables many more people to use the whole GNU operating system, +as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is linked +with the Library has the freedom and the wherewithal to run that program +using a modified version of the Library. + +The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or other +authorized party saying it may be distributed under the terms of this +Lesser General Public License (also called "this License"). Each +licensee is addressed as "you". + +A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which +has been distributed under these terms. A "work based on the Library" +means either the Library or any derivative work under copyright law: +that is to say, a work containing the Library or a portion of it, either +verbatim or with modifications and/or translated straightforwardly into +another language. (Hereinafter, translation is included without +limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the +source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and +installation of the library. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of running +a program using the Library is not restricted, and output from such a +program is covered only if its contents constitute a work based on the +Library (independent of the use of the Library in a tool for writing +it). Whether that is true depends on what the Library does and what the +program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the notices +that refer to this License and to the absence of any warranty; and +distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of +it, thus forming a work based on the Library, and copy and distribute +such modifications or work under the terms of Section 1 above, provided +that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge + to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure + that, in the event an application does not supply such function + or table, the facility still operates, and performs whatever part + of its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a + purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must be + optional: if the application does not supply it, the square root + function must still compute square roots.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Library, + and can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work + based on the Library, the distribution of the whole must be on the + terms of this License, whose permissions for other licensees extend + to the entire whole, and thus to each and every part regardless of + who wrote it. + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, the + intent is to exercise the right to control the distribution of + derivative or collective works based on the Library. + + In addition, mere aggregation of another work not based on the + Library with the Library (or with a work based on the Library) on a + volume of a storage or distribution medium does not bring the other + work under the scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so that +they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in these +notices. + +Once this change is made in a given copy, it is irreversible for that +copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the +Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative +of it, under Section 2) in object code or executable form under the +terms of Sections 1 and 2 above provided that you accompany it with the +complete corresponding machine-readable source code, which must be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source +code from the same place satisfies the requirement to distribute the +source code, even though third parties are not compelled to copy the +source along with the object code. + +5. A program that contains no derivative of any portion of the Library, +but is designed to work with the Library by being compiled or linked +with it, is called a "work that uses the Library". Such a work, in +isolation, is not a derivative work of the Library, and therefore falls +outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates +an executable that is a derivative of the Library (because it contains +portions of the Library), rather than a "work that uses the library". +The executable is therefore covered by this License. Section 6 states +terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be linked +without the Library, or if the work is itself a library. The threshold +for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure +layouts and accessors, and small macros and small inline functions (ten +lines or less in length), then the use of the object file is +unrestricted, regardless of whether it is legally a derivative work. +(Executables containing this object code plus portions of the Library +will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, whether +or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link +a "work that uses the Library" with the Library to produce a work +containing portions of the Library, and distribute that work under terms +of your choice, provided that the terms permit modification of the work +for the customer's own use and reverse engineering for debugging such +modifications. + +You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one of +these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in + the Library will not necessarily be able to recompile the + application to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer + system, rather than copying library functions into the + executable, and (2) will operate properly with a modified version + of the library, if the user installs one, as long as the modified + version is interface-compatible with the version that the work + was made with. + + c) Accompany the work with a written offer, valid for at least three + years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the + above specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" +must include any data and utility programs needed for reproducing the +executable from it. However, as a special exception, the materials to be +distributed need not include anything that is normally distributed (in +either source or binary form) with the major components (compiler, +kernel, and so on) of the operating system on which the executable runs, +unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions +of other proprietary libraries that do not normally accompany the +operating system. Such a contradiction means you cannot use both them +and the Library together in an executable that you distribute. + +7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise permitted, +and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities. + This must be distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that + part of it is a work based on the Library, and explaining where + to find the accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the +Library except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, link with, or distribute the +Library is void, and will automatically terminate your rights under this +License. However, parties who have received copies, or rights, from you +under this License will not have their licenses terminated so long as +such parties remain in full compliance. + +9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and all +its terms and conditions for copying, distributing or modifying the +Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + +11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent license +would not permit royalty-free redistribution of the Library by all those +who receive copies directly or indirectly through you, then the only way +you could satisfy both it and this License would be to refrain entirely +from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is implemented +by public license practices. Many people have made generous +contributions to the wide range of software distributed through that +system in reliance on consistent application of that system; it is up to +the author/donor to decide if he or she is willing to distribute +software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be +a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may +add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among countries +not thus excluded. In such case, this License incorporates the +limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. Such +new versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a license +version number, you may choose any version ever published by the Free +Software Foundation. + +14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free Software +Foundation; we sometimes make exceptions for this. Our decision will be +guided by the two goals of preserving the free status of all derivatives +of our free software and of promoting the sharing and reuse of software +generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH +YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF +THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR +OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of +the ordinary General Public License). + +To apply these terms, attach the following notices to the library. It +is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should have +at least the "copyright" line and a pointer to where the full notice is +found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by + James Random Hacker. + + signature of Ty Coon, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/docs/legal/MIT b/docs/legal/MIT new file mode 100644 index 00000000000..f287107d6f7 --- /dev/null +++ b/docs/legal/MIT @@ -0,0 +1,20 @@ +Copyright + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/legal/Zlib b/docs/legal/Zlib new file mode 100644 index 00000000000..30da938c7b2 --- /dev/null +++ b/docs/legal/Zlib @@ -0,0 +1,20 @@ +Copyright (c) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua index bec2382971d..d51ba5196ef 100644 --- a/scripts/src/3rdparty.lua +++ b/scripts/src/3rdparty.lua @@ -74,6 +74,7 @@ links { } end + -------------------------------------------------- -- zlib library objects -------------------------------------------------- @@ -139,6 +140,7 @@ links { } end + -------------------------------------------------- -- SoftFloat library objects -------------------------------------------------- @@ -179,6 +181,7 @@ end MAME_DIR .. "3rdparty/softfloat/fyl2x.c", } + -------------------------------------------------- -- SoftFloat 3 library objects -------------------------------------------------- @@ -523,6 +526,7 @@ files { MAME_DIR .. "3rdparty/softfloat3/source/f128M_lt_quiet.c", } + ------------------------------------------------- -- libJPEG library objects -------------------------------------------------- @@ -605,6 +609,7 @@ links { } end + -------------------------------------------------- -- libflac library objects -------------------------------------------------- @@ -698,6 +703,7 @@ links { } end + -------------------------------------------------- -- lib7z library objects -------------------------------------------------- @@ -784,6 +790,7 @@ end -- MAME_DIR .. "3rdparty/lzma/C/XzIn.c", } + -------------------------------------------------- -- LUA library objects -------------------------------------------------- @@ -889,6 +896,7 @@ links { } end + -------------------------------------------------- -- small lua library objects -------------------------------------------------- @@ -995,9 +1003,12 @@ links { end end + + -------------------------------------------------- -- portmidi library objects -------------------------------------------------- + if _OPTIONS["NO_USE_MIDI"]~="1" then if not _OPTIONS["with-system-portmidi"] then project "portmidi" @@ -1079,6 +1090,7 @@ links { end end + -------------------------------------------------- -- BX library objects -------------------------------------------------- @@ -1157,6 +1169,7 @@ project "bx" MAME_DIR .. "3rdparty/bx/src/url.cpp", } + -------------------------------------------------- -- BIMG library objects -------------------------------------------------- @@ -1232,6 +1245,7 @@ project "bimg" MAME_DIR .. "3rdparty/bimg/3rdparty/astc-codec/src/decoder/weight_infill.cc", } + -------------------------------------------------- -- BGFX library objects -------------------------------------------------- @@ -1420,9 +1434,11 @@ end } end + -------------------------------------------------- -- PortAudio library objects -------------------------------------------------- + if _OPTIONS["NO_USE_PORTAUDIO"]~="1" then if not _OPTIONS["with-system-portaudio"] then project "portaudio" @@ -1591,6 +1607,7 @@ links { end end + -------------------------------------------------- -- SDL2 library -------------------------------------------------- @@ -2101,9 +2118,11 @@ end end + -------------------------------------------------- -- linenoise library -------------------------------------------------- + if (_OPTIONS["osd"] ~= "uwp") then project "linenoise" uuid "7320ffc8-2748-4add-8864-ae29b72a8511" @@ -2138,9 +2157,9 @@ project "utf8proc" uuid "1f881f09-0395-4483-ac37-2935fb092187" kind "StaticLib" - defines { - "UTF8PROC_DLLEXPORT=" - } + defines { + "UTF8PROC_DLLEXPORT=" + } configuration "Debug" defines { @@ -2166,3 +2185,23 @@ links { } end + +-------------------------------------------------- +-- wdlfft library objects (from Cockos WDL) +-------------------------------------------------- + +project "wdlfft" + uuid "74ca017e-fa0d-48b8-81d6-8081a37be14c" + kind "StaticLib" + + configuration { "gmake or ninja" } + buildoptions_c { + "-Wno-strict-prototypes", + } + + configuration { } + + files { + MAME_DIR .. "3rdparty/wdlfft/fft.c", + MAME_DIR .. "3rdparty/wdlfft/fft.h" + } diff --git a/scripts/src/main.lua b/scripts/src/main.lua index 4be1b9af7af..65eeadd4300 100644 --- a/scripts/src/main.lua +++ b/scripts/src/main.lua @@ -258,6 +258,7 @@ end ext_lib("expat"), "softfloat", "softfloat3", + "wdlfft", ext_lib("jpeg"), "7z", } diff --git a/scripts/src/sound.lua b/scripts/src/sound.lua index d1028cceeb6..fdf1ea43f66 100644 --- a/scripts/src/sound.lua +++ b/scripts/src/sound.lua @@ -1551,7 +1551,5 @@ if (SOUNDS["VGMVIZ"]~=null) then files { MAME_DIR .. "src/devices/sound/vgm_visualizer.cpp", MAME_DIR .. "src/devices/sound/vgm_visualizer.h", - MAME_DIR .. "src/devices/sound/fft.cpp", - MAME_DIR .. "src/devices/sound/fft.h", } end diff --git a/src/devices/sound/fft.cpp b/src/devices/sound/fft.cpp deleted file mode 100644 index af5e6536feb..00000000000 --- a/src/devices/sound/fft.cpp +++ /dev/null @@ -1,1206 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Justin Frankel -/* - WDL - fft.cpp - Copyright (C) 2006 and later Cockos Incorporated - Copyright 1999 D. J. Bernstein - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - - - This file implements the WDL FFT library. These routines are based on the - DJBFFT library, which are Copyright 1999 D. J. Bernstein, djb@pobox.com - - The DJB FFT web page is: http://cr.yp.to/djbfft.html - - - This file is modified from the original; it has been reformatted for 4-space - tabs and to have the 'register' keyword omitted. -*/ - - -// this is based on djbfft - -#include "emu.h" -#include -#include "fft.h" - - -#define FFT_MAXBITLEN 15 - -#ifdef _MSC_VER -#define inline __inline -#endif - -#define PI 3.1415926535897932384626433832795 - -static WDL_FFT_COMPLEX d16[3]; -static WDL_FFT_COMPLEX d32[7]; -static WDL_FFT_COMPLEX d64[15]; -static WDL_FFT_COMPLEX d128[31]; -static WDL_FFT_COMPLEX d256[63]; -static WDL_FFT_COMPLEX d512[127]; -static WDL_FFT_COMPLEX d1024[127]; -static WDL_FFT_COMPLEX d2048[255]; -static WDL_FFT_COMPLEX d4096[511]; -static WDL_FFT_COMPLEX d8192[1023]; -static WDL_FFT_COMPLEX d16384[2047]; -static WDL_FFT_COMPLEX d32768[4095]; - - -#define sqrthalf (d16[1].re) - -#define VOL *(volatile WDL_FFT_REAL *)& - -#define TRANSFORM(a0,a1,a2,a3,wre,wim) { \ - t6 = a2.re; \ - t1 = a0.re - t6; \ - t6 += a0.re; \ - a0.re = t6; \ - t3 = a3.im; \ - t4 = a1.im - t3; \ - t8 = t1 - t4; \ - t1 += t4; \ - t3 += a1.im; \ - a1.im = t3; \ - t5 = wre; \ - t7 = t8 * t5; \ - t4 = t1 * t5; \ - t8 *= wim; \ - t2 = a3.re; \ - t3 = a1.re - t2; \ - t2 += a1.re; \ - a1.re = t2; \ - t1 *= wim; \ - t6 = a2.im; \ - t2 = a0.im - t6; \ - t6 += a0.im; \ - a0.im = t6; \ - t6 = t2 + t3; \ - t2 -= t3; \ - t3 = t6 * wim; \ - t7 -= t3; \ - a2.re = t7; \ - t6 *= t5; \ - t6 += t8; \ - a2.im = t6; \ - t5 *= t2; \ - t5 -= t1; \ - a3.im = t5; \ - t2 *= wim; \ - t4 += t2; \ - a3.re = t4; \ - } - -#define TRANSFORMHALF(a0,a1,a2,a3) { \ - t1 = a2.re; \ - t5 = a0.re - t1; \ - t1 += a0.re; \ - a0.re = t1; \ - t4 = a3.im; \ - t8 = a1.im - t4; \ - t1 = t5 - t8; \ - t5 += t8; \ - t4 += a1.im; \ - a1.im = t4; \ - t3 = a3.re; \ - t7 = a1.re - t3; \ - t3 += a1.re; \ - a1.re = t3; \ - t8 = a2.im; \ - t6 = a0.im - t8; \ - t2 = t6 + t7; \ - t6 -= t7; \ - t8 += a0.im; \ - a0.im = t8; \ - t4 = t6 + t5; \ - t3 = sqrthalf; \ - t4 *= t3; \ - a3.re = t4; \ - t6 -= t5; \ - t6 *= t3; \ - a3.im = t6; \ - t7 = t1 - t2; \ - t7 *= t3; \ - a2.re = t7; \ - t2 += t1; \ - t2 *= t3; \ - a2.im = t2; \ - } - -#define TRANSFORMZERO(a0,a1,a2,a3) { \ - t5 = a2.re; \ - t1 = a0.re - t5; \ - t5 += a0.re; \ - a0.re = t5; \ - t8 = a3.im; \ - t4 = a1.im - t8; \ - t7 = a3.re; \ - t6 = t1 - t4; \ - a2.re = t6; \ - t1 += t4; \ - a3.re = t1; \ - t8 += a1.im; \ - a1.im = t8; \ - t3 = a1.re - t7; \ - t7 += a1.re; \ - a1.re = t7; \ - t6 = a2.im; \ - t2 = a0.im - t6; \ - t7 = t2 + t3; \ - a2.im = t7; \ - t2 -= t3; \ - a3.im = t2; \ - t6 += a0.im; \ - a0.im = t6; \ - } - -#define UNTRANSFORM(a0,a1,a2,a3,wre,wim) { \ - t6 = VOL wre; \ - t1 = VOL a2.re; \ - t1 *= t6; \ - t8 = VOL wim; \ - t3 = VOL a2.im; \ - t3 *= t8; \ - t2 = VOL a2.im; \ - t4 = VOL a2.re; \ - t5 = VOL a3.re; \ - t5 *= t6; \ - t7 = VOL a3.im; \ - t1 += t3; \ - t7 *= t8; \ - t5 -= t7; \ - t3 = t5 + t1; \ - t5 -= t1; \ - t2 *= t6; \ - t6 *= a3.im; \ - t4 *= t8; \ - t2 -= t4; \ - t8 *= a3.re; \ - t6 += t8; \ - t1 = a0.re - t3; \ - t3 += a0.re; \ - a0.re = t3; \ - t7 = a1.im - t5; \ - t5 += a1.im; \ - a1.im = t5; \ - t4 = t2 - t6; \ - t6 += t2; \ - t8 = a1.re - t4; \ - t4 += a1.re; \ - a1.re = t4; \ - t2 = a0.im - t6; \ - t6 += a0.im; \ - a0.im = t6; \ - a2.re = t1; \ - a3.im = t7; \ - a3.re = t8; \ - a2.im = t2; \ - } - - -#define UNTRANSFORMHALF(a0,a1,a2,a3) { \ - t6 = sqrthalf; \ - t1 = a2.re; \ - t2 = a2.im - t1; \ - t2 *= t6; \ - t1 += a2.im; \ - t1 *= t6; \ - t4 = a3.im; \ - t3 = a3.re - t4; \ - t3 *= t6; \ - t4 += a3.re; \ - t4 *= t6; \ - t8 = t3 - t1; \ - t7 = t2 - t4; \ - t1 += t3; \ - t2 += t4; \ - t4 = a1.im - t8; \ - a3.im = t4; \ - t8 += a1.im; \ - a1.im = t8; \ - t3 = a1.re - t7; \ - a3.re = t3; \ - t7 += a1.re; \ - a1.re = t7; \ - t5 = a0.re - t1; \ - a2.re = t5; \ - t1 += a0.re; \ - a0.re = t1; \ - t6 = a0.im - t2; \ - a2.im = t6; \ - t2 += a0.im; \ - a0.im = t2; \ - } - -#define UNTRANSFORMZERO(a0,a1,a2,a3) { \ - t2 = a3.im; \ - t3 = a2.im - t2; \ - t2 += a2.im; \ - t1 = a2.re; \ - t4 = a3.re - t1; \ - t1 += a3.re; \ - t5 = a0.re - t1; \ - a2.re = t5; \ - t6 = a0.im - t2; \ - a2.im = t6; \ - t7 = a1.re - t3; \ - a3.re = t7; \ - t8 = a1.im - t4; \ - a3.im = t8; \ - t1 += a0.re; \ - a0.re = t1; \ - t2 += a0.im; \ - a0.im = t2; \ - t3 += a1.re; \ - a1.re = t3; \ - t4 += a1.im; \ - a1.im = t4; \ - } - -static void c2(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1; - - t1 = a[1].re; - a[1].re = a[0].re - t1; - a[0].re += t1; - - t1 = a[1].im; - a[1].im = a[0].im - t1; - a[0].im += t1; -} - -static inline void c4(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - - t5 = a[2].re; - t1 = a[0].re - t5; - t7 = a[3].re; - t5 += a[0].re; - t3 = a[1].re - t7; - t7 += a[1].re; - t8 = t5 + t7; - a[0].re = t8; - t5 -= t7; - a[1].re = t5; - t6 = a[2].im; - t2 = a[0].im - t6; - t6 += a[0].im; - t5 = a[3].im; - a[2].im = t2 + t3; - t2 -= t3; - a[3].im = t2; - t4 = a[1].im - t5; - a[3].re = t1 + t4; - t1 -= t4; - a[2].re = t1; - t5 += a[1].im; - a[0].im = t6 + t5; - t6 -= t5; - a[1].im = t6; -} - -static void c8(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - - t7 = a[4].im; - t4 = a[0].im - t7; - t7 += a[0].im; - a[0].im = t7; - - t8 = a[6].re; - t5 = a[2].re - t8; - t8 += a[2].re; - a[2].re = t8; - - t7 = a[6].im; - a[6].im = t4 - t5; - t4 += t5; - a[4].im = t4; - - t6 = a[2].im - t7; - t7 += a[2].im; - a[2].im = t7; - - t8 = a[4].re; - t3 = a[0].re - t8; - t8 += a[0].re; - a[0].re = t8; - - a[4].re = t3 - t6; - t3 += t6; - a[6].re = t3; - - t7 = a[5].re; - t3 = a[1].re - t7; - t7 += a[1].re; - a[1].re = t7; - - t8 = a[7].im; - t6 = a[3].im - t8; - t8 += a[3].im; - a[3].im = t8; - t1 = t3 - t6; - t3 += t6; - - t7 = a[5].im; - t4 = a[1].im - t7; - t7 += a[1].im; - a[1].im = t7; - - t8 = a[7].re; - t5 = a[3].re - t8; - t8 += a[3].re; - a[3].re = t8; - - t2 = t4 - t5; - t4 += t5; - - t6 = t1 - t4; - t8 = sqrthalf; - t6 *= t8; - a[5].re = a[4].re - t6; - t1 += t4; - t1 *= t8; - a[5].im = a[4].im - t1; - t6 += a[4].re; - a[4].re = t6; - t1 += a[4].im; - a[4].im = t1; - - t5 = t2 - t3; - t5 *= t8; - a[7].im = a[6].im - t5; - t2 += t3; - t2 *= t8; - a[7].re = a[6].re - t2; - t2 += a[6].re; - a[6].re = t2; - t5 += a[6].im; - a[6].im = t5; - - c4(a); -} - -static void c16(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - - TRANSFORMZERO(a[0],a[4],a[8],a[12]); - TRANSFORM(a[1],a[5],a[9],a[13],d16[0].re,d16[0].im); - TRANSFORMHALF(a[2],a[6],a[10],a[14]); - TRANSFORM(a[3],a[7],a[11],a[15],d16[0].im,d16[0].re); - c4(a + 8); - c4(a + 12); - - c8(a); -} - -/* a[0...8n-1], w[0...2n-2]; n >= 2 */ -static void cpass(WDL_FFT_COMPLEX *a,const WDL_FFT_COMPLEX *w,unsigned int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - WDL_FFT_COMPLEX *a1; - WDL_FFT_COMPLEX *a2; - WDL_FFT_COMPLEX *a3; - - a2 = a + 4 * n; - a1 = a + 2 * n; - a3 = a2 + 2 * n; - --n; - - TRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); - TRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); - - for (;;) { - TRANSFORM(a[2],a1[2],a2[2],a3[2],w[1].re,w[1].im); - TRANSFORM(a[3],a1[3],a2[3],a3[3],w[2].re,w[2].im); - if (!--n) break; - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - w += 2; - } -} - -static void c32(WDL_FFT_COMPLEX *a) -{ - cpass(a,d32,4); - c8(a + 16); - c8(a + 24); - c16(a); -} - -static void c64(WDL_FFT_COMPLEX *a) -{ - cpass(a,d64,8); - c16(a + 32); - c16(a + 48); - c32(a); -} - -static void c128(WDL_FFT_COMPLEX *a) -{ - cpass(a,d128,16); - c32(a + 64); - c32(a + 96); - c64(a); -} - -static void c256(WDL_FFT_COMPLEX *a) -{ - cpass(a,d256,32); - c64(a + 128); - c64(a + 192); - c128(a); -} - -static void c512(WDL_FFT_COMPLEX *a) -{ - cpass(a,d512,64); - c128(a + 384); - c128(a + 256); - c256(a); -} - -/* a[0...8n-1], w[0...n-2]; n even, n >= 4 */ -static void cpassbig(WDL_FFT_COMPLEX *a,const WDL_FFT_COMPLEX *w,unsigned int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - WDL_FFT_COMPLEX *a1; - WDL_FFT_COMPLEX *a2; - WDL_FFT_COMPLEX *a3; - unsigned int k; - - a2 = a + 4 * n; - a1 = a + 2 * n; - a3 = a2 + 2 * n; - k = n - 2; - - TRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); - TRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - - do { - TRANSFORM(a[0],a1[0],a2[0],a3[0],w[1].re,w[1].im); - TRANSFORM(a[1],a1[1],a2[1],a3[1],w[2].re,w[2].im); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - w += 2; - } while (k -= 2); - - TRANSFORMHALF(a[0],a1[0],a2[0],a3[0]); - TRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].im,w[0].re); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - - k = n - 2; - do { - TRANSFORM(a[0],a1[0],a2[0],a3[0],w[-1].im,w[-1].re); - TRANSFORM(a[1],a1[1],a2[1],a3[1],w[-2].im,w[-2].re); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - w -= 2; - } while (k -= 2); -} - - -static void c1024(WDL_FFT_COMPLEX *a) -{ - cpassbig(a,d1024,128); - c256(a + 768); - c256(a + 512); - c512(a); -} - -static void c2048(WDL_FFT_COMPLEX *a) -{ - cpassbig(a,d2048,256); - c512(a + 1536); - c512(a + 1024); - c1024(a); -} - -static void c4096(WDL_FFT_COMPLEX *a) -{ - cpassbig(a,d4096,512); - c1024(a + 3072); - c1024(a + 2048); - c2048(a); -} - -static void c8192(WDL_FFT_COMPLEX *a) -{ - cpassbig(a,d8192,1024); - c2048(a + 6144); - c2048(a + 4096); - c4096(a); -} - -static void c16384(WDL_FFT_COMPLEX *a) -{ - cpassbig(a,d16384,2048); - c4096(a + 8192 + 4096); - c4096(a + 8192); - c8192(a); -} - -static void c32768(WDL_FFT_COMPLEX *a) -{ - cpassbig(a,d32768,4096); - c8192(a + 16384 + 8192); - c8192(a + 16384); - c16384(a); -} - - -/* n even, n > 0 */ -void WDL_fft_complexmul(WDL_FFT_COMPLEX *a,WDL_FFT_COMPLEX *b,int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - if (n<2 || (n&1)) return; - - do { - t1 = a[0].re * b[0].re; - t2 = a[0].im * b[0].im; - t3 = a[0].im * b[0].re; - t4 = a[0].re * b[0].im; - t5 = a[1].re * b[1].re; - t6 = a[1].im * b[1].im; - t7 = a[1].im * b[1].re; - t8 = a[1].re * b[1].im; - t1 -= t2; - t3 += t4; - t5 -= t6; - t7 += t8; - a[0].re = t1; - a[1].re = t5; - a[0].im = t3; - a[1].im = t7; - a += 2; - b += 2; - } while (n -= 2); -} - -void WDL_fft_complexmul2(WDL_FFT_COMPLEX *c, WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - if (n<2 || (n&1)) return; - - do { - t1 = a[0].re * b[0].re; - t2 = a[0].im * b[0].im; - t3 = a[0].im * b[0].re; - t4 = a[0].re * b[0].im; - t5 = a[1].re * b[1].re; - t6 = a[1].im * b[1].im; - t7 = a[1].im * b[1].re; - t8 = a[1].re * b[1].im; - t1 -= t2; - t3 += t4; - t5 -= t6; - t7 += t8; - c[0].re = t1; - c[1].re = t5; - c[0].im = t3; - c[1].im = t7; - a += 2; - b += 2; - c += 2; - } while (n -= 2); -} - -void WDL_fft_complexmul3(WDL_FFT_COMPLEX *c, WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - if (n<2 || (n&1)) return; - - do { - t1 = a[0].re * b[0].re; - t2 = a[0].im * b[0].im; - t3 = a[0].im * b[0].re; - t4 = a[0].re * b[0].im; - t5 = a[1].re * b[1].re; - t6 = a[1].im * b[1].im; - t7 = a[1].im * b[1].re; - t8 = a[1].re * b[1].im; - t1 -= t2; - t3 += t4; - t5 -= t6; - t7 += t8; - c[0].re += t1; - c[1].re += t5; - c[0].im += t3; - c[1].im += t7; - a += 2; - b += 2; - c += 2; - } while (n -= 2); -} - - -static inline void un4(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - - t1 = VOL a[1].re; - t3 = a[0].re - t1; - t6 = VOL a[2].re; - t1 += a[0].re; - t8 = a[3].re - t6; - t6 += a[3].re; - a[0].re = t1 + t6; - t1 -= t6; - a[2].re = t1; - - t2 = VOL a[1].im; - t4 = a[0].im - t2; - t2 += a[0].im; - t5 = VOL a[3].im; - a[1].im = t4 + t8; - t4 -= t8; - a[3].im = t4; - - t7 = a[2].im - t5; - t5 += a[2].im; - a[1].re = t3 + t7; - t3 -= t7; - a[3].re = t3; - a[0].im = t2 + t5; - t2 -= t5; - a[2].im = t2; -} - -static void un8(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - - un4(a); - - t1 = a[5].re; - a[5].re = a[4].re - t1; - t1 += a[4].re; - - t3 = a[7].re; - a[7].re = a[6].re - t3; - t3 += a[6].re; - - t8 = t3 - t1; - t1 += t3; - - t6 = a[2].im - t8; - t8 += a[2].im; - a[2].im = t8; - - t5 = a[0].re - t1; - a[4].re = t5; - t1 += a[0].re; - a[0].re = t1; - - t2 = a[5].im; - a[5].im = a[4].im - t2; - t2 += a[4].im; - - t4 = a[7].im; - a[7].im = a[6].im - t4; - t4 += a[6].im; - - a[6].im = t6; - - t7 = t2 - t4; - t2 += t4; - - t3 = a[2].re - t7; - a[6].re = t3; - t7 += a[2].re; - a[2].re = t7; - - t6 = a[0].im - t2; - a[4].im = t6; - t2 += a[0].im; - a[0].im = t2; - - t6 = sqrthalf; - - t1 = a[5].re; - t2 = a[5].im - t1; - t2 *= t6; - t1 += a[5].im; - t1 *= t6; - t4 = a[7].im; - t3 = a[7].re - t4; - t3 *= t6; - t4 += a[7].re; - t4 *= t6; - - t8 = t3 - t1; - t1 += t3; - t7 = t2 - t4; - t2 += t4; - - t4 = a[3].im - t8; - a[7].im = t4; - t5 = a[1].re - t1; - a[5].re = t5; - t3 = a[3].re - t7; - a[7].re = t3; - t6 = a[1].im - t2; - a[5].im = t6; - - t8 += a[3].im; - a[3].im = t8; - t1 += a[1].re; - a[1].re = t1; - t7 += a[3].re; - a[3].re = t7; - t2 += a[1].im; - a[1].im = t2; -} - -static void un16(WDL_FFT_COMPLEX *a) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - - un8(a); - un4(a + 8); - un4(a + 12); - - UNTRANSFORMZERO(a[0],a[4],a[8],a[12]); - UNTRANSFORMHALF(a[2],a[6],a[10],a[14]); - UNTRANSFORM(a[1],a[5],a[9],a[13],d16[0].re,d16[0].im); - UNTRANSFORM(a[3],a[7],a[11],a[15],d16[0].im,d16[0].re); -} - -/* a[0...8n-1], w[0...2n-2] */ -static void upass(WDL_FFT_COMPLEX *a,const WDL_FFT_COMPLEX *w,unsigned int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - WDL_FFT_COMPLEX *a1; - WDL_FFT_COMPLEX *a2; - WDL_FFT_COMPLEX *a3; - - a2 = a + 4 * n; - a1 = a + 2 * n; - a3 = a2 + 2 * n; - n -= 1; - - UNTRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); - UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); - - for (;;) { - UNTRANSFORM(a[2],a1[2],a2[2],a3[2],w[1].re,w[1].im); - UNTRANSFORM(a[3],a1[3],a2[3],a3[3],w[2].re,w[2].im); - if (!--n) break; - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - w += 2; - } -} - -static void un32(WDL_FFT_COMPLEX *a) -{ - un16(a); - un8(a + 16); - un8(a + 24); - upass(a,d32,4); -} - -static void un64(WDL_FFT_COMPLEX *a) -{ - un32(a); - un16(a + 32); - un16(a + 48); - upass(a,d64,8); -} - -static void un128(WDL_FFT_COMPLEX *a) -{ - un64(a); - un32(a + 64); - un32(a + 96); - upass(a,d128,16); -} - -static void un256(WDL_FFT_COMPLEX *a) -{ - un128(a); - un64(a + 128); - un64(a + 192); - upass(a,d256,32); -} - -static void un512(WDL_FFT_COMPLEX *a) -{ - un256(a); - un128(a + 256); - un128(a + 384); - upass(a,d512,64); -} - - -/* a[0...8n-1], w[0...n-2]; n even, n >= 4 */ -static void upassbig(WDL_FFT_COMPLEX *a,const WDL_FFT_COMPLEX *w,unsigned int n) -{ - WDL_FFT_REAL t1, t2, t3, t4, t5, t6, t7, t8; - WDL_FFT_COMPLEX *a1; - WDL_FFT_COMPLEX *a2; - WDL_FFT_COMPLEX *a3; - unsigned int k; - - a2 = a + 4 * n; - a1 = a + 2 * n; - a3 = a2 + 2 * n; - k = n - 2; - - UNTRANSFORMZERO(a[0],a1[0],a2[0],a3[0]); - UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].re,w[0].im); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - - do { - UNTRANSFORM(a[0],a1[0],a2[0],a3[0],w[1].re,w[1].im); - UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[2].re,w[2].im); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - w += 2; - } while (k -= 2); - - UNTRANSFORMHALF(a[0],a1[0],a2[0],a3[0]); - UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[0].im,w[0].re); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - - k = n - 2; - do { - UNTRANSFORM(a[0],a1[0],a2[0],a3[0],w[-1].im,w[-1].re); - UNTRANSFORM(a[1],a1[1],a2[1],a3[1],w[-2].im,w[-2].re); - a += 2; - a1 += 2; - a2 += 2; - a3 += 2; - w -= 2; - } while (k -= 2); -} - - - -static void un1024(WDL_FFT_COMPLEX *a) -{ - un512(a); - un256(a + 512); - un256(a + 768); - upassbig(a,d1024,128); -} - -static void un2048(WDL_FFT_COMPLEX *a) -{ - un1024(a); - un512(a + 1024); - un512(a + 1536); - upassbig(a,d2048,256); -} - - -static void un4096(WDL_FFT_COMPLEX *a) -{ - un2048(a); - un1024(a + 2048); - un1024(a + 3072); - upassbig(a,d4096,512); -} - -static void un8192(WDL_FFT_COMPLEX *a) -{ - un4096(a); - un2048(a + 4096); - un2048(a + 6144); - upassbig(a,d8192,1024); -} - -static void un16384(WDL_FFT_COMPLEX *a) -{ - un8192(a); - un4096(a + 8192); - un4096(a + 8192 + 4096); - upassbig(a,d16384,2048); -} - -static void un32768(WDL_FFT_COMPLEX *a) -{ - un16384(a); - un8192(a + 16384); - un8192(a + 16384 + 8192 ); - upassbig(a,d32768,4096); -} - - -static void __fft_gen(WDL_FFT_COMPLEX *buf, const WDL_FFT_COMPLEX *buf2, int sz, int isfull) -{ - int x; - double div=PI*0.25/(sz+1); - - if (isfull) div*=2.0; - - for (x = 0; x < sz; x ++) - { - if (!(x & 1) || !buf2) - { - buf[x].re = (WDL_FFT_REAL) cos((x+1)*div); - buf[x].im = (WDL_FFT_REAL) sin((x+1)*div); - } - else - { - buf[x].re = buf2[x >> 1].re; - buf[x].im = buf2[x >> 1].im; - } - } -} - -#ifndef WDL_FFT_NO_PERMUTE - -static unsigned int fftfreq_c(unsigned int i,unsigned int n) -{ - unsigned int m; - - if (n <= 2) return i; - - m = n >> 1; - if (i < m) return fftfreq_c(i,m) << 1; - - i -= m; - m >>= 1; - if (i < m) return (fftfreq_c(i,m) << 2) + 1; - i -= m; - return ((fftfreq_c(i,m) << 2) - 1) & (n - 1); -} - -static int _idxperm[2<> 1, quart = half >> 1, eighth = quart >> 1; - const int *permute = WDL_fft_permute_tab(half); - unsigned int i, j; - - WDL_FFT_COMPLEX *p, *q, tw, sum, diff; - WDL_FFT_REAL tw1, tw2; - - if (!isInverse) - { - WDL_fft((WDL_FFT_COMPLEX*)buf, half, isInverse); - r2(buf); - } - else - { - v2(buf); - } - - /* Source: http://www.katjaas.nl/realFFT/realFFT2.html */ - - for (i = 1; i < quart; ++i) - { - p = (WDL_FFT_COMPLEX*)buf + permute[i]; - q = (WDL_FFT_COMPLEX*)buf + permute[half - i]; - -/* tw.re = cos(2*PI * i / len); - tw.im = sin(2*PI * i / len); */ - - if (i < eighth) - { - j = i - 1; - tw.re = d[j].re; - tw.im = d[j].im; - } - else if (i > eighth) - { - j = quart - i - 1; - tw.re = d[j].im; - tw.im = d[j].re; - } - else - { - tw.re = tw.im = sqrthalf; - } - - if (!isInverse) tw.re = -tw.re; - - sum.re = p->re + q->re; - sum.im = p->im + q->im; - diff.re = p->re - q->re; - diff.im = p->im - q->im; - - tw1 = tw.re * sum.im + tw.im * diff.re; - tw2 = tw.im * sum.im - tw.re * diff.re; - - p->re = sum.re - tw1; - p->im = diff.im - tw2; - q->re = sum.re + tw1; - q->im = -(diff.im + tw2); - } - - p = (WDL_FFT_COMPLEX*)buf + permute[i]; - p->re *= 2; - p->im *= -2; - - if (isInverse) WDL_fft((WDL_FFT_COMPLEX*)buf, half, isInverse); -} - -void WDL_real_fft(WDL_FFT_REAL* buf, int len, int isInverse) -{ - switch (len) - { - case 2: if (!isInverse) r2(buf); else v2(buf); break; - case 4: case 8: two_for_one(buf, 0, len, isInverse); break; -#define TMP(x) case x: two_for_one(buf, d##x, len, isInverse); break; - TMP(16) - TMP(32) - TMP(64) - TMP(128) - TMP(256) - TMP(512) - TMP(1024) - TMP(2048) - TMP(4096) - TMP(8192) - TMP(16384) - TMP(32768) -#undef TMP - } -} \ No newline at end of file diff --git a/src/devices/sound/fft.h b/src/devices/sound/fft.h deleted file mode 100644 index a278b50a8c8..00000000000 --- a/src/devices/sound/fft.h +++ /dev/null @@ -1,82 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Justin Frankel -/* - WDL - fft.h - Copyright (C) 2006 and later Cockos Incorporated - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - - - This file defines the interface to the WDL FFT library. These routines are based on the - DJBFFT library, which are Copyright 1999 D. J. Bernstein, djb@pobox.com - - The DJB FFT web page is: http://cr.yp.to/djbfft.html - - - This file is modified from the original; it has been reformatted for 4-space - tabs. -*/ - -#ifndef WDL_FFT_H -#define WDL_FFT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef WDL_FFT_REALSIZE -#define WDL_FFT_REALSIZE 8 -#endif - -#if WDL_FFT_REALSIZE == 4 -typedef float WDL_FFT_REAL; -#elif WDL_FFT_REALSIZE == 8 -typedef double WDL_FFT_REAL; -#else -#error invalid FFT item size -#endif - -typedef struct { - WDL_FFT_REAL re; - WDL_FFT_REAL im; -} WDL_FFT_COMPLEX; - -extern void WDL_fft_init(); - -extern void WDL_fft_complexmul(WDL_FFT_COMPLEX *dest, WDL_FFT_COMPLEX *src, int len); -extern void WDL_fft_complexmul2(WDL_FFT_COMPLEX *dest, WDL_FFT_COMPLEX *src, WDL_FFT_COMPLEX *src2, int len); -extern void WDL_fft_complexmul3(WDL_FFT_COMPLEX *destAdd, WDL_FFT_COMPLEX *src, WDL_FFT_COMPLEX *src2, int len); - -/* Expects WDL_FFT_COMPLEX input[0..len-1] scaled by 1.0/len, returns -WDL_FFT_COMPLEX output[0..len-1] order by WDL_fft_permute(len). */ -extern void WDL_fft(WDL_FFT_COMPLEX *, int len, int isInverse); - -/* Expects WDL_FFT_REAL input[0..len-1] scaled by 0.5/len, returns -WDL_FFT_COMPLEX output[0..len/2-1], for len >= 4 order by -WDL_fft_permute(len/2). Note that output[len/2].re is stored in -output[0].im. */ -extern void WDL_real_fft(WDL_FFT_REAL *, int len, int isInverse); - -extern int WDL_fft_permute(int fftsize, int idx); -extern int *WDL_fft_permute_tab(int fftsize); - -#ifdef __cplusplus -}; -#endif - -#endif \ No newline at end of file diff --git a/src/devices/sound/vgm_visualizer.cpp b/src/devices/sound/vgm_visualizer.cpp index 3d4407d3822..4c5af833ea2 100644 --- a/src/devices/sound/vgm_visualizer.cpp +++ b/src/devices/sound/vgm_visualizer.cpp @@ -12,16 +12,18 @@ #include "emu.h" #include "sound/vgm_visualizer.h" -#include "fft.h" + +#include "wdlfft/fft.h" #include -static float lerp(float a, float b, float f) +constexpr float lerp(float a, float b, float f) { return (b - a) * f + a; } + //************************************************************************** // GLOBAL VARIABLES //**************************************************************************