From 280c8344cd80339491e9bad1dcc4ac9a1e5f684e Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 9 Apr 2021 13:57:41 +0100 Subject: [PATCH] Move project files to map65 sub-directory Preparation for merging with the wsjtx project repository. --- .gitignore => map65/.gitignore | 0 CMakeLists.txt => map65/CMakeLists.txt | 0 .../LICENSE_WHEATLEY.TXT | 60 +- .../MAP65_Beta_Release.docx | Bin about.cpp => map65/about.cpp | 0 about.h => map65/about.h | 0 about.ui => map65/about.ui | 82 +- afmhot.dat => map65/afmhot.dat | 514 +-- astro.cpp => map65/astro.cpp | 0 astro.h => map65/astro.h | 0 astro.ui => map65/astro.ui | 74 +- bandmap.cpp => map65/bandmap.cpp | 0 bandmap.h => map65/bandmap.h | 0 bandmap.ui => map65/bandmap.ui | 86 +- blue.dat => map65/blue.dat | 512 +-- commons.h => map65/commons.h | 0 devsetup.cpp => map65/devsetup.cpp | 0 devsetup.h => map65/devsetup.h | 0 devsetup.ui => map65/devsetup.ui | 3602 ++++++++--------- displaytext.cpp => map65/displaytext.cpp | 0 displaytext.h => map65/displaytext.h | 0 ffft.f => map65/ffft.f | 0 fftw3.f => map65/fftw3.f | 0 ft2000_freq.sh => map65/ft2000_freq.sh | 2 +- getdev.cpp => map65/getdev.cpp | 0 getfile.cpp => map65/getfile.cpp | 0 getfile.h => map65/getfile.h | 0 getsvn.cmake => map65/getsvn.cmake | 0 in.dat => map65/in.dat | 0 killbyname.cpp => map65/killbyname.cpp | 0 libfftw3f_win.a => map65/libfftw3f_win.a | Bin {libm65 => map65/libm65}/CMakeLists.txt | 0 {libm65 => map65/libm65}/Makefile | 0 {libm65 => map65/libm65}/Makefile.0 | 0 {libm65 => map65/libm65}/Makefile.MinGW | 0 {libm65 => map65/libm65}/Makefile.jtsdk | 0 {libm65 => map65/libm65}/Makefile.linux | 0 {libm65 => map65/libm65}/afc65b.f90 | 0 {libm65 => map65/libm65}/astro.f90 | 0 {libm65 => map65/libm65}/astro0.f90 | 0 {libm65 => map65/libm65}/astrosub.f90 | 0 {libm65 => map65/libm65}/averms.f90 | 40 +- {libm65 => map65/libm65}/badmsg.f90 | 92 +- {libm65 => map65/libm65}/ccf2.f90 | 0 {libm65 => map65/libm65}/ccf65.f90 | 0 {libm65 => map65/libm65}/cgen65.f90 | 198 +- {libm65 => map65/libm65}/chkhist.f90 | 0 {libm65 => map65/libm65}/chkmsg.f90 | 0 {libm65 => map65/libm65}/coord.f90 | 0 {libm65 => map65/libm65}/cutil.c | 0 {libm65 => map65/libm65}/dcoord.f90 | 0 {libm65 => map65/libm65}/decode0.f90 | 0 {libm65 => map65/libm65}/decode1a.f90 | 0 {libm65 => map65/libm65}/decode65b.f90 | 0 {libm65 => map65/libm65}/decode_rs.c | 0 {libm65 => map65/libm65}/deep65.f90 | 0 {libm65 => map65/libm65}/deg2grid.f90 | 0 {libm65 => map65/libm65}/demod64a.f90 | 0 {libm65 => map65/libm65}/display.f90 | 0 {libm65 => map65/libm65}/dot.f90 | 0 {libm65 => map65/libm65}/dpol.f90 | 0 {libm65 => map65/libm65}/encode65.f90 | 0 {libm65 => map65/libm65}/encode_rs.c | 0 {libm65 => map65/libm65}/extract.f90 | 0 {libm65 => map65/libm65}/f77_wisdom.f | 0 {libm65 => map65/libm65}/fchisq.f90 | 0 {libm65 => map65/libm65}/fchisq0.f90 | 0 {libm65 => map65/libm65}/fftw3.f | 0 {libm65 => map65/libm65}/fftw3.f90 | 128 +- {libm65 => map65/libm65}/fil6521.f90 | 0 {libm65 => map65/libm65}/filbig.f90 | 0 {libm65 => map65/libm65}/fmtmsg.f90 | 42 +- {libm65 => map65/libm65}/four2a.f90 | 0 {libm65 => map65/libm65}/ftninit.f90 | 0 {libm65 => map65/libm65}/ftnquit.f90 | 0 {libm65 => map65/libm65}/ftrsd2.c | 0 {libm65 => map65/libm65}/gen65.f90 | 0 {libm65 => map65/libm65}/gen_q65_wave.f90 | 0 {libm65 => map65/libm65}/genqra64a.f90 | 174 +- {libm65 => map65/libm65}/geocentric.f90 | 0 {libm65 => map65/libm65}/getdphi.f90 | 0 {libm65 => map65/libm65}/getpfx1.f90 | 0 {libm65 => map65/libm65}/getpfx2.f90 | 0 {libm65 => map65/libm65}/gran.c | 56 +- {libm65 => map65/libm65}/graycode.f90 | 0 {libm65 => map65/libm65}/graycode65.f90 | 0 {libm65 => map65/libm65}/grid2deg.f90 | 0 {libm65 => map65/libm65}/grid2k.f90 | 0 {libm65 => map65/libm65}/igray.c | 0 {libm65 => map65/libm65}/indexx.f90 | 0 {libm65 => map65/libm65}/init_rs.c | 0 {libm65 => map65/libm65}/int.h | 0 {libm65 => map65/libm65}/interleave63.f90 | 0 {libm65 => map65/libm65}/ipcomm.cpp | 0 {libm65 => map65/libm65}/iqcal.f90 | 0 {libm65 => map65/libm65}/iqfix.f90 | 0 {libm65 => map65/libm65}/jt65code.f90 | 0 {libm65 => map65/libm65}/k2grid.f90 | 0 {libm65 => map65/libm65}/lorentzian.f90 | 0 {libm65 => map65/libm65}/m65.f90 | 0 {libm65 => map65/libm65}/m65a.F90 | 0 {libm65 => map65/libm65}/map65a.f90 | 0 {libm65 => map65/libm65}/mapsim.f90 | 270 +- {libm65 => map65/libm65}/moon2.f90 | 0 {libm65 => map65/libm65}/moondop.f90 | 0 {libm65 => map65/libm65}/msgs.txt | 120 +- {libm65 => map65/libm65}/nchar.f90 | 0 {libm65 => map65/libm65}/noisegen.f90 | 26 +- {libm65 => map65/libm65}/packjt.f90 | 1992 ++++----- {libm65 => map65/libm65}/pctile.f90 | 44 +- {libm65 => map65/libm65}/pfx.f90 | 0 {libm65 => map65/libm65}/pfxdump.f90 | 0 {libm65 => map65/libm65}/ptt.c | 0 {libm65 => map65/libm65}/ptt_unix.c | 0 {libm65 => map65/libm65}/q65b.f90 | 0 {libm65 => map65/libm65}/qra64/Makefile.Win | 0 {libm65 => map65/libm65}/qra64/fadengauss.c | 0 {libm65 => map65/libm65}/qra64/fadenlorentz.c | 0 {libm65 => map65/libm65}/qra64/main.c | 0 {libm65 => map65/libm65}/qra64/qra64.c | 0 {libm65 => map65/libm65}/qra64/qra64.h | 0 {libm65 => map65/libm65}/qra64/qra64_all.c | 0 {libm65 => map65/libm65}/qra64/qra64_subs.c | 0 .../libm65}/qra64/qra64example.txt | 0 {libm65 => map65/libm65}/qra64/qra64sim.f90 | 0 {libm65 => map65/libm65}/qra64b.f90 | 130 +- {libm65 => map65/libm65}/qra64c.f90 | 442 +- {libm65 => map65/libm65}/qra64d.f90 | 96 +- {libm65 => map65/libm65}/qra64zap.f90 | 124 +- .../libm65}/qracodes/Makefile.Win | 0 .../libm65}/qracodes/ebno10000.txt | 0 .../libm65}/qracodes/ebnovalues.txt | 0 .../libm65}/qracodes/ebnovaluesfast.txt | 0 {libm65 => map65/libm65}/qracodes/main.c | 0 {libm65 => map65/libm65}/qracodes/normrnd.c | 0 {libm65 => map65/libm65}/qracodes/normrnd.h | 0 {libm65 => map65/libm65}/qracodes/npfwht.c | 0 {libm65 => map65/libm65}/qracodes/npfwht.h | 0 {libm65 => map65/libm65}/qracodes/pdmath.c | 0 {libm65 => map65/libm65}/qracodes/pdmath.h | 0 .../libm65}/qracodes/qra12_63_64_irr_b.c | 0 .../libm65}/qracodes/qra12_63_64_irr_b.h | 0 .../libm65}/qracodes/qra13_64_64_irr_e.c | 0 .../libm65}/qracodes/qra13_64_64_irr_e.h | 0 {libm65 => map65/libm65}/qracodes/qracodes.c | 0 {libm65 => map65/libm65}/qracodes/qracodes.h | 0 {libm65 => map65/libm65}/recvpkt.f90 | 0 {libm65 => map65/libm65}/rfile3a.f90 | 0 {libm65 => map65/libm65}/rs.h | 0 {libm65 => map65/libm65}/rs2.h | 0 {libm65 => map65/libm65}/s3avg.f90 | 0 {libm65 => map65/libm65}/sec_midn.f90 | 0 {libm65 => map65/libm65}/set.f90 | 0 {libm65 => map65/libm65}/setup65.f90 | 0 {libm65 => map65/libm65}/shell.f90 | 54 +- {libm65 => map65/libm65}/sleep.h | 0 {libm65 => map65/libm65}/sleep_msec.f90 | 0 {libm65 => map65/libm65}/smo.f90 | 0 {libm65 => map65/libm65}/sort.f90 | 0 {libm65 => map65/libm65}/spec64.f90 | 84 +- {libm65 => map65/libm65}/ssort.f | 0 {libm65 => map65/libm65}/sun.f90 | 0 {libm65 => map65/libm65}/symspec.f90 | 0 {libm65 => map65/libm65}/sync64.f90 | 338 +- {libm65 => map65/libm65}/synctst.f90 | 168 +- {libm65 => map65/libm65}/synctst2.f90 | 182 +- {libm65 => map65/libm65}/tastro.f90 | 0 {libm65 => map65/libm65}/timer.f90 | 0 {libm65 => map65/libm65}/timeval.h | 0 {libm65 => map65/libm65}/timf2.f90 | 0 {libm65 => map65/libm65}/tm2.f90 | 0 {libm65 => map65/libm65}/tmoonsub.c | 0 {libm65 => map65/libm65}/toxyz.f90 | 0 {libm65 => map65/libm65}/trimlist.f90 | 0 {libm65 => map65/libm65}/twkfreq.f90 | 52 +- {libm65 => map65/libm65}/twkfreq_xy.f90 | 0 {libm65 => map65/libm65}/usleep.c | 0 {libm65 => map65/libm65}/wavhdr.f90 | 0 {libm65 => map65/libm65}/wrapkarn.c | 0 {libm65 => map65/libm65}/zplot.f90 | 0 libusb.a => map65/libusb.a | Bin libwsock32.a => map65/libwsock32.a | Bin main.cpp => map65/main.cpp | 0 mainwindow.cpp => map65/mainwindow.cpp | 0 mainwindow.h => map65/mainwindow.h | 0 mainwindow.ui => map65/mainwindow.ui | 3400 ++++++++-------- map65.pro => map65/map65.pro | 0 map65.rc => map65/map65.rc | 2 +- map65_config.h.in => map65/map65_config.h.in | 0 map65b.iss => map65/map65b.iss | 92 +- messages.cpp => map65/messages.cpp | 0 messages.h => map65/messages.h | 0 messages.ui => map65/messages.ui | 214 +- meterwidget.cpp => map65/meterwidget.cpp | 0 meterwidget.h => map65/meterwidget.h | 0 paInputDevice.c => map65/paInputDevice.c | 0 .../pa_get_device_info.c | 0 palir-02.dll => map65/palir-02.dll | Bin plotter.cpp => map65/plotter.cpp | 0 plotter.h => map65/plotter.h | 0 portaudio.h => map65/portaudio.h | 2246 +++++----- {resources => map65/resources}/CALL3.TXT | 0 .../resources}/README.qthid.txt | 44 +- .../resources}/fftwf-wisdom.exe | Bin {resources => map65/resources}/qt.conf | 4 +- {resources => map65/resources}/qthid.exe | Bin .../resources}/qthid/AUTHORS.qthid.4.1.txt | 32 +- .../resources}/qthid/AUTHORS.qthid4.0.txt | 32 +- .../resources}/qthid/LICENSE.txt | 1348 +++--- .../resources}/qthid/NEWS.qhid-4.0.txt | 128 +- .../resources}/qthid/NEWS.qthid-4.1.txt | 128 +- .../resources}/qthid/QtCore4.dll | Bin .../resources}/qthid/QtGui4.dll | Bin .../resources}/qthid/README-qthid-4.1.txt | 144 +- .../resources}/qthid/README.qthid-4.0.txt | 170 +- .../resources}/qthid/libgcc_s_dw2-1.dll | Bin .../resources}/qthid/mingwm10.dll | Bin .../resources}/qthid/qthid-4.0.exe.exe | Bin .../resources}/qthid/qthid-4.1.exe.exe | Bin .../resources}/rigctl-wsjtx.exe | Bin {resources => map65/resources}/wisdom1.bat | 14 +- {resources => map65/resources}/wisdom2.bat | 14 +- set570.cpp => map65/set570.cpp | 0 signalmeter.cpp => map65/signalmeter.cpp | 0 signalmeter.h => map65/signalmeter.h | 0 sleep.h => map65/sleep.h | 0 soundin.cpp => map65/soundin.cpp | 0 soundin.h => map65/soundin.h | 0 soundout.cpp => map65/soundout.cpp | 0 soundout.h => map65/soundout.h | 0 ss.bat => map65/ss.bat | 2 +- sss.bat => map65/sss.bat | 2 +- txtune.cpp => map65/txtune.cpp | 250 +- txtune.h => map65/txtune.h | 96 +- txtune.ui => map65/txtune.ui | 604 +-- usb.h => map65/usb.h | 818 ++-- widegraph.cpp => map65/widegraph.cpp | 0 widegraph.h => map65/widegraph.h | 182 +- widegraph.ui => map65/widegraph.ui | 926 ++--- wsjt.ico => map65/wsjt.ico | Bin 240 files changed, 10338 insertions(+), 10338 deletions(-) rename .gitignore => map65/.gitignore (100%) rename CMakeLists.txt => map65/CMakeLists.txt (100%) rename LICENSE_WHEATLEY.TXT => map65/LICENSE_WHEATLEY.TXT (98%) rename MAP65_Beta_Release.docx => map65/MAP65_Beta_Release.docx (100%) rename about.cpp => map65/about.cpp (100%) rename about.h => map65/about.h (100%) rename about.ui => map65/about.ui (95%) rename afmhot.dat => map65/afmhot.dat (97%) rename astro.cpp => map65/astro.cpp (100%) rename astro.h => map65/astro.h (100%) rename astro.ui => map65/astro.ui (95%) rename bandmap.cpp => map65/bandmap.cpp (100%) rename bandmap.h => map65/bandmap.h (100%) rename bandmap.ui => map65/bandmap.ui (95%) rename blue.dat => map65/blue.dat (97%) rename commons.h => map65/commons.h (100%) rename devsetup.cpp => map65/devsetup.cpp (100%) rename devsetup.h => map65/devsetup.h (100%) rename devsetup.ui => map65/devsetup.ui (96%) rename displaytext.cpp => map65/displaytext.cpp (100%) rename displaytext.h => map65/displaytext.h (100%) rename ffft.f => map65/ffft.f (100%) rename fftw3.f => map65/fftw3.f (100%) rename ft2000_freq.sh => map65/ft2000_freq.sh (98%) rename getdev.cpp => map65/getdev.cpp (100%) rename getfile.cpp => map65/getfile.cpp (100%) rename getfile.h => map65/getfile.h (100%) rename getsvn.cmake => map65/getsvn.cmake (100%) rename in.dat => map65/in.dat (100%) rename killbyname.cpp => map65/killbyname.cpp (100%) rename libfftw3f_win.a => map65/libfftw3f_win.a (100%) rename {libm65 => map65/libm65}/CMakeLists.txt (100%) rename {libm65 => map65/libm65}/Makefile (100%) rename {libm65 => map65/libm65}/Makefile.0 (100%) rename {libm65 => map65/libm65}/Makefile.MinGW (100%) rename {libm65 => map65/libm65}/Makefile.jtsdk (100%) rename {libm65 => map65/libm65}/Makefile.linux (100%) rename {libm65 => map65/libm65}/afc65b.f90 (100%) rename {libm65 => map65/libm65}/astro.f90 (100%) rename {libm65 => map65/libm65}/astro0.f90 (100%) rename {libm65 => map65/libm65}/astrosub.f90 (100%) rename {libm65 => map65/libm65}/averms.f90 (93%) rename {libm65 => map65/libm65}/badmsg.f90 (97%) rename {libm65 => map65/libm65}/ccf2.f90 (100%) rename {libm65 => map65/libm65}/ccf65.f90 (100%) rename {libm65 => map65/libm65}/cgen65.f90 (96%) rename {libm65 => map65/libm65}/chkhist.f90 (100%) rename {libm65 => map65/libm65}/chkmsg.f90 (100%) rename {libm65 => map65/libm65}/coord.f90 (100%) rename {libm65 => map65/libm65}/cutil.c (100%) rename {libm65 => map65/libm65}/dcoord.f90 (100%) rename {libm65 => map65/libm65}/decode0.f90 (100%) rename {libm65 => map65/libm65}/decode1a.f90 (100%) rename {libm65 => map65/libm65}/decode65b.f90 (100%) rename {libm65 => map65/libm65}/decode_rs.c (100%) rename {libm65 => map65/libm65}/deep65.f90 (100%) rename {libm65 => map65/libm65}/deg2grid.f90 (100%) rename {libm65 => map65/libm65}/demod64a.f90 (100%) rename {libm65 => map65/libm65}/display.f90 (100%) rename {libm65 => map65/libm65}/dot.f90 (100%) rename {libm65 => map65/libm65}/dpol.f90 (100%) rename {libm65 => map65/libm65}/encode65.f90 (100%) rename {libm65 => map65/libm65}/encode_rs.c (100%) rename {libm65 => map65/libm65}/extract.f90 (100%) rename {libm65 => map65/libm65}/f77_wisdom.f (100%) rename {libm65 => map65/libm65}/fchisq.f90 (100%) rename {libm65 => map65/libm65}/fchisq0.f90 (100%) rename {libm65 => map65/libm65}/fftw3.f (100%) rename {libm65 => map65/libm65}/fftw3.f90 (96%) rename {libm65 => map65/libm65}/fil6521.f90 (100%) rename {libm65 => map65/libm65}/filbig.f90 (100%) rename {libm65 => map65/libm65}/fmtmsg.f90 (95%) rename {libm65 => map65/libm65}/four2a.f90 (100%) rename {libm65 => map65/libm65}/ftninit.f90 (100%) rename {libm65 => map65/libm65}/ftnquit.f90 (100%) rename {libm65 => map65/libm65}/ftrsd2.c (100%) rename {libm65 => map65/libm65}/gen65.f90 (100%) rename {libm65 => map65/libm65}/gen_q65_wave.f90 (100%) rename {libm65 => map65/libm65}/genqra64a.f90 (96%) rename {libm65 => map65/libm65}/geocentric.f90 (100%) rename {libm65 => map65/libm65}/getdphi.f90 (100%) rename {libm65 => map65/libm65}/getpfx1.f90 (100%) rename {libm65 => map65/libm65}/getpfx2.f90 (100%) rename {libm65 => map65/libm65}/gran.c (95%) rename {libm65 => map65/libm65}/graycode.f90 (100%) rename {libm65 => map65/libm65}/graycode65.f90 (100%) rename {libm65 => map65/libm65}/grid2deg.f90 (100%) rename {libm65 => map65/libm65}/grid2k.f90 (100%) rename {libm65 => map65/libm65}/igray.c (100%) rename {libm65 => map65/libm65}/indexx.f90 (100%) rename {libm65 => map65/libm65}/init_rs.c (100%) rename {libm65 => map65/libm65}/int.h (100%) rename {libm65 => map65/libm65}/interleave63.f90 (100%) rename {libm65 => map65/libm65}/ipcomm.cpp (100%) rename {libm65 => map65/libm65}/iqcal.f90 (100%) rename {libm65 => map65/libm65}/iqfix.f90 (100%) rename {libm65 => map65/libm65}/jt65code.f90 (100%) rename {libm65 => map65/libm65}/k2grid.f90 (100%) rename {libm65 => map65/libm65}/lorentzian.f90 (100%) rename {libm65 => map65/libm65}/m65.f90 (100%) rename {libm65 => map65/libm65}/m65a.F90 (100%) rename {libm65 => map65/libm65}/map65a.f90 (100%) rename {libm65 => map65/libm65}/mapsim.f90 (97%) rename {libm65 => map65/libm65}/moon2.f90 (100%) rename {libm65 => map65/libm65}/moondop.f90 (100%) rename {libm65 => map65/libm65}/msgs.txt (94%) rename {libm65 => map65/libm65}/nchar.f90 (100%) rename {libm65 => map65/libm65}/noisegen.f90 (93%) rename {libm65 => map65/libm65}/packjt.f90 (95%) rename {libm65 => map65/libm65}/pctile.f90 (94%) rename {libm65 => map65/libm65}/pfx.f90 (100%) rename {libm65 => map65/libm65}/pfxdump.f90 (100%) rename {libm65 => map65/libm65}/ptt.c (100%) rename {libm65 => map65/libm65}/ptt_unix.c (100%) rename {libm65 => map65/libm65}/q65b.f90 (100%) rename {libm65 => map65/libm65}/qra64/Makefile.Win (100%) rename {libm65 => map65/libm65}/qra64/fadengauss.c (100%) rename {libm65 => map65/libm65}/qra64/fadenlorentz.c (100%) rename {libm65 => map65/libm65}/qra64/main.c (100%) rename {libm65 => map65/libm65}/qra64/qra64.c (100%) rename {libm65 => map65/libm65}/qra64/qra64.h (100%) rename {libm65 => map65/libm65}/qra64/qra64_all.c (100%) rename {libm65 => map65/libm65}/qra64/qra64_subs.c (100%) rename {libm65 => map65/libm65}/qra64/qra64example.txt (100%) rename {libm65 => map65/libm65}/qra64/qra64sim.f90 (100%) rename {libm65 => map65/libm65}/qra64b.f90 (96%) rename {libm65 => map65/libm65}/qra64c.f90 (96%) rename {libm65 => map65/libm65}/qra64d.f90 (96%) rename {libm65 => map65/libm65}/qra64zap.f90 (95%) rename {libm65 => map65/libm65}/qracodes/Makefile.Win (100%) rename {libm65 => map65/libm65}/qracodes/ebno10000.txt (100%) rename {libm65 => map65/libm65}/qracodes/ebnovalues.txt (100%) rename {libm65 => map65/libm65}/qracodes/ebnovaluesfast.txt (100%) rename {libm65 => map65/libm65}/qracodes/main.c (100%) rename {libm65 => map65/libm65}/qracodes/normrnd.c (100%) rename {libm65 => map65/libm65}/qracodes/normrnd.h (100%) rename {libm65 => map65/libm65}/qracodes/npfwht.c (100%) rename {libm65 => map65/libm65}/qracodes/npfwht.h (100%) rename {libm65 => map65/libm65}/qracodes/pdmath.c (100%) rename {libm65 => map65/libm65}/qracodes/pdmath.h (100%) rename {libm65 => map65/libm65}/qracodes/qra12_63_64_irr_b.c (100%) rename {libm65 => map65/libm65}/qracodes/qra12_63_64_irr_b.h (100%) rename {libm65 => map65/libm65}/qracodes/qra13_64_64_irr_e.c (100%) rename {libm65 => map65/libm65}/qracodes/qra13_64_64_irr_e.h (100%) rename {libm65 => map65/libm65}/qracodes/qracodes.c (100%) rename {libm65 => map65/libm65}/qracodes/qracodes.h (100%) rename {libm65 => map65/libm65}/recvpkt.f90 (100%) rename {libm65 => map65/libm65}/rfile3a.f90 (100%) rename {libm65 => map65/libm65}/rs.h (100%) rename {libm65 => map65/libm65}/rs2.h (100%) rename {libm65 => map65/libm65}/s3avg.f90 (100%) rename {libm65 => map65/libm65}/sec_midn.f90 (100%) rename {libm65 => map65/libm65}/set.f90 (100%) rename {libm65 => map65/libm65}/setup65.f90 (100%) rename {libm65 => map65/libm65}/shell.f90 (93%) rename {libm65 => map65/libm65}/sleep.h (100%) rename {libm65 => map65/libm65}/sleep_msec.f90 (100%) rename {libm65 => map65/libm65}/smo.f90 (100%) rename {libm65 => map65/libm65}/sort.f90 (100%) rename {libm65 => map65/libm65}/spec64.f90 (96%) rename {libm65 => map65/libm65}/ssort.f (100%) rename {libm65 => map65/libm65}/sun.f90 (100%) rename {libm65 => map65/libm65}/symspec.f90 (100%) rename {libm65 => map65/libm65}/sync64.f90 (96%) rename {libm65 => map65/libm65}/synctst.f90 (95%) rename {libm65 => map65/libm65}/synctst2.f90 (96%) rename {libm65 => map65/libm65}/tastro.f90 (100%) rename {libm65 => map65/libm65}/timer.f90 (100%) rename {libm65 => map65/libm65}/timeval.h (100%) rename {libm65 => map65/libm65}/timf2.f90 (100%) rename {libm65 => map65/libm65}/tm2.f90 (100%) rename {libm65 => map65/libm65}/tmoonsub.c (100%) rename {libm65 => map65/libm65}/toxyz.f90 (100%) rename {libm65 => map65/libm65}/trimlist.f90 (100%) rename {libm65 => map65/libm65}/twkfreq.f90 (95%) rename {libm65 => map65/libm65}/twkfreq_xy.f90 (100%) rename {libm65 => map65/libm65}/usleep.c (100%) rename {libm65 => map65/libm65}/wavhdr.f90 (100%) rename {libm65 => map65/libm65}/wrapkarn.c (100%) rename {libm65 => map65/libm65}/zplot.f90 (100%) rename libusb.a => map65/libusb.a (100%) rename libwsock32.a => map65/libwsock32.a (100%) rename main.cpp => map65/main.cpp (100%) rename mainwindow.cpp => map65/mainwindow.cpp (100%) rename mainwindow.h => map65/mainwindow.h (100%) rename mainwindow.ui => map65/mainwindow.ui (96%) rename map65.pro => map65/map65.pro (100%) rename map65.rc => map65/map65.rc (98%) rename map65_config.h.in => map65/map65_config.h.in (100%) rename map65b.iss => map65/map65b.iss (98%) rename messages.cpp => map65/messages.cpp (100%) rename messages.h => map65/messages.h (100%) rename messages.ui => map65/messages.ui (96%) rename meterwidget.cpp => map65/meterwidget.cpp (100%) rename meterwidget.h => map65/meterwidget.h (100%) rename paInputDevice.c => map65/paInputDevice.c (100%) rename pa_get_device_info.c => map65/pa_get_device_info.c (100%) rename palir-02.dll => map65/palir-02.dll (100%) rename plotter.cpp => map65/plotter.cpp (100%) rename plotter.h => map65/plotter.h (100%) rename portaudio.h => map65/portaudio.h (97%) rename {resources => map65/resources}/CALL3.TXT (100%) rename {resources => map65/resources}/README.qthid.txt (97%) rename {resources => map65/resources}/fftwf-wisdom.exe (100%) rename {resources => map65/resources}/qt.conf (90%) rename {resources => map65/resources}/qthid.exe (100%) rename {resources => map65/resources}/qthid/AUTHORS.qthid.4.1.txt (96%) rename {resources => map65/resources}/qthid/AUTHORS.qthid4.0.txt (96%) rename {resources => map65/resources}/qthid/LICENSE.txt (98%) rename {resources => map65/resources}/qthid/NEWS.qhid-4.0.txt (97%) rename {resources => map65/resources}/qthid/NEWS.qthid-4.1.txt (97%) rename {resources => map65/resources}/qthid/QtCore4.dll (100%) rename {resources => map65/resources}/qthid/QtGui4.dll (100%) rename {resources => map65/resources}/qthid/README-qthid-4.1.txt (98%) rename {resources => map65/resources}/qthid/README.qthid-4.0.txt (98%) rename {resources => map65/resources}/qthid/libgcc_s_dw2-1.dll (100%) rename {resources => map65/resources}/qthid/mingwm10.dll (100%) rename {resources => map65/resources}/qthid/qthid-4.0.exe.exe (100%) rename {resources => map65/resources}/qthid/qthid-4.1.exe.exe (100%) rename {resources => map65/resources}/rigctl-wsjtx.exe (100%) rename {resources => map65/resources}/wisdom1.bat (98%) rename {resources => map65/resources}/wisdom2.bat (98%) rename set570.cpp => map65/set570.cpp (100%) rename signalmeter.cpp => map65/signalmeter.cpp (100%) rename signalmeter.h => map65/signalmeter.h (100%) rename sleep.h => map65/sleep.h (100%) rename soundin.cpp => map65/soundin.cpp (100%) rename soundin.h => map65/soundin.h (100%) rename soundout.cpp => map65/soundout.cpp (100%) rename soundout.h => map65/soundout.h (100%) rename ss.bat => map65/ss.bat (96%) rename sss.bat => map65/sss.bat (91%) rename txtune.cpp => map65/txtune.cpp (94%) rename txtune.h => map65/txtune.h (94%) rename txtune.ui => map65/txtune.ui (96%) rename usb.h => map65/usb.h (96%) rename widegraph.cpp => map65/widegraph.cpp (100%) rename widegraph.h => map65/widegraph.h (95%) rename widegraph.ui => map65/widegraph.ui (96%) rename wsjt.ico => map65/wsjt.ico (100%) diff --git a/.gitignore b/map65/.gitignore similarity index 100% rename from .gitignore rename to map65/.gitignore diff --git a/CMakeLists.txt b/map65/CMakeLists.txt similarity index 100% rename from CMakeLists.txt rename to map65/CMakeLists.txt diff --git a/LICENSE_WHEATLEY.TXT b/map65/LICENSE_WHEATLEY.TXT similarity index 98% rename from LICENSE_WHEATLEY.TXT rename to map65/LICENSE_WHEATLEY.TXT index 8b0ce2498..8adb5204b 100644 --- a/LICENSE_WHEATLEY.TXT +++ b/map65/LICENSE_WHEATLEY.TXT @@ -1,30 +1,30 @@ -+ + + This Software is released under the "Simplified BSD License" + + + -Copyright 2010 Moe Wheatley. All rights reserved. - -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 Moe Wheatley ``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 Moe Wheatley 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. - -The views and conclusions contained in the software and documentation -are those of the authors and should not be interpreted as representing -official policies, either expressed or implied, of Moe Wheatley. ++ + + This Software is released under the "Simplified BSD License" + + + +Copyright 2010 Moe Wheatley. All rights reserved. + +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 Moe Wheatley ``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 Moe Wheatley 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. + +The views and conclusions contained in the software and documentation +are those of the authors and should not be interpreted as representing +official policies, either expressed or implied, of Moe Wheatley. diff --git a/MAP65_Beta_Release.docx b/map65/MAP65_Beta_Release.docx similarity index 100% rename from MAP65_Beta_Release.docx rename to map65/MAP65_Beta_Release.docx diff --git a/about.cpp b/map65/about.cpp similarity index 100% rename from about.cpp rename to map65/about.cpp diff --git a/about.h b/map65/about.h similarity index 100% rename from about.h rename to map65/about.h diff --git a/about.ui b/map65/about.ui similarity index 95% rename from about.ui rename to map65/about.ui index 0a2d5b3f8..d2ed43771 100644 --- a/about.ui +++ b/map65/about.ui @@ -1,41 +1,41 @@ - - - CAboutDlg - - - Qt::NonModal - - - - 0 - 0 - 374 - 164 - - - - - 0 - 0 - - - - About MAP65 - - - - - 20 - 10 - 331 - 131 - - - - - - - - - - + + + CAboutDlg + + + Qt::NonModal + + + + 0 + 0 + 374 + 164 + + + + + 0 + 0 + + + + About MAP65 + + + + + 20 + 10 + 331 + 131 + + + + + + + + + + diff --git a/afmhot.dat b/map65/afmhot.dat similarity index 97% rename from afmhot.dat rename to map65/afmhot.dat index 8b312a11c..7599d4aa8 100644 --- a/afmhot.dat +++ b/map65/afmhot.dat @@ -1,257 +1,257 @@ - 0 0.0000 0.0000 0.0000 - 1 0.0000 0.0000 0.0000 - 2 0.0078 0.0000 0.0000 - 3 0.0157 0.0000 0.0000 - 4 0.0235 0.0000 0.0000 - 5 0.0314 0.0000 0.0000 - 6 0.0392 0.0000 0.0000 - 7 0.0471 0.0000 0.0000 - 8 0.0549 0.0000 0.0000 - 9 0.0627 0.0000 0.0000 - 10 0.0706 0.0000 0.0000 - 11 0.0784 0.0000 0.0000 - 12 0.0863 0.0000 0.0000 - 13 0.0941 0.0000 0.0000 - 14 0.1020 0.0000 0.0000 - 15 0.1098 0.0000 0.0000 - 16 0.1176 0.0000 0.0000 - 17 0.1255 0.0000 0.0000 - 18 0.1333 0.0000 0.0000 - 19 0.1412 0.0000 0.0000 - 20 0.1490 0.0000 0.0000 - 21 0.1569 0.0000 0.0000 - 22 0.1647 0.0000 0.0000 - 23 0.1725 0.0000 0.0000 - 24 0.1804 0.0000 0.0000 - 25 0.1882 0.0000 0.0000 - 26 0.1961 0.0000 0.0000 - 27 0.2039 0.0000 0.0000 - 28 0.2118 0.0000 0.0000 - 29 0.2196 0.0000 0.0000 - 30 0.2275 0.0000 0.0000 - 31 0.2353 0.0000 0.0000 - 32 0.2431 0.0000 0.0000 - 33 0.2510 0.0000 0.0000 - 34 0.2588 0.0000 0.0000 - 35 0.2667 0.0000 0.0000 - 36 0.2745 0.0000 0.0000 - 37 0.2824 0.0000 0.0000 - 38 0.2902 0.0000 0.0000 - 39 0.2980 0.0000 0.0000 - 40 0.3059 0.0000 0.0000 - 41 0.3137 0.0000 0.0000 - 42 0.3216 0.0000 0.0000 - 43 0.3294 0.0000 0.0000 - 44 0.3373 0.0000 0.0000 - 45 0.3451 0.0000 0.0000 - 46 0.3529 0.0000 0.0000 - 47 0.3608 0.0000 0.0000 - 48 0.3686 0.0000 0.0000 - 49 0.3765 0.0000 0.0000 - 50 0.3843 0.0000 0.0000 - 51 0.3922 0.0000 0.0000 - 52 0.4000 0.0000 0.0000 - 53 0.4078 0.0000 0.0000 - 54 0.4157 0.0000 0.0000 - 55 0.4235 0.0000 0.0000 - 56 0.4314 0.0000 0.0000 - 57 0.4392 0.0000 0.0000 - 58 0.4471 0.0000 0.0000 - 59 0.4549 0.0000 0.0000 - 60 0.4627 0.0000 0.0000 - 61 0.4706 0.0000 0.0000 - 62 0.4784 0.0000 0.0000 - 63 0.4863 0.0000 0.0000 - 64 0.4941 0.0000 0.0000 - 65 0.5020 0.0000 0.0000 - 66 0.5098 0.0098 0.0000 - 67 0.5176 0.0176 0.0000 - 68 0.5255 0.0255 0.0000 - 69 0.5333 0.0333 0.0000 - 70 0.5412 0.0412 0.0000 - 71 0.5490 0.0490 0.0000 - 72 0.5569 0.0569 0.0000 - 73 0.5647 0.0647 0.0000 - 74 0.5725 0.0725 0.0000 - 75 0.5804 0.0804 0.0000 - 76 0.5882 0.0882 0.0000 - 77 0.5961 0.0961 0.0000 - 78 0.6039 0.1039 0.0000 - 79 0.6118 0.1118 0.0000 - 80 0.6196 0.1196 0.0000 - 81 0.6275 0.1275 0.0000 - 82 0.6353 0.1353 0.0000 - 83 0.6431 0.1431 0.0000 - 84 0.6510 0.1510 0.0000 - 85 0.6588 0.1588 0.0000 - 86 0.6667 0.1667 0.0000 - 87 0.6745 0.1745 0.0000 - 88 0.6824 0.1824 0.0000 - 89 0.6902 0.1902 0.0000 - 90 0.6980 0.1980 0.0000 - 91 0.7059 0.2059 0.0000 - 92 0.7137 0.2137 0.0000 - 93 0.7216 0.2216 0.0000 - 94 0.7294 0.2294 0.0000 - 95 0.7373 0.2373 0.0000 - 96 0.7451 0.2451 0.0000 - 97 0.7529 0.2529 0.0000 - 98 0.7608 0.2608 0.0000 - 99 0.7686 0.2686 0.0000 - 100 0.7765 0.2765 0.0000 - 101 0.7843 0.2843 0.0000 - 102 0.7922 0.2922 0.0000 - 103 0.8000 0.3000 0.0000 - 104 0.8078 0.3078 0.0000 - 105 0.8157 0.3157 0.0000 - 106 0.8235 0.3235 0.0000 - 107 0.8314 0.3314 0.0000 - 108 0.8392 0.3392 0.0000 - 109 0.8471 0.3471 0.0000 - 110 0.8549 0.3549 0.0000 - 111 0.8627 0.3627 0.0000 - 112 0.8706 0.3706 0.0000 - 113 0.8784 0.3784 0.0000 - 114 0.8863 0.3863 0.0000 - 115 0.8941 0.3941 0.0000 - 116 0.9020 0.4020 0.0000 - 117 0.9098 0.4098 0.0000 - 118 0.9176 0.4176 0.0000 - 119 0.9255 0.4255 0.0000 - 120 0.9333 0.4333 0.0000 - 121 0.9412 0.4412 0.0000 - 122 0.9490 0.4490 0.0000 - 123 0.9569 0.4569 0.0000 - 124 0.9647 0.4647 0.0000 - 125 0.9725 0.4725 0.0000 - 126 0.9804 0.4804 0.0000 - 127 0.9882 0.4882 0.0000 - 128 0.9961 0.4961 0.0000 - 129 1.0000 0.5039 0.0000 - 130 1.0000 0.5118 0.0118 - 131 1.0000 0.5196 0.0196 - 132 1.0000 0.5275 0.0275 - 133 1.0000 0.5353 0.0353 - 134 1.0000 0.5431 0.0431 - 135 1.0000 0.5510 0.0510 - 136 1.0000 0.5588 0.0588 - 137 1.0000 0.5667 0.0667 - 138 1.0000 0.5745 0.0745 - 139 1.0000 0.5824 0.0824 - 140 1.0000 0.5902 0.0902 - 141 1.0000 0.5980 0.0980 - 142 1.0000 0.6059 0.1059 - 143 1.0000 0.6137 0.1137 - 144 1.0000 0.6216 0.1216 - 145 1.0000 0.6294 0.1294 - 146 1.0000 0.6373 0.1373 - 147 1.0000 0.6451 0.1451 - 148 1.0000 0.6529 0.1529 - 149 1.0000 0.6608 0.1608 - 150 1.0000 0.6686 0.1686 - 151 1.0000 0.6765 0.1765 - 152 1.0000 0.6843 0.1843 - 153 1.0000 0.6922 0.1922 - 154 1.0000 0.7000 0.2000 - 155 1.0000 0.7078 0.2078 - 156 1.0000 0.7157 0.2157 - 157 1.0000 0.7235 0.2235 - 158 1.0000 0.7314 0.2314 - 159 1.0000 0.7392 0.2392 - 160 1.0000 0.7471 0.2471 - 161 1.0000 0.7549 0.2549 - 162 1.0000 0.7627 0.2627 - 163 1.0000 0.7706 0.2706 - 164 1.0000 0.7784 0.2784 - 165 1.0000 0.7863 0.2863 - 166 1.0000 0.7941 0.2941 - 167 1.0000 0.8020 0.3020 - 168 1.0000 0.8098 0.3098 - 169 1.0000 0.8176 0.3176 - 170 1.0000 0.8255 0.3255 - 171 1.0000 0.8333 0.3333 - 172 1.0000 0.8412 0.3412 - 173 1.0000 0.8490 0.3490 - 174 1.0000 0.8569 0.3569 - 175 1.0000 0.8647 0.3647 - 176 1.0000 0.8725 0.3725 - 177 1.0000 0.8804 0.3804 - 178 1.0000 0.8882 0.3882 - 179 1.0000 0.8961 0.3961 - 180 1.0000 0.9039 0.4039 - 181 1.0000 0.9118 0.4118 - 182 1.0000 0.9196 0.4196 - 183 1.0000 0.9275 0.4275 - 184 1.0000 0.9353 0.4353 - 185 1.0000 0.9431 0.4431 - 186 1.0000 0.9510 0.4510 - 187 1.0000 0.9588 0.4588 - 188 1.0000 0.9667 0.4667 - 189 1.0000 0.9745 0.4745 - 190 1.0000 0.9824 0.4824 - 191 1.0000 0.9902 0.4902 - 192 1.0000 0.9980 0.4980 - 193 1.0000 1.0000 0.5059 - 194 1.0000 1.0000 0.5137 - 195 1.0000 1.0000 0.5216 - 196 1.0000 1.0000 0.5294 - 197 1.0000 1.0000 0.5373 - 198 1.0000 1.0000 0.5451 - 199 1.0000 1.0000 0.5529 - 200 1.0000 1.0000 0.5608 - 201 1.0000 1.0000 0.5686 - 202 1.0000 1.0000 0.5765 - 203 1.0000 1.0000 0.5843 - 204 1.0000 1.0000 0.5922 - 205 1.0000 1.0000 0.6000 - 206 1.0000 1.0000 0.6078 - 207 1.0000 1.0000 0.6157 - 208 1.0000 1.0000 0.6235 - 209 1.0000 1.0000 0.6314 - 210 1.0000 1.0000 0.6392 - 211 1.0000 1.0000 0.6471 - 212 1.0000 1.0000 0.6549 - 213 1.0000 1.0000 0.6627 - 214 1.0000 1.0000 0.6706 - 215 1.0000 1.0000 0.6784 - 216 1.0000 1.0000 0.6863 - 217 1.0000 1.0000 0.6941 - 218 1.0000 1.0000 0.7020 - 219 1.0000 1.0000 0.7098 - 220 1.0000 1.0000 0.7176 - 221 1.0000 1.0000 0.7255 - 222 1.0000 1.0000 0.7333 - 223 1.0000 1.0000 0.7412 - 224 1.0000 1.0000 0.7490 - 225 1.0000 1.0000 0.7569 - 226 1.0000 1.0000 0.7647 - 227 1.0000 1.0000 0.7725 - 228 1.0000 1.0000 0.7804 - 229 1.0000 1.0000 0.7882 - 230 1.0000 1.0000 0.7961 - 231 1.0000 1.0000 0.8039 - 232 1.0000 1.0000 0.8118 - 233 1.0000 1.0000 0.8196 - 234 1.0000 1.0000 0.8275 - 235 1.0000 1.0000 0.8353 - 236 1.0000 1.0000 0.8431 - 237 1.0000 1.0000 0.8510 - 238 1.0000 1.0000 0.8588 - 239 1.0000 1.0000 0.8667 - 240 1.0000 1.0000 0.8745 - 241 1.0000 1.0000 0.8824 - 242 1.0000 1.0000 0.8902 - 243 1.0000 1.0000 0.8980 - 244 1.0000 1.0000 0.9059 - 245 1.0000 1.0000 0.9137 - 246 1.0000 1.0000 0.9216 - 247 1.0000 1.0000 0.9294 - 248 1.0000 1.0000 0.9373 - 249 1.0000 1.0000 0.9451 - 250 1.0000 1.0000 0.9529 - 251 1.0000 1.0000 0.9608 - 252 1.0000 1.0000 0.9686 - 253 1.0000 1.0000 0.9765 - 254 1.0 0.0 0.0 - 255 1.0 1.0 0.0 - 256 0.0 1.000 0.0 + 0 0.0000 0.0000 0.0000 + 1 0.0000 0.0000 0.0000 + 2 0.0078 0.0000 0.0000 + 3 0.0157 0.0000 0.0000 + 4 0.0235 0.0000 0.0000 + 5 0.0314 0.0000 0.0000 + 6 0.0392 0.0000 0.0000 + 7 0.0471 0.0000 0.0000 + 8 0.0549 0.0000 0.0000 + 9 0.0627 0.0000 0.0000 + 10 0.0706 0.0000 0.0000 + 11 0.0784 0.0000 0.0000 + 12 0.0863 0.0000 0.0000 + 13 0.0941 0.0000 0.0000 + 14 0.1020 0.0000 0.0000 + 15 0.1098 0.0000 0.0000 + 16 0.1176 0.0000 0.0000 + 17 0.1255 0.0000 0.0000 + 18 0.1333 0.0000 0.0000 + 19 0.1412 0.0000 0.0000 + 20 0.1490 0.0000 0.0000 + 21 0.1569 0.0000 0.0000 + 22 0.1647 0.0000 0.0000 + 23 0.1725 0.0000 0.0000 + 24 0.1804 0.0000 0.0000 + 25 0.1882 0.0000 0.0000 + 26 0.1961 0.0000 0.0000 + 27 0.2039 0.0000 0.0000 + 28 0.2118 0.0000 0.0000 + 29 0.2196 0.0000 0.0000 + 30 0.2275 0.0000 0.0000 + 31 0.2353 0.0000 0.0000 + 32 0.2431 0.0000 0.0000 + 33 0.2510 0.0000 0.0000 + 34 0.2588 0.0000 0.0000 + 35 0.2667 0.0000 0.0000 + 36 0.2745 0.0000 0.0000 + 37 0.2824 0.0000 0.0000 + 38 0.2902 0.0000 0.0000 + 39 0.2980 0.0000 0.0000 + 40 0.3059 0.0000 0.0000 + 41 0.3137 0.0000 0.0000 + 42 0.3216 0.0000 0.0000 + 43 0.3294 0.0000 0.0000 + 44 0.3373 0.0000 0.0000 + 45 0.3451 0.0000 0.0000 + 46 0.3529 0.0000 0.0000 + 47 0.3608 0.0000 0.0000 + 48 0.3686 0.0000 0.0000 + 49 0.3765 0.0000 0.0000 + 50 0.3843 0.0000 0.0000 + 51 0.3922 0.0000 0.0000 + 52 0.4000 0.0000 0.0000 + 53 0.4078 0.0000 0.0000 + 54 0.4157 0.0000 0.0000 + 55 0.4235 0.0000 0.0000 + 56 0.4314 0.0000 0.0000 + 57 0.4392 0.0000 0.0000 + 58 0.4471 0.0000 0.0000 + 59 0.4549 0.0000 0.0000 + 60 0.4627 0.0000 0.0000 + 61 0.4706 0.0000 0.0000 + 62 0.4784 0.0000 0.0000 + 63 0.4863 0.0000 0.0000 + 64 0.4941 0.0000 0.0000 + 65 0.5020 0.0000 0.0000 + 66 0.5098 0.0098 0.0000 + 67 0.5176 0.0176 0.0000 + 68 0.5255 0.0255 0.0000 + 69 0.5333 0.0333 0.0000 + 70 0.5412 0.0412 0.0000 + 71 0.5490 0.0490 0.0000 + 72 0.5569 0.0569 0.0000 + 73 0.5647 0.0647 0.0000 + 74 0.5725 0.0725 0.0000 + 75 0.5804 0.0804 0.0000 + 76 0.5882 0.0882 0.0000 + 77 0.5961 0.0961 0.0000 + 78 0.6039 0.1039 0.0000 + 79 0.6118 0.1118 0.0000 + 80 0.6196 0.1196 0.0000 + 81 0.6275 0.1275 0.0000 + 82 0.6353 0.1353 0.0000 + 83 0.6431 0.1431 0.0000 + 84 0.6510 0.1510 0.0000 + 85 0.6588 0.1588 0.0000 + 86 0.6667 0.1667 0.0000 + 87 0.6745 0.1745 0.0000 + 88 0.6824 0.1824 0.0000 + 89 0.6902 0.1902 0.0000 + 90 0.6980 0.1980 0.0000 + 91 0.7059 0.2059 0.0000 + 92 0.7137 0.2137 0.0000 + 93 0.7216 0.2216 0.0000 + 94 0.7294 0.2294 0.0000 + 95 0.7373 0.2373 0.0000 + 96 0.7451 0.2451 0.0000 + 97 0.7529 0.2529 0.0000 + 98 0.7608 0.2608 0.0000 + 99 0.7686 0.2686 0.0000 + 100 0.7765 0.2765 0.0000 + 101 0.7843 0.2843 0.0000 + 102 0.7922 0.2922 0.0000 + 103 0.8000 0.3000 0.0000 + 104 0.8078 0.3078 0.0000 + 105 0.8157 0.3157 0.0000 + 106 0.8235 0.3235 0.0000 + 107 0.8314 0.3314 0.0000 + 108 0.8392 0.3392 0.0000 + 109 0.8471 0.3471 0.0000 + 110 0.8549 0.3549 0.0000 + 111 0.8627 0.3627 0.0000 + 112 0.8706 0.3706 0.0000 + 113 0.8784 0.3784 0.0000 + 114 0.8863 0.3863 0.0000 + 115 0.8941 0.3941 0.0000 + 116 0.9020 0.4020 0.0000 + 117 0.9098 0.4098 0.0000 + 118 0.9176 0.4176 0.0000 + 119 0.9255 0.4255 0.0000 + 120 0.9333 0.4333 0.0000 + 121 0.9412 0.4412 0.0000 + 122 0.9490 0.4490 0.0000 + 123 0.9569 0.4569 0.0000 + 124 0.9647 0.4647 0.0000 + 125 0.9725 0.4725 0.0000 + 126 0.9804 0.4804 0.0000 + 127 0.9882 0.4882 0.0000 + 128 0.9961 0.4961 0.0000 + 129 1.0000 0.5039 0.0000 + 130 1.0000 0.5118 0.0118 + 131 1.0000 0.5196 0.0196 + 132 1.0000 0.5275 0.0275 + 133 1.0000 0.5353 0.0353 + 134 1.0000 0.5431 0.0431 + 135 1.0000 0.5510 0.0510 + 136 1.0000 0.5588 0.0588 + 137 1.0000 0.5667 0.0667 + 138 1.0000 0.5745 0.0745 + 139 1.0000 0.5824 0.0824 + 140 1.0000 0.5902 0.0902 + 141 1.0000 0.5980 0.0980 + 142 1.0000 0.6059 0.1059 + 143 1.0000 0.6137 0.1137 + 144 1.0000 0.6216 0.1216 + 145 1.0000 0.6294 0.1294 + 146 1.0000 0.6373 0.1373 + 147 1.0000 0.6451 0.1451 + 148 1.0000 0.6529 0.1529 + 149 1.0000 0.6608 0.1608 + 150 1.0000 0.6686 0.1686 + 151 1.0000 0.6765 0.1765 + 152 1.0000 0.6843 0.1843 + 153 1.0000 0.6922 0.1922 + 154 1.0000 0.7000 0.2000 + 155 1.0000 0.7078 0.2078 + 156 1.0000 0.7157 0.2157 + 157 1.0000 0.7235 0.2235 + 158 1.0000 0.7314 0.2314 + 159 1.0000 0.7392 0.2392 + 160 1.0000 0.7471 0.2471 + 161 1.0000 0.7549 0.2549 + 162 1.0000 0.7627 0.2627 + 163 1.0000 0.7706 0.2706 + 164 1.0000 0.7784 0.2784 + 165 1.0000 0.7863 0.2863 + 166 1.0000 0.7941 0.2941 + 167 1.0000 0.8020 0.3020 + 168 1.0000 0.8098 0.3098 + 169 1.0000 0.8176 0.3176 + 170 1.0000 0.8255 0.3255 + 171 1.0000 0.8333 0.3333 + 172 1.0000 0.8412 0.3412 + 173 1.0000 0.8490 0.3490 + 174 1.0000 0.8569 0.3569 + 175 1.0000 0.8647 0.3647 + 176 1.0000 0.8725 0.3725 + 177 1.0000 0.8804 0.3804 + 178 1.0000 0.8882 0.3882 + 179 1.0000 0.8961 0.3961 + 180 1.0000 0.9039 0.4039 + 181 1.0000 0.9118 0.4118 + 182 1.0000 0.9196 0.4196 + 183 1.0000 0.9275 0.4275 + 184 1.0000 0.9353 0.4353 + 185 1.0000 0.9431 0.4431 + 186 1.0000 0.9510 0.4510 + 187 1.0000 0.9588 0.4588 + 188 1.0000 0.9667 0.4667 + 189 1.0000 0.9745 0.4745 + 190 1.0000 0.9824 0.4824 + 191 1.0000 0.9902 0.4902 + 192 1.0000 0.9980 0.4980 + 193 1.0000 1.0000 0.5059 + 194 1.0000 1.0000 0.5137 + 195 1.0000 1.0000 0.5216 + 196 1.0000 1.0000 0.5294 + 197 1.0000 1.0000 0.5373 + 198 1.0000 1.0000 0.5451 + 199 1.0000 1.0000 0.5529 + 200 1.0000 1.0000 0.5608 + 201 1.0000 1.0000 0.5686 + 202 1.0000 1.0000 0.5765 + 203 1.0000 1.0000 0.5843 + 204 1.0000 1.0000 0.5922 + 205 1.0000 1.0000 0.6000 + 206 1.0000 1.0000 0.6078 + 207 1.0000 1.0000 0.6157 + 208 1.0000 1.0000 0.6235 + 209 1.0000 1.0000 0.6314 + 210 1.0000 1.0000 0.6392 + 211 1.0000 1.0000 0.6471 + 212 1.0000 1.0000 0.6549 + 213 1.0000 1.0000 0.6627 + 214 1.0000 1.0000 0.6706 + 215 1.0000 1.0000 0.6784 + 216 1.0000 1.0000 0.6863 + 217 1.0000 1.0000 0.6941 + 218 1.0000 1.0000 0.7020 + 219 1.0000 1.0000 0.7098 + 220 1.0000 1.0000 0.7176 + 221 1.0000 1.0000 0.7255 + 222 1.0000 1.0000 0.7333 + 223 1.0000 1.0000 0.7412 + 224 1.0000 1.0000 0.7490 + 225 1.0000 1.0000 0.7569 + 226 1.0000 1.0000 0.7647 + 227 1.0000 1.0000 0.7725 + 228 1.0000 1.0000 0.7804 + 229 1.0000 1.0000 0.7882 + 230 1.0000 1.0000 0.7961 + 231 1.0000 1.0000 0.8039 + 232 1.0000 1.0000 0.8118 + 233 1.0000 1.0000 0.8196 + 234 1.0000 1.0000 0.8275 + 235 1.0000 1.0000 0.8353 + 236 1.0000 1.0000 0.8431 + 237 1.0000 1.0000 0.8510 + 238 1.0000 1.0000 0.8588 + 239 1.0000 1.0000 0.8667 + 240 1.0000 1.0000 0.8745 + 241 1.0000 1.0000 0.8824 + 242 1.0000 1.0000 0.8902 + 243 1.0000 1.0000 0.8980 + 244 1.0000 1.0000 0.9059 + 245 1.0000 1.0000 0.9137 + 246 1.0000 1.0000 0.9216 + 247 1.0000 1.0000 0.9294 + 248 1.0000 1.0000 0.9373 + 249 1.0000 1.0000 0.9451 + 250 1.0000 1.0000 0.9529 + 251 1.0000 1.0000 0.9608 + 252 1.0000 1.0000 0.9686 + 253 1.0000 1.0000 0.9765 + 254 1.0 0.0 0.0 + 255 1.0 1.0 0.0 + 256 0.0 1.000 0.0 diff --git a/astro.cpp b/map65/astro.cpp similarity index 100% rename from astro.cpp rename to map65/astro.cpp diff --git a/astro.h b/map65/astro.h similarity index 100% rename from astro.h rename to map65/astro.h diff --git a/astro.ui b/map65/astro.ui similarity index 95% rename from astro.ui rename to map65/astro.ui index df1ce80c7..30cce70bb 100644 --- a/astro.ui +++ b/map65/astro.ui @@ -1,37 +1,37 @@ - - - Astro - - - - 0 - 0 - 262 - 483 - - - - Form - - - - - 0 - 10 - 256 - 451 - - - - - Courier New - 20 - 75 - true - - - - - - - + + + Astro + + + + 0 + 0 + 262 + 483 + + + + Form + + + + + 0 + 10 + 256 + 451 + + + + + Courier New + 20 + 75 + true + + + + + + + diff --git a/bandmap.cpp b/map65/bandmap.cpp similarity index 100% rename from bandmap.cpp rename to map65/bandmap.cpp diff --git a/bandmap.h b/map65/bandmap.h similarity index 100% rename from bandmap.h rename to map65/bandmap.h diff --git a/bandmap.ui b/map65/bandmap.ui similarity index 95% rename from bandmap.ui rename to map65/bandmap.ui index 4eca022b7..cd87a41dd 100644 --- a/bandmap.ui +++ b/map65/bandmap.ui @@ -1,43 +1,43 @@ - - - BandMap - - - - 0 - 0 - 329 - 379 - - - - - 0 - 0 - - - - Form - - - - - - - 107 - 0 - - - - - Courier New - 9 - - - - - - - - - + + + BandMap + + + + 0 + 0 + 329 + 379 + + + + + 0 + 0 + + + + Form + + + + + + + 107 + 0 + + + + + Courier New + 9 + + + + + + + + + diff --git a/blue.dat b/map65/blue.dat similarity index 97% rename from blue.dat rename to map65/blue.dat index d9fc8863d..852295114 100644 --- a/blue.dat +++ b/map65/blue.dat @@ -1,256 +1,256 @@ - 0 0.0000 0.0000 0.0000 - 1 0.0902 0.0902 0.2558 - 2 0.1176 0.1176 0.2694 - 3 0.1412 0.1412 0.2820 - 4 0.1569 0.1569 0.2938 - 5 0.1725 0.1725 0.3049 - 6 0.1843 0.1843 0.3154 - 7 0.1961 0.1961 0.3254 - 8 0.2039 0.2039 0.3349 - 9 0.2157 0.2157 0.3440 - 10 0.2235 0.2235 0.3528 - 11 0.2314 0.2314 0.3612 - 12 0.2392 0.2392 0.3693 - 13 0.2471 0.2471 0.3772 - 14 0.2549 0.2549 0.3848 - 15 0.2588 0.2588 0.3921 - 16 0.2667 0.2667 0.3992 - 17 0.2706 0.2706 0.4061 - 18 0.2784 0.2784 0.4129 - 19 0.2824 0.2824 0.4194 - 20 0.2902 0.2902 0.4258 - 21 0.2941 0.2941 0.4319 - 22 0.2980 0.2980 0.4380 - 23 0.3059 0.3059 0.4439 - 24 0.3098 0.3098 0.4496 - 25 0.3137 0.3137 0.4553 - 26 0.3176 0.3176 0.4608 - 27 0.3216 0.3216 0.4661 - 28 0.3294 0.3294 0.4714 - 29 0.3333 0.3333 0.4765 - 30 0.3373 0.3373 0.4815 - 31 0.3412 0.3412 0.4865 - 32 0.3451 0.3451 0.4913 - 33 0.3490 0.3490 0.4960 - 34 0.3529 0.3529 0.5006 - 35 0.3569 0.3569 0.5052 - 36 0.3608 0.3608 0.5096 - 37 0.3647 0.3647 0.5140 - 38 0.3686 0.3686 0.5183 - 39 0.3725 0.3725 0.5225 - 40 0.3765 0.3765 0.5266 - 41 0.3804 0.3804 0.5306 - 42 0.3843 0.3843 0.5346 - 43 0.3843 0.3843 0.5385 - 44 0.3882 0.3882 0.5423 - 45 0.3922 0.3922 0.5460 - 46 0.3961 0.3961 0.5497 - 47 0.4000 0.4000 0.5533 - 48 0.4039 0.4039 0.5569 - 49 0.4078 0.4078 0.5603 - 50 0.4118 0.4118 0.5638 - 51 0.4118 0.4118 0.5671 - 52 0.4157 0.4157 0.5704 - 53 0.4196 0.4196 0.5736 - 54 0.4235 0.4235 0.5768 - 55 0.4275 0.4275 0.5799 - 56 0.4314 0.4314 0.5829 - 57 0.4314 0.4314 0.5859 - 58 0.4353 0.4353 0.5889 - 59 0.4392 0.4392 0.5917 - 60 0.4431 0.4431 0.5946 - 61 0.4471 0.4471 0.5973 - 62 0.4471 0.4471 0.6001 - 63 0.4510 0.4510 0.6027 - 64 0.4549 0.4549 0.6053 - 65 0.4588 0.4588 0.6079 - 66 0.4627 0.4627 0.6104 - 67 0.4627 0.4627 0.6129 - 68 0.4667 0.4667 0.6153 - 69 0.4706 0.4706 0.6176 - 70 0.4745 0.4745 0.6199 - 71 0.4745 0.4745 0.6222 - 72 0.4784 0.4784 0.6244 - 73 0.4824 0.4824 0.6266 - 74 0.4863 0.4863 0.6287 - 75 0.4863 0.4863 0.6308 - 76 0.4902 0.4902 0.6328 - 77 0.4941 0.4941 0.6348 - 78 0.4980 0.4980 0.6367 - 79 0.5020 0.5020 0.6386 - 80 0.5020 0.5020 0.6404 - 81 0.5059 0.5059 0.6422 - 82 0.5098 0.5098 0.6440 - 83 0.5098 0.5098 0.6457 - 84 0.5137 0.5137 0.6474 - 85 0.5176 0.5176 0.6490 - 86 0.5216 0.5216 0.6506 - 87 0.5216 0.5216 0.6521 - 88 0.5255 0.5255 0.6536 - 89 0.5294 0.5294 0.6551 - 90 0.5333 0.5333 0.6565 - 91 0.5333 0.5333 0.6578 - 92 0.5373 0.5373 0.6591 - 93 0.5412 0.5412 0.6604 - 94 0.5451 0.5451 0.6617 - 95 0.5451 0.5451 0.6629 - 96 0.5490 0.5490 0.6640 - 97 0.5529 0.5529 0.6651 - 98 0.5569 0.5569 0.6662 - 99 0.5569 0.5569 0.6672 - 100 0.5608 0.5608 0.6682 - 101 0.5647 0.5647 0.6692 - 102 0.5647 0.5647 0.6701 - 103 0.5686 0.5686 0.6710 - 104 0.5725 0.5725 0.6718 - 105 0.5765 0.5765 0.6726 - 106 0.5765 0.5765 0.6733 - 107 0.5804 0.5804 0.6740 - 108 0.5843 0.5843 0.6747 - 109 0.5843 0.5843 0.6753 - 110 0.5882 0.5882 0.6759 - 111 0.5922 0.5922 0.6765 - 112 0.5961 0.5961 0.6770 - 113 0.5961 0.5961 0.6774 - 114 0.6000 0.6000 0.6779 - 115 0.6039 0.6039 0.6783 - 116 0.6039 0.6039 0.6786 - 117 0.6078 0.6078 0.6789 - 118 0.6118 0.6118 0.6792 - 119 0.6157 0.6157 0.6794 - 120 0.6157 0.6157 0.6796 - 121 0.6196 0.6196 0.6798 - 122 0.6235 0.6235 0.6799 - 123 0.6235 0.6235 0.6800 - 124 0.6275 0.6275 0.6800 - 125 0.6314 0.6314 0.6800 - 126 0.6353 0.6353 0.6799 - 127 0.6353 0.6353 0.6799 - 128 0.6392 0.6392 0.6797 - 129 0.6431 0.6431 0.6796 - 130 0.6431 0.6431 0.6794 - 131 0.6471 0.6471 0.6791 - 132 0.6510 0.6510 0.6789 - 133 0.6549 0.6549 0.6785 - 134 0.6549 0.6549 0.6782 - 135 0.6588 0.6588 0.6778 - 136 0.6627 0.6627 0.6773 - 137 0.6627 0.6627 0.6769 - 138 0.6667 0.6667 0.6763 - 139 0.6706 0.6706 0.6758 - 140 0.6745 0.6745 0.6752 - 141 0.6745 0.6745 0.6746 - 142 0.6784 0.6784 0.6739 - 143 0.6824 0.6824 0.6732 - 144 0.6824 0.6824 0.6724 - 145 0.6863 0.6863 0.6716 - 146 0.6902 0.6902 0.6708 - 147 0.6941 0.6941 0.6699 - 148 0.6941 0.6941 0.6690 - 149 0.6980 0.6980 0.6680 - 150 0.7020 0.7020 0.6670 - 151 0.7020 0.7020 0.6660 - 152 0.7059 0.7059 0.6649 - 153 0.7098 0.7098 0.6638 - 154 0.7098 0.7098 0.6626 - 155 0.7137 0.7137 0.6614 - 156 0.7176 0.7176 0.6601 - 157 0.7216 0.7216 0.6589 - 158 0.7216 0.7216 0.6575 - 159 0.7255 0.7255 0.6561 - 160 0.7294 0.7294 0.6547 - 161 0.7294 0.7294 0.6533 - 162 0.7333 0.7333 0.6518 - 163 0.7373 0.7373 0.6502 - 164 0.7412 0.7412 0.6486 - 165 0.7412 0.7412 0.6470 - 166 0.7451 0.7451 0.6453 - 167 0.7490 0.7490 0.6436 - 168 0.7490 0.7490 0.6418 - 169 0.7529 0.7529 0.6400 - 170 0.7569 0.7569 0.6382 - 171 0.7608 0.7608 0.6363 - 172 0.7608 0.7608 0.6343 - 173 0.7647 0.7647 0.6324 - 174 0.7686 0.7686 0.6303 - 175 0.7686 0.7686 0.6282 - 176 0.7725 0.7725 0.6261 - 177 0.7765 0.7765 0.6239 - 178 0.7804 0.7804 0.6217 - 179 0.7804 0.7804 0.6194 - 180 0.7843 0.7843 0.6171 - 181 0.7882 0.7882 0.6147 - 182 0.7882 0.7882 0.6123 - 183 0.7922 0.7922 0.6098 - 184 0.7961 0.7961 0.6073 - 185 0.8000 0.8000 0.6047 - 186 0.8000 0.8000 0.6021 - 187 0.8039 0.8039 0.5994 - 188 0.8078 0.8078 0.5967 - 189 0.8078 0.8078 0.5939 - 190 0.8118 0.8118 0.5911 - 191 0.8157 0.8157 0.5882 - 192 0.8196 0.8196 0.5853 - 193 0.8196 0.8196 0.5823 - 194 0.8235 0.8235 0.5792 - 195 0.8275 0.8275 0.5761 - 196 0.8275 0.8275 0.5729 - 197 0.8314 0.8314 0.5697 - 198 0.8353 0.8353 0.5664 - 199 0.8392 0.8392 0.5630 - 200 0.8392 0.8392 0.5596 - 201 0.8431 0.8431 0.5561 - 202 0.8471 0.8471 0.5525 - 203 0.8471 0.8471 0.5489 - 204 0.8510 0.8510 0.5452 - 205 0.8549 0.8549 0.5414 - 206 0.8588 0.8588 0.5376 - 207 0.8588 0.8588 0.5337 - 208 0.8627 0.8627 0.5297 - 209 0.8667 0.8667 0.5257 - 210 0.8667 0.8667 0.5215 - 211 0.8706 0.8706 0.5173 - 212 0.8745 0.8745 0.5130 - 213 0.8784 0.8784 0.5086 - 214 0.8784 0.8784 0.5042 - 215 0.8824 0.8824 0.4996 - 216 0.8863 0.8863 0.4950 - 217 0.8863 0.8863 0.4902 - 218 0.8902 0.8902 0.4854 - 219 0.8941 0.8941 0.4804 - 220 0.8980 0.8980 0.4754 - 221 0.8980 0.8980 0.4702 - 222 0.9020 0.9020 0.4649 - 223 0.9059 0.9059 0.4595 - 224 0.9098 0.9098 0.4540 - 225 0.9098 0.9098 0.4484 - 226 0.9137 0.9137 0.4426 - 227 0.9176 0.9176 0.4366 - 228 0.9176 0.9176 0.4306 - 229 0.9216 0.9216 0.4243 - 230 0.9255 0.9255 0.4179 - 231 0.9294 0.9294 0.4114 - 232 0.9294 0.9294 0.4046 - 233 0.9333 0.9333 0.3977 - 234 0.9373 0.9373 0.3905 - 235 0.9373 0.9373 0.3831 - 236 0.9412 0.9412 0.3754 - 237 0.9451 0.9451 0.3675 - 238 0.9490 0.9490 0.3594 - 239 0.9490 0.9490 0.3509 - 240 0.9529 0.9529 0.3420 - 241 0.9569 0.9569 0.3328 - 242 0.9608 0.9608 0.3232 - 243 0.9608 0.9608 0.3131 - 244 0.9647 0.9647 0.3024 - 245 0.9686 0.9686 0.2912 - 246 0.9686 0.9686 0.2792 - 247 0.9725 0.9725 0.2664 - 248 0.9765 0.9765 0.2526 - 249 0.9804 0.9804 0.2375 - 250 0.9804 0.9804 0.2208 - 251 0.9843 0.9843 0.2020 - 252 0.9882 0.9882 0.1800 - 253 1.0 0.0 0.0 - 254 1.0 1.0 0.0 - 255 0.0 1.000 0.0 + 0 0.0000 0.0000 0.0000 + 1 0.0902 0.0902 0.2558 + 2 0.1176 0.1176 0.2694 + 3 0.1412 0.1412 0.2820 + 4 0.1569 0.1569 0.2938 + 5 0.1725 0.1725 0.3049 + 6 0.1843 0.1843 0.3154 + 7 0.1961 0.1961 0.3254 + 8 0.2039 0.2039 0.3349 + 9 0.2157 0.2157 0.3440 + 10 0.2235 0.2235 0.3528 + 11 0.2314 0.2314 0.3612 + 12 0.2392 0.2392 0.3693 + 13 0.2471 0.2471 0.3772 + 14 0.2549 0.2549 0.3848 + 15 0.2588 0.2588 0.3921 + 16 0.2667 0.2667 0.3992 + 17 0.2706 0.2706 0.4061 + 18 0.2784 0.2784 0.4129 + 19 0.2824 0.2824 0.4194 + 20 0.2902 0.2902 0.4258 + 21 0.2941 0.2941 0.4319 + 22 0.2980 0.2980 0.4380 + 23 0.3059 0.3059 0.4439 + 24 0.3098 0.3098 0.4496 + 25 0.3137 0.3137 0.4553 + 26 0.3176 0.3176 0.4608 + 27 0.3216 0.3216 0.4661 + 28 0.3294 0.3294 0.4714 + 29 0.3333 0.3333 0.4765 + 30 0.3373 0.3373 0.4815 + 31 0.3412 0.3412 0.4865 + 32 0.3451 0.3451 0.4913 + 33 0.3490 0.3490 0.4960 + 34 0.3529 0.3529 0.5006 + 35 0.3569 0.3569 0.5052 + 36 0.3608 0.3608 0.5096 + 37 0.3647 0.3647 0.5140 + 38 0.3686 0.3686 0.5183 + 39 0.3725 0.3725 0.5225 + 40 0.3765 0.3765 0.5266 + 41 0.3804 0.3804 0.5306 + 42 0.3843 0.3843 0.5346 + 43 0.3843 0.3843 0.5385 + 44 0.3882 0.3882 0.5423 + 45 0.3922 0.3922 0.5460 + 46 0.3961 0.3961 0.5497 + 47 0.4000 0.4000 0.5533 + 48 0.4039 0.4039 0.5569 + 49 0.4078 0.4078 0.5603 + 50 0.4118 0.4118 0.5638 + 51 0.4118 0.4118 0.5671 + 52 0.4157 0.4157 0.5704 + 53 0.4196 0.4196 0.5736 + 54 0.4235 0.4235 0.5768 + 55 0.4275 0.4275 0.5799 + 56 0.4314 0.4314 0.5829 + 57 0.4314 0.4314 0.5859 + 58 0.4353 0.4353 0.5889 + 59 0.4392 0.4392 0.5917 + 60 0.4431 0.4431 0.5946 + 61 0.4471 0.4471 0.5973 + 62 0.4471 0.4471 0.6001 + 63 0.4510 0.4510 0.6027 + 64 0.4549 0.4549 0.6053 + 65 0.4588 0.4588 0.6079 + 66 0.4627 0.4627 0.6104 + 67 0.4627 0.4627 0.6129 + 68 0.4667 0.4667 0.6153 + 69 0.4706 0.4706 0.6176 + 70 0.4745 0.4745 0.6199 + 71 0.4745 0.4745 0.6222 + 72 0.4784 0.4784 0.6244 + 73 0.4824 0.4824 0.6266 + 74 0.4863 0.4863 0.6287 + 75 0.4863 0.4863 0.6308 + 76 0.4902 0.4902 0.6328 + 77 0.4941 0.4941 0.6348 + 78 0.4980 0.4980 0.6367 + 79 0.5020 0.5020 0.6386 + 80 0.5020 0.5020 0.6404 + 81 0.5059 0.5059 0.6422 + 82 0.5098 0.5098 0.6440 + 83 0.5098 0.5098 0.6457 + 84 0.5137 0.5137 0.6474 + 85 0.5176 0.5176 0.6490 + 86 0.5216 0.5216 0.6506 + 87 0.5216 0.5216 0.6521 + 88 0.5255 0.5255 0.6536 + 89 0.5294 0.5294 0.6551 + 90 0.5333 0.5333 0.6565 + 91 0.5333 0.5333 0.6578 + 92 0.5373 0.5373 0.6591 + 93 0.5412 0.5412 0.6604 + 94 0.5451 0.5451 0.6617 + 95 0.5451 0.5451 0.6629 + 96 0.5490 0.5490 0.6640 + 97 0.5529 0.5529 0.6651 + 98 0.5569 0.5569 0.6662 + 99 0.5569 0.5569 0.6672 + 100 0.5608 0.5608 0.6682 + 101 0.5647 0.5647 0.6692 + 102 0.5647 0.5647 0.6701 + 103 0.5686 0.5686 0.6710 + 104 0.5725 0.5725 0.6718 + 105 0.5765 0.5765 0.6726 + 106 0.5765 0.5765 0.6733 + 107 0.5804 0.5804 0.6740 + 108 0.5843 0.5843 0.6747 + 109 0.5843 0.5843 0.6753 + 110 0.5882 0.5882 0.6759 + 111 0.5922 0.5922 0.6765 + 112 0.5961 0.5961 0.6770 + 113 0.5961 0.5961 0.6774 + 114 0.6000 0.6000 0.6779 + 115 0.6039 0.6039 0.6783 + 116 0.6039 0.6039 0.6786 + 117 0.6078 0.6078 0.6789 + 118 0.6118 0.6118 0.6792 + 119 0.6157 0.6157 0.6794 + 120 0.6157 0.6157 0.6796 + 121 0.6196 0.6196 0.6798 + 122 0.6235 0.6235 0.6799 + 123 0.6235 0.6235 0.6800 + 124 0.6275 0.6275 0.6800 + 125 0.6314 0.6314 0.6800 + 126 0.6353 0.6353 0.6799 + 127 0.6353 0.6353 0.6799 + 128 0.6392 0.6392 0.6797 + 129 0.6431 0.6431 0.6796 + 130 0.6431 0.6431 0.6794 + 131 0.6471 0.6471 0.6791 + 132 0.6510 0.6510 0.6789 + 133 0.6549 0.6549 0.6785 + 134 0.6549 0.6549 0.6782 + 135 0.6588 0.6588 0.6778 + 136 0.6627 0.6627 0.6773 + 137 0.6627 0.6627 0.6769 + 138 0.6667 0.6667 0.6763 + 139 0.6706 0.6706 0.6758 + 140 0.6745 0.6745 0.6752 + 141 0.6745 0.6745 0.6746 + 142 0.6784 0.6784 0.6739 + 143 0.6824 0.6824 0.6732 + 144 0.6824 0.6824 0.6724 + 145 0.6863 0.6863 0.6716 + 146 0.6902 0.6902 0.6708 + 147 0.6941 0.6941 0.6699 + 148 0.6941 0.6941 0.6690 + 149 0.6980 0.6980 0.6680 + 150 0.7020 0.7020 0.6670 + 151 0.7020 0.7020 0.6660 + 152 0.7059 0.7059 0.6649 + 153 0.7098 0.7098 0.6638 + 154 0.7098 0.7098 0.6626 + 155 0.7137 0.7137 0.6614 + 156 0.7176 0.7176 0.6601 + 157 0.7216 0.7216 0.6589 + 158 0.7216 0.7216 0.6575 + 159 0.7255 0.7255 0.6561 + 160 0.7294 0.7294 0.6547 + 161 0.7294 0.7294 0.6533 + 162 0.7333 0.7333 0.6518 + 163 0.7373 0.7373 0.6502 + 164 0.7412 0.7412 0.6486 + 165 0.7412 0.7412 0.6470 + 166 0.7451 0.7451 0.6453 + 167 0.7490 0.7490 0.6436 + 168 0.7490 0.7490 0.6418 + 169 0.7529 0.7529 0.6400 + 170 0.7569 0.7569 0.6382 + 171 0.7608 0.7608 0.6363 + 172 0.7608 0.7608 0.6343 + 173 0.7647 0.7647 0.6324 + 174 0.7686 0.7686 0.6303 + 175 0.7686 0.7686 0.6282 + 176 0.7725 0.7725 0.6261 + 177 0.7765 0.7765 0.6239 + 178 0.7804 0.7804 0.6217 + 179 0.7804 0.7804 0.6194 + 180 0.7843 0.7843 0.6171 + 181 0.7882 0.7882 0.6147 + 182 0.7882 0.7882 0.6123 + 183 0.7922 0.7922 0.6098 + 184 0.7961 0.7961 0.6073 + 185 0.8000 0.8000 0.6047 + 186 0.8000 0.8000 0.6021 + 187 0.8039 0.8039 0.5994 + 188 0.8078 0.8078 0.5967 + 189 0.8078 0.8078 0.5939 + 190 0.8118 0.8118 0.5911 + 191 0.8157 0.8157 0.5882 + 192 0.8196 0.8196 0.5853 + 193 0.8196 0.8196 0.5823 + 194 0.8235 0.8235 0.5792 + 195 0.8275 0.8275 0.5761 + 196 0.8275 0.8275 0.5729 + 197 0.8314 0.8314 0.5697 + 198 0.8353 0.8353 0.5664 + 199 0.8392 0.8392 0.5630 + 200 0.8392 0.8392 0.5596 + 201 0.8431 0.8431 0.5561 + 202 0.8471 0.8471 0.5525 + 203 0.8471 0.8471 0.5489 + 204 0.8510 0.8510 0.5452 + 205 0.8549 0.8549 0.5414 + 206 0.8588 0.8588 0.5376 + 207 0.8588 0.8588 0.5337 + 208 0.8627 0.8627 0.5297 + 209 0.8667 0.8667 0.5257 + 210 0.8667 0.8667 0.5215 + 211 0.8706 0.8706 0.5173 + 212 0.8745 0.8745 0.5130 + 213 0.8784 0.8784 0.5086 + 214 0.8784 0.8784 0.5042 + 215 0.8824 0.8824 0.4996 + 216 0.8863 0.8863 0.4950 + 217 0.8863 0.8863 0.4902 + 218 0.8902 0.8902 0.4854 + 219 0.8941 0.8941 0.4804 + 220 0.8980 0.8980 0.4754 + 221 0.8980 0.8980 0.4702 + 222 0.9020 0.9020 0.4649 + 223 0.9059 0.9059 0.4595 + 224 0.9098 0.9098 0.4540 + 225 0.9098 0.9098 0.4484 + 226 0.9137 0.9137 0.4426 + 227 0.9176 0.9176 0.4366 + 228 0.9176 0.9176 0.4306 + 229 0.9216 0.9216 0.4243 + 230 0.9255 0.9255 0.4179 + 231 0.9294 0.9294 0.4114 + 232 0.9294 0.9294 0.4046 + 233 0.9333 0.9333 0.3977 + 234 0.9373 0.9373 0.3905 + 235 0.9373 0.9373 0.3831 + 236 0.9412 0.9412 0.3754 + 237 0.9451 0.9451 0.3675 + 238 0.9490 0.9490 0.3594 + 239 0.9490 0.9490 0.3509 + 240 0.9529 0.9529 0.3420 + 241 0.9569 0.9569 0.3328 + 242 0.9608 0.9608 0.3232 + 243 0.9608 0.9608 0.3131 + 244 0.9647 0.9647 0.3024 + 245 0.9686 0.9686 0.2912 + 246 0.9686 0.9686 0.2792 + 247 0.9725 0.9725 0.2664 + 248 0.9765 0.9765 0.2526 + 249 0.9804 0.9804 0.2375 + 250 0.9804 0.9804 0.2208 + 251 0.9843 0.9843 0.2020 + 252 0.9882 0.9882 0.1800 + 253 1.0 0.0 0.0 + 254 1.0 1.0 0.0 + 255 0.0 1.000 0.0 diff --git a/commons.h b/map65/commons.h similarity index 100% rename from commons.h rename to map65/commons.h diff --git a/devsetup.cpp b/map65/devsetup.cpp similarity index 100% rename from devsetup.cpp rename to map65/devsetup.cpp diff --git a/devsetup.h b/map65/devsetup.h similarity index 100% rename from devsetup.h rename to map65/devsetup.h diff --git a/devsetup.ui b/map65/devsetup.ui similarity index 96% rename from devsetup.ui rename to map65/devsetup.ui index d27769654..81ae68e6a 100644 --- a/devsetup.ui +++ b/map65/devsetup.ui @@ -1,1801 +1,1801 @@ - - - DialogSndCard - - - - 0 - 0 - 463 - 390 - - - - Setup / Options - - - - - - 0 - - - - Station - - - - - 10 - 34 - 421 - 275 - - - - - - - - - - - - 0 - 20 - - - - My Call: - - - - - - - - 0 - 20 - - - - My Grid: - - - - - - - - 0 - 20 - - - - ID Interval (min): - - - - - - - - 0 - 20 - - - - PTT Port: - - - - - - - Astro Font Size: - - - - - - - - - - - - 60 - 16777215 - - - - K1JT - - - - - - - - 60 - 16777215 - - - - FN20qi - - - - - - - -20 - - - 10 - - - - - - - - 60 - 16777215 - - - - false - - - - None - - - - - COM1 - - - - - COM2 - - - - - COM3 - - - - - COM4 - - - - - COM5 - - - - - COM6 - - - - - COM7 - - - - - COM8 - - - - - COM9 - - - - - COM10 - - - - - COM11 - - - - - COM12 - - - - - COM13 - - - - - - - - 12 - - - 32 - - - 20 - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - - - - 0 - 20 - - - - DXCC: - - - - - - - - 0 - 20 - - - - Timeout (min): - - - - - - - - 0 - 20 - - - - Fcal (Hz): - - - - - - - - 0 - 20 - - - - Fadd (MHz) - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - - - 16777215 - 16777215 - - - - PJ9 - - - - - - - 40 - - - - - - - -20000 - - - 20000 - - - - - - - 0.0 - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - Antennas: - - - - - 10 - 23 - 321 - 22 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Xpol - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - + - - - true - - - - - - - x - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - - 0 - 20 - - - - Dphi: - - - - - - - - 0 - 20 - - - - -180 - - - 180 - - - 10 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - 80 - 20 - - - - Save Directory: - - - - - - - C:\Users\joe\wsjt\map65\save - - - - - - - - - - - - 80 - 20 - - - - AzEl Directory: - - - - - - - C:\Users\joe\wsjt\map65 - - - - - - - - - - - - 80 - 20 - - - - Editor command: - - - - - - - - 328 - 16777215 - - - - notepad - - - - - - - - - - - I/O Devices - - - - - 0 - 10 - 361 - 291 - - - - - - - Input Source (Rx, Baseband) - - - - - 13 - 14 - 341 - 211 - - - - - - - - - true - - - SoundCard - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Network - - - true - - - - - - - - - - - false - - - - 0 - 20 - - - - Swap I/Q - - - - - - - false - - - +10 dB - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 57 - 0 - - - - 20000 - - - 51000 - - - 50004 - - - - - - - - 0 - 0 - - - - - 26 - 0 - - - - - 16777215 - 20 - - - - Port - - - - - - - - - false - - - - 0 - 0 - - - - Dev Ch API Name - - - - - - - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 50 - 13 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - - - - 0 - 0 - - - - - 16777215 - 60 - - - - Sample Rate - - - - - 30 - 20 - 282 - 22 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 96000 Hz - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 95238 Hz - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 55 - - - - Output Device (Tx Audio) - - - - - 10 - 20 - 291 - 22 - - - - - - - - - - - Colors - - - - - 12 - 21 - 351 - 281 - - - - - - - - 10 - - - - Choose colors for Band Map and Messages Windows - - - Qt::AlignCenter - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - Red - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 31 - 20 - - - - - - - - Green - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 34 - 20 - - - - - - - - Blue - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - - - - - 60 - 16777215 - - - - Background - - - Qt::AlignCenter - - - - - - - 255 - - - - - - - 255 - - - - - - - 255 - - - 102 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 55 - 20 - - - - - - - - - - - - - 60 - 16777215 - - - - Newest - - - Qt::AlignCenter - - - - - - - 255 - - - 255 - - - - - - - 255 - - - - - - - 255 - - - - - - - - 0 - 0 - - - - - 50 - 16777215 - - - - - Courier New - 9 - - - - K1ABC - - - - - - - - - - - - 60 - 16777215 - - - - 2nd - - - Qt::AlignCenter - - - - - - - 255 - - - 255 - - - - - - - 255 - - - 255 - - - - - - - 255 - - - - - - - - 0 - 0 - - - - - 50 - 16777215 - - - - - Courier New - 9 - - - - K1ABC - - - - - - - - - - - - 60 - 16777215 - - - - 3rd - - - Qt::AlignCenter - - - - - - - 255 - - - 150 - - - - - - - 255 - - - 150 - - - - - - - 255 - - - 150 - - - - - - - - 0 - 0 - - - - - 50 - 16777215 - - - - - Courier New - 9 - - - - K1ABC - - - - - - - - - - - - 60 - 16777215 - - - - Oldest - - - Qt::AlignCenter - - - - - - - 255 - - - 100 - - - - - - - 255 - - - 100 - - - - - - - 255 - - - 100 - - - - - - - - 0 - 0 - - - - - 50 - 16777215 - - - - - Courier New - 9 - - - - K1ABC - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Color Selector - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Si570 Control - - - - - 41 - 41 - 272 - 248 - - - - - - - - - LO Selection: - - - - - - - IQ+, Generic Si570 - - - true - - - - - - - IQ+ Rx/XT - - - false - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 40 - - - - - - - - - - Rx frequency multiplier: - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 47 - 20 - - - - - - - - - 0 - 0 - - - - - 80 - 0 - - - - 1 - - - 8 - - - 2 - - - - - - - - - - - Tx Offset (MHz): - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 80 - 0 - - - - 3 - - - 150.000000000000000 - - - 130.900000000000006 - - - - - - - - - - - false - - - Tx frequency multiplier: - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 47 - 20 - - - - - - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - 1 - - - - - - - - - - - Frequency correction (ppm): - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 10 - 20 - - - - - - - - - 0 - 0 - - - - - 80 - 0 - - - - 3 - - - -200.000000000000000 - - - 200.000000000000000 - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 40 - - - - - - - - Initialize IQ+ on startup - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - DialogSndCard - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - DialogSndCard - reject() - - - 316 - 260 - - - 286 - 274 - - - - - + + + DialogSndCard + + + + 0 + 0 + 463 + 390 + + + + Setup / Options + + + + + + 0 + + + + Station + + + + + 10 + 34 + 421 + 275 + + + + + + + + + + + + 0 + 20 + + + + My Call: + + + + + + + + 0 + 20 + + + + My Grid: + + + + + + + + 0 + 20 + + + + ID Interval (min): + + + + + + + + 0 + 20 + + + + PTT Port: + + + + + + + Astro Font Size: + + + + + + + + + + + + 60 + 16777215 + + + + K1JT + + + + + + + + 60 + 16777215 + + + + FN20qi + + + + + + + -20 + + + 10 + + + + + + + + 60 + 16777215 + + + + false + + + + None + + + + + COM1 + + + + + COM2 + + + + + COM3 + + + + + COM4 + + + + + COM5 + + + + + COM6 + + + + + COM7 + + + + + COM8 + + + + + COM9 + + + + + COM10 + + + + + COM11 + + + + + COM12 + + + + + COM13 + + + + + + + + 12 + + + 32 + + + 20 + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + + + 0 + 20 + + + + DXCC: + + + + + + + + 0 + 20 + + + + Timeout (min): + + + + + + + + 0 + 20 + + + + Fcal (Hz): + + + + + + + + 0 + 20 + + + + Fadd (MHz) + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + + + 16777215 + 16777215 + + + + PJ9 + + + + + + + 40 + + + + + + + -20000 + + + 20000 + + + + + + + 0.0 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + Antennas: + + + + + 10 + 23 + 321 + 22 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Xpol + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + + + + true + + + + + + + x + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + 0 + 20 + + + + Dphi: + + + + + + + + 0 + 20 + + + + -180 + + + 180 + + + 10 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + 80 + 20 + + + + Save Directory: + + + + + + + C:\Users\joe\wsjt\map65\save + + + + + + + + + + + + 80 + 20 + + + + AzEl Directory: + + + + + + + C:\Users\joe\wsjt\map65 + + + + + + + + + + + + 80 + 20 + + + + Editor command: + + + + + + + + 328 + 16777215 + + + + notepad + + + + + + + + + + + I/O Devices + + + + + 0 + 10 + 361 + 291 + + + + + + + Input Source (Rx, Baseband) + + + + + 13 + 14 + 341 + 211 + + + + + + + + + true + + + SoundCard + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Network + + + true + + + + + + + + + + + false + + + + 0 + 20 + + + + Swap I/Q + + + + + + + false + + + +10 dB + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 57 + 0 + + + + 20000 + + + 51000 + + + 50004 + + + + + + + + 0 + 0 + + + + + 26 + 0 + + + + + 16777215 + 20 + + + + Port + + + + + + + + + false + + + + 0 + 0 + + + + Dev Ch API Name + + + + + + + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 50 + 13 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 13 + + + + + + + + + 0 + 0 + + + + + 16777215 + 60 + + + + Sample Rate + + + + + 30 + 20 + 282 + 22 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 96000 Hz + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 95238 Hz + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 55 + + + + Output Device (Tx Audio) + + + + + 10 + 20 + 291 + 22 + + + + + + + + + + + Colors + + + + + 12 + 21 + 351 + 281 + + + + + + + + 10 + + + + Choose colors for Band Map and Messages Windows + + + Qt::AlignCenter + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 80 + 20 + + + + + + + + Red + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 31 + 20 + + + + + + + + Green + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 34 + 20 + + + + + + + + Blue + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 80 + 20 + + + + + + + + + + + + + 60 + 16777215 + + + + Background + + + Qt::AlignCenter + + + + + + + 255 + + + + + + + 255 + + + + + + + 255 + + + 102 + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 55 + 20 + + + + + + + + + + + + + 60 + 16777215 + + + + Newest + + + Qt::AlignCenter + + + + + + + 255 + + + 255 + + + + + + + 255 + + + + + + + 255 + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + + Courier New + 9 + + + + K1ABC + + + + + + + + + + + + 60 + 16777215 + + + + 2nd + + + Qt::AlignCenter + + + + + + + 255 + + + 255 + + + + + + + 255 + + + 255 + + + + + + + 255 + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + + Courier New + 9 + + + + K1ABC + + + + + + + + + + + + 60 + 16777215 + + + + 3rd + + + Qt::AlignCenter + + + + + + + 255 + + + 150 + + + + + + + 255 + + + 150 + + + + + + + 255 + + + 150 + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + + Courier New + 9 + + + + K1ABC + + + + + + + + + + + + 60 + 16777215 + + + + Oldest + + + Qt::AlignCenter + + + + + + + 255 + + + 100 + + + + + + + 255 + + + 100 + + + + + + + 255 + + + 100 + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + + Courier New + 9 + + + + K1ABC + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Color Selector + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Si570 Control + + + + + 41 + 41 + 272 + 248 + + + + + + + + + LO Selection: + + + + + + + IQ+, Generic Si570 + + + true + + + + + + + IQ+ Rx/XT + + + false + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + + + Rx frequency multiplier: + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 47 + 20 + + + + + + + + + 0 + 0 + + + + + 80 + 0 + + + + 1 + + + 8 + + + 2 + + + + + + + + + + + Tx Offset (MHz): + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 80 + 0 + + + + 3 + + + 150.000000000000000 + + + 130.900000000000006 + + + + + + + + + + + false + + + Tx frequency multiplier: + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 47 + 20 + + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + 1 + + + + + + + + + + + Frequency correction (ppm): + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + + 80 + 0 + + + + 3 + + + -200.000000000000000 + + + 200.000000000000000 + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + Initialize IQ+ on startup + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + DialogSndCard + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogSndCard + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/displaytext.cpp b/map65/displaytext.cpp similarity index 100% rename from displaytext.cpp rename to map65/displaytext.cpp diff --git a/displaytext.h b/map65/displaytext.h similarity index 100% rename from displaytext.h rename to map65/displaytext.h diff --git a/ffft.f b/map65/ffft.f similarity index 100% rename from ffft.f rename to map65/ffft.f diff --git a/fftw3.f b/map65/fftw3.f similarity index 100% rename from fftw3.f rename to map65/fftw3.f diff --git a/ft2000_freq.sh b/map65/ft2000_freq.sh similarity index 98% rename from ft2000_freq.sh rename to map65/ft2000_freq.sh index bd1485ff5..8bf9d07e9 100644 --- a/ft2000_freq.sh +++ b/map65/ft2000_freq.sh @@ -1 +1 @@ -rigctl-wsjtx -m 129 -r COM1 -s 38400 -C data_bits=8 -C stop_bits=2 -C serial_handshake=Hardware f +rigctl-wsjtx -m 129 -r COM1 -s 38400 -C data_bits=8 -C stop_bits=2 -C serial_handshake=Hardware f diff --git a/getdev.cpp b/map65/getdev.cpp similarity index 100% rename from getdev.cpp rename to map65/getdev.cpp diff --git a/getfile.cpp b/map65/getfile.cpp similarity index 100% rename from getfile.cpp rename to map65/getfile.cpp diff --git a/getfile.h b/map65/getfile.h similarity index 100% rename from getfile.h rename to map65/getfile.h diff --git a/getsvn.cmake b/map65/getsvn.cmake similarity index 100% rename from getsvn.cmake rename to map65/getsvn.cmake diff --git a/in.dat b/map65/in.dat similarity index 100% rename from in.dat rename to map65/in.dat diff --git a/killbyname.cpp b/map65/killbyname.cpp similarity index 100% rename from killbyname.cpp rename to map65/killbyname.cpp diff --git a/libfftw3f_win.a b/map65/libfftw3f_win.a similarity index 100% rename from libfftw3f_win.a rename to map65/libfftw3f_win.a diff --git a/libm65/CMakeLists.txt b/map65/libm65/CMakeLists.txt similarity index 100% rename from libm65/CMakeLists.txt rename to map65/libm65/CMakeLists.txt diff --git a/libm65/Makefile b/map65/libm65/Makefile similarity index 100% rename from libm65/Makefile rename to map65/libm65/Makefile diff --git a/libm65/Makefile.0 b/map65/libm65/Makefile.0 similarity index 100% rename from libm65/Makefile.0 rename to map65/libm65/Makefile.0 diff --git a/libm65/Makefile.MinGW b/map65/libm65/Makefile.MinGW similarity index 100% rename from libm65/Makefile.MinGW rename to map65/libm65/Makefile.MinGW diff --git a/libm65/Makefile.jtsdk b/map65/libm65/Makefile.jtsdk similarity index 100% rename from libm65/Makefile.jtsdk rename to map65/libm65/Makefile.jtsdk diff --git a/libm65/Makefile.linux b/map65/libm65/Makefile.linux similarity index 100% rename from libm65/Makefile.linux rename to map65/libm65/Makefile.linux diff --git a/libm65/afc65b.f90 b/map65/libm65/afc65b.f90 similarity index 100% rename from libm65/afc65b.f90 rename to map65/libm65/afc65b.f90 diff --git a/libm65/astro.f90 b/map65/libm65/astro.f90 similarity index 100% rename from libm65/astro.f90 rename to map65/libm65/astro.f90 diff --git a/libm65/astro0.f90 b/map65/libm65/astro0.f90 similarity index 100% rename from libm65/astro0.f90 rename to map65/libm65/astro0.f90 diff --git a/libm65/astrosub.f90 b/map65/libm65/astrosub.f90 similarity index 100% rename from libm65/astrosub.f90 rename to map65/libm65/astrosub.f90 diff --git a/libm65/averms.f90 b/map65/libm65/averms.f90 similarity index 93% rename from libm65/averms.f90 rename to map65/libm65/averms.f90 index d4f41846c..904004c81 100644 --- a/libm65/averms.f90 +++ b/map65/libm65/averms.f90 @@ -1,20 +1,20 @@ -subroutine averms(x,n,nskip,ave,rms) - real x(n) - integer ipk(1) - - ns=0 - s=0. - sq=0. - ipk=maxloc(x) - do i=1,n - if(abs(i-ipk(1)).gt.nskip) then - s=s + x(i) - sq=sq + x(i)**2 - ns=ns+1 - endif - enddo - ave=s/ns - rms=sqrt(sq/ns - ave*ave) - - return -end subroutine averms +subroutine averms(x,n,nskip,ave,rms) + real x(n) + integer ipk(1) + + ns=0 + s=0. + sq=0. + ipk=maxloc(x) + do i=1,n + if(abs(i-ipk(1)).gt.nskip) then + s=s + x(i) + sq=sq + x(i)**2 + ns=ns+1 + endif + enddo + ave=s/ns + rms=sqrt(sq/ns - ave*ave) + + return +end subroutine averms diff --git a/libm65/badmsg.f90 b/map65/libm65/badmsg.f90 similarity index 97% rename from libm65/badmsg.f90 rename to map65/libm65/badmsg.f90 index 1ebc12510..007da8a85 100644 --- a/libm65/badmsg.f90 +++ b/map65/libm65/badmsg.f90 @@ -1,46 +1,46 @@ -subroutine badmsg(irc,dat,nc1,nc2,ng2) - -! Get rid of a few QRA64 false decodes that cannot be correct messages. - - integer dat(12) !Decoded message (as 12 integers) - - ic1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+ & - ishft(dat(4),4) + iand(ishft(dat(5),-2),15) - -! Test for "......" or "CQ 000" - if(ic1.eq.262177560 .or. ic1.eq.262177563) then - irc=-1 - return - endif - - ic2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) + & - ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) + & - iand(ishft(dat(10),-4),3) - - ig=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12) - -! Test for blank, -01 to -30, R-01 to R-30, RO, RRR, 73 - if(ig.ge.32401 .and. ig.le.32464) return - - if(ig.ge.14220 .and. ig.le.14229) return !-41 to -50 - if(ig.ge.14040 .and. ig.le.14049) return !-31 to -40 - - if(ig.ge.13320 .and. ig.le.13329) return !+00 to +09 - if(ig.ge.13140 .and. ig.le.13149) return !+10 to +19 - if(ig.ge.12960 .and. ig.le.12969) return !+20 to +29 - if(ig.ge.12780 .and. ig.le.12789) return !+30 to +39 - if(ig.ge.12600 .and. ig.le.12609) return !+40 to +49 - - if(ig.ge.12420 .and. ig.le.12429) return !R-41 to R-50 - if(ig.ge.12240 .and. ig.le.12249) return !R-31 to R-40 - - if(ig.ge.11520 .and. ig.le.11529) return !R+00 to R+09 - if(ig.ge.11340 .and. ig.le.11349) return !R+10 to R+19 - if(ig.ge.11160 .and. ig.le.11169) return !R+20 to R+29 - if(ig.ge.10980 .and. ig.le.10989) return !R+30 to R+39 - if(ig.ge.10800 .and. ig.le.10809) return !R+40 to R+49 - - if(ic1.eq.nc1 .and. ic2.eq.nc2 .and. ng2.ne.32401 .and. ig.ne.ng2) irc=-1 - - return -end subroutine badmsg +subroutine badmsg(irc,dat,nc1,nc2,ng2) + +! Get rid of a few QRA64 false decodes that cannot be correct messages. + + integer dat(12) !Decoded message (as 12 integers) + + ic1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+ & + ishft(dat(4),4) + iand(ishft(dat(5),-2),15) + +! Test for "......" or "CQ 000" + if(ic1.eq.262177560 .or. ic1.eq.262177563) then + irc=-1 + return + endif + + ic2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) + & + ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) + & + iand(ishft(dat(10),-4),3) + + ig=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12) + +! Test for blank, -01 to -30, R-01 to R-30, RO, RRR, 73 + if(ig.ge.32401 .and. ig.le.32464) return + + if(ig.ge.14220 .and. ig.le.14229) return !-41 to -50 + if(ig.ge.14040 .and. ig.le.14049) return !-31 to -40 + + if(ig.ge.13320 .and. ig.le.13329) return !+00 to +09 + if(ig.ge.13140 .and. ig.le.13149) return !+10 to +19 + if(ig.ge.12960 .and. ig.le.12969) return !+20 to +29 + if(ig.ge.12780 .and. ig.le.12789) return !+30 to +39 + if(ig.ge.12600 .and. ig.le.12609) return !+40 to +49 + + if(ig.ge.12420 .and. ig.le.12429) return !R-41 to R-50 + if(ig.ge.12240 .and. ig.le.12249) return !R-31 to R-40 + + if(ig.ge.11520 .and. ig.le.11529) return !R+00 to R+09 + if(ig.ge.11340 .and. ig.le.11349) return !R+10 to R+19 + if(ig.ge.11160 .and. ig.le.11169) return !R+20 to R+29 + if(ig.ge.10980 .and. ig.le.10989) return !R+30 to R+39 + if(ig.ge.10800 .and. ig.le.10809) return !R+40 to R+49 + + if(ic1.eq.nc1 .and. ic2.eq.nc2 .and. ng2.ne.32401 .and. ig.ne.ng2) irc=-1 + + return +end subroutine badmsg diff --git a/libm65/ccf2.f90 b/map65/libm65/ccf2.f90 similarity index 100% rename from libm65/ccf2.f90 rename to map65/libm65/ccf2.f90 diff --git a/libm65/ccf65.f90 b/map65/libm65/ccf65.f90 similarity index 100% rename from libm65/ccf65.f90 rename to map65/libm65/ccf65.f90 diff --git a/libm65/cgen65.f90 b/map65/libm65/cgen65.f90 similarity index 96% rename from libm65/cgen65.f90 rename to map65/libm65/cgen65.f90 index 2f653ffa9..096e9790d 100644 --- a/libm65/cgen65.f90 +++ b/map65/libm65/cgen65.f90 @@ -1,99 +1,99 @@ -subroutine cgen65(message,mode65,samfac,nsendingsh,msgsent,cwave,nwave) - -! Encodes a JT65 message into a wavefile. -! Executes in 17 ms on opti-745. - - use packjt - - parameter (NMAX=60*96000) !Max length of wave file - character*22 message !Message to be generated - character*22 msgsent !Message as it will be received - character*3 cok !' ' or 'OOO' - real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsymbol - complex cwave(NMAX) !Generated complex wave file - integer dgen(12) - integer sent(63) - logical first - integer nprc(126) - real pr(126) - data nprc/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, & - 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, & - 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, & - 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, & - 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, & - 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, & - 1,1,1,1,1,1/ - data twopi/6.283185307179586476d0/,first/.true./ - save - - if(first) then - do i=1,126 - pr(i)=2*nprc(i)-1 - enddo - first=.false. - endif - - call chkmsg(message,cok,nspecial,flip) !See if it's a shorthand - if(nspecial.eq.0) then - call packmsg(message,dgen,itype) !Pack message into 72 bits - nsendingsh=0 - if(iand(dgen(10),8).ne.0) nsendingsh=-1 !Plain text flag - - call rs_encode(dgen,sent) - call interleave63(sent,1) !Apply interleaving - call graycode(sent,63,1) !Apply Gray code - nsym=126 !Symbols per transmission - tsymbol=4096.d0/11025.d0 !Time per symbol - else - nsendingsh=1 !Flag for shorthand message - nsym=32 - tsymbol=16384.d0/11025.d0 - endif - -! Set up necessary constants - dt=1.d0/(samfac*96000.d0) - f0=118*11025.d0/1024 - dfgen=mode65*11025.d0/4096.d0 - t=0.d0 - phi=0.d0 - k=0 - j0=0 - ndata=nsym*96000.d0*samfac*tsymbol - - do i=1,ndata - t=t+dt - j=int(t/tsymbol) + 1 !Symbol number, 1-126 - if(j.ne.j0) then - f=f0 - if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen - if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then - k=k+1 - f=f0+(sent(k)+2)*dfgen - endif - dphi=twopi*dt*f - j0=j - endif - phi=phi+dphi - if(phi.gt.twopi) phi=phi-twopi - xphi=phi - cwave(i)=cmplx(cos(xphi),-sin(xphi)) - enddo - - cwave(ndata+1:)=0 - nwave=ndata + 48000 - call unpackmsg(dgen,msgsent) - if(flip.lt.0.0) then - do i=22,1,-1 - if(msgsent(i:i).ne.' ') goto 10 - enddo -10 msgsent=msgsent(1:i)//' OOO' - endif - - if(nsendingsh.eq.1) then - if(nspecial.eq.2) msgsent='RO' - if(nspecial.eq.3) msgsent='RRR' - if(nspecial.eq.4) msgsent='73' - endif - - return -end subroutine cgen65 +subroutine cgen65(message,mode65,samfac,nsendingsh,msgsent,cwave,nwave) + +! Encodes a JT65 message into a wavefile. +! Executes in 17 ms on opti-745. + + use packjt + + parameter (NMAX=60*96000) !Max length of wave file + character*22 message !Message to be generated + character*22 msgsent !Message as it will be received + character*3 cok !' ' or 'OOO' + real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsymbol + complex cwave(NMAX) !Generated complex wave file + integer dgen(12) + integer sent(63) + logical first + integer nprc(126) + real pr(126) + data nprc/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, & + 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, & + 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, & + 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, & + 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, & + 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, & + 1,1,1,1,1,1/ + data twopi/6.283185307179586476d0/,first/.true./ + save + + if(first) then + do i=1,126 + pr(i)=2*nprc(i)-1 + enddo + first=.false. + endif + + call chkmsg(message,cok,nspecial,flip) !See if it's a shorthand + if(nspecial.eq.0) then + call packmsg(message,dgen,itype) !Pack message into 72 bits + nsendingsh=0 + if(iand(dgen(10),8).ne.0) nsendingsh=-1 !Plain text flag + + call rs_encode(dgen,sent) + call interleave63(sent,1) !Apply interleaving + call graycode(sent,63,1) !Apply Gray code + nsym=126 !Symbols per transmission + tsymbol=4096.d0/11025.d0 !Time per symbol + else + nsendingsh=1 !Flag for shorthand message + nsym=32 + tsymbol=16384.d0/11025.d0 + endif + +! Set up necessary constants + dt=1.d0/(samfac*96000.d0) + f0=118*11025.d0/1024 + dfgen=mode65*11025.d0/4096.d0 + t=0.d0 + phi=0.d0 + k=0 + j0=0 + ndata=nsym*96000.d0*samfac*tsymbol + + do i=1,ndata + t=t+dt + j=int(t/tsymbol) + 1 !Symbol number, 1-126 + if(j.ne.j0) then + f=f0 + if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen + if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then + k=k+1 + f=f0+(sent(k)+2)*dfgen + endif + dphi=twopi*dt*f + j0=j + endif + phi=phi+dphi + if(phi.gt.twopi) phi=phi-twopi + xphi=phi + cwave(i)=cmplx(cos(xphi),-sin(xphi)) + enddo + + cwave(ndata+1:)=0 + nwave=ndata + 48000 + call unpackmsg(dgen,msgsent) + if(flip.lt.0.0) then + do i=22,1,-1 + if(msgsent(i:i).ne.' ') goto 10 + enddo +10 msgsent=msgsent(1:i)//' OOO' + endif + + if(nsendingsh.eq.1) then + if(nspecial.eq.2) msgsent='RO' + if(nspecial.eq.3) msgsent='RRR' + if(nspecial.eq.4) msgsent='73' + endif + + return +end subroutine cgen65 diff --git a/libm65/chkhist.f90 b/map65/libm65/chkhist.f90 similarity index 100% rename from libm65/chkhist.f90 rename to map65/libm65/chkhist.f90 diff --git a/libm65/chkmsg.f90 b/map65/libm65/chkmsg.f90 similarity index 100% rename from libm65/chkmsg.f90 rename to map65/libm65/chkmsg.f90 diff --git a/libm65/coord.f90 b/map65/libm65/coord.f90 similarity index 100% rename from libm65/coord.f90 rename to map65/libm65/coord.f90 diff --git a/libm65/cutil.c b/map65/libm65/cutil.c similarity index 100% rename from libm65/cutil.c rename to map65/libm65/cutil.c diff --git a/libm65/dcoord.f90 b/map65/libm65/dcoord.f90 similarity index 100% rename from libm65/dcoord.f90 rename to map65/libm65/dcoord.f90 diff --git a/libm65/decode0.f90 b/map65/libm65/decode0.f90 similarity index 100% rename from libm65/decode0.f90 rename to map65/libm65/decode0.f90 diff --git a/libm65/decode1a.f90 b/map65/libm65/decode1a.f90 similarity index 100% rename from libm65/decode1a.f90 rename to map65/libm65/decode1a.f90 diff --git a/libm65/decode65b.f90 b/map65/libm65/decode65b.f90 similarity index 100% rename from libm65/decode65b.f90 rename to map65/libm65/decode65b.f90 diff --git a/libm65/decode_rs.c b/map65/libm65/decode_rs.c similarity index 100% rename from libm65/decode_rs.c rename to map65/libm65/decode_rs.c diff --git a/libm65/deep65.f90 b/map65/libm65/deep65.f90 similarity index 100% rename from libm65/deep65.f90 rename to map65/libm65/deep65.f90 diff --git a/libm65/deg2grid.f90 b/map65/libm65/deg2grid.f90 similarity index 100% rename from libm65/deg2grid.f90 rename to map65/libm65/deg2grid.f90 diff --git a/libm65/demod64a.f90 b/map65/libm65/demod64a.f90 similarity index 100% rename from libm65/demod64a.f90 rename to map65/libm65/demod64a.f90 diff --git a/libm65/display.f90 b/map65/libm65/display.f90 similarity index 100% rename from libm65/display.f90 rename to map65/libm65/display.f90 diff --git a/libm65/dot.f90 b/map65/libm65/dot.f90 similarity index 100% rename from libm65/dot.f90 rename to map65/libm65/dot.f90 diff --git a/libm65/dpol.f90 b/map65/libm65/dpol.f90 similarity index 100% rename from libm65/dpol.f90 rename to map65/libm65/dpol.f90 diff --git a/libm65/encode65.f90 b/map65/libm65/encode65.f90 similarity index 100% rename from libm65/encode65.f90 rename to map65/libm65/encode65.f90 diff --git a/libm65/encode_rs.c b/map65/libm65/encode_rs.c similarity index 100% rename from libm65/encode_rs.c rename to map65/libm65/encode_rs.c diff --git a/libm65/extract.f90 b/map65/libm65/extract.f90 similarity index 100% rename from libm65/extract.f90 rename to map65/libm65/extract.f90 diff --git a/libm65/f77_wisdom.f b/map65/libm65/f77_wisdom.f similarity index 100% rename from libm65/f77_wisdom.f rename to map65/libm65/f77_wisdom.f diff --git a/libm65/fchisq.f90 b/map65/libm65/fchisq.f90 similarity index 100% rename from libm65/fchisq.f90 rename to map65/libm65/fchisq.f90 diff --git a/libm65/fchisq0.f90 b/map65/libm65/fchisq0.f90 similarity index 100% rename from libm65/fchisq0.f90 rename to map65/libm65/fchisq0.f90 diff --git a/libm65/fftw3.f b/map65/libm65/fftw3.f similarity index 100% rename from libm65/fftw3.f rename to map65/libm65/fftw3.f diff --git a/libm65/fftw3.f90 b/map65/libm65/fftw3.f90 similarity index 96% rename from libm65/fftw3.f90 rename to map65/libm65/fftw3.f90 index f1c8775bc..440ccc28c 100644 --- a/libm65/fftw3.f90 +++ b/map65/libm65/fftw3.f90 @@ -1,64 +1,64 @@ - INTEGER FFTW_R2HC - PARAMETER (FFTW_R2HC=0) - INTEGER FFTW_HC2R - PARAMETER (FFTW_HC2R=1) - INTEGER FFTW_DHT - PARAMETER (FFTW_DHT=2) - INTEGER FFTW_REDFT00 - PARAMETER (FFTW_REDFT00=3) - INTEGER FFTW_REDFT01 - PARAMETER (FFTW_REDFT01=4) - INTEGER FFTW_REDFT10 - PARAMETER (FFTW_REDFT10=5) - INTEGER FFTW_REDFT11 - PARAMETER (FFTW_REDFT11=6) - INTEGER FFTW_RODFT00 - PARAMETER (FFTW_RODFT00=7) - INTEGER FFTW_RODFT01 - PARAMETER (FFTW_RODFT01=8) - INTEGER FFTW_RODFT10 - PARAMETER (FFTW_RODFT10=9) - INTEGER FFTW_RODFT11 - PARAMETER (FFTW_RODFT11=10) - INTEGER FFTW_FORWARD - PARAMETER (FFTW_FORWARD=-1) - INTEGER FFTW_BACKWARD - PARAMETER (FFTW_BACKWARD=+1) - INTEGER FFTW_MEASURE - PARAMETER (FFTW_MEASURE=0) - INTEGER FFTW_DESTROY_INPUT - PARAMETER (FFTW_DESTROY_INPUT=1) - INTEGER FFTW_UNALIGNED - PARAMETER (FFTW_UNALIGNED=2) - INTEGER FFTW_CONSERVE_MEMORY - PARAMETER (FFTW_CONSERVE_MEMORY=4) - INTEGER FFTW_EXHAUSTIVE - PARAMETER (FFTW_EXHAUSTIVE=8) - INTEGER FFTW_PRESERVE_INPUT - PARAMETER (FFTW_PRESERVE_INPUT=16) - INTEGER FFTW_PATIENT - PARAMETER (FFTW_PATIENT=32) - INTEGER FFTW_ESTIMATE - PARAMETER (FFTW_ESTIMATE=64) - INTEGER FFTW_ESTIMATE_PATIENT - PARAMETER (FFTW_ESTIMATE_PATIENT=128) - INTEGER FFTW_BELIEVE_PCOST - PARAMETER (FFTW_BELIEVE_PCOST=256) - INTEGER FFTW_DFT_R2HC_ICKY - PARAMETER (FFTW_DFT_R2HC_ICKY=512) - INTEGER FFTW_NONTHREADED_ICKY - PARAMETER (FFTW_NONTHREADED_ICKY=1024) - INTEGER FFTW_NO_BUFFERING - PARAMETER (FFTW_NO_BUFFERING=2048) - INTEGER FFTW_NO_INDIRECT_OP - PARAMETER (FFTW_NO_INDIRECT_OP=4096) - INTEGER FFTW_ALLOW_LARGE_GENERIC - PARAMETER (FFTW_ALLOW_LARGE_GENERIC=8192) - INTEGER FFTW_NO_RANK_SPLITS - PARAMETER (FFTW_NO_RANK_SPLITS=16384) - INTEGER FFTW_NO_VRANK_SPLITS - PARAMETER (FFTW_NO_VRANK_SPLITS=32768) - INTEGER FFTW_NO_VRECURSE - PARAMETER (FFTW_NO_VRECURSE=65536) - INTEGER FFTW_NO_SIMD - PARAMETER (FFTW_NO_SIMD=131072) + INTEGER FFTW_R2HC + PARAMETER (FFTW_R2HC=0) + INTEGER FFTW_HC2R + PARAMETER (FFTW_HC2R=1) + INTEGER FFTW_DHT + PARAMETER (FFTW_DHT=2) + INTEGER FFTW_REDFT00 + PARAMETER (FFTW_REDFT00=3) + INTEGER FFTW_REDFT01 + PARAMETER (FFTW_REDFT01=4) + INTEGER FFTW_REDFT10 + PARAMETER (FFTW_REDFT10=5) + INTEGER FFTW_REDFT11 + PARAMETER (FFTW_REDFT11=6) + INTEGER FFTW_RODFT00 + PARAMETER (FFTW_RODFT00=7) + INTEGER FFTW_RODFT01 + PARAMETER (FFTW_RODFT01=8) + INTEGER FFTW_RODFT10 + PARAMETER (FFTW_RODFT10=9) + INTEGER FFTW_RODFT11 + PARAMETER (FFTW_RODFT11=10) + INTEGER FFTW_FORWARD + PARAMETER (FFTW_FORWARD=-1) + INTEGER FFTW_BACKWARD + PARAMETER (FFTW_BACKWARD=+1) + INTEGER FFTW_MEASURE + PARAMETER (FFTW_MEASURE=0) + INTEGER FFTW_DESTROY_INPUT + PARAMETER (FFTW_DESTROY_INPUT=1) + INTEGER FFTW_UNALIGNED + PARAMETER (FFTW_UNALIGNED=2) + INTEGER FFTW_CONSERVE_MEMORY + PARAMETER (FFTW_CONSERVE_MEMORY=4) + INTEGER FFTW_EXHAUSTIVE + PARAMETER (FFTW_EXHAUSTIVE=8) + INTEGER FFTW_PRESERVE_INPUT + PARAMETER (FFTW_PRESERVE_INPUT=16) + INTEGER FFTW_PATIENT + PARAMETER (FFTW_PATIENT=32) + INTEGER FFTW_ESTIMATE + PARAMETER (FFTW_ESTIMATE=64) + INTEGER FFTW_ESTIMATE_PATIENT + PARAMETER (FFTW_ESTIMATE_PATIENT=128) + INTEGER FFTW_BELIEVE_PCOST + PARAMETER (FFTW_BELIEVE_PCOST=256) + INTEGER FFTW_DFT_R2HC_ICKY + PARAMETER (FFTW_DFT_R2HC_ICKY=512) + INTEGER FFTW_NONTHREADED_ICKY + PARAMETER (FFTW_NONTHREADED_ICKY=1024) + INTEGER FFTW_NO_BUFFERING + PARAMETER (FFTW_NO_BUFFERING=2048) + INTEGER FFTW_NO_INDIRECT_OP + PARAMETER (FFTW_NO_INDIRECT_OP=4096) + INTEGER FFTW_ALLOW_LARGE_GENERIC + PARAMETER (FFTW_ALLOW_LARGE_GENERIC=8192) + INTEGER FFTW_NO_RANK_SPLITS + PARAMETER (FFTW_NO_RANK_SPLITS=16384) + INTEGER FFTW_NO_VRANK_SPLITS + PARAMETER (FFTW_NO_VRANK_SPLITS=32768) + INTEGER FFTW_NO_VRECURSE + PARAMETER (FFTW_NO_VRECURSE=65536) + INTEGER FFTW_NO_SIMD + PARAMETER (FFTW_NO_SIMD=131072) diff --git a/libm65/fil6521.f90 b/map65/libm65/fil6521.f90 similarity index 100% rename from libm65/fil6521.f90 rename to map65/libm65/fil6521.f90 diff --git a/libm65/filbig.f90 b/map65/libm65/filbig.f90 similarity index 100% rename from libm65/filbig.f90 rename to map65/libm65/filbig.f90 diff --git a/libm65/fmtmsg.f90 b/map65/libm65/fmtmsg.f90 similarity index 95% rename from libm65/fmtmsg.f90 rename to map65/libm65/fmtmsg.f90 index 27d97ed67..2ceb81554 100644 --- a/libm65/fmtmsg.f90 +++ b/map65/libm65/fmtmsg.f90 @@ -1,21 +1,21 @@ -subroutine fmtmsg(msg,iz) - - character*22 msg - -! Convert all letters to upper case - iz=22 - do i=1,22 - if(msg(i:i).ge.'a' .and. msg(i:i).le.'z') & - msg(i:i)= char(ichar(msg(i:i))+ichar('A')-ichar('a')) - if(msg(i:i).ne.' ') iz=i - enddo - - do iter=1,5 !Collapse multiple blanks into one - ib2=index(msg(1:iz),' ') - if(ib2.lt.1) go to 100 - msg=msg(1:ib2)//msg(ib2+2:) - iz=iz-1 - enddo - -100 return -end subroutine fmtmsg +subroutine fmtmsg(msg,iz) + + character*22 msg + +! Convert all letters to upper case + iz=22 + do i=1,22 + if(msg(i:i).ge.'a' .and. msg(i:i).le.'z') & + msg(i:i)= char(ichar(msg(i:i))+ichar('A')-ichar('a')) + if(msg(i:i).ne.' ') iz=i + enddo + + do iter=1,5 !Collapse multiple blanks into one + ib2=index(msg(1:iz),' ') + if(ib2.lt.1) go to 100 + msg=msg(1:ib2)//msg(ib2+2:) + iz=iz-1 + enddo + +100 return +end subroutine fmtmsg diff --git a/libm65/four2a.f90 b/map65/libm65/four2a.f90 similarity index 100% rename from libm65/four2a.f90 rename to map65/libm65/four2a.f90 diff --git a/libm65/ftninit.f90 b/map65/libm65/ftninit.f90 similarity index 100% rename from libm65/ftninit.f90 rename to map65/libm65/ftninit.f90 diff --git a/libm65/ftnquit.f90 b/map65/libm65/ftnquit.f90 similarity index 100% rename from libm65/ftnquit.f90 rename to map65/libm65/ftnquit.f90 diff --git a/libm65/ftrsd2.c b/map65/libm65/ftrsd2.c similarity index 100% rename from libm65/ftrsd2.c rename to map65/libm65/ftrsd2.c diff --git a/libm65/gen65.f90 b/map65/libm65/gen65.f90 similarity index 100% rename from libm65/gen65.f90 rename to map65/libm65/gen65.f90 diff --git a/libm65/gen_q65_wave.f90 b/map65/libm65/gen_q65_wave.f90 similarity index 100% rename from libm65/gen_q65_wave.f90 rename to map65/libm65/gen_q65_wave.f90 diff --git a/libm65/genqra64a.f90 b/map65/libm65/genqra64a.f90 similarity index 96% rename from libm65/genqra64a.f90 rename to map65/libm65/genqra64a.f90 index c97605ec5..c32279dfd 100644 --- a/libm65/genqra64a.f90 +++ b/map65/libm65/genqra64a.f90 @@ -1,87 +1,87 @@ -subroutine genqra64a(msg0,ichk,ntxfreq,mode64,itype,msgsent,iwave,nwave) - -! Encodes a QRA64 message to yield itone(1:84) - - use packjt - parameter (NMAX=2*60*11025) - character*22 msg0 - character*22 message !Message to be generated - character*22 msgsent !Message as it will be received - integer itone(84) - character*3 cok !' ' or 'OOO' - real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsym - integer dgen(13) - integer sent(63) - integer*2 iwave(NMAX) - integer icos7(0:6) - data icos7/2,5,6,0,4,1,3/ !Defines a 7x7 Costas array - data twopi/6.283185307179586476d0/ - save - - if(msg0(1:1).eq.'@') then - read(msg0(2:5),*,end=1,err=1) nfreq - go to 2 -1 nfreq=1000 -2 itone(1)=nfreq - write(msgsent,1000) nfreq -1000 format(i5,' Hz') - else - message=msg0 - do i=1,22 - if(ichar(message(i:i)).eq.0) then - message(i:)=' ' - exit - endif - enddo - - do i=1,22 !Strip leading blanks - if(message(1:1).ne.' ') exit - message=message(i+1:) - enddo - - call chkmsg(message,cok,nspecial,flip) - call packmsg(message,dgen,itype) !Pack message into 72 bits - call unpackmsg(dgen,msgsent) !Unpack to get message sent - if(ichk.ne.0) go to 999 !Return if checking only - call qra64_enc(dgen,sent) !Encode using QRA64 - - nsync=10 - itone(1:7)=nsync*icos7 !Insert 7x7 Costas array in 3 places - itone(8:39)=sent(1:32) - itone(40:46)=nsync*icos7 - itone(47:77)=sent(33:63) - itone(78:84)=nsync*icos7 - endif - -! Set up necessary constants - nsym=84 - tsym=6912.d0/12000.d0 - samfac=1.d0 - dt=1.d0/(samfac*11025.d0) - f0=ntxfreq - ndf=2**(mode64-1) - dfgen=ndf*12000.d0/6912.d0 - phi=0.d0 - dphi=twopi*dt*f0 - i=0 - iz=84*6912*11025.d0/12000.d0 - t=0.d0 - j0=0 - do i=1,iz - t=t+dt - j=t/tsym - if(j.ne.j0) then - f=f0 + itone(j)*dfgen - dphi=twopi*dt*f - j0=j - endif - phi=phi+dphi - if(phi.gt.twopi) phi=phi-twopi - xphi=phi - iwave(2*i-1)=32767.0*cos(xphi) - iwave(2*i)=32767.0*sin(xphi) - enddo - nwave=2*iz - -999 return -end subroutine genqra64a +subroutine genqra64a(msg0,ichk,ntxfreq,mode64,itype,msgsent,iwave,nwave) + +! Encodes a QRA64 message to yield itone(1:84) + + use packjt + parameter (NMAX=2*60*11025) + character*22 msg0 + character*22 message !Message to be generated + character*22 msgsent !Message as it will be received + integer itone(84) + character*3 cok !' ' or 'OOO' + real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsym + integer dgen(13) + integer sent(63) + integer*2 iwave(NMAX) + integer icos7(0:6) + data icos7/2,5,6,0,4,1,3/ !Defines a 7x7 Costas array + data twopi/6.283185307179586476d0/ + save + + if(msg0(1:1).eq.'@') then + read(msg0(2:5),*,end=1,err=1) nfreq + go to 2 +1 nfreq=1000 +2 itone(1)=nfreq + write(msgsent,1000) nfreq +1000 format(i5,' Hz') + else + message=msg0 + do i=1,22 + if(ichar(message(i:i)).eq.0) then + message(i:)=' ' + exit + endif + enddo + + do i=1,22 !Strip leading blanks + if(message(1:1).ne.' ') exit + message=message(i+1:) + enddo + + call chkmsg(message,cok,nspecial,flip) + call packmsg(message,dgen,itype) !Pack message into 72 bits + call unpackmsg(dgen,msgsent) !Unpack to get message sent + if(ichk.ne.0) go to 999 !Return if checking only + call qra64_enc(dgen,sent) !Encode using QRA64 + + nsync=10 + itone(1:7)=nsync*icos7 !Insert 7x7 Costas array in 3 places + itone(8:39)=sent(1:32) + itone(40:46)=nsync*icos7 + itone(47:77)=sent(33:63) + itone(78:84)=nsync*icos7 + endif + +! Set up necessary constants + nsym=84 + tsym=6912.d0/12000.d0 + samfac=1.d0 + dt=1.d0/(samfac*11025.d0) + f0=ntxfreq + ndf=2**(mode64-1) + dfgen=ndf*12000.d0/6912.d0 + phi=0.d0 + dphi=twopi*dt*f0 + i=0 + iz=84*6912*11025.d0/12000.d0 + t=0.d0 + j0=0 + do i=1,iz + t=t+dt + j=t/tsym + if(j.ne.j0) then + f=f0 + itone(j)*dfgen + dphi=twopi*dt*f + j0=j + endif + phi=phi+dphi + if(phi.gt.twopi) phi=phi-twopi + xphi=phi + iwave(2*i-1)=32767.0*cos(xphi) + iwave(2*i)=32767.0*sin(xphi) + enddo + nwave=2*iz + +999 return +end subroutine genqra64a diff --git a/libm65/geocentric.f90 b/map65/libm65/geocentric.f90 similarity index 100% rename from libm65/geocentric.f90 rename to map65/libm65/geocentric.f90 diff --git a/libm65/getdphi.f90 b/map65/libm65/getdphi.f90 similarity index 100% rename from libm65/getdphi.f90 rename to map65/libm65/getdphi.f90 diff --git a/libm65/getpfx1.f90 b/map65/libm65/getpfx1.f90 similarity index 100% rename from libm65/getpfx1.f90 rename to map65/libm65/getpfx1.f90 diff --git a/libm65/getpfx2.f90 b/map65/libm65/getpfx2.f90 similarity index 100% rename from libm65/getpfx2.f90 rename to map65/libm65/getpfx2.f90 diff --git a/libm65/gran.c b/map65/libm65/gran.c similarity index 95% rename from libm65/gran.c rename to map65/libm65/gran.c index ceeb6da7d..24b986503 100644 --- a/libm65/gran.c +++ b/map65/libm65/gran.c @@ -1,28 +1,28 @@ -#include -#include - -/* Generate gaussian random float with mean=0 and std_dev=1 */ -float gran_() -{ - float fac,rsq,v1,v2; - static float gset; - static int iset; - - if(iset){ - /* Already got one */ - iset = 0; - return gset; - } - /* Generate two evenly distributed numbers between -1 and +1 - * that are inside the unit circle - */ - do { - v1 = 2.0 * (float)rand() / RAND_MAX - 1; - v2 = 2.0 * (float)rand() / RAND_MAX - 1; - rsq = v1*v1 + v2*v2; - } while(rsq >= 1.0 || rsq == 0.0); - fac = sqrt(-2.0*log(rsq)/rsq); - gset = v1*fac; - iset++; - return v2*fac; -} +#include +#include + +/* Generate gaussian random float with mean=0 and std_dev=1 */ +float gran_() +{ + float fac,rsq,v1,v2; + static float gset; + static int iset; + + if(iset){ + /* Already got one */ + iset = 0; + return gset; + } + /* Generate two evenly distributed numbers between -1 and +1 + * that are inside the unit circle + */ + do { + v1 = 2.0 * (float)rand() / RAND_MAX - 1; + v2 = 2.0 * (float)rand() / RAND_MAX - 1; + rsq = v1*v1 + v2*v2; + } while(rsq >= 1.0 || rsq == 0.0); + fac = sqrt(-2.0*log(rsq)/rsq); + gset = v1*fac; + iset++; + return v2*fac; +} diff --git a/libm65/graycode.f90 b/map65/libm65/graycode.f90 similarity index 100% rename from libm65/graycode.f90 rename to map65/libm65/graycode.f90 diff --git a/libm65/graycode65.f90 b/map65/libm65/graycode65.f90 similarity index 100% rename from libm65/graycode65.f90 rename to map65/libm65/graycode65.f90 diff --git a/libm65/grid2deg.f90 b/map65/libm65/grid2deg.f90 similarity index 100% rename from libm65/grid2deg.f90 rename to map65/libm65/grid2deg.f90 diff --git a/libm65/grid2k.f90 b/map65/libm65/grid2k.f90 similarity index 100% rename from libm65/grid2k.f90 rename to map65/libm65/grid2k.f90 diff --git a/libm65/igray.c b/map65/libm65/igray.c similarity index 100% rename from libm65/igray.c rename to map65/libm65/igray.c diff --git a/libm65/indexx.f90 b/map65/libm65/indexx.f90 similarity index 100% rename from libm65/indexx.f90 rename to map65/libm65/indexx.f90 diff --git a/libm65/init_rs.c b/map65/libm65/init_rs.c similarity index 100% rename from libm65/init_rs.c rename to map65/libm65/init_rs.c diff --git a/libm65/int.h b/map65/libm65/int.h similarity index 100% rename from libm65/int.h rename to map65/libm65/int.h diff --git a/libm65/interleave63.f90 b/map65/libm65/interleave63.f90 similarity index 100% rename from libm65/interleave63.f90 rename to map65/libm65/interleave63.f90 diff --git a/libm65/ipcomm.cpp b/map65/libm65/ipcomm.cpp similarity index 100% rename from libm65/ipcomm.cpp rename to map65/libm65/ipcomm.cpp diff --git a/libm65/iqcal.f90 b/map65/libm65/iqcal.f90 similarity index 100% rename from libm65/iqcal.f90 rename to map65/libm65/iqcal.f90 diff --git a/libm65/iqfix.f90 b/map65/libm65/iqfix.f90 similarity index 100% rename from libm65/iqfix.f90 rename to map65/libm65/iqfix.f90 diff --git a/libm65/jt65code.f90 b/map65/libm65/jt65code.f90 similarity index 100% rename from libm65/jt65code.f90 rename to map65/libm65/jt65code.f90 diff --git a/libm65/k2grid.f90 b/map65/libm65/k2grid.f90 similarity index 100% rename from libm65/k2grid.f90 rename to map65/libm65/k2grid.f90 diff --git a/libm65/lorentzian.f90 b/map65/libm65/lorentzian.f90 similarity index 100% rename from libm65/lorentzian.f90 rename to map65/libm65/lorentzian.f90 diff --git a/libm65/m65.f90 b/map65/libm65/m65.f90 similarity index 100% rename from libm65/m65.f90 rename to map65/libm65/m65.f90 diff --git a/libm65/m65a.F90 b/map65/libm65/m65a.F90 similarity index 100% rename from libm65/m65a.F90 rename to map65/libm65/m65a.F90 diff --git a/libm65/map65a.f90 b/map65/libm65/map65a.f90 similarity index 100% rename from libm65/map65a.f90 rename to map65/libm65/map65a.f90 diff --git a/libm65/mapsim.f90 b/map65/libm65/mapsim.f90 similarity index 97% rename from libm65/mapsim.f90 rename to map65/libm65/mapsim.f90 index 8b791f16f..5142584ab 100644 --- a/libm65/mapsim.f90 +++ b/map65/libm65/mapsim.f90 @@ -1,135 +1,135 @@ -program mapsim - -! Generate simulated data for testing of MAP65 - - parameter (NMAX=96000*60) - real*4 d4(4,NMAX) !Floating-point data - integer*2 id4(4,NMAX) !i*2 data, dual polarization - integer*2 id2(2,NMAX) !i*2 data, single polarization - complex cwave(NMAX) !Generated complex waveform (no noise) - complex z,zx,zy - real*8 fcenter,fsample,samfac,f,dt,twopi,phi,dphi - character msg0*22,message*22,msgsent*22,arg*8,fname*13,mode*2 - - nargs=iargc() - if(nargs.ne.9) then - print*,'Usage: mapsim DT "message" mode f1 f2 nsigs pol SNR nfiles' - print*,'Example: 2.5 "CQ K1ABC FN42" B -22 33 20 45 -20 1' - print*,' ' - print*,'Enter message = "" to use entries in msgs.txt.' - print*,'Enter pol = -1 to generate a range of polarization angles.' - print*,'Enter SNR = 0 to generate a range of SNRs.' - go to 999 - endif - - call getarg(1,arg) - read(arg,*) dt0 !Time delay - call getarg(2,msg0) - message=msg0 !Transmitted message - call getarg(3,mode) !JT65 sub-mode (A B C B2 C2) - call getarg(4,arg) - read(arg,*) f1 !Lowest freq (kHz, relative to fcenter) - call getarg(5,arg) - read(arg,*) f2 !Highest freq - call getarg(6,arg) - read(arg,*) nsigs !Number of signals in each file - call getarg(7,arg) - read(arg,*) npol !Polarization in degrees - call getarg(8,arg) - read(arg,*) snrdb !S/N - pol=npol - call getarg(9,arg) - read(arg,*) nfiles !Number of files - - rmsdb=25. - rms=10.0**(0.05*rmsdb) - fcenter=144.125d0 !Center frequency (MHz) - fsample=96000.d0 !Sample rate (Hz) - dt=1.d0/fsample !Sample interval (s) - twopi=8.d0*atan(1.d0) - rad=360.0/twopi - samfac=1.d0 - mode65=1 - if(mode(1:1).eq.'B') mode65=2 - if(mode(1:1).eq.'C') mode65=4 - nfast=1 - if(mode(2:2).eq.'2') nfast=2 - npts=NMAX/nfast - open(12,file='msgs.txt',status='old') - - write(*,1000) -1000 format('File N freq S/N pol Message'/ & - '---------------------------------------------------') - - do ifile=1,nfiles - nmin=ifile-1 - if(mode(2:2).eq.' ') nmin=2*nmin - write(fname,1002) nmin !Create the output filenames -1002 format('000000_',i4.4,'00') - open(10,file=fname//'.iq',access='stream',status='unknown') - open(11,file=fname//'.tf2',access='stream',status='unknown') - - call noisegen(d4,npts) !Generate Gaussuian noise - - if(msg0.ne.' ') then - call cgen65(message,mode65,nfast,samfac,nsendingsh,msgsent,cwave,nwave) - endif - - rewind 12 - do isig=1,nsigs - - if(msg0.eq.' ') then - read(12,1004) message -1004 format(a22) - call cgen65(message,mode65,nfast,samfac,nsendingsh,msgsent, & - cwave,nwave) - endif - - if(npol.lt.0) pol=(isig-1)*180.0/nsigs - a=cos(pol/rad) - b=sin(pol/rad) - f=1000.0*(f1+f2)/2.0 - if(nsigs.gt.1) f=1000.0*(f1 + (isig-1)*(f2-f1)/(nsigs-1.0)) - dphi=twopi*f*dt + 0.5*twopi - - snrdbx=snrdb - if(snrdb.ge.-1.0) snrdbx=-15.0 - 15.0*(isig-1.0)/nsigs - sig=sqrt(2.2*2500.0/96000.0) * 10.0**(0.05*snrdbx) - write(*,1020) ifile,isig,0.001*f,snrdbx,nint(pol),msgsent -1020 format(i3,i4,f8.3,f7.1,i5,2x,a22) - - phi=0. -! i0=fsample*(3.5d0+0.05d0*(isig-1)) - i0=fsample*(1.d0 + dt0) - do i=1,nwave - phi=phi + dphi - if(phi.lt.-twopi) phi=phi+twopi - if(phi.gt.twopi) phi=phi-twopi - xphi=phi - z=sig*cwave(i)*cmplx(cos(xphi),-sin(xphi)) - zx=a*z - zy=b*z - j=i+i0 - d4(1,j)=d4(1,j) + real(zx) - d4(2,j)=d4(2,j) + aimag(zx) - d4(3,j)=d4(3,j) + real(zy) - d4(4,j)=d4(4,j) + aimag(zy) - enddo - enddo - - do i=1,npts - id4(1,i)=nint(rms*d4(1,i)) - id4(2,i)=nint(rms*d4(2,i)) - id4(3,i)=nint(rms*d4(3,i)) - id4(4,i)=nint(rms*d4(4,i)) - id2(1,i)=id4(1,i) - id2(2,i)=id4(2,i) - enddo - - write(10) fcenter,id2(1:2,1:npts) - write(11) fcenter,id4(1:4,1:npts) - close(10) - close(11) - enddo - -999 end program mapsim +program mapsim + +! Generate simulated data for testing of MAP65 + + parameter (NMAX=96000*60) + real*4 d4(4,NMAX) !Floating-point data + integer*2 id4(4,NMAX) !i*2 data, dual polarization + integer*2 id2(2,NMAX) !i*2 data, single polarization + complex cwave(NMAX) !Generated complex waveform (no noise) + complex z,zx,zy + real*8 fcenter,fsample,samfac,f,dt,twopi,phi,dphi + character msg0*22,message*22,msgsent*22,arg*8,fname*13,mode*2 + + nargs=iargc() + if(nargs.ne.9) then + print*,'Usage: mapsim DT "message" mode f1 f2 nsigs pol SNR nfiles' + print*,'Example: 2.5 "CQ K1ABC FN42" B -22 33 20 45 -20 1' + print*,' ' + print*,'Enter message = "" to use entries in msgs.txt.' + print*,'Enter pol = -1 to generate a range of polarization angles.' + print*,'Enter SNR = 0 to generate a range of SNRs.' + go to 999 + endif + + call getarg(1,arg) + read(arg,*) dt0 !Time delay + call getarg(2,msg0) + message=msg0 !Transmitted message + call getarg(3,mode) !JT65 sub-mode (A B C B2 C2) + call getarg(4,arg) + read(arg,*) f1 !Lowest freq (kHz, relative to fcenter) + call getarg(5,arg) + read(arg,*) f2 !Highest freq + call getarg(6,arg) + read(arg,*) nsigs !Number of signals in each file + call getarg(7,arg) + read(arg,*) npol !Polarization in degrees + call getarg(8,arg) + read(arg,*) snrdb !S/N + pol=npol + call getarg(9,arg) + read(arg,*) nfiles !Number of files + + rmsdb=25. + rms=10.0**(0.05*rmsdb) + fcenter=144.125d0 !Center frequency (MHz) + fsample=96000.d0 !Sample rate (Hz) + dt=1.d0/fsample !Sample interval (s) + twopi=8.d0*atan(1.d0) + rad=360.0/twopi + samfac=1.d0 + mode65=1 + if(mode(1:1).eq.'B') mode65=2 + if(mode(1:1).eq.'C') mode65=4 + nfast=1 + if(mode(2:2).eq.'2') nfast=2 + npts=NMAX/nfast + open(12,file='msgs.txt',status='old') + + write(*,1000) +1000 format('File N freq S/N pol Message'/ & + '---------------------------------------------------') + + do ifile=1,nfiles + nmin=ifile-1 + if(mode(2:2).eq.' ') nmin=2*nmin + write(fname,1002) nmin !Create the output filenames +1002 format('000000_',i4.4,'00') + open(10,file=fname//'.iq',access='stream',status='unknown') + open(11,file=fname//'.tf2',access='stream',status='unknown') + + call noisegen(d4,npts) !Generate Gaussuian noise + + if(msg0.ne.' ') then + call cgen65(message,mode65,nfast,samfac,nsendingsh,msgsent,cwave,nwave) + endif + + rewind 12 + do isig=1,nsigs + + if(msg0.eq.' ') then + read(12,1004) message +1004 format(a22) + call cgen65(message,mode65,nfast,samfac,nsendingsh,msgsent, & + cwave,nwave) + endif + + if(npol.lt.0) pol=(isig-1)*180.0/nsigs + a=cos(pol/rad) + b=sin(pol/rad) + f=1000.0*(f1+f2)/2.0 + if(nsigs.gt.1) f=1000.0*(f1 + (isig-1)*(f2-f1)/(nsigs-1.0)) + dphi=twopi*f*dt + 0.5*twopi + + snrdbx=snrdb + if(snrdb.ge.-1.0) snrdbx=-15.0 - 15.0*(isig-1.0)/nsigs + sig=sqrt(2.2*2500.0/96000.0) * 10.0**(0.05*snrdbx) + write(*,1020) ifile,isig,0.001*f,snrdbx,nint(pol),msgsent +1020 format(i3,i4,f8.3,f7.1,i5,2x,a22) + + phi=0. +! i0=fsample*(3.5d0+0.05d0*(isig-1)) + i0=fsample*(1.d0 + dt0) + do i=1,nwave + phi=phi + dphi + if(phi.lt.-twopi) phi=phi+twopi + if(phi.gt.twopi) phi=phi-twopi + xphi=phi + z=sig*cwave(i)*cmplx(cos(xphi),-sin(xphi)) + zx=a*z + zy=b*z + j=i+i0 + d4(1,j)=d4(1,j) + real(zx) + d4(2,j)=d4(2,j) + aimag(zx) + d4(3,j)=d4(3,j) + real(zy) + d4(4,j)=d4(4,j) + aimag(zy) + enddo + enddo + + do i=1,npts + id4(1,i)=nint(rms*d4(1,i)) + id4(2,i)=nint(rms*d4(2,i)) + id4(3,i)=nint(rms*d4(3,i)) + id4(4,i)=nint(rms*d4(4,i)) + id2(1,i)=id4(1,i) + id2(2,i)=id4(2,i) + enddo + + write(10) fcenter,id2(1:2,1:npts) + write(11) fcenter,id4(1:4,1:npts) + close(10) + close(11) + enddo + +999 end program mapsim diff --git a/libm65/moon2.f90 b/map65/libm65/moon2.f90 similarity index 100% rename from libm65/moon2.f90 rename to map65/libm65/moon2.f90 diff --git a/libm65/moondop.f90 b/map65/libm65/moondop.f90 similarity index 100% rename from libm65/moondop.f90 rename to map65/libm65/moondop.f90 diff --git a/libm65/msgs.txt b/map65/libm65/msgs.txt similarity index 94% rename from libm65/msgs.txt rename to map65/libm65/msgs.txt index c38aba972..cb0630423 100644 --- a/libm65/msgs.txt +++ b/map65/libm65/msgs.txt @@ -1,60 +1,60 @@ -W1AAA K2BBB EM00 -W2CCC K3DDD EM01 -W3EEE K4FFF EM02 -W5GGG K6HHH EM03 -W7III K8JJJ EM04 -W9KKK K0LLL EM05 -G0MMM F1NNN JN06 -G2OOO F3PPP JN07 -G4QQQ F5RRR JN08 -G6SSS F7TTT JN09 -W1XAA K2XBB EM10 -W2XCC K3XDD EM11 -W3XEE K4XFF EM12 -W5XGG K6XHH EM13 -W7XII K8XJJ EM14 -W9XKK K0XLL EM15 -G0XMM F1XNN JN16 -G2XOO F3XPP JN17 -G4XQQ F5XRR JN18 -G6XSS F7XTT JN19 -W1YAA K2YBB EM20 -W2YCC K3YDD EM21 -W3YEE K4YFF EM22 -W5YGG K6YHH EM23 -W7YII K8YJJ EM24 -W9YKK K0YLL EM25 -G0YMM F1YNN JN26 -G2YOO F3YPP JN27 -G4YQQ F5YRR JN28 -G6YSS F7YTT JN29 -W1ZAA K2ZBB EM30 -W2ZCC K3ZDD EM31 -W3ZEE K4ZFF EM32 -W5ZGG K6ZHH EM33 -W7ZII K8ZJJ EM34 -W9ZKK K0ZLL EM35 -G0ZMM F1ZNN JN36 -G2ZOO F3ZPP JN37 -G4ZQQ F5ZRR JN38 -G6ZSS F7ZTT JN39 -W1AXA K2BXB EM40 -W2CXC K3DXD EM41 -W3EXE K4FXF EM42 -W5GXG K6HXH EM43 -W7IXI K8JXJ EM44 -W9KXK K0LXL EM45 -G0MXM F1NXN JN46 -G2OXO F3PXP JN47 -G4QXQ F5RXR JN48 -G6SXS F7TXT JN49 -W1AYA K2BYB EM50 -W2CYC K3DYD EM51 -W3EYE K4FYF EM52 -W5GYG K6HYH EM53 -W7IYI K8JYJ EM54 -W9KYK K0LYL EM55 -G0MYM F1NYN JN56 -G2OYO F3PYP JN57 -G4QYQ F5RYR JN58 -G6SYS F7TYT JN59 +W1AAA K2BBB EM00 +W2CCC K3DDD EM01 +W3EEE K4FFF EM02 +W5GGG K6HHH EM03 +W7III K8JJJ EM04 +W9KKK K0LLL EM05 +G0MMM F1NNN JN06 +G2OOO F3PPP JN07 +G4QQQ F5RRR JN08 +G6SSS F7TTT JN09 +W1XAA K2XBB EM10 +W2XCC K3XDD EM11 +W3XEE K4XFF EM12 +W5XGG K6XHH EM13 +W7XII K8XJJ EM14 +W9XKK K0XLL EM15 +G0XMM F1XNN JN16 +G2XOO F3XPP JN17 +G4XQQ F5XRR JN18 +G6XSS F7XTT JN19 +W1YAA K2YBB EM20 +W2YCC K3YDD EM21 +W3YEE K4YFF EM22 +W5YGG K6YHH EM23 +W7YII K8YJJ EM24 +W9YKK K0YLL EM25 +G0YMM F1YNN JN26 +G2YOO F3YPP JN27 +G4YQQ F5YRR JN28 +G6YSS F7YTT JN29 +W1ZAA K2ZBB EM30 +W2ZCC K3ZDD EM31 +W3ZEE K4ZFF EM32 +W5ZGG K6ZHH EM33 +W7ZII K8ZJJ EM34 +W9ZKK K0ZLL EM35 +G0ZMM F1ZNN JN36 +G2ZOO F3ZPP JN37 +G4ZQQ F5ZRR JN38 +G6ZSS F7ZTT JN39 +W1AXA K2BXB EM40 +W2CXC K3DXD EM41 +W3EXE K4FXF EM42 +W5GXG K6HXH EM43 +W7IXI K8JXJ EM44 +W9KXK K0LXL EM45 +G0MXM F1NXN JN46 +G2OXO F3PXP JN47 +G4QXQ F5RXR JN48 +G6SXS F7TXT JN49 +W1AYA K2BYB EM50 +W2CYC K3DYD EM51 +W3EYE K4FYF EM52 +W5GYG K6HYH EM53 +W7IYI K8JYJ EM54 +W9KYK K0LYL EM55 +G0MYM F1NYN JN56 +G2OYO F3PYP JN57 +G4QYQ F5RYR JN58 +G6SYS F7TYT JN59 diff --git a/libm65/nchar.f90 b/map65/libm65/nchar.f90 similarity index 100% rename from libm65/nchar.f90 rename to map65/libm65/nchar.f90 diff --git a/libm65/noisegen.f90 b/map65/libm65/noisegen.f90 similarity index 93% rename from libm65/noisegen.f90 rename to map65/libm65/noisegen.f90 index f92a9df01..65d943161 100644 --- a/libm65/noisegen.f90 +++ b/map65/libm65/noisegen.f90 @@ -1,13 +1,13 @@ -subroutine noisegen(d4,nmax) - - real*4 d4(4,nmax) - - do i=1,nmax - d4(1,i)=gran() - d4(2,i)=gran() - d4(3,i)=gran() - d4(4,i)=gran() - enddo - - return -end subroutine noisegen +subroutine noisegen(d4,nmax) + + real*4 d4(4,nmax) + + do i=1,nmax + d4(1,i)=gran() + d4(2,i)=gran() + d4(3,i)=gran() + d4(4,i)=gran() + enddo + + return +end subroutine noisegen diff --git a/libm65/packjt.f90 b/map65/libm65/packjt.f90 similarity index 95% rename from libm65/packjt.f90 rename to map65/libm65/packjt.f90 index 1e0224cbe..c1fc0089d 100644 --- a/libm65/packjt.f90 +++ b/map65/libm65/packjt.f90 @@ -1,996 +1,996 @@ -module packjt - - contains - -subroutine packbits(dbits,nsymd,m0,sym) - - ! Pack 0s and 1s from dbits() into sym() with m0 bits per word. - ! NB: nsymd is the number of packed output words. - - integer sym(:) - integer*1 dbits(:) - - k=0 - do i=1,nsymd - n=0 - do j=1,m0 - k=k+1 - m=dbits(k) - n=ior(ishft(n,1),m) - enddo - sym(i)=n - enddo - - return - end subroutine packbits - - subroutine unpackbits(sym,nsymd,m0,dbits) - - ! Unpack bits from sym() into dbits(), one bit per byte. - ! NB: nsymd is the number of input words, and m0 their length. - ! there will be m0*nsymd output bytes, each 0 or 1. - - integer sym(:) - integer*1 dbits(:) - - k=0 - do i=1,nsymd - mask=ishft(1,m0-1) - do j=1,m0 - k=k+1 - dbits(k)=0 - if(iand(mask,sym(i)).ne.0) dbits(k)=1 - mask=ishft(mask,-1) - enddo - enddo - - return - end subroutine unpackbits - - subroutine packcall(callsign,ncall,text) - - ! Pack a valid callsign into a 28-bit integer. - - parameter (NBASE=37*36*10*27*27*27) - character callsign*6,c*1,tmp*6 - logical text - - text=.false. - - ! Work-around for Swaziland prefix: - if(callsign(1:4).eq.'3DA0') callsign='3D0'//callsign(5:6) - - if(callsign(1:3).eq.'CQ ') then - ncall=NBASE + 1 - if(callsign(4:4).ge.'0' .and. callsign(4:4).le.'9' .and. & - callsign(5:5).ge.'0' .and. callsign(5:5).le.'9' .and. & - callsign(6:6).ge.'0' .and. callsign(6:6).le.'9') then - read(callsign(4:6),*) nfreq - ncall=NBASE + 3 + nfreq - endif - return - else if(callsign(1:4).eq.'QRZ ') then - ncall=NBASE + 2 - return - else if(callsign(1:3).eq.'DE ') then - ncall=267796945 - return - endif - - tmp=' ' - if(callsign(3:3).ge.'0' .and. callsign(3:3).le.'9') then - tmp=callsign - else if(callsign(2:2).ge.'0' .and. callsign(2:2).le.'9') then - if(callsign(6:6).ne.' ') then - text=.true. - return - endif - tmp=' '//callsign(:5) - else - text=.true. - return - endif - - do i=1,6 - c=tmp(i:i) - if(c.ge.'a' .and. c.le.'z') & - tmp(i:i)=char(ichar(c)-ichar('a')+ichar('A')) - enddo - - n1=0 - if((tmp(1:1).ge.'A'.and.tmp(1:1).le.'Z').or.tmp(1:1).eq.' ') n1=1 - if(tmp(1:1).ge.'0' .and. tmp(1:1).le.'9') n1=1 - n2=0 - if(tmp(2:2).ge.'A' .and. tmp(2:2).le.'Z') n2=1 - if(tmp(2:2).ge.'0' .and. tmp(2:2).le.'9') n2=1 - n3=0 - if(tmp(3:3).ge.'0' .and. tmp(3:3).le.'9') n3=1 - n4=0 - if((tmp(4:4).ge.'A'.and.tmp(4:4).le.'Z').or.tmp(4:4).eq.' ') n4=1 - n5=0 - if((tmp(5:5).ge.'A'.and.tmp(5:5).le.'Z').or.tmp(5:5).eq.' ') n5=1 - n6=0 - if((tmp(6:6).ge.'A'.and.tmp(6:6).le.'Z').or.tmp(6:6).eq.' ') n6=1 - - if(n1+n2+n3+n4+n5+n6 .ne. 6) then - text=.true. - return - endif - - ncall=nchar(tmp(1:1)) - ncall=36*ncall+nchar(tmp(2:2)) - ncall=10*ncall+nchar(tmp(3:3)) - ncall=27*ncall+nchar(tmp(4:4))-10 - ncall=27*ncall+nchar(tmp(5:5))-10 - ncall=27*ncall+nchar(tmp(6:6))-10 - - return - end subroutine packcall - - subroutine unpackcall(ncall,word,iv2,psfx) - - parameter (NBASE=37*36*10*27*27*27) - character word*12,c*37,psfx*4 - - data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ '/ - - word='......' - psfx=' ' - n=ncall - iv2=0 - if(n.ge.262177560) go to 20 - word='......' - ! if(n.ge.262177560) go to 999 !Plain text message ... - i=mod(n,27)+11 - word(6:6)=c(i:i) - n=n/27 - i=mod(n,27)+11 - word(5:5)=c(i:i) - n=n/27 - i=mod(n,27)+11 - word(4:4)=c(i:i) - n=n/27 - i=mod(n,10)+1 - word(3:3)=c(i:i) - n=n/10 - i=mod(n,36)+1 - word(2:2)=c(i:i) - n=n/36 - i=n+1 - word(1:1)=c(i:i) - do i=1,4 - if(word(i:i).ne.' ') go to 10 - enddo - go to 999 - 10 word=word(i:) - go to 999 - - 20 if(n.ge.267796946) go to 999 - - ! We have a JT65v2 message - if((n.ge.262178563) .and. (n.le.264002071)) then - ! CQ with prefix - iv2=1 - n=n-262178563 - i=mod(n,37)+1 - psfx(4:4)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(3:3)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(2:2)=c(i:i) - n=n/37 - i=n+1 - psfx(1:1)=c(i:i) - - else if((n.ge.264002072) .and. (n.le.265825580)) then - ! QRZ with prefix - iv2=2 - n=n-264002072 - i=mod(n,37)+1 - psfx(4:4)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(3:3)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(2:2)=c(i:i) - n=n/37 - i=n+1 - psfx(1:1)=c(i:i) - - else if((n.ge.265825581) .and. (n.le.267649089)) then - ! DE with prefix - iv2=3 - n=n-265825581 - i=mod(n,37)+1 - psfx(4:4)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(3:3)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(2:2)=c(i:i) - n=n/37 - i=n+1 - psfx(1:1)=c(i:i) - - else if((n.ge.267649090) .and. (n.le.267698374)) then - ! CQ with suffix - iv2=4 - n=n-267649090 - i=mod(n,37)+1 - psfx(3:3)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(2:2)=c(i:i) - n=n/37 - i=n+1 - psfx(1:1)=c(i:i) - - else if((n.ge.267698375) .and. (n.le.267747659)) then - ! QRZ with suffix - iv2=5 - n=n-267698375 - i=mod(n,37)+1 - psfx(3:3)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(2:2)=c(i:i) - n=n/37 - i=n+1 - psfx(1:1)=c(i:i) - - else if((n.ge.267747660) .and. (n.le.267796944)) then - ! DE with suffix - iv2=6 - n=n-267747660 - i=mod(n,37)+1 - psfx(3:3)=c(i:i) - n=n/37 - i=mod(n,37)+1 - psfx(2:2)=c(i:i) - n=n/37 - i=n+1 - psfx(1:1)=c(i:i) - - else if(n.eq.267796945) then - ! DE with no prefix or suffix - iv2=7 - psfx = ' ' - endif - - 999 if(word(1:3).eq.'3D0') word='3DA0'//word(4:) - - return - end subroutine unpackcall - - subroutine packgrid(grid,ng,text) - - parameter (NGBASE=180*180) - character*4 grid - character*1 c1 - logical text - - text=.false. - if(grid.eq.' ') go to 90 !Blank grid is OK - - ! First, handle signal reports in the original range, -01 to -30 dB - if(grid(1:1).eq.'-') then - read(grid(2:3),*,err=800,end=800) n - if(n.ge.1 .and. n.le.30) then - ng=NGBASE+1+n - go to 900 - endif - go to 10 - else if(grid(1:2).eq.'R-') then - read(grid(3:4),*,err=800,end=800) n - if(n.ge.1 .and. n.le.30) then - ng=NGBASE+31+n - go to 900 - endif - go to 10 - ! Now check for RO, RRR, or 73 in the message field normally used for grid - else if(grid(1:4).eq.'RO ') then - ng=NGBASE+62 - go to 900 - else if(grid(1:4).eq.'RRR ') then - ng=NGBASE+63 - go to 900 - else if(grid(1:4).eq.'73 ') then - ng=NGBASE+64 - go to 900 - endif - - ! Now check for extended-range signal reports: -50 to -31, and 0 to +49. - 10 n=99 - c1=grid(1:1) - read(grid,*,err=20,end=20) n - go to 30 - 20 read(grid(2:4),*,err=30,end=30) n - 30 if(n.ge.-50 .and. n.le.49) then - if(c1.eq.'R') then - write(grid,1002) n+50 - 1002 format('LA',i2.2) - else - write(grid,1003) n+50 - 1003 format('KA',i2.2) - endif - go to 40 - endif - - ! Maybe it's free text ? - if(grid(1:1).lt.'A' .or. grid(1:1).gt.'R') text=.true. - if(grid(2:2).lt.'A' .or. grid(2:2).gt.'R') text=.true. - if(grid(3:3).lt.'0' .or. grid(3:3).gt.'9') text=.true. - if(grid(4:4).lt.'0' .or. grid(4:4).gt.'9') text=.true. - if(text) go to 900 - - ! OK, we have a properly formatted grid locator - 40 call grid2deg(grid//'mm',dlong,dlat) - long=int(dlong) - lat=int(dlat+ 90.0) - ng=((long+180)/2)*180 + lat - go to 900 - - 90 ng=NGBASE + 1 - go to 900 - - 800 text=.true. - 900 continue - - return - end subroutine packgrid - - subroutine unpackgrid(ng,grid) - - parameter (NGBASE=180*180) - character grid*4,grid6*6 - - grid=' ' - if(ng.ge.32400) go to 10 - dlat=mod(ng,180)-90 - dlong=(ng/180)*2 - 180 + 2 - call deg2grid(dlong,dlat,grid6) - grid=grid6(:4) - if(grid(1:2).eq.'KA') then - read(grid(3:4),*) n - n=n-50 - write(grid,1001) n - 1001 format(i3.2) - if(grid(1:1).eq.' ') grid(1:1)='+' - else if(grid(1:2).eq.'LA') then - read(grid(3:4),*) n - n=n-50 - write(grid,1002) n - 1002 format('R',i3.2) - if(grid(2:2).eq.' ') grid(2:2)='+' - endif - go to 900 - - 10 n=ng-NGBASE-1 - if(n.ge.1 .and.n.le.30) then - write(grid,1012) -n - 1012 format(i3.2) - else if(n.ge.31 .and.n.le.60) then - n=n-30 - write(grid,1022) -n - 1022 format('R',i3.2) - else if(n.eq.61) then - grid='RO' - else if(n.eq.62) then - grid='RRR' - else if(n.eq.63) then - grid='73' - endif - - 900 return - end subroutine unpackgrid - - subroutine packmsg(msg0,dat,itype) - - ! Packs a JT4/JT9/JT65 message into twelve 6-bit symbols - - ! itype Message Type - !-------------------- - ! 1 Standardd message - ! 2 Type 1 prefix - ! 3 Type 1 suffix - ! 4 Type 2 prefix - ! 5 Type 2 suffix - ! 6 Free text - ! -1 Does not decode correctly - - parameter (NBASE=37*36*10*27*27*27) - parameter (NBASE2=262178562) - character*22 msg0,msg - integer dat(:) - character*12 c1,c2 - character*4 c3 - character*6 grid6 - logical text1,text2,text3 - - msg=msg0 - itype=1 - call fmtmsg(msg,iz) - - if(msg(1:6).eq.'CQ DX ') msg(3:3)='9' - if(msg(1:3).eq."CQ " .and. & - msg(4:4).ge.'A' .and. msg(4:4).le.'Z' .and. & - msg(5:5).ge.'A' .and. msg(5:5).le.'Z' .and. & - msg(6:6).eq.' ') msg='E9'//msg(4:) - - ! See if it's a CQ message - if(msg(1:3).eq.'CQ ') then - i=3 - ! ... and if so, does it have a reply frequency? - if(msg(4:4).ge.'0' .and. msg(4:4).le.'9' .and. & - msg(5:5).ge.'0' .and. msg(5:5).le.'9' .and. & - msg(6:6).ge.'0' .and. msg(6:6).le.'9') i=7 - go to 1 - endif - - do i=1,22 - if(msg(i:i).eq.' ') go to 1 !Get 1st blank - enddo - go to 10 !Consider msg as plain text - - 1 ia=i - c1=msg(1:ia-1) - do i=ia+1,22 - if(msg(i:i).eq.' ') go to 2 !Get 2nd blank - enddo - go to 10 !Consider msg as plain text - - 2 ib=i - c2=msg(ia+1:ib-1) - - do i=ib+1,22 - if(msg(i:i).eq.' ') go to 3 !Get 3rd blank - enddo - go to 10 !Consider msg as plain text - - 3 ic=i - c3=' ' - if(ic.ge.ib+1) c3=msg(ib+1:ic) - if(c3.eq.'OOO ') c3=' ' !Strip out the OOO flag - call getpfx1(c1,k1,nv2a) - if(nv2a.ge.4) go to 10 - call packcall(c1,nc1,text1) - if(text1) go to 10 - call getpfx1(c2,k2,nv2b) - call packcall(c2,nc2,text2) - if(text2) go to 10 - if(nv2a.eq.2 .or. nv2a.eq.3 .or. nv2b.eq.2 .or. nv2b.eq.3) then - if(k1.lt.0 .or. k2.lt.0 .or. k1*k2.ne.0) go to 10 - if(k2.gt.0) k2=k2+450 - k=max(k1,k2) - if(k.gt.0) then - call k2grid(k,grid6) - c3=grid6(:4) - endif - endif - call packgrid(c3,ng,text3) - - if(nv2a.lt.4 .and. nv2b.lt.4 .and. (.not.text1) .and. (.not.text2) .and. & - (.not.text3)) go to 20 - - nc1=0 - if(nv2b.eq.4) then - if(c1(1:3).eq.'CQ ') nc1=262178563 + k2 - if(c1(1:4).eq.'QRZ ') nc1=264002072 + k2 - if(c1(1:3).eq.'DE ') nc1=265825581 + k2 - else if(nv2b.eq.5) then - if(c1(1:3).eq.'CQ ') nc1=267649090 + k2 - if(c1(1:4).eq.'QRZ ') nc1=267698375 + k2 - if(c1(1:3).eq.'DE ') nc1=267747660 + k2 - endif - if(nc1.ne.0) go to 20 - - ! The message will be treated as plain text. - 10 itype=6 - call packtext(msg,nc1,nc2,ng) - ng=ng+32768 - - ! Encode data into 6-bit words - 20 continue - if(itype.ne.6) itype=max(nv2a,nv2b) - dat(1)=iand(ishft(nc1,-22),63) !6 bits - dat(2)=iand(ishft(nc1,-16),63) !6 bits - dat(3)=iand(ishft(nc1,-10),63) !6 bits - dat(4)=iand(ishft(nc1, -4),63) !6 bits - dat(5)=4*iand(nc1,15)+iand(ishft(nc2,-26),3) !4+2 bits - dat(6)=iand(ishft(nc2,-20),63) !6 bits - dat(7)=iand(ishft(nc2,-14),63) !6 bits - dat(8)=iand(ishft(nc2, -8),63) !6 bits - dat(9)=iand(ishft(nc2, -2),63) !6 bits - dat(10)=16*iand(nc2,3)+iand(ishft(ng,-12),15) !2+4 bits - dat(11)=iand(ishft(ng,-6),63) - dat(12)=iand(ng,63) - - return - end subroutine packmsg - - subroutine unpackmsg(dat,msg) - - parameter (NBASE=37*36*10*27*27*27) - parameter (NGBASE=180*180) - integer dat(:) - character c1*12,c2*12,grid*4,msg*22,grid6*6,psfx*4,junk2*4 - logical cqnnn - - cqnnn=.false. - nc1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+ & - ishft(dat(4),4) + iand(ishft(dat(5),-2),15) - - nc2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) + & - ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) + & - iand(ishft(dat(10),-4),3) - - ng=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12) - - if(ng.ge.32768) then - call unpacktext(nc1,nc2,ng,msg) - go to 100 - endif - - call unpackcall(nc1,c1,iv2,psfx) - if(iv2.eq.0) then - ! This is an "original JT65" message - if(nc1.eq.NBASE+1) c1='CQ ' - if(nc1.eq.NBASE+2) c1='QRZ ' - nfreq=nc1-NBASE-3 - if(nfreq.ge.0 .and. nfreq.le.999) then - write(c1,1002) nfreq - 1002 format('CQ ',i3.3) - cqnnn=.true. - endif - endif - - call unpackcall(nc2,c2,junk1,junk2) - call unpackgrid(ng,grid) - - if(iv2.gt.0) then - ! This is a JT65v2 message - do i=1,4 - if(ichar(psfx(i:i)).eq.0) psfx(i:i)=' ' - enddo - - n1=len_trim(psfx) - n2=len_trim(c2) - if(iv2.eq.1) msg='CQ '//psfx(:n1)//'/'//c2(:n2)//' '//grid - if(iv2.eq.2) msg='QRZ '//psfx(:n1)//'/'//c2(:n2)//' '//grid - if(iv2.eq.3) msg='DE '//psfx(:n1)//'/'//c2(:n2)//' '//grid - if(iv2.eq.4) msg='CQ '//c2(:n2)//'/'//psfx(:n1)//' '//grid - if(iv2.eq.5) msg='QRZ '//c2(:n2)//'/'//psfx(:n1)//' '//grid - if(iv2.eq.6) msg='DE '//c2(:n2)//'/'//psfx(:n1)//' '//grid - if(iv2.eq.7) msg='DE '//c2(:n2)//' '//grid - if(iv2.eq.8) msg=' ' - go to 100 - else - - endif - - grid6=grid//'ma' - call grid2k(grid6,k) - if(k.ge.1 .and. k.le.450) call getpfx2(k,c1) - if(k.ge.451 .and. k.le.900) call getpfx2(k,c2) - - i=index(c1,char(0)) - if(i.ge.3) c1=c1(1:i-1)//' ' - i=index(c2,char(0)) - if(i.ge.3) c2=c2(1:i-1)//' ' - - msg=' ' - j=0 - if(cqnnn) then - msg=c1//' ' - j=7 !### ??? ### - go to 10 - endif - - do i=1,12 - j=j+1 - msg(j:j)=c1(i:i) - if(c1(i:i).eq.' ') go to 10 - enddo - j=j+1 - msg(j:j)=' ' - - 10 do i=1,12 - if(j.le.21) j=j+1 - msg(j:j)=c2(i:i) - if(c2(i:i).eq.' ') go to 20 - enddo - if(j.le.21) j=j+1 - msg(j:j)=' ' - - 20 if(k.eq.0) then - do i=1,4 - if(j.le.21) j=j+1 - msg(j:j)=grid(i:i) - enddo - if(j.le.21) j=j+1 - msg(j:j)=' ' - endif - - 100 continue - if(msg(1:6).eq.'CQ9DX ') msg(3:3)=' ' - if(msg(1:2).eq.'E9' .and. & - msg(3:3).ge.'A' .and. msg(3:3).le.'Z' .and. & - msg(4:4).ge.'A' .and. msg(4:4).le.'Z' .and. & - msg(5:5).eq.' ') msg='CQ '//msg(3:) - - return - end subroutine unpackmsg - - subroutine packtext(msg,nc1,nc2,nc3) - - parameter (MASK28=2**28 - 1) - character*13 msg - character*42 c - data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?'/ - - nc1=0 - nc2=0 - nc3=0 - - do i=1,5 !First 5 characters in nc1 - do j=1,42 !Get character code - if(msg(i:i).eq.c(j:j)) go to 10 - enddo - j=37 - 10 j=j-1 !Codes should start at zero - nc1=42*nc1 + j - enddo - - do i=6,10 !Characters 6-10 in nc2 - do j=1,42 !Get character code - if(msg(i:i).eq.c(j:j)) go to 20 - enddo - j=37 - 20 j=j-1 !Codes should start at zero - nc2=42*nc2 + j - enddo - - do i=11,13 !Characters 11-13 in nc3 - do j=1,42 !Get character code - if(msg(i:i).eq.c(j:j)) go to 30 - enddo - j=37 - 30 j=j-1 !Codes should start at zero - nc3=42*nc3 + j - enddo - - ! We now have used 17 bits in nc3. Must move one each to nc1 and nc2. - nc1=nc1+nc1 - if(iand(nc3,32768).ne.0) nc1=nc1+1 - nc2=nc2+nc2 - if(iand(nc3,65536).ne.0) nc2=nc2+1 - nc3=iand(nc3,32767) - - return - end subroutine packtext - - subroutine unpacktext(nc1,nc2,nc3,msg) - - character*22 msg - character*44 c - data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?'/ - - nc3=iand(nc3,32767) !Remove the "plain text" bit - if(iand(nc1,1).ne.0) nc3=nc3+32768 - nc1=nc1/2 - if(iand(nc2,1).ne.0) nc3=nc3+65536 - nc2=nc2/2 - - do i=5,1,-1 - j=mod(nc1,42)+1 - msg(i:i)=c(j:j) - nc1=nc1/42 - enddo - - do i=10,6,-1 - j=mod(nc2,42)+1 - msg(i:i)=c(j:j) - nc2=nc2/42 - enddo - - do i=13,11,-1 - j=mod(nc3,42)+1 - msg(i:i)=c(j:j) - nc3=nc3/42 - enddo - msg(14:22) = ' ' - - return - end subroutine unpacktext - - subroutine getpfx1(callsign,k,nv2) - - character*12 callsign0,callsign,lof,rof - character*8 c - character addpfx*8,tpfx*4,tsfx*3 - logical ispfx,issfx,invalid - common/pfxcom/addpfx - include 'pfx.f90' - - callsign0=callsign - nv2=1 - iz=index(callsign,' ') - 1 - if(iz.lt.0) iz=12 - islash=index(callsign(1:iz),'/') - k=0 - ! if(k.eq.0) go to 10 !Tnx to DL9RDZ for reminder:this was for tests only! - c=' ' - if(islash.gt.0 .and. islash.le.(iz-4)) then - ! Add-on prefix - c=callsign(1:islash-1) - callsign=callsign(islash+1:iz) - do i=1,NZ - if(pfx(i)(1:4).eq.c) then - k=i - nv2=2 - go to 10 - endif - enddo - if(addpfx.eq.c) then - k=449 - nv2=2 - go to 10 - endif - - else if(islash.eq.(iz-1)) then - ! Add-on suffix - c=callsign(islash+1:iz) - callsign=callsign(1:islash-1) - do i=1,NZ2 - if(sfx(i).eq.c(1:1)) then - k=400+i - nv2=3 - go to 10 - endif - enddo - endif - - 10 if(islash.ne.0 .and.k.eq.0) then - ! Original JT65 would force this compound callsign to be treated as - ! plain text. In JT65v2, we will encode the prefix or suffix into nc1. - ! The task here is to compute the proper value of k. - lof=callsign0(:islash-1) - rof=callsign0(islash+1:) - llof=len_trim(lof) - lrof=len_trim(rof) - ispfx=(llof.gt.0 .and. llof.le.4) - issfx=(lrof.gt.0 .and. lrof.le.3) - invalid=.not.(ispfx.or.issfx) - if(ispfx.and.issfx) then - if(llof.lt.3) issfx=.false. - if(lrof.lt.3) ispfx=.false. - if(ispfx.and.issfx) then - i=ichar(callsign0(islash-1:islash-1)) - if(i.ge.ichar('0') .and. i.le.ichar('9')) then - issfx=.false. - else - ispfx=.false. - endif - endif - endif - - if(invalid) then - k=-1 - else - if(ispfx) then - tpfx=lof(1:4) - k=nchar(tpfx(1:1)) - k=37*k + nchar(tpfx(2:2)) - k=37*k + nchar(tpfx(3:3)) - k=37*k + nchar(tpfx(4:4)) - nv2=4 - i=index(callsign0,'/') - callsign=callsign0(:i-1) - callsign=callsign0(i+1:) - endif - if(issfx) then - tsfx=rof(1:3) - k=nchar(tsfx(1:1)) - k=37*k + nchar(tsfx(2:2)) - k=37*k + nchar(tsfx(3:3)) - nv2=5 - i=index(callsign0,'/') - callsign=callsign0(:i-1) - endif - endif - endif - - return - end subroutine getpfx1 - - subroutine getpfx2(k0,callsign) - - character callsign*12 - include 'pfx.f90' - character addpfx*8 - common/pfxcom/addpfx - - k=k0 - if(k.gt.450) k=k-450 - if(k.ge.1 .and. k.le.NZ) then - iz=index(pfx(k),' ') - 1 - callsign=pfx(k)(1:iz)//'/'//callsign - else if(k.ge.401 .and. k.le.400+NZ2) then - iz=index(callsign,' ') - 1 - callsign=callsign(1:iz)//'/'//sfx(k-400) - else if(k.eq.449) then - iz=index(addpfx,' ') - 1 - if(iz.lt.1) iz=8 - callsign=addpfx(1:iz)//'/'//callsign - endif - - return - end subroutine getpfx2 - - subroutine grid2k(grid,k) - - character*6 grid - - call grid2deg(grid,xlong,xlat) - nlong=nint(xlong) - nlat=nint(xlat) - k=0 - if(nlat.ge.85) k=5*(nlong+179)/2 + nlat-84 - - return - end subroutine grid2k - - subroutine k2grid(k,grid) - character grid*6 - - nlong=2*mod((k-1)/5,90)-179 - if(k.gt.450) nlong=nlong+180 - nlat=mod(k-1,5)+ 85 - dlat=nlat - dlong=nlong - call deg2grid(dlong,dlat,grid) - - return - end subroutine k2grid - - subroutine grid2n(grid,n) - character*4 grid - - i1=ichar(grid(1:1))-ichar('A') - i2=ichar(grid(3:3))-ichar('0') - i=10*i1 + i2 - n=-i - 31 - - return - end subroutine grid2n - - subroutine n2grid(n,grid) - character*4 grid - - if(n.gt.-31 .or. n.lt.-70) stop 'Error in n2grid' - i=-(n+31) !NB: 0 <= i <= 39 - i1=i/10 - i2=mod(i,10) - grid(1:1)=char(ichar('A')+i1) - grid(2:2)='A' - grid(3:3)=char(ichar('0')+i2) - grid(4:4)='0' - - return - end subroutine n2grid - - function nchar(c) - - ! Convert ascii number, letter, or space to 0-36 for callsign packing. - - character c*1 - - n=0 !Silence compiler warning - if(c.ge.'0' .and. c.le.'9') then - n=ichar(c)-ichar('0') - else if(c.ge.'A' .and. c.le.'Z') then - n=ichar(c)-ichar('A') + 10 - else if(c.ge.'a' .and. c.le.'z') then - n=ichar(c)-ichar('a') + 10 - else if(c.ge.' ') then - n=36 - else - Print*,'Invalid character in callsign ',c,' ',ichar(c) - stop - endif - nchar=n - - return - end function nchar - - subroutine pack50(n1,n2,dat) - - integer*1 dat(:),i1 - - i1=iand(ishft(n1,-20),255) !8 bits - dat(1)=i1 - i1=iand(ishft(n1,-12),255) !8 bits - dat(2)=i1 - i1=iand(ishft(n1, -4),255) !8 bits - dat(3)=i1 - i1=16*iand(n1,15)+iand(ishft(n2,-18),15) !4+4 bits - dat(4)=i1 - i1=iand(ishft(n2,-10),255) !8 bits - dat(5)=i1 - i1=iand(ishft(n2, -2),255) !8 bits - dat(6)=i1 - i1=64*iand(n2,3) !2 bits - dat(7)=i1 - dat(8)=0 - dat(9)=0 - dat(10)=0 - dat(11)=0 - - return - end subroutine pack50 - -subroutine packpfx(call1,n1,ng,nadd) - - character*12 call1,call0 - character*3 pfx - logical text - - i1=index(call1,'/') - if(call1(i1+2:i1+2).eq.' ') then -! Single-character add-on suffix (maybe also fourth suffix letter?) - call0=call1(:i1-1) - call packcall(call0,n1,text) - nadd=1 - nc=ichar(call1(i1+1:i1+1)) - if(nc.ge.48 .and. nc.le.57) then - n=nc-48 - else if(nc.ge.65 .and. nc.le.90) then - n=nc-65+10 - else - n=38 - endif - nadd=1 - ng=60000-32768+n - else if(call1(i1+3:i1+3).eq.' ') then -! Two-character numerical suffix, /10 to /99 - call0=call1(:i1-1) - call packcall(call0,n1,text) - nadd=1 - n=10*(ichar(call1(i1+1:i1+1))-48) + ichar(call1(i1+2:i1+2)) - 48 - nadd=1 - ng=60000 + 26 + n - else -! Prefix of 1 to 3 characters - pfx=call1(:i1-1) - if(pfx(3:3).eq.' ') pfx=' '//pfx(1:2) - if(pfx(3:3).eq.' ') pfx=' '//pfx(1:2) - call0=call1(i1+1:) - call packcall(call0,n1,text) - - ng=0 - do i=1,3 - nc=ichar(pfx(i:i)) - if(nc.ge.48 .and. nc.le.57) then - n=nc-48 - else if(nc.ge.65 .and. nc.le.90) then - n=nc-65+10 - else - n=36 - endif - ng=37*ng + n - enddo - nadd=0 - if(ng.ge.32768) then - ng=ng-32768 - nadd=1 - endif - endif - - return -end subroutine packpfx - -end module packjt +module packjt + + contains + +subroutine packbits(dbits,nsymd,m0,sym) + + ! Pack 0s and 1s from dbits() into sym() with m0 bits per word. + ! NB: nsymd is the number of packed output words. + + integer sym(:) + integer*1 dbits(:) + + k=0 + do i=1,nsymd + n=0 + do j=1,m0 + k=k+1 + m=dbits(k) + n=ior(ishft(n,1),m) + enddo + sym(i)=n + enddo + + return + end subroutine packbits + + subroutine unpackbits(sym,nsymd,m0,dbits) + + ! Unpack bits from sym() into dbits(), one bit per byte. + ! NB: nsymd is the number of input words, and m0 their length. + ! there will be m0*nsymd output bytes, each 0 or 1. + + integer sym(:) + integer*1 dbits(:) + + k=0 + do i=1,nsymd + mask=ishft(1,m0-1) + do j=1,m0 + k=k+1 + dbits(k)=0 + if(iand(mask,sym(i)).ne.0) dbits(k)=1 + mask=ishft(mask,-1) + enddo + enddo + + return + end subroutine unpackbits + + subroutine packcall(callsign,ncall,text) + + ! Pack a valid callsign into a 28-bit integer. + + parameter (NBASE=37*36*10*27*27*27) + character callsign*6,c*1,tmp*6 + logical text + + text=.false. + + ! Work-around for Swaziland prefix: + if(callsign(1:4).eq.'3DA0') callsign='3D0'//callsign(5:6) + + if(callsign(1:3).eq.'CQ ') then + ncall=NBASE + 1 + if(callsign(4:4).ge.'0' .and. callsign(4:4).le.'9' .and. & + callsign(5:5).ge.'0' .and. callsign(5:5).le.'9' .and. & + callsign(6:6).ge.'0' .and. callsign(6:6).le.'9') then + read(callsign(4:6),*) nfreq + ncall=NBASE + 3 + nfreq + endif + return + else if(callsign(1:4).eq.'QRZ ') then + ncall=NBASE + 2 + return + else if(callsign(1:3).eq.'DE ') then + ncall=267796945 + return + endif + + tmp=' ' + if(callsign(3:3).ge.'0' .and. callsign(3:3).le.'9') then + tmp=callsign + else if(callsign(2:2).ge.'0' .and. callsign(2:2).le.'9') then + if(callsign(6:6).ne.' ') then + text=.true. + return + endif + tmp=' '//callsign(:5) + else + text=.true. + return + endif + + do i=1,6 + c=tmp(i:i) + if(c.ge.'a' .and. c.le.'z') & + tmp(i:i)=char(ichar(c)-ichar('a')+ichar('A')) + enddo + + n1=0 + if((tmp(1:1).ge.'A'.and.tmp(1:1).le.'Z').or.tmp(1:1).eq.' ') n1=1 + if(tmp(1:1).ge.'0' .and. tmp(1:1).le.'9') n1=1 + n2=0 + if(tmp(2:2).ge.'A' .and. tmp(2:2).le.'Z') n2=1 + if(tmp(2:2).ge.'0' .and. tmp(2:2).le.'9') n2=1 + n3=0 + if(tmp(3:3).ge.'0' .and. tmp(3:3).le.'9') n3=1 + n4=0 + if((tmp(4:4).ge.'A'.and.tmp(4:4).le.'Z').or.tmp(4:4).eq.' ') n4=1 + n5=0 + if((tmp(5:5).ge.'A'.and.tmp(5:5).le.'Z').or.tmp(5:5).eq.' ') n5=1 + n6=0 + if((tmp(6:6).ge.'A'.and.tmp(6:6).le.'Z').or.tmp(6:6).eq.' ') n6=1 + + if(n1+n2+n3+n4+n5+n6 .ne. 6) then + text=.true. + return + endif + + ncall=nchar(tmp(1:1)) + ncall=36*ncall+nchar(tmp(2:2)) + ncall=10*ncall+nchar(tmp(3:3)) + ncall=27*ncall+nchar(tmp(4:4))-10 + ncall=27*ncall+nchar(tmp(5:5))-10 + ncall=27*ncall+nchar(tmp(6:6))-10 + + return + end subroutine packcall + + subroutine unpackcall(ncall,word,iv2,psfx) + + parameter (NBASE=37*36*10*27*27*27) + character word*12,c*37,psfx*4 + + data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ '/ + + word='......' + psfx=' ' + n=ncall + iv2=0 + if(n.ge.262177560) go to 20 + word='......' + ! if(n.ge.262177560) go to 999 !Plain text message ... + i=mod(n,27)+11 + word(6:6)=c(i:i) + n=n/27 + i=mod(n,27)+11 + word(5:5)=c(i:i) + n=n/27 + i=mod(n,27)+11 + word(4:4)=c(i:i) + n=n/27 + i=mod(n,10)+1 + word(3:3)=c(i:i) + n=n/10 + i=mod(n,36)+1 + word(2:2)=c(i:i) + n=n/36 + i=n+1 + word(1:1)=c(i:i) + do i=1,4 + if(word(i:i).ne.' ') go to 10 + enddo + go to 999 + 10 word=word(i:) + go to 999 + + 20 if(n.ge.267796946) go to 999 + + ! We have a JT65v2 message + if((n.ge.262178563) .and. (n.le.264002071)) then + ! CQ with prefix + iv2=1 + n=n-262178563 + i=mod(n,37)+1 + psfx(4:4)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(3:3)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(2:2)=c(i:i) + n=n/37 + i=n+1 + psfx(1:1)=c(i:i) + + else if((n.ge.264002072) .and. (n.le.265825580)) then + ! QRZ with prefix + iv2=2 + n=n-264002072 + i=mod(n,37)+1 + psfx(4:4)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(3:3)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(2:2)=c(i:i) + n=n/37 + i=n+1 + psfx(1:1)=c(i:i) + + else if((n.ge.265825581) .and. (n.le.267649089)) then + ! DE with prefix + iv2=3 + n=n-265825581 + i=mod(n,37)+1 + psfx(4:4)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(3:3)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(2:2)=c(i:i) + n=n/37 + i=n+1 + psfx(1:1)=c(i:i) + + else if((n.ge.267649090) .and. (n.le.267698374)) then + ! CQ with suffix + iv2=4 + n=n-267649090 + i=mod(n,37)+1 + psfx(3:3)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(2:2)=c(i:i) + n=n/37 + i=n+1 + psfx(1:1)=c(i:i) + + else if((n.ge.267698375) .and. (n.le.267747659)) then + ! QRZ with suffix + iv2=5 + n=n-267698375 + i=mod(n,37)+1 + psfx(3:3)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(2:2)=c(i:i) + n=n/37 + i=n+1 + psfx(1:1)=c(i:i) + + else if((n.ge.267747660) .and. (n.le.267796944)) then + ! DE with suffix + iv2=6 + n=n-267747660 + i=mod(n,37)+1 + psfx(3:3)=c(i:i) + n=n/37 + i=mod(n,37)+1 + psfx(2:2)=c(i:i) + n=n/37 + i=n+1 + psfx(1:1)=c(i:i) + + else if(n.eq.267796945) then + ! DE with no prefix or suffix + iv2=7 + psfx = ' ' + endif + + 999 if(word(1:3).eq.'3D0') word='3DA0'//word(4:) + + return + end subroutine unpackcall + + subroutine packgrid(grid,ng,text) + + parameter (NGBASE=180*180) + character*4 grid + character*1 c1 + logical text + + text=.false. + if(grid.eq.' ') go to 90 !Blank grid is OK + + ! First, handle signal reports in the original range, -01 to -30 dB + if(grid(1:1).eq.'-') then + read(grid(2:3),*,err=800,end=800) n + if(n.ge.1 .and. n.le.30) then + ng=NGBASE+1+n + go to 900 + endif + go to 10 + else if(grid(1:2).eq.'R-') then + read(grid(3:4),*,err=800,end=800) n + if(n.ge.1 .and. n.le.30) then + ng=NGBASE+31+n + go to 900 + endif + go to 10 + ! Now check for RO, RRR, or 73 in the message field normally used for grid + else if(grid(1:4).eq.'RO ') then + ng=NGBASE+62 + go to 900 + else if(grid(1:4).eq.'RRR ') then + ng=NGBASE+63 + go to 900 + else if(grid(1:4).eq.'73 ') then + ng=NGBASE+64 + go to 900 + endif + + ! Now check for extended-range signal reports: -50 to -31, and 0 to +49. + 10 n=99 + c1=grid(1:1) + read(grid,*,err=20,end=20) n + go to 30 + 20 read(grid(2:4),*,err=30,end=30) n + 30 if(n.ge.-50 .and. n.le.49) then + if(c1.eq.'R') then + write(grid,1002) n+50 + 1002 format('LA',i2.2) + else + write(grid,1003) n+50 + 1003 format('KA',i2.2) + endif + go to 40 + endif + + ! Maybe it's free text ? + if(grid(1:1).lt.'A' .or. grid(1:1).gt.'R') text=.true. + if(grid(2:2).lt.'A' .or. grid(2:2).gt.'R') text=.true. + if(grid(3:3).lt.'0' .or. grid(3:3).gt.'9') text=.true. + if(grid(4:4).lt.'0' .or. grid(4:4).gt.'9') text=.true. + if(text) go to 900 + + ! OK, we have a properly formatted grid locator + 40 call grid2deg(grid//'mm',dlong,dlat) + long=int(dlong) + lat=int(dlat+ 90.0) + ng=((long+180)/2)*180 + lat + go to 900 + + 90 ng=NGBASE + 1 + go to 900 + + 800 text=.true. + 900 continue + + return + end subroutine packgrid + + subroutine unpackgrid(ng,grid) + + parameter (NGBASE=180*180) + character grid*4,grid6*6 + + grid=' ' + if(ng.ge.32400) go to 10 + dlat=mod(ng,180)-90 + dlong=(ng/180)*2 - 180 + 2 + call deg2grid(dlong,dlat,grid6) + grid=grid6(:4) + if(grid(1:2).eq.'KA') then + read(grid(3:4),*) n + n=n-50 + write(grid,1001) n + 1001 format(i3.2) + if(grid(1:1).eq.' ') grid(1:1)='+' + else if(grid(1:2).eq.'LA') then + read(grid(3:4),*) n + n=n-50 + write(grid,1002) n + 1002 format('R',i3.2) + if(grid(2:2).eq.' ') grid(2:2)='+' + endif + go to 900 + + 10 n=ng-NGBASE-1 + if(n.ge.1 .and.n.le.30) then + write(grid,1012) -n + 1012 format(i3.2) + else if(n.ge.31 .and.n.le.60) then + n=n-30 + write(grid,1022) -n + 1022 format('R',i3.2) + else if(n.eq.61) then + grid='RO' + else if(n.eq.62) then + grid='RRR' + else if(n.eq.63) then + grid='73' + endif + + 900 return + end subroutine unpackgrid + + subroutine packmsg(msg0,dat,itype) + + ! Packs a JT4/JT9/JT65 message into twelve 6-bit symbols + + ! itype Message Type + !-------------------- + ! 1 Standardd message + ! 2 Type 1 prefix + ! 3 Type 1 suffix + ! 4 Type 2 prefix + ! 5 Type 2 suffix + ! 6 Free text + ! -1 Does not decode correctly + + parameter (NBASE=37*36*10*27*27*27) + parameter (NBASE2=262178562) + character*22 msg0,msg + integer dat(:) + character*12 c1,c2 + character*4 c3 + character*6 grid6 + logical text1,text2,text3 + + msg=msg0 + itype=1 + call fmtmsg(msg,iz) + + if(msg(1:6).eq.'CQ DX ') msg(3:3)='9' + if(msg(1:3).eq."CQ " .and. & + msg(4:4).ge.'A' .and. msg(4:4).le.'Z' .and. & + msg(5:5).ge.'A' .and. msg(5:5).le.'Z' .and. & + msg(6:6).eq.' ') msg='E9'//msg(4:) + + ! See if it's a CQ message + if(msg(1:3).eq.'CQ ') then + i=3 + ! ... and if so, does it have a reply frequency? + if(msg(4:4).ge.'0' .and. msg(4:4).le.'9' .and. & + msg(5:5).ge.'0' .and. msg(5:5).le.'9' .and. & + msg(6:6).ge.'0' .and. msg(6:6).le.'9') i=7 + go to 1 + endif + + do i=1,22 + if(msg(i:i).eq.' ') go to 1 !Get 1st blank + enddo + go to 10 !Consider msg as plain text + + 1 ia=i + c1=msg(1:ia-1) + do i=ia+1,22 + if(msg(i:i).eq.' ') go to 2 !Get 2nd blank + enddo + go to 10 !Consider msg as plain text + + 2 ib=i + c2=msg(ia+1:ib-1) + + do i=ib+1,22 + if(msg(i:i).eq.' ') go to 3 !Get 3rd blank + enddo + go to 10 !Consider msg as plain text + + 3 ic=i + c3=' ' + if(ic.ge.ib+1) c3=msg(ib+1:ic) + if(c3.eq.'OOO ') c3=' ' !Strip out the OOO flag + call getpfx1(c1,k1,nv2a) + if(nv2a.ge.4) go to 10 + call packcall(c1,nc1,text1) + if(text1) go to 10 + call getpfx1(c2,k2,nv2b) + call packcall(c2,nc2,text2) + if(text2) go to 10 + if(nv2a.eq.2 .or. nv2a.eq.3 .or. nv2b.eq.2 .or. nv2b.eq.3) then + if(k1.lt.0 .or. k2.lt.0 .or. k1*k2.ne.0) go to 10 + if(k2.gt.0) k2=k2+450 + k=max(k1,k2) + if(k.gt.0) then + call k2grid(k,grid6) + c3=grid6(:4) + endif + endif + call packgrid(c3,ng,text3) + + if(nv2a.lt.4 .and. nv2b.lt.4 .and. (.not.text1) .and. (.not.text2) .and. & + (.not.text3)) go to 20 + + nc1=0 + if(nv2b.eq.4) then + if(c1(1:3).eq.'CQ ') nc1=262178563 + k2 + if(c1(1:4).eq.'QRZ ') nc1=264002072 + k2 + if(c1(1:3).eq.'DE ') nc1=265825581 + k2 + else if(nv2b.eq.5) then + if(c1(1:3).eq.'CQ ') nc1=267649090 + k2 + if(c1(1:4).eq.'QRZ ') nc1=267698375 + k2 + if(c1(1:3).eq.'DE ') nc1=267747660 + k2 + endif + if(nc1.ne.0) go to 20 + + ! The message will be treated as plain text. + 10 itype=6 + call packtext(msg,nc1,nc2,ng) + ng=ng+32768 + + ! Encode data into 6-bit words + 20 continue + if(itype.ne.6) itype=max(nv2a,nv2b) + dat(1)=iand(ishft(nc1,-22),63) !6 bits + dat(2)=iand(ishft(nc1,-16),63) !6 bits + dat(3)=iand(ishft(nc1,-10),63) !6 bits + dat(4)=iand(ishft(nc1, -4),63) !6 bits + dat(5)=4*iand(nc1,15)+iand(ishft(nc2,-26),3) !4+2 bits + dat(6)=iand(ishft(nc2,-20),63) !6 bits + dat(7)=iand(ishft(nc2,-14),63) !6 bits + dat(8)=iand(ishft(nc2, -8),63) !6 bits + dat(9)=iand(ishft(nc2, -2),63) !6 bits + dat(10)=16*iand(nc2,3)+iand(ishft(ng,-12),15) !2+4 bits + dat(11)=iand(ishft(ng,-6),63) + dat(12)=iand(ng,63) + + return + end subroutine packmsg + + subroutine unpackmsg(dat,msg) + + parameter (NBASE=37*36*10*27*27*27) + parameter (NGBASE=180*180) + integer dat(:) + character c1*12,c2*12,grid*4,msg*22,grid6*6,psfx*4,junk2*4 + logical cqnnn + + cqnnn=.false. + nc1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+ & + ishft(dat(4),4) + iand(ishft(dat(5),-2),15) + + nc2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) + & + ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) + & + iand(ishft(dat(10),-4),3) + + ng=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12) + + if(ng.ge.32768) then + call unpacktext(nc1,nc2,ng,msg) + go to 100 + endif + + call unpackcall(nc1,c1,iv2,psfx) + if(iv2.eq.0) then + ! This is an "original JT65" message + if(nc1.eq.NBASE+1) c1='CQ ' + if(nc1.eq.NBASE+2) c1='QRZ ' + nfreq=nc1-NBASE-3 + if(nfreq.ge.0 .and. nfreq.le.999) then + write(c1,1002) nfreq + 1002 format('CQ ',i3.3) + cqnnn=.true. + endif + endif + + call unpackcall(nc2,c2,junk1,junk2) + call unpackgrid(ng,grid) + + if(iv2.gt.0) then + ! This is a JT65v2 message + do i=1,4 + if(ichar(psfx(i:i)).eq.0) psfx(i:i)=' ' + enddo + + n1=len_trim(psfx) + n2=len_trim(c2) + if(iv2.eq.1) msg='CQ '//psfx(:n1)//'/'//c2(:n2)//' '//grid + if(iv2.eq.2) msg='QRZ '//psfx(:n1)//'/'//c2(:n2)//' '//grid + if(iv2.eq.3) msg='DE '//psfx(:n1)//'/'//c2(:n2)//' '//grid + if(iv2.eq.4) msg='CQ '//c2(:n2)//'/'//psfx(:n1)//' '//grid + if(iv2.eq.5) msg='QRZ '//c2(:n2)//'/'//psfx(:n1)//' '//grid + if(iv2.eq.6) msg='DE '//c2(:n2)//'/'//psfx(:n1)//' '//grid + if(iv2.eq.7) msg='DE '//c2(:n2)//' '//grid + if(iv2.eq.8) msg=' ' + go to 100 + else + + endif + + grid6=grid//'ma' + call grid2k(grid6,k) + if(k.ge.1 .and. k.le.450) call getpfx2(k,c1) + if(k.ge.451 .and. k.le.900) call getpfx2(k,c2) + + i=index(c1,char(0)) + if(i.ge.3) c1=c1(1:i-1)//' ' + i=index(c2,char(0)) + if(i.ge.3) c2=c2(1:i-1)//' ' + + msg=' ' + j=0 + if(cqnnn) then + msg=c1//' ' + j=7 !### ??? ### + go to 10 + endif + + do i=1,12 + j=j+1 + msg(j:j)=c1(i:i) + if(c1(i:i).eq.' ') go to 10 + enddo + j=j+1 + msg(j:j)=' ' + + 10 do i=1,12 + if(j.le.21) j=j+1 + msg(j:j)=c2(i:i) + if(c2(i:i).eq.' ') go to 20 + enddo + if(j.le.21) j=j+1 + msg(j:j)=' ' + + 20 if(k.eq.0) then + do i=1,4 + if(j.le.21) j=j+1 + msg(j:j)=grid(i:i) + enddo + if(j.le.21) j=j+1 + msg(j:j)=' ' + endif + + 100 continue + if(msg(1:6).eq.'CQ9DX ') msg(3:3)=' ' + if(msg(1:2).eq.'E9' .and. & + msg(3:3).ge.'A' .and. msg(3:3).le.'Z' .and. & + msg(4:4).ge.'A' .and. msg(4:4).le.'Z' .and. & + msg(5:5).eq.' ') msg='CQ '//msg(3:) + + return + end subroutine unpackmsg + + subroutine packtext(msg,nc1,nc2,nc3) + + parameter (MASK28=2**28 - 1) + character*13 msg + character*42 c + data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?'/ + + nc1=0 + nc2=0 + nc3=0 + + do i=1,5 !First 5 characters in nc1 + do j=1,42 !Get character code + if(msg(i:i).eq.c(j:j)) go to 10 + enddo + j=37 + 10 j=j-1 !Codes should start at zero + nc1=42*nc1 + j + enddo + + do i=6,10 !Characters 6-10 in nc2 + do j=1,42 !Get character code + if(msg(i:i).eq.c(j:j)) go to 20 + enddo + j=37 + 20 j=j-1 !Codes should start at zero + nc2=42*nc2 + j + enddo + + do i=11,13 !Characters 11-13 in nc3 + do j=1,42 !Get character code + if(msg(i:i).eq.c(j:j)) go to 30 + enddo + j=37 + 30 j=j-1 !Codes should start at zero + nc3=42*nc3 + j + enddo + + ! We now have used 17 bits in nc3. Must move one each to nc1 and nc2. + nc1=nc1+nc1 + if(iand(nc3,32768).ne.0) nc1=nc1+1 + nc2=nc2+nc2 + if(iand(nc3,65536).ne.0) nc2=nc2+1 + nc3=iand(nc3,32767) + + return + end subroutine packtext + + subroutine unpacktext(nc1,nc2,nc3,msg) + + character*22 msg + character*44 c + data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?'/ + + nc3=iand(nc3,32767) !Remove the "plain text" bit + if(iand(nc1,1).ne.0) nc3=nc3+32768 + nc1=nc1/2 + if(iand(nc2,1).ne.0) nc3=nc3+65536 + nc2=nc2/2 + + do i=5,1,-1 + j=mod(nc1,42)+1 + msg(i:i)=c(j:j) + nc1=nc1/42 + enddo + + do i=10,6,-1 + j=mod(nc2,42)+1 + msg(i:i)=c(j:j) + nc2=nc2/42 + enddo + + do i=13,11,-1 + j=mod(nc3,42)+1 + msg(i:i)=c(j:j) + nc3=nc3/42 + enddo + msg(14:22) = ' ' + + return + end subroutine unpacktext + + subroutine getpfx1(callsign,k,nv2) + + character*12 callsign0,callsign,lof,rof + character*8 c + character addpfx*8,tpfx*4,tsfx*3 + logical ispfx,issfx,invalid + common/pfxcom/addpfx + include 'pfx.f90' + + callsign0=callsign + nv2=1 + iz=index(callsign,' ') - 1 + if(iz.lt.0) iz=12 + islash=index(callsign(1:iz),'/') + k=0 + ! if(k.eq.0) go to 10 !Tnx to DL9RDZ for reminder:this was for tests only! + c=' ' + if(islash.gt.0 .and. islash.le.(iz-4)) then + ! Add-on prefix + c=callsign(1:islash-1) + callsign=callsign(islash+1:iz) + do i=1,NZ + if(pfx(i)(1:4).eq.c) then + k=i + nv2=2 + go to 10 + endif + enddo + if(addpfx.eq.c) then + k=449 + nv2=2 + go to 10 + endif + + else if(islash.eq.(iz-1)) then + ! Add-on suffix + c=callsign(islash+1:iz) + callsign=callsign(1:islash-1) + do i=1,NZ2 + if(sfx(i).eq.c(1:1)) then + k=400+i + nv2=3 + go to 10 + endif + enddo + endif + + 10 if(islash.ne.0 .and.k.eq.0) then + ! Original JT65 would force this compound callsign to be treated as + ! plain text. In JT65v2, we will encode the prefix or suffix into nc1. + ! The task here is to compute the proper value of k. + lof=callsign0(:islash-1) + rof=callsign0(islash+1:) + llof=len_trim(lof) + lrof=len_trim(rof) + ispfx=(llof.gt.0 .and. llof.le.4) + issfx=(lrof.gt.0 .and. lrof.le.3) + invalid=.not.(ispfx.or.issfx) + if(ispfx.and.issfx) then + if(llof.lt.3) issfx=.false. + if(lrof.lt.3) ispfx=.false. + if(ispfx.and.issfx) then + i=ichar(callsign0(islash-1:islash-1)) + if(i.ge.ichar('0') .and. i.le.ichar('9')) then + issfx=.false. + else + ispfx=.false. + endif + endif + endif + + if(invalid) then + k=-1 + else + if(ispfx) then + tpfx=lof(1:4) + k=nchar(tpfx(1:1)) + k=37*k + nchar(tpfx(2:2)) + k=37*k + nchar(tpfx(3:3)) + k=37*k + nchar(tpfx(4:4)) + nv2=4 + i=index(callsign0,'/') + callsign=callsign0(:i-1) + callsign=callsign0(i+1:) + endif + if(issfx) then + tsfx=rof(1:3) + k=nchar(tsfx(1:1)) + k=37*k + nchar(tsfx(2:2)) + k=37*k + nchar(tsfx(3:3)) + nv2=5 + i=index(callsign0,'/') + callsign=callsign0(:i-1) + endif + endif + endif + + return + end subroutine getpfx1 + + subroutine getpfx2(k0,callsign) + + character callsign*12 + include 'pfx.f90' + character addpfx*8 + common/pfxcom/addpfx + + k=k0 + if(k.gt.450) k=k-450 + if(k.ge.1 .and. k.le.NZ) then + iz=index(pfx(k),' ') - 1 + callsign=pfx(k)(1:iz)//'/'//callsign + else if(k.ge.401 .and. k.le.400+NZ2) then + iz=index(callsign,' ') - 1 + callsign=callsign(1:iz)//'/'//sfx(k-400) + else if(k.eq.449) then + iz=index(addpfx,' ') - 1 + if(iz.lt.1) iz=8 + callsign=addpfx(1:iz)//'/'//callsign + endif + + return + end subroutine getpfx2 + + subroutine grid2k(grid,k) + + character*6 grid + + call grid2deg(grid,xlong,xlat) + nlong=nint(xlong) + nlat=nint(xlat) + k=0 + if(nlat.ge.85) k=5*(nlong+179)/2 + nlat-84 + + return + end subroutine grid2k + + subroutine k2grid(k,grid) + character grid*6 + + nlong=2*mod((k-1)/5,90)-179 + if(k.gt.450) nlong=nlong+180 + nlat=mod(k-1,5)+ 85 + dlat=nlat + dlong=nlong + call deg2grid(dlong,dlat,grid) + + return + end subroutine k2grid + + subroutine grid2n(grid,n) + character*4 grid + + i1=ichar(grid(1:1))-ichar('A') + i2=ichar(grid(3:3))-ichar('0') + i=10*i1 + i2 + n=-i - 31 + + return + end subroutine grid2n + + subroutine n2grid(n,grid) + character*4 grid + + if(n.gt.-31 .or. n.lt.-70) stop 'Error in n2grid' + i=-(n+31) !NB: 0 <= i <= 39 + i1=i/10 + i2=mod(i,10) + grid(1:1)=char(ichar('A')+i1) + grid(2:2)='A' + grid(3:3)=char(ichar('0')+i2) + grid(4:4)='0' + + return + end subroutine n2grid + + function nchar(c) + + ! Convert ascii number, letter, or space to 0-36 for callsign packing. + + character c*1 + + n=0 !Silence compiler warning + if(c.ge.'0' .and. c.le.'9') then + n=ichar(c)-ichar('0') + else if(c.ge.'A' .and. c.le.'Z') then + n=ichar(c)-ichar('A') + 10 + else if(c.ge.'a' .and. c.le.'z') then + n=ichar(c)-ichar('a') + 10 + else if(c.ge.' ') then + n=36 + else + Print*,'Invalid character in callsign ',c,' ',ichar(c) + stop + endif + nchar=n + + return + end function nchar + + subroutine pack50(n1,n2,dat) + + integer*1 dat(:),i1 + + i1=iand(ishft(n1,-20),255) !8 bits + dat(1)=i1 + i1=iand(ishft(n1,-12),255) !8 bits + dat(2)=i1 + i1=iand(ishft(n1, -4),255) !8 bits + dat(3)=i1 + i1=16*iand(n1,15)+iand(ishft(n2,-18),15) !4+4 bits + dat(4)=i1 + i1=iand(ishft(n2,-10),255) !8 bits + dat(5)=i1 + i1=iand(ishft(n2, -2),255) !8 bits + dat(6)=i1 + i1=64*iand(n2,3) !2 bits + dat(7)=i1 + dat(8)=0 + dat(9)=0 + dat(10)=0 + dat(11)=0 + + return + end subroutine pack50 + +subroutine packpfx(call1,n1,ng,nadd) + + character*12 call1,call0 + character*3 pfx + logical text + + i1=index(call1,'/') + if(call1(i1+2:i1+2).eq.' ') then +! Single-character add-on suffix (maybe also fourth suffix letter?) + call0=call1(:i1-1) + call packcall(call0,n1,text) + nadd=1 + nc=ichar(call1(i1+1:i1+1)) + if(nc.ge.48 .and. nc.le.57) then + n=nc-48 + else if(nc.ge.65 .and. nc.le.90) then + n=nc-65+10 + else + n=38 + endif + nadd=1 + ng=60000-32768+n + else if(call1(i1+3:i1+3).eq.' ') then +! Two-character numerical suffix, /10 to /99 + call0=call1(:i1-1) + call packcall(call0,n1,text) + nadd=1 + n=10*(ichar(call1(i1+1:i1+1))-48) + ichar(call1(i1+2:i1+2)) - 48 + nadd=1 + ng=60000 + 26 + n + else +! Prefix of 1 to 3 characters + pfx=call1(:i1-1) + if(pfx(3:3).eq.' ') pfx=' '//pfx(1:2) + if(pfx(3:3).eq.' ') pfx=' '//pfx(1:2) + call0=call1(i1+1:) + call packcall(call0,n1,text) + + ng=0 + do i=1,3 + nc=ichar(pfx(i:i)) + if(nc.ge.48 .and. nc.le.57) then + n=nc-48 + else if(nc.ge.65 .and. nc.le.90) then + n=nc-65+10 + else + n=36 + endif + ng=37*ng + n + enddo + nadd=0 + if(ng.ge.32768) then + ng=ng-32768 + nadd=1 + endif + endif + + return +end subroutine packpfx + +end module packjt diff --git a/libm65/pctile.f90 b/map65/libm65/pctile.f90 similarity index 94% rename from libm65/pctile.f90 rename to map65/libm65/pctile.f90 index 4f6164e2b..92253cddf 100644 --- a/libm65/pctile.f90 +++ b/map65/libm65/pctile.f90 @@ -1,22 +1,22 @@ -subroutine pctile(x,npts,npct,xpct) - - parameter (NMAX=100000) - real*4 x(npts) - real*4 tmp(NMAX) - - if(npts.le.0) then - xpct=1.0 - go to 900 - endif - if(npts.gt.NMAX) stop - - tmp(1:npts)=x - call shell(npts,tmp) - j=nint(npts*0.01*npct) - if(j.lt.1) j=1 - if(j.gt.npts) j=npts - xpct=tmp(j) - -900 continue - return -end subroutine pctile +subroutine pctile(x,npts,npct,xpct) + + parameter (NMAX=100000) + real*4 x(npts) + real*4 tmp(NMAX) + + if(npts.le.0) then + xpct=1.0 + go to 900 + endif + if(npts.gt.NMAX) stop + + tmp(1:npts)=x + call shell(npts,tmp) + j=nint(npts*0.01*npct) + if(j.lt.1) j=1 + if(j.gt.npts) j=npts + xpct=tmp(j) + +900 continue + return +end subroutine pctile diff --git a/libm65/pfx.f90 b/map65/libm65/pfx.f90 similarity index 100% rename from libm65/pfx.f90 rename to map65/libm65/pfx.f90 diff --git a/libm65/pfxdump.f90 b/map65/libm65/pfxdump.f90 similarity index 100% rename from libm65/pfxdump.f90 rename to map65/libm65/pfxdump.f90 diff --git a/libm65/ptt.c b/map65/libm65/ptt.c similarity index 100% rename from libm65/ptt.c rename to map65/libm65/ptt.c diff --git a/libm65/ptt_unix.c b/map65/libm65/ptt_unix.c similarity index 100% rename from libm65/ptt_unix.c rename to map65/libm65/ptt_unix.c diff --git a/libm65/q65b.f90 b/map65/libm65/q65b.f90 similarity index 100% rename from libm65/q65b.f90 rename to map65/libm65/q65b.f90 diff --git a/libm65/qra64/Makefile.Win b/map65/libm65/qra64/Makefile.Win similarity index 100% rename from libm65/qra64/Makefile.Win rename to map65/libm65/qra64/Makefile.Win diff --git a/libm65/qra64/fadengauss.c b/map65/libm65/qra64/fadengauss.c similarity index 100% rename from libm65/qra64/fadengauss.c rename to map65/libm65/qra64/fadengauss.c diff --git a/libm65/qra64/fadenlorentz.c b/map65/libm65/qra64/fadenlorentz.c similarity index 100% rename from libm65/qra64/fadenlorentz.c rename to map65/libm65/qra64/fadenlorentz.c diff --git a/libm65/qra64/main.c b/map65/libm65/qra64/main.c similarity index 100% rename from libm65/qra64/main.c rename to map65/libm65/qra64/main.c diff --git a/libm65/qra64/qra64.c b/map65/libm65/qra64/qra64.c similarity index 100% rename from libm65/qra64/qra64.c rename to map65/libm65/qra64/qra64.c diff --git a/libm65/qra64/qra64.h b/map65/libm65/qra64/qra64.h similarity index 100% rename from libm65/qra64/qra64.h rename to map65/libm65/qra64/qra64.h diff --git a/libm65/qra64/qra64_all.c b/map65/libm65/qra64/qra64_all.c similarity index 100% rename from libm65/qra64/qra64_all.c rename to map65/libm65/qra64/qra64_all.c diff --git a/libm65/qra64/qra64_subs.c b/map65/libm65/qra64/qra64_subs.c similarity index 100% rename from libm65/qra64/qra64_subs.c rename to map65/libm65/qra64/qra64_subs.c diff --git a/libm65/qra64/qra64example.txt b/map65/libm65/qra64/qra64example.txt similarity index 100% rename from libm65/qra64/qra64example.txt rename to map65/libm65/qra64/qra64example.txt diff --git a/libm65/qra64/qra64sim.f90 b/map65/libm65/qra64/qra64sim.f90 similarity index 100% rename from libm65/qra64/qra64sim.f90 rename to map65/libm65/qra64/qra64sim.f90 diff --git a/libm65/qra64b.f90 b/map65/libm65/qra64b.f90 similarity index 96% rename from libm65/qra64b.f90 rename to map65/libm65/qra64b.f90 index fe21bcd43..71b7300e8 100644 --- a/libm65/qra64b.f90 +++ b/map65/libm65/qra64b.f90 @@ -1,65 +1,65 @@ -subroutine qra64b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, & - mycall_12,hiscall_12,hisgrid_6,mode64,nwrite_qra64) - - parameter (MAXFFT1=5376000) !56*96000 - parameter (MAXFFT2=336000) !56*6000 (downsampled by 1/16) - complex ca(MAXFFT1),cb(MAXFFT1) !FFTs of raw x,y data - complex cx(0:MAXFFT2-1),cy(0:MAXFFT2-1) - logical xpol - real*8 fcenter - character*12 mycall_12,hiscall_12 - character*6 hisgrid_6 - common/cacb/ca,cb - data nzap/3/ - - open(17,file='red.dat',status='unknown') - - nfft1=MAXFFT1 - nfft2=MAXFFT2 - df=96000.0/NFFT1 - if(nfsample.eq.95238) then - nfft1=5120000 - nfft2=322560 - df=96000.0/nfft1 - endif - nh=nfft2/2 - ikhz0=nint(1000.0*(fcenter-int(fcenter))) - k0=((ikhz-ikhz0+48.0+1.27)*1000.0+nfcal)/df - if(k0.lt.nh .or. k0.gt.nfft1-nh) go to 900 - - fac=1.0/nfft2 - cx(0:nh)=ca(k0:k0+nh) - cx(nh+1:nfft2-1)=ca(k0-nh+1:k0-1) - cx=fac*cx - if(xpol) then - cy(0:nh)=cb(k0:k0+nh) - cy(nh+1:nfft2-1)=cb(k0-nh+1:k0-1) - cy=fac*cy - endif - -! Here cx and cy (if xpol) are frequency-domain data around the selected -! QSO frequency, taken from the full-length FFT computed in filbig(). -! Values for fsample, nfft1, nfft2, df, and the downsampled data rate -! are as follows: - -! fSample nfft1 df nfft2 fDownSampled -! (Hz) (Hz) (Hz) -!---------------------------------------------------- -! 96000 5376000 0.017857143 336000 6000.000 -! 95238 5120000 0.018601172 322560 5999.994 - -! write(60) cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & -! hiscall_12,hisgrid_6 - - if(nzap.gt.0) call qra64zap(cx,cy,xpol,nzap) - -! Transform back to time domain with sample rate 6000 Hz. - call four2a(cx,nfft2,1,-1,1) - call four2a(cy,nfft2,1,-1,1) - - call qra64c(cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & - hiscall_12,hisgrid_6,mode64,nwrite_qra64) - close(17) - -900 return -end subroutine qra64b +subroutine qra64b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, & + mycall_12,hiscall_12,hisgrid_6,mode64,nwrite_qra64) + + parameter (MAXFFT1=5376000) !56*96000 + parameter (MAXFFT2=336000) !56*6000 (downsampled by 1/16) + complex ca(MAXFFT1),cb(MAXFFT1) !FFTs of raw x,y data + complex cx(0:MAXFFT2-1),cy(0:MAXFFT2-1) + logical xpol + real*8 fcenter + character*12 mycall_12,hiscall_12 + character*6 hisgrid_6 + common/cacb/ca,cb + data nzap/3/ + + open(17,file='red.dat',status='unknown') + + nfft1=MAXFFT1 + nfft2=MAXFFT2 + df=96000.0/NFFT1 + if(nfsample.eq.95238) then + nfft1=5120000 + nfft2=322560 + df=96000.0/nfft1 + endif + nh=nfft2/2 + ikhz0=nint(1000.0*(fcenter-int(fcenter))) + k0=((ikhz-ikhz0+48.0+1.27)*1000.0+nfcal)/df + if(k0.lt.nh .or. k0.gt.nfft1-nh) go to 900 + + fac=1.0/nfft2 + cx(0:nh)=ca(k0:k0+nh) + cx(nh+1:nfft2-1)=ca(k0-nh+1:k0-1) + cx=fac*cx + if(xpol) then + cy(0:nh)=cb(k0:k0+nh) + cy(nh+1:nfft2-1)=cb(k0-nh+1:k0-1) + cy=fac*cy + endif + +! Here cx and cy (if xpol) are frequency-domain data around the selected +! QSO frequency, taken from the full-length FFT computed in filbig(). +! Values for fsample, nfft1, nfft2, df, and the downsampled data rate +! are as follows: + +! fSample nfft1 df nfft2 fDownSampled +! (Hz) (Hz) (Hz) +!---------------------------------------------------- +! 96000 5376000 0.017857143 336000 6000.000 +! 95238 5120000 0.018601172 322560 5999.994 + +! write(60) cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & +! hiscall_12,hisgrid_6 + + if(nzap.gt.0) call qra64zap(cx,cy,xpol,nzap) + +! Transform back to time domain with sample rate 6000 Hz. + call four2a(cx,nfft2,1,-1,1) + call four2a(cy,nfft2,1,-1,1) + + call qra64c(cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & + hiscall_12,hisgrid_6,mode64,nwrite_qra64) + close(17) + +900 return +end subroutine qra64b diff --git a/libm65/qra64c.f90 b/map65/libm65/qra64c.f90 similarity index 96% rename from libm65/qra64c.f90 rename to map65/libm65/qra64c.f90 index 7ef7b27a7..fab651059 100644 --- a/libm65/qra64c.f90 +++ b/map65/libm65/qra64c.f90 @@ -1,221 +1,221 @@ -subroutine qra64c(cx,cy,nutc,nqd,ikhz,nfqso,ntol,xpol,mycall_12, & - hiscall_12,hisgrid_6,mode64,nwrite_qra64) - - use packjt - parameter (NFFT2=336000) !56*6000 (downsampled by 1/16) - parameter (NMAX=60*12000,LN=1152*63) - - character decoded*22 - character*12 mycall_12,hiscall_12 - character*6 mycall,hiscall,hisgrid_6,grid - character*4 hisgrid - character cp*1,cmode*2 - logical xpol,ltext - complex cx(0:NFFT2-1),cy(0:NFFT2-1) - complex c00(0:720000) !Complex spectrum of dd() - complex c0(0:720000) !Complex data for dd() - real a(3) - real s3(LN) !Symbol spectra - real s3a(LN) !Symbol spectra - integer dat4(12) !Decoded message (as 12 integers) - integer dat4x(12) - integer nap(0:11) - data nap/0,2,3,2,3,4,2,3,6,4,6,6/,cmode/'$'/ - data nc1z/-1/,nc2z/-1/,ng2z/-1/,maxaptypez/-1/ - save - -! For now: - nf1=-3000 - nf2=3000 - ! mode64=1 - minsync=-1 - ndepth=3 - emedelay=2.5 - - irc=-1 - nwrite_qra64=0 - decoded=' ' - nft=99 - mycall=mycall_12(1:6) - hiscall=hiscall_12(1:6) - hisgrid=hisgrid_6(1:4) - call packcall(mycall,nc1,ltext) - call packcall(hiscall,nc2,ltext) - call packgrid(hisgrid,ng2,ltext) - nSubmode=0 - if(mode64.eq.2) nSubmode=1 - if(mode64.eq.4) nSubmode=2 - if(mode64.eq.8) nSubmode=3 - if(mode64.eq.16) nSubmode=4 - cmode(2:2)=char(ichar('A')+nSubmode) - b90=1.0 - nFadingModel=1 - maxaptype=4 - if(iand(ndepth,64).ne.0) maxaptype=5 - if(nc1.ne.nc1z .or. nc2.ne.nc2z .or. ng2.ne.ng2z .or. & - maxaptype.ne.maxaptypez) then - do naptype=0,maxaptype - if(naptype.eq.2 .and. maxaptype.eq.4) cycle - call qra64_dec(s3,nc1,nc2,ng2,naptype,1,nSubmode,b90, & - nFadingModel,dat4,snr2,irc) - enddo - nc1z=nc1 - nc2z=nc2 - ng2z=ng2 - maxaptypez=maxaptype - endif - naptype=maxaptype - npts2=NFFT2 - - ipz=0 - if(xpol) ipz=3 - do ip=0,ipz - if(ip.eq.0) c00(0:NFFT2-1)=conjg(cx) - if(ip.eq.1) c00(0:NFFT2-1)=0.707*conjg(cx+cy) - if(ip.eq.2) c00(0:NFFT2-1)=conjg(cy) - if(ip.eq.3) c00(0:NFFT2-1)=0.707*conjg(cx-cy) - - call sync64(c00,nf1,nf2,nfqso,ntol,mode64,emedelay,dtx,f0,jpk0,sync, & - sync2,width) - - nfreq=nint(f0) - if(mode64.eq.1 .and. minsync.ge.0 .and. (sync-7.0).lt.minsync) go to 900 - a=0. - a(1)=-f0 - call twkfreq(c00,c0,npts2,6000.0,a) - - irc=-99 - s3lim=20. - itryz=5 - itz=11 - if(mode64.eq.4) itz=9 - if(mode64.eq.2) itz=7 - if(mode64.eq.1) itz=5 - - if(mode64.eq.1) then - itz=0 - itryz=1 - endif - - LL=64*(mode64+2) - NN=63 - napmin=99 - do itry0=1,itryz - idt=itry0/2 - if(mod(itry0,2).eq.0) idt=-idt - jpk=jpk0 + 750*idt - call spec64(c0,npts2,mode64,jpk,s3a,LL,NN) - call pctile(s3a,LL*NN,40,base) - s3a=s3a/base - where(s3a(1:LL*NN)>s3lim) s3a(1:LL*NN)=s3lim - do iter=itz,0,-2 - b90=1.728**iter - if(b90.gt.230.0) cycle - if(b90.lt.0.15*width) exit - s3(1:LL*NN)=s3a(1:LL*NN) - call timer('qra64_de',0) - call qra64_dec(s3,nc1,nc2,ng2,naptype,0,nSubmode,b90, & - nFadingModel,dat4,snr2,irc) - call timer('qra64_de',1) - if(irc.eq.0) go to 10 - if(irc.gt.0) call badmsg(irc,dat4,nc1,nc2,ng2) - iirc=max(0,min(irc,11)) - if(irc.gt.0 .and. nap(iirc).lt.napmin) then - dat4x=dat4 - b90x=b90 - snr2x=snr2 - napmin=nap(iirc) - irckeep=irc - dtxkeep=jpk/6000.0 - 1.0 - itry0keep=itry0 - iterkeep=iter - npolkeep=ip*45 - endif - enddo - if(irc.eq.0) goto 5 - enddo - enddo - -5 if(napmin.ne.99) then - dat4=dat4x - b90=b90x - snr2=snr2x - irc=irckeep - dtx=dtxkeep - itry0=itry0keep - iter=iterkeep - npol=npolkeep - endif -10 decoded=' ' - - if(irc.ge.0) then - if(irc.eq.0) npol=ip*45 - call unpackmsg(dat4,decoded) !Unpack the user message - call fmtmsg(decoded,iz) - if(index(decoded,"000AAA ").ge.1) then - ! Suppress a certain type of garbage decode. - decoded=' ' - irc=-1 - endif - nft=100 + irc - nsnr=nint(snr2) - else - snr2=0. - endif - -900 if(irc.lt.0) then - sy=max(1.0,sync) - if(nSubmode.eq.0) nsnr=nint(10.0*log10(sy)-35.0) !A - if(nSubmode.eq.1) nsnr=nint(10.0*log10(sy)-34.0) !B - if(nSubmode.eq.2) nsnr=nint(10.0*log10(sy)-29.0) !C - if(nSubmode.eq.3) nsnr=nint(10.0*log10(sy)-29.0) !D - if(nSubmode.eq.4) nsnr=nint(10.0*log10(sy)-24.0) !E - endif - -! If Tx station's grid is in decoded message, compute optimum TxPol - i1=index(decoded,' ') - i2=index(decoded(i1+1:),' ') + i1 - grid=' ' - if(i2.ge.8 .and. i2.le.18) grid=decoded(i2+1:i2+4)//'mm' - ntxpol=0 - cp=' ' - if(xpol) then - if(grid(1:1).ge.'A' .and. grid(1:1).le.'R' .and. & - grid(2:2).ge.'A' .and. grid(2:2).le.'R' .and. & - grid(3:3).ge.'0' .and. grid(3:3).le.'9' .and. & - grid(4:4).ge.'0' .and. grid(4:4).le.'9') then - ntxpol=mod(npol-nint(2.0*dpol(mygrid,grid))+720,180) - if(nxant.eq.0) then - cp='H' - if(ntxpol.gt.45 .and. ntxpol.le.135) cp='V' - else - cp='/' - if(ntxpol.ge.90 .and. ntxpol.lt.180) cp='\\' - endif - endif - endif - - if(irc.ge.0) then - write(*,1010) ikHz,nfreq,npol,nutc,dtx,nsnr,cmode(1:1),decoded, & - irc,ntxpol,cp -1010 format('!',i3,i5,i4,i6.4,f5.1,i5,1x,a1,1x,a22,i2,5x,i5,1x,a1) - nwrite_qra64=nwrite_qra64+1 - freq=144.0 + 0.001*ikhz - write(21,1014) freq,nfreq,dtx,npol,nsnr,nutc,decoded,cp, & - cmode(1:1),cmode(2:2) -1014 format(f8.3,i5,f5.1,2i4,i5.4,2x,a22,2x,a1,3x,a1,1x,a1) - - if(index(decoded,'CQ ').gt.0 .or. index(decoded,'QRZ ').gt.0 .or. & - index(decoded,'QRT ').gt.0 .or. index(decoded,'CQV ').gt.0 .or. & - index(decoded,'CQH ').gt.0) then - write(19,1016) ikhz,nfreq,npol,nutc,dtx,nsnr,decoded,0,cmode -1016 format(i3,i5,i4,i5.4,f7.1,i4,2x,a22,i3,1x,a2) - flush(19) - endif - else - write(*,1010) ikHz,nfreq,npol,nutc,dtx,nsnr - nwrite_qra64=nwrite_qra64+1 - endif - - return -end subroutine qra64c +subroutine qra64c(cx,cy,nutc,nqd,ikhz,nfqso,ntol,xpol,mycall_12, & + hiscall_12,hisgrid_6,mode64,nwrite_qra64) + + use packjt + parameter (NFFT2=336000) !56*6000 (downsampled by 1/16) + parameter (NMAX=60*12000,LN=1152*63) + + character decoded*22 + character*12 mycall_12,hiscall_12 + character*6 mycall,hiscall,hisgrid_6,grid + character*4 hisgrid + character cp*1,cmode*2 + logical xpol,ltext + complex cx(0:NFFT2-1),cy(0:NFFT2-1) + complex c00(0:720000) !Complex spectrum of dd() + complex c0(0:720000) !Complex data for dd() + real a(3) + real s3(LN) !Symbol spectra + real s3a(LN) !Symbol spectra + integer dat4(12) !Decoded message (as 12 integers) + integer dat4x(12) + integer nap(0:11) + data nap/0,2,3,2,3,4,2,3,6,4,6,6/,cmode/'$'/ + data nc1z/-1/,nc2z/-1/,ng2z/-1/,maxaptypez/-1/ + save + +! For now: + nf1=-3000 + nf2=3000 + ! mode64=1 + minsync=-1 + ndepth=3 + emedelay=2.5 + + irc=-1 + nwrite_qra64=0 + decoded=' ' + nft=99 + mycall=mycall_12(1:6) + hiscall=hiscall_12(1:6) + hisgrid=hisgrid_6(1:4) + call packcall(mycall,nc1,ltext) + call packcall(hiscall,nc2,ltext) + call packgrid(hisgrid,ng2,ltext) + nSubmode=0 + if(mode64.eq.2) nSubmode=1 + if(mode64.eq.4) nSubmode=2 + if(mode64.eq.8) nSubmode=3 + if(mode64.eq.16) nSubmode=4 + cmode(2:2)=char(ichar('A')+nSubmode) + b90=1.0 + nFadingModel=1 + maxaptype=4 + if(iand(ndepth,64).ne.0) maxaptype=5 + if(nc1.ne.nc1z .or. nc2.ne.nc2z .or. ng2.ne.ng2z .or. & + maxaptype.ne.maxaptypez) then + do naptype=0,maxaptype + if(naptype.eq.2 .and. maxaptype.eq.4) cycle + call qra64_dec(s3,nc1,nc2,ng2,naptype,1,nSubmode,b90, & + nFadingModel,dat4,snr2,irc) + enddo + nc1z=nc1 + nc2z=nc2 + ng2z=ng2 + maxaptypez=maxaptype + endif + naptype=maxaptype + npts2=NFFT2 + + ipz=0 + if(xpol) ipz=3 + do ip=0,ipz + if(ip.eq.0) c00(0:NFFT2-1)=conjg(cx) + if(ip.eq.1) c00(0:NFFT2-1)=0.707*conjg(cx+cy) + if(ip.eq.2) c00(0:NFFT2-1)=conjg(cy) + if(ip.eq.3) c00(0:NFFT2-1)=0.707*conjg(cx-cy) + + call sync64(c00,nf1,nf2,nfqso,ntol,mode64,emedelay,dtx,f0,jpk0,sync, & + sync2,width) + + nfreq=nint(f0) + if(mode64.eq.1 .and. minsync.ge.0 .and. (sync-7.0).lt.minsync) go to 900 + a=0. + a(1)=-f0 + call twkfreq(c00,c0,npts2,6000.0,a) + + irc=-99 + s3lim=20. + itryz=5 + itz=11 + if(mode64.eq.4) itz=9 + if(mode64.eq.2) itz=7 + if(mode64.eq.1) itz=5 + + if(mode64.eq.1) then + itz=0 + itryz=1 + endif + + LL=64*(mode64+2) + NN=63 + napmin=99 + do itry0=1,itryz + idt=itry0/2 + if(mod(itry0,2).eq.0) idt=-idt + jpk=jpk0 + 750*idt + call spec64(c0,npts2,mode64,jpk,s3a,LL,NN) + call pctile(s3a,LL*NN,40,base) + s3a=s3a/base + where(s3a(1:LL*NN)>s3lim) s3a(1:LL*NN)=s3lim + do iter=itz,0,-2 + b90=1.728**iter + if(b90.gt.230.0) cycle + if(b90.lt.0.15*width) exit + s3(1:LL*NN)=s3a(1:LL*NN) + call timer('qra64_de',0) + call qra64_dec(s3,nc1,nc2,ng2,naptype,0,nSubmode,b90, & + nFadingModel,dat4,snr2,irc) + call timer('qra64_de',1) + if(irc.eq.0) go to 10 + if(irc.gt.0) call badmsg(irc,dat4,nc1,nc2,ng2) + iirc=max(0,min(irc,11)) + if(irc.gt.0 .and. nap(iirc).lt.napmin) then + dat4x=dat4 + b90x=b90 + snr2x=snr2 + napmin=nap(iirc) + irckeep=irc + dtxkeep=jpk/6000.0 - 1.0 + itry0keep=itry0 + iterkeep=iter + npolkeep=ip*45 + endif + enddo + if(irc.eq.0) goto 5 + enddo + enddo + +5 if(napmin.ne.99) then + dat4=dat4x + b90=b90x + snr2=snr2x + irc=irckeep + dtx=dtxkeep + itry0=itry0keep + iter=iterkeep + npol=npolkeep + endif +10 decoded=' ' + + if(irc.ge.0) then + if(irc.eq.0) npol=ip*45 + call unpackmsg(dat4,decoded) !Unpack the user message + call fmtmsg(decoded,iz) + if(index(decoded,"000AAA ").ge.1) then + ! Suppress a certain type of garbage decode. + decoded=' ' + irc=-1 + endif + nft=100 + irc + nsnr=nint(snr2) + else + snr2=0. + endif + +900 if(irc.lt.0) then + sy=max(1.0,sync) + if(nSubmode.eq.0) nsnr=nint(10.0*log10(sy)-35.0) !A + if(nSubmode.eq.1) nsnr=nint(10.0*log10(sy)-34.0) !B + if(nSubmode.eq.2) nsnr=nint(10.0*log10(sy)-29.0) !C + if(nSubmode.eq.3) nsnr=nint(10.0*log10(sy)-29.0) !D + if(nSubmode.eq.4) nsnr=nint(10.0*log10(sy)-24.0) !E + endif + +! If Tx station's grid is in decoded message, compute optimum TxPol + i1=index(decoded,' ') + i2=index(decoded(i1+1:),' ') + i1 + grid=' ' + if(i2.ge.8 .and. i2.le.18) grid=decoded(i2+1:i2+4)//'mm' + ntxpol=0 + cp=' ' + if(xpol) then + if(grid(1:1).ge.'A' .and. grid(1:1).le.'R' .and. & + grid(2:2).ge.'A' .and. grid(2:2).le.'R' .and. & + grid(3:3).ge.'0' .and. grid(3:3).le.'9' .and. & + grid(4:4).ge.'0' .and. grid(4:4).le.'9') then + ntxpol=mod(npol-nint(2.0*dpol(mygrid,grid))+720,180) + if(nxant.eq.0) then + cp='H' + if(ntxpol.gt.45 .and. ntxpol.le.135) cp='V' + else + cp='/' + if(ntxpol.ge.90 .and. ntxpol.lt.180) cp='\\' + endif + endif + endif + + if(irc.ge.0) then + write(*,1010) ikHz,nfreq,npol,nutc,dtx,nsnr,cmode(1:1),decoded, & + irc,ntxpol,cp +1010 format('!',i3,i5,i4,i6.4,f5.1,i5,1x,a1,1x,a22,i2,5x,i5,1x,a1) + nwrite_qra64=nwrite_qra64+1 + freq=144.0 + 0.001*ikhz + write(21,1014) freq,nfreq,dtx,npol,nsnr,nutc,decoded,cp, & + cmode(1:1),cmode(2:2) +1014 format(f8.3,i5,f5.1,2i4,i5.4,2x,a22,2x,a1,3x,a1,1x,a1) + + if(index(decoded,'CQ ').gt.0 .or. index(decoded,'QRZ ').gt.0 .or. & + index(decoded,'QRT ').gt.0 .or. index(decoded,'CQV ').gt.0 .or. & + index(decoded,'CQH ').gt.0) then + write(19,1016) ikhz,nfreq,npol,nutc,dtx,nsnr,decoded,0,cmode +1016 format(i3,i5,i4,i5.4,f7.1,i4,2x,a22,i3,1x,a2) + flush(19) + endif + else + write(*,1010) ikHz,nfreq,npol,nutc,dtx,nsnr + nwrite_qra64=nwrite_qra64+1 + endif + + return +end subroutine qra64c diff --git a/libm65/qra64d.f90 b/map65/libm65/qra64d.f90 similarity index 96% rename from libm65/qra64d.f90 rename to map65/libm65/qra64d.f90 index e4a91fe8a..a310557b6 100644 --- a/libm65/qra64d.f90 +++ b/map65/libm65/qra64d.f90 @@ -1,48 +1,48 @@ -program qra64d - - use packjt - parameter (NFFT2=336000) !56*6000 (downsampled by 1/16) - parameter (NMAX=60*12000,LN=1152*63) - - character decoded*22 - character*12 mycall_12,hiscall_12 - character*6 mycall,hiscall,hisgrid_6 - character*4 hisgrid - character*1 cp - logical ltext - complex cx(0:NFFT2-1),cy(0:NFFT2-1) - complex c00(0:720000) !Complex spectrum of dd() - complex c0(0:720000) !Complex data for dd() - real a(3) - real s3(LN) !Symbol spectra - real s3a(LN) !Symbol spectra - integer dat4(12) !Decoded message (as 12 integers) - integer dat4x(12) - integer nap(0:11) - data nap/0,2,3,2,3,4,2,3,6,4,6,6/ - data nc1z/-1/,nc2z/-1/,ng2z/-1/,maxaptypez/-1/ - common/tracer/ limtrace,lu - - limtrace=0 - lu=12 - open(12,file='timer.out',status='unknown') - call timer('qra64d ',0) - nzap=1 - -1 read(60,end=900) cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & - hiscall_12,hisgrid_6 - -! Eliminate birdies: - if(nzap.gt.0) call qra64zap(cx,cy,nzap) - -! Transform back to time domain with sample rate 6000 Hz. - call four2a(cx,NFFT2,1,-1,1) - call four2a(cy,NFFT2,1,-1,1) - - call qra64c(cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & - hiscall_12,hisgrid_6,nwrite_qra64) - goto 1 -900 call timer('qra64d ',1) - call timer('qra64d ',101) - -end program qra64d +program qra64d + + use packjt + parameter (NFFT2=336000) !56*6000 (downsampled by 1/16) + parameter (NMAX=60*12000,LN=1152*63) + + character decoded*22 + character*12 mycall_12,hiscall_12 + character*6 mycall,hiscall,hisgrid_6 + character*4 hisgrid + character*1 cp + logical ltext + complex cx(0:NFFT2-1),cy(0:NFFT2-1) + complex c00(0:720000) !Complex spectrum of dd() + complex c0(0:720000) !Complex data for dd() + real a(3) + real s3(LN) !Symbol spectra + real s3a(LN) !Symbol spectra + integer dat4(12) !Decoded message (as 12 integers) + integer dat4x(12) + integer nap(0:11) + data nap/0,2,3,2,3,4,2,3,6,4,6,6/ + data nc1z/-1/,nc2z/-1/,ng2z/-1/,maxaptypez/-1/ + common/tracer/ limtrace,lu + + limtrace=0 + lu=12 + open(12,file='timer.out',status='unknown') + call timer('qra64d ',0) + nzap=1 + +1 read(60,end=900) cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & + hiscall_12,hisgrid_6 + +! Eliminate birdies: + if(nzap.gt.0) call qra64zap(cx,cy,nzap) + +! Transform back to time domain with sample rate 6000 Hz. + call four2a(cx,NFFT2,1,-1,1) + call four2a(cy,NFFT2,1,-1,1) + + call qra64c(cx,cy,nutc,nqd,ikhz,mousedf,ntol,xpol,mycall_12, & + hiscall_12,hisgrid_6,nwrite_qra64) + goto 1 +900 call timer('qra64d ',1) + call timer('qra64d ',101) + +end program qra64d diff --git a/libm65/qra64zap.f90 b/map65/libm65/qra64zap.f90 similarity index 95% rename from libm65/qra64zap.f90 rename to map65/libm65/qra64zap.f90 index 6129ea238..b73bd60d0 100644 --- a/libm65/qra64zap.f90 +++ b/map65/libm65/qra64zap.f90 @@ -1,62 +1,62 @@ -subroutine qra64zap(cx,cy,xpol,nzap) - - parameter (NFFT1=5376000) !56*96000 - parameter (NFFT2=336000) !56*6000 (downsampled by 1/16) - complex cx(0:NFFT2-1),cy(0:NFFT2-1) - real s(-1312:1312) - integer iloc(1) - logical xpol - - slimit=3.0 - sbottom=1.5 - nadd=128 - nblks=NFFT2/nadd - nbh=nblks/2 - k=-1 - s=0. - df=nadd*96000.0/NFFT1 - do i=1,nblks - j=i - if(j.gt.nblks/2) j=j-nblks - do n=1,nadd - k=k+1 - s(j)=s(j) + real(cx(k))**2 + aimag(cx(k))**2 - if(xpol) s(j)=s(j) + real(cy(k))**2 + aimag(cy(k))**2 - enddo - enddo - call pctile(s,nblks,45,base) - s=s/base - do nzap=1,3 - iloc=maxloc(s) - ipk=iloc(1)-1313 - smax=s(ipk) - nw=3 - do n=1,3 - nw=2*nw - if(ipk-2*nw.lt.-1312) cycle - if(ipk+2*nw.gt. 1312) cycle - s1=maxval(s(ipk-2*nw:ipk-nw)) - s2=maxval(s(ipk+nw:ipk+2*nw)) - if(smax.gt.slimit .and. s1.lt.sbottom .and. s2.lt.sbottom) then - s(ipk-nw:ipk+nw)=1.0 - i0=ipk - if(i0.lt.0) i0=i0+2625 - ia=(i0-nw)*nadd - ib=(i0+nw)*nadd - cx(ia:ib)=0. - cy(ia:ib)=0. - exit - endif - enddo - enddo - -! rewind 75 -! do i=-nbh,nbh -! freq=i*df -! write(75,3001) freq,s(i) -!3001 format(2f12.3) -! enddo -! flush(75) - - return -end subroutine qra64zap +subroutine qra64zap(cx,cy,xpol,nzap) + + parameter (NFFT1=5376000) !56*96000 + parameter (NFFT2=336000) !56*6000 (downsampled by 1/16) + complex cx(0:NFFT2-1),cy(0:NFFT2-1) + real s(-1312:1312) + integer iloc(1) + logical xpol + + slimit=3.0 + sbottom=1.5 + nadd=128 + nblks=NFFT2/nadd + nbh=nblks/2 + k=-1 + s=0. + df=nadd*96000.0/NFFT1 + do i=1,nblks + j=i + if(j.gt.nblks/2) j=j-nblks + do n=1,nadd + k=k+1 + s(j)=s(j) + real(cx(k))**2 + aimag(cx(k))**2 + if(xpol) s(j)=s(j) + real(cy(k))**2 + aimag(cy(k))**2 + enddo + enddo + call pctile(s,nblks,45,base) + s=s/base + do nzap=1,3 + iloc=maxloc(s) + ipk=iloc(1)-1313 + smax=s(ipk) + nw=3 + do n=1,3 + nw=2*nw + if(ipk-2*nw.lt.-1312) cycle + if(ipk+2*nw.gt. 1312) cycle + s1=maxval(s(ipk-2*nw:ipk-nw)) + s2=maxval(s(ipk+nw:ipk+2*nw)) + if(smax.gt.slimit .and. s1.lt.sbottom .and. s2.lt.sbottom) then + s(ipk-nw:ipk+nw)=1.0 + i0=ipk + if(i0.lt.0) i0=i0+2625 + ia=(i0-nw)*nadd + ib=(i0+nw)*nadd + cx(ia:ib)=0. + cy(ia:ib)=0. + exit + endif + enddo + enddo + +! rewind 75 +! do i=-nbh,nbh +! freq=i*df +! write(75,3001) freq,s(i) +!3001 format(2f12.3) +! enddo +! flush(75) + + return +end subroutine qra64zap diff --git a/libm65/qracodes/Makefile.Win b/map65/libm65/qracodes/Makefile.Win similarity index 100% rename from libm65/qracodes/Makefile.Win rename to map65/libm65/qracodes/Makefile.Win diff --git a/libm65/qracodes/ebno10000.txt b/map65/libm65/qracodes/ebno10000.txt similarity index 100% rename from libm65/qracodes/ebno10000.txt rename to map65/libm65/qracodes/ebno10000.txt diff --git a/libm65/qracodes/ebnovalues.txt b/map65/libm65/qracodes/ebnovalues.txt similarity index 100% rename from libm65/qracodes/ebnovalues.txt rename to map65/libm65/qracodes/ebnovalues.txt diff --git a/libm65/qracodes/ebnovaluesfast.txt b/map65/libm65/qracodes/ebnovaluesfast.txt similarity index 100% rename from libm65/qracodes/ebnovaluesfast.txt rename to map65/libm65/qracodes/ebnovaluesfast.txt diff --git a/libm65/qracodes/main.c b/map65/libm65/qracodes/main.c similarity index 100% rename from libm65/qracodes/main.c rename to map65/libm65/qracodes/main.c diff --git a/libm65/qracodes/normrnd.c b/map65/libm65/qracodes/normrnd.c similarity index 100% rename from libm65/qracodes/normrnd.c rename to map65/libm65/qracodes/normrnd.c diff --git a/libm65/qracodes/normrnd.h b/map65/libm65/qracodes/normrnd.h similarity index 100% rename from libm65/qracodes/normrnd.h rename to map65/libm65/qracodes/normrnd.h diff --git a/libm65/qracodes/npfwht.c b/map65/libm65/qracodes/npfwht.c similarity index 100% rename from libm65/qracodes/npfwht.c rename to map65/libm65/qracodes/npfwht.c diff --git a/libm65/qracodes/npfwht.h b/map65/libm65/qracodes/npfwht.h similarity index 100% rename from libm65/qracodes/npfwht.h rename to map65/libm65/qracodes/npfwht.h diff --git a/libm65/qracodes/pdmath.c b/map65/libm65/qracodes/pdmath.c similarity index 100% rename from libm65/qracodes/pdmath.c rename to map65/libm65/qracodes/pdmath.c diff --git a/libm65/qracodes/pdmath.h b/map65/libm65/qracodes/pdmath.h similarity index 100% rename from libm65/qracodes/pdmath.h rename to map65/libm65/qracodes/pdmath.h diff --git a/libm65/qracodes/qra12_63_64_irr_b.c b/map65/libm65/qracodes/qra12_63_64_irr_b.c similarity index 100% rename from libm65/qracodes/qra12_63_64_irr_b.c rename to map65/libm65/qracodes/qra12_63_64_irr_b.c diff --git a/libm65/qracodes/qra12_63_64_irr_b.h b/map65/libm65/qracodes/qra12_63_64_irr_b.h similarity index 100% rename from libm65/qracodes/qra12_63_64_irr_b.h rename to map65/libm65/qracodes/qra12_63_64_irr_b.h diff --git a/libm65/qracodes/qra13_64_64_irr_e.c b/map65/libm65/qracodes/qra13_64_64_irr_e.c similarity index 100% rename from libm65/qracodes/qra13_64_64_irr_e.c rename to map65/libm65/qracodes/qra13_64_64_irr_e.c diff --git a/libm65/qracodes/qra13_64_64_irr_e.h b/map65/libm65/qracodes/qra13_64_64_irr_e.h similarity index 100% rename from libm65/qracodes/qra13_64_64_irr_e.h rename to map65/libm65/qracodes/qra13_64_64_irr_e.h diff --git a/libm65/qracodes/qracodes.c b/map65/libm65/qracodes/qracodes.c similarity index 100% rename from libm65/qracodes/qracodes.c rename to map65/libm65/qracodes/qracodes.c diff --git a/libm65/qracodes/qracodes.h b/map65/libm65/qracodes/qracodes.h similarity index 100% rename from libm65/qracodes/qracodes.h rename to map65/libm65/qracodes/qracodes.h diff --git a/libm65/recvpkt.f90 b/map65/libm65/recvpkt.f90 similarity index 100% rename from libm65/recvpkt.f90 rename to map65/libm65/recvpkt.f90 diff --git a/libm65/rfile3a.f90 b/map65/libm65/rfile3a.f90 similarity index 100% rename from libm65/rfile3a.f90 rename to map65/libm65/rfile3a.f90 diff --git a/libm65/rs.h b/map65/libm65/rs.h similarity index 100% rename from libm65/rs.h rename to map65/libm65/rs.h diff --git a/libm65/rs2.h b/map65/libm65/rs2.h similarity index 100% rename from libm65/rs2.h rename to map65/libm65/rs2.h diff --git a/libm65/s3avg.f90 b/map65/libm65/s3avg.f90 similarity index 100% rename from libm65/s3avg.f90 rename to map65/libm65/s3avg.f90 diff --git a/libm65/sec_midn.f90 b/map65/libm65/sec_midn.f90 similarity index 100% rename from libm65/sec_midn.f90 rename to map65/libm65/sec_midn.f90 diff --git a/libm65/set.f90 b/map65/libm65/set.f90 similarity index 100% rename from libm65/set.f90 rename to map65/libm65/set.f90 diff --git a/libm65/setup65.f90 b/map65/libm65/setup65.f90 similarity index 100% rename from libm65/setup65.f90 rename to map65/libm65/setup65.f90 diff --git a/libm65/shell.f90 b/map65/libm65/shell.f90 similarity index 93% rename from libm65/shell.f90 rename to map65/libm65/shell.f90 index 1e9b44889..d7365bfc9 100644 --- a/libm65/shell.f90 +++ b/map65/libm65/shell.f90 @@ -1,27 +1,27 @@ -subroutine shell(n,a) - integer n - real a(n) - integer i,j,inc - real v - - inc=1 -1 inc=3*inc+1 - if(inc.le.n) go to 1 -2 inc=inc/3 - - do i=inc+1,n - v=a(i) - j=i -3 if(a(j-inc).gt.v) then - a(j)=a(j-inc) - j=j-inc - if(j.le.inc) go to 4 - go to 3 - endif -4 a(j)=v - enddo - - if(inc.gt.1) go to 2 - - return -end subroutine shell +subroutine shell(n,a) + integer n + real a(n) + integer i,j,inc + real v + + inc=1 +1 inc=3*inc+1 + if(inc.le.n) go to 1 +2 inc=inc/3 + + do i=inc+1,n + v=a(i) + j=i +3 if(a(j-inc).gt.v) then + a(j)=a(j-inc) + j=j-inc + if(j.le.inc) go to 4 + go to 3 + endif +4 a(j)=v + enddo + + if(inc.gt.1) go to 2 + + return +end subroutine shell diff --git a/libm65/sleep.h b/map65/libm65/sleep.h similarity index 100% rename from libm65/sleep.h rename to map65/libm65/sleep.h diff --git a/libm65/sleep_msec.f90 b/map65/libm65/sleep_msec.f90 similarity index 100% rename from libm65/sleep_msec.f90 rename to map65/libm65/sleep_msec.f90 diff --git a/libm65/smo.f90 b/map65/libm65/smo.f90 similarity index 100% rename from libm65/smo.f90 rename to map65/libm65/smo.f90 diff --git a/libm65/sort.f90 b/map65/libm65/sort.f90 similarity index 100% rename from libm65/sort.f90 rename to map65/libm65/sort.f90 diff --git a/libm65/spec64.f90 b/map65/libm65/spec64.f90 similarity index 96% rename from libm65/spec64.f90 rename to map65/libm65/spec64.f90 index 4d24621fc..a0c0a04c7 100644 --- a/libm65/spec64.f90 +++ b/map65/libm65/spec64.f90 @@ -1,42 +1,42 @@ -subroutine spec64(c0,npts2,mode64,jpk,s3,LL,NN) - - parameter (NSPS=3456) !Samples per symbol at 6000 Hz - complex c0(0:360000) !Complex spectrum of dd() - complex cs(0:NSPS-1) !Complex symbol spectrum - real s3(LL,NN) !Synchronized symbol spectra - real xbase0(LL),xbase(LL) - - nfft=nsps - fac=1.0/nfft - do j=1,NN - jj=j+7 !Skip first Costas array - if(j.ge.33) jj=j+14 !Skip middle Costas array - ja=jpk + (jj-1)*nfft - jb=ja+nfft-1 - cs(0:nfft-1)=fac*c0(ja:jb) - call four2a(cs,nfft,1,-1,1) - do ii=1,LL - i=ii-65 - if(i.lt.0) i=i+nfft - s3(ii,j)=real(cs(i))**2 + aimag(cs(i))**2 - enddo - enddo - - df=6000.0/nfft - do i=1,LL - call pctile(s3(i,1:NN),NN,45,xbase0(i)) !Get baseline for passband shape - enddo - - nh=25 - xbase(1:nh-1)=sum(xbase0(1:nh-1))/(nh-1.0) - xbase(LL-nh+1:LL)=sum(xbase0(LL-nh+1:LL))/(nh-1.0) - do i=nh,LL-nh - xbase(i)=sum(xbase0(i-nh+1:i+nh))/(2*nh+1) !Smoothed passband shape - enddo - - do i=1,LL - s3(i,1:NN)=s3(i,1:NN)/(xbase(i)+0.001) !Apply frequency equalization - enddo - - return -end subroutine spec64 +subroutine spec64(c0,npts2,mode64,jpk,s3,LL,NN) + + parameter (NSPS=3456) !Samples per symbol at 6000 Hz + complex c0(0:360000) !Complex spectrum of dd() + complex cs(0:NSPS-1) !Complex symbol spectrum + real s3(LL,NN) !Synchronized symbol spectra + real xbase0(LL),xbase(LL) + + nfft=nsps + fac=1.0/nfft + do j=1,NN + jj=j+7 !Skip first Costas array + if(j.ge.33) jj=j+14 !Skip middle Costas array + ja=jpk + (jj-1)*nfft + jb=ja+nfft-1 + cs(0:nfft-1)=fac*c0(ja:jb) + call four2a(cs,nfft,1,-1,1) + do ii=1,LL + i=ii-65 + if(i.lt.0) i=i+nfft + s3(ii,j)=real(cs(i))**2 + aimag(cs(i))**2 + enddo + enddo + + df=6000.0/nfft + do i=1,LL + call pctile(s3(i,1:NN),NN,45,xbase0(i)) !Get baseline for passband shape + enddo + + nh=25 + xbase(1:nh-1)=sum(xbase0(1:nh-1))/(nh-1.0) + xbase(LL-nh+1:LL)=sum(xbase0(LL-nh+1:LL))/(nh-1.0) + do i=nh,LL-nh + xbase(i)=sum(xbase0(i-nh+1:i+nh))/(2*nh+1) !Smoothed passband shape + enddo + + do i=1,LL + s3(i,1:NN)=s3(i,1:NN)/(xbase(i)+0.001) !Apply frequency equalization + enddo + + return +end subroutine spec64 diff --git a/libm65/ssort.f b/map65/libm65/ssort.f similarity index 100% rename from libm65/ssort.f rename to map65/libm65/ssort.f diff --git a/libm65/sun.f90 b/map65/libm65/sun.f90 similarity index 100% rename from libm65/sun.f90 rename to map65/libm65/sun.f90 diff --git a/libm65/symspec.f90 b/map65/libm65/symspec.f90 similarity index 100% rename from libm65/symspec.f90 rename to map65/libm65/symspec.f90 diff --git a/libm65/sync64.f90 b/map65/libm65/sync64.f90 similarity index 96% rename from libm65/sync64.f90 rename to map65/libm65/sync64.f90 index 23c945e21..789d316d7 100644 --- a/libm65/sync64.f90 +++ b/map65/libm65/sync64.f90 @@ -1,169 +1,169 @@ -subroutine sync64(c0,nf1,nf2,nfqso,ntol,mode64,emedelay,dtx,f0,jpk,sync, & - sync2,width) - -! use timer_module, only: timer - - parameter (NMAX=60*12000) !Max size of raw data at 12000 Hz - parameter (NSPS=3456) !Samples per symbol at 6000 Hz - parameter (NSPC=7*NSPS) !Samples per Costas array - real s1(0:NSPC-1) !Power spectrum of Costas 1 - real s2(0:NSPC-1) !Power spectrum of Costas 2 - real s3(0:NSPC-1) !Power spectrum of Costas 3 - real s0(0:NSPC-1) !Sum of s1+s2+s3 - real s0a(0:NSPC-1) !Best synchromized spectrum (saved) - real s0b(0:NSPC-1) !tmp - real a(5) - integer icos7(0:6) !Costas 7x7 tones - integer ipk0(1) - complex cc(0:NSPC-1) !Costas waveform - complex c0(0:720000) !Complex spectrum of dd() - complex c1(0:NSPC-1) !Complex spectrum of Costas 1 - complex c2(0:NSPC-1) !Complex spectrum of Costas 2 - complex c3(0:NSPC-1) !Complex spectrum of Costas 3 - data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern - data mode64z/-1/ - save - - if(mode64.ne.mode64z) then - twopi=8.0*atan(1.0) - dfgen=mode64*12000.0/6912.0 - k=-1 - phi=0. - do j=0,6 !Compute complex Costas waveform - dphi=twopi*10.0*icos7(j)*dfgen/6000.0 - do i=1,NSPS - phi=phi + dphi - if(phi.gt.twopi) phi=phi-twopi - k=k+1 - cc(k)=cmplx(cos(phi),sin(phi)) - enddo - enddo - mode64z=mode64 - endif - - nfft3=NSPC - nh3=nfft3/2 - df3=6000.0/nfft3 - - faa=nfqso-ntol - fbb=nfqso+ntol - iaa=max(0,nint(faa/df3)+nh3) - ibb=min(NSPC-1,nint(fbb/df3)+nh3) - - fa=-3000.0 - fb=3000.0 - ia=max(0,nint(fa/df3)+nh3) - ib=min(NSPC-1,nint(fb/df3)+nh3) - - id=0.1*(ib-ia) - iz=ib-ia+1 - sync=-1.e30 - smaxall=0. - jpk=0 - ja=0 - jb=(5.0+emedelay)*6000 -! jstep=100 - jstep=200 - ipk=0 - kpk=0 - nadd=10*mode64 - if(mod(nadd,2).eq.0) nadd=nadd+1 !Make nadd odd - nskip=max(49,nadd) - - do j1=ja,jb,jstep - call timer('sync64_1',0) - j2=j1 + 39*NSPS - j3=j1 + 77*NSPS - c1=1.e-4*c0(j1:j1+NSPC-1) * conjg(cc) - c2=1.e-4*c0(j2:j2+NSPC-1) * conjg(cc) - c3=1.e-4*c0(j3:j3+NSPC-1) * conjg(cc) - call four2a(c1,nfft3,1,-1,1) - call four2a(c2,nfft3,1,-1,1) - call four2a(c3,nfft3,1,-1,1) - c1=cshift(c1,nh3) - c2=cshift(c2,nh3) - c3=cshift(c3,nh3) - s1=0. - s2=0. - s3=0. - s0b=0. - do i=ia,ib - s1(i)=real(c1(i))**2 + aimag(c1(i))**2 - s2(i)=real(c2(i))**2 + aimag(c2(i))**2 - s3(i)=real(c3(i))**2 + aimag(c3(i))**2 - enddo - call timer('sync64_1',1) - - call timer('sync64_2',0) - s0(ia:ib)=s1(ia:ib) + s2(ia:ib) + s3(ia:ib) - s0(:ia-1)=0. - s0(ib+1:)=0. - if(nadd.ge.3) then - do ii=1,3 - s0b(ia:ib)=s0(ia:ib) - call smo(s0b(ia:ib),iz,s0(ia:ib),nadd) - enddo - endif - call averms(s0(ia+id:ib-id),iz-2*id,nskip,ave,rms) - s=(maxval(s0(iaa:ibb))-ave)/rms - ipk0=maxloc(s0(iaa:ibb)) - ip=ipk0(1) + iaa - 1 - if(s.gt.sync) then - jpk=j1 - s0a=(s0-ave)/rms - sync=s - dtx=jpk/6000.0 - 1.0 - ipk=ip - f0=ip*df3 - 3000.0 -! rewind 61 -! do i=iaa,ibb -! write(61,3301) i*df3-3000.0,s0(i),s1(i),s2(i),s3(i) -!3301 format(5f12.3) -! enddo -! flush(61) - endif - call timer('sync64_2',1) - enddo - - nskip=50 - call lorentzian(s0a(ia+nskip:ib-nskip),iz-2*nskip,a) - f0a=(a(3)+ia+49)*df3 - w1=df3*a(4) - w2=2*nadd*df3 - width=w1 - if(w1.gt.1.2*w2) width=sqrt(w1**2 - w2**2) - - sq=0. - do i=1,20 - j=ia+nskip+1 - k=ib-nskip-21+i - sq=sq + (s0a(j)-a(1))**2 + (s0a(k)-a(1))**2 - enddo - rms2=sqrt(sq/40.0) - sync2=10.0*log10(a(2)/rms2) - - slimit=6.0 - rewind 17 - write(17,1110) 0.0,0.0 - rewind 17 -! rewind 76 - do i=2,iz-2*nskip-1,3 - x=i - z=(x-a(3))/(0.5*a(4)) - yfit=a(1) - if(abs(z).lt.3.0) then - d=1.0 + z*z - yfit=a(1) + a(2)*(1.0/d - 0.1) - endif - j=i+ia+49 - freq=j*df3-3000.0 - ss=(s0a(j-1)+s0a(j)+s0a(j+1))/3.0 - if(ss.gt.slimit) write(17,1110) freq,ss -1110 format(3f10.3) -! write(76,1110) freq,ss,yfit - enddo - flush(17) -! flush(76) - - return -end subroutine sync64 +subroutine sync64(c0,nf1,nf2,nfqso,ntol,mode64,emedelay,dtx,f0,jpk,sync, & + sync2,width) + +! use timer_module, only: timer + + parameter (NMAX=60*12000) !Max size of raw data at 12000 Hz + parameter (NSPS=3456) !Samples per symbol at 6000 Hz + parameter (NSPC=7*NSPS) !Samples per Costas array + real s1(0:NSPC-1) !Power spectrum of Costas 1 + real s2(0:NSPC-1) !Power spectrum of Costas 2 + real s3(0:NSPC-1) !Power spectrum of Costas 3 + real s0(0:NSPC-1) !Sum of s1+s2+s3 + real s0a(0:NSPC-1) !Best synchromized spectrum (saved) + real s0b(0:NSPC-1) !tmp + real a(5) + integer icos7(0:6) !Costas 7x7 tones + integer ipk0(1) + complex cc(0:NSPC-1) !Costas waveform + complex c0(0:720000) !Complex spectrum of dd() + complex c1(0:NSPC-1) !Complex spectrum of Costas 1 + complex c2(0:NSPC-1) !Complex spectrum of Costas 2 + complex c3(0:NSPC-1) !Complex spectrum of Costas 3 + data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern + data mode64z/-1/ + save + + if(mode64.ne.mode64z) then + twopi=8.0*atan(1.0) + dfgen=mode64*12000.0/6912.0 + k=-1 + phi=0. + do j=0,6 !Compute complex Costas waveform + dphi=twopi*10.0*icos7(j)*dfgen/6000.0 + do i=1,NSPS + phi=phi + dphi + if(phi.gt.twopi) phi=phi-twopi + k=k+1 + cc(k)=cmplx(cos(phi),sin(phi)) + enddo + enddo + mode64z=mode64 + endif + + nfft3=NSPC + nh3=nfft3/2 + df3=6000.0/nfft3 + + faa=nfqso-ntol + fbb=nfqso+ntol + iaa=max(0,nint(faa/df3)+nh3) + ibb=min(NSPC-1,nint(fbb/df3)+nh3) + + fa=-3000.0 + fb=3000.0 + ia=max(0,nint(fa/df3)+nh3) + ib=min(NSPC-1,nint(fb/df3)+nh3) + + id=0.1*(ib-ia) + iz=ib-ia+1 + sync=-1.e30 + smaxall=0. + jpk=0 + ja=0 + jb=(5.0+emedelay)*6000 +! jstep=100 + jstep=200 + ipk=0 + kpk=0 + nadd=10*mode64 + if(mod(nadd,2).eq.0) nadd=nadd+1 !Make nadd odd + nskip=max(49,nadd) + + do j1=ja,jb,jstep + call timer('sync64_1',0) + j2=j1 + 39*NSPS + j3=j1 + 77*NSPS + c1=1.e-4*c0(j1:j1+NSPC-1) * conjg(cc) + c2=1.e-4*c0(j2:j2+NSPC-1) * conjg(cc) + c3=1.e-4*c0(j3:j3+NSPC-1) * conjg(cc) + call four2a(c1,nfft3,1,-1,1) + call four2a(c2,nfft3,1,-1,1) + call four2a(c3,nfft3,1,-1,1) + c1=cshift(c1,nh3) + c2=cshift(c2,nh3) + c3=cshift(c3,nh3) + s1=0. + s2=0. + s3=0. + s0b=0. + do i=ia,ib + s1(i)=real(c1(i))**2 + aimag(c1(i))**2 + s2(i)=real(c2(i))**2 + aimag(c2(i))**2 + s3(i)=real(c3(i))**2 + aimag(c3(i))**2 + enddo + call timer('sync64_1',1) + + call timer('sync64_2',0) + s0(ia:ib)=s1(ia:ib) + s2(ia:ib) + s3(ia:ib) + s0(:ia-1)=0. + s0(ib+1:)=0. + if(nadd.ge.3) then + do ii=1,3 + s0b(ia:ib)=s0(ia:ib) + call smo(s0b(ia:ib),iz,s0(ia:ib),nadd) + enddo + endif + call averms(s0(ia+id:ib-id),iz-2*id,nskip,ave,rms) + s=(maxval(s0(iaa:ibb))-ave)/rms + ipk0=maxloc(s0(iaa:ibb)) + ip=ipk0(1) + iaa - 1 + if(s.gt.sync) then + jpk=j1 + s0a=(s0-ave)/rms + sync=s + dtx=jpk/6000.0 - 1.0 + ipk=ip + f0=ip*df3 - 3000.0 +! rewind 61 +! do i=iaa,ibb +! write(61,3301) i*df3-3000.0,s0(i),s1(i),s2(i),s3(i) +!3301 format(5f12.3) +! enddo +! flush(61) + endif + call timer('sync64_2',1) + enddo + + nskip=50 + call lorentzian(s0a(ia+nskip:ib-nskip),iz-2*nskip,a) + f0a=(a(3)+ia+49)*df3 + w1=df3*a(4) + w2=2*nadd*df3 + width=w1 + if(w1.gt.1.2*w2) width=sqrt(w1**2 - w2**2) + + sq=0. + do i=1,20 + j=ia+nskip+1 + k=ib-nskip-21+i + sq=sq + (s0a(j)-a(1))**2 + (s0a(k)-a(1))**2 + enddo + rms2=sqrt(sq/40.0) + sync2=10.0*log10(a(2)/rms2) + + slimit=6.0 + rewind 17 + write(17,1110) 0.0,0.0 + rewind 17 +! rewind 76 + do i=2,iz-2*nskip-1,3 + x=i + z=(x-a(3))/(0.5*a(4)) + yfit=a(1) + if(abs(z).lt.3.0) then + d=1.0 + z*z + yfit=a(1) + a(2)*(1.0/d - 0.1) + endif + j=i+ia+49 + freq=j*df3-3000.0 + ss=(s0a(j-1)+s0a(j)+s0a(j+1))/3.0 + if(ss.gt.slimit) write(17,1110) freq,ss +1110 format(3f10.3) +! write(76,1110) freq,ss,yfit + enddo + flush(17) +! flush(76) + + return +end subroutine sync64 diff --git a/libm65/synctst.f90 b/map65/libm65/synctst.f90 similarity index 95% rename from libm65/synctst.f90 rename to map65/libm65/synctst.f90 index b91373004..248c7e197 100644 --- a/libm65/synctst.f90 +++ b/map65/libm65/synctst.f90 @@ -1,84 +1,84 @@ -program synctst - -! Tests JT65B2 sync patterns - - parameter (LAGMAX=20) - real ccf0(0:LAGMAX),ccf2(0:LAGMAX),ccf3(0:LAGMAX) - character*12 arg - integer npr(126),np0(126),np1(126),npr2(126) - data npr/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, & - 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, & - 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, & - 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, & - 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, & - 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, & - 1,1,1,1,1,1/ - - nargs=iargc() - if(nargs.ne.1) then - print*,'Usage: synctst iters' - go to 999 - endif - call getarg(1,arg) - read(arg,*) iters - - worst=0. - do lag=0,LAGMAX - nsum=0 - do i=1,126-lag - nsum=nsum + npr(i)*npr(lag+i) - enddo - ccf0(lag)=2.0*nsum/(126.0-lag) - if(lag.ge.1 .and. ccf0(lag).gt.worst) worst=ccf0(lag) - enddo - - best2=1.0 - do iter=1,iters - -10 np0=0 - np1=0 - n0=0 - do i=1,126 - if(npr(i).eq.1) then - call random_number(r) - if(r.lt.0.5) then - np0(i)=1 - n0=n0+1 - else - np1(i)=1 - endif - endif - enddo - if(n0.ne.31 .and. n0.ne.32) go to 10 - - worst2=0. - do lag=0,LAGMAX - nsum=0 - do i=1,126-lag - nsum=nsum + np0(i)*np0(lag+i) + np1(i)*np1(lag+i) - enddo - ccf2(lag)=2.0*nsum/(126.0-lag) - if(lag.ge.1 .and. ccf2(lag).gt.worst2) then - worst2=ccf2(lag) - lagbad=lag - endif - enddo - if(worst2.lt.best2) then - best2=worst2 - lagbest=lagbad - n0best=n0 - ccf3=ccf2 - npr2=np0 + 2*np1 - endif - enddo - - do lag=0,LAGMAX - write(13,1100) lag,ccf0(lag),ccf3(lag) -1100 format(i3,2f10.3) - enddo - - print*,worst,best2,n0best,lagbest - write(*,1110) npr2 -1110 format((8x,20(i1,','))) - -999 end program synctst +program synctst + +! Tests JT65B2 sync patterns + + parameter (LAGMAX=20) + real ccf0(0:LAGMAX),ccf2(0:LAGMAX),ccf3(0:LAGMAX) + character*12 arg + integer npr(126),np0(126),np1(126),npr2(126) + data npr/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, & + 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, & + 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, & + 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, & + 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, & + 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, & + 1,1,1,1,1,1/ + + nargs=iargc() + if(nargs.ne.1) then + print*,'Usage: synctst iters' + go to 999 + endif + call getarg(1,arg) + read(arg,*) iters + + worst=0. + do lag=0,LAGMAX + nsum=0 + do i=1,126-lag + nsum=nsum + npr(i)*npr(lag+i) + enddo + ccf0(lag)=2.0*nsum/(126.0-lag) + if(lag.ge.1 .and. ccf0(lag).gt.worst) worst=ccf0(lag) + enddo + + best2=1.0 + do iter=1,iters + +10 np0=0 + np1=0 + n0=0 + do i=1,126 + if(npr(i).eq.1) then + call random_number(r) + if(r.lt.0.5) then + np0(i)=1 + n0=n0+1 + else + np1(i)=1 + endif + endif + enddo + if(n0.ne.31 .and. n0.ne.32) go to 10 + + worst2=0. + do lag=0,LAGMAX + nsum=0 + do i=1,126-lag + nsum=nsum + np0(i)*np0(lag+i) + np1(i)*np1(lag+i) + enddo + ccf2(lag)=2.0*nsum/(126.0-lag) + if(lag.ge.1 .and. ccf2(lag).gt.worst2) then + worst2=ccf2(lag) + lagbad=lag + endif + enddo + if(worst2.lt.best2) then + best2=worst2 + lagbest=lagbad + n0best=n0 + ccf3=ccf2 + npr2=np0 + 2*np1 + endif + enddo + + do lag=0,LAGMAX + write(13,1100) lag,ccf0(lag),ccf3(lag) +1100 format(i3,2f10.3) + enddo + + print*,worst,best2,n0best,lagbest + write(*,1110) npr2 +1110 format((8x,20(i1,','))) + +999 end program synctst diff --git a/libm65/synctst2.f90 b/map65/libm65/synctst2.f90 similarity index 96% rename from libm65/synctst2.f90 rename to map65/libm65/synctst2.f90 index 34893f96e..8ff4971a3 100644 --- a/libm65/synctst2.f90 +++ b/map65/libm65/synctst2.f90 @@ -1,91 +1,91 @@ -program synctst2 - -! Tests JT65B2 sync patterns - - parameter (LAGMAX=20) - real ccf0(0:LAGMAX),ccf1(0:LAGMAX),ccf2(0:LAGMAX),ccf3(0:LAGMAX) - character arg*12,line*64 - integer*8 n8 - integer npr(126),np0(126),np1(126),npr1(126),npr2(126) - data npr/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, & - 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, & - 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, & - 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, & - 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, & - 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, & - 1,1,1,1,1,1/ - - data npr2/1,0,0,1,2,0,0,0,2,1,1,2,2,2,0,2,0,2,0,0, & - 0,1,0,2,1,0,0,1,0,0,0,2,1,1,0,0,1,1,2,2, & - 0,2,2,0,2,1,1,1,0,0,0,1,2,0,1,0,2,0,1,1, & - 0,0,2,2,0,1,0,1,0,2,0,0,2,0,0,0,0,0,0,1, & - 1,0,0,0,0,0,0,0,1,2,0,2,0,0,2,0,2,1,0,1, & - 0,2,0,1,0,0,2,2,0,0,1,0,0,2,0,0,0,0,1,1, & - 1,2,1,2,1,2/ - - data n8/x'4314f4725bb357e0'/ - - write(*,1102) n8 - write(line,1102) n8 -1102 format(b63) - read(line,1104) npr1(1:63) -1104 format(63i1) - npr1(64:126)=npr1(1:63) - - worst=0. - do lag=0,LAGMAX - nsum=0 - do i=1,126-lag - nsum=nsum + npr(i)*npr(lag+i) - enddo - ccf0(lag)=2.0*nsum/(126.0-lag) - if(lag.ge.1 .and. ccf0(lag).gt.worst) worst=ccf0(lag) - enddo - - - worst1=0. - do lag=0,LAGMAX - nsum=0 - do i=1,126-lag - nsum=nsum + npr1(i)*npr1(lag+i) - enddo - ccf1(lag)=(63.0/64.0)*2.0*nsum/(126.0-lag) - if(lag.ge.1 .and. ccf1(lag).gt.worst1) worst1=ccf1(lag) - enddo - ccf1=ccf1/ccf1(0) - worst1=worst1/ccf1(0) - - np0=0 - np1=0 - n0=0 - do i=1,126 - if(npr2(i).eq.1) then - np0(i)=1 - n0=n0+1 - else if(npr2(i).eq.2) then - np1(i)=1 - endif - enddo - - worst2=0. - do lag=0,LAGMAX - nsum=0 - do i=1,126-lag - nsum=nsum + np0(i)*np0(lag+i) + np1(i)*np1(lag+i) - enddo - ccf2(lag)=2.0*nsum/(126.0-lag) - if(lag.ge.1 .and. ccf2(lag).gt.worst2) then - worst2=ccf2(lag) - lagbad=lag - endif - enddo - - do lag=0,LAGMAX - write(13,1100) lag,ccf0(lag),ccf1(lag),ccf2(lag) -1100 format(i3,3f10.3) - enddo - - print*,worst,worst1,worst2,n0,lagbad - - -999 end program synctst2 +program synctst2 + +! Tests JT65B2 sync patterns + + parameter (LAGMAX=20) + real ccf0(0:LAGMAX),ccf1(0:LAGMAX),ccf2(0:LAGMAX),ccf3(0:LAGMAX) + character arg*12,line*64 + integer*8 n8 + integer npr(126),np0(126),np1(126),npr1(126),npr2(126) + data npr/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, & + 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, & + 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, & + 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, & + 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, & + 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, & + 1,1,1,1,1,1/ + + data npr2/1,0,0,1,2,0,0,0,2,1,1,2,2,2,0,2,0,2,0,0, & + 0,1,0,2,1,0,0,1,0,0,0,2,1,1,0,0,1,1,2,2, & + 0,2,2,0,2,1,1,1,0,0,0,1,2,0,1,0,2,0,1,1, & + 0,0,2,2,0,1,0,1,0,2,0,0,2,0,0,0,0,0,0,1, & + 1,0,0,0,0,0,0,0,1,2,0,2,0,0,2,0,2,1,0,1, & + 0,2,0,1,0,0,2,2,0,0,1,0,0,2,0,0,0,0,1,1, & + 1,2,1,2,1,2/ + + data n8/x'4314f4725bb357e0'/ + + write(*,1102) n8 + write(line,1102) n8 +1102 format(b63) + read(line,1104) npr1(1:63) +1104 format(63i1) + npr1(64:126)=npr1(1:63) + + worst=0. + do lag=0,LAGMAX + nsum=0 + do i=1,126-lag + nsum=nsum + npr(i)*npr(lag+i) + enddo + ccf0(lag)=2.0*nsum/(126.0-lag) + if(lag.ge.1 .and. ccf0(lag).gt.worst) worst=ccf0(lag) + enddo + + + worst1=0. + do lag=0,LAGMAX + nsum=0 + do i=1,126-lag + nsum=nsum + npr1(i)*npr1(lag+i) + enddo + ccf1(lag)=(63.0/64.0)*2.0*nsum/(126.0-lag) + if(lag.ge.1 .and. ccf1(lag).gt.worst1) worst1=ccf1(lag) + enddo + ccf1=ccf1/ccf1(0) + worst1=worst1/ccf1(0) + + np0=0 + np1=0 + n0=0 + do i=1,126 + if(npr2(i).eq.1) then + np0(i)=1 + n0=n0+1 + else if(npr2(i).eq.2) then + np1(i)=1 + endif + enddo + + worst2=0. + do lag=0,LAGMAX + nsum=0 + do i=1,126-lag + nsum=nsum + np0(i)*np0(lag+i) + np1(i)*np1(lag+i) + enddo + ccf2(lag)=2.0*nsum/(126.0-lag) + if(lag.ge.1 .and. ccf2(lag).gt.worst2) then + worst2=ccf2(lag) + lagbad=lag + endif + enddo + + do lag=0,LAGMAX + write(13,1100) lag,ccf0(lag),ccf1(lag),ccf2(lag) +1100 format(i3,3f10.3) + enddo + + print*,worst,worst1,worst2,n0,lagbad + + +999 end program synctst2 diff --git a/libm65/tastro.f90 b/map65/libm65/tastro.f90 similarity index 100% rename from libm65/tastro.f90 rename to map65/libm65/tastro.f90 diff --git a/libm65/timer.f90 b/map65/libm65/timer.f90 similarity index 100% rename from libm65/timer.f90 rename to map65/libm65/timer.f90 diff --git a/libm65/timeval.h b/map65/libm65/timeval.h similarity index 100% rename from libm65/timeval.h rename to map65/libm65/timeval.h diff --git a/libm65/timf2.f90 b/map65/libm65/timf2.f90 similarity index 100% rename from libm65/timf2.f90 rename to map65/libm65/timf2.f90 diff --git a/libm65/tm2.f90 b/map65/libm65/tm2.f90 similarity index 100% rename from libm65/tm2.f90 rename to map65/libm65/tm2.f90 diff --git a/libm65/tmoonsub.c b/map65/libm65/tmoonsub.c similarity index 100% rename from libm65/tmoonsub.c rename to map65/libm65/tmoonsub.c diff --git a/libm65/toxyz.f90 b/map65/libm65/toxyz.f90 similarity index 100% rename from libm65/toxyz.f90 rename to map65/libm65/toxyz.f90 diff --git a/libm65/trimlist.f90 b/map65/libm65/trimlist.f90 similarity index 100% rename from libm65/trimlist.f90 rename to map65/libm65/trimlist.f90 diff --git a/libm65/twkfreq.f90 b/map65/libm65/twkfreq.f90 similarity index 95% rename from libm65/twkfreq.f90 rename to map65/libm65/twkfreq.f90 index 7c240d529..be1fef0fe 100644 --- a/libm65/twkfreq.f90 +++ b/map65/libm65/twkfreq.f90 @@ -1,26 +1,26 @@ -subroutine twkfreq(c3,c4,npts,fsample,a) - - complex c3(npts) - complex c4(npts) - complex w,wstep - real a(3) - data twopi/6.283185307/ - -! Mix the complex signal - w=1.0 - wstep=1.0 - x0=0.5*(npts+1) - s=2.0/npts - do i=1,npts - x=s*(i-x0) - p2=1.5*x*x - 0.5 -! p3=2.5*(x**3) - 1.5*x -! p4=4.375*(x**4) - 3.75*(x**2) + 0.375 - dphi=(a(1) + x*a(2) + p2*a(3)) * (twopi/fsample) - wstep=cmplx(cos(dphi),sin(dphi)) - w=w*wstep - c4(i)=w*c3(i) - enddo - - return -end subroutine twkfreq +subroutine twkfreq(c3,c4,npts,fsample,a) + + complex c3(npts) + complex c4(npts) + complex w,wstep + real a(3) + data twopi/6.283185307/ + +! Mix the complex signal + w=1.0 + wstep=1.0 + x0=0.5*(npts+1) + s=2.0/npts + do i=1,npts + x=s*(i-x0) + p2=1.5*x*x - 0.5 +! p3=2.5*(x**3) - 1.5*x +! p4=4.375*(x**4) - 3.75*(x**2) + 0.375 + dphi=(a(1) + x*a(2) + p2*a(3)) * (twopi/fsample) + wstep=cmplx(cos(dphi),sin(dphi)) + w=w*wstep + c4(i)=w*c3(i) + enddo + + return +end subroutine twkfreq diff --git a/libm65/twkfreq_xy.f90 b/map65/libm65/twkfreq_xy.f90 similarity index 100% rename from libm65/twkfreq_xy.f90 rename to map65/libm65/twkfreq_xy.f90 diff --git a/libm65/usleep.c b/map65/libm65/usleep.c similarity index 100% rename from libm65/usleep.c rename to map65/libm65/usleep.c diff --git a/libm65/wavhdr.f90 b/map65/libm65/wavhdr.f90 similarity index 100% rename from libm65/wavhdr.f90 rename to map65/libm65/wavhdr.f90 diff --git a/libm65/wrapkarn.c b/map65/libm65/wrapkarn.c similarity index 100% rename from libm65/wrapkarn.c rename to map65/libm65/wrapkarn.c diff --git a/libm65/zplot.f90 b/map65/libm65/zplot.f90 similarity index 100% rename from libm65/zplot.f90 rename to map65/libm65/zplot.f90 diff --git a/libusb.a b/map65/libusb.a similarity index 100% rename from libusb.a rename to map65/libusb.a diff --git a/libwsock32.a b/map65/libwsock32.a similarity index 100% rename from libwsock32.a rename to map65/libwsock32.a diff --git a/main.cpp b/map65/main.cpp similarity index 100% rename from main.cpp rename to map65/main.cpp diff --git a/mainwindow.cpp b/map65/mainwindow.cpp similarity index 100% rename from mainwindow.cpp rename to map65/mainwindow.cpp diff --git a/mainwindow.h b/map65/mainwindow.h similarity index 100% rename from mainwindow.h rename to map65/mainwindow.h diff --git a/mainwindow.ui b/map65/mainwindow.ui similarity index 96% rename from mainwindow.ui rename to map65/mainwindow.ui index ce2afd471..3d171db90 100644 --- a/mainwindow.ui +++ b/map65/mainwindow.ui @@ -1,1700 +1,1700 @@ - - - MainWindow - - - - 0 - 0 - 635 - 512 - - - - - 0 - 0 - - - - - 635 - 0 - - - - - 2048 - 800 - - - - SpecJT by K1JT - - - - - - - - - - - - - 0 - 0 - - - - - 453 - 170 - - - - - 620 - 16777215 - - - - Freq DF Pol UTC DT dB RC DS TxPol - - - - - - - 0 - 0 - - - - - 421 - 100 - - - - - 610 - 400 - - - - - Courier New - 10 - - - - Qt::ScrollBarAlwaysOn - - - Qt::ScrollBarAsNeeded - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Courier New'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - false - - - - - - - - - - - - - 50 - 0 - - - - Log &QSO - - - - - - - - 50 - 0 - - - - &Stop - - - - - - - - 0 - 0 - - - - - 50 - 0 - - - - - 16777215 - 16777215 - - - - &Monitor - - - - - - - - 50 - 0 - - - - &Decode - - - - - - - - 50 - 0 - - - - &Erase - - - - - - - - 0 - 0 - - - - - 50 - 0 - - - - &Auto is OFF - - - - - - - - 0 - 0 - - - - - 50 - 0 - - - - St&op Tx - - - - - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - - - - 0 - 0 - - - - - 164 - 40 - - - - - 290 - 16777215 - - - - - - - DX Call Grid - - - - - 231 - 13 - 50 - 23 - - - - - 50 - 16777215 - - - - SetMsgs - - - - - - 7 - 13 - 150 - 64 - - - - - - - - - - 0 - 0 - - - - - 0 - 23 - - - - - 70 - 16777215 - - - - - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 23 - - - - - 70 - 16777215 - - - - - - - Qt::AlignCenter - - - - - - - - - - - - 0 - 0 - - - - - 70 - 0 - - - - - 50 - 16777215 - - - - &Lookup - - - - - - - - 70 - 0 - - - - - 50 - 16777215 - - - - Add - - - - - - - - - - - 40 - 80 - 90 - 23 - - - - - 0 - 0 - - - - - 90 - 0 - - - - - 70 - 16777215 - - - - &GenStdMsgs - - - - - - - - - 140 - 0 - - - - - 165 - 60 - - - - - 16 - - - - QFrame::Panel - - - 2014 Dec 02 -01:23:45 - - - Qt::AlignCenter - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - 0 - 23 - - - - - 80 - 16777215 - - - - Tx first - - - - - - - - 90 - 0 - - - - - 80 - 16777215 - - - - Tx Q65 $ - - - - - - - - 90 - 0 - - - - - 80 - 16777215 - - - - Set Tx Freq - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - NB - - - - - - - false - - - - 0 - 0 - - - - - 80 - 16777215 - - - - 0 - - - 100 - - - 40 - - - Qt::Horizontal - - - - - - - - - - 0 - 0 - - - - - 42 - 0 - - - - - 42 - 18 - - - - 500 - - - Qt::AlignCenter - - - - - - - true - - - - 0 - 0 - - - - - 0 - 23 - - - - - 18 - 16777215 - - - - 0 - - - 6 - - - 5 - - - - - - - - 0 - 0 - - - - - 20 - 16777215 - - - - Tol - - - - - - - - - - - - - - - - 160 - 0 - - - - - 180 - 24 - - - - - MS Shell Dlg 2 - - - - - - - - - - - - 160 - 0 - - - - - 180 - 24 - - - - - - - - - 160 - 0 - - - - - 180 - 24 - - - - - - - - - 160 - 0 - - - - - 180 - 24 - - - - - - - - - 160 - 0 - - - - - 180 - 24 - - - - - - - - - 160 - 0 - - - - - 180 - 24 - - - - - - - - - - - - - 16 - 0 - - - - - 0 - 20 - - - - - 20 - 16777215 - - - - - - - true - - - buttonGroup - - - - - - - - 16 - 0 - - - - - 0 - 20 - - - - - 20 - 16777215 - - - - - - - buttonGroup - - - - - - - - 16 - 0 - - - - - 0 - 20 - - - - - 20 - 16777215 - - - - - - - buttonGroup - - - - - - - - 16 - 0 - - - - - 0 - 20 - - - - - 20 - 16777215 - - - - - - - buttonGroup - - - - - - - - 16 - 0 - - - - - 0 - 20 - - - - - 20 - 16777215 - - - - - - - buttonGroup - - - - - - - - 16 - 0 - - - - - 0 - 20 - - - - - 20 - 16777215 - - - - - - - buttonGroup - - - - - - - - - - - - 50 - 20 - - - - - 0 - 16 - - - - - 29 - 20 - - - - Tx1 - - - - - - - - 0 - 16 - - - - - 29 - 20 - - - - Tx2 - - - - - - - - 0 - 16 - - - - - 29 - 20 - - - - Tx3 - - - - - - - - 0 - 16 - - - - - 29 - 20 - - - - Tx4 - - - - - - - - 0 - 16 - - - - - 29 - 20 - - - - Tx5 - - - - - - - - 0 - 16 - - - - - 29 - 20 - - - - Tx6 - - - - - - - - - - - - - - - - - 0 - 0 - 635 - 21 - - - - - File - - - - - - - - - - - - - - - - - Setup - - - - - - - - - - - - - - - View - - - - Waterfall palette - - - - - - - - - - - - - - Decode - - - - - - - - - - - - - Save - - - - - - - Help - - - - - - - - - - Mode - - - - - - - - - - - - - - - - - - - - - - - - TopToolBarArea - - - false - - - - - - Exit - - - - - Options - - - F2 - - - - - About MAP65 - - - Ctrl+F1 - - - - - Astro Data - - - Shift+F10 - - - - - Band Map - - - - - Messages - - - - - Wide Waterfall - - - - - Open - - - - - Open next in directory - - - F6 - - - - - Decode remaining files in directory - - - Shift+F6 - - - - - Delete all *.tf2 and *.iq files in SaveDir - - - - - Erase Band Map and Messages - - - - - Erase map65_rx.log - - - - - true - - - false - - - Linrad - - - - - true - - - true - - - CuteSDR - - - - - Find Delta Phi - - - - - true - - - F4 sets Tx6 - - - - - true - - - Only EME calls - - - - - true - - - No shorthand decodes if Tx1 - - - - - true - - - true - - - No Deep Search - - - - - true - - - Normal Deep Search - - - - - true - - - Aggressive Deep Search - - - - - true - - - true - - - None - - - - - true - - - Save all - - - - - true - - - 50 - - - - - true - - - true - - - 144 - - - - - true - - - 222 - - - - - true - - - 432 - - - - - true - - - 1296 - - - - - true - - - 2304 - - - - - Online User's Guide - - - F1 - - - - - Keyboard shortcuts - - - - - Special mouse commands - - - - - Available suffixes and add-on-prefixes - - - - - Erase map65_tx.log - - - - - true - - - JT65A - - - - - true - - - true - - - JT65B - - - - - true - - - JT65C - - - - - I/Q Calibration - - - F7 - - - - - Adjust Rx I/Q Calibration - - - - - true - - - Apply Rx I/Q Calibration - - - - - true - - - AFMHot - - - - - true - - - Blue - - - - - FUNcube Dongle Settings - - - - - Edit wsjt.log - - - Alt+Shift+E - - - - - Tx Tune - - - Alt+T - - - - - true - - - Decode Q65 near QSO frequency - - - - - true - - - Q65A - - - - - true - - - Q65B - - - - - true - - - No JT65 - - - - - true - - - true - - - No Q65 - - - - - true - - - Q65C - - - - - true - - - Q65D - - - - - true - - - Q65E - - - - - - - DisplayText - QTextBrowser -
displaytext.h
-
-
- - - - monitorButton - toggled(bool) - MainWindow - update() - - - 264 - 275 - - - 126 - 515 - - - - - - - - true - - - -
+ + + MainWindow + + + + 0 + 0 + 635 + 512 + + + + + 0 + 0 + + + + + 635 + 0 + + + + + 2048 + 800 + + + + SpecJT by K1JT + + + + + + + + + + + + + 0 + 0 + + + + + 453 + 170 + + + + + 620 + 16777215 + + + + Freq DF Pol UTC DT dB RC DS TxPol + + + + + + + 0 + 0 + + + + + 421 + 100 + + + + + 610 + 400 + + + + + Courier New + 10 + + + + Qt::ScrollBarAlwaysOn + + + Qt::ScrollBarAsNeeded + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Courier New'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + false + + + + + + + + + + + + + 50 + 0 + + + + Log &QSO + + + + + + + + 50 + 0 + + + + &Stop + + + + + + + + 0 + 0 + + + + + 50 + 0 + + + + + 16777215 + 16777215 + + + + &Monitor + + + + + + + + 50 + 0 + + + + &Decode + + + + + + + + 50 + 0 + + + + &Erase + + + + + + + + 0 + 0 + + + + + 50 + 0 + + + + &Auto is OFF + + + + + + + + 0 + 0 + + + + + 50 + 0 + + + + St&op Tx + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + 0 + 0 + + + + + 164 + 40 + + + + + 290 + 16777215 + + + + + + + DX Call Grid + + + + + 231 + 13 + 50 + 23 + + + + + 50 + 16777215 + + + + SetMsgs + + + + + + 7 + 13 + 150 + 64 + + + + + + + + + + 0 + 0 + + + + + 0 + 23 + + + + + 70 + 16777215 + + + + + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 23 + + + + + 70 + 16777215 + + + + + + + Qt::AlignCenter + + + + + + + + + + + + 0 + 0 + + + + + 70 + 0 + + + + + 50 + 16777215 + + + + &Lookup + + + + + + + + 70 + 0 + + + + + 50 + 16777215 + + + + Add + + + + + + + + + + + 40 + 80 + 90 + 23 + + + + + 0 + 0 + + + + + 90 + 0 + + + + + 70 + 16777215 + + + + &GenStdMsgs + + + + + + + + + 140 + 0 + + + + + 165 + 60 + + + + + 16 + + + + QFrame::Panel + + + 2014 Dec 02 +01:23:45 + + + Qt::AlignCenter + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 20 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 23 + + + + + 80 + 16777215 + + + + Tx first + + + + + + + + 90 + 0 + + + + + 80 + 16777215 + + + + Tx Q65 $ + + + + + + + + 90 + 0 + + + + + 80 + 16777215 + + + + Set Tx Freq + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + NB + + + + + + + false + + + + 0 + 0 + + + + + 80 + 16777215 + + + + 0 + + + 100 + + + 40 + + + Qt::Horizontal + + + + + + + + + + 0 + 0 + + + + + 42 + 0 + + + + + 42 + 18 + + + + 500 + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 0 + + + + + 0 + 23 + + + + + 18 + 16777215 + + + + 0 + + + 6 + + + 5 + + + + + + + + 0 + 0 + + + + + 20 + 16777215 + + + + Tol + + + + + + + + + + + + + + + + 160 + 0 + + + + + 180 + 24 + + + + + MS Shell Dlg 2 + + + + + + + + + + + + 160 + 0 + + + + + 180 + 24 + + + + + + + + + 160 + 0 + + + + + 180 + 24 + + + + + + + + + 160 + 0 + + + + + 180 + 24 + + + + + + + + + 160 + 0 + + + + + 180 + 24 + + + + + + + + + 160 + 0 + + + + + 180 + 24 + + + + + + + + + + + + + 16 + 0 + + + + + 0 + 20 + + + + + 20 + 16777215 + + + + + + + true + + + buttonGroup + + + + + + + + 16 + 0 + + + + + 0 + 20 + + + + + 20 + 16777215 + + + + + + + buttonGroup + + + + + + + + 16 + 0 + + + + + 0 + 20 + + + + + 20 + 16777215 + + + + + + + buttonGroup + + + + + + + + 16 + 0 + + + + + 0 + 20 + + + + + 20 + 16777215 + + + + + + + buttonGroup + + + + + + + + 16 + 0 + + + + + 0 + 20 + + + + + 20 + 16777215 + + + + + + + buttonGroup + + + + + + + + 16 + 0 + + + + + 0 + 20 + + + + + 20 + 16777215 + + + + + + + buttonGroup + + + + + + + + + + + + 50 + 20 + + + + + 0 + 16 + + + + + 29 + 20 + + + + Tx1 + + + + + + + + 0 + 16 + + + + + 29 + 20 + + + + Tx2 + + + + + + + + 0 + 16 + + + + + 29 + 20 + + + + Tx3 + + + + + + + + 0 + 16 + + + + + 29 + 20 + + + + Tx4 + + + + + + + + 0 + 16 + + + + + 29 + 20 + + + + Tx5 + + + + + + + + 0 + 16 + + + + + 29 + 20 + + + + Tx6 + + + + + + + + + + + + + + + + + 0 + 0 + 635 + 21 + + + + + File + + + + + + + + + + + + + + + + + Setup + + + + + + + + + + + + + + + View + + + + Waterfall palette + + + + + + + + + + + + + + Decode + + + + + + + + + + + + + Save + + + + + + + Help + + + + + + + + + + Mode + + + + + + + + + + + + + + + + + + + + + + + + TopToolBarArea + + + false + + + + + + Exit + + + + + Options + + + F2 + + + + + About MAP65 + + + Ctrl+F1 + + + + + Astro Data + + + Shift+F10 + + + + + Band Map + + + + + Messages + + + + + Wide Waterfall + + + + + Open + + + + + Open next in directory + + + F6 + + + + + Decode remaining files in directory + + + Shift+F6 + + + + + Delete all *.tf2 and *.iq files in SaveDir + + + + + Erase Band Map and Messages + + + + + Erase map65_rx.log + + + + + true + + + false + + + Linrad + + + + + true + + + true + + + CuteSDR + + + + + Find Delta Phi + + + + + true + + + F4 sets Tx6 + + + + + true + + + Only EME calls + + + + + true + + + No shorthand decodes if Tx1 + + + + + true + + + true + + + No Deep Search + + + + + true + + + Normal Deep Search + + + + + true + + + Aggressive Deep Search + + + + + true + + + true + + + None + + + + + true + + + Save all + + + + + true + + + 50 + + + + + true + + + true + + + 144 + + + + + true + + + 222 + + + + + true + + + 432 + + + + + true + + + 1296 + + + + + true + + + 2304 + + + + + Online User's Guide + + + F1 + + + + + Keyboard shortcuts + + + + + Special mouse commands + + + + + Available suffixes and add-on-prefixes + + + + + Erase map65_tx.log + + + + + true + + + JT65A + + + + + true + + + true + + + JT65B + + + + + true + + + JT65C + + + + + I/Q Calibration + + + F7 + + + + + Adjust Rx I/Q Calibration + + + + + true + + + Apply Rx I/Q Calibration + + + + + true + + + AFMHot + + + + + true + + + Blue + + + + + FUNcube Dongle Settings + + + + + Edit wsjt.log + + + Alt+Shift+E + + + + + Tx Tune + + + Alt+T + + + + + true + + + Decode Q65 near QSO frequency + + + + + true + + + Q65A + + + + + true + + + Q65B + + + + + true + + + No JT65 + + + + + true + + + true + + + No Q65 + + + + + true + + + Q65C + + + + + true + + + Q65D + + + + + true + + + Q65E + + + + + + + DisplayText + QTextBrowser +
displaytext.h
+
+
+ + + + monitorButton + toggled(bool) + MainWindow + update() + + + 264 + 275 + + + 126 + 515 + + + + + + + + true + + + +
diff --git a/map65.pro b/map65/map65.pro similarity index 100% rename from map65.pro rename to map65/map65.pro diff --git a/map65.rc b/map65/map65.rc similarity index 98% rename from map65.rc rename to map65/map65.rc index 9a0de814a..96895aada 100644 --- a/map65.rc +++ b/map65/map65.rc @@ -1 +1 @@ -IDI_ICON1 ICON DISCARDABLE "wsjt.ico" +IDI_ICON1 ICON DISCARDABLE "wsjt.ico" diff --git a/map65_config.h.in b/map65/map65_config.h.in similarity index 100% rename from map65_config.h.in rename to map65/map65_config.h.in diff --git a/map65b.iss b/map65/map65b.iss similarity index 98% rename from map65b.iss rename to map65/map65b.iss index 44e03ef05..e2fbdf495 100644 --- a/map65b.iss +++ b/map65/map65b.iss @@ -1,46 +1,46 @@ -; For Use With JTSDK v2.0.0 -#define MyAppName "MAP65" -#define MyAppVersion "2.7" -#define MyAppPublisher "Joe Taylor, K1JT" -#define MyAppCopyright "Copyright (C) 2001-2017 by Joe Taylor, K1JT" -#define MyAppURL "http://physics.princeton.edu/pulsar/k1jt/map65.html" -#define WsjtGroupURL "https://groups.yahoo.com/neo/groups/wsjtgroup/info" - -[Setup] -AppName={#MyAppName} -AppVersion={#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DisableReadyPage=yes -DefaultDirName=C:\WSJT\MAP65 -DefaultGroupName=WSJT -DisableProgramGroupPage=yes -LicenseFile=C:\JTSDK\common-licenses\GPL-3 -OutputDir=C:\JTSDK\map65\package -OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Win32 -SetupIconFile=C:\JTSDK\icons\wsjt.ico -Compression=lzma -SolidCompression=yes - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -Source: "c:\JTSDK\map65\install\Release\bin\*"; DestDir: "{app}"; Excludes: CALL3.TXT; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "C:\JTSDK\src\map65\resources\*"; DestDir: "{app}"; Flags: ignoreversion onlyifdoesntexist - -[Icons] -Name: "{group}\{#MyAppName}\Documentation\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" -Name: "{group}\{#MyAppName}\Resources\{cm:ProgramOnTheWeb,WSJT Group}"; Filename: "{#WsjtGroupURL}" -Name: "{group}\{#MyAppName}\Tools\Wisdom-1"; Filename: "{app}\wisdom1.bat"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" -Name: "{group}\{#MyAppName}\Tools\Wisdom-2"; Filename: "{app}\wisdom2.bat"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" -Name: "{group}\{#MyAppName}\Uninstall\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Comment: "Uninstall MAP65"; -Name: "{group}\{#MyAppName}\{#MyAppName}"; Filename: "{app}\map65.exe"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" -Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\map65.exe"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" - -[Run] -Filename: "{app}\wisdom1.bat"; Description: "Optimize plans for FFTs (takes a few minutes)"; Flags: postinstall -Filename: "{app}\wisdom2.bat"; Description: "Patiently optimize plans for FFTs (up to one hour)"; Flags: postinstall unchecked -Filename: "{app}\map65.exe"; Description: "Launch MAP65"; Flags: postinstall nowait unchecked +; For Use With JTSDK v2.0.0 +#define MyAppName "MAP65" +#define MyAppVersion "2.7" +#define MyAppPublisher "Joe Taylor, K1JT" +#define MyAppCopyright "Copyright (C) 2001-2017 by Joe Taylor, K1JT" +#define MyAppURL "http://physics.princeton.edu/pulsar/k1jt/map65.html" +#define WsjtGroupURL "https://groups.yahoo.com/neo/groups/wsjtgroup/info" + +[Setup] +AppName={#MyAppName} +AppVersion={#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DisableReadyPage=yes +DefaultDirName=C:\WSJT\MAP65 +DefaultGroupName=WSJT +DisableProgramGroupPage=yes +LicenseFile=C:\JTSDK\common-licenses\GPL-3 +OutputDir=C:\JTSDK\map65\package +OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Win32 +SetupIconFile=C:\JTSDK\icons\wsjt.ico +Compression=lzma +SolidCompression=yes + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Files] +Source: "c:\JTSDK\map65\install\Release\bin\*"; DestDir: "{app}"; Excludes: CALL3.TXT; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\JTSDK\src\map65\resources\*"; DestDir: "{app}"; Flags: ignoreversion onlyifdoesntexist + +[Icons] +Name: "{group}\{#MyAppName}\Documentation\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" +Name: "{group}\{#MyAppName}\Resources\{cm:ProgramOnTheWeb,WSJT Group}"; Filename: "{#WsjtGroupURL}" +Name: "{group}\{#MyAppName}\Tools\Wisdom-1"; Filename: "{app}\wisdom1.bat"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" +Name: "{group}\{#MyAppName}\Tools\Wisdom-2"; Filename: "{app}\wisdom2.bat"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" +Name: "{group}\{#MyAppName}\Uninstall\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Comment: "Uninstall MAP65"; +Name: "{group}\{#MyAppName}\{#MyAppName}"; Filename: "{app}\map65.exe"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" +Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\map65.exe"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" + +[Run] +Filename: "{app}\wisdom1.bat"; Description: "Optimize plans for FFTs (takes a few minutes)"; Flags: postinstall +Filename: "{app}\wisdom2.bat"; Description: "Patiently optimize plans for FFTs (up to one hour)"; Flags: postinstall unchecked +Filename: "{app}\map65.exe"; Description: "Launch MAP65"; Flags: postinstall nowait unchecked diff --git a/messages.cpp b/map65/messages.cpp similarity index 100% rename from messages.cpp rename to map65/messages.cpp diff --git a/messages.h b/map65/messages.h similarity index 100% rename from messages.h rename to map65/messages.h diff --git a/messages.ui b/map65/messages.ui similarity index 96% rename from messages.ui rename to map65/messages.ui index 9c365081c..3bf0dc67a 100644 --- a/messages.ui +++ b/map65/messages.ui @@ -1,107 +1,107 @@ - - - Messages - - - - 0 - 0 - 399 - 595 - - - - - 0 - 0 - - - - Dialog - - - - - - QLayout::SetDefaultConstraint - - - - - - - - 0 - 0 - - - - Freq DF Pol UTC dB - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - CQ* Only - - - - - - - CQ Only - - - - - - - - - - 0 - 0 - - - - - 340 - 0 - - - - - Courier New - 9 - - - - - - - - - - - DisplayText - QTextBrowser -
displaytext.h
-
-
- - -
+ + + Messages + + + + 0 + 0 + 399 + 595 + + + + + 0 + 0 + + + + Dialog + + + + + + QLayout::SetDefaultConstraint + + + + + + + + 0 + 0 + + + + Freq DF Pol UTC dB + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + CQ* Only + + + + + + + CQ Only + + + + + + + + + + 0 + 0 + + + + + 340 + 0 + + + + + Courier New + 9 + + + + + + + + + + + DisplayText + QTextBrowser +
displaytext.h
+
+
+ + +
diff --git a/meterwidget.cpp b/map65/meterwidget.cpp similarity index 100% rename from meterwidget.cpp rename to map65/meterwidget.cpp diff --git a/meterwidget.h b/map65/meterwidget.h similarity index 100% rename from meterwidget.h rename to map65/meterwidget.h diff --git a/paInputDevice.c b/map65/paInputDevice.c similarity index 100% rename from paInputDevice.c rename to map65/paInputDevice.c diff --git a/pa_get_device_info.c b/map65/pa_get_device_info.c similarity index 100% rename from pa_get_device_info.c rename to map65/pa_get_device_info.c diff --git a/palir-02.dll b/map65/palir-02.dll similarity index 100% rename from palir-02.dll rename to map65/palir-02.dll diff --git a/plotter.cpp b/map65/plotter.cpp similarity index 100% rename from plotter.cpp rename to map65/plotter.cpp diff --git a/plotter.h b/map65/plotter.h similarity index 100% rename from plotter.h rename to map65/plotter.h diff --git a/portaudio.h b/map65/portaudio.h similarity index 97% rename from portaudio.h rename to map65/portaudio.h index cc30a28a1..250fba021 100755 --- a/portaudio.h +++ b/map65/portaudio.h @@ -1,1123 +1,1123 @@ - -#ifndef PORTAUDIO_H -#define PORTAUDIO_H -/* - * $Id: portaudio.h,v 1.1 2005/11/29 21:27:24 joe Exp $ - * PortAudio Portable Real-Time Audio Library - * PortAudio API Header File - * Latest version available at: http://www.portaudio.com/ - * - * Copyright (c) 1999-2002 Ross Bencina and Phil Burk - * - * 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. - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. - * - * 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. - */ - -/** @file - @brief The PortAudio API. -*/ - - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -/** Retrieve the release number of the currently running PortAudio build, - eg 1900. -*/ -int Pa_GetVersion( void ); - - -/** Retrieve a textual description of the current PortAudio build, - eg "PortAudio V19-devel 13 October 2002". -*/ -const char* Pa_GetVersionText( void ); - - -/** Error codes returned by PortAudio functions. - Note that with the exception of paNoError, all PaErrorCodes are negative. -*/ - -typedef int PaError; -typedef enum PaErrorCode -{ - paNoError = 0, - - paNotInitialized = -10000, - paUnanticipatedHostError, - paInvalidChannelCount, - paInvalidSampleRate, - paInvalidDevice, - paInvalidFlag, - paSampleFormatNotSupported, - paBadIODeviceCombination, - paInsufficientMemory, - paBufferTooBig, - paBufferTooSmall, - paNullCallback, - paBadStreamPtr, - paTimedOut, - paInternalError, - paDeviceUnavailable, - paIncompatibleHostApiSpecificStreamInfo, - paStreamIsStopped, - paStreamIsNotStopped, - paInputOverflowed, - paOutputUnderflowed, - paHostApiNotFound, - paInvalidHostApi, - paCanNotReadFromACallbackStream, /**< @todo review error code name */ - paCanNotWriteToACallbackStream, /**< @todo review error code name */ - paCanNotReadFromAnOutputOnlyStream, /**< @todo review error code name */ - paCanNotWriteToAnInputOnlyStream, /**< @todo review error code name */ - paIncompatibleStreamHostApi -} PaErrorCode; - - -/** Translate the supplied PortAudio error code into a human readable - message. -*/ -const char *Pa_GetErrorText( PaError errorCode ); - - -/** Library initialization function - call this before using PortAudio. - This function initialises internal data structures and prepares underlying - host APIs for use. This function MUST be called before using any other - PortAudio API functions. - - If Pa_Initialize() is called multiple times, each successful - call must be matched with a corresponding call to Pa_Terminate(). - Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not - required to be fully nested. - - Note that if Pa_Initialize() returns an error code, Pa_Terminate() should - NOT be called. - - @return paNoError if successful, otherwise an error code indicating the cause - of failure. - - @see Pa_Terminate -*/ -PaError Pa_Initialize( void ); - - -/** Library termination function - call this when finished using PortAudio. - This function deallocates all resources allocated by PortAudio since it was - initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has - been called multiple times, each call must be matched with a corresponding call - to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically - close any PortAudio streams that are still open. - - Pa_Terminate() MUST be called before exiting a program which uses PortAudio. - Failure to do so may result in serious resource leaks, such as audio devices - not being available until the next reboot. - - @return paNoError if successful, otherwise an error code indicating the cause - of failure. - - @see Pa_Initialize -*/ -PaError Pa_Terminate( void ); - - - -/** The type used to refer to audio devices. Values of this type usually - range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice - and paUseHostApiSpecificDeviceSpecification values. - - @see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification -*/ -typedef int PaDeviceIndex; - - -/** A special PaDeviceIndex value indicating that no device is available, - or should be used. - - @see PaDeviceIndex -*/ -#define paNoDevice ((PaDeviceIndex)-1) - - -/** A special PaDeviceIndex value indicating that the device(s) to be used - are specified in the host api specific stream info structure. - - @see PaDeviceIndex -*/ -#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) - - -/* Host API enumeration mechanism */ - -/** The type used to enumerate to host APIs at runtime. Values of this type - range from 0 to (Pa_GetHostApiCount()-1). - - @see Pa_GetHostApiCount -*/ -typedef int PaHostApiIndex; - - -/** Retrieve the number of available host APIs. Even if a host API is - available it may have no devices available. - - @return A non-negative value indicating the number of available host APIs - or, a PaErrorCode (which are always negative) if PortAudio is not initialized - or an error is encountered. - - @see PaHostApiIndex -*/ -PaHostApiIndex Pa_GetHostApiCount( void ); - - -/** Retrieve the index of the default host API. The default host API will be - the lowest common denominator host API on the current platform and is - unlikely to provide the best performance. - - @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) - indicating the default host API index or, a PaErrorCode (which are always - negative) if PortAudio is not initialized or an error is encountered. -*/ -PaHostApiIndex Pa_GetDefaultHostApi( void ); - - -/** Unchanging unique identifiers for each supported host API. This type - is used in the PaHostApiInfo structure. The values are guaranteed to be - unique and to never change, thus allowing code to be written that - conditionally uses host API specific extensions. - - New type ids will be allocated when support for a host API reaches - "public alpha" status, prior to that developers should use the - paInDevelopment type id. - - @see PaHostApiInfo -*/ -typedef enum PaHostApiTypeId -{ - paInDevelopment=0, /* use while developing support for a new host API */ - paDirectSound=1, - paMME=2, - paASIO=3, - paSoundManager=4, - paCoreAudio=5, - paOSS=7, - paALSA=8, - paAL=9, - paBeOS=10, - paWDMKS=11, - paJACK=12 -} PaHostApiTypeId; - - -/** A structure containing information about a particular host API. */ - -typedef struct PaHostApiInfo -{ - /** this is struct version 1 */ - int structVersion; - /** The well known unique identifier of this host API @see PaHostApiTypeId */ - PaHostApiTypeId type; - /** A textual description of the host API for display on user interfaces. */ - const char *name; - - /** The number of devices belonging to this host API. This field may be - used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate - all devices for this host API. - @see Pa_HostApiDeviceIndexToDeviceIndex - */ - int deviceCount; - - /** The the default input device for this host API. The value will be a - device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice - if no default input device is available. - */ - PaDeviceIndex defaultInputDevice; - - /** The the default output device for this host API. The value will be a - device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice - if no default output device is available. - */ - PaDeviceIndex defaultOutputDevice; - -} PaHostApiInfo; - - -/** Retrieve a pointer to a structure containing information about a specific - host Api. - - @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) - - @return A pointer to an immutable PaHostApiInfo structure describing - a specific host API. If the hostApi parameter is out of range or an error - is encountered, the function returns NULL. - - The returned structure is owned by the PortAudio implementation and must not - be manipulated or freed. The pointer is only guaranteed to be valid between - calls to Pa_Initialize() and Pa_Terminate(). -*/ -const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); - - -/** Convert a static host API unique identifier, into a runtime - host API index. - - @param type A unique host API identifier belonging to the PaHostApiTypeId - enumeration. - - @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, - a PaErrorCode (which are always negative) if PortAudio is not initialized - or an error is encountered. - - The paHostApiNotFound error code indicates that the host API specified by the - type parameter is not available. - - @see PaHostApiTypeId -*/ -PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); - - -/** Convert a host-API-specific device index to standard PortAudio device index. - This function may be used in conjunction with the deviceCount field of - PaHostApiInfo to enumerate all devices for the specified host API. - - @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) - - @param hostApiDeviceIndex A valid per-host device index in the range - 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) - - @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) - or, a PaErrorCode (which are always negative) if PortAudio is not initialized - or an error is encountered. - - A paInvalidHostApi error code indicates that the host API index specified by - the hostApi parameter is out of range. - - A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter - is out of range. - - @see PaHostApiInfo -*/ -PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, - int hostApiDeviceIndex ); - - - -/** Structure used to return information about a host error condition. -*/ -typedef struct PaHostErrorInfo{ - PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ - long errorCode; /**< the error code returned */ - const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ -}PaHostErrorInfo; - - -/** Return information about the last host error encountered. The error - information returned by Pa_GetLastHostErrorInfo() will never be modified - asyncronously by errors occurring in other PortAudio owned threads - (such as the thread that manages the stream callback.) - - This function is provided as a last resort, primarily to enhance debugging - by providing clients with access to all available error information. - - @return A pointer to an immutable structure constaining information about - the host error. The values in this structure will only be valid if a - PortAudio function has previously returned the paUnanticipatedHostError - error code. -*/ -const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); - - - -/* Device enumeration and capabilities */ - -/** Retrieve the number of available devices. The number of available devices - may be zero. - - @return A non-negative value indicating the number of available devices or, - a PaErrorCode (which are always negative) if PortAudio is not initialized - or an error is encountered. -*/ -PaDeviceIndex Pa_GetDeviceCount( void ); - - -/** Retrieve the index of the default input device. The result can be - used in the inputDevice parameter to Pa_OpenStream(). - - @return The default input device index for the default host API, or paNoDevice - if no default input device is available or an error was encountered. -*/ -PaDeviceIndex Pa_GetDefaultInputDevice( void ); - - -/** Retrieve the index of the default output device. The result can be - used in the outputDevice parameter to Pa_OpenStream(). - - @return The default output device index for the defualt host API, or paNoDevice - if no default output device is available or an error was encountered. - - @note - On the PC, the user can specify a default device by - setting an environment variable. For example, to use device #1. -
- set PA_RECOMMENDED_OUTPUT_DEVICE=1
-
- The user should first determine the available device ids by using - the supplied application "pa_devs". -*/ -PaDeviceIndex Pa_GetDefaultOutputDevice( void ); - - -/** The type used to represent monotonic time in seconds that can be used - for syncronisation. The type is used for the outTime argument to the - PaStreamCallback and as the result of Pa_GetStreamTime(). - - @see PaStreamCallback, Pa_GetStreamTime -*/ -typedef double PaTime; - - -/** A type used to specify one or more sample formats. Each value indicates - a possible format for sound data passed to and from the stream callback, - Pa_ReadStream and Pa_WriteStream. - - The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 - and aUInt8 are usually implemented by all implementations. - - The floating point representation (paFloat32) uses +1.0 and -1.0 as the - maximum and minimum respectively. - - paUInt8 is an unsigned 8 bit format where 128 is considered "ground" - - The paNonInterleaved flag indicates that a multichannel buffer is passed - as a set of non-interleaved pointers. - - @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo - @see paFloat32, paInt16, paInt32, paInt24, paInt8 - @see paUInt8, paCustomFormat, paNonInterleaved -*/ -typedef unsigned long PaSampleFormat; - - -#define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ -#define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ -#define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ -#define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ -#define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ -#define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ -#define paCustomFormat ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */ - -#define paNonInterleaved ((PaSampleFormat) 0x80000000) - -/** A structure providing information and capabilities of PortAudio devices. - Devices may support input, output or both input and output. -*/ -typedef struct PaDeviceInfo -{ - int structVersion; /* this is struct version 2 */ - const char *name; - PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/ - - int maxInputChannels; - int maxOutputChannels; - - /* Default latency values for interactive performance. */ - PaTime defaultLowInputLatency; - PaTime defaultLowOutputLatency; - /* Default latency values for robust non-interactive applications (eg. playing sound files). */ - PaTime defaultHighInputLatency; - PaTime defaultHighOutputLatency; - - double defaultSampleRate; -} PaDeviceInfo; - - -/** Retrieve a pointer to a PaDeviceInfo structure containing information - about the specified device. - @return A pointer to an immutable PaDeviceInfo structure. If the device - parameter is out of range the function returns NULL. - - @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) - - @note PortAudio manages the memory referenced by the returned pointer, - the client must not manipulate or free the memory. The pointer is only - guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). - - @see PaDeviceInfo, PaDeviceIndex -*/ -const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); - - -/** Parameters for one direction (input or output) of a stream. -*/ -typedef struct PaStreamParameters -{ - /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) - specifying the device to be used or the special constant - paUseHostApiSpecificDeviceSpecification which indicates that the actual - device(s) to use are specified in hostApiSpecificStreamInfo. - This field must not be set to paNoDevice. - */ - PaDeviceIndex device; - - /** The number of channels of sound to be delivered to the - stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). - It can range from 1 to the value of maxInputChannels in the - PaDeviceInfo record for the device specified by the device parameter. - */ - int channelCount; - - /** The sample format of the buffer provided to the stream callback, - a_ReadStream() or Pa_WriteStream(). It may be any of the formats described - by the PaSampleFormat enumeration. - */ - PaSampleFormat sampleFormat; - - /** The desired latency in seconds. Where practical, implementations should - configure their latency based on these parameters, otherwise they may - choose the closest viable latency instead. Unless the suggested latency - is greater than the absolute upper limit for the device implementations - shouldround the suggestedLatency up to the next practial value - ie to - provide an equal or higher latency than suggestedLatency whereever possibe. - Actual latency values for an open stream may be retrieved using the - inputLatency and outputLatency fields of the PaStreamInfo structure - returned by Pa_GetStreamInfo(). - @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo - */ - PaTime suggestedLatency; - - /** An optional pointer to a host api specific data structure - containing additional information for device setup and/or stream processing. - hostApiSpecificStreamInfo is never required for correct operation, - if not used it should be set to NULL. - */ - void *hostApiSpecificStreamInfo; - -} PaStreamParameters; - - -/** Return code for Pa_IsFormatSupported indicating success. */ -#define paFormatIsSupported (0) - -/** Determine whether it would be possible to open a stream with the specified - parameters. - - @param inputParameters A structure that describes the input parameters used to - open a stream. The suggestedLatency field is ignored. See PaStreamParameters - for a description of these parameters. inputParameters must be NULL for - output-only streams. - - @param outputParameters A structure that describes the output parameters used - to open a stream. The suggestedLatency field is ignored. See PaStreamParameters - for a description of these parameters. outputParameters must be NULL for - input-only streams. - - @param sampleRate The required sampleRate. For full-duplex streams it is the - sample rate for both input and output - - @return Returns 0 if the format is supported, and an error code indicating why - the format is not supported otherwise. The constant paFormatIsSupported is - provided to compare with the return value for success. - - @see paFormatIsSupported, PaStreamParameters -*/ -PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate ); - - - -/* Streaming types and functions */ - - -/** - A single PaStream can provide multiple channels of real-time - streaming audio input and output to a client application. A stream - provides access to audio hardware represented by one or more - PaDevices. Depending on the underlying Host API, it may be possible - to open multiple streams using the same device, however this behavior - is implementation defined. Portable applications should assume that - a PaDevice may be simultaneously used by at most one PaStream. - - Pointers to PaStream objects are passed between PortAudio functions that - operate on streams. - - @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, - Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, - Pa_GetStreamTime, Pa_GetStreamCpuLoad - -*/ -typedef void PaStream; - - -/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() - or Pa_OpenDefaultStream() to indicate that the stream callback will - accept buffers of any size. -*/ -#define paFramesPerBufferUnspecified (0) - - -/** Flags used to control the behavior of a stream. They are passed as - parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be - ORed together. - - @see Pa_OpenStream, Pa_OpenDefaultStream - @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, - paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags -*/ -typedef unsigned long PaStreamFlags; - -/** @see PaStreamFlags */ -#define paNoFlag ((PaStreamFlags) 0) - -/** Disable default clipping of out of range samples. - @see PaStreamFlags -*/ -#define paClipOff ((PaStreamFlags) 0x00000001) - -/** Disable default dithering. - @see PaStreamFlags -*/ -#define paDitherOff ((PaStreamFlags) 0x00000002) - -/** Flag requests that where possible a full duplex stream will not discard - overflowed input samples without calling the stream callback. This flag is - only valid for full duplex callback streams and only when used in combination - with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using - this flag incorrectly results in a paInvalidFlag error being returned from - Pa_OpenStream and Pa_OpenDefaultStream. - - @see PaStreamFlags, paFramesPerBufferUnspecified -*/ -#define paNeverDropInput ((PaStreamFlags) 0x00000004) - -/** Call the stream callback to fill initial output buffers, rather than the - default behavior of priming the buffers with zeros (silence). This flag has - no effect for input-only and blocking read/write streams. - - @see PaStreamFlags -*/ -#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) - -/** A mask specifying the platform specific bits. - @see PaStreamFlags -*/ -#define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) - -/** - Timing information for the buffers passed to the stream callback. -*/ -typedef struct PaStreamCallbackTimeInfo{ - PaTime inputBufferAdcTime; - PaTime currentTime; - PaTime outputBufferDacTime; -} PaStreamCallbackTimeInfo; - - -/** - Flag bit constants for the statusFlags to PaStreamCallback. - - @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, - paPrimingOutput -*/ -typedef unsigned long PaStreamCallbackFlags; - -/** In a stream opened with paFramesPerBufferUnspecified, indicates that - input data is all silence (zeros) because no real data is available. In a - stream opened without paFramesPerBufferUnspecified, it indicates that one or - more zero samples have been inserted into the input buffer to compensate - for an input underflow. - @see PaStreamCallbackFlags -*/ -#define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) - -/** In a stream opened with paFramesPerBufferUnspecified, indicates that data - prior to the first sample of the input buffer was discarded due to an - overflow, possibly because the stream callback is using too much CPU time. - Otherwise indicates that data prior to one or more samples in the - input buffer was discarded. - @see PaStreamCallbackFlags -*/ -#define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) - -/** Indicates that output data (or a gap) was inserted, possibly because the - stream callback is using too much CPU time. - @see PaStreamCallbackFlags -*/ -#define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) - -/** Indicates that output data will be discarded because no room is available. - @see PaStreamCallbackFlags -*/ -#define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) - -/** Some of all of the output data will be used to prime the stream, input - data may be zero. - @see PaStreamCallbackFlags -*/ -#define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) - -/** - Allowable return values for the PaStreamCallback. - @see PaStreamCallback -*/ -typedef enum PaStreamCallbackResult -{ - paContinue=0, - paComplete=1, - paAbort=2 -} PaStreamCallbackResult; - - -/** - Functions of type PaStreamCallback are implemented by PortAudio clients. - They consume, process or generate audio in response to requests from an - active PortAudio stream. - - @param input and @param output are arrays of interleaved samples, - the format, packing and number of channels used by the buffers are - determined by parameters to Pa_OpenStream(). - - @param frameCount The number of sample frames to be processed by - the stream callback. - - @param timeInfo The time in seconds when the first sample of the input - buffer was received at the audio input, the time in seconds when the first - sample of the output buffer will begin being played at the audio output, and - the time in seconds when the stream callback was called. - See also Pa_GetStreamTime() - - @param statusFlags Flags indicating whether input and/or output buffers - have been inserted or will be dropped to overcome underflow or overflow - conditions. - - @param userData The value of a user supplied pointer passed to - Pa_OpenStream() intended for storing synthesis data etc. - - @return - The stream callback should return one of the values in the - PaStreamCallbackResult enumeration. To ensure that the callback continues - to be called, it should return paContinue (0). Either paComplete or paAbort - can be returned to finish stream processing, after either of these values is - returned the callback will not be called again. If paAbort is returned the - stream will finish as soon as possible. If paComplete is returned, the stream - will continue until all buffers generated by the callback have been played. - This may be useful in applications such as soundfile players where a specific - duration of output is required. However, it is not necessary to utilise this - mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also - be used to stop the stream. The callback must always fill the entire output - buffer irrespective of its return value. - - @see Pa_OpenStream, Pa_OpenDefaultStream - - @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call - PortAudio API functions from within the stream callback. -*/ -typedef int PaStreamCallback( - const void *input, void *output, - unsigned long frameCount, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void *userData ); - - -/** Opens a stream for either input, output or both. - - @param stream The address of a PaStream pointer which will receive - a pointer to the newly opened stream. - - @param inputParameters A structure that describes the input parameters used by - the opened stream. See PaStreamParameters for a description of these parameters. - inputParameters must be NULL for output-only streams. - - @param outputParameters A structure that describes the output parameters used by - the opened stream. See PaStreamParameters for a description of these parameters. - outputParameters must be NULL for input-only streams. - - @param sampleRate The desired sampleRate. For full-duplex streams it is the - sample rate for both input and output - - @param framesPerBuffer The number of frames passed to the stream callback - function, or the preferred block granularity for a blocking read/write stream. - The special value paFramesPerBufferUnspecified (0) may be used to request that - the stream callback will recieve an optimal (and possibly varying) number of - frames based on host requirements and the requested latency settings. - Note: With some host APIs, the use of non-zero framesPerBuffer for a callback - stream may introduce an additional layer of buffering which could introduce - additional latency. PortAudio guarantees that the additional latency - will be kept to the theoretical minimum however, it is strongly recommended - that a non-zero framesPerBuffer value only be used when your algorithm - requires a fixed number of frames per stream callback. - - @param streamFlags Flags which modify the behaviour of the streaming process. - This parameter may contain a combination of flags ORed together. Some flags may - only be relevant to certain buffer formats. - - @param streamCallback A pointer to a client supplied function that is responsible - for processing and filling input and output buffers. If this parameter is NULL - the stream will be opened in 'blocking read/write' mode. In blocking mode, - the client can receive sample data using Pa_ReadStream and write sample data - using Pa_WriteStream, the number of samples that may be read or written - without blocking is returned by Pa_GetStreamReadAvailable and - Pa_GetStreamWriteAvailable respectively. - - @param userData A client supplied pointer which is passed to the stream callback - function. It could for example, contain a pointer to instance data necessary - for processing the audio buffers. This parameter is ignored if streamCallback - is NULL. - - @return - Upon success Pa_OpenStream() returns paNoError and places a pointer to a - valid PaStream in the stream argument. The stream is inactive (stopped). - If a call to Pa_OpenStream() fails, a non-zero error code is returned (see - PaError for possible error codes) and the value of stream is invalid. - - @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, - Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable -*/ -PaError Pa_OpenStream( PaStream** stream, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamFlags streamFlags, - PaStreamCallback *streamCallback, - void *userData ); - - -/** A simplified version of Pa_OpenStream() that opens the default input - and/or output devices. - - @param stream The address of a PaStream pointer which will receive - a pointer to the newly opened stream. - - @param numInputChannels The number of channels of sound that will be supplied - to the stream callback or returned by Pa_ReadStream. It can range from 1 to - the value of maxInputChannels in the PaDeviceInfo record for the default input - device. If 0 the stream is opened as an output-only stream. - - @param numOutputChannels The number of channels of sound to be delivered to the - stream callback or passed to Pa_WriteStream. It can range from 1 to the value - of maxOutputChannels in the PaDeviceInfo record for the default output dvice. - If 0 the stream is opened as an output-only stream. - - @param sampleFormat The sample format of both the input and output buffers - provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. - sampleFormat may be any of the formats described by the PaSampleFormat - enumeration. - - @param sampleRate Same as Pa_OpenStream parameter of the same name. - @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. - @param streamCallback Same as Pa_OpenStream parameter of the same name. - @param userData Same as Pa_OpenStream parameter of the same name. - - @return As for Pa_OpenStream - - @see Pa_OpenStream, PaStreamCallback -*/ -PaError Pa_OpenDefaultStream( PaStream** stream, - int numInputChannels, - int numOutputChannels, - PaSampleFormat sampleFormat, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamCallback *streamCallback, - void *userData ); - - -/** Closes an audio stream. If the audio stream is active it - discards any pending buffers as if Pa_AbortStream() had been called. -*/ -PaError Pa_CloseStream( PaStream *stream ); - - -/** Functions of type PaStreamFinishedCallback are implemented by PortAudio - clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback - function. Once registered they are called when the stream becomes inactive - (ie once a call to Pa_StopStream() will not block). - A stream will become inactive after the stream callback returns non-zero, - or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio - output, if the stream callback returns paComplete, or Pa_StopStream is called, - the stream finished callback will not be called until all generated sample data - has been played. - - @param userData The userData parameter supplied to Pa_OpenStream() - - @see Pa_SetStreamFinishedCallback -*/ -typedef void PaStreamFinishedCallback( void *userData ); - - -/** Register a stream finished callback function which will be called when the - stream becomes inactive. See the description of PaStreamFinishedCallback for - further details about when the callback will be called. - - @param stream a pointer to a PaStream that is in the stopped state - if the - stream is not stopped, the stream's finished callback will remain unchanged - and an error code will be returned. - - @param streamFinishedCallback a pointer to a function with the same signature - as PaStreamFinishedCallback, that will be called when the stream becomes - inactive. Passing NULL for this parameter will un-register a previously - registered stream finished callback function. - - @return on success returns paNoError, otherwise an error code indicating the cause - of the error. - - @see PaStreamFinishedCallback -*/ -PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); - - -/** Commences audio processing. -*/ -PaError Pa_StartStream( PaStream *stream ); - - -/** Terminates audio processing. It waits until all pending - audio buffers have been played before it returns. -*/ -PaError Pa_StopStream( PaStream *stream ); - - -/** Terminates audio processing immediately without waiting for pending - buffers to complete. -*/ -PaError Pa_AbortStream( PaStream *stream ); - - -/** Determine whether the stream is stopped. - A stream is considered to be stopped prior to a successful call to - Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. - If a stream callback returns a value other than paContinue the stream is NOT - considered to be stopped. - - @return Returns one (1) when the stream is stopped, zero (0) when - the stream is running or, a PaErrorCode (which are always negative) if - PortAudio is not initialized or an error is encountered. - - @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive -*/ -PaError Pa_IsStreamStopped( PaStream *stream ); - - -/** Determine whether the stream is active. - A stream is active after a successful call to Pa_StartStream(), until it - becomes inactive either as a result of a call to Pa_StopStream() or - Pa_AbortStream(), or as a result of a return value other than paContinue from - the stream callback. In the latter case, the stream is considered inactive - after the last buffer has finished playing. - - @return Returns one (1) when the stream is active (ie playing or recording - audio), zero (0) when not playing or, a PaErrorCode (which are always negative) - if PortAudio is not initialized or an error is encountered. - - @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped -*/ -PaError Pa_IsStreamActive( PaStream *stream ); - - - -/** A structure containing unchanging information about an open stream. - @see Pa_GetStreamInfo -*/ - -typedef struct PaStreamInfo -{ - /** this is struct version 1 */ - int structVersion; - - /** The input latency of the stream in seconds. This value provides the most - accurate estimate of input latency available to the implementation. It may - differ significantly from the suggestedLatency value passed to Pa_OpenStream(). - The value of this field will be zero (0.) for output-only streams. - @see PaTime - */ - PaTime inputLatency; - - /** The output latency of the stream in seconds. This value provides the most - accurate estimate of output latency available to the implementation. It may - differ significantly from the suggestedLatency value passed to Pa_OpenStream(). - The value of this field will be zero (0.) for input-only streams. - @see PaTime - */ - PaTime outputLatency; - - /** The sample rate of the stream in Hertz (samples per second). In cases - where the hardware sample rate is inaccurate and PortAudio is aware of it, - the value of this field may be different from the sampleRate parameter - passed to Pa_OpenStream(). If information about the actual hardware sample - rate is not available, this field will have the same value as the sampleRate - parameter passed to Pa_OpenStream(). - */ - double sampleRate; - -} PaStreamInfo; - - -/** Retrieve a pointer to a PaStreamInfo structure containing information - about the specified stream. - @return A pointer to an immutable PaStreamInfo structure. If the stream - parameter invalid, or an error is encountered, the function returns NULL. - - @param stream A pointer to an open stream previously created with Pa_OpenStream. - - @note PortAudio manages the memory referenced by the returned pointer, - the client must not manipulate or free the memory. The pointer is only - guaranteed to be valid until the specified stream is closed. - - @see PaStreamInfo -*/ -const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); - - -/** Determine the current time for the stream according to the same clock used - to generate buffer timestamps. This time may be used for syncronising other - events to the audio stream, for example synchronizing audio to MIDI. - - @return The stream's current time in seconds, or 0 if an error occurred. - - @see PaTime, PaStreamCallback -*/ -PaTime Pa_GetStreamTime( PaStream *stream ); - - -/** Retrieve CPU usage information for the specified stream. - The "CPU Load" is a fraction of total CPU time consumed by a callback stream's - audio processing routines including, but not limited to the client supplied - stream callback. This function does not work with blocking read/write streams. - - This function may be called from the stream callback function or the - application. - - @return - A floating point value, typically between 0.0 and 1.0, where 1.0 indicates - that the stream callback is consuming the maximum number of CPU cycles possible - to maintain real-time operation. A value of 0.5 would imply that PortAudio and - the stream callback was consuming roughly 50% of the available CPU time. The - return value may exceed 1.0. A value of 0.0 will always be returned for a - blocking read/write stream, or if an error occurrs. -*/ -double Pa_GetStreamCpuLoad( PaStream* stream ); - - -/** Read samples from an input stream. The function doesn't return until - the entire buffer has been filled - this may involve waiting for the operating - system to supply the data. - - @param stream A pointer to an open stream previously created with Pa_OpenStream. - - @param buffer A pointer to a buffer of sample frames. The buffer contains - samples in the format specified by the inputParameters->sampleFormat field - used to open the stream, and the number of channels specified by - inputParameters->numChannels. If non-interleaved samples were requested, - buffer is a pointer to the first element of an array of non-interleaved - buffer pointers, one for each channel. - - @param frames The number of frames to be read into buffer. This parameter - is not constrained to a specific range, however high performance applications - will want to match this parameter to the framesPerBuffer parameter used - when opening the stream. - - @return On success PaNoError will be returned, or PaInputOverflowed if input - data was discarded by PortAudio after the previous call and before this call. -*/ -PaError Pa_ReadStream( PaStream* stream, - void *buffer, - unsigned long frames ); - - -/** Write samples to an output stream. This function doesn't return until the - entire buffer has been consumed - this may involve waiting for the operating - system to consume the data. - - @param stream A pointer to an open stream previously created with Pa_OpenStream. - - @param buffer A pointer to a buffer of sample frames. The buffer contains - samples in the format specified by the outputParameters->sampleFormat field - used to open the stream, and the number of channels specified by - outputParameters->numChannels. If non-interleaved samples were requested, - buffer is a pointer to the first element of an array of non-interleaved - buffer pointers, one for each channel. - - @param frames The number of frames to be written from buffer. This parameter - is not constrained to a specific range, however high performance applications - will want to match this parameter to the framesPerBuffer parameter used - when opening the stream. - - @return On success PaNoError will be returned, or paOutputUnderflowed if - additional output data was inserted after the previous call and before this - call. -*/ -PaError Pa_WriteStream( PaStream* stream, - const void *buffer, - unsigned long frames ); - - -/** Retrieve the number of frames that can be read from the stream without - waiting. - - @return Returns a non-negative value representing the maximum number of frames - that can be read from the stream without blocking or busy waiting or, a - PaErrorCode (which are always negative) if PortAudio is not initialized or an - error is encountered. -*/ -signed long Pa_GetStreamReadAvailable( PaStream* stream ); - - -/** Retrieve the number of frames that can be written to the stream without - waiting. - - @return Returns a non-negative value representing the maximum number of frames - that can be written to the stream without blocking or busy waiting or, a - PaErrorCode (which are always negative) if PortAudio is not initialized or an - error is encountered. -*/ -signed long Pa_GetStreamWriteAvailable( PaStream* stream ); - - -/* Miscellaneous utilities */ - - -/** Retrieve the size of a given sample format in bytes. - - @return The size in bytes of a single sample in the specified format, - or paSampleFormatNotSupported if the format is not supported. -*/ -PaError Pa_GetSampleSize( PaSampleFormat format ); - - -/** Put the caller to sleep for at least 'msec' milliseconds. This function is - provided only as a convenience for authors of portable code (such as the tests - and examples in the PortAudio distribution.) - - The function may sleep longer than requested so don't rely on this for accurate - musical timing. -*/ -void Pa_Sleep( long msec ); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* PORTAUDIO_H */ + +#ifndef PORTAUDIO_H +#define PORTAUDIO_H +/* + * $Id: portaudio.h,v 1.1 2005/11/29 21:27:24 joe Exp $ + * PortAudio Portable Real-Time Audio Library + * PortAudio API Header File + * Latest version available at: http://www.portaudio.com/ + * + * Copyright (c) 1999-2002 Ross Bencina and Phil Burk + * + * 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. + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. + * + * 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. + */ + +/** @file + @brief The PortAudio API. +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** Retrieve the release number of the currently running PortAudio build, + eg 1900. +*/ +int Pa_GetVersion( void ); + + +/** Retrieve a textual description of the current PortAudio build, + eg "PortAudio V19-devel 13 October 2002". +*/ +const char* Pa_GetVersionText( void ); + + +/** Error codes returned by PortAudio functions. + Note that with the exception of paNoError, all PaErrorCodes are negative. +*/ + +typedef int PaError; +typedef enum PaErrorCode +{ + paNoError = 0, + + paNotInitialized = -10000, + paUnanticipatedHostError, + paInvalidChannelCount, + paInvalidSampleRate, + paInvalidDevice, + paInvalidFlag, + paSampleFormatNotSupported, + paBadIODeviceCombination, + paInsufficientMemory, + paBufferTooBig, + paBufferTooSmall, + paNullCallback, + paBadStreamPtr, + paTimedOut, + paInternalError, + paDeviceUnavailable, + paIncompatibleHostApiSpecificStreamInfo, + paStreamIsStopped, + paStreamIsNotStopped, + paInputOverflowed, + paOutputUnderflowed, + paHostApiNotFound, + paInvalidHostApi, + paCanNotReadFromACallbackStream, /**< @todo review error code name */ + paCanNotWriteToACallbackStream, /**< @todo review error code name */ + paCanNotReadFromAnOutputOnlyStream, /**< @todo review error code name */ + paCanNotWriteToAnInputOnlyStream, /**< @todo review error code name */ + paIncompatibleStreamHostApi +} PaErrorCode; + + +/** Translate the supplied PortAudio error code into a human readable + message. +*/ +const char *Pa_GetErrorText( PaError errorCode ); + + +/** Library initialization function - call this before using PortAudio. + This function initialises internal data structures and prepares underlying + host APIs for use. This function MUST be called before using any other + PortAudio API functions. + + If Pa_Initialize() is called multiple times, each successful + call must be matched with a corresponding call to Pa_Terminate(). + Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not + required to be fully nested. + + Note that if Pa_Initialize() returns an error code, Pa_Terminate() should + NOT be called. + + @return paNoError if successful, otherwise an error code indicating the cause + of failure. + + @see Pa_Terminate +*/ +PaError Pa_Initialize( void ); + + +/** Library termination function - call this when finished using PortAudio. + This function deallocates all resources allocated by PortAudio since it was + initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has + been called multiple times, each call must be matched with a corresponding call + to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically + close any PortAudio streams that are still open. + + Pa_Terminate() MUST be called before exiting a program which uses PortAudio. + Failure to do so may result in serious resource leaks, such as audio devices + not being available until the next reboot. + + @return paNoError if successful, otherwise an error code indicating the cause + of failure. + + @see Pa_Initialize +*/ +PaError Pa_Terminate( void ); + + + +/** The type used to refer to audio devices. Values of this type usually + range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice + and paUseHostApiSpecificDeviceSpecification values. + + @see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification +*/ +typedef int PaDeviceIndex; + + +/** A special PaDeviceIndex value indicating that no device is available, + or should be used. + + @see PaDeviceIndex +*/ +#define paNoDevice ((PaDeviceIndex)-1) + + +/** A special PaDeviceIndex value indicating that the device(s) to be used + are specified in the host api specific stream info structure. + + @see PaDeviceIndex +*/ +#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) + + +/* Host API enumeration mechanism */ + +/** The type used to enumerate to host APIs at runtime. Values of this type + range from 0 to (Pa_GetHostApiCount()-1). + + @see Pa_GetHostApiCount +*/ +typedef int PaHostApiIndex; + + +/** Retrieve the number of available host APIs. Even if a host API is + available it may have no devices available. + + @return A non-negative value indicating the number of available host APIs + or, a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. + + @see PaHostApiIndex +*/ +PaHostApiIndex Pa_GetHostApiCount( void ); + + +/** Retrieve the index of the default host API. The default host API will be + the lowest common denominator host API on the current platform and is + unlikely to provide the best performance. + + @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) + indicating the default host API index or, a PaErrorCode (which are always + negative) if PortAudio is not initialized or an error is encountered. +*/ +PaHostApiIndex Pa_GetDefaultHostApi( void ); + + +/** Unchanging unique identifiers for each supported host API. This type + is used in the PaHostApiInfo structure. The values are guaranteed to be + unique and to never change, thus allowing code to be written that + conditionally uses host API specific extensions. + + New type ids will be allocated when support for a host API reaches + "public alpha" status, prior to that developers should use the + paInDevelopment type id. + + @see PaHostApiInfo +*/ +typedef enum PaHostApiTypeId +{ + paInDevelopment=0, /* use while developing support for a new host API */ + paDirectSound=1, + paMME=2, + paASIO=3, + paSoundManager=4, + paCoreAudio=5, + paOSS=7, + paALSA=8, + paAL=9, + paBeOS=10, + paWDMKS=11, + paJACK=12 +} PaHostApiTypeId; + + +/** A structure containing information about a particular host API. */ + +typedef struct PaHostApiInfo +{ + /** this is struct version 1 */ + int structVersion; + /** The well known unique identifier of this host API @see PaHostApiTypeId */ + PaHostApiTypeId type; + /** A textual description of the host API for display on user interfaces. */ + const char *name; + + /** The number of devices belonging to this host API. This field may be + used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate + all devices for this host API. + @see Pa_HostApiDeviceIndexToDeviceIndex + */ + int deviceCount; + + /** The the default input device for this host API. The value will be a + device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice + if no default input device is available. + */ + PaDeviceIndex defaultInputDevice; + + /** The the default output device for this host API. The value will be a + device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice + if no default output device is available. + */ + PaDeviceIndex defaultOutputDevice; + +} PaHostApiInfo; + + +/** Retrieve a pointer to a structure containing information about a specific + host Api. + + @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) + + @return A pointer to an immutable PaHostApiInfo structure describing + a specific host API. If the hostApi parameter is out of range or an error + is encountered, the function returns NULL. + + The returned structure is owned by the PortAudio implementation and must not + be manipulated or freed. The pointer is only guaranteed to be valid between + calls to Pa_Initialize() and Pa_Terminate(). +*/ +const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); + + +/** Convert a static host API unique identifier, into a runtime + host API index. + + @param type A unique host API identifier belonging to the PaHostApiTypeId + enumeration. + + @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, + a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. + + The paHostApiNotFound error code indicates that the host API specified by the + type parameter is not available. + + @see PaHostApiTypeId +*/ +PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); + + +/** Convert a host-API-specific device index to standard PortAudio device index. + This function may be used in conjunction with the deviceCount field of + PaHostApiInfo to enumerate all devices for the specified host API. + + @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) + + @param hostApiDeviceIndex A valid per-host device index in the range + 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) + + @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) + or, a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. + + A paInvalidHostApi error code indicates that the host API index specified by + the hostApi parameter is out of range. + + A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter + is out of range. + + @see PaHostApiInfo +*/ +PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, + int hostApiDeviceIndex ); + + + +/** Structure used to return information about a host error condition. +*/ +typedef struct PaHostErrorInfo{ + PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ + long errorCode; /**< the error code returned */ + const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ +}PaHostErrorInfo; + + +/** Return information about the last host error encountered. The error + information returned by Pa_GetLastHostErrorInfo() will never be modified + asyncronously by errors occurring in other PortAudio owned threads + (such as the thread that manages the stream callback.) + + This function is provided as a last resort, primarily to enhance debugging + by providing clients with access to all available error information. + + @return A pointer to an immutable structure constaining information about + the host error. The values in this structure will only be valid if a + PortAudio function has previously returned the paUnanticipatedHostError + error code. +*/ +const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); + + + +/* Device enumeration and capabilities */ + +/** Retrieve the number of available devices. The number of available devices + may be zero. + + @return A non-negative value indicating the number of available devices or, + a PaErrorCode (which are always negative) if PortAudio is not initialized + or an error is encountered. +*/ +PaDeviceIndex Pa_GetDeviceCount( void ); + + +/** Retrieve the index of the default input device. The result can be + used in the inputDevice parameter to Pa_OpenStream(). + + @return The default input device index for the default host API, or paNoDevice + if no default input device is available or an error was encountered. +*/ +PaDeviceIndex Pa_GetDefaultInputDevice( void ); + + +/** Retrieve the index of the default output device. The result can be + used in the outputDevice parameter to Pa_OpenStream(). + + @return The default output device index for the defualt host API, or paNoDevice + if no default output device is available or an error was encountered. + + @note + On the PC, the user can specify a default device by + setting an environment variable. For example, to use device #1. +
+ set PA_RECOMMENDED_OUTPUT_DEVICE=1
+
+ The user should first determine the available device ids by using + the supplied application "pa_devs". +*/ +PaDeviceIndex Pa_GetDefaultOutputDevice( void ); + + +/** The type used to represent monotonic time in seconds that can be used + for syncronisation. The type is used for the outTime argument to the + PaStreamCallback and as the result of Pa_GetStreamTime(). + + @see PaStreamCallback, Pa_GetStreamTime +*/ +typedef double PaTime; + + +/** A type used to specify one or more sample formats. Each value indicates + a possible format for sound data passed to and from the stream callback, + Pa_ReadStream and Pa_WriteStream. + + The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 + and aUInt8 are usually implemented by all implementations. + + The floating point representation (paFloat32) uses +1.0 and -1.0 as the + maximum and minimum respectively. + + paUInt8 is an unsigned 8 bit format where 128 is considered "ground" + + The paNonInterleaved flag indicates that a multichannel buffer is passed + as a set of non-interleaved pointers. + + @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo + @see paFloat32, paInt16, paInt32, paInt24, paInt8 + @see paUInt8, paCustomFormat, paNonInterleaved +*/ +typedef unsigned long PaSampleFormat; + + +#define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ +#define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ +#define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ +#define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ +#define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ +#define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ +#define paCustomFormat ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */ + +#define paNonInterleaved ((PaSampleFormat) 0x80000000) + +/** A structure providing information and capabilities of PortAudio devices. + Devices may support input, output or both input and output. +*/ +typedef struct PaDeviceInfo +{ + int structVersion; /* this is struct version 2 */ + const char *name; + PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/ + + int maxInputChannels; + int maxOutputChannels; + + /* Default latency values for interactive performance. */ + PaTime defaultLowInputLatency; + PaTime defaultLowOutputLatency; + /* Default latency values for robust non-interactive applications (eg. playing sound files). */ + PaTime defaultHighInputLatency; + PaTime defaultHighOutputLatency; + + double defaultSampleRate; +} PaDeviceInfo; + + +/** Retrieve a pointer to a PaDeviceInfo structure containing information + about the specified device. + @return A pointer to an immutable PaDeviceInfo structure. If the device + parameter is out of range the function returns NULL. + + @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) + + @note PortAudio manages the memory referenced by the returned pointer, + the client must not manipulate or free the memory. The pointer is only + guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). + + @see PaDeviceInfo, PaDeviceIndex +*/ +const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); + + +/** Parameters for one direction (input or output) of a stream. +*/ +typedef struct PaStreamParameters +{ + /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) + specifying the device to be used or the special constant + paUseHostApiSpecificDeviceSpecification which indicates that the actual + device(s) to use are specified in hostApiSpecificStreamInfo. + This field must not be set to paNoDevice. + */ + PaDeviceIndex device; + + /** The number of channels of sound to be delivered to the + stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). + It can range from 1 to the value of maxInputChannels in the + PaDeviceInfo record for the device specified by the device parameter. + */ + int channelCount; + + /** The sample format of the buffer provided to the stream callback, + a_ReadStream() or Pa_WriteStream(). It may be any of the formats described + by the PaSampleFormat enumeration. + */ + PaSampleFormat sampleFormat; + + /** The desired latency in seconds. Where practical, implementations should + configure their latency based on these parameters, otherwise they may + choose the closest viable latency instead. Unless the suggested latency + is greater than the absolute upper limit for the device implementations + shouldround the suggestedLatency up to the next practial value - ie to + provide an equal or higher latency than suggestedLatency whereever possibe. + Actual latency values for an open stream may be retrieved using the + inputLatency and outputLatency fields of the PaStreamInfo structure + returned by Pa_GetStreamInfo(). + @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo + */ + PaTime suggestedLatency; + + /** An optional pointer to a host api specific data structure + containing additional information for device setup and/or stream processing. + hostApiSpecificStreamInfo is never required for correct operation, + if not used it should be set to NULL. + */ + void *hostApiSpecificStreamInfo; + +} PaStreamParameters; + + +/** Return code for Pa_IsFormatSupported indicating success. */ +#define paFormatIsSupported (0) + +/** Determine whether it would be possible to open a stream with the specified + parameters. + + @param inputParameters A structure that describes the input parameters used to + open a stream. The suggestedLatency field is ignored. See PaStreamParameters + for a description of these parameters. inputParameters must be NULL for + output-only streams. + + @param outputParameters A structure that describes the output parameters used + to open a stream. The suggestedLatency field is ignored. See PaStreamParameters + for a description of these parameters. outputParameters must be NULL for + input-only streams. + + @param sampleRate The required sampleRate. For full-duplex streams it is the + sample rate for both input and output + + @return Returns 0 if the format is supported, and an error code indicating why + the format is not supported otherwise. The constant paFormatIsSupported is + provided to compare with the return value for success. + + @see paFormatIsSupported, PaStreamParameters +*/ +PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); + + + +/* Streaming types and functions */ + + +/** + A single PaStream can provide multiple channels of real-time + streaming audio input and output to a client application. A stream + provides access to audio hardware represented by one or more + PaDevices. Depending on the underlying Host API, it may be possible + to open multiple streams using the same device, however this behavior + is implementation defined. Portable applications should assume that + a PaDevice may be simultaneously used by at most one PaStream. + + Pointers to PaStream objects are passed between PortAudio functions that + operate on streams. + + @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, + Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, + Pa_GetStreamTime, Pa_GetStreamCpuLoad + +*/ +typedef void PaStream; + + +/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() + or Pa_OpenDefaultStream() to indicate that the stream callback will + accept buffers of any size. +*/ +#define paFramesPerBufferUnspecified (0) + + +/** Flags used to control the behavior of a stream. They are passed as + parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be + ORed together. + + @see Pa_OpenStream, Pa_OpenDefaultStream + @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, + paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags +*/ +typedef unsigned long PaStreamFlags; + +/** @see PaStreamFlags */ +#define paNoFlag ((PaStreamFlags) 0) + +/** Disable default clipping of out of range samples. + @see PaStreamFlags +*/ +#define paClipOff ((PaStreamFlags) 0x00000001) + +/** Disable default dithering. + @see PaStreamFlags +*/ +#define paDitherOff ((PaStreamFlags) 0x00000002) + +/** Flag requests that where possible a full duplex stream will not discard + overflowed input samples without calling the stream callback. This flag is + only valid for full duplex callback streams and only when used in combination + with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using + this flag incorrectly results in a paInvalidFlag error being returned from + Pa_OpenStream and Pa_OpenDefaultStream. + + @see PaStreamFlags, paFramesPerBufferUnspecified +*/ +#define paNeverDropInput ((PaStreamFlags) 0x00000004) + +/** Call the stream callback to fill initial output buffers, rather than the + default behavior of priming the buffers with zeros (silence). This flag has + no effect for input-only and blocking read/write streams. + + @see PaStreamFlags +*/ +#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) + +/** A mask specifying the platform specific bits. + @see PaStreamFlags +*/ +#define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) + +/** + Timing information for the buffers passed to the stream callback. +*/ +typedef struct PaStreamCallbackTimeInfo{ + PaTime inputBufferAdcTime; + PaTime currentTime; + PaTime outputBufferDacTime; +} PaStreamCallbackTimeInfo; + + +/** + Flag bit constants for the statusFlags to PaStreamCallback. + + @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, + paPrimingOutput +*/ +typedef unsigned long PaStreamCallbackFlags; + +/** In a stream opened with paFramesPerBufferUnspecified, indicates that + input data is all silence (zeros) because no real data is available. In a + stream opened without paFramesPerBufferUnspecified, it indicates that one or + more zero samples have been inserted into the input buffer to compensate + for an input underflow. + @see PaStreamCallbackFlags +*/ +#define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) + +/** In a stream opened with paFramesPerBufferUnspecified, indicates that data + prior to the first sample of the input buffer was discarded due to an + overflow, possibly because the stream callback is using too much CPU time. + Otherwise indicates that data prior to one or more samples in the + input buffer was discarded. + @see PaStreamCallbackFlags +*/ +#define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) + +/** Indicates that output data (or a gap) was inserted, possibly because the + stream callback is using too much CPU time. + @see PaStreamCallbackFlags +*/ +#define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) + +/** Indicates that output data will be discarded because no room is available. + @see PaStreamCallbackFlags +*/ +#define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) + +/** Some of all of the output data will be used to prime the stream, input + data may be zero. + @see PaStreamCallbackFlags +*/ +#define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) + +/** + Allowable return values for the PaStreamCallback. + @see PaStreamCallback +*/ +typedef enum PaStreamCallbackResult +{ + paContinue=0, + paComplete=1, + paAbort=2 +} PaStreamCallbackResult; + + +/** + Functions of type PaStreamCallback are implemented by PortAudio clients. + They consume, process or generate audio in response to requests from an + active PortAudio stream. + + @param input and @param output are arrays of interleaved samples, + the format, packing and number of channels used by the buffers are + determined by parameters to Pa_OpenStream(). + + @param frameCount The number of sample frames to be processed by + the stream callback. + + @param timeInfo The time in seconds when the first sample of the input + buffer was received at the audio input, the time in seconds when the first + sample of the output buffer will begin being played at the audio output, and + the time in seconds when the stream callback was called. + See also Pa_GetStreamTime() + + @param statusFlags Flags indicating whether input and/or output buffers + have been inserted or will be dropped to overcome underflow or overflow + conditions. + + @param userData The value of a user supplied pointer passed to + Pa_OpenStream() intended for storing synthesis data etc. + + @return + The stream callback should return one of the values in the + PaStreamCallbackResult enumeration. To ensure that the callback continues + to be called, it should return paContinue (0). Either paComplete or paAbort + can be returned to finish stream processing, after either of these values is + returned the callback will not be called again. If paAbort is returned the + stream will finish as soon as possible. If paComplete is returned, the stream + will continue until all buffers generated by the callback have been played. + This may be useful in applications such as soundfile players where a specific + duration of output is required. However, it is not necessary to utilise this + mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also + be used to stop the stream. The callback must always fill the entire output + buffer irrespective of its return value. + + @see Pa_OpenStream, Pa_OpenDefaultStream + + @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call + PortAudio API functions from within the stream callback. +*/ +typedef int PaStreamCallback( + const void *input, void *output, + unsigned long frameCount, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ); + + +/** Opens a stream for either input, output or both. + + @param stream The address of a PaStream pointer which will receive + a pointer to the newly opened stream. + + @param inputParameters A structure that describes the input parameters used by + the opened stream. See PaStreamParameters for a description of these parameters. + inputParameters must be NULL for output-only streams. + + @param outputParameters A structure that describes the output parameters used by + the opened stream. See PaStreamParameters for a description of these parameters. + outputParameters must be NULL for input-only streams. + + @param sampleRate The desired sampleRate. For full-duplex streams it is the + sample rate for both input and output + + @param framesPerBuffer The number of frames passed to the stream callback + function, or the preferred block granularity for a blocking read/write stream. + The special value paFramesPerBufferUnspecified (0) may be used to request that + the stream callback will recieve an optimal (and possibly varying) number of + frames based on host requirements and the requested latency settings. + Note: With some host APIs, the use of non-zero framesPerBuffer for a callback + stream may introduce an additional layer of buffering which could introduce + additional latency. PortAudio guarantees that the additional latency + will be kept to the theoretical minimum however, it is strongly recommended + that a non-zero framesPerBuffer value only be used when your algorithm + requires a fixed number of frames per stream callback. + + @param streamFlags Flags which modify the behaviour of the streaming process. + This parameter may contain a combination of flags ORed together. Some flags may + only be relevant to certain buffer formats. + + @param streamCallback A pointer to a client supplied function that is responsible + for processing and filling input and output buffers. If this parameter is NULL + the stream will be opened in 'blocking read/write' mode. In blocking mode, + the client can receive sample data using Pa_ReadStream and write sample data + using Pa_WriteStream, the number of samples that may be read or written + without blocking is returned by Pa_GetStreamReadAvailable and + Pa_GetStreamWriteAvailable respectively. + + @param userData A client supplied pointer which is passed to the stream callback + function. It could for example, contain a pointer to instance data necessary + for processing the audio buffers. This parameter is ignored if streamCallback + is NULL. + + @return + Upon success Pa_OpenStream() returns paNoError and places a pointer to a + valid PaStream in the stream argument. The stream is inactive (stopped). + If a call to Pa_OpenStream() fails, a non-zero error code is returned (see + PaError for possible error codes) and the value of stream is invalid. + + @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, + Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable +*/ +PaError Pa_OpenStream( PaStream** stream, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); + + +/** A simplified version of Pa_OpenStream() that opens the default input + and/or output devices. + + @param stream The address of a PaStream pointer which will receive + a pointer to the newly opened stream. + + @param numInputChannels The number of channels of sound that will be supplied + to the stream callback or returned by Pa_ReadStream. It can range from 1 to + the value of maxInputChannels in the PaDeviceInfo record for the default input + device. If 0 the stream is opened as an output-only stream. + + @param numOutputChannels The number of channels of sound to be delivered to the + stream callback or passed to Pa_WriteStream. It can range from 1 to the value + of maxOutputChannels in the PaDeviceInfo record for the default output dvice. + If 0 the stream is opened as an output-only stream. + + @param sampleFormat The sample format of both the input and output buffers + provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. + sampleFormat may be any of the formats described by the PaSampleFormat + enumeration. + + @param sampleRate Same as Pa_OpenStream parameter of the same name. + @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. + @param streamCallback Same as Pa_OpenStream parameter of the same name. + @param userData Same as Pa_OpenStream parameter of the same name. + + @return As for Pa_OpenStream + + @see Pa_OpenStream, PaStreamCallback +*/ +PaError Pa_OpenDefaultStream( PaStream** stream, + int numInputChannels, + int numOutputChannels, + PaSampleFormat sampleFormat, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamCallback *streamCallback, + void *userData ); + + +/** Closes an audio stream. If the audio stream is active it + discards any pending buffers as if Pa_AbortStream() had been called. +*/ +PaError Pa_CloseStream( PaStream *stream ); + + +/** Functions of type PaStreamFinishedCallback are implemented by PortAudio + clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback + function. Once registered they are called when the stream becomes inactive + (ie once a call to Pa_StopStream() will not block). + A stream will become inactive after the stream callback returns non-zero, + or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio + output, if the stream callback returns paComplete, or Pa_StopStream is called, + the stream finished callback will not be called until all generated sample data + has been played. + + @param userData The userData parameter supplied to Pa_OpenStream() + + @see Pa_SetStreamFinishedCallback +*/ +typedef void PaStreamFinishedCallback( void *userData ); + + +/** Register a stream finished callback function which will be called when the + stream becomes inactive. See the description of PaStreamFinishedCallback for + further details about when the callback will be called. + + @param stream a pointer to a PaStream that is in the stopped state - if the + stream is not stopped, the stream's finished callback will remain unchanged + and an error code will be returned. + + @param streamFinishedCallback a pointer to a function with the same signature + as PaStreamFinishedCallback, that will be called when the stream becomes + inactive. Passing NULL for this parameter will un-register a previously + registered stream finished callback function. + + @return on success returns paNoError, otherwise an error code indicating the cause + of the error. + + @see PaStreamFinishedCallback +*/ +PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); + + +/** Commences audio processing. +*/ +PaError Pa_StartStream( PaStream *stream ); + + +/** Terminates audio processing. It waits until all pending + audio buffers have been played before it returns. +*/ +PaError Pa_StopStream( PaStream *stream ); + + +/** Terminates audio processing immediately without waiting for pending + buffers to complete. +*/ +PaError Pa_AbortStream( PaStream *stream ); + + +/** Determine whether the stream is stopped. + A stream is considered to be stopped prior to a successful call to + Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. + If a stream callback returns a value other than paContinue the stream is NOT + considered to be stopped. + + @return Returns one (1) when the stream is stopped, zero (0) when + the stream is running or, a PaErrorCode (which are always negative) if + PortAudio is not initialized or an error is encountered. + + @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive +*/ +PaError Pa_IsStreamStopped( PaStream *stream ); + + +/** Determine whether the stream is active. + A stream is active after a successful call to Pa_StartStream(), until it + becomes inactive either as a result of a call to Pa_StopStream() or + Pa_AbortStream(), or as a result of a return value other than paContinue from + the stream callback. In the latter case, the stream is considered inactive + after the last buffer has finished playing. + + @return Returns one (1) when the stream is active (ie playing or recording + audio), zero (0) when not playing or, a PaErrorCode (which are always negative) + if PortAudio is not initialized or an error is encountered. + + @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped +*/ +PaError Pa_IsStreamActive( PaStream *stream ); + + + +/** A structure containing unchanging information about an open stream. + @see Pa_GetStreamInfo +*/ + +typedef struct PaStreamInfo +{ + /** this is struct version 1 */ + int structVersion; + + /** The input latency of the stream in seconds. This value provides the most + accurate estimate of input latency available to the implementation. It may + differ significantly from the suggestedLatency value passed to Pa_OpenStream(). + The value of this field will be zero (0.) for output-only streams. + @see PaTime + */ + PaTime inputLatency; + + /** The output latency of the stream in seconds. This value provides the most + accurate estimate of output latency available to the implementation. It may + differ significantly from the suggestedLatency value passed to Pa_OpenStream(). + The value of this field will be zero (0.) for input-only streams. + @see PaTime + */ + PaTime outputLatency; + + /** The sample rate of the stream in Hertz (samples per second). In cases + where the hardware sample rate is inaccurate and PortAudio is aware of it, + the value of this field may be different from the sampleRate parameter + passed to Pa_OpenStream(). If information about the actual hardware sample + rate is not available, this field will have the same value as the sampleRate + parameter passed to Pa_OpenStream(). + */ + double sampleRate; + +} PaStreamInfo; + + +/** Retrieve a pointer to a PaStreamInfo structure containing information + about the specified stream. + @return A pointer to an immutable PaStreamInfo structure. If the stream + parameter invalid, or an error is encountered, the function returns NULL. + + @param stream A pointer to an open stream previously created with Pa_OpenStream. + + @note PortAudio manages the memory referenced by the returned pointer, + the client must not manipulate or free the memory. The pointer is only + guaranteed to be valid until the specified stream is closed. + + @see PaStreamInfo +*/ +const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); + + +/** Determine the current time for the stream according to the same clock used + to generate buffer timestamps. This time may be used for syncronising other + events to the audio stream, for example synchronizing audio to MIDI. + + @return The stream's current time in seconds, or 0 if an error occurred. + + @see PaTime, PaStreamCallback +*/ +PaTime Pa_GetStreamTime( PaStream *stream ); + + +/** Retrieve CPU usage information for the specified stream. + The "CPU Load" is a fraction of total CPU time consumed by a callback stream's + audio processing routines including, but not limited to the client supplied + stream callback. This function does not work with blocking read/write streams. + + This function may be called from the stream callback function or the + application. + + @return + A floating point value, typically between 0.0 and 1.0, where 1.0 indicates + that the stream callback is consuming the maximum number of CPU cycles possible + to maintain real-time operation. A value of 0.5 would imply that PortAudio and + the stream callback was consuming roughly 50% of the available CPU time. The + return value may exceed 1.0. A value of 0.0 will always be returned for a + blocking read/write stream, or if an error occurrs. +*/ +double Pa_GetStreamCpuLoad( PaStream* stream ); + + +/** Read samples from an input stream. The function doesn't return until + the entire buffer has been filled - this may involve waiting for the operating + system to supply the data. + + @param stream A pointer to an open stream previously created with Pa_OpenStream. + + @param buffer A pointer to a buffer of sample frames. The buffer contains + samples in the format specified by the inputParameters->sampleFormat field + used to open the stream, and the number of channels specified by + inputParameters->numChannels. If non-interleaved samples were requested, + buffer is a pointer to the first element of an array of non-interleaved + buffer pointers, one for each channel. + + @param frames The number of frames to be read into buffer. This parameter + is not constrained to a specific range, however high performance applications + will want to match this parameter to the framesPerBuffer parameter used + when opening the stream. + + @return On success PaNoError will be returned, or PaInputOverflowed if input + data was discarded by PortAudio after the previous call and before this call. +*/ +PaError Pa_ReadStream( PaStream* stream, + void *buffer, + unsigned long frames ); + + +/** Write samples to an output stream. This function doesn't return until the + entire buffer has been consumed - this may involve waiting for the operating + system to consume the data. + + @param stream A pointer to an open stream previously created with Pa_OpenStream. + + @param buffer A pointer to a buffer of sample frames. The buffer contains + samples in the format specified by the outputParameters->sampleFormat field + used to open the stream, and the number of channels specified by + outputParameters->numChannels. If non-interleaved samples were requested, + buffer is a pointer to the first element of an array of non-interleaved + buffer pointers, one for each channel. + + @param frames The number of frames to be written from buffer. This parameter + is not constrained to a specific range, however high performance applications + will want to match this parameter to the framesPerBuffer parameter used + when opening the stream. + + @return On success PaNoError will be returned, or paOutputUnderflowed if + additional output data was inserted after the previous call and before this + call. +*/ +PaError Pa_WriteStream( PaStream* stream, + const void *buffer, + unsigned long frames ); + + +/** Retrieve the number of frames that can be read from the stream without + waiting. + + @return Returns a non-negative value representing the maximum number of frames + that can be read from the stream without blocking or busy waiting or, a + PaErrorCode (which are always negative) if PortAudio is not initialized or an + error is encountered. +*/ +signed long Pa_GetStreamReadAvailable( PaStream* stream ); + + +/** Retrieve the number of frames that can be written to the stream without + waiting. + + @return Returns a non-negative value representing the maximum number of frames + that can be written to the stream without blocking or busy waiting or, a + PaErrorCode (which are always negative) if PortAudio is not initialized or an + error is encountered. +*/ +signed long Pa_GetStreamWriteAvailable( PaStream* stream ); + + +/* Miscellaneous utilities */ + + +/** Retrieve the size of a given sample format in bytes. + + @return The size in bytes of a single sample in the specified format, + or paSampleFormatNotSupported if the format is not supported. +*/ +PaError Pa_GetSampleSize( PaSampleFormat format ); + + +/** Put the caller to sleep for at least 'msec' milliseconds. This function is + provided only as a convenience for authors of portable code (such as the tests + and examples in the PortAudio distribution.) + + The function may sleep longer than requested so don't rely on this for accurate + musical timing. +*/ +void Pa_Sleep( long msec ); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PORTAUDIO_H */ diff --git a/resources/CALL3.TXT b/map65/resources/CALL3.TXT similarity index 100% rename from resources/CALL3.TXT rename to map65/resources/CALL3.TXT diff --git a/resources/README.qthid.txt b/map65/resources/README.qthid.txt similarity index 97% rename from resources/README.qthid.txt rename to map65/resources/README.qthid.txt index 85a4e44b4..4210d0625 100644 --- a/resources/README.qthid.txt +++ b/map65/resources/README.qthid.txt @@ -1,22 +1,22 @@ -QTHID INFORMATION - -Qthid is simple cross platform controller application for the Funcube Dongle -Pro and Pro+ software defined radio receivers. - -Author........: OZ9AEC -License.......: GNU General Public License -Site..........: http://www.oz9aec.net/index.php/funcube-dongle/qthid-fcd-controller -Source........: http://sourceforge.net/projects/qthid/files -Yahoo Group ..: https://uk.groups.yahoo.com/neo/groups/FCDevelopment/info - -The qthid folder contains two binaries: - -* qthid-4.0.exe -* qthid-4.1.exe - -QTHID 4.0 is the current stable providing full support for the Funcube Dongle -API available with firmware 18f or later. - -QTHID 4.1 is an updated version that supports the new Funcube Dongle Pro+ -devices. This does not work with the original Funcube Dongle Pro! - +QTHID INFORMATION + +Qthid is simple cross platform controller application for the Funcube Dongle +Pro and Pro+ software defined radio receivers. + +Author........: OZ9AEC +License.......: GNU General Public License +Site..........: http://www.oz9aec.net/index.php/funcube-dongle/qthid-fcd-controller +Source........: http://sourceforge.net/projects/qthid/files +Yahoo Group ..: https://uk.groups.yahoo.com/neo/groups/FCDevelopment/info + +The qthid folder contains two binaries: + +* qthid-4.0.exe +* qthid-4.1.exe + +QTHID 4.0 is the current stable providing full support for the Funcube Dongle +API available with firmware 18f or later. + +QTHID 4.1 is an updated version that supports the new Funcube Dongle Pro+ +devices. This does not work with the original Funcube Dongle Pro! + diff --git a/resources/fftwf-wisdom.exe b/map65/resources/fftwf-wisdom.exe similarity index 100% rename from resources/fftwf-wisdom.exe rename to map65/resources/fftwf-wisdom.exe diff --git a/resources/qt.conf b/map65/resources/qt.conf similarity index 90% rename from resources/qt.conf rename to map65/resources/qt.conf index b68771674..e69f24eba 100644 --- a/resources/qt.conf +++ b/map65/resources/qt.conf @@ -1,2 +1,2 @@ -[Paths] -Plugins = . +[Paths] +Plugins = . diff --git a/resources/qthid.exe b/map65/resources/qthid.exe similarity index 100% rename from resources/qthid.exe rename to map65/resources/qthid.exe diff --git a/resources/qthid/AUTHORS.qthid.4.1.txt b/map65/resources/qthid/AUTHORS.qthid.4.1.txt similarity index 96% rename from resources/qthid/AUTHORS.qthid.4.1.txt rename to map65/resources/qthid/AUTHORS.qthid.4.1.txt index 456eab325..e3f10328c 100644 --- a/resources/qthid/AUTHORS.qthid.4.1.txt +++ b/map65/resources/qthid/AUTHORS.qthid.4.1.txt @@ -1,16 +1,16 @@ -Original work by Howard Long, G6LVB. -Current maintainer: Alexandru Csete, OZ9AEC. - -Contributors: -- Mike Willis G0MJW and David Barber -- Mario Lorenz DL5MLO -- Andrew Elwell -- Mike K0ZAP (OSX Lion fix) - -The frequency controller was taken from Cutesdr by Moe Wheatley. - -Application icon by ~DarKobra at Deviantart. -Source: http://commons.wikimedia.org/wiki/File:Radio.svg - -Other icons were taken from the GNOME desktop theme and the Tango theme. - +Original work by Howard Long, G6LVB. +Current maintainer: Alexandru Csete, OZ9AEC. + +Contributors: +- Mike Willis G0MJW and David Barber +- Mario Lorenz DL5MLO +- Andrew Elwell +- Mike K0ZAP (OSX Lion fix) + +The frequency controller was taken from Cutesdr by Moe Wheatley. + +Application icon by ~DarKobra at Deviantart. +Source: http://commons.wikimedia.org/wiki/File:Radio.svg + +Other icons were taken from the GNOME desktop theme and the Tango theme. + diff --git a/resources/qthid/AUTHORS.qthid4.0.txt b/map65/resources/qthid/AUTHORS.qthid4.0.txt similarity index 96% rename from resources/qthid/AUTHORS.qthid4.0.txt rename to map65/resources/qthid/AUTHORS.qthid4.0.txt index 456eab325..e3f10328c 100644 --- a/resources/qthid/AUTHORS.qthid4.0.txt +++ b/map65/resources/qthid/AUTHORS.qthid4.0.txt @@ -1,16 +1,16 @@ -Original work by Howard Long, G6LVB. -Current maintainer: Alexandru Csete, OZ9AEC. - -Contributors: -- Mike Willis G0MJW and David Barber -- Mario Lorenz DL5MLO -- Andrew Elwell -- Mike K0ZAP (OSX Lion fix) - -The frequency controller was taken from Cutesdr by Moe Wheatley. - -Application icon by ~DarKobra at Deviantart. -Source: http://commons.wikimedia.org/wiki/File:Radio.svg - -Other icons were taken from the GNOME desktop theme and the Tango theme. - +Original work by Howard Long, G6LVB. +Current maintainer: Alexandru Csete, OZ9AEC. + +Contributors: +- Mike Willis G0MJW and David Barber +- Mario Lorenz DL5MLO +- Andrew Elwell +- Mike K0ZAP (OSX Lion fix) + +The frequency controller was taken from Cutesdr by Moe Wheatley. + +Application icon by ~DarKobra at Deviantart. +Source: http://commons.wikimedia.org/wiki/File:Radio.svg + +Other icons were taken from the GNOME desktop theme and the Tango theme. + diff --git a/resources/qthid/LICENSE.txt b/map65/resources/qthid/LICENSE.txt similarity index 98% rename from resources/qthid/LICENSE.txt rename to map65/resources/qthid/LICENSE.txt index 818433ecc..94a9ed024 100644 --- a/resources/qthid/LICENSE.txt +++ b/map65/resources/qthid/LICENSE.txt @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. 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 -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. 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. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey 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; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - 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. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -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. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - 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 -state 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 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 3 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, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program 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, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU 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 Lesser General -Public License instead of this License. But first, please read -. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state 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 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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 Lesser General +Public License instead of this License. But first, please read +. diff --git a/resources/qthid/NEWS.qhid-4.0.txt b/map65/resources/qthid/NEWS.qhid-4.0.txt similarity index 97% rename from resources/qthid/NEWS.qhid-4.0.txt rename to map65/resources/qthid/NEWS.qhid-4.0.txt index b75393677..a4637e8e3 100644 --- a/resources/qthid/NEWS.qhid-4.0.txt +++ b/map65/resources/qthid/NEWS.qhid-4.0.txt @@ -1,64 +1,64 @@ -Changes in version 4.0: - -- New layout with IF, IQ and firmware controls hidden by default. -- New frequency controller widget. -- Support for up- and downconverters - - -Changes in version 3.2: - -- Switch to using hidraw driver on Linux 2.6.38 or later (fixes crashes - experienced on recent Linux with libusb-1.0.9). -- Update HID API. -- Reduce widow width. - - -Changes in version 3.1: - -- Support for Mac OS X 10.7 Lion -- Support for Bias-T with firmware 18h and later. -- Allow user to force band selection to be different from the one chosen - by the FCD (temporary workaround for a FW 18f bug occurring at 861 MHz). -- Change default value of IQ gain correction from 0.0 to 1.0. -- Use correct FCD command for setting IQ phase correction (GH-5). -- Various fixes for windows build using latest SDK (7.0). -- Removed RSSI indicator since it is unlikely that it will ever work. - - -Changes in version 3.0: - -- Implement full API in firmware 18f (thanks Mario Lorenz, DL5MLO). -- Requires firmware 18f or later (earlier firmwares are not detected). -- Added auto-repeat to tuning buttons (click and hold the button to scan). -- Added new RF chain diagram. -- Show firmware version in status message. - - -Changes in version 2.3: - -- No code changes, just a Mac OS X build. - - -Changes in version 2.2: - -- Use native toolbar and status bar on Mac OS X -- New application icon based on SVG drawing -- Correctly set application and bundle icon on Mac OS X and Windows -- Minor UI tweaks. -- Fix qthid.pro to allow correct build on Ubuntu 9.04 (thanks EA4FVS). -- Correct application name in file headers (thanks Andrew Elwell) - - -Changes in version 2.1: - -- Various fixes and workarounds to prevent crash and freeze when switching - between application and bootloader mode. The application can now run with or - without FCD (hotplug). Upgrade and verify firmware have been tested on Linux - (32 and 64 bit) and OSX 10.6. -- Updated HID API to hidapi/master from 2011-02-17 -- Retrieve libusb configuration on Linux using pkg-config -- Remove local Qt Creator configuration from distribution -- Improvements to the UI layout and widgets -- Added application icon -- Applied GPL V3 license - +Changes in version 4.0: + +- New layout with IF, IQ and firmware controls hidden by default. +- New frequency controller widget. +- Support for up- and downconverters + + +Changes in version 3.2: + +- Switch to using hidraw driver on Linux 2.6.38 or later (fixes crashes + experienced on recent Linux with libusb-1.0.9). +- Update HID API. +- Reduce widow width. + + +Changes in version 3.1: + +- Support for Mac OS X 10.7 Lion +- Support for Bias-T with firmware 18h and later. +- Allow user to force band selection to be different from the one chosen + by the FCD (temporary workaround for a FW 18f bug occurring at 861 MHz). +- Change default value of IQ gain correction from 0.0 to 1.0. +- Use correct FCD command for setting IQ phase correction (GH-5). +- Various fixes for windows build using latest SDK (7.0). +- Removed RSSI indicator since it is unlikely that it will ever work. + + +Changes in version 3.0: + +- Implement full API in firmware 18f (thanks Mario Lorenz, DL5MLO). +- Requires firmware 18f or later (earlier firmwares are not detected). +- Added auto-repeat to tuning buttons (click and hold the button to scan). +- Added new RF chain diagram. +- Show firmware version in status message. + + +Changes in version 2.3: + +- No code changes, just a Mac OS X build. + + +Changes in version 2.2: + +- Use native toolbar and status bar on Mac OS X +- New application icon based on SVG drawing +- Correctly set application and bundle icon on Mac OS X and Windows +- Minor UI tweaks. +- Fix qthid.pro to allow correct build on Ubuntu 9.04 (thanks EA4FVS). +- Correct application name in file headers (thanks Andrew Elwell) + + +Changes in version 2.1: + +- Various fixes and workarounds to prevent crash and freeze when switching + between application and bootloader mode. The application can now run with or + without FCD (hotplug). Upgrade and verify firmware have been tested on Linux + (32 and 64 bit) and OSX 10.6. +- Updated HID API to hidapi/master from 2011-02-17 +- Retrieve libusb configuration on Linux using pkg-config +- Remove local Qt Creator configuration from distribution +- Improvements to the UI layout and widgets +- Added application icon +- Applied GPL V3 license + diff --git a/resources/qthid/NEWS.qthid-4.1.txt b/map65/resources/qthid/NEWS.qthid-4.1.txt similarity index 97% rename from resources/qthid/NEWS.qthid-4.1.txt rename to map65/resources/qthid/NEWS.qthid-4.1.txt index 02031844e..426dff77b 100644 --- a/resources/qthid/NEWS.qthid-4.1.txt +++ b/map65/resources/qthid/NEWS.qthid-4.1.txt @@ -1,64 +1,64 @@ -Changes in version 4.1: - -- Special release with Funcube Dongle Pro+ support. - - -Changes in version 4.0: - -- New layout with IF, IQ and firmware controls hidden by default. -- New frequency controller widget. -- Support for up- and downconverters. - - -Changes in version 3.2: - -- Switch to using hidraw driver on Linux 2.6.38 or later (fixes crashes - experienced on recent Linux with libusb-1.0.9). -- Update HID API. -- Reduce widow width. - - -Changes in version 3.1: - -- Support for Mac OS X 10.7 Lion. -- Support for Bias-T with firmware 18h and later. -- Allow user to force band selection to be different from the one chosen by - the FCD (temporary workaround for a FW 18f bug occurring at 861 MHz). -- Change default value of IQ gain correction from 0.0 to 1.0. -- Use correct FCD command for setting IQ phase correction (GH-5). -- Various fixes for windows build using latest SDK (7.0). -- Removed RSSI indicator since it is unlikely that it will ever work. - - -Changes in version 3.0: - -- Implement full API in firmware 18f (thanks Mario Lorenz, DL5MLO). -- Requires firmware 18f or later (earlier firmwares are not detected). -- Added auto-repeat to tuning buttons (click and hold the button to scan). -- Added new RF chain diagram. -- Show firmware version in status message. - - -Changes in version 2.2: - -- Use native toolbar and status bar on Mac OS X -- New application icon based on SVG drawing -- Correctly set application and bundle icon on Mac OS X and Windows -- Minor UI tweaks. -- Fix qthid.pro to allow correct build on Ubuntu 9.04 (thanks EA4FVS). -- Correct application name in file headers (thanks Andrew Elwell) - - -Changes in version 2.1: - -- Various fixes and workarounds to prevent crash and freeze when switching - between application and bootloader mode. The application can now run with or - without FCD (hotplug). Upgrade and verify firmware have been tested on Linux - (32 and 64 bit) and OSX 10.6. -- Updated HID API to hidapi/master from 2011-02-17 -- Retrieve libusb configuration on Linux using pkg-config -- Remove local Qt Creator configuration from distribution -- Improvements to the UI layout and widgets -- Added application icon -- Applied GPL V3 license - +Changes in version 4.1: + +- Special release with Funcube Dongle Pro+ support. + + +Changes in version 4.0: + +- New layout with IF, IQ and firmware controls hidden by default. +- New frequency controller widget. +- Support for up- and downconverters. + + +Changes in version 3.2: + +- Switch to using hidraw driver on Linux 2.6.38 or later (fixes crashes + experienced on recent Linux with libusb-1.0.9). +- Update HID API. +- Reduce widow width. + + +Changes in version 3.1: + +- Support for Mac OS X 10.7 Lion. +- Support for Bias-T with firmware 18h and later. +- Allow user to force band selection to be different from the one chosen by + the FCD (temporary workaround for a FW 18f bug occurring at 861 MHz). +- Change default value of IQ gain correction from 0.0 to 1.0. +- Use correct FCD command for setting IQ phase correction (GH-5). +- Various fixes for windows build using latest SDK (7.0). +- Removed RSSI indicator since it is unlikely that it will ever work. + + +Changes in version 3.0: + +- Implement full API in firmware 18f (thanks Mario Lorenz, DL5MLO). +- Requires firmware 18f or later (earlier firmwares are not detected). +- Added auto-repeat to tuning buttons (click and hold the button to scan). +- Added new RF chain diagram. +- Show firmware version in status message. + + +Changes in version 2.2: + +- Use native toolbar and status bar on Mac OS X +- New application icon based on SVG drawing +- Correctly set application and bundle icon on Mac OS X and Windows +- Minor UI tweaks. +- Fix qthid.pro to allow correct build on Ubuntu 9.04 (thanks EA4FVS). +- Correct application name in file headers (thanks Andrew Elwell) + + +Changes in version 2.1: + +- Various fixes and workarounds to prevent crash and freeze when switching + between application and bootloader mode. The application can now run with or + without FCD (hotplug). Upgrade and verify firmware have been tested on Linux + (32 and 64 bit) and OSX 10.6. +- Updated HID API to hidapi/master from 2011-02-17 +- Retrieve libusb configuration on Linux using pkg-config +- Remove local Qt Creator configuration from distribution +- Improvements to the UI layout and widgets +- Added application icon +- Applied GPL V3 license + diff --git a/resources/qthid/QtCore4.dll b/map65/resources/qthid/QtCore4.dll similarity index 100% rename from resources/qthid/QtCore4.dll rename to map65/resources/qthid/QtCore4.dll diff --git a/resources/qthid/QtGui4.dll b/map65/resources/qthid/QtGui4.dll similarity index 100% rename from resources/qthid/QtGui4.dll rename to map65/resources/qthid/QtGui4.dll diff --git a/resources/qthid/README-qthid-4.1.txt b/map65/resources/qthid/README-qthid-4.1.txt similarity index 98% rename from resources/qthid/README-qthid-4.1.txt rename to map65/resources/qthid/README-qthid-4.1.txt index 3f3487eaf..a4eb91747 100644 --- a/resources/qthid/README-qthid-4.1.txt +++ b/map65/resources/qthid/README-qthid-4.1.txt @@ -1,72 +1,72 @@ -1. INTRODUCTION - -Qthid is a small control application for the Funcube Dongle devices. It is an evolution of the qthid002 package by Howard Long G6LVB. - -This version 4.1 is a special version that adds support for the Funcube Dongle Pro+ (see http://www.funcubedongle.com/?page_id=1073). The original Funcube Dongle Pro is not supported by this version. - -Qthid uses the HIDAPI cross platform library by Signal 11 Software (http://www.signal11.us/oss/hidapi/). All the required files are bundled with qthid and no installation of the library is required. - - -2. INSTALLATION AND USAGE - -2.1 Linux - -Precompiled binaries (32 or 64 bit) are avaialble for download but users are required to install the Qt runtime libraries on their own. All common Linux distrib utions have the Qt libraries packaged and they can be installed using the package manager for the platform. Qt 4.7 and 4.8 has been tested. - -In order to use the Funcube Dongle Pro+ as regular user and udev rule is required. An example funcube-dongle.rules file is included with the package and you can simply copy that file to the /etc/udev/rules.d/ directory (hint: open a terminal and type: "sudo cp funcube-dongle.rules /etc/udev/rules.d/" without the quotes) - -Qthid should now detect your Funcube Dongle Pro+ when you plug it in. No reboot or udev restart is necessary. - - -2.2 Mac OS X (10.6+) - -The Mac OS X bundle contains all the necessary Qt libraries and no additional installation or configuration is required. Unlike Linux, the Funcube Dongle will just work. - - -2.3 Windows - -The windows package is self containing and does not require and Qt libs to be installed separately. This release has been tested on Windows 7. - - -2.4 Building from source - -- Install Qt Creator 2.0.1 or newer and Qt SDK 4.7. On recent linux it is normally sufficient to select Qt Creator and the required Qt libraries will be installed as dependencies. On Mac and Windows you need to download the full Qt SDK. On Windows you also need the MS Windows SDK. -- On linux you also need to install the libudev-dev package using the package manager (the name may be different depending on distribution but it should have libudev and dev int he name). -- Open the qthid.pro file in Qt Creator. It will say something about setting up a target; say OK or Finish or Done (depends on version and OS). -- You can now build and execute the project. - -It is also possible to build in a terminal: - -$ tar xvfz qthid-X.Y.tar.gz -$ cd qthid-X.Y -$ mkdir build -$ cd build -$ qmake ../qthid.pro -$ make - -You should now have a qthid binary. - - -3. License - -Qthid 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 3 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, see . - - -The frequency controller widget was taken from Cutesdr by Moe Wheatley, released under the following "Simplified BSD License": - -Copyright 2010 Moe Wheatley. All rights reserved. - -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 Moe Wheatley "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 Moe Wheatley 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. - -The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Moe Wheatley. - +1. INTRODUCTION + +Qthid is a small control application for the Funcube Dongle devices. It is an evolution of the qthid002 package by Howard Long G6LVB. + +This version 4.1 is a special version that adds support for the Funcube Dongle Pro+ (see http://www.funcubedongle.com/?page_id=1073). The original Funcube Dongle Pro is not supported by this version. + +Qthid uses the HIDAPI cross platform library by Signal 11 Software (http://www.signal11.us/oss/hidapi/). All the required files are bundled with qthid and no installation of the library is required. + + +2. INSTALLATION AND USAGE + +2.1 Linux + +Precompiled binaries (32 or 64 bit) are avaialble for download but users are required to install the Qt runtime libraries on their own. All common Linux distrib utions have the Qt libraries packaged and they can be installed using the package manager for the platform. Qt 4.7 and 4.8 has been tested. + +In order to use the Funcube Dongle Pro+ as regular user and udev rule is required. An example funcube-dongle.rules file is included with the package and you can simply copy that file to the /etc/udev/rules.d/ directory (hint: open a terminal and type: "sudo cp funcube-dongle.rules /etc/udev/rules.d/" without the quotes) + +Qthid should now detect your Funcube Dongle Pro+ when you plug it in. No reboot or udev restart is necessary. + + +2.2 Mac OS X (10.6+) + +The Mac OS X bundle contains all the necessary Qt libraries and no additional installation or configuration is required. Unlike Linux, the Funcube Dongle will just work. + + +2.3 Windows + +The windows package is self containing and does not require and Qt libs to be installed separately. This release has been tested on Windows 7. + + +2.4 Building from source + +- Install Qt Creator 2.0.1 or newer and Qt SDK 4.7. On recent linux it is normally sufficient to select Qt Creator and the required Qt libraries will be installed as dependencies. On Mac and Windows you need to download the full Qt SDK. On Windows you also need the MS Windows SDK. +- On linux you also need to install the libudev-dev package using the package manager (the name may be different depending on distribution but it should have libudev and dev int he name). +- Open the qthid.pro file in Qt Creator. It will say something about setting up a target; say OK or Finish or Done (depends on version and OS). +- You can now build and execute the project. + +It is also possible to build in a terminal: + +$ tar xvfz qthid-X.Y.tar.gz +$ cd qthid-X.Y +$ mkdir build +$ cd build +$ qmake ../qthid.pro +$ make + +You should now have a qthid binary. + + +3. License + +Qthid 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 3 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, see . + + +The frequency controller widget was taken from Cutesdr by Moe Wheatley, released under the following "Simplified BSD License": + +Copyright 2010 Moe Wheatley. All rights reserved. + +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 Moe Wheatley "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 Moe Wheatley 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. + +The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Moe Wheatley. + diff --git a/resources/qthid/README.qthid-4.0.txt b/map65/resources/qthid/README.qthid-4.0.txt similarity index 98% rename from resources/qthid/README.qthid-4.0.txt rename to map65/resources/qthid/README.qthid-4.0.txt index dd2603c21..a5f3761ec 100644 --- a/resources/qthid/README.qthid-4.0.txt +++ b/map65/resources/qthid/README.qthid-4.0.txt @@ -1,85 +1,85 @@ -1. INTRODUCTION - -Qthid is a Funcube Dongle control application with Qt user interface. It is an evolution of the qthid002 package by Howard Long G6LVB. - -The Funcube Dongle (http://www.funcubedongle.com/) is a small software defined radio receiver for 64 MHz - 1.7 GHz. It fits into a computer's USB port and uses USB audio to transfer complex I/Q data to SDR applications. The control API for setting frequency, gain, filter, etc. uses the USB HID standard, thus the Funcube Dongle does not require any specific hardware drivers as long as the host operating system supports USB audio and HID. - -Qthid uses the HIDAPI cross platform library by Signal 11 Software (http://www.signal11.us/oss/hidapi/). All the required files are bundled with qthid and no installation of the library is required. - -The current version 4.0 implements the full API available with the 18f firmware. It should cover all the functionality provided by the "fully functional windows frontend". Note that the majority of this full API is only available since firmware 18f and qthid 4 will not work with earlier firmware. The application will simply fail to detect the FCD with earlier firmwares. - -You can use qthid 2.x to upgrade your firmware to 18f or later. - - -2. INSTALLATION AND USAGE - -2.1 Linux - -If you are using Debian testing or Ubuntu, you can install the qthid-fcd-controller package. This should set everything up and you can skip the rest of this section. - -Otherwise you can use the precompiled binaries (32 or 64 bit) but you need the Qt runtime libraries installed. On Ubuntu these are called libqtcore4 and libqtgui4 and their dependencies. You can simply install everything Qt version 4 (not version 3!). Qt 4.8 has been tested, Qt 4.7 will probably also work. - -In order to use the Funcube Dongle as regular user, you need to create an udev rule. An example funcube-dongle.rules file is included with the package and you can simply copy that into the /lib/udev/rules.d/ directory. - -(hint: open a terminal and type: sudo cp funcube-dongle.rules /lib/udev/rules.d/funcube-dongle.rules) - -Qthid should now detect your FCD when you plug it in. No need to restart udev. - - -2.2 Mac OS X (10.6+) - -The Mac OS X bundle contains all the necessary Qt libraries and no additional installation or configuration is required. Unlike Linux, the Funcube Dongle will just work. - - -2.3 Windows - -The windows package is self containing and does not require and Qt libs to be installed separately. It is known to work on Windows XP and Windows 7. - - -2.4 Building from source - -- Install Qt Creator 2.0.1 or newer and Qt SDK 4.7. On recent linux it is normally sufficient to select Qt Creator and the required Qt libraries will be installed as dependencies. On Mac and Windows you need to download the full Qt SDK. On Windows you also need the MS Windows SDK. -- On linux you also need to install the libudev-dev package using the package manager (the name may be different depending on distribution but it should have libudev and dev int he name). -- Open the qthid.pro file in Qt Creator. It will say something about setting up a target; say OK or Finish or Done (depends on version and OS). -- You can now build and execute the project. - -If you want to try the latest experimental code you can check it out from Github: https://github.com/csete/qthid - - -3. License - -Qthid 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 3 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, see . - - -The frequency controller widget was taken from Cutesdr by Moe Wheatley, released under the following "Simplified BSD License": - -Copyright 2010 Moe Wheatley. All rights reserved. - -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 Moe Wheatley ``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 Moe Wheatley 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. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of Moe Wheatley. - +1. INTRODUCTION + +Qthid is a Funcube Dongle control application with Qt user interface. It is an evolution of the qthid002 package by Howard Long G6LVB. + +The Funcube Dongle (http://www.funcubedongle.com/) is a small software defined radio receiver for 64 MHz - 1.7 GHz. It fits into a computer's USB port and uses USB audio to transfer complex I/Q data to SDR applications. The control API for setting frequency, gain, filter, etc. uses the USB HID standard, thus the Funcube Dongle does not require any specific hardware drivers as long as the host operating system supports USB audio and HID. + +Qthid uses the HIDAPI cross platform library by Signal 11 Software (http://www.signal11.us/oss/hidapi/). All the required files are bundled with qthid and no installation of the library is required. + +The current version 4.0 implements the full API available with the 18f firmware. It should cover all the functionality provided by the "fully functional windows frontend". Note that the majority of this full API is only available since firmware 18f and qthid 4 will not work with earlier firmware. The application will simply fail to detect the FCD with earlier firmwares. + +You can use qthid 2.x to upgrade your firmware to 18f or later. + + +2. INSTALLATION AND USAGE + +2.1 Linux + +If you are using Debian testing or Ubuntu, you can install the qthid-fcd-controller package. This should set everything up and you can skip the rest of this section. + +Otherwise you can use the precompiled binaries (32 or 64 bit) but you need the Qt runtime libraries installed. On Ubuntu these are called libqtcore4 and libqtgui4 and their dependencies. You can simply install everything Qt version 4 (not version 3!). Qt 4.8 has been tested, Qt 4.7 will probably also work. + +In order to use the Funcube Dongle as regular user, you need to create an udev rule. An example funcube-dongle.rules file is included with the package and you can simply copy that into the /lib/udev/rules.d/ directory. + +(hint: open a terminal and type: sudo cp funcube-dongle.rules /lib/udev/rules.d/funcube-dongle.rules) + +Qthid should now detect your FCD when you plug it in. No need to restart udev. + + +2.2 Mac OS X (10.6+) + +The Mac OS X bundle contains all the necessary Qt libraries and no additional installation or configuration is required. Unlike Linux, the Funcube Dongle will just work. + + +2.3 Windows + +The windows package is self containing and does not require and Qt libs to be installed separately. It is known to work on Windows XP and Windows 7. + + +2.4 Building from source + +- Install Qt Creator 2.0.1 or newer and Qt SDK 4.7. On recent linux it is normally sufficient to select Qt Creator and the required Qt libraries will be installed as dependencies. On Mac and Windows you need to download the full Qt SDK. On Windows you also need the MS Windows SDK. +- On linux you also need to install the libudev-dev package using the package manager (the name may be different depending on distribution but it should have libudev and dev int he name). +- Open the qthid.pro file in Qt Creator. It will say something about setting up a target; say OK or Finish or Done (depends on version and OS). +- You can now build and execute the project. + +If you want to try the latest experimental code you can check it out from Github: https://github.com/csete/qthid + + +3. License + +Qthid 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 3 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, see . + + +The frequency controller widget was taken from Cutesdr by Moe Wheatley, released under the following "Simplified BSD License": + +Copyright 2010 Moe Wheatley. All rights reserved. + +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 Moe Wheatley ``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 Moe Wheatley 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. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of Moe Wheatley. + diff --git a/resources/qthid/libgcc_s_dw2-1.dll b/map65/resources/qthid/libgcc_s_dw2-1.dll similarity index 100% rename from resources/qthid/libgcc_s_dw2-1.dll rename to map65/resources/qthid/libgcc_s_dw2-1.dll diff --git a/resources/qthid/mingwm10.dll b/map65/resources/qthid/mingwm10.dll similarity index 100% rename from resources/qthid/mingwm10.dll rename to map65/resources/qthid/mingwm10.dll diff --git a/resources/qthid/qthid-4.0.exe.exe b/map65/resources/qthid/qthid-4.0.exe.exe similarity index 100% rename from resources/qthid/qthid-4.0.exe.exe rename to map65/resources/qthid/qthid-4.0.exe.exe diff --git a/resources/qthid/qthid-4.1.exe.exe b/map65/resources/qthid/qthid-4.1.exe.exe similarity index 100% rename from resources/qthid/qthid-4.1.exe.exe rename to map65/resources/qthid/qthid-4.1.exe.exe diff --git a/resources/rigctl-wsjtx.exe b/map65/resources/rigctl-wsjtx.exe similarity index 100% rename from resources/rigctl-wsjtx.exe rename to map65/resources/rigctl-wsjtx.exe diff --git a/resources/wisdom1.bat b/map65/resources/wisdom1.bat similarity index 98% rename from resources/wisdom1.bat rename to map65/resources/wisdom1.bat index 0cbed2c31..2d5e3519f 100644 --- a/resources/wisdom1.bat +++ b/map65/resources/wisdom1.bat @@ -1,7 +1,7 @@ -fftwf-wisdom -o fftwf_wisdom.dat -t 1 -m cif256 rif512 rib512 cif1024 cib1024 cib32768 - -fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 -m cif77175 cib77175 cib5376000 cif74088 cib74088 cib5120000 - -fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 -m cif37632 cib37632 cib2621440 cif37044 cib37044 cib2560000 - -fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 -m cif24192 cif3456 cif336000 +fftwf-wisdom -o fftwf_wisdom.dat -t 1 -m cif256 rif512 rib512 cif1024 cib1024 cib32768 + +fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 -m cif77175 cib77175 cib5376000 cif74088 cib74088 cib5120000 + +fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 -m cif37632 cib37632 cib2621440 cif37044 cib37044 cib2560000 + +fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 -m cif24192 cif3456 cif336000 diff --git a/resources/wisdom2.bat b/map65/resources/wisdom2.bat similarity index 98% rename from resources/wisdom2.bat rename to map65/resources/wisdom2.bat index 3d58ea143..6ced98548 100644 --- a/resources/wisdom2.bat +++ b/map65/resources/wisdom2.bat @@ -1,7 +1,7 @@ -fftwf-wisdom -o fftwf_wisdom.dat -t 1 cif256 rif512 rib512 cif1024 cib1024 cib32768 - -fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 cif77175 cib77175 cib5376000 cif74088 cib74088 cib5120000 - -fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 cif37632 cib37632 cib2621440 cif37044 cib37044 cib2560000 - -fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 cif24192 cif3456 cif336000 +fftwf-wisdom -o fftwf_wisdom.dat -t 1 cif256 rif512 rib512 cif1024 cib1024 cib32768 + +fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 cif77175 cib77175 cib5376000 cif74088 cib74088 cib5120000 + +fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 cif37632 cib37632 cib2621440 cif37044 cib37044 cib2560000 + +fftwf-wisdom -w fftwf_wisdom.dat -o fftwf_wisdom.dat -t 1 cif24192 cif3456 cif336000 diff --git a/set570.cpp b/map65/set570.cpp similarity index 100% rename from set570.cpp rename to map65/set570.cpp diff --git a/signalmeter.cpp b/map65/signalmeter.cpp similarity index 100% rename from signalmeter.cpp rename to map65/signalmeter.cpp diff --git a/signalmeter.h b/map65/signalmeter.h similarity index 100% rename from signalmeter.h rename to map65/signalmeter.h diff --git a/sleep.h b/map65/sleep.h similarity index 100% rename from sleep.h rename to map65/sleep.h diff --git a/soundin.cpp b/map65/soundin.cpp similarity index 100% rename from soundin.cpp rename to map65/soundin.cpp diff --git a/soundin.h b/map65/soundin.h similarity index 100% rename from soundin.h rename to map65/soundin.h diff --git a/soundout.cpp b/map65/soundout.cpp similarity index 100% rename from soundout.cpp rename to map65/soundout.cpp diff --git a/soundout.h b/map65/soundout.h similarity index 100% rename from soundout.h rename to map65/soundout.h diff --git a/ss.bat b/map65/ss.bat similarity index 96% rename from ss.bat rename to map65/ss.bat index d8483ffc7..3ea6cc6dc 100644 --- a/ss.bat +++ b/map65/ss.bat @@ -1 +1 @@ -svn status | grep -v "?" +svn status | grep -v "?" diff --git a/sss.bat b/map65/sss.bat similarity index 91% rename from sss.bat rename to map65/sss.bat index 7b51c8cf8..63b4044f2 100644 --- a/sss.bat +++ b/map65/sss.bat @@ -1 +1 @@ -svn status +svn status diff --git a/txtune.cpp b/map65/txtune.cpp similarity index 94% rename from txtune.cpp rename to map65/txtune.cpp index 1fd30b100..420be9533 100644 --- a/txtune.cpp +++ b/map65/txtune.cpp @@ -1,125 +1,125 @@ -#include "txtune.h" -#include "ui_txtune.h" -#include - -extern int txPower; -extern int iqAmp; -extern int iqPhase; -extern bool bTune; - -TxTune::TxTune(QWidget *parent) : - QDialog(parent), - ui(new Ui::TxTune) -{ - ui->setupUi(this); -} - -TxTune::~TxTune() -{ - delete ui; -} - -void TxTune::accept() -{ - if(bTune) on_pbTune_clicked(); - QDialog::accept(); -} - -void TxTune::reject() -{ - if(bTune) on_pbTune_clicked(); - set_iqAmp(m_saveAmp); - set_iqPhase(m_savePha); - set_txPower(m_saveTxPower); - QDialog::reject(); -} - -void TxTune::on_pwrSlider_valueChanged(int n) -{ - txPower=n; - QString t; - t.sprintf("%d %%",n); - ui->labPower->setText(t); -} - -void TxTune::on_ampSlider_valueChanged(int n) -{ - m_iqAmp1=n; - iqAmp=10*m_iqAmp1 + m_iqAmp2; - QString t; - t.sprintf("%.4f",1.0 + 0.0001*iqAmp); - ui->labAmpReal->setText(t); -} - -void TxTune::on_fineAmpSlider_valueChanged(int n) -{ - m_iqAmp2=n; - iqAmp=10*m_iqAmp1 + m_iqAmp2; - QString t; - t.sprintf("%.4f",1.0 + 0.0001*iqAmp); - ui->labAmpReal->setText(t);} - -void TxTune::on_phaSlider_valueChanged(int n) -{ - m_iqPha1=n; - iqPhase=10*m_iqPha1 + m_iqPha2; - QString t; - t.sprintf("%.2f",0.01*iqPhase); - ui->labPhaReal->setText(t); -} - -void TxTune::on_finePhaSlider_valueChanged(int n) -{ - m_iqPha2=n; - iqPhase=10*m_iqPha1 + m_iqPha2; - QString t; - t.sprintf("%.2f",0.01*iqPhase); - ui->labPhaReal->setText(t); -} - -void TxTune::set_iqAmp(int n) -{ - m_saveAmp=n; - m_iqAmp1=n/10; - m_iqAmp2=n%10; - ui->ampSlider->setValue(m_iqAmp1); - ui->fineAmpSlider->setValue(m_iqAmp2); -} - -void TxTune::set_iqPhase(int n) -{ - m_savePha=n; - m_iqPha1=n/10; - m_iqPha2=n%10; - ui->phaSlider->setValue(m_iqPha1); - ui->finePhaSlider->setValue(m_iqPha2); -} - -void TxTune::set_txPower(int n) -{ - m_saveTxPower=n; - ui->pwrSlider->setValue(n); -} - -void TxTune::on_cbTxImage_toggled(bool b) -{ - ui->ampSlider->setEnabled(b); - ui->fineAmpSlider->setEnabled(b); - ui->labAmp->setEnabled(b); - ui->labFineAmp->setEnabled(b); - ui->phaSlider->setEnabled(b); - ui->finePhaSlider->setEnabled(b); - ui->labPha->setEnabled(b); - ui->labFinePha->setEnabled(b); -} - -void TxTune::on_pbTune_clicked() -{ - bTune = !bTune; - if(bTune) { - QString style="QPushButton{background-color: red;}"; - ui->pbTune->setStyleSheet(style); - } else { - ui->pbTune->setStyleSheet(""); - } -} +#include "txtune.h" +#include "ui_txtune.h" +#include + +extern int txPower; +extern int iqAmp; +extern int iqPhase; +extern bool bTune; + +TxTune::TxTune(QWidget *parent) : + QDialog(parent), + ui(new Ui::TxTune) +{ + ui->setupUi(this); +} + +TxTune::~TxTune() +{ + delete ui; +} + +void TxTune::accept() +{ + if(bTune) on_pbTune_clicked(); + QDialog::accept(); +} + +void TxTune::reject() +{ + if(bTune) on_pbTune_clicked(); + set_iqAmp(m_saveAmp); + set_iqPhase(m_savePha); + set_txPower(m_saveTxPower); + QDialog::reject(); +} + +void TxTune::on_pwrSlider_valueChanged(int n) +{ + txPower=n; + QString t; + t.sprintf("%d %%",n); + ui->labPower->setText(t); +} + +void TxTune::on_ampSlider_valueChanged(int n) +{ + m_iqAmp1=n; + iqAmp=10*m_iqAmp1 + m_iqAmp2; + QString t; + t.sprintf("%.4f",1.0 + 0.0001*iqAmp); + ui->labAmpReal->setText(t); +} + +void TxTune::on_fineAmpSlider_valueChanged(int n) +{ + m_iqAmp2=n; + iqAmp=10*m_iqAmp1 + m_iqAmp2; + QString t; + t.sprintf("%.4f",1.0 + 0.0001*iqAmp); + ui->labAmpReal->setText(t);} + +void TxTune::on_phaSlider_valueChanged(int n) +{ + m_iqPha1=n; + iqPhase=10*m_iqPha1 + m_iqPha2; + QString t; + t.sprintf("%.2f",0.01*iqPhase); + ui->labPhaReal->setText(t); +} + +void TxTune::on_finePhaSlider_valueChanged(int n) +{ + m_iqPha2=n; + iqPhase=10*m_iqPha1 + m_iqPha2; + QString t; + t.sprintf("%.2f",0.01*iqPhase); + ui->labPhaReal->setText(t); +} + +void TxTune::set_iqAmp(int n) +{ + m_saveAmp=n; + m_iqAmp1=n/10; + m_iqAmp2=n%10; + ui->ampSlider->setValue(m_iqAmp1); + ui->fineAmpSlider->setValue(m_iqAmp2); +} + +void TxTune::set_iqPhase(int n) +{ + m_savePha=n; + m_iqPha1=n/10; + m_iqPha2=n%10; + ui->phaSlider->setValue(m_iqPha1); + ui->finePhaSlider->setValue(m_iqPha2); +} + +void TxTune::set_txPower(int n) +{ + m_saveTxPower=n; + ui->pwrSlider->setValue(n); +} + +void TxTune::on_cbTxImage_toggled(bool b) +{ + ui->ampSlider->setEnabled(b); + ui->fineAmpSlider->setEnabled(b); + ui->labAmp->setEnabled(b); + ui->labFineAmp->setEnabled(b); + ui->phaSlider->setEnabled(b); + ui->finePhaSlider->setEnabled(b); + ui->labPha->setEnabled(b); + ui->labFinePha->setEnabled(b); +} + +void TxTune::on_pbTune_clicked() +{ + bTune = !bTune; + if(bTune) { + QString style="QPushButton{background-color: red;}"; + ui->pbTune->setStyleSheet(style); + } else { + ui->pbTune->setStyleSheet(""); + } +} diff --git a/txtune.h b/map65/txtune.h similarity index 94% rename from txtune.h rename to map65/txtune.h index 5b59072df..e60015726 100644 --- a/txtune.h +++ b/map65/txtune.h @@ -1,48 +1,48 @@ -#ifndef TXTUNE_H -#define TXTUNE_H - -#include - -namespace Ui { -class TxTune; -} - -class TxTune : public QDialog -{ - Q_OBJECT - -public: - explicit TxTune(QWidget *parent = 0); - ~TxTune(); - -public slots: - void accept(); - void reject(); - -private slots: - void on_pwrSlider_valueChanged(int n); - void on_ampSlider_valueChanged(int n); - void on_phaSlider_valueChanged(int n); - void on_cbTxImage_toggled(bool b); - void on_pbTune_clicked(); - void on_fineAmpSlider_valueChanged(int n); - void on_finePhaSlider_valueChanged(int n); - -public: - void set_iqAmp(int n); - void set_iqPhase(int n); - void set_txPower(int n); - -private: - qint32 m_iqAmp1; - qint32 m_iqAmp2; - qint32 m_iqPha1; - qint32 m_iqPha2; - qint32 m_saveAmp; - qint32 m_savePha; - qint32 m_saveTxPower; - - Ui::TxTune *ui; -}; - -#endif // TXTUNE_H +#ifndef TXTUNE_H +#define TXTUNE_H + +#include + +namespace Ui { +class TxTune; +} + +class TxTune : public QDialog +{ + Q_OBJECT + +public: + explicit TxTune(QWidget *parent = 0); + ~TxTune(); + +public slots: + void accept(); + void reject(); + +private slots: + void on_pwrSlider_valueChanged(int n); + void on_ampSlider_valueChanged(int n); + void on_phaSlider_valueChanged(int n); + void on_cbTxImage_toggled(bool b); + void on_pbTune_clicked(); + void on_fineAmpSlider_valueChanged(int n); + void on_finePhaSlider_valueChanged(int n); + +public: + void set_iqAmp(int n); + void set_iqPhase(int n); + void set_txPower(int n); + +private: + qint32 m_iqAmp1; + qint32 m_iqAmp2; + qint32 m_iqPha1; + qint32 m_iqPha2; + qint32 m_saveAmp; + qint32 m_savePha; + qint32 m_saveTxPower; + + Ui::TxTune *ui; +}; + +#endif // TXTUNE_H diff --git a/txtune.ui b/map65/txtune.ui similarity index 96% rename from txtune.ui rename to map65/txtune.ui index 995d0bfe0..af78cd418 100644 --- a/txtune.ui +++ b/map65/txtune.ui @@ -1,302 +1,302 @@ - - - TxTune - - - - 0 - 0 - 400 - 300 - - - - Tx Tune - - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - false - - - - - - 13 - 38 - 351 - 191 - - - - - - - - 70 - 0 - - - - Tx Power: - - - - - - - 100 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 10 - - - - - - - Enable Tx I/Q Adjustment - - - - - - - false - - - - 70 - 0 - - - - I/Q Amplitude: - - - - - - - false - - - -100 - - - 100 - - - 0 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - false - - - Fine: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - -100 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - false - - - - 70 - 0 - - - - I/Q Phase: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - -100 - - - 100 - - - 0 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - false - - - Fine: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - -100 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - 1.0000 - - - Qt::AlignCenter - - - - - - - 0.000 - - - Qt::AlignCenter - - - - - - - Tune - - - - - - - 100 % - - - Qt::AlignCenter - - - - - - - - - - buttonBox - accepted() - TxTune - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - TxTune - reject() - - - 316 - 260 - - - 286 - 274 - - - - - + + + TxTune + + + + 0 + 0 + 400 + 300 + + + + Tx Tune + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + false + + + + + + 13 + 38 + 351 + 191 + + + + + + + + 70 + 0 + + + + Tx Power: + + + + + + + 100 + + + 100 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 10 + + + + + + + Enable Tx I/Q Adjustment + + + + + + + false + + + + 70 + 0 + + + + I/Q Amplitude: + + + + + + + false + + + -100 + + + 100 + + + 0 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + + + + + false + + + Fine: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + -100 + + + 100 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + + + + + false + + + + 70 + 0 + + + + I/Q Phase: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + -100 + + + 100 + + + 0 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + + + + + false + + + Fine: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + -100 + + + 100 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + + + + + 1.0000 + + + Qt::AlignCenter + + + + + + + 0.000 + + + Qt::AlignCenter + + + + + + + Tune + + + + + + + 100 % + + + Qt::AlignCenter + + + + + + + + + + buttonBox + accepted() + TxTune + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + TxTune + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/usb.h b/map65/usb.h similarity index 96% rename from usb.h rename to map65/usb.h index 4299db036..51c6a6556 100644 --- a/usb.h +++ b/map65/usb.h @@ -1,409 +1,409 @@ -#ifndef __USB_H__ -#define __USB_H__ - -#include -#include - -/* - * 'interface' is defined somewhere in the Windows header files. This macro - * is deleted here to avoid conflicts and compile errors. - */ - -#ifdef interface -#undef interface -#endif - -/* - * PATH_MAX from limits.h can't be used on Windows if the dll and - * import libraries are build/used by different compilers - */ - -#define LIBUSB_PATH_MAX 512 - - -/* - * USB spec information - * - * This is all stuff grabbed from various USB specs and is pretty much - * not subject to change - */ - -/* - * Device and/or Interface Class codes - */ -#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ -#define USB_CLASS_AUDIO 1 -#define USB_CLASS_COMM 2 -#define USB_CLASS_HID 3 -#define USB_CLASS_PRINTER 7 -#define USB_CLASS_MASS_STORAGE 8 -#define USB_CLASS_HUB 9 -#define USB_CLASS_DATA 10 -#define USB_CLASS_VENDOR_SPEC 0xff - -/* - * Descriptor types - */ -#define USB_DT_DEVICE 0x01 -#define USB_DT_CONFIG 0x02 -#define USB_DT_STRING 0x03 -#define USB_DT_INTERFACE 0x04 -#define USB_DT_ENDPOINT 0x05 - -#define USB_DT_HID 0x21 -#define USB_DT_REPORT 0x22 -#define USB_DT_PHYSICAL 0x23 -#define USB_DT_HUB 0x29 - -/* - * Descriptor sizes per descriptor type - */ -#define USB_DT_DEVICE_SIZE 18 -#define USB_DT_CONFIG_SIZE 9 -#define USB_DT_INTERFACE_SIZE 9 -#define USB_DT_ENDPOINT_SIZE 7 -#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ -#define USB_DT_HUB_NONVAR_SIZE 7 - - -/* ensure byte-packed structures */ -#include - - -/* All standard descriptors have these 2 fields in common */ -struct usb_descriptor_header -{ - unsigned char bLength; - unsigned char bDescriptorType; -}; - -/* String descriptor */ -struct usb_string_descriptor -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wData[1]; -}; - -/* HID descriptor */ -struct usb_hid_descriptor -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdHID; - unsigned char bCountryCode; - unsigned char bNumDescriptors; -}; - -/* Endpoint descriptor */ -#define USB_MAXENDPOINTS 32 -struct usb_endpoint_descriptor -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bEndpointAddress; - unsigned char bmAttributes; - unsigned short wMaxPacketSize; - unsigned char bInterval; - unsigned char bRefresh; - unsigned char bSynchAddress; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -#define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ -#define USB_ENDPOINT_DIR_MASK 0x80 - -#define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */ -#define USB_ENDPOINT_TYPE_CONTROL 0 -#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1 -#define USB_ENDPOINT_TYPE_BULK 2 -#define USB_ENDPOINT_TYPE_INTERRUPT 3 - -/* Interface descriptor */ -#define USB_MAXINTERFACES 32 -struct usb_interface_descriptor -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bInterfaceNumber; - unsigned char bAlternateSetting; - unsigned char bNumEndpoints; - unsigned char bInterfaceClass; - unsigned char bInterfaceSubClass; - unsigned char bInterfaceProtocol; - unsigned char iInterface; - - struct usb_endpoint_descriptor *endpoint; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -#define USB_MAXALTSETTING 128 /* Hard limit */ - -struct usb_interface -{ - struct usb_interface_descriptor *altsetting; - - int num_altsetting; -}; - -/* Configuration descriptor information.. */ -#define USB_MAXCONFIG 8 -struct usb_config_descriptor -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wTotalLength; - unsigned char bNumInterfaces; - unsigned char bConfigurationValue; - unsigned char iConfiguration; - unsigned char bmAttributes; - unsigned char MaxPower; - - struct usb_interface *interface; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -/* Device descriptor */ -struct usb_device_descriptor -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdUSB; - unsigned char bDeviceClass; - unsigned char bDeviceSubClass; - unsigned char bDeviceProtocol; - unsigned char bMaxPacketSize0; - unsigned short idVendor; - unsigned short idProduct; - unsigned short bcdDevice; - unsigned char iManufacturer; - unsigned char iProduct; - unsigned char iSerialNumber; - unsigned char bNumConfigurations; -}; - -struct usb_ctrl_setup -{ - unsigned char bRequestType; - unsigned char bRequest; - unsigned short wValue; - unsigned short wIndex; - unsigned short wLength; -}; - -/* - * Standard requests - */ -#define USB_REQ_GET_STATUS 0x00 -#define USB_REQ_CLEAR_FEATURE 0x01 -/* 0x02 is reserved */ -#define USB_REQ_SET_FEATURE 0x03 -/* 0x04 is reserved */ -#define USB_REQ_SET_ADDRESS 0x05 -#define USB_REQ_GET_DESCRIPTOR 0x06 -#define USB_REQ_SET_DESCRIPTOR 0x07 -#define USB_REQ_GET_CONFIGURATION 0x08 -#define USB_REQ_SET_CONFIGURATION 0x09 -#define USB_REQ_GET_INTERFACE 0x0A -#define USB_REQ_SET_INTERFACE 0x0B -#define USB_REQ_SYNCH_FRAME 0x0C - -#define USB_TYPE_STANDARD (0x00 << 5) -#define USB_TYPE_CLASS (0x01 << 5) -#define USB_TYPE_VENDOR (0x02 << 5) -#define USB_TYPE_RESERVED (0x03 << 5) - -#define USB_RECIP_DEVICE 0x00 -#define USB_RECIP_INTERFACE 0x01 -#define USB_RECIP_ENDPOINT 0x02 -#define USB_RECIP_OTHER 0x03 - -/* - * Various libusb API related stuff - */ - -#define USB_ENDPOINT_IN 0x80 -#define USB_ENDPOINT_OUT 0x00 - -/* Error codes */ -#define USB_ERROR_BEGIN 500000 - -/* - * This is supposed to look weird. This file is generated from autoconf - * and I didn't want to make this too complicated. - */ -#define USB_LE16_TO_CPU(x) - -/* Data types */ -/* struct usb_device; */ -/* struct usb_bus; */ - -struct usb_device -{ - struct usb_device *next, *prev; - - char filename[LIBUSB_PATH_MAX]; - - struct usb_bus *bus; - - struct usb_device_descriptor descriptor; - struct usb_config_descriptor *config; - - void *dev; /* Darwin support */ - - unsigned char devnum; - - unsigned char num_children; - struct usb_device **children; -}; - -struct usb_bus -{ - struct usb_bus *next, *prev; - - char dirname[LIBUSB_PATH_MAX]; - - struct usb_device *devices; - unsigned long location; - - struct usb_device *root_dev; -}; - -/* Version information, Windows specific */ -struct usb_version -{ - struct - { - int major; - int minor; - int micro; - int nano; - } dll; - struct - { - int major; - int minor; - int micro; - int nano; - } driver; -}; - - -struct usb_dev_handle; -typedef struct usb_dev_handle usb_dev_handle; - -/* Variables */ -#ifndef __USB_C__ -#define usb_busses usb_get_busses() -#endif - - - -#include - - -#ifdef __cplusplus -extern "C" -{ -#endif - - /* Function prototypes */ - - /* usb.c */ - usb_dev_handle *usb_open(struct usb_device *dev); - int usb_close(usb_dev_handle *dev); - int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, - size_t buflen); - int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, - size_t buflen); - - /* descriptors.c */ - int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep, - unsigned char type, unsigned char index, - void *buf, int size); - int usb_get_descriptor(usb_dev_handle *udev, unsigned char type, - unsigned char index, void *buf, int size); - - /* .c */ - int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, - int value, int index, char *bytes, int size, - int timeout); - int usb_set_configuration(usb_dev_handle *dev, int configuration); - int usb_claim_interface(usb_dev_handle *dev, int interface); - int usb_release_interface(usb_dev_handle *dev, int interface); - int usb_set_altinterface(usb_dev_handle *dev, int alternate); - int usb_resetep(usb_dev_handle *dev, unsigned int ep); - int usb_clear_halt(usb_dev_handle *dev, unsigned int ep); - int usb_reset(usb_dev_handle *dev); - - char *usb_strerror(void); - - void usb_init(void); - void usb_set_debug(int level); - int usb_find_busses(void); - int usb_find_devices(void); - struct usb_device *usb_device(usb_dev_handle *dev); - struct usb_bus *usb_get_busses(void); - - - /* Windows specific functions */ - -#define LIBUSB_HAS_INSTALL_SERVICE_NP 1 - int usb_install_service_np(void); - void CALLBACK usb_install_service_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_UNINSTALL_SERVICE_NP 1 - int usb_uninstall_service_np(void); - void CALLBACK usb_uninstall_service_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_INSTALL_DRIVER_NP 1 - int usb_install_driver_np(const char *inf_file); - void CALLBACK usb_install_driver_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_TOUCH_INF_FILE_NP 1 - int usb_touch_inf_file_np(const char *inf_file); - void CALLBACK usb_touch_inf_file_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_INSTALL_NEEDS_RESTART_NP 1 - int usb_install_needs_restart_np(void); - - const struct usb_version *usb_get_version(void); - - int usb_isochronous_setup_async(usb_dev_handle *dev, void **context, - unsigned char ep, int pktsize); - int usb_bulk_setup_async(usb_dev_handle *dev, void **context, - unsigned char ep); - int usb_interrupt_setup_async(usb_dev_handle *dev, void **context, - unsigned char ep); - - int usb_submit_async(void *context, char *bytes, int size); - int usb_reap_async(void *context, int timeout); - int usb_reap_async_nocancel(void *context, int timeout); - int usb_cancel_async(void *context); - int usb_free_async(void **context); - - -#ifdef __cplusplus -} -#endif - -#endif /* __USB_H__ */ - +#ifndef __USB_H__ +#define __USB_H__ + +#include +#include + +/* + * 'interface' is defined somewhere in the Windows header files. This macro + * is deleted here to avoid conflicts and compile errors. + */ + +#ifdef interface +#undef interface +#endif + +/* + * PATH_MAX from limits.h can't be used on Windows if the dll and + * import libraries are build/used by different compilers + */ + +#define LIBUSB_PATH_MAX 512 + + +/* + * USB spec information + * + * This is all stuff grabbed from various USB specs and is pretty much + * not subject to change + */ + +/* + * Device and/or Interface Class codes + */ +#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ +#define USB_CLASS_AUDIO 1 +#define USB_CLASS_COMM 2 +#define USB_CLASS_HID 3 +#define USB_CLASS_PRINTER 7 +#define USB_CLASS_MASS_STORAGE 8 +#define USB_CLASS_HUB 9 +#define USB_CLASS_DATA 10 +#define USB_CLASS_VENDOR_SPEC 0xff + +/* + * Descriptor types + */ +#define USB_DT_DEVICE 0x01 +#define USB_DT_CONFIG 0x02 +#define USB_DT_STRING 0x03 +#define USB_DT_INTERFACE 0x04 +#define USB_DT_ENDPOINT 0x05 + +#define USB_DT_HID 0x21 +#define USB_DT_REPORT 0x22 +#define USB_DT_PHYSICAL 0x23 +#define USB_DT_HUB 0x29 + +/* + * Descriptor sizes per descriptor type + */ +#define USB_DT_DEVICE_SIZE 18 +#define USB_DT_CONFIG_SIZE 9 +#define USB_DT_INTERFACE_SIZE 9 +#define USB_DT_ENDPOINT_SIZE 7 +#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ +#define USB_DT_HUB_NONVAR_SIZE 7 + + +/* ensure byte-packed structures */ +#include + + +/* All standard descriptors have these 2 fields in common */ +struct usb_descriptor_header +{ + unsigned char bLength; + unsigned char bDescriptorType; +}; + +/* String descriptor */ +struct usb_string_descriptor +{ + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short wData[1]; +}; + +/* HID descriptor */ +struct usb_hid_descriptor +{ + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short bcdHID; + unsigned char bCountryCode; + unsigned char bNumDescriptors; +}; + +/* Endpoint descriptor */ +#define USB_MAXENDPOINTS 32 +struct usb_endpoint_descriptor +{ + unsigned char bLength; + unsigned char bDescriptorType; + unsigned char bEndpointAddress; + unsigned char bmAttributes; + unsigned short wMaxPacketSize; + unsigned char bInterval; + unsigned char bRefresh; + unsigned char bSynchAddress; + + unsigned char *extra; /* Extra descriptors */ + int extralen; +}; + +#define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ +#define USB_ENDPOINT_DIR_MASK 0x80 + +#define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */ +#define USB_ENDPOINT_TYPE_CONTROL 0 +#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1 +#define USB_ENDPOINT_TYPE_BULK 2 +#define USB_ENDPOINT_TYPE_INTERRUPT 3 + +/* Interface descriptor */ +#define USB_MAXINTERFACES 32 +struct usb_interface_descriptor +{ + unsigned char bLength; + unsigned char bDescriptorType; + unsigned char bInterfaceNumber; + unsigned char bAlternateSetting; + unsigned char bNumEndpoints; + unsigned char bInterfaceClass; + unsigned char bInterfaceSubClass; + unsigned char bInterfaceProtocol; + unsigned char iInterface; + + struct usb_endpoint_descriptor *endpoint; + + unsigned char *extra; /* Extra descriptors */ + int extralen; +}; + +#define USB_MAXALTSETTING 128 /* Hard limit */ + +struct usb_interface +{ + struct usb_interface_descriptor *altsetting; + + int num_altsetting; +}; + +/* Configuration descriptor information.. */ +#define USB_MAXCONFIG 8 +struct usb_config_descriptor +{ + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short wTotalLength; + unsigned char bNumInterfaces; + unsigned char bConfigurationValue; + unsigned char iConfiguration; + unsigned char bmAttributes; + unsigned char MaxPower; + + struct usb_interface *interface; + + unsigned char *extra; /* Extra descriptors */ + int extralen; +}; + +/* Device descriptor */ +struct usb_device_descriptor +{ + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short bcdUSB; + unsigned char bDeviceClass; + unsigned char bDeviceSubClass; + unsigned char bDeviceProtocol; + unsigned char bMaxPacketSize0; + unsigned short idVendor; + unsigned short idProduct; + unsigned short bcdDevice; + unsigned char iManufacturer; + unsigned char iProduct; + unsigned char iSerialNumber; + unsigned char bNumConfigurations; +}; + +struct usb_ctrl_setup +{ + unsigned char bRequestType; + unsigned char bRequest; + unsigned short wValue; + unsigned short wIndex; + unsigned short wLength; +}; + +/* + * Standard requests + */ +#define USB_REQ_GET_STATUS 0x00 +#define USB_REQ_CLEAR_FEATURE 0x01 +/* 0x02 is reserved */ +#define USB_REQ_SET_FEATURE 0x03 +/* 0x04 is reserved */ +#define USB_REQ_SET_ADDRESS 0x05 +#define USB_REQ_GET_DESCRIPTOR 0x06 +#define USB_REQ_SET_DESCRIPTOR 0x07 +#define USB_REQ_GET_CONFIGURATION 0x08 +#define USB_REQ_SET_CONFIGURATION 0x09 +#define USB_REQ_GET_INTERFACE 0x0A +#define USB_REQ_SET_INTERFACE 0x0B +#define USB_REQ_SYNCH_FRAME 0x0C + +#define USB_TYPE_STANDARD (0x00 << 5) +#define USB_TYPE_CLASS (0x01 << 5) +#define USB_TYPE_VENDOR (0x02 << 5) +#define USB_TYPE_RESERVED (0x03 << 5) + +#define USB_RECIP_DEVICE 0x00 +#define USB_RECIP_INTERFACE 0x01 +#define USB_RECIP_ENDPOINT 0x02 +#define USB_RECIP_OTHER 0x03 + +/* + * Various libusb API related stuff + */ + +#define USB_ENDPOINT_IN 0x80 +#define USB_ENDPOINT_OUT 0x00 + +/* Error codes */ +#define USB_ERROR_BEGIN 500000 + +/* + * This is supposed to look weird. This file is generated from autoconf + * and I didn't want to make this too complicated. + */ +#define USB_LE16_TO_CPU(x) + +/* Data types */ +/* struct usb_device; */ +/* struct usb_bus; */ + +struct usb_device +{ + struct usb_device *next, *prev; + + char filename[LIBUSB_PATH_MAX]; + + struct usb_bus *bus; + + struct usb_device_descriptor descriptor; + struct usb_config_descriptor *config; + + void *dev; /* Darwin support */ + + unsigned char devnum; + + unsigned char num_children; + struct usb_device **children; +}; + +struct usb_bus +{ + struct usb_bus *next, *prev; + + char dirname[LIBUSB_PATH_MAX]; + + struct usb_device *devices; + unsigned long location; + + struct usb_device *root_dev; +}; + +/* Version information, Windows specific */ +struct usb_version +{ + struct + { + int major; + int minor; + int micro; + int nano; + } dll; + struct + { + int major; + int minor; + int micro; + int nano; + } driver; +}; + + +struct usb_dev_handle; +typedef struct usb_dev_handle usb_dev_handle; + +/* Variables */ +#ifndef __USB_C__ +#define usb_busses usb_get_busses() +#endif + + + +#include + + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* Function prototypes */ + + /* usb.c */ + usb_dev_handle *usb_open(struct usb_device *dev); + int usb_close(usb_dev_handle *dev); + int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, + size_t buflen); + int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, + size_t buflen); + + /* descriptors.c */ + int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep, + unsigned char type, unsigned char index, + void *buf, int size); + int usb_get_descriptor(usb_dev_handle *udev, unsigned char type, + unsigned char index, void *buf, int size); + + /* .c */ + int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, + int value, int index, char *bytes, int size, + int timeout); + int usb_set_configuration(usb_dev_handle *dev, int configuration); + int usb_claim_interface(usb_dev_handle *dev, int interface); + int usb_release_interface(usb_dev_handle *dev, int interface); + int usb_set_altinterface(usb_dev_handle *dev, int alternate); + int usb_resetep(usb_dev_handle *dev, unsigned int ep); + int usb_clear_halt(usb_dev_handle *dev, unsigned int ep); + int usb_reset(usb_dev_handle *dev); + + char *usb_strerror(void); + + void usb_init(void); + void usb_set_debug(int level); + int usb_find_busses(void); + int usb_find_devices(void); + struct usb_device *usb_device(usb_dev_handle *dev); + struct usb_bus *usb_get_busses(void); + + + /* Windows specific functions */ + +#define LIBUSB_HAS_INSTALL_SERVICE_NP 1 + int usb_install_service_np(void); + void CALLBACK usb_install_service_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + +#define LIBUSB_HAS_UNINSTALL_SERVICE_NP 1 + int usb_uninstall_service_np(void); + void CALLBACK usb_uninstall_service_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + +#define LIBUSB_HAS_INSTALL_DRIVER_NP 1 + int usb_install_driver_np(const char *inf_file); + void CALLBACK usb_install_driver_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + +#define LIBUSB_HAS_TOUCH_INF_FILE_NP 1 + int usb_touch_inf_file_np(const char *inf_file); + void CALLBACK usb_touch_inf_file_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + +#define LIBUSB_HAS_INSTALL_NEEDS_RESTART_NP 1 + int usb_install_needs_restart_np(void); + + const struct usb_version *usb_get_version(void); + + int usb_isochronous_setup_async(usb_dev_handle *dev, void **context, + unsigned char ep, int pktsize); + int usb_bulk_setup_async(usb_dev_handle *dev, void **context, + unsigned char ep); + int usb_interrupt_setup_async(usb_dev_handle *dev, void **context, + unsigned char ep); + + int usb_submit_async(void *context, char *bytes, int size); + int usb_reap_async(void *context, int timeout); + int usb_reap_async_nocancel(void *context, int timeout); + int usb_cancel_async(void *context); + int usb_free_async(void **context); + + +#ifdef __cplusplus +} +#endif + +#endif /* __USB_H__ */ + diff --git a/widegraph.cpp b/map65/widegraph.cpp similarity index 100% rename from widegraph.cpp rename to map65/widegraph.cpp diff --git a/widegraph.h b/map65/widegraph.h similarity index 95% rename from widegraph.h rename to map65/widegraph.h index e7fbee4f9..3fdcc6448 100644 --- a/widegraph.h +++ b/map65/widegraph.h @@ -1,91 +1,91 @@ -#ifndef WIDEGRAPH_H -#define WIDEGRAPH_H -#include -#include - -namespace Ui { - class WideGraph; -} - -class WideGraph : public QDialog -{ - Q_OBJECT - -public: - explicit WideGraph(QWidget *parent = 0); - ~WideGraph(); - - bool m_bForceCenterFreq; - bool m_bLockTxRx; - qint32 m_mult570; - qint32 m_mult570Tx; - double m_dForceCenterFreq; - double m_cal570; - double m_TxOffset; - - void dataSink2(float s[], int nkhz, int ihsym, int ndiskdata, - uchar lstrong[]); - int QSOfreq(); - int nSpan(); - int nStartFreq(); - float fSpan(); - void saveSettings(); - void setDF(int n); - int DF(); - int Tol(); - void setTol(int n); - void setFcal(int n); - void setPalette(QString palette); - void setFsample(int n); - void setMode65(int n); - void setPeriod(int n); - void setDecodeFinished(); - double fGreen(); - void rx570(); - void tx570(); - void updateFreqLabel(); - void enableSetRxHardware(bool b); - - qint32 m_qsoFreq; - -signals: - void freezeDecode2(int n); - void f11f12(int n); - -public slots: - void wideFreezeDecode(int n); - void initIQplus(); - -protected: - virtual void keyPressEvent( QKeyEvent *e ); - void resizeEvent(QResizeEvent* event); - -private slots: - void on_waterfallAvgSpinBox_valueChanged(int arg1); - void on_freqSpanSpinBox_valueChanged(int arg1); - void on_freqOffsetSpinBox_valueChanged(int arg1); - void on_zeroSpinBox_valueChanged(int arg1); - void on_gainSpinBox_valueChanged(int arg1); - void on_autoZeroPushButton_clicked(); - void on_cbFcenter_stateChanged(int arg1); - void on_fCenterLineEdit_editingFinished(); - void on_pbSetRxHardware_clicked(); - void on_cbSpec2d_toggled(bool checked); - void on_cbLockTxRx_stateChanged(int arg1); - -private: - bool m_bIQxt; - qint32 m_waterfallAvg; - qint32 m_fCal; - qint32 m_fSample; - qint32 m_mode65; - qint32 m_TRperiod=60; - - Ui::WideGraph *ui; -}; - -#ifdef WIN32 -extern int set570(double freq_MHz); -#endif - -#endif // WIDEGRAPH_H +#ifndef WIDEGRAPH_H +#define WIDEGRAPH_H +#include +#include + +namespace Ui { + class WideGraph; +} + +class WideGraph : public QDialog +{ + Q_OBJECT + +public: + explicit WideGraph(QWidget *parent = 0); + ~WideGraph(); + + bool m_bForceCenterFreq; + bool m_bLockTxRx; + qint32 m_mult570; + qint32 m_mult570Tx; + double m_dForceCenterFreq; + double m_cal570; + double m_TxOffset; + + void dataSink2(float s[], int nkhz, int ihsym, int ndiskdata, + uchar lstrong[]); + int QSOfreq(); + int nSpan(); + int nStartFreq(); + float fSpan(); + void saveSettings(); + void setDF(int n); + int DF(); + int Tol(); + void setTol(int n); + void setFcal(int n); + void setPalette(QString palette); + void setFsample(int n); + void setMode65(int n); + void setPeriod(int n); + void setDecodeFinished(); + double fGreen(); + void rx570(); + void tx570(); + void updateFreqLabel(); + void enableSetRxHardware(bool b); + + qint32 m_qsoFreq; + +signals: + void freezeDecode2(int n); + void f11f12(int n); + +public slots: + void wideFreezeDecode(int n); + void initIQplus(); + +protected: + virtual void keyPressEvent( QKeyEvent *e ); + void resizeEvent(QResizeEvent* event); + +private slots: + void on_waterfallAvgSpinBox_valueChanged(int arg1); + void on_freqSpanSpinBox_valueChanged(int arg1); + void on_freqOffsetSpinBox_valueChanged(int arg1); + void on_zeroSpinBox_valueChanged(int arg1); + void on_gainSpinBox_valueChanged(int arg1); + void on_autoZeroPushButton_clicked(); + void on_cbFcenter_stateChanged(int arg1); + void on_fCenterLineEdit_editingFinished(); + void on_pbSetRxHardware_clicked(); + void on_cbSpec2d_toggled(bool checked); + void on_cbLockTxRx_stateChanged(int arg1); + +private: + bool m_bIQxt; + qint32 m_waterfallAvg; + qint32 m_fCal; + qint32 m_fSample; + qint32 m_mode65; + qint32 m_TRperiod=60; + + Ui::WideGraph *ui; +}; + +#ifdef WIN32 +extern int set570(double freq_MHz); +#endif + +#endif // WIDEGRAPH_H diff --git a/widegraph.ui b/map65/widegraph.ui similarity index 96% rename from widegraph.ui rename to map65/widegraph.ui index 1cd398145..5ac043a91 100644 --- a/widegraph.ui +++ b/map65/widegraph.ui @@ -1,463 +1,463 @@ - - - WideGraph - - - - 0 - 0 - 1178 - 326 - - - - Dialog - - - - - - - - true - - - - 0 - 0 - - - - - 400 - 200 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - 1 - - - - - 1015 - 230 - 131 - 41 - - - - - 12 - - - - Rx: 144.118.200 -Tx: 144.127.317 - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - kHz - - - -24 - - - 24 - - - 1 - - - 0 - - - - - - - - 50 - 0 - - - - Freq Offset - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - kHz - - - 5 - - - 90 - - - 5 - - - 60 - - - - - - - Freq Span - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 40 - 16777215 - - - - 1 - - - 20 - - - - - - - N Avg - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - 40 - 16777215 - - - - -20 - - - 20 - - - - - - - Gain - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - 40 - 16777215 - - - - -100 - - - 100 - - - - - - - Zero - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Auto Zero - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - 2D Spectrum - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - Lock Tx=Rx Freq - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - Force Center Freq (MHz) - - - - - - - false - - - - 0 - 0 - - - - - 65 - 16777215 - - - - 1296.065 - - - - - - - false - - - Set Rx Freq - - - - - - - - - - - - CPlotter - QFrame -
plotter.h
- 1 -
-
- - -
+ + + WideGraph + + + + 0 + 0 + 1178 + 326 + + + + Dialog + + + + + + + + true + + + + 0 + 0 + + + + + 400 + 200 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + 1 + + + + + 1015 + 230 + 131 + 41 + + + + + 12 + + + + Rx: 144.118.200 +Tx: 144.127.317 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + kHz + + + -24 + + + 24 + + + 1 + + + 0 + + + + + + + + 50 + 0 + + + + Freq Offset + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + kHz + + + 5 + + + 90 + + + 5 + + + 60 + + + + + + + Freq Span + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 40 + 16777215 + + + + 1 + + + 20 + + + + + + + N Avg + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 40 + 16777215 + + + + -20 + + + 20 + + + + + + + Gain + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + + 40 + 16777215 + + + + -100 + + + 100 + + + + + + + Zero + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + Auto Zero + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + 2D Spectrum + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 20 + 20 + + + + + + + + Lock Tx=Rx Freq + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + Force Center Freq (MHz) + + + + + + + false + + + + 0 + 0 + + + + + 65 + 16777215 + + + + 1296.065 + + + + + + + false + + + Set Rx Freq + + + + + + + + + + + + CPlotter + QFrame +
plotter.h
+ 1 +
+
+ + +
diff --git a/wsjt.ico b/map65/wsjt.ico similarity index 100% rename from wsjt.ico rename to map65/wsjt.ico