Compare commits

..

4 Commits

Author SHA1 Message Date
Jordan Sherer 4f1fe4fc94 SVN r8748 2018-06-14 21:27:34 -04:00
Jordan Sherer 419c039d08 SVN r8577 2018-03-19 01:23:56 -04:00
Jordan Sherer 45cc6416c1 SVN r8568 2018-03-17 12:56:24 -04:00
Jordan Sherer 587950f372 SVN r8556 2018-03-12 20:20:52 -04:00
122 changed files with 8117 additions and 18219 deletions
-308
View File
@@ -1,308 +0,0 @@
#include "APRSISClient.h"
#include <cmath>
#include "varicode.h"
const int PACKET_TIMEOUT_SECONDS = 300;
APRSISClient::APRSISClient(QString host, quint16 port, QObject *parent):
QTcpSocket(parent),
m_host(host),
m_port(port)
{
connect(&m_timer, &QTimer::timeout, this, &APRSISClient::sendReports);
m_timer.setInterval(60*1000); // every 60 seconds
m_timer.start();
}
quint32 APRSISClient::hashCallsign(QString callsign){
// based on: https://github.com/hessu/aprsc/blob/master/src/passcode.c
QByteArray rootCall = QString(callsign.split("-").first().toUpper()).toLocal8Bit() + '\0';
quint32 hash = 0x73E2;
int i = 0;
int len = rootCall.length();
while(i+1 < len){
hash ^= rootCall.at(i) << 8;
hash ^= rootCall.at(i+1);
i += 2;
}
return hash & 0x7FFF;
}
QString APRSISClient::loginFrame(QString callsign){
auto loginFrame = QString("user %1 pass %2 ver %3\n");
loginFrame = loginFrame.arg(callsign);
loginFrame = loginFrame.arg(hashCallsign(callsign));
loginFrame = loginFrame.arg("FT8Call");
return loginFrame;
}
QList<QStringList> findall(QRegularExpression re, QString content){
int pos = 0;
QList<QStringList> all;
while(pos < content.length()){
auto match = re.match(content, pos);
if(!match.hasMatch()){
break;
}
all.append(match.capturedTexts());
pos = match.capturedEnd();
}
return all;
}
inline long
floordiv (long num, long den)
{
if (0 < (num^den))
return num/den;
else
{
ldiv_t res = ldiv(num,den);
return (res.rem)? res.quot-1
: res.quot;
}
}
// convert an arbitrary length grid locator to a high precision lat/lon
QPair<float, float> APRSISClient::grid2deg(QString locator){
QString grid = locator.toUpper();
float lat = -90;
float lon = -90;
auto lats = findall(QRegularExpression("([A-X])([A-X])"), grid);
auto lons = findall(QRegularExpression("(\\d)(\\d)"), grid);
int valx[22];
int valy[22];
int i = 0;
int tot = 0;
char A = 'A';
foreach(QStringList matched, lats){
char x = matched.at(1).at(0).toLatin1();
char y = matched.at(2).at(0).toLatin1();
valx[i*2] = x-A;
valy[i*2] = y-A;
i++;
tot++;
}
i = 0;
foreach(QStringList matched, lons){
int x = matched.at(1).toInt();
int y = matched.at(2).toInt();
valx[i*2+1]=x;
valy[i*2+1]=y;
i++;
tot++;
}
for(int i = 0; i < tot; i++){
int x = valx[i];
int y = valy[i];
int z = i - 1;
float scale = pow(10, floordiv(-(z-1), 2)) * pow(24, floordiv(-z, 2));
lon += scale * x;
lat += scale * y;
}
lon *= 2;
return {lat, lon};
}
// convert an arbitrary length grid locator to a high precision lat/lon in aprs format
QPair<QString, QString> APRSISClient::grid2aprs(QString grid){
auto geo = APRSISClient::grid2deg(grid);
auto lat = geo.first;
auto lon = geo.second;
QString latDir = "N";
if(lat < 0){
lat *= -1;
latDir = "S";
}
QString lonDir = "E";
if(lon < 0){
lon *= -1;
lonDir = "W";
}
double iLat, fLat, iLon, fLon, iLatMin, fLatMin, iLonMin, fLonMin, iLatSec, iLonSec;
fLat = modf(lat, &iLat);
fLon = modf(lon, &iLon);
fLatMin = modf(fLat * 60, &iLatMin);
fLonMin = modf(fLon * 60, &iLonMin);
iLatSec = round(fLatMin * 60);
iLonSec = round(fLonMin * 60);
if(iLatSec == 60){
iLatMin += 1;
iLatSec = 0;
}
if(iLonSec == 60){
iLonMin += 1;
iLonSec = 0;
}
if(iLatMin == 60){
iLat += 1;
iLatMin = 0;
}
if(iLonMin == 60){
iLon += 1;
iLonMin = 0;
}
double aprsLat = iLat * 100 + iLatMin + (iLatSec / 60.0);
double aprsLon = iLon * 100 + iLonMin + (iLonSec / 60.0);
return {
QString().sprintf("%07.2f%%1", aprsLat).arg(latDir),
QString().sprintf("%08.2f%%1", aprsLon).arg(lonDir)
};
}
void APRSISClient::enqueueSpot(QString theircall, QString grid, QString comment){
if(m_localCall.isEmpty()) return;
auto geo = APRSISClient::grid2aprs(grid);
auto spotFrame = QString("%1>%2,APRS,TCPIP*:=%3/%4nFT8CALL %5\n");
spotFrame = spotFrame.arg(theircall);
spotFrame = spotFrame.arg(m_localCall);
spotFrame = spotFrame.arg(geo.first);
spotFrame = spotFrame.arg(geo.second);
spotFrame = spotFrame.arg(comment.left(43));
enqueueRaw(spotFrame);
}
void APRSISClient::enqueueThirdParty(QString theircall, QString payload){
if(!isPasscodeValid()){
return;
}
auto frame = QString("%1>%2,APRS,TCPIP*:%3\n");
frame = frame.arg(theircall);
frame = frame.arg(m_localCall);
frame = frame.arg(payload);
enqueueRaw(frame);
}
void APRSISClient::enqueueRaw(QString aprsFrame){
m_frameQueue.enqueue({ aprsFrame, QDateTime::currentDateTimeUtc() });
}
void APRSISClient::processQueue(bool disconnect){
// don't process queue if we haven't set our local callsign
if(m_localCall.isEmpty()) return;
// don't process queue if there's nothing to process
if(m_frameQueue.isEmpty()) return;
// 1. connect (and read)
// 2. login (and read)
// 3. for each raw frame in queue, send
// 4. disconnect
if(state() != QTcpSocket::ConnectedState){
connectToHost(m_host, m_port);
if(!waitForConnected(5000)){
qDebug() << "APRSISClient Connection Error:" << errorString();
return;
}
}
auto re = QRegExp("(full|unavailable|busy)");
auto line = QString(readLine());
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Connection Busy:" << line;
return;
}
if(write(loginFrame(m_localCall).toLocal8Bit()) == -1){
qDebug() << "APRSISClient Write Login Error:" << errorString();
return;
}
if(!waitForReadyRead(5000)){
qDebug() << "APRSISClient Login Error: Server Not Responding";
return;
}
line = QString(readAll());
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Server Busy:" << line;
return;
}
QQueue<QPair<QString, QDateTime>> delayed;
while(!m_frameQueue.isEmpty()){
auto pair = m_frameQueue.head();
auto frame = pair.first;
auto timestamp = pair.second;
// if the packet is older than the timeout, drop it.
if(timestamp.secsTo(QDateTime::currentDateTimeUtc()) > PACKET_TIMEOUT_SECONDS){
qDebug() << "APRSISClient Packet Timeout:" << frame;
m_frameQueue.dequeue();
continue;
}
// random delay 25% of the time for throttling (a skip will add 60 seconds to the processing time)
if(qrand() % 100 <= 25){
qDebug() << "APRSISClient Throttle: Skipping Frame";
delayed.enqueue(m_frameQueue.dequeue());
continue;
}
QByteArray data = frame.toLocal8Bit();
if(write(data) == -1){
qDebug() << "APRSISClient Write Error:" << errorString();
return;
}
qDebug() << "APRSISClient Write:" << data;
if(waitForReadyRead(5000)){
line = QString(readLine());
qDebug() << "APRSISClient Read:" << line;
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Cannot Write Error:" << line;
return;
}
}
m_frameQueue.dequeue();
}
// enqueue the delayed frames for later processing
while(!delayed.isEmpty()){
m_frameQueue.enqueue(delayed.dequeue());
}
if(disconnect){
disconnectFromHost();
}
}
-67
View File
@@ -1,67 +0,0 @@
#ifndef APRSISCLIENT_H
#define APRSISCLIENT_H
#include <QtGlobal>
#include <QDateTime>
#include <QTcpSocket>
#include <QQueue>
#include <QPair>
#include <QTimer>
class APRSISClient : public QTcpSocket
{
public:
APRSISClient(QString host, quint16 port, QObject *parent = nullptr);
static quint32 hashCallsign(QString callsign);
static QString loginFrame(QString callsign);
static QPair<float, float> grid2deg(QString grid);
static QPair<QString, QString> grid2aprs(QString grid);
void setServer(QString host, quint16 port){
if(state() == QTcpSocket::ConnectedState){
disconnectFromHost();
}
m_host = host;
m_port = port;
}
void setPaused(bool paused){
m_paused = paused;
}
void setLocalStation(QString mycall, QString mygrid, QString passcode){
m_localCall = mycall;
m_localGrid = mygrid;
m_localPasscode = passcode;
}
bool isPasscodeValid(){ return m_localPasscode == QString::number(hashCallsign(m_localCall)); }
void enqueueSpot(QString theircall, QString grid, QString comment);
void enqueueThirdParty(QString theircall, QString payload);
void enqueueRaw(QString aprsFrame);
void processQueue(bool disconnect=true);
public slots:
void sendReports(){
if(m_paused) return;
processQueue(true);
}
private:
QString m_localCall;
QString m_localGrid;
QString m_localPasscode;
QQueue<QPair<QString, QDateTime>> m_frameQueue;
QString m_host;
quint16 m_port;
QTimer m_timer;
bool m_paused;
};
#endif // APRSISCLIENT_H
-13
View File
@@ -87,19 +87,6 @@ int Bands::find (QString const& band) const
return result;
}
bool Bands::findFreq(QString const& band, Radio::Frequency *pFreqLower, Radio::Frequency *pFreqHigher) const {
int row = find(band);
if(row == -1){
return false;
}
if(pFreqLower) *pFreqLower = ADIF_bands[row].lower_bound_;
if(pFreqHigher) *pFreqHigher = ADIF_bands[row].upper_bound_;
return true;
}
QString const& Bands::oob ()
{
return oob_name;
-2
View File
@@ -56,8 +56,6 @@ public:
//
QString find (Frequency) const; // find band Frequency is in
int find (QString const&) const; // find row of band (-1 if not valid)
bool findFreq(QString const& band, Radio::Frequency *pFreqLower, Radio::Frequency *pFreqHigher) const;
static QString const& oob ();
// Iterators
+13 -27
View File
@@ -2,15 +2,13 @@
# To pass variables to cpack from cmake, they must be configured
# in this file.
set (CPACK_SET_DESTDIR true)
set (CPACK_PACKAGE_VENDOR "@PROJECT_VENDOR@")
set (CPACK_PACKAGE_CONTACT "@PROJECT_CONTACT@")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@")
set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING")
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
set (CPACK_PACKAGE_EXECUTABLES ft8call "@PROJECT_NAME@")
set (CPACK_CREATE_DESKTOP_LINKS ft8call)
set (CPACK_PACKAGE_EXECUTABLES wsjtx "@PROJECT_NAME@")
set (CPACK_CREATE_DESKTOP_LINKS wsjtx)
set (CPACK_STRIP_FILES TRUE)
#
@@ -21,25 +19,14 @@ set (CPACK_STRIP_FILES TRUE)
#set (CPACK_COMPONENT_RUNTIME_DESCRIPTION "@WSJTX_DESCRIPTION_SUMMARY@")
if (CPACK_GENERATOR MATCHES "NSIS")
set (CPACK_SET_DESTDIR FALSE)
set (CPACK_STRIP_FILES FALSE) # breaks Qt packaging on Windows
# set (CPACK_NSIS_INSTALL_ROOT "C:\\FT8Call")
if(CMAKE_CL_64)
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
set(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} (Win64)")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} (Win64)")
else()
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
set(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
endif()
set (CPACK_NSIS_INSTALL_ROOT "C:\\WSJT")
# set the install/unistall icon used for the installer itself
# There is a bug in NSI that does not handle full unix paths properly.
set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\ft8call.ico")
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\ft8call.ico")
set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
# set the package header icon for MUI
set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\installer_logo.bmp")
# tell cpack to create links to the doc files
@@ -48,13 +35,13 @@ if (CPACK_GENERATOR MATCHES "NSIS")
"@PROJECT_HOMEPAGE@" "@PROJECT_NAME@ Web Site"
)
# Use the icon from wsjtx for add-remove programs
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\ft8call.exe")
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\wsjtx.exe")
set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set (CPACK_NSIS_HELP_LINK "@PROJECT_MANUAL_DIRECTORY_URL@/@PROJECT_MANUAL@")
set (CPACK_NSIS_URL_INFO_ABOUT "@PROJECT_HOMEPAGE@")
set (CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}")
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "ft8call.exe")
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "wsjtx.exe")
set (CPACK_NSIS_MODIFY_PATH ON)
endif ()
@@ -67,21 +54,20 @@ endif ()
if ("${CPACK_GENERATOR}" STREQUAL "DragNDrop")
set (CPACK_DMG_VOLUME_NAME "@PROJECT_NAME@")
set (CPACK_DMG_BACKGROUND_IMAGE "@PROJECT_SOURCE_DIR@/icons/Darwin/DragNDrop Background.png")
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/ft8call_DMG.DS_Store")
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/wsjtx_DMG.DS_Store")
set (CPACK_BUNDLE_NAME "@WSJTX_BUNDLE_NAME@")
set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/ft8call.icns")
set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/ft8call.icns")
set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-ft8call-startup.sh")
set (CPACK_PACKAGING_INSTALL_PREFIX "/")
set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/wsjtx.icns")
set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/wsjtx.icns")
set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-wsjtx-startup.sh")
endif ()
if ("${CPACK_GENERATOR}" STREQUAL "WIX")
# Reset CPACK_PACKAGE_VERSION to deal with WiX restriction.
# But the file names still use the full CMake_VERSION value:
set (CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-${CPACK_SYSTEM_NAME}")
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-${CPACK_SYSTEM_NAME}")
set (CPACK_SOURCE_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-Source")
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-Source")
if (NOT CPACK_WIX_SIZEOF_VOID_P)
set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
+34 -48
View File
@@ -22,7 +22,7 @@ Change this to the newest SDK available that you can install on your system (10.
Do not override this if you intend to build an official deployable installer.")
endif (APPLE)
project (ft8call C CXX Fortran)
project (wsjtx C CXX Fortran)
#
# CMake policies
@@ -45,10 +45,10 @@ message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}")
#
# project information
#
set (PROJECT_NAME "FT8Call")
set (PROJECT_VENDOR "Jordan Sherer, KN4CRD")
set (PROJECT_CONTACT "Jordan Sherer <kn4crd@gmail.com>")
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT, (C) 2018 by Jordan Sherer, KN4CRD")
set (PROJECT_NAME "WSJT-X")
set (PROJECT_VENDOR "Joe Taylor, K1JT")
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT")
set (PROJECT_HOMEPAGE http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html)
set (PROJECT_MANUAL wsjtx-main)
set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/)
@@ -303,11 +303,6 @@ set (wsjtx_CXXSRCS
astro.cpp
messageaveraging.cpp
WsprTxScheduler.cpp
varicode.cpp
SelfDestructMessageBox.cpp
messagereplydialog.cpp
keyeater.cpp
APRSISClient.cpp
mainwindow.cpp
Configuration.cpp
main.cpp
@@ -670,7 +665,6 @@ set (wsjtx_UISRCS
widegraph.ui
logqso.ui
Configuration.ui
messagereplydialog.ui
)
set (UDP_library_CXXSRCS
@@ -724,7 +718,7 @@ set (TOP_LEVEL_RESOURCES
mouse_commands.txt
prefixes.txt
cty.dat
icons/Darwin/FT8Call.iconset/icon_128x128.png
icons/Darwin/wsjtx.iconset/icon_128x128.png
contrib/gpl-v3-logo.svg
artwork/splash.png
)
@@ -824,7 +818,6 @@ endif (WIN32)
#
if (APPLE)
set (WSJTX_BUNDLE_VERSION ${wsjtx_VERSION})
set (CMAKE_INSTALL_PREFIX "/")
# make sure CMAKE_INSTALL_PREFIX ends in /
string (LENGTH "${CMAKE_INSTALL_PREFIX}" LEN)
@@ -1305,7 +1298,7 @@ else (${OPENMP_FOUND} OR APPLE)
endif (${OPENMP_FOUND} OR APPLE)
# build the main application
add_executable (ft8call MACOSX_BUNDLE
add_executable (wsjtx MACOSX_BUNDLE
${wsjtx_CXXSRCS}
${wsjtx_GENUISRCS}
wsjtx.rc
@@ -1314,10 +1307,10 @@ add_executable (ft8call MACOSX_BUNDLE
)
if (WSJT_CREATE_WINMAIN)
set_target_properties (ft8call PROPERTIES WIN32_EXECUTABLE ON)
set_target_properties (wsjtx PROPERTIES WIN32_EXECUTABLE ON)
endif (WSJT_CREATE_WINMAIN)
set_target_properties (ft8call PROPERTIES
set_target_properties (wsjtx PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Darwin/Info.plist.in"
MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
@@ -1330,27 +1323,27 @@ set_target_properties (ft8call PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx"
)
target_include_directories (ft8call PRIVATE ${FFTW3_INCLUDE_DIRS})
target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
if (APPLE)
target_link_libraries (ft8call wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
target_link_libraries (wsjtx wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
else ()
target_link_libraries (ft8call wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
target_link_libraries (wsjtx wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
if (OpenMP_C_FLAGS)
set_target_properties (ft8call PROPERTIES
set_target_properties (wsjtx PROPERTIES
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
LINK_FLAGS "${OpenMP_C_FLAGS}"
)
endif ()
set_target_properties (ft8call PROPERTIES
set_target_properties (wsjtx PROPERTIES
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
)
if (WIN32)
set_target_properties (ft8call PROPERTIES
set_target_properties (wsjtx PROPERTIES
LINK_FLAGS -Wl,--stack,16777216
)
endif ()
endif ()
qt5_use_modules (ft8call SerialPort) # not sure why the interface link library syntax above doesn't work
qt5_use_modules (wsjtx SerialPort) # not sure why the interface link library syntax above doesn't work
# make a library for WSJT-X UDP servers
# add_library (wsjtx_udp SHARED ${UDP_library_CXXSRCS})
@@ -1395,19 +1388,18 @@ endif (WSJT_CREATE_WINMAIN)
if (UNIX)
if (NOT WSJT_SKIP_MANPAGES)
add_subdirectory (manpages)
add_dependencies (ft8call manpages)
add_dependencies (wsjtx manpages)
endif (NOT WSJT_SKIP_MANPAGES)
if (NOT APPLE)
add_subdirectory (debian)
add_dependencies (ft8call debian)
add_dependencies (wsjtx debian)
endif (NOT APPLE)
endif (UNIX)
#
# installation
#
install (TARGETS ft8call
install (TARGETS wsjtx
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
BUNDLE DESTINATION . COMPONENT runtime
)
@@ -1484,6 +1476,7 @@ if (APPLE)
)
endif (APPLE)
#
# uninstall support
#
@@ -1496,15 +1489,15 @@ add_custom_target (uninstall
# creates or updates ${PROJECT_BINARY_DIR}/scs_version.h using cmake script
# add_custom_target (revisiontag
# COMMAND ${CMAKE_COMMAND}
# -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
# -D BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
# -D OUTPUT_DIR=${PROJECT_BINARY_DIR}
# -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/getsvn.cmake
# COMMENT "Generating Subversion revision information"
# VERBATIM
# )
add_custom_target (revisiontag
COMMAND ${CMAKE_COMMAND}
-D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-D BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
-D OUTPUT_DIR=${PROJECT_BINARY_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/getsvn.cmake
COMMENT "Generating Subversion revision information"
VERBATIM
)
# explicitly say that the wsjt_qt depends on custom target, this is
# done indirectly so that the revisiontag target gets built exactly
# once per build
@@ -1521,23 +1514,16 @@ configure_file (
if (NOT WIN32 AND NOT APPLE)
# install a desktop file so ft8call appears in the application start
# install a desktop file so wsjtx appears in the application start
# menu with an icon
install (
FILES ft8call.desktop
DESTINATION /usr/share/applications
FILES wsjtx.desktop message_aggregator.desktop
DESTINATION share/applications
#COMPONENT runtime
)
install (
FILES icons/Unix/ft8call_icon.png
DESTINATION /usr/share/pixmaps
#COMPONENT runtime
)
execute_process(COMMAND ln -s /opt/ft8call/bin/ft8call lft8call)
install(FILES
${CMAKE_BINARY_DIR}/lft8call DESTINATION /usr/bin/ RENAME ft8call
FILES icons/Unix/wsjtx_icon.png
DESTINATION share/pixmaps
#COMPONENT runtime
)
endif (NOT WIN32 AND NOT APPLE)
-1
View File
@@ -10,7 +10,6 @@ auto CallsignValidator::validate (QString& input, int& pos) const -> State
{
auto match = re_.match (input, 0, QRegularExpression::PartialPreferCompleteMatch);
input = input.toUpper ();
if (input.count(QLatin1Char('/')) > 1) return Invalid;
if (match.hasMatch ()) return Acceptable;
if (!input.size () || match.hasPartialMatch ()) return Intermediate;
pos = input.size ();
+136 -703
View File
File diff suppressed because it is too large Load Diff
+8 -47
View File
@@ -94,20 +94,10 @@ public:
bool restart_audio_input () const;
bool restart_audio_output () const;
bool use_dynamic_grid() const;
QString my_callsign () const;
QString my_grid () const;
QString my_station () const;
int activity_aging() const;
int callsign_aging() const;
QString my_qth () const;
QString cq_message () const;
QString reply_message () const;
QFont table_font() const;
QFont text_font () const;
QFont rx_text_font () const;
QFont tx_text_font () const;
QFont compose_text_font () const;
QFont decoded_text_font () const;
qint32 id_interval () const;
qint32 ntrials() const;
qint32 aggressive() const;
@@ -115,15 +105,11 @@ public:
double degrade() const;
double txDelay() const;
bool id_after_73 () const;
bool tx_qsy_allowed () const;
bool spot_to_reporting_networks () const;
void set_spot_to_reporting_networks (bool);
bool transmit_directed() const;
bool autoreply_off_at_startup () const;
bool relay_off() const;
bool tx_QSY_allowed () const;
bool spot_to_psk_reporter () const;
bool monitor_off_at_startup () const;
bool monitor_last_used () const;
bool log_as_DATA () const;
bool log_as_RTTY () const;
bool report_in_comments () const;
bool prompt_to_log () const;
bool insert_blank () const;
@@ -133,7 +119,6 @@ public:
bool miles () const;
bool quick_call () const;
bool disable_TX_on_73 () const;
int beacon () const;
int watchdog () const;
bool TX_messages () const;
bool split_mode () const;
@@ -153,9 +138,6 @@ public:
bool EMEonly() const;
bool post_decodes () const;
QString opCall() const;
QString aprs_server_name () const;
port_type aprs_server_port () const;
QString aprs_passcode () const;
QString udp_server_name () const;
port_type udp_server_port () const;
QString n1mm_server_name () const;
@@ -165,7 +147,6 @@ public:
bool accept_udp_requests () const;
bool udpWindowToFront () const;
bool udpWindowRestore () const;
bool udpEnabled () const;
Bands * bands ();
Bands const * bands () const;
IARURegions::Region region () const;
@@ -173,25 +154,15 @@ public:
FrequencyList_v2 const * frequencies () const;
StationList * stations ();
StationList const * stations () const;
bool auto_switch_bands() const;
QStringListModel * macros ();
QStringListModel const * macros () const;
QDir save_directory () const;
QDir azel_directory () const;
QString sound_dm_path() const;
QString sound_am_path() const;
QString rig_name () const;
Type2MsgGen type_2_msg_gen () const;
QColor color_table_background() const;
QColor color_table_highlight() const;
QColor color_table_foreground() const;
QColor color_CQ () const;
QColor color_MyCall () const;
QColor color_rx_background () const;
QColor color_rx_foreground () const;
QColor color_tx_foreground () const;
QColor color_compose_background () const;
QColor color_compose_foreground () const;
QColor color_TxMsg () const;
QColor color_DXCC () const;
QColor color_NewCall () const;
bool pwrBandTxMemory () const;
@@ -222,11 +193,7 @@ public:
void set_calibration (CalibrationParams);
// Set the dynamic grid which is only used if configuration setting is enabled.
void set_dynamic_location (QString const&);
// Set the dynamic statios message which is only used if configuration setting is enabled.
void set_dynamic_station_message(QString const& qtc);
void set_location (QString const&);
// This method queries if a CAT and PTT connection is operational.
bool is_transceiver_online () const;
@@ -284,12 +251,8 @@ public:
// These signals indicate a font has been selected and accepted for
// the application text and decoded text respectively.
//
Q_SIGNAL void gui_text_font_changed (QFont);
Q_SIGNAL void tx_text_font_changed (QFont);
Q_SIGNAL void rx_text_font_changed (QFont);
Q_SIGNAL void compose_text_font_changed (QFont);
Q_SIGNAL void table_font_changed (QFont);
Q_SIGNAL void colors_changed ();
Q_SIGNAL void text_font_changed (QFont);
Q_SIGNAL void decoded_text_font_changed (QFont);
//
// This signal is emitted when the UDP server changes
@@ -297,8 +260,6 @@ public:
Q_SIGNAL void udp_server_changed (QString const& udp_server);
Q_SIGNAL void udp_server_port_changed (port_type server_port);
// This signal is emitted when the band schedule changes
Q_SIGNAL void band_schedule_changed (StationList &stations);
//
// These signals are emitted and reflect transceiver state changes
+326 -1193
View File
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,7 @@
#!/bin/sh
WSJTX_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/.*//'`"
WSJTX_RESOURCES="$WSJTX_BUNDLE/Contents/Resources"
WSJTX_TEMP="/tmp/ft8call/$UID"
WSJTX_TEMP="/tmp/wsjtx/$UID"
echo "running $0"
echo "WSJTX_BUNDLE: $WSJTX_BUNDLE"
@@ -13,4 +13,4 @@ export "DYLD_LIBRARY_PATH=$WSJTX_RESOURCES/lib"
export "PATH=$WSJTX_RESOURCES/bin:$PATH"
#export
exec "$WSJTX_RESOURCES/bin/ft8call"
exec "$WSJTX_RESOURCES/bin/wsjtx"
-4
View File
@@ -1,7 +1,3 @@
Notes on FT8Call Installation for Mac OS X
(replace all instances of WSJT-X with FT8Call)
Notes on WSJT-X Installation for Mac OS X
-----------------------------------------
+151 -11
View File
@@ -26,16 +26,154 @@ namespace
{
FrequencyList_v2::FrequencyItems const default_frequency_list =
{
{ 1842000, Modes::FT8CALL, IARURegions::ALL}, // 2 above
{ 3578000, Modes::FT8CALL, IARURegions::ALL}, // 5 above
{ 7078000, Modes::FT8CALL, IARURegions::ALL}, // 4 above
{10130000, Modes::FT8CALL, IARURegions::ALL}, // 6 below
{14078000, Modes::FT8CALL, IARURegions::ALL}, // 4 above
{18104000, Modes::FT8CALL, IARURegions::ALL}, // 4 above
{21078000, Modes::FT8CALL, IARURegions::ALL}, // 4 above
{24922000, Modes::FT8CALL, IARURegions::ALL}, // 9 above
{28078000, Modes::FT8CALL, IARURegions::ALL}, // 4 above
{50318000, Modes::FT8CALL, IARURegions::ALL}, // 5 above
{198000, Modes::FreqCal, IARURegions::R1}, // BBC Radio 4 Droitwich
{4996000, Modes::FreqCal, IARURegions::R1}, // RWM time signal
{9996000, Modes::FreqCal, IARURegions::R1}, // RWM time signal
{14996000, Modes::FreqCal, IARURegions::R1}, // RWM time signal
{660000, Modes::FreqCal, IARURegions::R2},
{880000, Modes::FreqCal, IARURegions::R2},
{1210000, Modes::FreqCal, IARURegions::R2},
{2500000, Modes::FreqCal, IARURegions::ALL},
{3330000, Modes::FreqCal, IARURegions::ALL},
{5000000, Modes::FreqCal, IARURegions::ALL},
{7850000, Modes::FreqCal, IARURegions::ALL},
{10000000, Modes::FreqCal, IARURegions::ALL},
{14670000, Modes::FreqCal, IARURegions::ALL},
{15000000, Modes::FreqCal, IARURegions::ALL},
{20000000, Modes::FreqCal, IARURegions::ALL},
{136000, Modes::WSPR, IARURegions::ALL},
{136130, Modes::JT65, IARURegions::ALL},
{136130, Modes::JT9, IARURegions::ALL},
{474200, Modes::JT65, IARURegions::ALL},
{474200, Modes::JT9, IARURegions::ALL},
{474200, Modes::WSPR, IARURegions::ALL},
{1836600, Modes::WSPR, IARURegions::ALL},
{1838000, Modes::JT65, IARURegions::ALL}, // squeezed allocations
{1839000, Modes::JT9, IARURegions::ALL},
{1840000, Modes::FT8, IARURegions::ALL},
{3570000, Modes::JT65, IARURegions::ALL}, // JA compatible
{3572000, Modes::JT9, IARURegions::ALL},
{3573000, Modes::FT8, IARURegions::ALL}, // above as below JT65
// is out of DM allocation
{3568600, Modes::WSPR, IARURegions::ALL}, // needs guard marker
// and lock out
{7038600, Modes::WSPR, IARURegions::ALL},
{7074000, Modes::FT8, IARURegions::ALL},
{7076000, Modes::JT65, IARURegions::ALL},
{7078000, Modes::JT9, IARURegions::ALL},
{10136000, Modes::FT8, IARURegions::ALL},
{10138000, Modes::JT65, IARURegions::ALL},
{10138700, Modes::WSPR, IARURegions::ALL},
{10140000, Modes::JT9, IARURegions::ALL},
{14095600, Modes::WSPR, IARURegions::ALL},
{14074000, Modes::FT8, IARURegions::ALL},
{14076000, Modes::JT65, IARURegions::ALL},
{14078000, Modes::JT9, IARURegions::ALL},
{18100000, Modes::FT8, IARURegions::ALL},
{18102000, Modes::JT65, IARURegions::ALL},
{18104000, Modes::JT9, IARURegions::ALL},
{18104600, Modes::WSPR, IARURegions::ALL},
{21074000, Modes::FT8, IARURegions::ALL},
{21076000, Modes::JT65, IARURegions::ALL},
{21078000, Modes::JT9, IARURegions::ALL},
{21094600, Modes::WSPR, IARURegions::ALL},
{24915000, Modes::FT8, IARURegions::ALL},
{24917000, Modes::JT65, IARURegions::ALL},
{24919000, Modes::JT9, IARURegions::ALL},
{24924600, Modes::WSPR, IARURegions::ALL},
{28074000, Modes::FT8, IARURegions::ALL},
{28076000, Modes::JT65, IARURegions::ALL},
{28078000, Modes::JT9, IARURegions::ALL},
{28124600, Modes::WSPR, IARURegions::ALL},
{50200000, Modes::Echo, IARURegions::ALL},
{50276000, Modes::JT65, IARURegions::R2},
{50276000, Modes::JT65, IARURegions::R3},
{50260000, Modes::MSK144, IARURegions::R2},
{50260000, Modes::MSK144, IARURegions::R3},
{50293000, Modes::WSPR, IARURegions::R2},
{50293000, Modes::WSPR, IARURegions::R3},
{50310000, Modes::JT65, IARURegions::ALL},
{50312000, Modes::JT9, IARURegions::ALL},
{50313000, Modes::FT8, IARURegions::ALL},
{50360000, Modes::MSK144, IARURegions::R1},
{70100000, Modes::FT8, IARURegions::R1},
{70102000, Modes::JT65, IARURegions::R1},
{70104000, Modes::JT9, IARURegions::R1},
{70091000, Modes::WSPR, IARURegions::R1},
{70230000, Modes::MSK144, IARURegions::R1},
{144120000, Modes::JT65, IARURegions::ALL},
{144120000, Modes::Echo, IARURegions::ALL},
{144360000, Modes::MSK144, IARURegions::R1},
{144150000, Modes::MSK144, IARURegions::R2},
{144489000, Modes::WSPR, IARURegions::ALL},
{144120000, Modes::QRA64, IARURegions::ALL},
{222065000, Modes::Echo, IARURegions::R2},
{222065000, Modes::JT65, IARURegions::R2},
{222065000, Modes::QRA64, IARURegions::R2},
{432065000, Modes::Echo, IARURegions::ALL},
{432065000, Modes::JT65, IARURegions::ALL},
{432300000, Modes::WSPR, IARURegions::ALL},
{432360000, Modes::MSK144, IARURegions::ALL},
{432065000, Modes::QRA64, IARURegions::ALL},
{902065000, Modes::JT65, IARURegions::R2},
{902065000, Modes::QRA64, IARURegions::R2},
{1296065000, Modes::Echo, IARURegions::ALL},
{1296065000, Modes::JT65, IARURegions::ALL},
{1296500000, Modes::WSPR, IARURegions::ALL},
{1296065000, Modes::QRA64, IARURegions::ALL},
{2301000000, Modes::Echo, IARURegions::ALL},
{2301065000, Modes::JT4, IARURegions::ALL},
{2301065000, Modes::JT65, IARURegions::ALL},
{2301065000, Modes::QRA64, IARURegions::ALL},
{2304065000, Modes::Echo, IARURegions::ALL},
{2304065000, Modes::JT4, IARURegions::ALL},
{2304065000, Modes::JT65, IARURegions::ALL},
{2304065000, Modes::QRA64, IARURegions::ALL},
{2320065000, Modes::Echo, IARURegions::ALL},
{2320065000, Modes::JT4, IARURegions::ALL},
{2320065000, Modes::JT65, IARURegions::ALL},
{2320065000, Modes::QRA64, IARURegions::ALL},
{3400065000, Modes::Echo, IARURegions::ALL},
{3400065000, Modes::JT4, IARURegions::ALL},
{3400065000, Modes::JT65, IARURegions::ALL},
{3400065000, Modes::QRA64, IARURegions::ALL},
{5760065000, Modes::Echo, IARURegions::ALL},
{5760065000, Modes::JT4, IARURegions::ALL},
{5760065000, Modes::JT65, IARURegions::ALL},
{5760200000, Modes::QRA64, IARURegions::ALL},
{10368100000, Modes::Echo, IARURegions::ALL},
{10368200000, Modes::JT4, IARURegions::ALL},
{10368200000, Modes::QRA64, IARURegions::ALL},
{24048100000, Modes::Echo, IARURegions::ALL},
{24048200000, Modes::JT4, IARURegions::ALL},
{24048200000, Modes::QRA64, IARURegions::ALL},
};
}
@@ -257,7 +395,9 @@ bool FrequencyList_v2::filterAcceptsRow (int source_row, QModelIndex const& /* p
}
if (result && m_->mode_filter_ != Modes::ALL)
{
result = Modes::ALL == item.mode_ || m_->mode_filter_ == item.mode_;
// we pass ALL mode rows unless filtering for FreqCal mode
result = (Modes::ALL == item.mode_ && m_->mode_filter_ != Modes::FreqCal)
|| m_->mode_filter_ == item.mode_;
}
return result;
}
+1 -1
View File
@@ -11,7 +11,7 @@ class MaidenheadLocatorValidator final
: public QValidator
{
public:
enum class Length {field = 2, square = 4, subsquare = 6, extended = 8, doubleextended = 16};
enum class Length {field = 2, square = 4, subsquare = 6, extended = 8};
MaidenheadLocatorValidator (QObject * parent = nullptr
, Length length = Length::subsquare
, Length required = Length::square);
+205 -87
View File
@@ -4,7 +4,6 @@
#include <vector>
#include <algorithm>
#include <QApplication>
#include <QUdpSocket>
#include <QHostInfo>
#include <QTimer>
@@ -13,70 +12,16 @@
#include <QHostAddress>
#include <QColor>
#include "NetworkMessage.hpp"
#include "pimpl_impl.hpp"
#include "moc_MessageClient.cpp"
Message::Message()
{
}
Message::Message(QString const &type, QString const &value):
type_{ type },
value_{ value }
{
}
Message::Message(QString const &type, QString const &value, QMap<QString, QVariant> const &params):
type_{ type },
value_{ value },
params_{ params }
{
}
void Message::read(const QJsonObject &json){
if(json.contains("type") && json["type"].isString()){
type_ = json["type"].toString();
}
if(json.contains("value") && json["value"].isString()){
value_ = json["value"].toString();
}
if(json.contains("params") && json["params"].isObject()){
params_.clear();
QJsonObject params = json["params"].toObject();
foreach(auto key, params.keys()){
params_[key] = params[key].toVariant();
}
}
}
void Message::write(QJsonObject &json) const{
json["type"] = type_;
json["value"] = value_;
QJsonObject params;
foreach(auto key, params_.keys()){
params.insert(key, QJsonValue::fromVariant(params_[key]));
}
json["params"] = params;
}
QByteArray Message::toJson() const {
QJsonObject o;
write(o);
QJsonDocument d(o);
return d.toJson();
}
class MessageClient::impl
: public QUdpSocket
{
Q_OBJECT
Q_OBJECT;
public:
impl (QString const& id, QString const& version, QString const& revision,
@@ -92,7 +37,7 @@ public:
connect (heartbeat_timer_, &QTimer::timeout, this, &impl::heartbeat);
connect (this, &QIODevice::readyRead, this, &impl::pending_datagrams);
heartbeat_timer_->start (15 * 1000);
heartbeat_timer_->start (NetworkMessage::pulse * 1000);
// bind to an ephemeral port
bind ();
@@ -141,7 +86,6 @@ public:
QByteArray last_message_;
};
#include "MessageClient.moc"
void MessageClient::impl::host_info_results (QHostInfo host_info)
@@ -194,26 +138,111 @@ void MessageClient::impl::parse_message (QByteArray const& msg)
{
try
{
if(msg.isEmpty()){
return;
//
// message format is described in NetworkMessage.hpp
//
NetworkMessage::Reader in {msg};
if (OK == check_status (in) && id_ == in.id ()) // OK and for us
{
if (schema_ < in.schema ()) // one time record of server's
// negotiated schema
{
schema_ = in.schema ();
}
QJsonParseError e;
QJsonDocument d = QJsonDocument::fromJson(msg, &e);
if(e.error != QJsonParseError::NoError){
Q_EMIT self_->error(QString {"MessageClient json parse error: %1"}.arg(e.errorString()));
return;
//
// message format is described in NetworkMessage.hpp
//
switch (in.type ())
{
case NetworkMessage::Reply:
{
// unpack message
QTime time;
qint32 snr;
float delta_time;
quint32 delta_frequency;
QByteArray mode;
QByteArray message;
bool low_confidence {false};
quint8 modifiers {0};
in >> time >> snr >> delta_time >> delta_frequency >> mode >> message
>> low_confidence >> modifiers;
if (check_status (in) != Fail)
{
Q_EMIT self_->reply (time, snr, delta_time, delta_frequency
, QString::fromUtf8 (mode), QString::fromUtf8 (message)
, low_confidence, modifiers);
}
if(!d.isObject()){
Q_EMIT self_->error(QString {"MessageClient json parse error: json is not an object"});
return;
}
break;
Message m;
m.read(d.object());
Q_EMIT self_->message(m);
case NetworkMessage::Replay:
if (check_status (in) != Fail)
{
last_message_.clear ();
Q_EMIT self_->replay ();
}
break;
case NetworkMessage::HaltTx:
{
bool auto_only {false};
in >> auto_only;
if (check_status (in) != Fail)
{
Q_EMIT self_->halt_tx (auto_only);
}
}
break;
case NetworkMessage::FreeText:
{
QByteArray message;
bool send {true};
in >> message >> send;
if (check_status (in) != Fail)
{
Q_EMIT self_->free_text (QString::fromUtf8 (message), send);
}
}
break;
case NetworkMessage::Location:
{
QByteArray location;
in >> location;
if (check_status (in) != Fail)
{
Q_EMIT self_->location (QString::fromUtf8 (location));
}
}
break;
case NetworkMessage::HighlightCallsign:
{
QByteArray call;
QColor bg; // default invalid color
QColor fg; // default invalid color
bool last_only {false};
in >> call >> bg >> fg >> last_only;
if (check_status (in) != Fail && call.size ())
{
Q_EMIT self_->highlight_callsign (QString::fromUtf8 (call), bg, fg, last_only);
}
}
break;
default:
// Ignore
//
// Note that although server heartbeat messages are not
// parsed here they are still partially parsed in the
// message reader class to negotiate the maximum schema
// number being used on the network.
break;
}
}
}
catch (std::exception const& e)
{
@@ -229,12 +258,14 @@ void MessageClient::impl::heartbeat ()
{
if (server_port_ && !server_.isNull ())
{
Message m("PING", "", QMap<QString, QVariant>{
{"NAME", QVariant(QApplication::applicationName())},
{"VERSION", QVariant(QApplication::applicationVersion())},
{"UTC", QVariant(QDateTime::currentDateTimeUtc().toMSecsSinceEpoch())}
});
writeDatagram (m.toJson(), server_, server_port_);
QByteArray message;
NetworkMessage::Builder hb {&message, NetworkMessage::Heartbeat, id_, schema_};
hb << NetworkMessage::Builder::schema_number // maximum schema number accepted
<< version_.toUtf8 () << revision_.toUtf8 ();
if (OK == check_status (hb))
{
writeDatagram (message, server_, server_port_);
}
}
}
@@ -242,8 +273,12 @@ void MessageClient::impl::closedown ()
{
if (server_port_ && !server_.isNull ())
{
Message m("CLOSE");
writeDatagram (m.toJson(), server_, server_port_);
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::Close, id_, schema_};
if (OK == check_status (out))
{
writeDatagram (message, server_, server_port_);
}
}
}
@@ -329,7 +364,6 @@ auto MessageClient::server_port () const -> port_type
void MessageClient::set_server (QString const& server)
{
qDebug() << "server changed to" << server;
m_->server_.clear ();
m_->server_string_ = server;
if (!server.isEmpty ())
@@ -344,10 +378,6 @@ void MessageClient::set_server_port (port_type server_port)
m_->server_port_ = server_port;
}
void MessageClient::send(Message const &message){
m_->send_message(message.toJson());
}
void MessageClient::send_raw_datagram (QByteArray const& message, QHostAddress const& dest_address
, port_type dest_port)
{
@@ -367,3 +397,91 @@ void MessageClient::add_blocked_destination (QHostAddress const& a)
m_->pending_messages_.clear (); // discard
}
}
void MessageClient::status_update (Frequency f, QString const& mode, QString const& dx_call
, QString const& report, QString const& tx_mode
, bool tx_enabled, bool transmitting, bool decoding
, qint32 rx_df, qint32 tx_df, QString const& de_call
, QString const& de_grid, QString const& dx_grid
, bool watchdog_timeout, QString const& sub_mode
, bool fast_mode)
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::Status, m_->id_, m_->schema_};
out << f << mode.toUtf8 () << dx_call.toUtf8 () << report.toUtf8 () << tx_mode.toUtf8 ()
<< tx_enabled << transmitting << decoding << rx_df << tx_df << de_call.toUtf8 ()
<< de_grid.toUtf8 () << dx_grid.toUtf8 () << watchdog_timeout << sub_mode.toUtf8 ()
<< fast_mode;
m_->send_message (out, message);
}
}
void MessageClient::decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency
, QString const& mode, QString const& message_text, bool low_confidence
, bool off_air)
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::Decode, m_->id_, m_->schema_};
out << is_new << time << snr << delta_time << delta_frequency << mode.toUtf8 ()
<< message_text.toUtf8 () << low_confidence << off_air;
m_->send_message (out, message);
}
}
void MessageClient::WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency frequency
, qint32 drift, QString const& callsign, QString const& grid, qint32 power
, bool off_air)
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::WSPRDecode, m_->id_, m_->schema_};
out << is_new << time << snr << delta_time << frequency << drift << callsign.toUtf8 ()
<< grid.toUtf8 () << power << off_air;
m_->send_message (out, message);
}
}
void MessageClient::clear_decodes ()
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::Clear, m_->id_, m_->schema_};
m_->send_message (out, message);
}
}
void MessageClient::qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid
, Frequency dial_frequency, QString const& mode, QString const& report_sent
, QString const& report_received, QString const& tx_power
, QString const& comments, QString const& name, QDateTime time_on
, QString const& operator_call, QString const& my_call
, QString const& my_grid)
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::QSOLogged, m_->id_, m_->schema_};
out << time_off << dx_call.toUtf8 () << dx_grid.toUtf8 () << dial_frequency << mode.toUtf8 ()
<< report_sent.toUtf8 () << report_received.toUtf8 () << tx_power.toUtf8 () << comments.toUtf8 ()
<< name.toUtf8 () << time_on << operator_call.toUtf8 () << my_call.toUtf8 () << my_grid.toUtf8 ();
m_->send_message (out, message);
}
}
void MessageClient::logged_ADIF (QByteArray const& ADIF_record)
{
if (m_->server_port_ && !m_->server_string_.isEmpty ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::LoggedADIF, m_->id_, m_->schema_};
QByteArray ADIF {"\n<adif_ver:5>3.0.7\n<programid:6>WSJT-X\n<EOH>\n" + ADIF_record + " <EOR>"};
out << ADIF;
m_->send_message (out, message);
}
}
+47 -32
View File
@@ -3,11 +3,8 @@
#include <QObject>
#include <QTime>
#include <QDataStream>
#include <QDateTime>
#include <QString>
#include <QJsonDocument>
#include <QJsonObject>
#include "Radio.hpp"
#include "pimpl_h.hpp"
@@ -16,29 +13,6 @@ class QByteArray;
class QHostAddress;
class QColor;
class Message {
public:
Message();
Message(QString const &type, QString const &value="");
Message(QString const &type, QString const &value, QMap<QString, QVariant> const &params);
void read(const QJsonObject &json);
void write(QJsonObject &json) const;
QByteArray toJson() const;
QString type() const { return type_; }
QString value() const { return value_; }
QMap<QString, QVariant> params() const { return params_; }
private:
QString type_;
QString value_;
QMap<QString, QVariant> params_;
};
//
// MessageClient - Manage messages sent and replies received from a
// matching server (MessageServer) at the other end of
@@ -50,7 +24,7 @@ private:
class MessageClient
: public QObject
{
Q_OBJECT
Q_OBJECT;
public:
using Frequency = Radio::Frequency;
@@ -73,8 +47,28 @@ public:
// change the server port messages are sent to
Q_SLOT void set_server_port (port_type server_port = 0u);
// this slot is used to send an arbitrary message
Q_SLOT void send(Message const &message);
// outgoing messages
Q_SLOT void status_update (Frequency, QString const& mode, QString const& dx_call, QString const& report
, QString const& tx_mode, bool tx_enabled, bool transmitting, bool decoding
, qint32 rx_df, qint32 tx_df, QString const& de_call, QString const& de_grid
, QString const& dx_grid, bool watchdog_timeout, QString const& sub_mode
, bool fast_mode);
Q_SLOT void decode (bool is_new, QTime time, qint32 snr, float delta_time, quint32 delta_frequency
, QString const& mode, QString const& message, bool low_confidence
, bool off_air);
Q_SLOT void WSPR_decode (bool is_new, QTime time, qint32 snr, float delta_time, Frequency
, qint32 drift, QString const& callsign, QString const& grid, qint32 power
, bool off_air);
Q_SLOT void clear_decodes ();
Q_SLOT void qso_logged (QDateTime time_off, QString const& dx_call, QString const& dx_grid
, Frequency dial_frequency, QString const& mode, QString const& report_sent
, QString const& report_received, QString const& tx_power, QString const& comments
, QString const& name, QDateTime time_on, QString const& operator_call
, QString const& my_call, QString const& my_grid);
// ADIF_record argument should be valid ADIF excluding any <EOR> end
// of record marker
Q_SLOT void logged_ADIF (QByteArray const& ADIF_record);
// this slot may be used to send arbitrary UDP datagrams to and
// destination allowing the underlying socket to be used for general
@@ -85,15 +79,36 @@ public:
// with send_raw_datagram() above)
Q_SLOT void add_blocked_destination (QHostAddress const&);
Q_SIGNAL void message(Message const &message);
// this signal is emitted if the server sends us a reply, the only
// reply supported is reply to a prior CQ or QRZ message
Q_SIGNAL void reply (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode
, QString const& message_text, bool low_confidence, quint8 modifiers);
// this signal is emitted when the a reply a message is received
Q_SIGNAL void message_received(QString const &type, QString const &message);
// this signal is emitted if the server has requested a replay of
// all decodes
Q_SIGNAL void replay ();
// this signal is emitted if the server has requested immediate (or
// auto Tx if auto_only is true) transmission to halt
Q_SIGNAL void halt_tx (bool auto_only);
// this signal is emitted if the server has requested a new free
// message text
Q_SIGNAL void free_text (QString const&, bool send);
// this signal is emitted if the server has sent a highlight
// callsign request for the specified call
Q_SIGNAL void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only);
// this signal is emitted when network errors occur or if a host
// lookup fails
Q_SIGNAL void error (QString const&) const;
// this signal is emitted if the message obtains a location from a
// server. (It doesn't have to be new, could be a periodic location
// update)
Q_SIGNAL void location (QString const&);
private:
class impl;
pimpl<impl> m_;
+10 -1
View File
@@ -14,7 +14,16 @@ namespace
char const * const mode_names[] =
{
"All",
"FT8CALL",
"JT65",
"JT9",
"JT4",
"WSPR",
"Echo",
"ISCAT",
"MSK144",
"QRA64",
"FreqCal",
"FT8"
};
std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]);
}
+10 -1
View File
@@ -40,7 +40,16 @@ public:
enum Mode
{
ALL, // matches with all modes
FT8CALL,
JT65,
JT9,
JT4,
WSPR,
Echo,
ISCAT,
MSK144,
QRA64,
FreqCal,
FT8,
MODES_END_SENTINAL_AND_COUNT // this must be last
};
Q_ENUM (Mode)
-40
View File
@@ -1,40 +0,0 @@
#include "SelfDestructMessageBox.h"
SelfDestructMessageBox::SelfDestructMessageBox(
int timeout,
const QString& title,
const QString& text,
QMessageBox::Icon icon,
QMessageBox::StandardButtons buttons,
QMessageBox::StandardButton defaultButton,
QWidget* parent,
Qt::WindowFlags flags)
: QMessageBox(icon, title, text, buttons, parent, flags),
m_timeout(timeout),
m_text(text)
{
connect(&m_timer, &QTimer::timeout, this, &SelfDestructMessageBox::tick);
m_timer.setInterval(1000);
setDefaultButton(defaultButton);
connect(this->defaultButton(), &QPushButton::clicked, this, &SelfDestructMessageBox::accept);
}
void SelfDestructMessageBox::showEvent(QShowEvent* event)
{
tick();
m_timer.start();
QMessageBox::showEvent(event);
}
void SelfDestructMessageBox::tick(){
m_timeout--;
if(m_timeout){
setText(m_text.arg(m_timeout));
return;
}
m_timer.stop();
accept();
}
-35
View File
@@ -1,35 +0,0 @@
#ifndef SELFDESTRUCTMESSAGEBOX_H
#define SELFDESTRUCTMESSAGEBOX_H
#include <QWidget>
#include <QMessageBox>
#include <QPushButton>
#include <QString>
#include <QTimer>
class SelfDestructMessageBox : public QMessageBox
{
Q_OBJECT
public:
SelfDestructMessageBox(int timeout,
const QString& title,
const QString& text,
QMessageBox::Icon icon,
QMessageBox::StandardButtons buttons = QMessageBox::Ok | QMessageBox::Cancel,
QMessageBox::StandardButton defaultButton = QMessageBox::Ok,
QWidget* parent = nullptr,
Qt::WindowFlags flags = 0);
void showEvent(QShowEvent* event) override;
private slots:
void tick();
private:
int m_timeout;
QString m_text;
QTimer m_timer;
};
#endif // SELFDESTRUCTMESSAGEBOX_H
+31 -135
View File
@@ -28,10 +28,8 @@ QDebug operator << (QDebug debug, StationList::Station const& station)
QDebugStateSaver saver {debug};
debug.nospace () << "Station("
<< station.band_name_ << ", "
<< station.frequency_ << ", "
<< station.switch_at_ << ", "
<< station.switch_until_ << ", "
<< station.description_ << ')';
<< station.offset_ << ", "
<< station.antenna_description_ << ')';
return debug;
}
#endif
@@ -39,19 +37,15 @@ QDebug operator << (QDebug debug, StationList::Station const& station)
QDataStream& operator << (QDataStream& os, StationList::Station const& station)
{
return os << station.band_name_
<< station.frequency_
<< station.switch_at_
<< station.switch_until_
<< station.description_;
<< station.offset_
<< station.antenna_description_;
}
QDataStream& operator >> (QDataStream& is, StationList::Station& station)
{
return is >> station.band_name_
>> station.frequency_
>> station.switch_at_
>> station.switch_until_
>> station.description_;
>> station.offset_
>> station.antenna_description_;
}
@@ -96,7 +90,7 @@ public:
return matches.isEmpty () ? QModelIndex {} : matches.first ();
}
static int constexpr num_columns {5};
static int constexpr num_columns {3};
static auto constexpr mime_type = "application/wsjt.antenna-descriptions";
Bands const * bands_;
@@ -178,6 +172,12 @@ bool StationList::removeDisjointRows (QModelIndexList rows)
return result;
}
auto StationList::offset (Frequency f) const -> FrequencyDelta
{
return m_->offset (f);
}
auto StationList::impl::station_list (Stations stations) -> Stations
{
beginResetModel ();
@@ -203,7 +203,6 @@ QModelIndex StationList::impl::add (Station s)
return QModelIndex {};
}
#if 0
auto StationList::impl::offset (Frequency f) const -> FrequencyDelta
{
// Lookup band for frequency
@@ -215,13 +214,12 @@ auto StationList::impl::offset (Frequency f) const -> FrequencyDelta
{
if (stations_[i].band_name_ == band)
{
return stations_[i].frequency_;
return stations_[i].offset_;
}
}
}
return 0; // no offset
}
#endif
int StationList::impl::rowCount (QModelIndex const& parent) const
{
@@ -244,10 +242,7 @@ Qt::ItemFlags StationList::impl::flags (QModelIndex const& index) const
&& row < stations_.size ()
&& column < num_columns)
{
if (band_column == column){
result |= Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
} else if (description_column == column)
if (description_column == column)
{
result |= Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
}
@@ -300,14 +295,14 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
break;
case Qt::TextAlignmentRole:
item = (int)Qt::AlignHCenter | Qt::AlignVCenter;
item = Qt::AlignHCenter + Qt::AlignVCenter;
break;
}
break;
case frequency_column:
case offset_column:
{
auto frequency_offset = stations_.at (row).frequency_;
auto frequency_offset = stations_.at (row).offset_;
switch (role)
{
case SortRole:
@@ -322,58 +317,16 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
case Qt::ToolTipRole:
case Qt::AccessibleDescriptionRole:
item = tr ("Frequency");
item = tr ("Frequency offset");
break;
case Qt::TextAlignmentRole:
item = (int)Qt::AlignRight | Qt::AlignVCenter;
item = Qt::AlignRight + Qt::AlignVCenter;
break;
}
}
break;
case switch_at_column:
switch (role)
{
case SortRole:
case Qt::EditRole:
case Qt::DisplayRole:
case Qt::AccessibleTextRole:
item = stations_.at (row).switch_at_.time().toString("hh:mm");
break;
case Qt::ToolTipRole:
case Qt::AccessibleDescriptionRole:
item = tr ("Switch at this time");
break;
case Qt::TextAlignmentRole:
item = (int)Qt::AlignHCenter | Qt::AlignVCenter;
break;
}
break;
case switch_until_column:
switch (role)
{
case SortRole:
case Qt::EditRole:
case Qt::DisplayRole:
case Qt::AccessibleTextRole:
item = stations_.at (row).switch_until_.time().toString("hh:mm");
break;
case Qt::ToolTipRole:
case Qt::AccessibleDescriptionRole:
item = tr ("Switch until this time");
break;
case Qt::TextAlignmentRole:
item = (int)Qt::AlignHCenter | Qt::AlignVCenter;
break;
}
break;
case description_column:
switch (role)
{
@@ -381,7 +334,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
case Qt::EditRole:
case Qt::DisplayRole:
case Qt::AccessibleTextRole:
item = stations_.at (row).description_;
item = stations_.at (row).antenna_description_;
break;
case Qt::ToolTipRole:
@@ -390,7 +343,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
break;
case Qt::TextAlignmentRole:
item = (int)Qt::AlignLeft | Qt::AlignVCenter;
item = Qt::AlignLeft + Qt::AlignVCenter;
break;
}
break;
@@ -409,10 +362,8 @@ QVariant StationList::impl::headerData (int section, Qt::Orientation orientation
switch (section)
{
case band_column: header = tr ("Band"); break;
case frequency_column: header = tr ("Freq. (MHz)"); break;
case switch_at_column: header = tr ("Switch at (UTC)"); break;
case switch_until_column: header = tr ("Until (UTC)"); break;
case description_column: header = tr ("Description"); break;
case offset_column: header = tr ("Offset"); break;
case description_column: header = tr ("Antenna Description"); break;
}
}
else
@@ -451,78 +402,23 @@ bool StationList::impl::setData (QModelIndex const& model_index, QVariant const&
}
break;
case frequency_column:
case offset_column:
{
if (value.canConvert<Frequency> ())
if (value.canConvert<FrequencyDelta> ())
{
Frequency offset {qvariant_cast<Radio::Frequency> (value)};
if(offset == 0){
Frequency l;
Frequency h;
if(bands_->findFreq(stations_[row].band_name_, &l, &h)){
offset = l;
}
}
if (offset != stations_[row].frequency_)
FrequencyDelta offset {qvariant_cast<Radio::FrequencyDelta> (value)};
if (offset != stations_[row].offset_)
{
stations_[row].frequency_ = offset;
stations_[row].offset_ = offset;
Q_EMIT dataChanged (model_index, model_index, roles);
auto band = bands_->find(offset);
if(band != stations_[row].band_name_){
stations_[row].band_name_ = band;
auto band_index = model_index.model()->index(row, band_column, model_index);
Q_EMIT dataChanged (band_index, band_index, roles);
}
changed = true;
}
}
}
break;
case switch_at_column:
{
QString s = value.toString();
if(s.length() < 5){
s = QString("0").repeated(5-s.length()) + s;
}
auto t = QTime::fromString(s);
auto at = QDateTime(QDate(2000,1,1), t, Qt::UTC);
auto until = stations_[row].switch_until_;
stations_[row].switch_at_ = at;
stations_[row].switch_until_ = until;
Q_EMIT dataChanged (model_index, model_index, roles);
auto switch_until_index = model_index.model()->index(row, switch_until_column, model_index);
Q_EMIT dataChanged (switch_until_index, switch_until_index, roles);
changed = true;
break;
}
case switch_until_column:
{
QString s = value.toString();
if(s.length() < 5){
s = QString("0").repeated(5-s.length()) + s;
}
auto t = QTime::fromString(s);
auto until = QDateTime(QDate(2000,1,1), t, Qt::UTC);
auto at = stations_[row].switch_at_;
stations_[row].switch_at_ = at;
stations_[row].switch_until_ = until;
Q_EMIT dataChanged (model_index, model_index, roles);
auto switch_at_index = model_index.model()->index(row, switch_at_column, model_index);
Q_EMIT dataChanged (switch_at_index, switch_at_index, roles);
changed = true;
break;
}
case description_column:
stations_[row].description_ = value.toString ();
stations_[row].antenna_description_ = value.toString ();
Q_EMIT dataChanged (model_index, model_index, roles);
changed = true;
break;
@@ -631,7 +527,7 @@ bool StationList::impl::dropMimeData (QMimeData const * data, Qt::DropAction act
, [&band] (Station const& s) {return s.band_name_ == band;}))
{
// not found so add it
add (Station {band, 0, QDateTime::currentDateTimeUtc(), QDateTime::currentDateTimeUtc(), QString {}});
add (Station {band, 0, QString {}});
}
}
return true;
+7 -11
View File
@@ -2,7 +2,6 @@
#define STATION_LIST_HPP__
#include <QSortFilterProxyModel>
#include <QDateTime>
#include <QString>
#include <QList>
@@ -53,15 +52,13 @@ public:
struct Station
{
QString band_name_;
Frequency frequency_;
QDateTime switch_at_;
QDateTime switch_until_;
QString description_;
FrequencyDelta offset_;
QString antenna_description_;
};
using Stations = QList<Station>;
enum Column {band_column, frequency_column, switch_at_column, switch_until_column, description_column};
enum Column {band_column, offset_column, description_column};
explicit StationList (Bands const * bands, QObject * parent = nullptr);
explicit StationList (Bands const * bands, Stations, QObject * parent = nullptr);
@@ -77,6 +74,7 @@ public:
QModelIndex add (Station); // Add a new Station
bool remove (Station); // Remove a Station
bool removeDisjointRows (QModelIndexList); // Remove one or more stations
FrequencyDelta offset (Frequency) const; // Return the offset to be used for a Frequency
// Custom sort role.
static int constexpr SortRole = Qt::UserRole;
@@ -90,11 +88,9 @@ private:
inline
bool operator == (StationList::Station const& lhs, StationList::Station const& rhs)
{
return lhs.band_name_ == rhs.band_name_ &&
lhs.description_ == rhs.description_ &&
lhs.frequency_ == rhs.frequency_ &&
lhs.switch_at_ == rhs.switch_at_ &&
lhs.switch_until_ == rhs.switch_until_;
return lhs.band_name_ == rhs.band_name_
&& lhs.offset_ == rhs.offset_
&& lhs.antenna_description_ == rhs.antenna_description_;
}
QDataStream& operator << (QDataStream&, StationList::Station const&);
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
+3 -3
View File
@@ -1,6 +1,6 @@
# Version number components
set (WSJTX_VERSION_MAJOR 0)
set (WSJTX_VERSION_MINOR 6)
set (WSJTX_VERSION_PATCH 4)
set (WSJTX_VERSION_MAJOR 1)
set (WSJTX_VERSION_MINOR 10)
set (WSJTX_VERSION_PATCH 0)
set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
-2
View File
@@ -269,14 +269,12 @@ bool WSPRBandHopping::impl::simple_scheduler ()
WSPRBandHopping::WSPRBandHopping (QSettings * settings, Configuration const * configuration, QWidget * parent_widget)
: m_ {settings, configuration, parent_widget}
{
#if INCLUDE_ALL_MODES
// detect changes to the working frequencies model
m_->WSPR_bands_ = m_->configuration_->frequencies ()->all_bands (m_->configuration_->region (), Modes::WSPR).toList ();
connect (m_->configuration_->frequencies (), &QAbstractItemModel::layoutChanged
, [this] () {
m_->WSPR_bands_ = m_->configuration_->frequencies ()->all_bands (m_->configuration_->region (), Modes::WSPR).toList ();
});
#endif
// load settings
SettingsGroup g {m_->settings_, title};
+15 -27
View File
@@ -13,35 +13,23 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
{
ui->setupUi(this);
ui->labelTxt->setText ("<h2>" + QString {"FT8Call v"
ui->labelTxt->setText ("<h2>" + QString {"WSJT-X v"
+ QCoreApplication::applicationVersion ()
+ " " + revision ()}.simplified () + "</h2><br />"
"FT8Call is a derivative of the WSJT-X application, "
"restructured and redesigned for message passing. <br/>"
"It is not supported by nor endorsed by the WSJT-X "
"development group. <br/>FT8Call is "
"licensed under and in accordance with the terms "
"of the <a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">GPLv3 license</a>.<br/>"
"The source code modifications are public and can be found in <a href=\"https://bitbucket.org/widefido/wsjtx/\">this repository</a>.<br/><br/>"
"FT8Call is heavily inspired by WSJT-X, Fldigi, "
"and FSQCall <br/>and would not exist without the hard work and "
"dedication of the many <br/>developers in the amateur radio "
"community.<br /><br />"
"FT8Call stands on the shoulder of giants...the takeoff angle "
"is better up there.<br /><br />"
"A special thanks goes out to the FT8Call development team:<br/><br/><strong>"
"KC9QNE, "
"KI6SSI, "
"LB9YH, "
"M0IAX, "
"N0JDS, "
"OH8STN, "
"VA3OSO, "
"VK1MIC, "
"W0FW,</strong><br/><br/>and the many other amateur radio operators who have given "
"FT8Call a chance.");
"WSJT-X implements a number of digital modes designed for <br />"
"weak-signal Amateur Radio communication. <br /><br />"
"&copy; 2001-2018 by Joe Taylor, K1JT, with grateful <br />"
"acknowledgment for contributions from AC6SL, AE4JY, <br />"
"DJ0OT, G3WDG, G4KLA, G4WJS, IV3NWV, IW3RAB, K3WYC, K9AN, <br />"
"KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, <br />"
"VE1SKY, VK3ACF, VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
"WSJT-X is licensed under the terms of Version 3 <br />"
"of the GNU General Public License (GPL) <br />"
"<a href=" WSJTX_STRINGIZE (PROJECT_HOMEPAGE) ">"
"<img src=\":/icon_128x128.png\" /></a>"
"<a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">"
"<img src=\":/gpl-v3-logo.svg\" height=\"80\" /><br />"
"https://www.gnu.org/licenses/gpl-3.0.txt</a>");
}
CAboutDlg::~CAboutDlg()
+1 -9
View File
@@ -5,16 +5,8 @@
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>192</width>
<height>116</height>
</rect>
</property>
<property name="windowTitle">
<string>About FT8Call</string>
<string>About WSJT-X</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
-70
View File
@@ -1,70 +0,0 @@
import socket
KKEY = 0x73e2
def do_hash(callsign):
rootCall = callsign.split("-")[0].upper() + '\0'
hash = KKEY
i = 0
length = len(rootCall)
while (i+1 < length):
hash ^= ord(rootCall[i])<<8
hash ^= ord(rootCall[i+1])
i += 2
return int(hash & 0x7fff)
HOST = 'rotate.aprs2.net'
#HOST = 'rotate.aprs.net'
PORT = 14580
print "Connecting..."
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
print "Connected..."
data = s.recv(1024)
print data
call = 'KN4CRD'
pw = do_hash(call)
ver = "FT8Call"
login = "user {} pass {} ver {}\n".format(call, pw, ver)
s.send(login)
print "Login sent...", login
data = s.recv(1024)
print data
if 0:
message = "KN4CRD>OH8STN,APRS,TCPIP*::EMAIL-2 :KN4CRD@GMAIL.COM TESTING!{04}\n"
s.send(message)
if 0:
message = "{}>APRS,TCPIP*::EMAIL-2 :kn4crd@gmail.com testing456{{01}}\n".format(call)
message = "KN4CRD>APRS,TCPIP*::EMAIL-2 :KN4CRD@GMAIL.COM TESTING!{02}\n"
s.send(message)
if 0:
payload = ":This is a test message"
message = "{}>APRS,TCPIP*::{} {}\n".format(call, call, payload)
s.send(message)
if 1:
position = "=3352.45N/08422.71Wn"
status = "FT8CALL VIA XX9XXX/XXXX 14.082500MHz -20dB"
payload = "".join((position, status))
message = "{}>OH8STN,APRS,TCPIP*:{}\n".format(call, payload)
s.send(message)
print "Spot sent...", message
data = s.recv(1024)
print data
s.close()
+26 -7
View File
@@ -12,8 +12,8 @@
sodipodi:version="0.32"
viewBox="0 0 640 480"
version="1.1"
sodipodi:docname="DragNDrop Background.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="tasto_5_architetto_franc_01.svg"
inkscape:version="0.48.4 r9939"
width="100%"
height="100%">
<defs
@@ -27,10 +27,10 @@
inkscape:zoom="1.89375"
inkscape:cx="227.06271"
inkscape:cy="240"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="g3" />
<g
@@ -72,6 +72,25 @@
d="m 299.44057,-268.80395 c -9.2,3.806 -5.476,22.395 -5.476,30.261 0,1.951 -23.229,0.93 -26.087,0.93 -8.576,0 -23.012,-2.757 -27.835,6.535 -3.627,6.99 -1.35,19.146 -1.35,26.616 0,8.4 -0.709,17.143 0,25.519 0,13.884 15.395,12.081 24.75,12.081 h 30.326 c 0.616,0 -0.196,23.651 0.363,26.81 1.344,7.601 11.873,10.134 17.171,4.83 1.235,-0.97 2.304,-2.297 3.414,-3.404 6.86,-6.837 13.72,-13.676 20.579,-20.514 7.706,-7.681 15.41,-15.36 23.116,-23.042 4.011,-3.997 10.436,-8.579 12.863,-13.906 3.874,-8.509 -2.996,-14.135 -8.281,-19.426 -7.462,-7.47 -14.926,-14.941 -22.389,-22.411 -7.348,-7.353 -14.693,-14.708 -22.041,-22.061 -5.328,-5.353 -10.368,-12.444 -19.115,-8.826 m -58.942,89.86 v -25.519 c 0,-7.083 -2.537,-20.456 1.757,-26.809 4.938,-7.304 19.854,-4.536 27.283,-4.536 h 17.136 c 1.448,0 7.955,0.999 9.096,0 1.124,-0.984 0,-9.795 0,-11.286 v -14.11 c 0,-6.577 10.11,-8.923 14.281,-4.749 1.512,1.514 3.024,3.027 4.536,4.539 l 46.438,46.479 c 5.123,5.13 13.199,11.335 7.847,19.468 -3.387,5.148 -9.155,9.432 -13.47,13.732 -14.601,14.553 -29.201,29.107 -43.802,43.659 -2.575,2.568 -5.353,4.298 -9.308,3.666 -6.041,-0.967 -6.522,-6.041 -6.522,-10.962 0,-3.029 1.173,-23.3 -1.004,-23.3 h -29.582 c -8.374,-0.01 -24.69,2.6 -24.69,-10.282"
inkscape:connector-curvature="0"
style="fill:#739b07" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff7400;fill-opacity:0.77254902;stroke:none;font-family:Purisa;-inkscape-font-specification:Sans Bold"
x="316.39532"
y="-58.000538"
id="text6112"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6114"
x="316.39532"
y="-58.000538">Drag the icon</tspan><tspan
sodipodi:role="line"
x="316.39532"
y="-8.0005379"
id="tspan6116">onto the link</tspan><tspan
sodipodi:role="line"
x="316.39532"
y="41.999462"
id="tspan6118">to install WSJT-X</tspan></text>
</g>
<metadata
id="metadata6108">
@@ -88,7 +107,7 @@
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title />
<dc:title></dc:title>
<dc:date>2010-03-28T09:25:56</dc:date>
<dc:description>Drawing by Francesco 'Architetto' Rollandin. From OCAL 0.18 release.</dc:description>
<dc:source>http://openclipart.org/detail/34711/architetto----tasto-5-by-anonymous</dc:source>

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

-95
View File
@@ -1,95 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="1024"
viewBox="0 0 270.93333 270.93334"
version="1.1"
id="svg16"
inkscape:export-filename="/home/jordan/bitmap.png"
inkscape:export-xdpi="300.06662"
inkscape:export-ydpi="300.06662"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="icon_1024.svg">
<defs
id="defs10">
<linearGradient
id="linearGradient6001"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5999" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.48333333"
inkscape:cx="1350"
inkscape:cy="512"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
units="px"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata13">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-26.06665)">
<g
id="g6030"
transform="matrix(1.5635065,0,0,1.5635065,-28.822499,6.8392367)">
<circle
inkscape:export-ydpi="300.06662"
inkscape:export-xdpi="300.06662"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="81.642853"
cy="98.940475"
cx="105.07738"
id="path18" />
<text
id="text24"
y="152.33945"
x="52.539673"
style="font-style:normal;font-weight:normal;font-size:7.09937859px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17748445"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:176.3888855px;font-family:wasy10;-inkscape-font-specification:wasy10;fill:#000000;stroke-width:0.17748445"
y="152.33945"
x="52.539673"
id="tspan22"
sodipodi:role="line">⌁</tspan></text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

-95
View File
@@ -1,95 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128"
height="128"
viewBox="0 0 33.866666 33.866667"
version="1.1"
id="svg16"
inkscape:export-filename="/home/jordan/bitmap.png"
inkscape:export-xdpi="300.06662"
inkscape:export-ydpi="300.06662"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="icon_1024.svg">
<defs
id="defs10">
<linearGradient
id="linearGradient6001"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5999" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.48333333"
inkscape:cx="1350"
inkscape:cy="512"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
units="px"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata13">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
id="g6030"
transform="matrix(0.19543832,0,0,0.19543832,-3.6028125,260.72988)">
<circle
inkscape:export-ydpi="300.06662"
inkscape:export-xdpi="300.06662"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="81.642853"
cy="98.940475"
cx="105.07738"
id="path18" />
<text
id="text24"
y="152.33945"
x="52.539673"
style="font-style:normal;font-weight:normal;font-size:7.09937859px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17748445"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:176.3888855px;font-family:wasy10;-inkscape-font-specification:wasy10;fill:#000000;stroke-width:0.17748445"
y="152.33945"
x="52.539673"
id="tspan22"
sodipodi:role="line">⌁</tspan></text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

+1097 -63
View File
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

+30 -31
View File
@@ -3,8 +3,8 @@
#
# Windows
#
inkscape -z -e /tmp/image-0.png icon_128.svg
inkscape -z -e /tmp/image-1.png icon_1024.svg
inkscape -z -e /tmp/image-0.png wsjt_globe_128x128.svg
inkscape -z -e /tmp/image-1.png wsjtx_globe_1024x1024.svg
convert '/tmp/image-%d.png[0-1]' -background transparent \
\( -clone 0 -resize 16 -colors 256 -compress none \) \
\( -clone 0 -resize 20 -colors 256 -compress none \) \
@@ -25,42 +25,41 @@ convert '/tmp/image-%d.png[0-1]' -background transparent \
\( -clone 1 -resize 128 -compress none \) \
\( -clone 1 -resize 256 -compress Zip \) \
-delete 1 -delete 0 \
-alpha remove ../icons/windows-icons/ft8call.ico
-alpha remove ../icons/windows-icons/wsjtx.ico
rm /tmp/image-0.png /tmp/image-1.png
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/ft8call.ico
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/wsjtx.ico
#
#inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \
# convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
convert png:installer_logo.svg.png -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \
convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/installer_logo.bmp
#
# Mac
#
mkdir -p ../icons/Darwin/FT8Call.iconset
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_16x16@2x.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_32x32.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_32x32@2x.png -w 64 -h 64 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_128x128.png -w 128 -h 128 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_128x128@2x.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_256x256.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_256x256@2x.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_512x512.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_512x512@2x.png -w 1024 -h 1024 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/FT8Call.iconset/*
mkdir -p ../icons/Darwin/wsjtx.iconset
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_16x16.png -w 16 -h 16 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_16x16@2x.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_32x32.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_32x32@2x.png -w 64 -h 64 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_128x128.png -w 128 -h 128 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_128x128@2x.png -w 256 -h 256 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_256x256.png -w 256 -h 256 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_256x256@2x.png -w 512 -h 512 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_512x512.png -w 512 -h 512 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_512x512@2x.png -w 1024 -h 1024 wsjtx_globe_1024x1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/wsjtx.iconset/*
# generic globe iconset for utilities
mkdir -p ../icons/Darwin/wsjt.iconset
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16@2x.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32@2x.png -w 64 -h 64 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128.png -w 128 -h 128 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128@2x.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256@2x.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512@2x.png -w 1024 -h 1024 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16.png -w 16 -h 16 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16@2x.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32@2x.png -w 64 -h 64 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128.png -w 128 -h 128 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128@2x.png -w 256 -h 256 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256.png -w 256 -h 256 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256@2x.png -w 512 -h 512 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512.png -w 512 -h 512 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512@2x.png -w 1024 -h 1024 wsjt_globe_1024x1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/wsjt.iconset/*
#
inkscape -z -e "../icons/Darwin/DragNDrop Background.png" -w 640 -h 480 -b white "DragNDrop Background.svg"
@@ -69,5 +68,5 @@ identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' "../icons/Darwin/DragNDrop Ba
#
# KDE & Gnome
#
inkscape -z -e ../icons/Unix/ft8call_icon.png -w 128 -h 128 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Unix/ft8call_icon.png
inkscape -z -e ../icons/Unix/wsjtx_icon.png -w 128 -h 128 wsjtx_globe_1024x1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Unix/wsjtx_icon.png
+577
View File
@@ -0,0 +1,577 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/bill/Dropbox/src/wsjtx-dev/icons/windows-icons/icon_1024x1024.png"
version="1.1"
width="1024"
sodipodi:version="0.32"
sodipodi:docname="wsjtx_globe_1024x1024.svg"
inkscape:version="0.48.4 r9939"
id="svg1432"
height="1024">
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="svg1432"
inkscape:cx="512"
inkscape:cy="512"
inkscape:guide-bbox="true"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-height="858"
inkscape:window-width="1114"
inkscape:window-x="72"
inkscape:window-y="31"
inkscape:zoom="0.69433594"
pagecolor="#ffffff"
showborder="true"
showguides="true"
showgrid="false"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false" />
<metadata
id="metadata3060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title></dc:title>
<dc:description>Simple globe centered on North America</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>earth globe northamerica</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>May 1, 2005</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs1759">
<linearGradient
id="linearGradient37658">
<stop
style="stop-color:#2f7aff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop37660" />
<stop
style="stop-color:#0000b3;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop37662" />
</linearGradient>
<linearGradient
id="linearGradient20137">
<stop
style="stop-color:#00bf00;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop20139" />
<stop
style="stop-color:#007500;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop20141" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658-427"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664-403"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<linearGradient
id="linearGradient37658-427">
<stop
style="stop-color:#488afe;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7178" />
<stop
style="stop-color:#0000cc;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7180" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-396"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902-893"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-396">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7184" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7186" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-527"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904-666"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-527">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7190" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7192" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-774"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906-717"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-774">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7196" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7198" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-253"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908-922"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-253">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7202" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7204" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-972"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910-261"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-972">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7208" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7210" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-945"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912-713"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-945">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7214" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7216" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-600"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914-146"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-600">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7220" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7222" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-196"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916-817"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-196">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7226" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7228" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-388"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918-23"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-388">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7232" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7234" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-202"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920-260"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-202">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7238" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7240" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-151"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143-884"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-151">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7244" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7246" />
</linearGradient>
</defs>
<desc
id="desc1434">wmf2svg</desc>
<polyline
transform="matrix(2.2285926,-3.5745108,2.3232002,1.4484387,-677.00545,692.67468)"
style="fill:url(#radialGradient37664-403);fill-opacity:1;stroke:#0c0c0c;stroke-width:0.6875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
points="103.191467,409.292114 100.730545,403.134064 98.525299,396.927094 96.543777,390.573547 94.785973,384.171082 93.219925,377.622009 91.909569,371.072968 90.790962,364.426147 89.928040,357.779327 89.256882,351.083649 88.777481,344.387970 88.521805,337.692261 88.489838,330.947693 88.681602,324.300873 89.033165,317.605194 89.640404,311.007263 90.407448,304.458221 91.398209,298.006897 92.580727,291.604431 93.986977,285.299744 95.553017,279.092804 97.342781,272.983582 99.324303,267.069916 101.465622,261.253937 103.830666,255.584595 106.387474,250.110733 109.104080,244.783508 112.012444,239.700668 115.112572,234.764420 118.404449,230.072571 121.856140,225.625061 125.499588,221.373062 129.302826,217.414291 133.265884,213.748779 137.260895,210.425354 141.351776,207.444077 145.506577,204.804901 149.725311,202.556717 153.975983,200.601776 158.258652,198.988937 162.573242,197.718231 166.919815,196.789627 171.266373,196.154266 175.644897,195.909912 179.991470,195.909912 184.338043,196.300888 188.652649,196.985123 192.967270,197.962585 197.217941,199.233307 201.468628,200.846130 205.623444,202.801071 209.746277,205.000397 213.805222,207.541809 217.768265,210.376495 221.667389,213.504395 225.470627,216.876678 229.177994,220.591064 232.789490,224.598709 236.273132,228.850708 239.628937,233.444839 242.856903,238.283325 245.957031,243.366180 248.929321,248.791153 251.709839,254.411621 254.362534,260.374207 256.791504,266.483398 258.996704,272.739227 261.010223,279.043915 262.768005,285.495270 264.302094,291.995453 265.644409,298.593384 266.731079,305.191315 267.625946,311.838104 268.297119,318.533813 268.744537,325.278351 269.000244,331.974030 269.032166,338.669739 268.872375,345.365448 268.488861,352.012238 267.913574,358.610168 267.114594,365.159241 266.123840,371.659424 264.941284,378.061890 263.567017,384.366577 261.969025,390.573547 260.211212,396.633850 258.229706,402.596436 256.056396,408.412384 253.723328,414.032837 251.166504,419.555603 248.449905,424.833923 245.509598,429.965668 242.409470,434.853027 239.149536,439.593750 235.697845,444.041260 232.054413,448.244385 228.219193,452.252045 224.288116,455.917542 220.261139,459.240967 216.170258,462.173401 212.015442,464.812561 207.828674,467.109589 203.577988,469.064545 199.263397,470.628510 194.948776,471.899200 190.634186,472.876678 186.255646,473.463196 181.909073,473.756439 177.562500,473.707550 173.215942,473.365448 168.869370,472.681213 164.586731,471.703735 160.304077,470.384155 156.085358,468.771332 151.898590,466.865265 147.807709,464.617065 143.748779,462.124512 139.753769,459.289856 135.854645,456.161926 132.051392,452.740753 128.344025,449.026367 124.764503,445.067596 121.280853,440.766724 117.893089,436.221466 114.665123,431.382996 111.565002,426.251282 108.624680,420.875153 105.812187,415.205811 103.191467,409.292114 "
id="polyline1560" />
<g
transform="matrix(4.1610916,0,0,4.1610916,-268.34786,-716.6628)"
style="fill:url(#radialGradient1902-893);fill-opacity:1;fill-rule:evenodd"
inkscape:label="Continents"
id="Continents">
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1904-666);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="132.818436,384.610931 131.827682,384.953064 128.184235,388.227600 126.074867,388.667450 123.422180,385.441803 120.417938,385.832794 117.126053,389.107300 116.838409,393.896912 116.902328,400.641479 115.655891,409.292114 114.409447,415.352448 115.432167,418.235992 113.578484,420.386444 111.053642,420.924042 109.903076,422.732361 109.871117,423.172241 116.295090,433.728943 123.262383,443.161530 130.836914,451.421204 140.904327,460.071808 151.195465,466.425385 153.528549,464.470428 157.683365,463.248596 162.509323,463.688446 165.321808,463.835083 165.577484,459.387573 165.066132,457.628113 162.381485,454.793457 158.162750,448.244385 155.094604,442.526184 156.884354,433.680054 153.496597,425.664764 151.738800,419.017975 150.811951,410.220703 147.743790,405.479980 144.579727,397.953430 142.438416,395.851868 141.447662,389.058441 138.858887,386.419281 135.886597,384.855316 133.968994,384.219940 133.201950,380.994293 131.667877,376.351288 131.923553,370.926331 132.850403,369.069122 135.407196,368.140533 137.292847,366.625458 137.452652,362.911041 136.557755,358.316925 134.736038,353.967194 135.886597,352.158844 138.123810,351.914490 141.255890,349.812927 141.223938,346.245178 139.050644,343.557098 136.973236,343.654846 135.471115,341.602142 134.863876,337.643402 135.407196,330.947693 138.219681,327.575439 141.191971,325.571625 145.890106,326.158081 148.510818,330.361237 149.469635,333.635773 149.565506,336.421570 150.588226,338.327637 152.314072,339.891571 153.656403,344.045837 154.135788,348.737701 152.665634,353.771698 151.578995,357.730469 152.985229,359.587646 155.094604,356.557495 156.468872,353.234070 159.153519,351.572388 161.870132,351.474609 165.865143,353.967194 168.517807,355.237885 171.458130,352.696472 175.389221,351.425751 178.457397,351.621246 179.416199,352.940857 181.301834,352.403229 184.497833,352.452087 185.968002,353.918335 186.095840,356.704102 187.949539,357.143951 190.602203,359.392151 192.551788,361.004974 193.670380,358.610168 191.912582,355.482269 191.561020,353.576202 193.095093,351.767883 192.583740,349.030945 190.442413,347.906860 188.620697,346.147400 189.259888,345.169952 191.976501,346.049652 195.044662,348.835449 196.259140,351.230255 198.624191,353.771698 200.733551,353.282928 202.363510,350.057312 203.609955,343.996979 204.153275,334.710999 202.906830,330.752228 202.331558,328.406281 203.258408,324.594147 202.459396,316.676605 201.053146,314.819397 198.496353,317.311981 195.300339,320.781982 194.788971,323.567780 192.871368,323.518921 189.739288,325.669373 186.894852,327.477692 187.342285,323.470032 188.524796,319.755646 190.666138,317.311981 190.314575,313.450958 189.132050,308.123718 190.090851,304.898071 193.734299,301.965637 197.601471,302.063385 202.107834,303.773987 205.559525,305.875519 207.796722,306.217651 208.435928,302.698761 206.678116,300.548309 206.038925,296.980560 207.796722,294.585724 209.490601,292.581909 208.627686,290.529205 205.783249,292.386414 203.961517,291.555573 204.057388,289.258514 207.189484,286.130615 208.787491,282.953796 208.627686,279.532684 209.874130,275.427277 208.276123,272.152740 206.198730,271.273010 205.783249,275.231781 204.185242,277.479980 203.929565,281.927460 201.788239,283.393677 202.715073,269.513580 203.546036,261.938171 204.888351,257.050812 206.997711,254.998108 209.426682,251.283707 209.171005,248.595657 207.541046,244.734634 206.262650,243.708313 205.687363,241.362366 204.600723,239.211929 202.715073,239.798416 201.276871,239.896149 200.030426,234.959930 197.697342,233.395966 194.916824,233.884705 192.743546,234.715546 191.976501,231.929764 192.264130,228.068741 190.698090,230.903412 191.145538,235.986282 191.912582,241.362366 192.104340,246.347473 190.154770,250.208496 187.406204,253.238663 182.548279,255.780090 177.338791,257.979401 173.695343,260.911804 171.745789,262.866760 169.956009,265.603668 166.696106,264.919464 162.924805,265.066071 158.290604,266.092438 153.464630,269.220306 146.944778,274.352051 145.091095,277.479980 141.671371,283.442566 138.954773,288.036682 135.918564,293.950378 135.119568,298.593384 135.503082,301.476929 136.334045,297.420410 138.091858,294.048126 140.361008,290.871338 142.310577,287.987793 143.365265,289.502869 141.959015,292.190948 138.283615,298.055786 135.087601,306.071045 132.946274,309.492188 130.900833,310.176422 129.686356,314.330688 130.069870,319.755646 128.919312,329.628113 129.494598,334.515503 130.677109,341.797638 131.603958,350.546021 131.540024,355.482269 130.964752,360.565125 128.280106,366.772064 129.047150,373.125641 129.654404,377.084412 131.476105,380.456665 132.818436,384.610931 "
id="polyline1460" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1906-717);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="144.579727,355.237885 146.497345,357.241699 147.583984,362.324585 148.638672,368.384918 149.980988,372.539154 150.364502,377.035553 148.798477,377.279877 146.753021,373.467743 146.976746,368.433777 146.593216,362.959930 144.579727,355.237885 "
id="polyline1464" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1908-922);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="150.108826,378.892731 148.830429,379.870209 149.309830,383.584595 150.172745,386.614777 152.633667,390.964508 152.505829,386.565887 153.336792,386.077148 153.017197,383.780090 150.108826,378.892731 "
id="polyline1468" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1910-261);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="201.181000,353.820557 200.797470,356.459747 200.413956,361.053864 199.966507,365.990082 199.007706,368.238281 196.866379,363.204285 197.921066,357.681580 199.103592,354.895782 201.181000,353.820557 "
id="polyline1472" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1912-713);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="204.632675,320.342133 203.993469,316.774353 202.906830,312.668976 206.230682,314.575043 208.883362,312.277985 209.842163,309.052338 208.915314,303.822876 208.563766,299.961853 209.874130,294.487976 212.430923,295.514343 213.261887,299.570862 213.581497,305.386810 213.837173,310.958405 212.111328,314.917175 211.951538,317.018738 212.335052,321.466217 210.800964,325.913727 208.691605,325.376099 206.454407,326.646820 205.016205,324.203125 204.632675,320.342133 "
id="polyline1476" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1914-146);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="213.773254,334.955322 213.709335,340.820160 213.869125,343.263885 216.362015,346.636139 219.526062,350.594910 218.695099,344.632324 219.685867,341.406677 222.722061,339.060730 227.835663,334.662109 230.648163,335.786194 233.332809,333.147003 234.355515,326.011475 234.675125,319.218048 233.556534,312.522369 233.588486,306.071045 231.511078,300.646057 228.890350,297.420410 226.365509,296.980560 225.246902,294.830109 226.365509,293.461639 225.023193,290.235992 222.338547,287.401337 220.964264,289.698364 217.352783,290.675842 216.330063,294.292480 216.362015,299.375336 220.644653,297.469269 222.754028,297.958038 220.708588,301.623535 219.941544,306.852997 220.293106,310.714020 219.845657,317.654083 219.078629,323.909912 214.955765,329.237122 215.083618,333.000397 213.773254,334.955322 "
id="polyline1480" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1916-817);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="232.533813,338.767487 230.200729,341.748779 229.401718,344.436798 229.721313,347.662476 233.460648,348.542206 237.040161,346.929382 237.231934,342.872864 235.378250,340.478088 233.620453,340.282562 232.533813,338.767487 "
id="polyline1484" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1918-23);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="264.877380,375.813690 262.991730,379.919098 260.371002,382.167236 258.645172,385.148529 258.645172,389.693817 256.887360,391.062256 255.161514,388.911804 254.522308,386.956848 252.732559,385.197418 253.339798,391.697632 251.709839,392.332977 249.792236,387.738861 248.322067,389.840393 246.724060,393.017212 244.327072,395.412018 242.952774,399.664001 241.514587,403.329529 241.067139,407.337158 239.565018,407.190552 238.318573,407.777039 235.665894,409.096649 233.173004,407.679291 233.141052,401.570068 234.707092,399.712891 235.122574,395.705231 237.231934,393.652588 239.692856,394.434540 241.834183,392.039734 240.843414,387.152374 239.980499,385.099670 240.907349,382.265015 244.550781,379.332581 247.043671,372.685760 247.139542,368.384918 249.121078,365.110352 252.125320,361.151611 254.202728,353.967194 256.503845,350.399414 255.992477,346.684998 255.864655,342.335266 255.832672,339.744965 254.586243,339.353973 254.074875,342.139771 251.581985,340.722412 252.189240,343.654846 251.997467,347.760223 251.294357,352.647583 251.486115,357.632721 248.897354,354.993530 246.915833,355.335632 246.020950,351.670135 245.733307,346.489502 247.778748,340.233704 248.002472,336.763672 247.586990,329.774750 247.299347,324.545258 248.705597,319.315765 251.230438,321.319580 254.234680,326.451324 255.608963,324.154266 255.097595,321.417358 253.915070,321.612854 252.253159,317.702942 254.202728,316.774353 253.883118,313.548676 254.714081,310.469666 254.746033,303.969452 255.001724,293.999268 253.947052,293.070679 252.349030,292.777405 250.495346,290.382599 250.303589,287.938934 249.312836,284.077911 247.235428,279.679291 245.381744,278.261963 242.920822,273.912201 241.546539,269.122559 241.035172,265.408173 242.345535,263.502106 240.555771,258.761383 238.734055,257.979401 236.560776,253.336411 234.131805,249.573120 232.501846,251.185959 230.648163,249.768631 228.315079,245.272247 226.653152,244.343658 225.438675,246.494095 223.808701,245.174515 220.964264,239.896149 219.430176,240.775894 217.672379,242.193222 216.170258,241.069122 212.718582,239.945023 210.257645,239.114182 207.509079,237.647964 205.527557,234.422318 206.805954,234.471191 209.362778,234.520065 210.225693,233.004974 208.979248,230.072571 209.810211,226.993515 210.737045,224.109970 213.325806,224.794220 215.722824,225.967178 216.745544,227.873245 219.781738,227.531128 222.114822,224.549835 224.032425,226.553665 226.844925,229.241714 229.785248,226.700287 230.136795,223.425751 229.721313,220.933197 236.592728,229.290573 241.898102,236.768250 246.564270,244.490280 251.837677,254.704865 255.960541,264.332947 260.115326,276.258118 264.302094,291.995453 267.210449,308.514740 268.393005,320.537628 269.000244,333.538025 268.840424,345.169952 268.201202,356.557495 266.794983,367.358551 265.516571,374.933960 264.877380,375.813690 "
id="polyline1488" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1920-260);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="244.774506,357.779327 243.304337,356.313110 242.345535,358.512421 241.131058,362.666687 239.916580,364.817108 238.062897,367.945038 237.615448,372.930145 238.414459,375.324951 239.373245,373.125641 239.852661,368.727020 240.683624,367.602905 241.067139,371.121826 241.290848,375.129456 241.834183,378.452850 243.336304,376.986664 243.528061,376.937775 243.719818,376.888916 243.911591,376.791168 244.071396,376.644531 244.390976,376.351288 244.678635,376.009186 244.934311,375.618195 245.126068,375.324951 245.221939,375.129456 245.285858,375.031708 245.253906,372.490265 244.486862,365.159241 244.199219,361.884705 244.774506,357.779327 "
id="polyline1492" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient20143-884);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="262.192749,389.449432 260.115326,391.160004 258.261658,394.287933 256.663635,394.532288 255.992477,392.968323 255.065643,395.802979 253.851151,400.885864 250.783005,404.209290 250.175766,401.276855 249.344803,399.810638 245.573502,402.889679 242.537292,406.213104 240.747543,406.995056 238.126801,409.878601 236.049423,409.976349 233.748291,411.002716 231.606964,415.010315 228.986237,420.826294 226.333542,423.123352 220.996231,428.059601 216.617691,433.680054 213.485611,439.349396 210.385483,446.582703 209.171005,453.278381 210.353516,458.605591 214.220703,458.654480 216.777496,458.752228 218.535294,460.560547 223.648911,456.504028 228.187241,452.252045 232.693619,447.511292 237.775253,441.402100 243.400223,433.386810 247.906586,425.811401 251.677872,418.529236 255.161514,410.611694 258.069885,403.134064 260.690613,394.923279 262.192749,389.449432 "
id="polyline1496" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 32 KiB

+839
View File
@@ -0,0 +1,839 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="128"
id="svg1432"
inkscape:version="0.48.4 r9939"
sodipodi:docname="wsjtx_globe_128x128.svg"
sodipodi:version="0.32"
width="128"
version="1.1">
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="svg1432"
inkscape:cx="64"
inkscape:cy="64"
inkscape:guide-bbox="true"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:window-height="1027"
inkscape:window-width="1846"
inkscape:window-x="72"
inkscape:window-y="24"
inkscape:zoom="6.875"
pagecolor="#ffffff"
showborder="false"
showguides="true"
showgrid="false"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false"
inkscape:snap-from-guide="true" />
<metadata
id="metadata3060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title />
<dc:description>Simple globe centered on North America</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>earth globe northamerica</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>May 1, 2005</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs1759">
<linearGradient
id="linearGradient37658">
<stop
id="stop37660"
offset="0.0000000"
style="stop-color:#619afe;stop-opacity:1.0000000;" />
<stop
id="stop37662"
offset="1.0000000"
style="stop-color:#0000e5;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient20137">
<stop
id="stop20139"
offset="0.0000000"
style="stop-color:#00f100;stop-opacity:1.0000000;" />
<stop
id="stop20141"
offset="1.0000000"
style="stop-color:#00a700;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient20143"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="221.61394"
cy="270.08731"
fx="221.61394"
fy="270.08731"
gradientTransform="scale(0.806632,1.239722)"
gradientUnits="userSpaceOnUse"
id="radialGradient37664"
inkscape:collect="always"
r="112.3373"
xlink:href="#linearGradient37658" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1902"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1904"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1906"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1908"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1910"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1912"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1914"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1916"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1918"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1920"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="221.61394"
cy="270.08731"
fx="221.61394"
fy="270.08731"
gradientTransform="scale(0.806632,1.239722)"
gradientUnits="userSpaceOnUse"
id="radialGradient37664-284"
inkscape:collect="always"
r="112.3373"
xlink:href="#linearGradient37658-332" />
<linearGradient
id="linearGradient37658-332">
<stop
id="stop8375"
offset="0.0000000"
style="stop-color:#7aaafe;stop-opacity:1.0000000;" />
<stop
id="stop8377"
offset="1.0000000"
style="stop-color:#0000fe;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1902-108"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-970" />
<linearGradient
id="linearGradient20137-970">
<stop
id="stop8381"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8383"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1904-972"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-24" />
<linearGradient
id="linearGradient20137-24">
<stop
id="stop8387"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8389"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1906-828"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-376" />
<linearGradient
id="linearGradient20137-376">
<stop
id="stop8393"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8395"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1908-502"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-289" />
<linearGradient
id="linearGradient20137-289">
<stop
id="stop8399"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8401"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1910-187"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-879" />
<linearGradient
id="linearGradient20137-879">
<stop
id="stop8405"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8407"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1912-38"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-891" />
<linearGradient
id="linearGradient20137-891">
<stop
id="stop8411"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8413"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1914-119"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-529" />
<linearGradient
id="linearGradient20137-529">
<stop
id="stop8417"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8419"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1916-825"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-469" />
<linearGradient
id="linearGradient20137-469">
<stop
id="stop8423"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8425"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1918-387"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-981" />
<linearGradient
id="linearGradient20137-981">
<stop
id="stop8429"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8431"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1920-264"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-421" />
<linearGradient
id="linearGradient20137-421">
<stop
id="stop8435"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8437"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient20143-627"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-58" />
<linearGradient
id="linearGradient20137-58">
<stop
id="stop8441"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8443"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="221.61394"
cy="270.08731"
fx="221.61394"
fy="270.08731"
gradientTransform="scale(0.806632,1.239722)"
gradientUnits="userSpaceOnUse"
id="radialGradient37664-284-781"
inkscape:collect="always"
r="112.3373"
xlink:href="#linearGradient37658-332-354" />
<linearGradient
id="linearGradient37658-332-354">
<stop
id="stop8612"
offset="0.0000000"
style="stop-color:#93bafe;stop-opacity:1.0000000;" />
<stop
id="stop8614"
offset="1.0000000"
style="stop-color:#1818ff;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1902-108-124"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-970-892" />
<linearGradient
id="linearGradient20137-970-892">
<stop
id="stop8618"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8620"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1904-972-786"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-24-119" />
<linearGradient
id="linearGradient20137-24-119">
<stop
id="stop8624"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8626"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1906-828-861"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-376-597" />
<linearGradient
id="linearGradient20137-376-597">
<stop
id="stop8630"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8632"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1908-502-115"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-289-824" />
<linearGradient
id="linearGradient20137-289-824">
<stop
id="stop8636"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8638"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1910-187-480"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-879-315" />
<linearGradient
id="linearGradient20137-879-315">
<stop
id="stop8642"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8644"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1912-38-980"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-891-460" />
<linearGradient
id="linearGradient20137-891-460">
<stop
id="stop8648"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8650"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1914-119-179"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-529-932" />
<linearGradient
id="linearGradient20137-529-932">
<stop
id="stop8654"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8656"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1916-825-422"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-469-24" />
<linearGradient
id="linearGradient20137-469-24">
<stop
id="stop8660"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8662"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1918-387-755"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-981-521" />
<linearGradient
id="linearGradient20137-981-521">
<stop
id="stop8666"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8668"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1920-264-381"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-421-297" />
<linearGradient
id="linearGradient20137-421-297">
<stop
id="stop8672"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8674"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient20143-627-23"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-58-615" />
<linearGradient
id="linearGradient20137-58-615">
<stop
id="stop8678"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8680"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
</defs>
<desc
id="desc1434">wmf2svg</desc>
<polyline
id="polyline1560"
points="103.191467,409.292114 100.730545,403.134064 98.525299,396.927094 96.543777,390.573547 94.785973,384.171082 93.219925,377.622009 91.909569,371.072968 90.790962,364.426147 89.928040,357.779327 89.256882,351.083649 88.777481,344.387970 88.521805,337.692261 88.489838,330.947693 88.681602,324.300873 89.033165,317.605194 89.640404,311.007263 90.407448,304.458221 91.398209,298.006897 92.580727,291.604431 93.986977,285.299744 95.553017,279.092804 97.342781,272.983582 99.324303,267.069916 101.465622,261.253937 103.830666,255.584595 106.387474,250.110733 109.104080,244.783508 112.012444,239.700668 115.112572,234.764420 118.404449,230.072571 121.856140,225.625061 125.499588,221.373062 129.302826,217.414291 133.265884,213.748779 137.260895,210.425354 141.351776,207.444077 145.506577,204.804901 149.725311,202.556717 153.975983,200.601776 158.258652,198.988937 162.573242,197.718231 166.919815,196.789627 171.266373,196.154266 175.644897,195.909912 179.991470,195.909912 184.338043,196.300888 188.652649,196.985123 192.967270,197.962585 197.217941,199.233307 201.468628,200.846130 205.623444,202.801071 209.746277,205.000397 213.805222,207.541809 217.768265,210.376495 221.667389,213.504395 225.470627,216.876678 229.177994,220.591064 232.789490,224.598709 236.273132,228.850708 239.628937,233.444839 242.856903,238.283325 245.957031,243.366180 248.929321,248.791153 251.709839,254.411621 254.362534,260.374207 256.791504,266.483398 258.996704,272.739227 261.010223,279.043915 262.768005,285.495270 264.302094,291.995453 265.644409,298.593384 266.731079,305.191315 267.625946,311.838104 268.297119,318.533813 268.744537,325.278351 269.000244,331.974030 269.032166,338.669739 268.872375,345.365448 268.488861,352.012238 267.913574,358.610168 267.114594,365.159241 266.123840,371.659424 264.941284,378.061890 263.567017,384.366577 261.969025,390.573547 260.211212,396.633850 258.229706,402.596436 256.056396,408.412384 253.723328,414.032837 251.166504,419.555603 248.449905,424.833923 245.509598,429.965668 242.409470,434.853027 239.149536,439.593750 235.697845,444.041260 232.054413,448.244385 228.219193,452.252045 224.288116,455.917542 220.261139,459.240967 216.170258,462.173401 212.015442,464.812561 207.828674,467.109589 203.577988,469.064545 199.263397,470.628510 194.948776,471.899200 190.634186,472.876678 186.255646,473.463196 181.909073,473.756439 177.562500,473.707550 173.215942,473.365448 168.869370,472.681213 164.586731,471.703735 160.304077,470.384155 156.085358,468.771332 151.898590,466.865265 147.807709,464.617065 143.748779,462.124512 139.753769,459.289856 135.854645,456.161926 132.051392,452.740753 128.344025,449.026367 124.764503,445.067596 121.280853,440.766724 117.893089,436.221466 114.665123,431.382996 111.565002,426.251282 108.624680,420.875153 105.812187,415.205811 103.191467,409.292114 "
style="fill:url(#radialGradient37664-284-781);fill-opacity:1;stroke:#181818;stroke-width:0.6875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
transform="matrix(0.3640721,-0.58678257,0.3795276,0.23777199,-128.13162,89.336986)" />
<g
id="Continents"
inkscape:label="Continents"
style="fill:url(#radialGradient1902-108-124);fill-opacity:1;fill-rule:evenodd"
transform="matrix(0.67977314,0,0,0.68307417,-61.371653,-142.01634)">
<polyline
id="polyline1460"
points="132.818436,384.610931 131.827682,384.953064 128.184235,388.227600 126.074867,388.667450 123.422180,385.441803 120.417938,385.832794 117.126053,389.107300 116.838409,393.896912 116.902328,400.641479 115.655891,409.292114 114.409447,415.352448 115.432167,418.235992 113.578484,420.386444 111.053642,420.924042 109.903076,422.732361 109.871117,423.172241 116.295090,433.728943 123.262383,443.161530 130.836914,451.421204 140.904327,460.071808 151.195465,466.425385 153.528549,464.470428 157.683365,463.248596 162.509323,463.688446 165.321808,463.835083 165.577484,459.387573 165.066132,457.628113 162.381485,454.793457 158.162750,448.244385 155.094604,442.526184 156.884354,433.680054 153.496597,425.664764 151.738800,419.017975 150.811951,410.220703 147.743790,405.479980 144.579727,397.953430 142.438416,395.851868 141.447662,389.058441 138.858887,386.419281 135.886597,384.855316 133.968994,384.219940 133.201950,380.994293 131.667877,376.351288 131.923553,370.926331 132.850403,369.069122 135.407196,368.140533 137.292847,366.625458 137.452652,362.911041 136.557755,358.316925 134.736038,353.967194 135.886597,352.158844 138.123810,351.914490 141.255890,349.812927 141.223938,346.245178 139.050644,343.557098 136.973236,343.654846 135.471115,341.602142 134.863876,337.643402 135.407196,330.947693 138.219681,327.575439 141.191971,325.571625 145.890106,326.158081 148.510818,330.361237 149.469635,333.635773 149.565506,336.421570 150.588226,338.327637 152.314072,339.891571 153.656403,344.045837 154.135788,348.737701 152.665634,353.771698 151.578995,357.730469 152.985229,359.587646 155.094604,356.557495 156.468872,353.234070 159.153519,351.572388 161.870132,351.474609 165.865143,353.967194 168.517807,355.237885 171.458130,352.696472 175.389221,351.425751 178.457397,351.621246 179.416199,352.940857 181.301834,352.403229 184.497833,352.452087 185.968002,353.918335 186.095840,356.704102 187.949539,357.143951 190.602203,359.392151 192.551788,361.004974 193.670380,358.610168 191.912582,355.482269 191.561020,353.576202 193.095093,351.767883 192.583740,349.030945 190.442413,347.906860 188.620697,346.147400 189.259888,345.169952 191.976501,346.049652 195.044662,348.835449 196.259140,351.230255 198.624191,353.771698 200.733551,353.282928 202.363510,350.057312 203.609955,343.996979 204.153275,334.710999 202.906830,330.752228 202.331558,328.406281 203.258408,324.594147 202.459396,316.676605 201.053146,314.819397 198.496353,317.311981 195.300339,320.781982 194.788971,323.567780 192.871368,323.518921 189.739288,325.669373 186.894852,327.477692 187.342285,323.470032 188.524796,319.755646 190.666138,317.311981 190.314575,313.450958 189.132050,308.123718 190.090851,304.898071 193.734299,301.965637 197.601471,302.063385 202.107834,303.773987 205.559525,305.875519 207.796722,306.217651 208.435928,302.698761 206.678116,300.548309 206.038925,296.980560 207.796722,294.585724 209.490601,292.581909 208.627686,290.529205 205.783249,292.386414 203.961517,291.555573 204.057388,289.258514 207.189484,286.130615 208.787491,282.953796 208.627686,279.532684 209.874130,275.427277 208.276123,272.152740 206.198730,271.273010 205.783249,275.231781 204.185242,277.479980 203.929565,281.927460 201.788239,283.393677 202.715073,269.513580 203.546036,261.938171 204.888351,257.050812 206.997711,254.998108 209.426682,251.283707 209.171005,248.595657 207.541046,244.734634 206.262650,243.708313 205.687363,241.362366 204.600723,239.211929 202.715073,239.798416 201.276871,239.896149 200.030426,234.959930 197.697342,233.395966 194.916824,233.884705 192.743546,234.715546 191.976501,231.929764 192.264130,228.068741 190.698090,230.903412 191.145538,235.986282 191.912582,241.362366 192.104340,246.347473 190.154770,250.208496 187.406204,253.238663 182.548279,255.780090 177.338791,257.979401 173.695343,260.911804 171.745789,262.866760 169.956009,265.603668 166.696106,264.919464 162.924805,265.066071 158.290604,266.092438 153.464630,269.220306 146.944778,274.352051 145.091095,277.479980 141.671371,283.442566 138.954773,288.036682 135.918564,293.950378 135.119568,298.593384 135.503082,301.476929 136.334045,297.420410 138.091858,294.048126 140.361008,290.871338 142.310577,287.987793 143.365265,289.502869 141.959015,292.190948 138.283615,298.055786 135.087601,306.071045 132.946274,309.492188 130.900833,310.176422 129.686356,314.330688 130.069870,319.755646 128.919312,329.628113 129.494598,334.515503 130.677109,341.797638 131.603958,350.546021 131.540024,355.482269 130.964752,360.565125 128.280106,366.772064 129.047150,373.125641 129.654404,377.084412 131.476105,380.456665 132.818436,384.610931 "
style="fill:url(#radialGradient1904-972-786);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1464"
points="144.579727,355.237885 146.497345,357.241699 147.583984,362.324585 148.638672,368.384918 149.980988,372.539154 150.364502,377.035553 148.798477,377.279877 146.753021,373.467743 146.976746,368.433777 146.593216,362.959930 144.579727,355.237885 "
style="fill:url(#radialGradient1906-828-861);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1468"
points="150.108826,378.892731 148.830429,379.870209 149.309830,383.584595 150.172745,386.614777 152.633667,390.964508 152.505829,386.565887 153.336792,386.077148 153.017197,383.780090 150.108826,378.892731 "
style="fill:url(#radialGradient1908-502-115);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1472"
points="201.181000,353.820557 200.797470,356.459747 200.413956,361.053864 199.966507,365.990082 199.007706,368.238281 196.866379,363.204285 197.921066,357.681580 199.103592,354.895782 201.181000,353.820557 "
style="fill:url(#radialGradient1910-187-480);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1476"
points="204.632675,320.342133 203.993469,316.774353 202.906830,312.668976 206.230682,314.575043 208.883362,312.277985 209.842163,309.052338 208.915314,303.822876 208.563766,299.961853 209.874130,294.487976 212.430923,295.514343 213.261887,299.570862 213.581497,305.386810 213.837173,310.958405 212.111328,314.917175 211.951538,317.018738 212.335052,321.466217 210.800964,325.913727 208.691605,325.376099 206.454407,326.646820 205.016205,324.203125 204.632675,320.342133 "
style="fill:url(#radialGradient1912-38-980);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1480"
points="213.773254,334.955322 213.709335,340.820160 213.869125,343.263885 216.362015,346.636139 219.526062,350.594910 218.695099,344.632324 219.685867,341.406677 222.722061,339.060730 227.835663,334.662109 230.648163,335.786194 233.332809,333.147003 234.355515,326.011475 234.675125,319.218048 233.556534,312.522369 233.588486,306.071045 231.511078,300.646057 228.890350,297.420410 226.365509,296.980560 225.246902,294.830109 226.365509,293.461639 225.023193,290.235992 222.338547,287.401337 220.964264,289.698364 217.352783,290.675842 216.330063,294.292480 216.362015,299.375336 220.644653,297.469269 222.754028,297.958038 220.708588,301.623535 219.941544,306.852997 220.293106,310.714020 219.845657,317.654083 219.078629,323.909912 214.955765,329.237122 215.083618,333.000397 213.773254,334.955322 "
style="fill:url(#radialGradient1914-119-179);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1484"
points="232.533813,338.767487 230.200729,341.748779 229.401718,344.436798 229.721313,347.662476 233.460648,348.542206 237.040161,346.929382 237.231934,342.872864 235.378250,340.478088 233.620453,340.282562 232.533813,338.767487 "
style="fill:url(#radialGradient1916-825-422);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1488"
points="264.877380,375.813690 262.991730,379.919098 260.371002,382.167236 258.645172,385.148529 258.645172,389.693817 256.887360,391.062256 255.161514,388.911804 254.522308,386.956848 252.732559,385.197418 253.339798,391.697632 251.709839,392.332977 249.792236,387.738861 248.322067,389.840393 246.724060,393.017212 244.327072,395.412018 242.952774,399.664001 241.514587,403.329529 241.067139,407.337158 239.565018,407.190552 238.318573,407.777039 235.665894,409.096649 233.173004,407.679291 233.141052,401.570068 234.707092,399.712891 235.122574,395.705231 237.231934,393.652588 239.692856,394.434540 241.834183,392.039734 240.843414,387.152374 239.980499,385.099670 240.907349,382.265015 244.550781,379.332581 247.043671,372.685760 247.139542,368.384918 249.121078,365.110352 252.125320,361.151611 254.202728,353.967194 256.503845,350.399414 255.992477,346.684998 255.864655,342.335266 255.832672,339.744965 254.586243,339.353973 254.074875,342.139771 251.581985,340.722412 252.189240,343.654846 251.997467,347.760223 251.294357,352.647583 251.486115,357.632721 248.897354,354.993530 246.915833,355.335632 246.020950,351.670135 245.733307,346.489502 247.778748,340.233704 248.002472,336.763672 247.586990,329.774750 247.299347,324.545258 248.705597,319.315765 251.230438,321.319580 254.234680,326.451324 255.608963,324.154266 255.097595,321.417358 253.915070,321.612854 252.253159,317.702942 254.202728,316.774353 253.883118,313.548676 254.714081,310.469666 254.746033,303.969452 255.001724,293.999268 253.947052,293.070679 252.349030,292.777405 250.495346,290.382599 250.303589,287.938934 249.312836,284.077911 247.235428,279.679291 245.381744,278.261963 242.920822,273.912201 241.546539,269.122559 241.035172,265.408173 242.345535,263.502106 240.555771,258.761383 238.734055,257.979401 236.560776,253.336411 234.131805,249.573120 232.501846,251.185959 230.648163,249.768631 228.315079,245.272247 226.653152,244.343658 225.438675,246.494095 223.808701,245.174515 220.964264,239.896149 219.430176,240.775894 217.672379,242.193222 216.170258,241.069122 212.718582,239.945023 210.257645,239.114182 207.509079,237.647964 205.527557,234.422318 206.805954,234.471191 209.362778,234.520065 210.225693,233.004974 208.979248,230.072571 209.810211,226.993515 210.737045,224.109970 213.325806,224.794220 215.722824,225.967178 216.745544,227.873245 219.781738,227.531128 222.114822,224.549835 224.032425,226.553665 226.844925,229.241714 229.785248,226.700287 230.136795,223.425751 229.721313,220.933197 236.592728,229.290573 241.898102,236.768250 246.564270,244.490280 251.837677,254.704865 255.960541,264.332947 260.115326,276.258118 264.302094,291.995453 267.210449,308.514740 268.393005,320.537628 269.000244,333.538025 268.840424,345.169952 268.201202,356.557495 266.794983,367.358551 265.516571,374.933960 264.877380,375.813690 "
style="fill:url(#radialGradient1918-387-755);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1492"
points="244.774506,357.779327 243.304337,356.313110 242.345535,358.512421 241.131058,362.666687 239.916580,364.817108 238.062897,367.945038 237.615448,372.930145 238.414459,375.324951 239.373245,373.125641 239.852661,368.727020 240.683624,367.602905 241.067139,371.121826 241.290848,375.129456 241.834183,378.452850 243.336304,376.986664 243.528061,376.937775 243.719818,376.888916 243.911591,376.791168 244.071396,376.644531 244.390976,376.351288 244.678635,376.009186 244.934311,375.618195 245.126068,375.324951 245.221939,375.129456 245.285858,375.031708 245.253906,372.490265 244.486862,365.159241 244.199219,361.884705 244.774506,357.779327 "
style="fill:url(#radialGradient1920-264-381);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1496"
points="262.192749,389.449432 260.115326,391.160004 258.261658,394.287933 256.663635,394.532288 255.992477,392.968323 255.065643,395.802979 253.851151,400.885864 250.783005,404.209290 250.175766,401.276855 249.344803,399.810638 245.573502,402.889679 242.537292,406.213104 240.747543,406.995056 238.126801,409.878601 236.049423,409.976349 233.748291,411.002716 231.606964,415.010315 228.986237,420.826294 226.333542,423.123352 220.996231,428.059601 216.617691,433.680054 213.485611,439.349396 210.385483,446.582703 209.171005,453.278381 210.353516,458.605591 214.220703,458.654480 216.777496,458.752228 218.535294,460.560547 223.648911,456.504028 228.187241,452.252045 232.693619,447.511292 237.775253,441.402100 243.400223,433.386810 247.906586,425.811401 251.677872,418.529236 255.161514,410.611694 258.069885,403.134064 260.690613,394.923279 262.192749,389.449432 "
style="fill:url(#radialGradient20143-627-23);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

+602
View File
@@ -0,0 +1,602 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/bill/Dropbox/src/wsjtx-dev/icons/windows-icons/icon_1024x1024.png"
version="1.1"
width="1024"
sodipodi:version="0.32"
sodipodi:docname="wsjtx_globe_1024x1024.svg"
inkscape:version="0.48.4 r9939"
id="svg1432"
height="1024">
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="svg1432"
inkscape:cx="512"
inkscape:cy="512"
inkscape:guide-bbox="true"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-height="858"
inkscape:window-width="1114"
inkscape:window-x="72"
inkscape:window-y="31"
inkscape:zoom="0.69433594"
pagecolor="#ffffff"
showborder="true"
showguides="true"
showgrid="false"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false" />
<metadata
id="metadata3060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title />
<dc:description>Simple globe centered on North America</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>earth globe northamerica</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>May 1, 2005</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs1759">
<linearGradient
id="linearGradient37658">
<stop
style="stop-color:#2f7aff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop37660" />
<stop
style="stop-color:#0000b3;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop37662" />
</linearGradient>
<linearGradient
id="linearGradient20137">
<stop
style="stop-color:#00bf00;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop20139" />
<stop
style="stop-color:#007500;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop20141" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658-427"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664-403"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<linearGradient
id="linearGradient37658-427">
<stop
style="stop-color:#488afe;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7178" />
<stop
style="stop-color:#0000cc;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7180" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-396"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902-893"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-396">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7184" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7186" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-527"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904-666"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-527">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7190" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7192" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-774"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906-717"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-774">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7196" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7198" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-253"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908-922"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-253">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7202" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7204" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-972"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910-261"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-972">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7208" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7210" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-945"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912-713"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-945">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7214" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7216" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-600"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914-146"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-600">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7220" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7222" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-196"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916-817"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-196">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7226" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7228" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-388"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918-23"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-388">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7232" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7234" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-202"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920-260"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-202">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7238" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7240" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-151"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143-884"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-151">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7244" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7246" />
</linearGradient>
</defs>
<desc
id="desc1434">wmf2svg</desc>
<polyline
transform="matrix(2.2285926,-3.5745108,2.3232002,1.4484387,-677.00545,692.67468)"
style="fill:url(#radialGradient37664-403);fill-opacity:1;stroke:#0c0c0c;stroke-width:0.6875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
points="103.191467,409.292114 100.730545,403.134064 98.525299,396.927094 96.543777,390.573547 94.785973,384.171082 93.219925,377.622009 91.909569,371.072968 90.790962,364.426147 89.928040,357.779327 89.256882,351.083649 88.777481,344.387970 88.521805,337.692261 88.489838,330.947693 88.681602,324.300873 89.033165,317.605194 89.640404,311.007263 90.407448,304.458221 91.398209,298.006897 92.580727,291.604431 93.986977,285.299744 95.553017,279.092804 97.342781,272.983582 99.324303,267.069916 101.465622,261.253937 103.830666,255.584595 106.387474,250.110733 109.104080,244.783508 112.012444,239.700668 115.112572,234.764420 118.404449,230.072571 121.856140,225.625061 125.499588,221.373062 129.302826,217.414291 133.265884,213.748779 137.260895,210.425354 141.351776,207.444077 145.506577,204.804901 149.725311,202.556717 153.975983,200.601776 158.258652,198.988937 162.573242,197.718231 166.919815,196.789627 171.266373,196.154266 175.644897,195.909912 179.991470,195.909912 184.338043,196.300888 188.652649,196.985123 192.967270,197.962585 197.217941,199.233307 201.468628,200.846130 205.623444,202.801071 209.746277,205.000397 213.805222,207.541809 217.768265,210.376495 221.667389,213.504395 225.470627,216.876678 229.177994,220.591064 232.789490,224.598709 236.273132,228.850708 239.628937,233.444839 242.856903,238.283325 245.957031,243.366180 248.929321,248.791153 251.709839,254.411621 254.362534,260.374207 256.791504,266.483398 258.996704,272.739227 261.010223,279.043915 262.768005,285.495270 264.302094,291.995453 265.644409,298.593384 266.731079,305.191315 267.625946,311.838104 268.297119,318.533813 268.744537,325.278351 269.000244,331.974030 269.032166,338.669739 268.872375,345.365448 268.488861,352.012238 267.913574,358.610168 267.114594,365.159241 266.123840,371.659424 264.941284,378.061890 263.567017,384.366577 261.969025,390.573547 260.211212,396.633850 258.229706,402.596436 256.056396,408.412384 253.723328,414.032837 251.166504,419.555603 248.449905,424.833923 245.509598,429.965668 242.409470,434.853027 239.149536,439.593750 235.697845,444.041260 232.054413,448.244385 228.219193,452.252045 224.288116,455.917542 220.261139,459.240967 216.170258,462.173401 212.015442,464.812561 207.828674,467.109589 203.577988,469.064545 199.263397,470.628510 194.948776,471.899200 190.634186,472.876678 186.255646,473.463196 181.909073,473.756439 177.562500,473.707550 173.215942,473.365448 168.869370,472.681213 164.586731,471.703735 160.304077,470.384155 156.085358,468.771332 151.898590,466.865265 147.807709,464.617065 143.748779,462.124512 139.753769,459.289856 135.854645,456.161926 132.051392,452.740753 128.344025,449.026367 124.764503,445.067596 121.280853,440.766724 117.893089,436.221466 114.665123,431.382996 111.565002,426.251282 108.624680,420.875153 105.812187,415.205811 103.191467,409.292114 "
id="polyline1560" />
<g
transform="matrix(4.1610916,0,0,4.1610916,-268.34786,-716.6628)"
style="fill:url(#radialGradient1902-893);fill-opacity:1;fill-rule:evenodd"
inkscape:label="Continents"
id="Continents">
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1904-666);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="132.818436,384.610931 131.827682,384.953064 128.184235,388.227600 126.074867,388.667450 123.422180,385.441803 120.417938,385.832794 117.126053,389.107300 116.838409,393.896912 116.902328,400.641479 115.655891,409.292114 114.409447,415.352448 115.432167,418.235992 113.578484,420.386444 111.053642,420.924042 109.903076,422.732361 109.871117,423.172241 116.295090,433.728943 123.262383,443.161530 130.836914,451.421204 140.904327,460.071808 151.195465,466.425385 153.528549,464.470428 157.683365,463.248596 162.509323,463.688446 165.321808,463.835083 165.577484,459.387573 165.066132,457.628113 162.381485,454.793457 158.162750,448.244385 155.094604,442.526184 156.884354,433.680054 153.496597,425.664764 151.738800,419.017975 150.811951,410.220703 147.743790,405.479980 144.579727,397.953430 142.438416,395.851868 141.447662,389.058441 138.858887,386.419281 135.886597,384.855316 133.968994,384.219940 133.201950,380.994293 131.667877,376.351288 131.923553,370.926331 132.850403,369.069122 135.407196,368.140533 137.292847,366.625458 137.452652,362.911041 136.557755,358.316925 134.736038,353.967194 135.886597,352.158844 138.123810,351.914490 141.255890,349.812927 141.223938,346.245178 139.050644,343.557098 136.973236,343.654846 135.471115,341.602142 134.863876,337.643402 135.407196,330.947693 138.219681,327.575439 141.191971,325.571625 145.890106,326.158081 148.510818,330.361237 149.469635,333.635773 149.565506,336.421570 150.588226,338.327637 152.314072,339.891571 153.656403,344.045837 154.135788,348.737701 152.665634,353.771698 151.578995,357.730469 152.985229,359.587646 155.094604,356.557495 156.468872,353.234070 159.153519,351.572388 161.870132,351.474609 165.865143,353.967194 168.517807,355.237885 171.458130,352.696472 175.389221,351.425751 178.457397,351.621246 179.416199,352.940857 181.301834,352.403229 184.497833,352.452087 185.968002,353.918335 186.095840,356.704102 187.949539,357.143951 190.602203,359.392151 192.551788,361.004974 193.670380,358.610168 191.912582,355.482269 191.561020,353.576202 193.095093,351.767883 192.583740,349.030945 190.442413,347.906860 188.620697,346.147400 189.259888,345.169952 191.976501,346.049652 195.044662,348.835449 196.259140,351.230255 198.624191,353.771698 200.733551,353.282928 202.363510,350.057312 203.609955,343.996979 204.153275,334.710999 202.906830,330.752228 202.331558,328.406281 203.258408,324.594147 202.459396,316.676605 201.053146,314.819397 198.496353,317.311981 195.300339,320.781982 194.788971,323.567780 192.871368,323.518921 189.739288,325.669373 186.894852,327.477692 187.342285,323.470032 188.524796,319.755646 190.666138,317.311981 190.314575,313.450958 189.132050,308.123718 190.090851,304.898071 193.734299,301.965637 197.601471,302.063385 202.107834,303.773987 205.559525,305.875519 207.796722,306.217651 208.435928,302.698761 206.678116,300.548309 206.038925,296.980560 207.796722,294.585724 209.490601,292.581909 208.627686,290.529205 205.783249,292.386414 203.961517,291.555573 204.057388,289.258514 207.189484,286.130615 208.787491,282.953796 208.627686,279.532684 209.874130,275.427277 208.276123,272.152740 206.198730,271.273010 205.783249,275.231781 204.185242,277.479980 203.929565,281.927460 201.788239,283.393677 202.715073,269.513580 203.546036,261.938171 204.888351,257.050812 206.997711,254.998108 209.426682,251.283707 209.171005,248.595657 207.541046,244.734634 206.262650,243.708313 205.687363,241.362366 204.600723,239.211929 202.715073,239.798416 201.276871,239.896149 200.030426,234.959930 197.697342,233.395966 194.916824,233.884705 192.743546,234.715546 191.976501,231.929764 192.264130,228.068741 190.698090,230.903412 191.145538,235.986282 191.912582,241.362366 192.104340,246.347473 190.154770,250.208496 187.406204,253.238663 182.548279,255.780090 177.338791,257.979401 173.695343,260.911804 171.745789,262.866760 169.956009,265.603668 166.696106,264.919464 162.924805,265.066071 158.290604,266.092438 153.464630,269.220306 146.944778,274.352051 145.091095,277.479980 141.671371,283.442566 138.954773,288.036682 135.918564,293.950378 135.119568,298.593384 135.503082,301.476929 136.334045,297.420410 138.091858,294.048126 140.361008,290.871338 142.310577,287.987793 143.365265,289.502869 141.959015,292.190948 138.283615,298.055786 135.087601,306.071045 132.946274,309.492188 130.900833,310.176422 129.686356,314.330688 130.069870,319.755646 128.919312,329.628113 129.494598,334.515503 130.677109,341.797638 131.603958,350.546021 131.540024,355.482269 130.964752,360.565125 128.280106,366.772064 129.047150,373.125641 129.654404,377.084412 131.476105,380.456665 132.818436,384.610931 "
id="polyline1460" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1906-717);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="144.579727,355.237885 146.497345,357.241699 147.583984,362.324585 148.638672,368.384918 149.980988,372.539154 150.364502,377.035553 148.798477,377.279877 146.753021,373.467743 146.976746,368.433777 146.593216,362.959930 144.579727,355.237885 "
id="polyline1464" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1908-922);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="150.108826,378.892731 148.830429,379.870209 149.309830,383.584595 150.172745,386.614777 152.633667,390.964508 152.505829,386.565887 153.336792,386.077148 153.017197,383.780090 150.108826,378.892731 "
id="polyline1468" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1910-261);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="201.181000,353.820557 200.797470,356.459747 200.413956,361.053864 199.966507,365.990082 199.007706,368.238281 196.866379,363.204285 197.921066,357.681580 199.103592,354.895782 201.181000,353.820557 "
id="polyline1472" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1912-713);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="204.632675,320.342133 203.993469,316.774353 202.906830,312.668976 206.230682,314.575043 208.883362,312.277985 209.842163,309.052338 208.915314,303.822876 208.563766,299.961853 209.874130,294.487976 212.430923,295.514343 213.261887,299.570862 213.581497,305.386810 213.837173,310.958405 212.111328,314.917175 211.951538,317.018738 212.335052,321.466217 210.800964,325.913727 208.691605,325.376099 206.454407,326.646820 205.016205,324.203125 204.632675,320.342133 "
id="polyline1476" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1914-146);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="213.773254,334.955322 213.709335,340.820160 213.869125,343.263885 216.362015,346.636139 219.526062,350.594910 218.695099,344.632324 219.685867,341.406677 222.722061,339.060730 227.835663,334.662109 230.648163,335.786194 233.332809,333.147003 234.355515,326.011475 234.675125,319.218048 233.556534,312.522369 233.588486,306.071045 231.511078,300.646057 228.890350,297.420410 226.365509,296.980560 225.246902,294.830109 226.365509,293.461639 225.023193,290.235992 222.338547,287.401337 220.964264,289.698364 217.352783,290.675842 216.330063,294.292480 216.362015,299.375336 220.644653,297.469269 222.754028,297.958038 220.708588,301.623535 219.941544,306.852997 220.293106,310.714020 219.845657,317.654083 219.078629,323.909912 214.955765,329.237122 215.083618,333.000397 213.773254,334.955322 "
id="polyline1480" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1916-817);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="232.533813,338.767487 230.200729,341.748779 229.401718,344.436798 229.721313,347.662476 233.460648,348.542206 237.040161,346.929382 237.231934,342.872864 235.378250,340.478088 233.620453,340.282562 232.533813,338.767487 "
id="polyline1484" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1918-23);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="264.877380,375.813690 262.991730,379.919098 260.371002,382.167236 258.645172,385.148529 258.645172,389.693817 256.887360,391.062256 255.161514,388.911804 254.522308,386.956848 252.732559,385.197418 253.339798,391.697632 251.709839,392.332977 249.792236,387.738861 248.322067,389.840393 246.724060,393.017212 244.327072,395.412018 242.952774,399.664001 241.514587,403.329529 241.067139,407.337158 239.565018,407.190552 238.318573,407.777039 235.665894,409.096649 233.173004,407.679291 233.141052,401.570068 234.707092,399.712891 235.122574,395.705231 237.231934,393.652588 239.692856,394.434540 241.834183,392.039734 240.843414,387.152374 239.980499,385.099670 240.907349,382.265015 244.550781,379.332581 247.043671,372.685760 247.139542,368.384918 249.121078,365.110352 252.125320,361.151611 254.202728,353.967194 256.503845,350.399414 255.992477,346.684998 255.864655,342.335266 255.832672,339.744965 254.586243,339.353973 254.074875,342.139771 251.581985,340.722412 252.189240,343.654846 251.997467,347.760223 251.294357,352.647583 251.486115,357.632721 248.897354,354.993530 246.915833,355.335632 246.020950,351.670135 245.733307,346.489502 247.778748,340.233704 248.002472,336.763672 247.586990,329.774750 247.299347,324.545258 248.705597,319.315765 251.230438,321.319580 254.234680,326.451324 255.608963,324.154266 255.097595,321.417358 253.915070,321.612854 252.253159,317.702942 254.202728,316.774353 253.883118,313.548676 254.714081,310.469666 254.746033,303.969452 255.001724,293.999268 253.947052,293.070679 252.349030,292.777405 250.495346,290.382599 250.303589,287.938934 249.312836,284.077911 247.235428,279.679291 245.381744,278.261963 242.920822,273.912201 241.546539,269.122559 241.035172,265.408173 242.345535,263.502106 240.555771,258.761383 238.734055,257.979401 236.560776,253.336411 234.131805,249.573120 232.501846,251.185959 230.648163,249.768631 228.315079,245.272247 226.653152,244.343658 225.438675,246.494095 223.808701,245.174515 220.964264,239.896149 219.430176,240.775894 217.672379,242.193222 216.170258,241.069122 212.718582,239.945023 210.257645,239.114182 207.509079,237.647964 205.527557,234.422318 206.805954,234.471191 209.362778,234.520065 210.225693,233.004974 208.979248,230.072571 209.810211,226.993515 210.737045,224.109970 213.325806,224.794220 215.722824,225.967178 216.745544,227.873245 219.781738,227.531128 222.114822,224.549835 224.032425,226.553665 226.844925,229.241714 229.785248,226.700287 230.136795,223.425751 229.721313,220.933197 236.592728,229.290573 241.898102,236.768250 246.564270,244.490280 251.837677,254.704865 255.960541,264.332947 260.115326,276.258118 264.302094,291.995453 267.210449,308.514740 268.393005,320.537628 269.000244,333.538025 268.840424,345.169952 268.201202,356.557495 266.794983,367.358551 265.516571,374.933960 264.877380,375.813690 "
id="polyline1488" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1920-260);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="244.774506,357.779327 243.304337,356.313110 242.345535,358.512421 241.131058,362.666687 239.916580,364.817108 238.062897,367.945038 237.615448,372.930145 238.414459,375.324951 239.373245,373.125641 239.852661,368.727020 240.683624,367.602905 241.067139,371.121826 241.290848,375.129456 241.834183,378.452850 243.336304,376.986664 243.528061,376.937775 243.719818,376.888916 243.911591,376.791168 244.071396,376.644531 244.390976,376.351288 244.678635,376.009186 244.934311,375.618195 245.126068,375.324951 245.221939,375.129456 245.285858,375.031708 245.253906,372.490265 244.486862,365.159241 244.199219,361.884705 244.774506,357.779327 "
id="polyline1492" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient20143-884);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="262.192749,389.449432 260.115326,391.160004 258.261658,394.287933 256.663635,394.532288 255.992477,392.968323 255.065643,395.802979 253.851151,400.885864 250.783005,404.209290 250.175766,401.276855 249.344803,399.810638 245.573502,402.889679 242.537292,406.213104 240.747543,406.995056 238.126801,409.878601 236.049423,409.976349 233.748291,411.002716 231.606964,415.010315 228.986237,420.826294 226.333542,423.123352 220.996231,428.059601 216.617691,433.680054 213.485611,439.349396 210.385483,446.582703 209.171005,453.278381 210.353516,458.605591 214.220703,458.654480 216.777496,458.752228 218.535294,460.560547 223.648911,456.504028 228.187241,452.252045 232.693619,447.511292 237.775253,441.402100 243.400223,433.386810 247.906586,425.811401 251.677872,418.529236 255.161514,410.611694 258.069885,403.134064 260.690613,394.923279 262.192749,389.449432 "
id="polyline1496" />
</g>
<text
transform="matrix(0.98267844,-0.18531886,0.18531886,0.98267844,0,0)"
sodipodi:linespacing="125%"
id="text3096"
y="456.47293"
x="394.15689"
style="font-size:187.56237793000002512px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8119;fill-opacity:0.77168947;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
xml:space="preserve"><tspan
dy="-109.78781"
dx="0 -9.8032694 -11.763925 -17.645885"
id="tspan3102"
y="456.47293"
x="394.15692"
sodipodi:role="line">WSJT-X</tspan><tspan
dx="0 -17.645885 -23.527849 -13.724579 29.30662 29.30662 -17.645885 -23.527849"
id="tspan3874"
y="690.92584"
x="394.15689"
sodipodi:role="line">JT65&amp;JT9</tspan><tspan
dy="91.489815"
dx="0 0 0 0 -17.645885 -5.8819623 -17.645885"
id="tspan3100"
y="925.37885"
x="394.15689"
sodipodi:role="line">by K1JT</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

-1699
View File
File diff suppressed because it is too large Load Diff
+13 -182
View File
@@ -4,8 +4,6 @@
#include <QRegularExpression>
#include <QDebug>
#include <varicode.h>
extern "C" {
bool stdmsg_(char const * msg, bool contest_mode, char const * mygrid, fortran_charlen_t, fortran_charlen_t);
}
@@ -17,22 +15,22 @@ namespace
DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString const& my_grid)
: string_ {the_string.left (the_string.indexOf (QChar::Nbsp))} // discard appended info
, padding_ {string_.indexOf (" ") > 4 ? 2 : 0} // allow for seconds
, padding_ {string_.indexOf (" ") > 4 ? 2 : 0} // allow for
// seconds
, contest_mode_ {contest_mode}
, message_ {string_.mid (column_qsoText + padding_).trimmed ()}
, is_standard_ {false}
, frameType_(Varicode::FrameUnknown)
, isBeacon_(false)
, isAlt_(false)
{
if(message_.length() >= 1) {
if (message_.length() >= 1)
{
message_ = message_.left (21).remove (QRegularExpression {"[<>]"});
int i1 = message_.indexOf ('\r');
if (i1 > 0) {
if (i1 > 0)
{
message_ = message_.left (i1 - 1);
}
if (message_.contains (QRegularExpression {"^(CQ|QRZ)\\s"})) {
if (message_.contains (QRegularExpression {"^(CQ|QRZ)\\s"}))
{
// TODO this magic position 16 is guaranteed to be after the
// last space in a decoded CQ or QRZ message but before any
// appended DXCC entity name or worked before information
@@ -42,185 +40,18 @@ DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString
// remove DXCC entity and worked B4 status. TODO need a better way to do this
message_ = message_.left (eom_pos + 1);
}
// stdmsg is a fortran routine that packs the text, unpacks it
// and compares the result
auto message_c_string = message_.toLocal8Bit ();
message_c_string += QByteArray {22 - message_c_string.size (), ' '};
auto grid_c_string = my_grid.toLocal8Bit ();
grid_c_string += QByteArray {6 - grid_c_string.size (), ' '};
is_standard_ = stdmsg_ (message_c_string.constData (), contest_mode_, grid_c_string.constData (), 22, 6);
// We're only going to unpack standard messages for CQs && beacons...
// TODO: jsherer - this is a hack for now...
if(is_standard_){
is_standard_ = QRegularExpression("^(CQ|DE|QRZ)\\s").match(message_).hasMatch();
is_standard_ = stdmsg_ (message_c_string.constData ()
, contest_mode_
, grid_c_string.constData ()
, 22, 6);
}
}
tryUnpack();
}
DecodedText::DecodedText (QString const& ft8callmessage):
frameType_(Varicode::FrameUnknown),
message_(ft8callmessage),
isBeacon_(false),
isAlt_(false)
{
is_standard_ = QRegularExpression("^(CQ|DE|QRZ)\\s").match(message_).hasMatch();
tryUnpack();
}
bool DecodedText::tryUnpack(){
if(is_standard_){
message_ = message_.append(" ");
return false;
}
bool unpacked = false;
if(!unpacked){
unpacked = tryUnpackBeacon();
}
if(!unpacked){
unpacked = tryUnpackCompound();
}
if(!unpacked){
unpacked = tryUnpackDirected();
}
if(!unpacked){
unpacked = tryUnpackData();
}
return unpacked;
}
bool DecodedText::tryUnpackBeacon(){
QString m = message().trimmed();
// directed calls will always be 12+ chars and contain no spaces.
if(m.length() < 12 || m.contains(' ')){
return false;
}
bool isAlt = false;
quint8 type = Varicode::FrameUnknown;
quint8 bits3 = 0;
QStringList parts = Varicode::unpackBeaconMessage(m, &type, &isAlt, &bits3);
if(parts.isEmpty() || parts.length() < 2){
return false;
}
// Beacon Alt Type
// ---------------
// 1 0 BCN
// 1 1 CQ
isBeacon_ = true;
isAlt_ = isAlt;
extra_ = parts.length() < 3 ? "" : parts.at(2);
QStringList cmp;
if(!parts.at(0).isEmpty()){
cmp.append(parts.at(0));
}
if(!parts.at(1).isEmpty()){
cmp.append(parts.at(1));
}
compound_ = cmp.join("/");
message_ = QString("%1: %2 %3 ").arg(compound_).arg(isAlt ? Varicode::cqString(bits3) : "BEACON").arg(extra_);
frameType_ = type;
return true;
}
bool DecodedText::tryUnpackCompound(){
auto m = message().trimmed();
// directed calls will always be 12+ chars and contain no spaces.
if(m.length() < 12 || m.contains(' ')){
return false;
}
quint8 type = Varicode::FrameUnknown;
quint8 bits3 = 0;
auto parts = Varicode::unpackCompoundMessage(m, &type, &bits3);
if(parts.isEmpty() || parts.length() < 2){
return false;
}
QStringList cmp;
if(!parts.at(0).isEmpty()){
cmp.append(parts.at(0));
}
if(!parts.at(1).isEmpty()){
cmp.append(parts.at(1));
}
compound_ = cmp.join("/");
extra_ = parts.length() < 3 ? "" : parts.mid(2).join(" ");
if(type == Varicode::FrameCompound){
message_ = QString("%1: ").arg(compound_);
} else if(type == Varicode::FrameCompoundDirected){
message_ = QString("%1%2 ").arg(compound_).arg(extra_);
directed_ = QStringList{ "<....>", compound_ } + parts.mid(2);
}
frameType_ = type;
return true;
}
bool DecodedText::tryUnpackDirected(){
QString m = message().trimmed();
// directed calls will always be 12+ chars and contain no spaces.
if(m.length() < 12 || m.contains(' ')){
return false;
}
quint8 type = Varicode::FrameUnknown;
QStringList parts = Varicode::unpackDirectedMessage(m, &type);
if(parts.isEmpty()){
return false;
}
if(parts.length() == 3){
// replace it with the correct unpacked (directed)
message_ = QString("%1: %2%3 ").arg(parts.at(0), parts.at(1), parts.at(2));
} else if(parts.length() == 4){
// replace it with the correct unpacked (directed numeric)
message_ = QString("%1: %2%3 %4 ").arg(parts.at(0), parts.at(1), parts.at(2), parts.at(3));
} else {
// replace it with the correct unpacked (freetext)
message_ = QString(parts.join(""));
}
directed_ = parts;
frameType_ = type;
return true;
}
bool DecodedText::tryUnpackData(){
QString m = message().trimmed();
// data frames calls will always be 12+ chars and contain no spaces.
if(m.length() < 12 || m.contains(' ')){
return false;
}
quint8 type = Varicode::FrameUnknown;
QString data = Varicode::unpackDataMessage(m, &type);
if(data.isEmpty()){
return false;
}
message_ = data;
frameType_ = type;
return true;
}
};
QStringList DecodedText::messageWords () const
{
+6 -35
View File
@@ -10,7 +10,6 @@
#define DECODEDTEXT_H
#include <QString>
#include <QStringList>
@@ -31,35 +30,15 @@ class DecodedText
{
public:
explicit DecodedText (QString const& message, bool, QString const& my_grid);
explicit DecodedText (QString const& ft8callmessage);
bool tryUnpack();
bool tryUnpackBeacon();
bool tryUnpackCompound();
bool tryUnpackDirected();
bool tryUnpackData();
quint8 frameType() const { return frameType_; }
QString extra() const { return extra_; }
QString compoundCall() const { return compound_; }
bool isCompound() const { return !compound_.isEmpty(); }
bool isBeacon() const { return isBeacon_; }
bool isAlt() const { return isAlt_; }
QStringList directedMessage() const { return directed_; }
bool isDirectedMessage() const { return !directed_.isEmpty() && directed_.length() > 2; }
QString string() const { return string_; }
QString message() const { return message_; }
QString string() const { return string_; };
QStringList messageWords () const;
int indexOf(QString s) const { return string_.indexOf(s); }
int indexOf(QString s, int i) const { return string_.indexOf(s,i); }
QString mid(int f, int t) const { return string_.mid(f,t); }
QString left(int i) const { return string_.left(i); }
int indexOf(QString s) const { return string_.indexOf(s); };
int indexOf(QString s, int i) const { return string_.indexOf(s,i); };
QString mid(int f, int t) const { return string_.mid(f,t); };
QString left(int i) const { return string_.left(i); };
void clear() { string_.clear(); }
void clear() { string_.clear(); };
QString CQersCall() const;
@@ -70,8 +49,6 @@ public:
bool isLowConfidence () const;
int frequencyOffset() const; // hertz offset from the tuned dial or rx frequency, aka audio frequency
int snr() const;
bool hasBits() const { return !string_.right(5).trimmed().isEmpty(); }
int bits() const { return string_.right(5).trimmed().toShort(); }
float dt() const;
// find and extract any report. Returns true if this is a standard message
@@ -98,12 +75,6 @@ private:
column_mode = 19,
column_qsoText = 22 };
quint8 frameType_;
bool isBeacon_;
bool isAlt_;
QString compound_;
QString extra_;
QStringList directed_;
QString string_;
int padding_;
bool contest_mode_;
+2 -2
View File
@@ -277,7 +277,7 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con
void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 txFreq,
QColor color_ReceivedMsg, bool bFastMode)
QColor color_TxMsg, bool bFastMode)
{
QString t1=" @ ";
if(modeTx=="FT8") t1=" ~ ";
@@ -297,7 +297,7 @@ void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 tx
t = QDateTime::currentDateTimeUtc().toString("hhmm") + \
" Tx " + t2 + t1 + text;
}
appendText (t, color_ReceivedMsg);
appendText (t, color_TxMsg);
}
void DisplayText::displayQSY(QString text)
+1 -1
View File
@@ -26,7 +26,7 @@ public:
LogBook const& logBook, QColor color_CQ, QColor color_MyCall,
QColor color_DXCC, QColor color_NewCall, bool ppfx, bool bCQonly=false);
void displayTransmittedText(QString text, QString modeTx, qint32 txFreq,
QColor color_ReceivedMsg, bool bFastMode);
QColor color_TxMsg, bool bFastMode);
void displayQSY(QString text);
void displayFoxToBeCalled(QString t, QColor bg);
-11
View File
@@ -1,11 +0,0 @@
[Desktop Entry]
Version=1.0
Name=ft8call
Comment=Amateur Radio Weak Signal Operating
Exec=ft8call
Icon=ft8call_icon
Terminal=false
X-MultipleArgs=false
Type=Application
Categories=AudioVideo;Audio;HamRadio;
StartupNotify=true
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

-29
View File
@@ -1,29 +0,0 @@
#include "keyeater.h"
bool EscapeKeyPressEater::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Escape){
return true;
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
bool EnterKeyPressEater::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return){
bool processed = false;
emit this->enterKeyPressed(obj, keyEvent, &processed);
if(processed){
return true;
}
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
-33
View File
@@ -1,33 +0,0 @@
#ifndef KEYEATER_H
#define KEYEATER_H
#include <QObject>
#include <QKeyEvent>
class EscapeKeyPressEater : public QObject
{
Q_OBJECT
public:
EscapeKeyPressEater(){}
virtual ~EscapeKeyPressEater(){}
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
class EnterKeyPressEater : public QObject
{
Q_OBJECT
public:
EnterKeyPressEater(){}
virtual ~EnterKeyPressEater(){}
protected:
bool eventFilter(QObject *obj, QEvent *event);
public:
Q_SIGNAL void enterKeyPressed(QObject *obj, QKeyEvent *evt, bool *pProcessed);
};
#endif // KEYEATER_H
-1
View File
@@ -16,7 +16,6 @@ subroutine chkcrc12a(decoded,nbadcrc)
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
i1Dec8BitBytes(11)=0
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
icrc12=xor(icrc12, 41)
nbadcrc=1
if(ncrc12.eq.icrc12) nbadcrc=0
+2 -13
View File
@@ -2,15 +2,13 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
use iso_c_binding, only: c_loc,c_size_t
use crc
use packjt
character*68 alphabet
character*22 msgreceived
character*87 cbits
integer*1 decoded(87)
integer*1, target:: i1Dec8BitBytes(11)
integer*4 i4Dec6BitWords(12)
alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+/?.'
! Write decoded bits into cbits: 75-bit message plus 12-bit CRC
write(cbits,1000) decoded
1000 format(87i1)
@@ -22,7 +20,6 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
i1Dec8BitBytes(11)=0
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
icrc12=xor(icrc12, 41)
if(ncrc12.eq.icrc12 .or. sum(decoded(57:87)).eq.0) then !### Kludge ###
! CRC12 checks out --- unpack 72-bit message
@@ -33,15 +30,7 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
enddo
i4Dec6BitWords(ibyte)=itmp
enddo
!call unpackmsg(i4Dec6BitWords,msgreceived,.false.,' ')
msgreceived=' '
do ibyte=1,12
itmp=i4Dec6BitWords(ibyte)
msgreceived(ibyte:ibyte) = alphabet(itmp+1:itmp+1)
enddo
call unpackmsg(i4Dec6BitWords,msgreceived,.false.,' ')
ncrcflag=1
else
msgreceived=' '
-1
View File
@@ -73,7 +73,6 @@ subroutine foxgen()
read(cb88,1003) i1Msg8BitBytes(1:11)
1003 format(11b8)
icrc12=crc12(c_loc(i1Msg8BitBytes),11)
icrc12=xor(icrc12, 41)
write(cbits,1001) msgbits(1:56),icrc10,nrpt,i3b,icrc12
read(cbits,1002) msgbits
+13 -13
View File
@@ -10,19 +10,19 @@ subroutine ft8apset(mycall12,mygrid6,hiscall12,hisgrid6,bcontest,apsym,iaptype)
integer*1 msgbits(KK)
integer itone(KK)
! mycall=mycall12(1:6)
! hiscall=hiscall12(1:6)
! hisgrid=hisgrid6(1:4)
! if(len_trim(hiscall).eq.0) then
! iaptype=1
! hiscall="K9AN"
! else
! iaptype=2
! endif
! hisgrid=hisgrid6(1:4)
!! if(len_trim(hisgrid).eq.0) hisgrid="EN50"
! if(index(hisgrid," ").eq.0) hisgrid="EN50"
msg='tZQpZP-slh4+' ! HELLO WORLD
mycall=mycall12(1:6)
hiscall=hiscall12(1:6)
hisgrid=hisgrid6(1:4)
if(len_trim(hiscall).eq.0) then
iaptype=1
hiscall="K9AN"
else
iaptype=2
endif
hisgrid=hisgrid6(1:4)
! if(len_trim(hisgrid).eq.0) hisgrid="EN50"
if(index(hisgrid," ").eq.0) hisgrid="EN50"
msg=mycall//' '//hiscall//' '//hisgrid
i3bit=0 ! ### TEMPORARY ??? ###
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
apsym=2*msgbits-1
+38 -6
View File
@@ -7,7 +7,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
include 'ft8_params.f90'
parameter(NP2=2812)
character*37 msg37
character message*22,msgsent*22,origmsg*22
character message*22,msgsent*22
character*12 mycall12,hiscall12
character*6 mycall6,mygrid6,hiscall6,c1,c2
character*87 cbits
@@ -374,12 +374,13 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
cycle
endif
i3bit=4*decoded(73) + 2*decoded(74) + decoded(75)
iFreeText=decoded(57)
if(nbadcrc.eq.0) then
decoded0=decoded
call extractmessage174(decoded,origmsg,ncrcflag)
if(i3bit.eq.1) decoded(57:)=0
call extractmessage174(decoded,message,ncrcflag)
decoded=decoded0
message(1:12)=origmsg(1:12)
! This needs fixing for messages with i3bit=1:
call genft8(message,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
if(lsubtract) call subtractft8(dd0,itone,f1,xdt2)
xsig=0.0
@@ -396,9 +397,40 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
if(.not.nagain) xsnr=xsnr2
if(xsnr .lt. -24.0) xsnr=-24.0
msg37=origmsg//' '
if(i3bit.eq.1) then
do i=1,12
i1hiscall(i)=ichar(hiscall12(i:i))
enddo
icrc10=crc10(c_loc(i1hiscall),12)
write(cbits,1001) decoded
1001 format(87i1)
read(cbits,1002) ncrc10,nrpt
1002 format(56x,b10,b6)
irpt=nrpt-30
i1=index(message,' ')
i2=index(message(i1+1:),' ') + i1
c1=message(1:i1)//' '
c2=message(i1+1:i2)//' '
msg37(22:22) = char(48 + i3bit)
if(ncrc10.eq.icrc10) msg37=c1//' RR73; '//c2//' <'// &
trim(hiscall12)//'> '
if(ncrc10.ne.icrc10) msg37=c1//' RR73; '//c2//' <...> '
! msg37=c1//' RR73; '//c2//' <...> '
write(msg37(35:37),1010) irpt
1010 format(i3.2)
if(msg37(35:35).ne.'-') msg37(35:35)='+'
iz=len(trim(msg37))
do iter=1,10 !Collapse multiple blanks
ib2=index(msg37(1:iz),' ')
if(ib2.lt.1) exit
msg37=msg37(1:ib2)//msg37(ib2+2:)
iz=iz-1
enddo
else
msg37=message//' '
endif
return
endif
+31 -1
View File
@@ -62,6 +62,7 @@ program ft8code
msgchk=msg
! Generate msgsent, msgbits, and itone
if(index(msg,';').le.0) then
call packmsg(msg(1:22),dgen,itype,bcontest)
msgtype=""
if(itype.eq.1) msgtype="Std Msg"
@@ -72,7 +73,10 @@ program ft8code
if(itype.eq.6) msgtype="Free text"
i3bit=0
call genft8(msg(1:22),mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
else
call foxgen_wrap(msg,msgbits,itone)
i3bit=1
endif
decoded=msgbits
i3bit=4*decoded(73) + 2*decoded(74) + decoded(75)
iFreeText=decoded(57)
@@ -81,6 +85,7 @@ program ft8code
call extractmessage174(decoded,message,ncrcflag)
decoded=decoded0
if(i3bit.eq.0) then
if(bcontest) call fix_contest_msg(mygrid6,message)
bad=" "
comment=' '
@@ -89,6 +94,31 @@ program ft8code
if(itype.eq.6 .and. len(trim(msgchk)).gt.13) comment='truncated'
write(*,1020) imsg,msgchk,message,bad,i3bit,itype,msgtype,comment
1020 format(i2,'.',1x,a22,1x,a22,1x,a1,2i2,1x,a10,1x,a9)
else
write(cbits,1001) decoded
1001 format(87i1)
read(cbits,1002) nrpt
1002 format(66x,b6)
irpt=nrpt-30
i1=index(message,' ')
i2=index(message(i1+1:),' ') + i1
c1=message(1:i1)//' '
c2=message(i1+1:i2)//' '
msg37=c1//' RR73; '//c2//' <...> '
write(msg37(35:37),1003) irpt
1003 format(i3.2)
if(msg37(35:35).ne.'-') msg37(35:35)='+'
iz=len(trim(msg37))
do iter=1,10 !Collapse multiple blanks into one
ib2=index(msg37(1:iz),' ')
if(ib2.lt.1) exit
msg37=msg37(1:ib2)//msg37(ib2+2:)
iz=iz-1
enddo
write(*,1021) imsg,msgchk,msg37
1021 format(i2,'.',1x,a40,1x,a37)
endif
enddo
+2 -15
View File
@@ -5,7 +5,6 @@ subroutine genft8(msg,mygrid,bcontest,i3bit,msgsent,msgbits,itone)
use crc
use packjt
include 'ft8_params.f90'
character*68 alphabet
character*22 msg,msgsent
character*6 mygrid
character*87 cbits
@@ -17,19 +16,8 @@ subroutine genft8(msg,mygrid,bcontest,i3bit,msgsent,msgbits,itone)
integer icos7(0:6)
data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern
alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+/?.'
itype=6
do i=1,12
v=index(alphabet, msg(i:i))
if(v.eq.0) exit
i4Msg6BitWords(i)=v - 1
enddo
msgsent=' '
msgsent(1:12)=msg(1:12)
! call packmsg(msg,i4Msg6BitWords,itype,bcontest) !Pack into 12 6-bit bytes
! call unpackmsg(i4Msg6BitWords,msgsent,bcontest,mygrid) !Unpack to get msgsent
call packmsg(msg,i4Msg6BitWords,itype,bcontest) !Pack into 12 6-bit bytes
call unpackmsg(i4Msg6BitWords,msgsent,bcontest,mygrid) !Unpack to get msgsent
write(cbits,1000) i4Msg6BitWords,32*i3bit
1000 format(12b6.6,b8.8)
@@ -38,7 +26,6 @@ subroutine genft8(msg,mygrid,bcontest,i3bit,msgsent,msgbits,itone)
i1Msg8BitBytes(10)=iand(i1Msg8BitBytes(10),128+64+32)
i1Msg8BitBytes(11)=0
icrc12=crc12(c_loc(i1Msg8BitBytes),11)
icrc12=xor(icrc12, 41)
! For reference, here's how to check the CRC
! i1Msg8BitBytes(10)=icrc12/256
-1
View File
@@ -91,7 +91,6 @@ allocate ( rxdata(N), llr(N) )
i1Msg8BitBytes(10:11)=0
checksum = crc12 (c_loc (i1Msg8BitBytes), 11)
checksum = xor(checksum, 41)
! For reference, the next 3 lines show how to check the CRC
i1Msg8BitBytes(10)=checksum/256
i1Msg8BitBytes(11)=iand (checksum,255)
-1
View File
@@ -63,7 +63,6 @@ contains
1001 format("000000_",i6.6)
call ft8apset(mycall12,mygrid6,hiscall12,hisgrid6,bcontest,apsym,iaptype)
dd=iwave
ndecodes=0
allmessages=' '
+1 -3
View File
@@ -423,9 +423,7 @@ subroutine packbits(dbits,nsymd,m0,sym)
itype=1
if(bcontest) then
!call to_contest_msg(msg0,msg)
! this causes problems with freetext ala, KN4CRD DE KN4CRD -13 R
msg=msg0
call to_contest_msg(msg0,msg)
else
msg=msg0
end if
+1 -1
View File
@@ -6,7 +6,7 @@
namespace
{
auto logFileName = "ft8call_log.adi";
auto logFileName = "wsjtx_log.adi";
auto countryFileName = "cty.dat";
}
+8 -7
View File
@@ -59,7 +59,7 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString
QString const& rptSent, QString const& rptRcvd,
QDateTime const& dateTimeOn, QDateTime const& dateTimeOff,
Radio::Frequency dialFreq, QString const& myCall, QString const& myGrid,
bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall)
bool noSuffix, bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall)
{
if(!isHidden()) return;
ui->call->setText(hisCall);
@@ -75,7 +75,8 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString
if(rptRcvd!="") t+=" Rcvd: " + rptRcvd;
ui->comments->setText(t);
}
if(toRTTY) mode="DATA";
if(noSuffix and mode.mid(0,3)=="JT9") mode="JT9";
if(toRTTY and mode.mid(0,3)=="JT9") mode="RTTY";
ui->mode->setText(mode);
ui->sent->setText(rptSent);
ui->rcvd->setText(rptRcvd);
@@ -112,10 +113,10 @@ void LogQSO::accept()
m_comments=comments;
QString strDialFreq(QString::number(m_dialFreq / 1.e6,'f',6));
operator_call = ui->loggedOperator->text();
//Log this QSO to ADIF file "ft8call_log.adi"
QString filename = "ft8call_log.adi"; // TODO allow user to set
//Log this QSO to ADIF file "wsjtx_log.adi"
QString filename = "wsjtx_log.adi"; // TODO allow user to set
ADIF adifile;
auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("ft8call_log.adi");
auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx_log.adi");
adifile.init(adifilePath);
QByteArray ADIF {adifile.QSOToADIF (hisCall, hisGrid, mode, rptSent, rptRcvd, m_dateTimeOn, m_dateTimeOff, band
@@ -137,8 +138,8 @@ void LogQSO::accept()
}
}
//Log this QSO to file "ft8call.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("ft8call.log")};
//Log this QSO to file "wsjtx.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")};
if(!f.open(QIODevice::Text | QIODevice::Append)) {
MessageBox::warning_message (this, tr ("Log file error"),
tr ("Cannot open \"%1\" for append").arg (f.fileName ()),
+1 -1
View File
@@ -33,7 +33,7 @@ public:
QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn,
QDateTime const& dateTimeOff,
Radio::Frequency dialFreq, QString const& myCall, QString const& myGrid,
bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall);
bool noSuffix, bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall);
public slots:
void accept();
+2 -8
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>285</height>
<width>377</width>
<height>257</height>
</rect>
</property>
<property name="sizePolicy">
@@ -16,12 +16,6 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>600</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QLabel" name="label">
+3 -8
View File
@@ -105,8 +105,7 @@ int main(int argc, char *argv[])
// that GUI has correct l18n
// Override programs executable basename as application name.
//a.setApplicationName ("WSJT-X");
a.setApplicationName("FT8Call");
a.setApplicationName ("WSJT-X");
a.setApplicationVersion (version ());
#if QT_VERSION >= 0x050200
@@ -260,7 +259,7 @@ int main(int argc, char *argv[])
multi_settings.set_common_value (splash_flag_name, false);
splash.close ();
});
//splash.show ();
splash.show ();
a.processEvents ();
}
}
@@ -296,12 +295,8 @@ int main(int argc, char *argv[])
mem_jt9.setKey(a.applicationName ());
if(!mem_jt9.attach()) {
std::cerr << QString("memory attach error: %1").arg(mem_jt9.error()).toLocal8Bit ().data () << std::endl;
if (!mem_jt9.create(sizeof(struct dec_data))) {
splash.hide ();
std::cerr << QString("memory create error: %1").arg(mem_jt9.error()).toLocal8Bit ().data () << std::endl;
MessageBox::critical_message (nullptr, a.translate ("main", "Shared memory error"),
a.translate ("main", "Unable to create shared memory segment"));
throw std::runtime_error {"Shared memory error"};
@@ -329,7 +324,7 @@ int main(int argc, char *argv[])
// run the application UI
MainWindow w(temp_dir, multiple, &multi_settings, &mem_jt9, downSampleFactor, &splash);
w.show();
//splash.raise ();
splash.raise ();
QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit()));
result = a.exec();
}
+730 -4518
View File
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More