···1+{ stdenv, fetchurl, pkg-config, alsaLib, audiofile, gtk2, libxml2 }:
2+3+stdenv.mkDerivation rec {
4+ name = "soundmodem";
5+ version = "0.20";
6+7+ src = fetchurl {
8+ url = "https://archive.org/download/${name}-${version}/${name}-${version}.tar.gz";
9+ sha256 = "156l3wjnh5rcisxb42kcmlf74swf679v4xnj09zy5j74rd4h721z";
10+ };
11+12+ nativeBuildInputs = [ pkg-config ];
13+ buildInputs = [ alsaLib audiofile gtk2 libxml2 ];
14+15+ patches = [ ./matFix.patch ];
16+17+ doCheck = true;
18+19+ meta = with stdenv.lib; {
20+ description = "Audio based modem for ham radio supporting ax.25";
21+ longDescription = ''
22+ This software allows a standard PC soundcard to be used as a packet radio "modem". The whole processing is done on the main processor CPU.
23+ Unlike previous packet radio modem software, this new release offers several new benefits:
24+ - Now uses standard operating system sound drivers (OSS/Free under Linux, /dev/audio under Solaris and DirectSound under Windows), thus runs on all soundcards for which drivers for the desired operating system are available.
25+ - No fixed relationship between bitrate, sampling rate, and modem parameters. Modems may be parametrized, and multiple modems may even run on the same audio channel!
26+ - Usermode solution allows the use of MMX, VIS, Floating point and other media instruction sets to speed up computation.
27+ - Cross platform builds from a single source code provides ubiquitous availability.
28+ '';
29+ #homepage = "http://gna.org/projects/soundmodem"; # official, but "Connection refused"
30+ homepage = "http://soundmodem.vk4msl.id.au/";
31+ downloadPage = "https://archive.org/download/${name}-${version}/${name}-${version}.tar.gz";
32+ license = licenses.gpl2Only;
33+ maintainers = with maintainers; [ ymarkus ];
34+ platforms = platforms.all;
35+ };
36+}
+11
pkgs/applications/radio/soundmodem/matFix.patch
···00000000000
···1+--- a/matlib/mat.hh 2003-01-06 23:47:26.000000000 +0100
2++++ b/matlib/mat.copy.hh 2021-01-06 10:05:34.332415179 +0100
3+@@ -91,7 +91,7 @@
4+ memcpy(c, r, d1 * d3 * sizeof(c[0]));
5+ }
6+7+-template<typename T> void mdet(const T *c, unsigned int d)
8++template<typename T> int mdet(const T *c, unsigned int d)
9+ {
10+ T *c2;
11+ unsigned int i, j, k, l;