From 5e12b212e258341fbf834d0a26e4a790efb4cb69 Mon Sep 17 00:00:00 2001 From: miaodegu7 Date: Sat, 16 May 2026 15:52:54 +0800 Subject: [PATCH 1/2] xcx first push inclub msk144 mode --- .github/workflows/build.yml | 274 + .gitignore | 16 + .gitmodules | 3 + .vscode/c_cpp_properties.json | 21 + CMakeLists.txt | 425 + LICENSE | 20 + PUBLISHING.md | 66 + README.md | 530 ++ build_mingw.sh | 103 + docs/prebuilt-bundling.md | 188 + examples/examples.ts | 609 ++ native/wsjtx_c_api.cpp | 304 + native/wsjtx_c_api.h | 229 + native/wsjtx_wrapper.cpp | 582 ++ native/wsjtx_wrapper.h | 140 + package-lock.json | 1658 ++++ package.json | 82 + scripts/package-prebuilds.js | 125 + src/index.ts | 270 + src/types.ts | 143 + test/wsjtx.basic.test.ts | 114 + test/wsjtx.test.ts | 497 + tsconfig.json | 34 + vcpkg.json | 10 + wsjtx_lib/.gitattributes | 63 + wsjtx_lib/.gitignore | 366 + wsjtx_lib/CMakeLists.txt | 288 + wsjtx_lib/COPYING | 151 + wsjtx_lib/DataBuffer.h | 177 + wsjtx_lib/README.md | 51 + wsjtx_lib/commons.h | 102 + wsjtx_lib/constants.h | 86 + wsjtx_lib/example/date.h | 8234 +++++++++++++++++ wsjtx_lib/example/wave.cpp | 184 + wsjtx_lib/example/wave.h | 11 + wsjtx_lib/example/wsjtx_test.cpp | 232 + wsjtx_lib/fortran_interface.h | 116 + wsjtx_lib/lib/77bit/77bit.txt | 84 + wsjtx_lib/lib/77bit/CQ_messages.txt | 12 + wsjtx_lib/lib/77bit/NewCode.txt | 49 + .../lib/77bit/New_Features_WSJT-X_2.0.txt | 263 + wsjtx_lib/lib/77bit/all28.txt | 40 + wsjtx_lib/lib/77bit/arrl_sec.txt | 83 + wsjtx_lib/lib/77bit/call_to_c28.f90 | 21 + wsjtx_lib/lib/77bit/calls.txt | 5 + wsjtx_lib/lib/77bit/calls1.txt | 21 + wsjtx_lib/lib/77bit/calls2.txt | 7 + wsjtx_lib/lib/77bit/calls3.txt | 4 + wsjtx_lib/lib/77bit/encode77.f90 | 60 + wsjtx_lib/lib/77bit/encode77.out | 41 + wsjtx_lib/lib/77bit/free_text.f90 | 58 + wsjtx_lib/lib/77bit/g2 | 6 + wsjtx_lib/lib/77bit/g8 | 3 + wsjtx_lib/lib/77bit/hash22calc.f90 | 42 + wsjtx_lib/lib/77bit/messages.txt | 100 + wsjtx_lib/lib/77bit/messages_2.txt | 49 + wsjtx_lib/lib/77bit/msgtypes.txt | 23 + wsjtx_lib/lib/77bit/msgtypes.txt.0 | 23 + wsjtx_lib/lib/77bit/my_hash.f90 | 11 + wsjtx_lib/lib/77bit/nonstd_to_c58.f90 | 13 + wsjtx_lib/lib/77bit/packjt77.f90 | 1640 ++++ wsjtx_lib/lib/77bit/parse77.f90 | 11 + wsjtx_lib/lib/77bit/test28.f90 | 63 + wsjtx_lib/lib/77bit/test28.txt | 35 + wsjtx_lib/lib/77bit/todo.txt | 59 + wsjtx_lib/lib/77bit/tokens.txt | 12 + wsjtx_lib/lib/77bit/wsjt-x_v2.0.txt | 213 + wsjtx_lib/lib/CQnnnCAT.txt | 39 + wsjtx_lib/lib/C_interface_module.f90 | 441 + wsjtx_lib/lib/DXped_Operations.txt | 186 + wsjtx_lib/lib/DXped_pseudo_code.txt | 71 + wsjtx_lib/lib/addit.f90 | 79 + wsjtx_lib/lib/afc65b.f90 | 94 + wsjtx_lib/lib/afc9.f90 | 81 + wsjtx_lib/lib/all_fft.out | 2069 +++++ wsjtx_lib/lib/allsim.f90 | 122 + wsjtx_lib/lib/ana64.f90 | 20 + wsjtx_lib/lib/ana932.f90 | 21 + wsjtx_lib/lib/analytic.f90 | 75 + wsjtx_lib/lib/astro.f90 | 107 + wsjtx_lib/lib/astro0.f90 | 83 + wsjtx_lib/lib/astrosub.f90 | 98 + wsjtx_lib/lib/avecho.f90 | 120 + wsjtx_lib/lib/averms.f90 | 20 + wsjtx_lib/lib/avg4.f90 | 2 + wsjtx_lib/lib/azdist.f90 | 124 + wsjtx_lib/lib/baddata.f90 | 29 + wsjtx_lib/lib/badmsg.f90 | 46 + wsjtx_lib/lib/blanker.f90 | 52 + wsjtx_lib/lib/bpdecode128_90.f90 | 117 + wsjtx_lib/lib/bpdecode128_90.f90.save | 116 + wsjtx_lib/lib/bpdecode144.f90 | 348 + wsjtx_lib/lib/bpdecode40.f90 | 148 + wsjtx_lib/lib/calibrate.f90 | 96 + wsjtx_lib/lib/ccf2.f90 | 49 + wsjtx_lib/lib/ccf65.f90 | 117 + wsjtx_lib/lib/char.h | 57 + wsjtx_lib/lib/chkcall.f90 | 60 + wsjtx_lib/lib/chkfft.f90 | 164 + wsjtx_lib/lib/chkfft.txt | 124 + wsjtx_lib/lib/chkfft2.f90 | 187 + wsjtx_lib/lib/chkfft3.f90 | 177 + wsjtx_lib/lib/chkhist.f90 | 21 + wsjtx_lib/lib/chkmsg.f90 | 31 + wsjtx_lib/lib/chkss2.f90 | 20 + wsjtx_lib/lib/code426.f90 | 62 + wsjtx_lib/lib/constants.f90 | 5 + wsjtx_lib/lib/contest72.f90 | 89 + wsjtx_lib/lib/conv232.f90 | 38 + wsjtx_lib/lib/coord.f90 | 41 + wsjtx_lib/lib/count4.f90 | 54 + wsjtx_lib/lib/crc.f90 | 54 + wsjtx_lib/lib/crc10.cpp | 31 + wsjtx_lib/lib/crc13.cpp | 31 + wsjtx_lib/lib/crc14.cpp | 31 + wsjtx_lib/lib/db.f90 | 5 + wsjtx_lib/lib/decode4.f90 | 112 + wsjtx_lib/lib/decode65a.f90 | 154 + wsjtx_lib/lib/decode65b.f90 | 36 + wsjtx_lib/lib/decode9w.f90 | 67 + wsjtx_lib/lib/decode_rs.c | 263 + wsjtx_lib/lib/decoder.f90 | 847 ++ wsjtx_lib/lib/deep4.f90 | 169 + wsjtx_lib/lib/deg2grid.f90 | 30 + wsjtx_lib/lib/degrade_snr.f90 | 21 + wsjtx_lib/lib/demod64a.f90 | 61 + wsjtx_lib/lib/determ.f90 | 32 + wsjtx_lib/lib/digi-contest.txt | 277 + wsjtx_lib/lib/downsam9.f90 | 88 + wsjtx_lib/lib/dxped_fifo.f90 | 23 + wsjtx_lib/lib/echo_snr.f90 | 51 + wsjtx_lib/lib/echosim.f90 | 126 + wsjtx_lib/lib/emedop.dat | 8 + wsjtx_lib/lib/emedop.f90 | 67 + wsjtx_lib/lib/encode232.f90 | 33 + wsjtx_lib/lib/encode4.f90 | 20 + wsjtx_lib/lib/encode_128_90.f90 | 58 + wsjtx_lib/lib/encode_msk40.f90 | 46 + wsjtx_lib/lib/encode_rs.c | 47 + wsjtx_lib/lib/entail.f90 | 30 + wsjtx_lib/lib/ephem.f90 | 85 + wsjtx_lib/lib/extract.f90 | 243 + wsjtx_lib/lib/extract4.f90 | 69 + wsjtx_lib/lib/extractmessage77.f90 | 17 + wsjtx_lib/lib/fano232.f90 | 138 + wsjtx_lib/lib/fast9.f90 | 191 + wsjtx_lib/lib/fast_decode.f90 | 90 + wsjtx_lib/lib/fcal.f90 | 117 + wsjtx_lib/lib/fchisq.f90 | 44 + wsjtx_lib/lib/fchisq0.f90 | 23 + wsjtx_lib/lib/fchisq65.f90 | 68 + wsjtx_lib/lib/fer | 41 + wsjtx_lib/lib/fer65.f90 | 195 + wsjtx_lib/lib/fersum.f90 | 72 + wsjtx_lib/lib/fftw3.f03 | 1246 +++ wsjtx_lib/lib/fftw3.f90 | 64 + wsjtx_lib/lib/fftw3mod.f90 | 4 + wsjtx_lib/lib/fil3.f90 | 159 + wsjtx_lib/lib/fil3c.f90 | 72 + wsjtx_lib/lib/fil4.f90 | 49 + wsjtx_lib/lib/fil61.f90 | 64 + wsjtx_lib/lib/fil6521.f90 | 45 + wsjtx_lib/lib/filbig.f90 | 142 + wsjtx_lib/lib/fitcal.f90 | 34 + wsjtx_lib/lib/fix_contest_msg.f90 | 32 + wsjtx_lib/lib/fixwav.f90 | 66 + wsjtx_lib/lib/flat1.f90 | 23 + wsjtx_lib/lib/flat1a.f90 | 29 + wsjtx_lib/lib/flat1b.f90 | 29 + wsjtx_lib/lib/flat2.f90 | 18 + wsjtx_lib/lib/flat4.f90 | 53 + wsjtx_lib/lib/flat65.f90 | 25 + wsjtx_lib/lib/fmeasure.f90 | 75 + wsjtx_lib/lib/fmtave.f90 | 64 + wsjtx_lib/lib/fmtmsg.f90 | 21 + wsjtx_lib/lib/foldspec9f.f90 | 30 + wsjtx_lib/lib/four2a.f90 | 114 + wsjtx_lib/lib/fox_rx.f90 | 66 + wsjtx_lib/lib/fox_sim.f90 | 165 + wsjtx_lib/lib/fox_tx.f90 | 92 + wsjtx_lib/lib/fqso_first.f90 | 32 + wsjtx_lib/lib/freqcal.f90 | 92 + wsjtx_lib/lib/fspread_lorentz.f90 | 47 + wsjtx_lib/lib/fst280_decode.f90 | 562 ++ wsjtx_lib/lib/fst4/bpdecode240_101.f90 | 111 + wsjtx_lib/lib/fst4/decode240_101.f90 | 155 + wsjtx_lib/lib/fst4/decode240_74.f90 | 161 + wsjtx_lib/lib/fst4/encode240_101.f90 | 44 + wsjtx_lib/lib/fst4/encode240_74.f90 | 44 + wsjtx_lib/lib/fst4/fastosd240_74.f90 | 292 + wsjtx_lib/lib/fst4/fst4_baseline.f90 | 48 + wsjtx_lib/lib/fst4/fst4_params.f90 | 7 + wsjtx_lib/lib/fst4/fst4sim.f90 | 159 + wsjtx_lib/lib/fst4/gen_fst4wave.f90 | 93 + wsjtx_lib/lib/fst4/genfst4.f90 | 111 + wsjtx_lib/lib/fst4/get_crc24.f90 | 25 + wsjtx_lib/lib/fst4/get_fst4_bitmetrics.f90 | 190 + wsjtx_lib/lib/fst4/get_fst4_bitmetrics2.f90 | 127 + wsjtx_lib/lib/fst4/ldpc_240_101_generator.f90 | 142 + wsjtx_lib/lib/fst4/ldpc_240_101_parity.f90 | 393 + wsjtx_lib/lib/fst4/ldpc_240_74_generator.f90 | 170 + wsjtx_lib/lib/fst4/ldpc_240_74_parity.f90 | 423 + wsjtx_lib/lib/fst4/ldpcsim240_101.f90 | 137 + wsjtx_lib/lib/fst4/ldpcsim240_74.f90 | 125 + wsjtx_lib/lib/fst4/lorentzian_fading.f90 | 43 + wsjtx_lib/lib/fst4/osd240_101.f90 | 404 + wsjtx_lib/lib/fst4/osd240_74.f90 | 404 + wsjtx_lib/lib/fst4_decode.f90 | 1025 ++ wsjtx_lib/lib/ft2/cdatetime.f90 | 6 + wsjtx_lib/lib/ft2/ft2.f90 | 279 + wsjtx_lib/lib/ft2/ft2.ini | 2 + wsjtx_lib/lib/ft2/ft2_decode.f90 | 298 + wsjtx_lib/lib/ft2/ft2_gfsk_iwave.f90 | 88 + wsjtx_lib/lib/ft2/ft2_iwave.f90 | 64 + wsjtx_lib/lib/ft2/ft2_params.f90 | 12 + wsjtx_lib/lib/ft2/ft2audio.c | 347 + wsjtx_lib/lib/ft2/g4.cmd | 7 + wsjtx_lib/lib/ft2/gcom1.f90 | 34 + wsjtx_lib/lib/ft2/genft2.f90 | 86 + wsjtx_lib/lib/ft2/getcandidates2a.f90 | 64 + wsjtx_lib/lib/ft2/gfsk_pulse.f90 | 6 + wsjtx_lib/lib/ft2/libportaudio.a | Bin 0 -> 1065188 bytes wsjtx_lib/lib/ft2/libwsjt_cxx.a | Bin 0 -> 192392 bytes wsjtx_lib/lib/ft2/libwsjt_fort.a | Bin 0 -> 1699980 bytes wsjtx_lib/lib/ft2/portaudio.h | 1123 +++ wsjtx_lib/lib/ft2/ptt.c | 58 + wsjtx_lib/lib/ft2/ptt_unix.c | 341 + wsjtx_lib/lib/ft4/clockit.f90 | 111 + wsjtx_lib/lib/ft4/ft4_baseline.f90 | 49 + wsjtx_lib/lib/ft4/ft4_downsample.f90 | 48 + wsjtx_lib/lib/ft4/ft4_params.f90 | 16 + wsjtx_lib/lib/ft4/ft4_testmsg.f90 | 50 + wsjtx_lib/lib/ft4/ft4code.f90 | 102 + wsjtx_lib/lib/ft4/ft4sim.f90 | 125 + wsjtx_lib/lib/ft4/ft4sim_mult.f90 | 103 + wsjtx_lib/lib/ft4/gen_ft4wave.f90 | 66 + wsjtx_lib/lib/ft4/genft4.f90 | 90 + wsjtx_lib/lib/ft4/get_ft4_bitmetrics.f90 | 116 + wsjtx_lib/lib/ft4/getcandidates4.f90 | 83 + wsjtx_lib/lib/ft4/messages.txt | 162 + wsjtx_lib/lib/ft4/subtractft4.f90 | 66 + wsjtx_lib/lib/ft4/sync4d.f90 | 96 + wsjtx_lib/lib/ft4_decode.f90 | 467 + wsjtx_lib/lib/ft8/DXpedQuickStart.txt | 126 + wsjtx_lib/lib/ft8/baseline.f90 | 49 + wsjtx_lib/lib/ft8/bpdecode174_91.f90 | 117 + wsjtx_lib/lib/ft8/chkcrc13a.f90 | 24 + wsjtx_lib/lib/ft8/chkcrc14a.f90 | 24 + wsjtx_lib/lib/ft8/chkdec.f90 | 161 + wsjtx_lib/lib/ft8/compress.f90 | 37 + wsjtx_lib/lib/ft8/decode174_91.f90 | 155 + wsjtx_lib/lib/ft8/encode174.f90 | 50 + wsjtx_lib/lib/ft8/encode174_91.f90 | 58 + wsjtx_lib/lib/ft8/encode174_91_nocrc.f90 | 47 + wsjtx_lib/lib/ft8/filt8.f90 | 52 + wsjtx_lib/lib/ft8/foxfilt.f90 | 36 + wsjtx_lib/lib/ft8/foxgen.f90 | 72 + wsjtx_lib/lib/ft8/foxgen_wrap.f90 | 25 + wsjtx_lib/lib/ft8/ft8_a7.f90 | 421 + wsjtx_lib/lib/ft8/ft8_a8d.f90 | 188 + wsjtx_lib/lib/ft8/ft8_downsample.f90 | 51 + wsjtx_lib/lib/ft8/ft8_params.f90 | 12 + wsjtx_lib/lib/ft8/ft8_testmsg.f90 | 51 + wsjtx_lib/lib/ft8/ft8apset.f90 | 62 + wsjtx_lib/lib/ft8/ft8b.f90 | 530 ++ wsjtx_lib/lib/ft8/ft8c.f90 | 261 + wsjtx_lib/lib/ft8/ft8code.f90 | 105 + wsjtx_lib/lib/ft8/ft8d.f90 | 63 + wsjtx_lib/lib/ft8/ft8q3.f90 | 109 + wsjtx_lib/lib/ft8/ft8sim.f90 | 131 + wsjtx_lib/lib/ft8/gen_ft8wave.f90 | 81 + wsjtx_lib/lib/ft8/genft8.f90 | 46 + wsjtx_lib/lib/ft8/genft8refsig.f90 | 23 + wsjtx_lib/lib/ft8/get_crc14.f90 | 25 + wsjtx_lib/lib/ft8/get_spectrum_baseline.f90 | 54 + wsjtx_lib/lib/ft8/h1.f90 | 17 + wsjtx_lib/lib/ft8/ldpc_174_87_params.f90 | 102 + wsjtx_lib/lib/ft8/ldpc_174_91_c_colorder.f90 | 11 + wsjtx_lib/lib/ft8/ldpc_174_91_c_generator.f90 | 86 + wsjtx_lib/lib/ft8/ldpc_174_91_c_parity.f90 | 270 + wsjtx_lib/lib/ft8/ldpcsim174_91.f90 | 134 + wsjtx_lib/lib/ft8/osd174_91.f90 | 409 + wsjtx_lib/lib/ft8/subtractft8.f90 | 106 + wsjtx_lib/lib/ft8/sync8.f90 | 176 + wsjtx_lib/lib/ft8/sync8d.f90 | 50 + wsjtx_lib/lib/ft8/test_ft8q3.f90 | 41 + wsjtx_lib/lib/ft8/twkfreq1.f90 | 26 + wsjtx_lib/lib/ft8/watterson.f90 | 69 + wsjtx_lib/lib/ft8_decode.f90 | 330 + wsjtx_lib/lib/ftrsd/Makefile | 53 + wsjtx_lib/lib/ftrsd/Makefile.sfrsd | 30 + wsjtx_lib/lib/ftrsd/Makefile.sfrsd3 | 38 + wsjtx_lib/lib/ftrsd/decode_rs.c | 268 + wsjtx_lib/lib/ftrsd/encode_rs.c | 47 + wsjtx_lib/lib/ftrsd/extract2.f90 | 145 + wsjtx_lib/lib/ftrsd/ftrsd2.c | 213 + wsjtx_lib/lib/ftrsd/ftrsd_paper/JT65B_EME.png | Bin 0 -> 35719 bytes wsjtx_lib/lib/ftrsd/ftrsd_paper/Makefile | 40 + wsjtx_lib/lib/ftrsd/ftrsd_paper/binomial.c | 69 + .../lib/ftrsd/ftrsd_paper/binomial_subs.c | 55 + wsjtx_lib/lib/ftrsd/ftrsd_paper/bmdata-rf.dat | 11 + wsjtx_lib/lib/ftrsd/ftrsd_paper/bmdata.dat | 8 + .../lib/ftrsd/ftrsd_paper/bmtheory25.dat | 43 + .../lib/ftrsd/ftrsd_paper/bmtheory40.dat | 43 + .../lib/ftrsd/ftrsd_paper/bmtheory43.dat | 43 + wsjtx_lib/lib/ftrsd/ftrsd_paper/bodide.f90 | 54 + wsjtx_lib/lib/ftrsd/ftrsd_paper/bodide.lab | 4 + .../lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot | 24 + .../ftrsd_paper/fig_ntrials_vs_nhard.gnuplot | 14 + .../ftrsd/ftrsd_paper/fig_psuccess.gnuplot | 25 + .../lib/ftrsd/ftrsd_paper/fig_psuccess.pdf | Bin 0 -> 26687 bytes .../lib/ftrsd/ftrsd_paper/fig_subtracted.tiff | Bin 0 -> 512012 bytes .../lib/ftrsd/ftrsd_paper/fig_waterfall.png | Bin 0 -> 257654 bytes .../lib/ftrsd/ftrsd_paper/fig_waterfall.tiff | Bin 0 -> 538486 bytes .../lib/ftrsd/ftrsd_paper/fig_wer.gnuplot | 23 + wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_wer.pdf | Bin 0 -> 32859 bytes .../lib/ftrsd/ftrsd_paper/fig_wer2.gnuplot | 23 + .../lib/ftrsd/ftrsd_paper/fig_wer3.gnuplot | 21 + wsjtx_lib/lib/ftrsd/ftrsd_paper/ftdata-10.dat | 10 + .../lib/ftrsd/ftrsd_paper/ftdata-100.dat | 10 + .../lib/ftrsd/ftrsd_paper/ftdata-1000.dat | 9 + .../lib/ftrsd/ftrsd_paper/ftdata-10000.dat | 11 + .../lib/ftrsd/ftrsd_paper/ftdata-100000.dat | 11 + wsjtx_lib/lib/ftrsd/ftrsd_paper/ftrsd.lyx | 3289 +++++++ wsjtx_lib/lib/ftrsd/ftrsd_paper/kvasd-12.dat | 8 + wsjtx_lib/lib/ftrsd/ftrsd_paper/kvasd-15.dat | 9 + wsjtx_lib/lib/ftrsd/ftrsd_paper/kvasd-8.dat | 8 + wsjtx_lib/lib/ftrsd/ftrsd_paper/mfsk.f90 | 33 + wsjtx_lib/lib/ftrsd/ftrsd_paper/prob.f90 | 41 + wsjtx_lib/lib/ftrsd/ftrsd_paper/psuccess.lab | 14 + .../ftrsd/ftrsd_paper/stats-100000-24db-3.dat | 930 ++ wsjtx_lib/lib/ftrsd/ftrsd_paper/stats_0.0 | 27 + wsjtx_lib/lib/ftrsd/ftrsd_paper/stats_0.2 | 27 + wsjtx_lib/lib/ftrsd/ftrsd_paper/stats_1.0 | 27 + wsjtx_lib/lib/ftrsd/ftrsd_paper/wer.lab | 0 wsjtx_lib/lib/ftrsd/ftrsd_paper/wer2.lab | 7 + wsjtx_lib/lib/ftrsd/ftrsdap.c | 227 + wsjtx_lib/lib/ftrsd/init_rs.c | 119 + wsjtx_lib/lib/ftrsd/int.h | 54 + wsjtx_lib/lib/ftrsd/rs2.h | 16 + wsjtx_lib/lib/ftrsd/rsdtest.f90 | 34 + wsjtx_lib/lib/ftrsd/sfrsd.c | 137 + wsjtx_lib/lib/ftrsd/sfrsd2.h | 3 + wsjtx_lib/lib/ftrsd/sfrsd3.c | 243 + wsjtx_lib/lib/g1 | 4 + wsjtx_lib/lib/g1.bat | 4 + wsjtx_lib/lib/g2.bat | 4 + wsjtx_lib/lib/g3.bat | 4 + wsjtx_lib/lib/g4.bat | 3 + wsjtx_lib/lib/gen4.f90 | 43 + wsjtx_lib/lib/gen65.f90 | 93 + wsjtx_lib/lib/gen9.f90 | 65 + wsjtx_lib/lib/genmet.f90 | 90 + wsjtx_lib/lib/genmsk40.f90 | 66 + wsjtx_lib/lib/genmsk_128_90.f90 | 120 + wsjtx_lib/lib/genqra64.f90 | 70 + wsjtx_lib/lib/genwave.f90 | 52 + wsjtx_lib/lib/genwspr.f90 | 30 + wsjtx_lib/lib/geodist.f90 | 105 + wsjtx_lib/lib/get_q3list.f90 | 132 + wsjtx_lib/lib/getlags.f90 | 27 + wsjtx_lib/lib/getmet4.f90 | 56 + wsjtx_lib/lib/go_chkfft.cmd | 1 + wsjtx_lib/lib/golay24_table.c | 28 + wsjtx_lib/lib/gran.c | 34 + wsjtx_lib/lib/graycode.f90 | 9 + wsjtx_lib/lib/graycode65.f90 | 9 + wsjtx_lib/lib/grayline.f90 | 32 + wsjtx_lib/lib/grid2deg.f90 | 39 + wsjtx_lib/lib/hash.f90 | 10 + wsjtx_lib/lib/hashing.f90 | 10 + wsjtx_lib/lib/hint65.f90 | 154 + wsjtx_lib/lib/hspec.f90 | 105 + wsjtx_lib/lib/igray.c | 18 + wsjtx_lib/lib/image.f90 | 336 + wsjtx_lib/lib/indexx.f90 | 91 + wsjtx_lib/lib/init_random_seed.c | 82 + wsjtx_lib/lib/init_random_seed.f90 | 55 + wsjtx_lib/lib/init_random_seed.h | 20 + wsjtx_lib/lib/init_rs.c | 120 + wsjtx_lib/lib/int.h | 57 + wsjtx_lib/lib/inter_wspr.f90 | 45 + wsjtx_lib/lib/interleave4.f90 | 43 + wsjtx_lib/lib/interleave63.f90 | 25 + wsjtx_lib/lib/interleave8.f90 | 17 + wsjtx_lib/lib/interleave9.f90 | 39 + wsjtx_lib/lib/iso_c_utilities.f90 | 87 + wsjtx_lib/lib/jplsubs.f | 900 ++ wsjtx_lib/lib/jt4.f90 | 26 + wsjtx_lib/lib/jt49sim.f90 | 150 + wsjtx_lib/lib/jt4_decode.f90 | 412 + wsjtx_lib/lib/jt4a.f90 | 2 + wsjtx_lib/lib/jt4code.f90 | 50 + wsjtx_lib/lib/jt4sim.f90 | 181 + wsjtx_lib/lib/jt65.f90 | 143 + wsjtx_lib/lib/jt65_decode.f90 | 522 ++ wsjtx_lib/lib/jt65_mod.f90 | 13 + wsjtx_lib/lib/jt65_test.f90 | 78 + wsjtx_lib/lib/jt65code.f90 | 103 + wsjtx_lib/lib/jt65sim.f90 | 312 + wsjtx_lib/lib/jt9.f90 | 373 + wsjtx_lib/lib/jt9_decode.f90 | 172 + wsjtx_lib/lib/jt9a.f90 | 95 + wsjtx_lib/lib/jt9code.f90 | 86 + wsjtx_lib/lib/jt9com.f90 | 59 + wsjtx_lib/lib/jt9fano.f90 | 92 + wsjtx_lib/lib/jt9sim.f90 | 175 + wsjtx_lib/lib/jt9sync.f90 | 18 + wsjtx_lib/lib/jt9w.f90 | 28 + wsjtx_lib/lib/jtmsg.f90 | 131 + wsjtx_lib/lib/ldpc32_table.c | 30 + wsjtx_lib/lib/ldpc_128_90_b_generator.f90 | 41 + .../lib/ldpc_128_90_b_reordered_parity.f90 | 184 + wsjtx_lib/lib/ldpc_128_90_generator.f90 | 41 + .../lib/ldpc_128_90_reordered_parity.f90 | 176 + wsjtx_lib/lib/ldpcsim128_90.f90 | 142 + wsjtx_lib/lib/ldpcsim40.f90 | 138 + wsjtx_lib/lib/libration.f90 | 38 + wsjtx_lib/lib/lorentzian.f90 | 102 + wsjtx_lib/lib/lpf1.f90 | 29 + wsjtx_lib/lib/makepings.f90 | 25 + wsjtx_lib/lib/map65_mmdec.f90 | 90 + wsjtx_lib/lib/met8.21 | 256 + wsjtx_lib/lib/mixlpf.f90 | 25 + wsjtx_lib/lib/moondopjpl.f90 | 43 + wsjtx_lib/lib/morse.f90 | 87 + wsjtx_lib/lib/move.f90 | 7 + wsjtx_lib/lib/msgs.txt | 60 + wsjtx_lib/lib/msk144_freq_search.f90 | 50 + wsjtx_lib/lib/msk144_testmsg.f90 | 47 + wsjtx_lib/lib/msk144code.f90 | 83 + wsjtx_lib/lib/msk144decodeframe.f90 | 112 + wsjtx_lib/lib/msk144signalquality.f90 | 213 + wsjtx_lib/lib/msk144sim.f90 | 106 + wsjtx_lib/lib/msk144spd.f90 | 196 + wsjtx_lib/lib/msk144sync.f90 | 101 + wsjtx_lib/lib/msk40_freq_search.f90 | 53 + wsjtx_lib/lib/msk40decodeframe.f90 | 163 + wsjtx_lib/lib/msk40spd.f90 | 198 + wsjtx_lib/lib/msk40sync.f90 | 103 + wsjtx_lib/lib/mskber.f90 | 146 + wsjtx_lib/lib/mskdt.f90 | 78 + wsjtx_lib/lib/mskrtd.f90 | 257 + wsjtx_lib/lib/nfft.dat | 2067 +++++ wsjtx_lib/lib/nfft.out | 1546 ++++ wsjtx_lib/lib/noisegen.f90 | 16 + wsjtx_lib/lib/nuttal_window.f90 | 15 + wsjtx_lib/lib/options.f90 | 337 + wsjtx_lib/lib/osd128_90.f90 | 375 + wsjtx_lib/lib/packjt.f90 | 1033 +++ wsjtx_lib/lib/pctile.f90 | 16 + wsjtx_lib/lib/peakdt9.f90 | 54 + wsjtx_lib/lib/peakup.f90 | 8 + wsjtx_lib/lib/pfx.f90 | 50 + wsjtx_lib/lib/platanh.f90 | 24 + wsjtx_lib/lib/plotsave.f90 | 34 + wsjtx_lib/lib/pltanh.f90 | 24 + wsjtx_lib/lib/polyfit.f90 | 72 + wsjtx_lib/lib/prcom.f90 | 1 + wsjtx_lib/lib/prog_args.f90 | 4 + wsjtx_lib/lib/ps4.f90 | 27 + wsjtx_lib/lib/psk_parse.f90 | 108 + wsjtx_lib/lib/ptt.c | 50 + wsjtx_lib/lib/q65_decode.f90 | 505 + wsjtx_lib/lib/q65params.f90 | 32 + wsjtx_lib/lib/qra/q65/Makefile.Win | 40 + wsjtx_lib/lib/qra/q65/build.sh | 2 + wsjtx_lib/lib/qra/q65/ebnovalues.txt | 17 + wsjtx_lib/lib/qra/q65/fadengauss.c | 302 + wsjtx_lib/lib/qra/q65/fadenlorentz.c | 304 + wsjtx_lib/lib/qra/q65/genq65.f90 | 51 + wsjtx_lib/lib/qra/q65/normrnd.c | 82 + wsjtx_lib/lib/qra/q65/normrnd.h | 51 + wsjtx_lib/lib/qra/q65/npfwht.c | 216 + wsjtx_lib/lib/qra/q65/npfwht.h | 45 + wsjtx_lib/lib/qra/q65/pdmath.c | 385 + wsjtx_lib/lib/qra/q65/pdmath.h | 85 + wsjtx_lib/lib/qra/q65/q65.c | 889 ++ wsjtx_lib/lib/qra/q65/q65.f90 | 928 ++ wsjtx_lib/lib/qra/q65/q65.h | 123 + wsjtx_lib/lib/qra/q65/q65.sln | 20 + wsjtx_lib/lib/qra/q65/q65.vcproj | 255 + wsjtx_lib/lib/qra/q65/q65_ap.f90 | 166 + .../lib/qra/q65/q65_encoding_modules.f90 | 221 + wsjtx_lib/lib/qra/q65/q65_ftn_test.f90 | 51 + wsjtx_lib/lib/qra/q65/q65_loops.f90 | 101 + wsjtx_lib/lib/qra/q65/q65_set_list.f90 | 97 + wsjtx_lib/lib/qra/q65/q65_set_list2.f90 | 70 + wsjtx_lib/lib/qra/q65/q65_subs.c | 147 + wsjtx_lib/lib/qra/q65/q65code.f90 | 29 + wsjtx_lib/lib/qra/q65/q65sim.f90 | 241 + wsjtx_lib/lib/qra/q65/q65test.c | 910 ++ wsjtx_lib/lib/qra/q65/qra15_65_64_irr_e23.c | 558 ++ wsjtx_lib/lib/qra/q65/qra15_65_64_irr_e23.h | 41 + wsjtx_lib/lib/qra/q65/qracodes.c | 474 + wsjtx_lib/lib/qra/q65/qracodes.h | 80 + .../q65/wer-ff-qra15_65_64_irr_e23-ap00.txt | 19 + wsjtx_lib/lib/qra/qracodes/Makefile.Win | 33 + wsjtx_lib/lib/qra/qracodes/ebno10000.txt | 7 + wsjtx_lib/lib/qra/qracodes/ebnovalues.txt | 15 + wsjtx_lib/lib/qra/qracodes/ebnovaluesfast.txt | 11 + wsjtx_lib/lib/qra/qracodes/main.c | 737 ++ wsjtx_lib/lib/qra/qracodes/normrnd.c | 82 + wsjtx_lib/lib/qra/qracodes/normrnd.h | 51 + wsjtx_lib/lib/qra/qracodes/npfwht.c | 216 + wsjtx_lib/lib/qra/qracodes/npfwht.h | 45 + wsjtx_lib/lib/qra/qracodes/pdmath.c | 385 + wsjtx_lib/lib/qra/qracodes/pdmath.h | 85 + .../lib/qra/qracodes/qra12_63_64_irr_b.c | 534 ++ .../lib/qra/qracodes/qra12_63_64_irr_b.h | 39 + .../lib/qra/qracodes/qra13_64_64_irr_e.c | 534 ++ .../lib/qra/qracodes/qra13_64_64_irr_e.h | 39 + wsjtx_lib/lib/qra/qracodes/qracodes.c | 474 + wsjtx_lib/lib/qra/qracodes/qracodes.h | 79 + wsjtx_lib/lib/qra64code.f90 | 64 + wsjtx_lib/lib/qratest.f90 | 54 + wsjtx_lib/lib/qso50/g0 | 8 + wsjtx_lib/lib/qso50/pack50.f90 | 26 + wsjtx_lib/lib/qso50/packname.f90 | 23 + wsjtx_lib/lib/qso50/packprop.f90 | 36 + wsjtx_lib/lib/qso50/packtext2.f90 | 22 + wsjtx_lib/lib/qso50/twq.f90 | 18 + wsjtx_lib/lib/qso50/unpack50.f90 | 30 + wsjtx_lib/lib/qso50/unpackname.f90 | 20 + wsjtx_lib/lib/qso50/unpackpfx.f90 | 35 + wsjtx_lib/lib/qso50/unpackprop.f90 | 28 + wsjtx_lib/lib/qso50/unpacktext2.f90 | 17 + wsjtx_lib/lib/qso50/wqdec.f90 | 316 + wsjtx_lib/lib/qso50/wqenc.f90 | 346 + wsjtx_lib/lib/qso50/wqmsg.txt | 31 + wsjtx_lib/lib/readwav.f90 | 73 + wsjtx_lib/lib/rectify_msk.f90 | 64 + wsjtx_lib/lib/refspectrum.f90 | 158 + wsjtx_lib/lib/rig_control.c | 99 + wsjtx_lib/lib/rs.h | 35 + wsjtx_lib/lib/rtty_spec.f90 | 102 + wsjtx_lib/lib/save_dxbase.f90 | 9 + wsjtx_lib/lib/save_echo_params.f90 | 29 + wsjtx_lib/lib/savec2.f90 | 55 + wsjtx_lib/lib/sec0.f90 | 21 + wsjtx_lib/lib/sec_midn.f90 | 11 + wsjtx_lib/lib/setup65.f90 | 96 + wsjtx_lib/lib/sfrsd.f90 | 121 + wsjtx_lib/lib/sgran.c | 7 + wsjtx_lib/lib/sh65.f90 | 94 + wsjtx_lib/lib/sh65snr.f90 | 36 + wsjtx_lib/lib/shell.f90 | 27 + wsjtx_lib/lib/shmem.cpp | 20 + wsjtx_lib/lib/shmem.f90 | 45 + wsjtx_lib/lib/slasubs.f | 3400 +++++++ wsjtx_lib/lib/sleep.h | 32 + wsjtx_lib/lib/sleep_msec.f90 | 4 + wsjtx_lib/lib/slope.f90 | 40 + wsjtx_lib/lib/smo.f90 | 19 + wsjtx_lib/lib/smo121.f90 | 13 + wsjtx_lib/lib/smolorentz.f90 | 42 + wsjtx_lib/lib/softsym.f90 | 54 + wsjtx_lib/lib/softsym9f.f90 | 55 + wsjtx_lib/lib/softsym9w.f90 | 125 + wsjtx_lib/lib/sort.f90 | 96 + wsjtx_lib/lib/spec64.f90 | 53 + wsjtx_lib/lib/spec9f.f90 | 30 + wsjtx_lib/lib/spec_qra65.f90 | 50 + wsjtx_lib/lib/ss.bat | 1 + wsjtx_lib/lib/stats.f90 | 66 + wsjtx_lib/lib/stdmsg.f90 | 43 + wsjtx_lib/lib/subtract65.f90 | 112 + wsjtx_lib/lib/sumsim.f90 | 42 + wsjtx_lib/lib/sun.f90 | 88 + wsjtx_lib/lib/symspec.f90 | 126 + wsjtx_lib/lib/symspec2.f90 | 88 + wsjtx_lib/lib/symspec65.f90 | 68 + wsjtx_lib/lib/sync4.f90 | 146 + wsjtx_lib/lib/sync65.f90 | 94 + wsjtx_lib/lib/sync9.f90 | 96 + wsjtx_lib/lib/sync9f.f90 | 55 + wsjtx_lib/lib/sync9w.f90 | 81 + wsjtx_lib/lib/syncmsk.f90 | 304 + wsjtx_lib/lib/tab.c | 36 + wsjtx_lib/lib/test_init_random_seed.f90 | 8 + wsjtx_lib/lib/test_q65.f90 | 191 + wsjtx_lib/lib/test_snr.f90 | 67 + wsjtx_lib/lib/testfast9.f90 | 42 + wsjtx_lib/lib/testmsg.f90 | 145 + wsjtx_lib/lib/timefft.f90 | 141 + wsjtx_lib/lib/timefft_opts.f90 | 48 + wsjtx_lib/lib/timer_C_wrapper.f90 | 57 + wsjtx_lib/lib/timer_common.inc | 3 + wsjtx_lib/lib/timer_impl.f90 | 266 + wsjtx_lib/lib/timer_module.f90 | 24 + wsjtx_lib/lib/timf2.f90 | 142 + wsjtx_lib/lib/tmoonsub.c | 518 ++ wsjtx_lib/lib/to_contest_msg.f90 | 27 + wsjtx_lib/lib/tstrig.c | 26 + wsjtx_lib/lib/tstrig.h | 50 + wsjtx_lib/lib/tweak1.f90 | 23 + wsjtx_lib/lib/twkfreq.f90 | 30 + wsjtx_lib/lib/twkfreq65.f90 | 25 + wsjtx_lib/lib/types.f90 | 18 + wsjtx_lib/lib/update_msk40_hasharray.f90 | 25 + wsjtx_lib/lib/update_recent_calls.f90 | 19 + wsjtx_lib/lib/usleep.c | 8 + wsjtx_lib/lib/vit213.c | 221 + wsjtx_lib/lib/vit216.c | 219 + wsjtx_lib/lib/wav11.f90 | 27 + wsjtx_lib/lib/wav12.f90 | 49 + wsjtx_lib/lib/wavhdr.f90 | 110 + wsjtx_lib/lib/wisdom.c | 13 + wsjtx_lib/lib/wisdom1.bat | 2 + wsjtx_lib/lib/wqdecode.f90 | 338 + wsjtx_lib/lib/wqencode.f90 | 65 + wsjtx_lib/lib/wrapkarn.c | 70 + wsjtx_lib/lib/wsjt_modes.txt | 68 + wsjtx_lib/lib/wspr_downsample.f90 | 76 + wsjtx_lib/lib/wsprcode/go.sh | 1 + wsjtx_lib/lib/wsprcode/nhash.c | 384 + wsjtx_lib/lib/wsprcode/wspr_old_subs.f90 | 937 ++ wsjtx_lib/lib/wsprcode/wsprcode.f90 | 158 + wsjtx_lib/lib/wsprd/Makefile | 39 + wsjtx_lib/lib/wsprd/Makefile.MinGW | 30 + wsjtx_lib/lib/wsprd/Makefile.win32 | 40 + wsjtx_lib/lib/wsprd/README | 70 + wsjtx_lib/lib/wsprd/WSPRcode.f90 | 132 + wsjtx_lib/lib/wsprd/fano.c | 239 + wsjtx_lib/lib/wsprd/fano.h | 39 + wsjtx_lib/lib/wsprd/fftw3.h | 410 + wsjtx_lib/lib/wsprd/genmet.f90 | 50 + wsjtx_lib/lib/wsprd/gran.c | 28 + wsjtx_lib/lib/wsprd/jelinek.c | 163 + wsjtx_lib/lib/wsprd/jelinek.h | 24 + wsjtx_lib/lib/wsprd/metric_tables.c | 138 + wsjtx_lib/lib/wsprd/mettab.c | 76 + wsjtx_lib/lib/wsprd/nhash.c | 383 + wsjtx_lib/lib/wsprd/nhash.h | 21 + wsjtx_lib/lib/wsprd/osdwspr.f90 | 361 + wsjtx_lib/lib/wsprd/t2.f90 | 11 + wsjtx_lib/lib/wsprd/tab.c | 41 + wsjtx_lib/lib/wsprd/test_wspr.f90 | 61 + wsjtx_lib/lib/wsprd/unpk.c.obsolete | 124 + wsjtx_lib/lib/wsprd/wspr_params.f90 | 20 + wsjtx_lib/lib/wsprd/wspr_wav.f90 | 49 + wsjtx_lib/lib/wsprd/wsprd.c | 1580 ++++ wsjtx_lib/lib/wsprd/wsprd_stats.txt | 24 + wsjtx_lib/lib/wsprd/wsprd_utils.c | 340 + wsjtx_lib/lib/wsprd/wsprd_utils.h | 29 + wsjtx_lib/lib/wsprd/wsprsim.c | 212 + wsjtx_lib/lib/wsprd/wsprsim_utils.c | 312 + wsjtx_lib/lib/wsprd/wsprsim_utils.h | 16 + wsjtx_lib/lib/wsprd/wsprsimf.f90 | 113 + wsjtx_lib/lib/xcall.txt | 268 + wsjtx_lib/lib/xcor.f90 | 76 + wsjtx_lib/lib/xcor4.f90 | 95 + wsjtx_lib/lib/zplot9.f90 | 31 + wsjtx_lib/lib/zplt.f90 | 112 + wsjtx_lib/wsjtx_decode.cpp | 275 + wsjtx_lib/wsjtx_decode.h | 32 + wsjtx_lib/wsjtx_encode.cpp | 128 + wsjtx_lib/wsjtx_encode.h | 29 + wsjtx_lib/wsjtx_lib.cpp | 91 + wsjtx_lib/wsjtx_lib.h | 84 + wsjtx_lib/wsjtx_lib.sln | 28 + wsjtx_lib/wsjtx_lib.vgdbcmake | 209 + wsjtx_lib/wsjtx_wspr.h | 21 + wsjtx_lib/wsprd/fano.cpp | 238 + wsjtx_lib/wsprd/fano.h | 44 + wsjtx_lib/wsprd/metric_tables.h | 139 + wsjtx_lib/wsprd/nhash.cpp | 451 + wsjtx_lib/wsprd/nhash.h | 14 + wsjtx_lib/wsprd/tab.cpp | 41 + wsjtx_lib/wsprd/wsprd.cpp | 879 ++ wsjtx_lib/wsprd/wsprd.h | 80 + wsjtx_lib/wsprd/wsprd_utils.cpp | 354 + wsjtx_lib/wsprd/wsprd_utils.h | 42 + wsjtx_lib/wsprd/wsprsim_utils.cpp | 307 + wsjtx_lib/wsprd/wsprsim_utils.h | 9 + 675 files changed, 102716 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .vscode/c_cpp_properties.json create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 PUBLISHING.md create mode 100644 README.md create mode 100644 build_mingw.sh create mode 100644 docs/prebuilt-bundling.md create mode 100644 examples/examples.ts create mode 100644 native/wsjtx_c_api.cpp create mode 100644 native/wsjtx_c_api.h create mode 100644 native/wsjtx_wrapper.cpp create mode 100644 native/wsjtx_wrapper.h create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/package-prebuilds.js create mode 100644 src/index.ts create mode 100644 src/types.ts create mode 100644 test/wsjtx.basic.test.ts create mode 100644 test/wsjtx.test.ts create mode 100644 tsconfig.json create mode 100644 vcpkg.json create mode 100644 wsjtx_lib/.gitattributes create mode 100644 wsjtx_lib/.gitignore create mode 100644 wsjtx_lib/CMakeLists.txt create mode 100644 wsjtx_lib/COPYING create mode 100644 wsjtx_lib/DataBuffer.h create mode 100644 wsjtx_lib/README.md create mode 100644 wsjtx_lib/commons.h create mode 100644 wsjtx_lib/constants.h create mode 100644 wsjtx_lib/example/date.h create mode 100644 wsjtx_lib/example/wave.cpp create mode 100644 wsjtx_lib/example/wave.h create mode 100644 wsjtx_lib/example/wsjtx_test.cpp create mode 100644 wsjtx_lib/fortran_interface.h create mode 100644 wsjtx_lib/lib/77bit/77bit.txt create mode 100644 wsjtx_lib/lib/77bit/CQ_messages.txt create mode 100644 wsjtx_lib/lib/77bit/NewCode.txt create mode 100644 wsjtx_lib/lib/77bit/New_Features_WSJT-X_2.0.txt create mode 100644 wsjtx_lib/lib/77bit/all28.txt create mode 100644 wsjtx_lib/lib/77bit/arrl_sec.txt create mode 100644 wsjtx_lib/lib/77bit/call_to_c28.f90 create mode 100644 wsjtx_lib/lib/77bit/calls.txt create mode 100644 wsjtx_lib/lib/77bit/calls1.txt create mode 100644 wsjtx_lib/lib/77bit/calls2.txt create mode 100644 wsjtx_lib/lib/77bit/calls3.txt create mode 100644 wsjtx_lib/lib/77bit/encode77.f90 create mode 100644 wsjtx_lib/lib/77bit/encode77.out create mode 100644 wsjtx_lib/lib/77bit/free_text.f90 create mode 100644 wsjtx_lib/lib/77bit/g2 create mode 100644 wsjtx_lib/lib/77bit/g8 create mode 100644 wsjtx_lib/lib/77bit/hash22calc.f90 create mode 100644 wsjtx_lib/lib/77bit/messages.txt create mode 100644 wsjtx_lib/lib/77bit/messages_2.txt create mode 100644 wsjtx_lib/lib/77bit/msgtypes.txt create mode 100644 wsjtx_lib/lib/77bit/msgtypes.txt.0 create mode 100644 wsjtx_lib/lib/77bit/my_hash.f90 create mode 100644 wsjtx_lib/lib/77bit/nonstd_to_c58.f90 create mode 100644 wsjtx_lib/lib/77bit/packjt77.f90 create mode 100644 wsjtx_lib/lib/77bit/parse77.f90 create mode 100644 wsjtx_lib/lib/77bit/test28.f90 create mode 100644 wsjtx_lib/lib/77bit/test28.txt create mode 100644 wsjtx_lib/lib/77bit/todo.txt create mode 100644 wsjtx_lib/lib/77bit/tokens.txt create mode 100644 wsjtx_lib/lib/77bit/wsjt-x_v2.0.txt create mode 100644 wsjtx_lib/lib/CQnnnCAT.txt create mode 100644 wsjtx_lib/lib/C_interface_module.f90 create mode 100644 wsjtx_lib/lib/DXped_Operations.txt create mode 100644 wsjtx_lib/lib/DXped_pseudo_code.txt create mode 100644 wsjtx_lib/lib/addit.f90 create mode 100644 wsjtx_lib/lib/afc65b.f90 create mode 100644 wsjtx_lib/lib/afc9.f90 create mode 100644 wsjtx_lib/lib/all_fft.out create mode 100644 wsjtx_lib/lib/allsim.f90 create mode 100644 wsjtx_lib/lib/ana64.f90 create mode 100644 wsjtx_lib/lib/ana932.f90 create mode 100644 wsjtx_lib/lib/analytic.f90 create mode 100644 wsjtx_lib/lib/astro.f90 create mode 100644 wsjtx_lib/lib/astro0.f90 create mode 100644 wsjtx_lib/lib/astrosub.f90 create mode 100644 wsjtx_lib/lib/avecho.f90 create mode 100644 wsjtx_lib/lib/averms.f90 create mode 100644 wsjtx_lib/lib/avg4.f90 create mode 100644 wsjtx_lib/lib/azdist.f90 create mode 100644 wsjtx_lib/lib/baddata.f90 create mode 100644 wsjtx_lib/lib/badmsg.f90 create mode 100644 wsjtx_lib/lib/blanker.f90 create mode 100644 wsjtx_lib/lib/bpdecode128_90.f90 create mode 100644 wsjtx_lib/lib/bpdecode128_90.f90.save create mode 100644 wsjtx_lib/lib/bpdecode144.f90 create mode 100644 wsjtx_lib/lib/bpdecode40.f90 create mode 100644 wsjtx_lib/lib/calibrate.f90 create mode 100644 wsjtx_lib/lib/ccf2.f90 create mode 100644 wsjtx_lib/lib/ccf65.f90 create mode 100644 wsjtx_lib/lib/char.h create mode 100644 wsjtx_lib/lib/chkcall.f90 create mode 100644 wsjtx_lib/lib/chkfft.f90 create mode 100644 wsjtx_lib/lib/chkfft.txt create mode 100644 wsjtx_lib/lib/chkfft2.f90 create mode 100644 wsjtx_lib/lib/chkfft3.f90 create mode 100644 wsjtx_lib/lib/chkhist.f90 create mode 100644 wsjtx_lib/lib/chkmsg.f90 create mode 100644 wsjtx_lib/lib/chkss2.f90 create mode 100644 wsjtx_lib/lib/code426.f90 create mode 100644 wsjtx_lib/lib/constants.f90 create mode 100644 wsjtx_lib/lib/contest72.f90 create mode 100644 wsjtx_lib/lib/conv232.f90 create mode 100644 wsjtx_lib/lib/coord.f90 create mode 100644 wsjtx_lib/lib/count4.f90 create mode 100644 wsjtx_lib/lib/crc.f90 create mode 100644 wsjtx_lib/lib/crc10.cpp create mode 100644 wsjtx_lib/lib/crc13.cpp create mode 100644 wsjtx_lib/lib/crc14.cpp create mode 100644 wsjtx_lib/lib/db.f90 create mode 100644 wsjtx_lib/lib/decode4.f90 create mode 100644 wsjtx_lib/lib/decode65a.f90 create mode 100644 wsjtx_lib/lib/decode65b.f90 create mode 100644 wsjtx_lib/lib/decode9w.f90 create mode 100644 wsjtx_lib/lib/decode_rs.c create mode 100644 wsjtx_lib/lib/decoder.f90 create mode 100644 wsjtx_lib/lib/deep4.f90 create mode 100644 wsjtx_lib/lib/deg2grid.f90 create mode 100644 wsjtx_lib/lib/degrade_snr.f90 create mode 100644 wsjtx_lib/lib/demod64a.f90 create mode 100644 wsjtx_lib/lib/determ.f90 create mode 100644 wsjtx_lib/lib/digi-contest.txt create mode 100644 wsjtx_lib/lib/downsam9.f90 create mode 100644 wsjtx_lib/lib/dxped_fifo.f90 create mode 100644 wsjtx_lib/lib/echo_snr.f90 create mode 100644 wsjtx_lib/lib/echosim.f90 create mode 100644 wsjtx_lib/lib/emedop.dat create mode 100644 wsjtx_lib/lib/emedop.f90 create mode 100644 wsjtx_lib/lib/encode232.f90 create mode 100644 wsjtx_lib/lib/encode4.f90 create mode 100644 wsjtx_lib/lib/encode_128_90.f90 create mode 100644 wsjtx_lib/lib/encode_msk40.f90 create mode 100644 wsjtx_lib/lib/encode_rs.c create mode 100644 wsjtx_lib/lib/entail.f90 create mode 100644 wsjtx_lib/lib/ephem.f90 create mode 100644 wsjtx_lib/lib/extract.f90 create mode 100644 wsjtx_lib/lib/extract4.f90 create mode 100644 wsjtx_lib/lib/extractmessage77.f90 create mode 100644 wsjtx_lib/lib/fano232.f90 create mode 100644 wsjtx_lib/lib/fast9.f90 create mode 100644 wsjtx_lib/lib/fast_decode.f90 create mode 100644 wsjtx_lib/lib/fcal.f90 create mode 100644 wsjtx_lib/lib/fchisq.f90 create mode 100644 wsjtx_lib/lib/fchisq0.f90 create mode 100644 wsjtx_lib/lib/fchisq65.f90 create mode 100644 wsjtx_lib/lib/fer create mode 100644 wsjtx_lib/lib/fer65.f90 create mode 100644 wsjtx_lib/lib/fersum.f90 create mode 100644 wsjtx_lib/lib/fftw3.f03 create mode 100644 wsjtx_lib/lib/fftw3.f90 create mode 100644 wsjtx_lib/lib/fftw3mod.f90 create mode 100644 wsjtx_lib/lib/fil3.f90 create mode 100644 wsjtx_lib/lib/fil3c.f90 create mode 100644 wsjtx_lib/lib/fil4.f90 create mode 100644 wsjtx_lib/lib/fil61.f90 create mode 100644 wsjtx_lib/lib/fil6521.f90 create mode 100644 wsjtx_lib/lib/filbig.f90 create mode 100644 wsjtx_lib/lib/fitcal.f90 create mode 100644 wsjtx_lib/lib/fix_contest_msg.f90 create mode 100644 wsjtx_lib/lib/fixwav.f90 create mode 100644 wsjtx_lib/lib/flat1.f90 create mode 100644 wsjtx_lib/lib/flat1a.f90 create mode 100644 wsjtx_lib/lib/flat1b.f90 create mode 100644 wsjtx_lib/lib/flat2.f90 create mode 100644 wsjtx_lib/lib/flat4.f90 create mode 100644 wsjtx_lib/lib/flat65.f90 create mode 100644 wsjtx_lib/lib/fmeasure.f90 create mode 100644 wsjtx_lib/lib/fmtave.f90 create mode 100644 wsjtx_lib/lib/fmtmsg.f90 create mode 100644 wsjtx_lib/lib/foldspec9f.f90 create mode 100644 wsjtx_lib/lib/four2a.f90 create mode 100644 wsjtx_lib/lib/fox_rx.f90 create mode 100644 wsjtx_lib/lib/fox_sim.f90 create mode 100644 wsjtx_lib/lib/fox_tx.f90 create mode 100644 wsjtx_lib/lib/fqso_first.f90 create mode 100644 wsjtx_lib/lib/freqcal.f90 create mode 100644 wsjtx_lib/lib/fspread_lorentz.f90 create mode 100644 wsjtx_lib/lib/fst280_decode.f90 create mode 100644 wsjtx_lib/lib/fst4/bpdecode240_101.f90 create mode 100644 wsjtx_lib/lib/fst4/decode240_101.f90 create mode 100644 wsjtx_lib/lib/fst4/decode240_74.f90 create mode 100644 wsjtx_lib/lib/fst4/encode240_101.f90 create mode 100644 wsjtx_lib/lib/fst4/encode240_74.f90 create mode 100644 wsjtx_lib/lib/fst4/fastosd240_74.f90 create mode 100644 wsjtx_lib/lib/fst4/fst4_baseline.f90 create mode 100644 wsjtx_lib/lib/fst4/fst4_params.f90 create mode 100644 wsjtx_lib/lib/fst4/fst4sim.f90 create mode 100644 wsjtx_lib/lib/fst4/gen_fst4wave.f90 create mode 100644 wsjtx_lib/lib/fst4/genfst4.f90 create mode 100644 wsjtx_lib/lib/fst4/get_crc24.f90 create mode 100644 wsjtx_lib/lib/fst4/get_fst4_bitmetrics.f90 create mode 100644 wsjtx_lib/lib/fst4/get_fst4_bitmetrics2.f90 create mode 100644 wsjtx_lib/lib/fst4/ldpc_240_101_generator.f90 create mode 100644 wsjtx_lib/lib/fst4/ldpc_240_101_parity.f90 create mode 100644 wsjtx_lib/lib/fst4/ldpc_240_74_generator.f90 create mode 100644 wsjtx_lib/lib/fst4/ldpc_240_74_parity.f90 create mode 100644 wsjtx_lib/lib/fst4/ldpcsim240_101.f90 create mode 100644 wsjtx_lib/lib/fst4/ldpcsim240_74.f90 create mode 100644 wsjtx_lib/lib/fst4/lorentzian_fading.f90 create mode 100644 wsjtx_lib/lib/fst4/osd240_101.f90 create mode 100644 wsjtx_lib/lib/fst4/osd240_74.f90 create mode 100644 wsjtx_lib/lib/fst4_decode.f90 create mode 100644 wsjtx_lib/lib/ft2/cdatetime.f90 create mode 100644 wsjtx_lib/lib/ft2/ft2.f90 create mode 100644 wsjtx_lib/lib/ft2/ft2.ini create mode 100644 wsjtx_lib/lib/ft2/ft2_decode.f90 create mode 100644 wsjtx_lib/lib/ft2/ft2_gfsk_iwave.f90 create mode 100644 wsjtx_lib/lib/ft2/ft2_iwave.f90 create mode 100644 wsjtx_lib/lib/ft2/ft2_params.f90 create mode 100644 wsjtx_lib/lib/ft2/ft2audio.c create mode 100644 wsjtx_lib/lib/ft2/g4.cmd create mode 100644 wsjtx_lib/lib/ft2/gcom1.f90 create mode 100644 wsjtx_lib/lib/ft2/genft2.f90 create mode 100644 wsjtx_lib/lib/ft2/getcandidates2a.f90 create mode 100644 wsjtx_lib/lib/ft2/gfsk_pulse.f90 create mode 100644 wsjtx_lib/lib/ft2/libportaudio.a create mode 100644 wsjtx_lib/lib/ft2/libwsjt_cxx.a create mode 100644 wsjtx_lib/lib/ft2/libwsjt_fort.a create mode 100644 wsjtx_lib/lib/ft2/portaudio.h create mode 100644 wsjtx_lib/lib/ft2/ptt.c create mode 100644 wsjtx_lib/lib/ft2/ptt_unix.c create mode 100644 wsjtx_lib/lib/ft4/clockit.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4_baseline.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4_downsample.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4_params.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4_testmsg.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4code.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4sim.f90 create mode 100644 wsjtx_lib/lib/ft4/ft4sim_mult.f90 create mode 100644 wsjtx_lib/lib/ft4/gen_ft4wave.f90 create mode 100644 wsjtx_lib/lib/ft4/genft4.f90 create mode 100644 wsjtx_lib/lib/ft4/get_ft4_bitmetrics.f90 create mode 100644 wsjtx_lib/lib/ft4/getcandidates4.f90 create mode 100644 wsjtx_lib/lib/ft4/messages.txt create mode 100644 wsjtx_lib/lib/ft4/subtractft4.f90 create mode 100644 wsjtx_lib/lib/ft4/sync4d.f90 create mode 100644 wsjtx_lib/lib/ft4_decode.f90 create mode 100644 wsjtx_lib/lib/ft8/DXpedQuickStart.txt create mode 100644 wsjtx_lib/lib/ft8/baseline.f90 create mode 100644 wsjtx_lib/lib/ft8/bpdecode174_91.f90 create mode 100644 wsjtx_lib/lib/ft8/chkcrc13a.f90 create mode 100644 wsjtx_lib/lib/ft8/chkcrc14a.f90 create mode 100644 wsjtx_lib/lib/ft8/chkdec.f90 create mode 100644 wsjtx_lib/lib/ft8/compress.f90 create mode 100644 wsjtx_lib/lib/ft8/decode174_91.f90 create mode 100644 wsjtx_lib/lib/ft8/encode174.f90 create mode 100644 wsjtx_lib/lib/ft8/encode174_91.f90 create mode 100644 wsjtx_lib/lib/ft8/encode174_91_nocrc.f90 create mode 100644 wsjtx_lib/lib/ft8/filt8.f90 create mode 100644 wsjtx_lib/lib/ft8/foxfilt.f90 create mode 100644 wsjtx_lib/lib/ft8/foxgen.f90 create mode 100644 wsjtx_lib/lib/ft8/foxgen_wrap.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8_a7.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8_a8d.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8_downsample.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8_params.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8_testmsg.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8apset.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8b.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8c.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8code.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8d.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8q3.f90 create mode 100644 wsjtx_lib/lib/ft8/ft8sim.f90 create mode 100644 wsjtx_lib/lib/ft8/gen_ft8wave.f90 create mode 100644 wsjtx_lib/lib/ft8/genft8.f90 create mode 100644 wsjtx_lib/lib/ft8/genft8refsig.f90 create mode 100644 wsjtx_lib/lib/ft8/get_crc14.f90 create mode 100644 wsjtx_lib/lib/ft8/get_spectrum_baseline.f90 create mode 100644 wsjtx_lib/lib/ft8/h1.f90 create mode 100644 wsjtx_lib/lib/ft8/ldpc_174_87_params.f90 create mode 100644 wsjtx_lib/lib/ft8/ldpc_174_91_c_colorder.f90 create mode 100644 wsjtx_lib/lib/ft8/ldpc_174_91_c_generator.f90 create mode 100644 wsjtx_lib/lib/ft8/ldpc_174_91_c_parity.f90 create mode 100644 wsjtx_lib/lib/ft8/ldpcsim174_91.f90 create mode 100644 wsjtx_lib/lib/ft8/osd174_91.f90 create mode 100644 wsjtx_lib/lib/ft8/subtractft8.f90 create mode 100644 wsjtx_lib/lib/ft8/sync8.f90 create mode 100644 wsjtx_lib/lib/ft8/sync8d.f90 create mode 100644 wsjtx_lib/lib/ft8/test_ft8q3.f90 create mode 100644 wsjtx_lib/lib/ft8/twkfreq1.f90 create mode 100644 wsjtx_lib/lib/ft8/watterson.f90 create mode 100644 wsjtx_lib/lib/ft8_decode.f90 create mode 100644 wsjtx_lib/lib/ftrsd/Makefile create mode 100644 wsjtx_lib/lib/ftrsd/Makefile.sfrsd create mode 100644 wsjtx_lib/lib/ftrsd/Makefile.sfrsd3 create mode 100644 wsjtx_lib/lib/ftrsd/decode_rs.c create mode 100644 wsjtx_lib/lib/ftrsd/encode_rs.c create mode 100644 wsjtx_lib/lib/ftrsd/extract2.f90 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd2.c create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/JT65B_EME.png create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/Makefile create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/binomial.c create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/binomial_subs.c create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bmdata-rf.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bmdata.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bmtheory25.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bmtheory40.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bmtheory43.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bodide.f90 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/bodide.lab create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_bodide.gnuplot create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_psuccess.pdf create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_subtracted.tiff create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_waterfall.png create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_waterfall.tiff create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_wer.gnuplot create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_wer.pdf create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_wer2.gnuplot create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/fig_wer3.gnuplot create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/ftdata-10.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/ftdata-100.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/ftdata-1000.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/ftdata-10000.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/ftdata-100000.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/ftrsd.lyx create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/kvasd-12.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/kvasd-15.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/kvasd-8.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/mfsk.f90 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/prob.f90 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/psuccess.lab create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/stats-100000-24db-3.dat create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/stats_0.0 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/stats_0.2 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/stats_1.0 create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/wer.lab create mode 100644 wsjtx_lib/lib/ftrsd/ftrsd_paper/wer2.lab create mode 100644 wsjtx_lib/lib/ftrsd/ftrsdap.c create mode 100644 wsjtx_lib/lib/ftrsd/init_rs.c create mode 100644 wsjtx_lib/lib/ftrsd/int.h create mode 100644 wsjtx_lib/lib/ftrsd/rs2.h create mode 100644 wsjtx_lib/lib/ftrsd/rsdtest.f90 create mode 100644 wsjtx_lib/lib/ftrsd/sfrsd.c create mode 100644 wsjtx_lib/lib/ftrsd/sfrsd2.h create mode 100644 wsjtx_lib/lib/ftrsd/sfrsd3.c create mode 100644 wsjtx_lib/lib/g1 create mode 100644 wsjtx_lib/lib/g1.bat create mode 100644 wsjtx_lib/lib/g2.bat create mode 100644 wsjtx_lib/lib/g3.bat create mode 100644 wsjtx_lib/lib/g4.bat create mode 100644 wsjtx_lib/lib/gen4.f90 create mode 100644 wsjtx_lib/lib/gen65.f90 create mode 100644 wsjtx_lib/lib/gen9.f90 create mode 100644 wsjtx_lib/lib/genmet.f90 create mode 100644 wsjtx_lib/lib/genmsk40.f90 create mode 100644 wsjtx_lib/lib/genmsk_128_90.f90 create mode 100644 wsjtx_lib/lib/genqra64.f90 create mode 100644 wsjtx_lib/lib/genwave.f90 create mode 100644 wsjtx_lib/lib/genwspr.f90 create mode 100644 wsjtx_lib/lib/geodist.f90 create mode 100644 wsjtx_lib/lib/get_q3list.f90 create mode 100644 wsjtx_lib/lib/getlags.f90 create mode 100644 wsjtx_lib/lib/getmet4.f90 create mode 100644 wsjtx_lib/lib/go_chkfft.cmd create mode 100644 wsjtx_lib/lib/golay24_table.c create mode 100644 wsjtx_lib/lib/gran.c create mode 100644 wsjtx_lib/lib/graycode.f90 create mode 100644 wsjtx_lib/lib/graycode65.f90 create mode 100644 wsjtx_lib/lib/grayline.f90 create mode 100644 wsjtx_lib/lib/grid2deg.f90 create mode 100644 wsjtx_lib/lib/hash.f90 create mode 100644 wsjtx_lib/lib/hashing.f90 create mode 100644 wsjtx_lib/lib/hint65.f90 create mode 100644 wsjtx_lib/lib/hspec.f90 create mode 100644 wsjtx_lib/lib/igray.c create mode 100644 wsjtx_lib/lib/image.f90 create mode 100644 wsjtx_lib/lib/indexx.f90 create mode 100644 wsjtx_lib/lib/init_random_seed.c create mode 100644 wsjtx_lib/lib/init_random_seed.f90 create mode 100644 wsjtx_lib/lib/init_random_seed.h create mode 100644 wsjtx_lib/lib/init_rs.c create mode 100644 wsjtx_lib/lib/int.h create mode 100644 wsjtx_lib/lib/inter_wspr.f90 create mode 100644 wsjtx_lib/lib/interleave4.f90 create mode 100644 wsjtx_lib/lib/interleave63.f90 create mode 100644 wsjtx_lib/lib/interleave8.f90 create mode 100644 wsjtx_lib/lib/interleave9.f90 create mode 100644 wsjtx_lib/lib/iso_c_utilities.f90 create mode 100644 wsjtx_lib/lib/jplsubs.f create mode 100644 wsjtx_lib/lib/jt4.f90 create mode 100644 wsjtx_lib/lib/jt49sim.f90 create mode 100644 wsjtx_lib/lib/jt4_decode.f90 create mode 100644 wsjtx_lib/lib/jt4a.f90 create mode 100644 wsjtx_lib/lib/jt4code.f90 create mode 100644 wsjtx_lib/lib/jt4sim.f90 create mode 100644 wsjtx_lib/lib/jt65.f90 create mode 100644 wsjtx_lib/lib/jt65_decode.f90 create mode 100644 wsjtx_lib/lib/jt65_mod.f90 create mode 100644 wsjtx_lib/lib/jt65_test.f90 create mode 100644 wsjtx_lib/lib/jt65code.f90 create mode 100644 wsjtx_lib/lib/jt65sim.f90 create mode 100644 wsjtx_lib/lib/jt9.f90 create mode 100644 wsjtx_lib/lib/jt9_decode.f90 create mode 100644 wsjtx_lib/lib/jt9a.f90 create mode 100644 wsjtx_lib/lib/jt9code.f90 create mode 100644 wsjtx_lib/lib/jt9com.f90 create mode 100644 wsjtx_lib/lib/jt9fano.f90 create mode 100644 wsjtx_lib/lib/jt9sim.f90 create mode 100644 wsjtx_lib/lib/jt9sync.f90 create mode 100644 wsjtx_lib/lib/jt9w.f90 create mode 100644 wsjtx_lib/lib/jtmsg.f90 create mode 100644 wsjtx_lib/lib/ldpc32_table.c create mode 100644 wsjtx_lib/lib/ldpc_128_90_b_generator.f90 create mode 100644 wsjtx_lib/lib/ldpc_128_90_b_reordered_parity.f90 create mode 100644 wsjtx_lib/lib/ldpc_128_90_generator.f90 create mode 100644 wsjtx_lib/lib/ldpc_128_90_reordered_parity.f90 create mode 100644 wsjtx_lib/lib/ldpcsim128_90.f90 create mode 100644 wsjtx_lib/lib/ldpcsim40.f90 create mode 100644 wsjtx_lib/lib/libration.f90 create mode 100644 wsjtx_lib/lib/lorentzian.f90 create mode 100644 wsjtx_lib/lib/lpf1.f90 create mode 100644 wsjtx_lib/lib/makepings.f90 create mode 100644 wsjtx_lib/lib/map65_mmdec.f90 create mode 100644 wsjtx_lib/lib/met8.21 create mode 100644 wsjtx_lib/lib/mixlpf.f90 create mode 100644 wsjtx_lib/lib/moondopjpl.f90 create mode 100644 wsjtx_lib/lib/morse.f90 create mode 100644 wsjtx_lib/lib/move.f90 create mode 100644 wsjtx_lib/lib/msgs.txt create mode 100644 wsjtx_lib/lib/msk144_freq_search.f90 create mode 100644 wsjtx_lib/lib/msk144_testmsg.f90 create mode 100644 wsjtx_lib/lib/msk144code.f90 create mode 100644 wsjtx_lib/lib/msk144decodeframe.f90 create mode 100644 wsjtx_lib/lib/msk144signalquality.f90 create mode 100644 wsjtx_lib/lib/msk144sim.f90 create mode 100644 wsjtx_lib/lib/msk144spd.f90 create mode 100644 wsjtx_lib/lib/msk144sync.f90 create mode 100644 wsjtx_lib/lib/msk40_freq_search.f90 create mode 100644 wsjtx_lib/lib/msk40decodeframe.f90 create mode 100644 wsjtx_lib/lib/msk40spd.f90 create mode 100644 wsjtx_lib/lib/msk40sync.f90 create mode 100644 wsjtx_lib/lib/mskber.f90 create mode 100644 wsjtx_lib/lib/mskdt.f90 create mode 100644 wsjtx_lib/lib/mskrtd.f90 create mode 100644 wsjtx_lib/lib/nfft.dat create mode 100644 wsjtx_lib/lib/nfft.out create mode 100644 wsjtx_lib/lib/noisegen.f90 create mode 100644 wsjtx_lib/lib/nuttal_window.f90 create mode 100644 wsjtx_lib/lib/options.f90 create mode 100644 wsjtx_lib/lib/osd128_90.f90 create mode 100644 wsjtx_lib/lib/packjt.f90 create mode 100644 wsjtx_lib/lib/pctile.f90 create mode 100644 wsjtx_lib/lib/peakdt9.f90 create mode 100644 wsjtx_lib/lib/peakup.f90 create mode 100644 wsjtx_lib/lib/pfx.f90 create mode 100644 wsjtx_lib/lib/platanh.f90 create mode 100644 wsjtx_lib/lib/plotsave.f90 create mode 100644 wsjtx_lib/lib/pltanh.f90 create mode 100644 wsjtx_lib/lib/polyfit.f90 create mode 100644 wsjtx_lib/lib/prcom.f90 create mode 100644 wsjtx_lib/lib/prog_args.f90 create mode 100644 wsjtx_lib/lib/ps4.f90 create mode 100644 wsjtx_lib/lib/psk_parse.f90 create mode 100644 wsjtx_lib/lib/ptt.c create mode 100644 wsjtx_lib/lib/q65_decode.f90 create mode 100644 wsjtx_lib/lib/q65params.f90 create mode 100644 wsjtx_lib/lib/qra/q65/Makefile.Win create mode 100644 wsjtx_lib/lib/qra/q65/build.sh create mode 100644 wsjtx_lib/lib/qra/q65/ebnovalues.txt create mode 100644 wsjtx_lib/lib/qra/q65/fadengauss.c create mode 100644 wsjtx_lib/lib/qra/q65/fadenlorentz.c create mode 100644 wsjtx_lib/lib/qra/q65/genq65.f90 create mode 100644 wsjtx_lib/lib/qra/q65/normrnd.c create mode 100644 wsjtx_lib/lib/qra/q65/normrnd.h create mode 100644 wsjtx_lib/lib/qra/q65/npfwht.c create mode 100644 wsjtx_lib/lib/qra/q65/npfwht.h create mode 100644 wsjtx_lib/lib/qra/q65/pdmath.c create mode 100644 wsjtx_lib/lib/qra/q65/pdmath.h create mode 100644 wsjtx_lib/lib/qra/q65/q65.c create mode 100644 wsjtx_lib/lib/qra/q65/q65.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65.h create mode 100644 wsjtx_lib/lib/qra/q65/q65.sln create mode 100644 wsjtx_lib/lib/qra/q65/q65.vcproj create mode 100644 wsjtx_lib/lib/qra/q65/q65_ap.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65_encoding_modules.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65_ftn_test.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65_loops.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65_set_list.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65_set_list2.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65_subs.c create mode 100644 wsjtx_lib/lib/qra/q65/q65code.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65sim.f90 create mode 100644 wsjtx_lib/lib/qra/q65/q65test.c create mode 100644 wsjtx_lib/lib/qra/q65/qra15_65_64_irr_e23.c create mode 100644 wsjtx_lib/lib/qra/q65/qra15_65_64_irr_e23.h create mode 100644 wsjtx_lib/lib/qra/q65/qracodes.c create mode 100644 wsjtx_lib/lib/qra/q65/qracodes.h create mode 100644 wsjtx_lib/lib/qra/q65/wer-ff-qra15_65_64_irr_e23-ap00.txt create mode 100644 wsjtx_lib/lib/qra/qracodes/Makefile.Win create mode 100644 wsjtx_lib/lib/qra/qracodes/ebno10000.txt create mode 100644 wsjtx_lib/lib/qra/qracodes/ebnovalues.txt create mode 100644 wsjtx_lib/lib/qra/qracodes/ebnovaluesfast.txt create mode 100644 wsjtx_lib/lib/qra/qracodes/main.c create mode 100644 wsjtx_lib/lib/qra/qracodes/normrnd.c create mode 100644 wsjtx_lib/lib/qra/qracodes/normrnd.h create mode 100644 wsjtx_lib/lib/qra/qracodes/npfwht.c create mode 100644 wsjtx_lib/lib/qra/qracodes/npfwht.h create mode 100644 wsjtx_lib/lib/qra/qracodes/pdmath.c create mode 100644 wsjtx_lib/lib/qra/qracodes/pdmath.h create mode 100644 wsjtx_lib/lib/qra/qracodes/qra12_63_64_irr_b.c create mode 100644 wsjtx_lib/lib/qra/qracodes/qra12_63_64_irr_b.h create mode 100644 wsjtx_lib/lib/qra/qracodes/qra13_64_64_irr_e.c create mode 100644 wsjtx_lib/lib/qra/qracodes/qra13_64_64_irr_e.h create mode 100644 wsjtx_lib/lib/qra/qracodes/qracodes.c create mode 100644 wsjtx_lib/lib/qra/qracodes/qracodes.h create mode 100644 wsjtx_lib/lib/qra64code.f90 create mode 100644 wsjtx_lib/lib/qratest.f90 create mode 100644 wsjtx_lib/lib/qso50/g0 create mode 100644 wsjtx_lib/lib/qso50/pack50.f90 create mode 100644 wsjtx_lib/lib/qso50/packname.f90 create mode 100644 wsjtx_lib/lib/qso50/packprop.f90 create mode 100644 wsjtx_lib/lib/qso50/packtext2.f90 create mode 100644 wsjtx_lib/lib/qso50/twq.f90 create mode 100644 wsjtx_lib/lib/qso50/unpack50.f90 create mode 100644 wsjtx_lib/lib/qso50/unpackname.f90 create mode 100644 wsjtx_lib/lib/qso50/unpackpfx.f90 create mode 100644 wsjtx_lib/lib/qso50/unpackprop.f90 create mode 100644 wsjtx_lib/lib/qso50/unpacktext2.f90 create mode 100644 wsjtx_lib/lib/qso50/wqdec.f90 create mode 100644 wsjtx_lib/lib/qso50/wqenc.f90 create mode 100644 wsjtx_lib/lib/qso50/wqmsg.txt create mode 100644 wsjtx_lib/lib/readwav.f90 create mode 100644 wsjtx_lib/lib/rectify_msk.f90 create mode 100644 wsjtx_lib/lib/refspectrum.f90 create mode 100644 wsjtx_lib/lib/rig_control.c create mode 100644 wsjtx_lib/lib/rs.h create mode 100644 wsjtx_lib/lib/rtty_spec.f90 create mode 100644 wsjtx_lib/lib/save_dxbase.f90 create mode 100644 wsjtx_lib/lib/save_echo_params.f90 create mode 100644 wsjtx_lib/lib/savec2.f90 create mode 100644 wsjtx_lib/lib/sec0.f90 create mode 100644 wsjtx_lib/lib/sec_midn.f90 create mode 100644 wsjtx_lib/lib/setup65.f90 create mode 100644 wsjtx_lib/lib/sfrsd.f90 create mode 100644 wsjtx_lib/lib/sgran.c create mode 100644 wsjtx_lib/lib/sh65.f90 create mode 100644 wsjtx_lib/lib/sh65snr.f90 create mode 100644 wsjtx_lib/lib/shell.f90 create mode 100644 wsjtx_lib/lib/shmem.cpp create mode 100644 wsjtx_lib/lib/shmem.f90 create mode 100644 wsjtx_lib/lib/slasubs.f create mode 100644 wsjtx_lib/lib/sleep.h create mode 100644 wsjtx_lib/lib/sleep_msec.f90 create mode 100644 wsjtx_lib/lib/slope.f90 create mode 100644 wsjtx_lib/lib/smo.f90 create mode 100644 wsjtx_lib/lib/smo121.f90 create mode 100644 wsjtx_lib/lib/smolorentz.f90 create mode 100644 wsjtx_lib/lib/softsym.f90 create mode 100644 wsjtx_lib/lib/softsym9f.f90 create mode 100644 wsjtx_lib/lib/softsym9w.f90 create mode 100644 wsjtx_lib/lib/sort.f90 create mode 100644 wsjtx_lib/lib/spec64.f90 create mode 100644 wsjtx_lib/lib/spec9f.f90 create mode 100644 wsjtx_lib/lib/spec_qra65.f90 create mode 100644 wsjtx_lib/lib/ss.bat create mode 100644 wsjtx_lib/lib/stats.f90 create mode 100644 wsjtx_lib/lib/stdmsg.f90 create mode 100644 wsjtx_lib/lib/subtract65.f90 create mode 100644 wsjtx_lib/lib/sumsim.f90 create mode 100644 wsjtx_lib/lib/sun.f90 create mode 100644 wsjtx_lib/lib/symspec.f90 create mode 100644 wsjtx_lib/lib/symspec2.f90 create mode 100644 wsjtx_lib/lib/symspec65.f90 create mode 100644 wsjtx_lib/lib/sync4.f90 create mode 100644 wsjtx_lib/lib/sync65.f90 create mode 100644 wsjtx_lib/lib/sync9.f90 create mode 100644 wsjtx_lib/lib/sync9f.f90 create mode 100644 wsjtx_lib/lib/sync9w.f90 create mode 100644 wsjtx_lib/lib/syncmsk.f90 create mode 100644 wsjtx_lib/lib/tab.c create mode 100644 wsjtx_lib/lib/test_init_random_seed.f90 create mode 100644 wsjtx_lib/lib/test_q65.f90 create mode 100644 wsjtx_lib/lib/test_snr.f90 create mode 100644 wsjtx_lib/lib/testfast9.f90 create mode 100644 wsjtx_lib/lib/testmsg.f90 create mode 100644 wsjtx_lib/lib/timefft.f90 create mode 100644 wsjtx_lib/lib/timefft_opts.f90 create mode 100644 wsjtx_lib/lib/timer_C_wrapper.f90 create mode 100644 wsjtx_lib/lib/timer_common.inc create mode 100644 wsjtx_lib/lib/timer_impl.f90 create mode 100644 wsjtx_lib/lib/timer_module.f90 create mode 100644 wsjtx_lib/lib/timf2.f90 create mode 100644 wsjtx_lib/lib/tmoonsub.c create mode 100644 wsjtx_lib/lib/to_contest_msg.f90 create mode 100644 wsjtx_lib/lib/tstrig.c create mode 100644 wsjtx_lib/lib/tstrig.h create mode 100644 wsjtx_lib/lib/tweak1.f90 create mode 100644 wsjtx_lib/lib/twkfreq.f90 create mode 100644 wsjtx_lib/lib/twkfreq65.f90 create mode 100644 wsjtx_lib/lib/types.f90 create mode 100644 wsjtx_lib/lib/update_msk40_hasharray.f90 create mode 100644 wsjtx_lib/lib/update_recent_calls.f90 create mode 100644 wsjtx_lib/lib/usleep.c create mode 100644 wsjtx_lib/lib/vit213.c create mode 100644 wsjtx_lib/lib/vit216.c create mode 100644 wsjtx_lib/lib/wav11.f90 create mode 100644 wsjtx_lib/lib/wav12.f90 create mode 100644 wsjtx_lib/lib/wavhdr.f90 create mode 100644 wsjtx_lib/lib/wisdom.c create mode 100644 wsjtx_lib/lib/wisdom1.bat create mode 100644 wsjtx_lib/lib/wqdecode.f90 create mode 100644 wsjtx_lib/lib/wqencode.f90 create mode 100644 wsjtx_lib/lib/wrapkarn.c create mode 100644 wsjtx_lib/lib/wsjt_modes.txt create mode 100644 wsjtx_lib/lib/wspr_downsample.f90 create mode 100644 wsjtx_lib/lib/wsprcode/go.sh create mode 100644 wsjtx_lib/lib/wsprcode/nhash.c create mode 100644 wsjtx_lib/lib/wsprcode/wspr_old_subs.f90 create mode 100644 wsjtx_lib/lib/wsprcode/wsprcode.f90 create mode 100644 wsjtx_lib/lib/wsprd/Makefile create mode 100644 wsjtx_lib/lib/wsprd/Makefile.MinGW create mode 100644 wsjtx_lib/lib/wsprd/Makefile.win32 create mode 100644 wsjtx_lib/lib/wsprd/README create mode 100644 wsjtx_lib/lib/wsprd/WSPRcode.f90 create mode 100644 wsjtx_lib/lib/wsprd/fano.c create mode 100644 wsjtx_lib/lib/wsprd/fano.h create mode 100644 wsjtx_lib/lib/wsprd/fftw3.h create mode 100644 wsjtx_lib/lib/wsprd/genmet.f90 create mode 100644 wsjtx_lib/lib/wsprd/gran.c create mode 100644 wsjtx_lib/lib/wsprd/jelinek.c create mode 100644 wsjtx_lib/lib/wsprd/jelinek.h create mode 100644 wsjtx_lib/lib/wsprd/metric_tables.c create mode 100644 wsjtx_lib/lib/wsprd/mettab.c create mode 100644 wsjtx_lib/lib/wsprd/nhash.c create mode 100644 wsjtx_lib/lib/wsprd/nhash.h create mode 100644 wsjtx_lib/lib/wsprd/osdwspr.f90 create mode 100644 wsjtx_lib/lib/wsprd/t2.f90 create mode 100644 wsjtx_lib/lib/wsprd/tab.c create mode 100644 wsjtx_lib/lib/wsprd/test_wspr.f90 create mode 100644 wsjtx_lib/lib/wsprd/unpk.c.obsolete create mode 100644 wsjtx_lib/lib/wsprd/wspr_params.f90 create mode 100644 wsjtx_lib/lib/wsprd/wspr_wav.f90 create mode 100644 wsjtx_lib/lib/wsprd/wsprd.c create mode 100644 wsjtx_lib/lib/wsprd/wsprd_stats.txt create mode 100644 wsjtx_lib/lib/wsprd/wsprd_utils.c create mode 100644 wsjtx_lib/lib/wsprd/wsprd_utils.h create mode 100644 wsjtx_lib/lib/wsprd/wsprsim.c create mode 100644 wsjtx_lib/lib/wsprd/wsprsim_utils.c create mode 100644 wsjtx_lib/lib/wsprd/wsprsim_utils.h create mode 100644 wsjtx_lib/lib/wsprd/wsprsimf.f90 create mode 100644 wsjtx_lib/lib/xcall.txt create mode 100644 wsjtx_lib/lib/xcor.f90 create mode 100644 wsjtx_lib/lib/xcor4.f90 create mode 100644 wsjtx_lib/lib/zplot9.f90 create mode 100644 wsjtx_lib/lib/zplt.f90 create mode 100644 wsjtx_lib/wsjtx_decode.cpp create mode 100644 wsjtx_lib/wsjtx_decode.h create mode 100644 wsjtx_lib/wsjtx_encode.cpp create mode 100644 wsjtx_lib/wsjtx_encode.h create mode 100644 wsjtx_lib/wsjtx_lib.cpp create mode 100644 wsjtx_lib/wsjtx_lib.h create mode 100644 wsjtx_lib/wsjtx_lib.sln create mode 100644 wsjtx_lib/wsjtx_lib.vgdbcmake create mode 100644 wsjtx_lib/wsjtx_wspr.h create mode 100644 wsjtx_lib/wsprd/fano.cpp create mode 100644 wsjtx_lib/wsprd/fano.h create mode 100644 wsjtx_lib/wsprd/metric_tables.h create mode 100644 wsjtx_lib/wsprd/nhash.cpp create mode 100644 wsjtx_lib/wsprd/nhash.h create mode 100644 wsjtx_lib/wsprd/tab.cpp create mode 100644 wsjtx_lib/wsprd/wsprd.cpp create mode 100644 wsjtx_lib/wsprd/wsprd.h create mode 100644 wsjtx_lib/wsprd/wsprd_utils.cpp create mode 100644 wsjtx_lib/wsprd/wsprd_utils.h create mode 100644 wsjtx_lib/wsprd/wsprsim_utils.cpp create mode 100644 wsjtx_lib/wsprd/wsprsim_utils.h diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..792cbff --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,274 @@ +name: Build and Package + +on: + push: + branches: [main, develop] + tags: ['v*'] + pull_request: + branches: [main] + +env: + NODE_VERSION: '20' + +jobs: + build: + name: Build ${{ matrix.platform }}-${{ matrix.arch }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, arch: x64, platform: linux, node_arch: x64 } + - { os: ubuntu-24.04-arm, arch: arm64, platform: linux, node_arch: arm64 } + - { os: macos-latest, arch: arm64, platform: darwin, node_arch: arm64 } + - { os: macos-15-intel, arch: x64, platform: darwin, node_arch: x64 } + - { os: windows-latest, arch: x64, platform: win32, node_arch: x64 } + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + architecture: ${{ matrix.node_arch }} + + # Linux dependencies + - name: Install dependencies (Linux) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y cmake build-essential gfortran libfftw3-dev libboost-all-dev pkg-config patchelf + + # macOS dependencies + - name: Install dependencies (macOS) + if: runner.os == 'macOS' + run: | + brew install cmake fftw boost gcc pkg-config dylibbundler + BREW_PREFIX=$([[ "${{ matrix.arch }}" == "arm64" ]] && echo "/opt/homebrew" || echo "/usr/local") + echo "${BREW_PREFIX}/bin" >> $GITHUB_PATH + GFORTRAN_PATH=$(find ${BREW_PREFIX}/bin -name "gfortran*" | head -1) + echo "FC=$GFORTRAN_PATH" >> $GITHUB_ENV + echo "CMAKE_Fortran_COMPILER=$GFORTRAN_PATH" >> $GITHUB_ENV + echo "LIBRARY_PATH=${BREW_PREFIX}/lib:$LIBRARY_PATH" >> $GITHUB_ENV + + # Windows: MSYS2 for core DLL build + - name: Setup MSYS2 (Windows) + if: runner.os == 'Windows' + uses: msys2/setup-msys2@v2 + with: + msystem: MINGW64 + update: true + install: >- + base-devel + mingw-w64-x86_64-toolchain + mingw-w64-x86_64-cmake + mingw-w64-x86_64-pkg-config + mingw-w64-x86_64-fftw + mingw-w64-x86_64-boost + mingw-w64-x86_64-gcc-fortran + + - run: npm ci --ignore-scripts + - run: npm run build:ts + + # Build native: Linux/macOS (single-step, both targets) + - name: Build native module (Linux/macOS) + if: runner.os != 'Windows' + run: | + rm -rf build/ + npx cmake-js compile --arch=${{ matrix.arch }} + + # Build native: Windows Phase 1 - wsjtx_core.dll with MinGW + - name: Build wsjtx_core.dll (Windows MinGW) + if: runner.os == 'Windows' + shell: msys2 {0} + run: | + export PKG_CONFIG_PATH="/mingw64/lib/pkgconfig" + export CC=gcc CXX=g++ FC=gfortran CMAKE_MAKE_PROGRAM=mingw32-make + unset VSINSTALLDIR VCINSTALLDIR WindowsSDKDir VCPKG_ROOT + + rm -rf build-core/ && mkdir build-core && cd build-core + cmake .. -G "MinGW Makefiles" -DWSJTX_BUILD_CORE_ONLY=ON -DCMAKE_BUILD_TYPE=Release + mingw32-make -j$(nproc) + + # Generate MSVC-compatible import library + cp Release/libwsjtx_core.dll Release/wsjtx_core.dll + gendef Release/wsjtx_core.dll + dlltool -d wsjtx_core.def -l Release/wsjtx_core.lib -D wsjtx_core.dll + cp ../native/wsjtx_c_api.h Release/ + + # Build native: Windows Phase 2 - .node with MSVC + - name: Build .node module (Windows MSVC) + if: runner.os == 'Windows' + run: npx cmake-js compile --CDWSJTX_BUILD_NODE_ONLY=ON --CDWSJTX_CORE_DIR=build-core/Release + + # Windows: Copy DLLs for runtime + - name: Prepare Windows runtime (Windows) + if: runner.os == 'Windows' + shell: msys2 {0} + run: | + # All dependencies (FFTW, MinGW runtimes) are statically linked into + # wsjtx_core.dll — only system DLLs (KERNEL32, msvcrt) remain as imports + cp build-core/Release/wsjtx_core.dll build/Release/ + + # Test + - name: Run tests (Linux/macOS) + if: runner.os != 'Windows' + run: npm test + + - name: Run tests (Windows) + if: runner.os == 'Windows' + run: npm test + + # Package prebuilds + - name: Package prebuilds (Linux) + if: runner.os == 'Linux' + run: | + TARGET_DIR="prebuilds/${{ matrix.platform }}-${{ matrix.arch }}" + mkdir -p "$TARGET_DIR" + cp build/Release/wsjtx_lib_nodejs.node "$TARGET_DIR/" + NODE_FILE="$TARGET_DIR/wsjtx_lib_nodejs.node" + + # Copy libwsjtx_core.so + cp build/Release/libwsjtx_core.so "$TARGET_DIR/" 2>/dev/null || true + + # Bundle runtime shared libraries + ldd "$NODE_FILE" | awk '{print $3}' | while read lib; do + if [ -f "$lib" ] && [[ "$lib" == *libfftw* || "$lib" == *libgfortran* || "$lib" == *libgcc* || "$lib" == *libquadmath* || "$lib" == *libstdc++* ]]; then + cp -n "$lib" "$TARGET_DIR/" 2>/dev/null || true + fi + done + patchelf --set-rpath '$ORIGIN' "$NODE_FILE" || true + patchelf --set-rpath '$ORIGIN' "$TARGET_DIR/libwsjtx_core.so" 2>/dev/null || true + + echo '{}' | jq --arg p "${{ matrix.platform }}" --arg a "${{ matrix.arch }}" \ + '{platform: $p, arch: $a, build_time: now | todate}' > "$TARGET_DIR/build-info.json" + ls -la "$TARGET_DIR" + + - name: Package prebuilds (macOS) + if: runner.os == 'macOS' + run: | + TARGET_DIR="prebuilds/${{ matrix.platform }}-${{ matrix.arch }}" + mkdir -p "$TARGET_DIR" + cp build/Release/wsjtx_lib_nodejs.node "$TARGET_DIR/" + NODE_FILE="$TARGET_DIR/wsjtx_lib_nodejs.node" + + # Bundle dylibs (dylibbundler copies dependencies automatically) + BREW_PREFIX=$(brew --prefix 2>/dev/null || echo "/opt/homebrew") + SP_ARGS="-s build/Release" + for p in "$BREW_PREFIX/opt/fftw/lib" "$BREW_PREFIX/opt/gcc@14/lib/gcc/14" \ + "$BREW_PREFIX/opt/gcc/lib/gcc/current" "$BREW_PREFIX/Cellar/fftw"/*/lib \ + "$BREW_PREFIX/Cellar/gcc"/*/lib/gcc/current; do + [ -d "$p" ] && SP_ARGS="$SP_ARGS -s $p" + done + # dylibbundler follows transitive deps: .node → libwsjtx_core.dylib → fftw, gfortran, etc. + dylibbundler -x "$NODE_FILE" -d "$TARGET_DIR" -p "@loader_path/" $SP_ARGS -b -of + + echo '{}' | jq --arg p "${{ matrix.platform }}" --arg a "${{ matrix.arch }}" \ + '{platform: $p, arch: $a, build_time: now | todate}' > "$TARGET_DIR/build-info.json" + ls -la "$TARGET_DIR" + + - name: Package prebuilds (Windows) + if: runner.os == 'Windows' + shell: msys2 {0} + run: | + TARGET_DIR="prebuilds/${{ matrix.platform }}-${{ matrix.arch }}" + mkdir -p "$TARGET_DIR" + cp build/Release/wsjtx_lib_nodejs.node "$TARGET_DIR/" + cp build/Release/wsjtx_core.dll "$TARGET_DIR/" + + cat > "$TARGET_DIR/build-info.json" <