Compare commits

..

475 Commits

Author SHA1 Message Date
Jordan Sherer 10310d18cf Bump Version v0.6.5 2018-09-29 18:06:31 -04:00
Jordan Sherer a74d8c9f6b Bump EOL for v0.6.5 2018-09-29 18:05:47 -04:00
Jordan Sherer c54dfbbcda Bump to 0.6.4 2018-09-15 18:07:20 -04:00
Jordan Sherer afbcf35d1c Added test button to notification sounds 2018-09-15 17:33:19 -04:00
Jordan Sherer 300ba49e8d Fix configuration styling of compose text font. Added table colors. 2018-09-15 17:33:09 -04:00
Jordan Sherer dae1118bf3 Fix ALLCALL SNR query when ALLCALL or the station calling is selected 2018-09-15 08:22:24 -04:00
Jordan Sherer ecc537475a Bump to v0.6.3 2018-09-14 08:45:40 -04:00
Jordan Sherer caef6ad1cd Bump message version to prevent incompatible CQs between 0.5 and 0.6 while we transition 2018-09-14 08:44:41 -04:00
Jordan Sherer ffbfb3b133 Fixed issue with APRS packet queue processing 2018-09-13 22:23:32 -04:00
Jordan Sherer f979e3c4a7 Removed station power from query menu 2018-09-13 16:44:47 -04:00
Jordan Sherer 2d7ff1367e Bump to v0.6.2 2018-09-13 02:05:54 -04:00
Jordan Sherer a829516a33 Fixed issue with offset qsy after a message send when using jump 2018-09-13 01:51:32 -04:00
Jordan Sherer 86d47c83b4 Fixed issues with callsigns selected after unsolicited ALLCALL 2018-09-13 01:45:27 -04:00
Jordan Sherer 735acb000e Fixed issue with ALLCALL block blocking legit directed query 2018-09-13 01:10:32 -04:00
Jordan Sherer 62042cfa33 Fixed grid display to 4 chars with tooltip for extended chars 2018-09-13 01:09:03 -04:00
Jordan Sherer 873929b3f6 Fixed configuration ui for compose textbox 2018-09-12 20:51:46 -04:00
Jordan Sherer e52a62e689 Fixed font picker remember choice 2018-09-12 16:37:58 -04:00
Jordan Sherer bafaf8a5ae Fixed saving of .wav files when it was disabled 2018-09-12 16:08:25 -04:00
Jordan Sherer f4ed9a9eac Fixed windows build 2018-09-12 11:56:38 -04:00
Jordan Sherer 71bf19b21c Bump to 0.6.1 2018-09-12 10:12:54 -04:00
Jordan Sherer 1181e68f27 Fixed highlighting when my call apprears in the band activity 2018-09-12 10:05:35 -04:00
Jordan Sherer 0722bdad52 Added application font name to button 2018-09-12 09:59:13 -04:00
Jordan Sherer 92c88f6c0a Moved notifications to a new configuration tab 2018-09-12 09:55:31 -04:00
Jordan Sherer 67a5f49ba2 Fixed installer icons 2018-09-12 09:29:24 -04:00
Jordan Sherer d715b1d534 Fixed band and call activity sorting when empty values are present 2018-09-12 09:04:22 -04:00
Jordan Sherer 23e378f977 Fixed QSY frequency offset of band and call activity 2018-09-11 23:03:44 -04:00
Jordan Sherer f27d664f61 Updated behavior of allcall to not respond automatically if we have a callsign selected 2018-09-11 19:04:54 -04:00
Jordan Sherer 16c665d199 Newline should remove block from cache 2018-09-11 18:58:33 -04:00
Jordan Sherer 0b11b1b1d3 Changed offset qsy to be a specific action. Clicking the tables no longer change your offset 2018-09-11 18:54:32 -04:00
Jordan Sherer e699d2e081 Fixed buffered messages from ages ago getting sent 2018-09-11 17:41:21 -04:00
Jordan Sherer 9f25842c79 Fixed message reply dialog to be non-modal 2018-09-11 13:35:29 -04:00
Jordan Sherer fddca6522e Added more sane defaults to tx watchdog. Fixed bug in relay disabled when no relay required 2018-09-11 11:20:17 -04:00
Jordan Sherer df0b06ccb7 Allow configuration for rig frequency changes during transmit 2018-09-11 10:52:07 -04:00
Jordan Sherer e9aa4203b5 Updated build for OSX 2018-09-10 13:18:34 -04:00
Jordan Sherer 418e071a8d Fixed QAction to support older versions of Qt 2018-09-10 10:22:24 -04:00
Jordan Sherer 4ca8ac338e Fixed template initialization defininition 2018-09-10 10:18:13 -04:00
Jordan Sherer acbd1080d5 Fixed issue with APRSIS passcode validity check 2018-09-10 10:12:42 -04:00
Jordan Sherer ae62a73b58 FT8Call icons 2018-09-10 09:05:03 -04:00
Jordan Sherer 95cd09c7f2 Updated icons 2018-09-09 22:50:44 -04:00
Jordan Sherer 0b49dc0398 Updated CPack for installation locations 2018-09-09 21:57:44 -04:00
Jordan Sherer 4b28f9eca5 Added QSY function to waterfall controls for centering a signal in the bandpass 2018-09-09 17:18:07 -04:00
Jordan Sherer 5a18b3f9fb Added ability to open settings to a specific tab to make editing macros easier 2018-09-09 15:47:26 -04:00
Jordan Sherer 8b9042e2d6 Added a huff escape for the ' DE ' sequence
Allows for better efficiency for multi-hop relay paths.
2018-09-09 15:38:35 -04:00
Jordan Sherer 826b829941 Added a default color for tx messages 2018-09-09 14:59:16 -04:00
Jordan Sherer a36ed10fe2 Fixed ALLCALL from bumping the directed or recent cache so we get fewer random messages mid-stream 2018-09-09 14:56:19 -04:00
Jordan Sherer 8d0d93d10e Added configuration option to disable message passing, even while AUTO is on 2018-09-09 14:37:34 -04:00
Jordan Sherer ca537f5e9f Stable sort callsigns 2018-09-09 14:22:21 -04:00
Jordan Sherer e0c3592868 Added relay actions and relay via menu. Removed retransmit and alert actions as they are superseded by relay/reply dialog 2018-09-09 12:40:02 -04:00
Jordan Sherer 3a9750015d Added a 'Relay via' menu and "hearing" of third party callsigns. 2018-09-09 10:42:36 -04:00
Jordan Sherer 38ddf11479 Added a custom reply dialog box so we can customize the text input validator (upper case text only) 2018-09-09 10:04:19 -04:00
Jordan Sherer 15ee95360f Initial cut of relay 2018-09-08 23:36:12 -04:00
Jordan Sherer 308a45efe0 Fixed inactive and highlight palletes for the table views 2018-09-08 14:31:21 -04:00
Jordan Sherer ad060dad81 Added about dialog. Most important feature since 0.0.1 2018-09-07 20:07:10 -04:00
Jordan Sherer 35139c6d84 Only issue a directed message alert for directed to me...not ALLCALL 2018-09-07 17:33:28 -04:00
Jordan Sherer 942d960a90 Bump EOL 2018-09-07 15:42:43 -04:00
Jordan Sherer b4c95e4313 Added directed message and alert message notification sound configuration options 2018-09-07 15:38:11 -04:00
Jordan Sherer 293781079a Bump to 0.6.0 2018-09-07 11:30:02 -04:00
Jordan Sherer 003120d998 Dummy Data on Startup 2018-09-07 11:20:10 -04:00
Jordan Sherer 57f84c8e2b Fixed stations heard and qso queries respecting callsign aging 2018-09-07 11:15:58 -04:00
Jordan Sherer 231c75715a Added deselect button to main button row 2018-09-07 10:33:53 -04:00
Jordan Sherer 0a1a08a1a5 Added random delay to APRS packet submission 2018-09-07 10:22:36 -04:00
Jordan Sherer 775008be48 Added configuration options to style transmit and receive text 2018-09-07 10:12:40 -04:00
Jordan Sherer b0937ffe18 To help with QRM, beacons now transmit between 500Hz and 1000Hz offset. 2018-09-06 17:52:29 -04:00
Jordan Sherer ea9cc62329 Upped aging max to 1440 minutes. Upped beacon min to 15 min 2018-09-06 17:48:03 -04:00
Jordan Sherer f6c59d33bd Added copy and paste to edit textboxes 2018-09-06 17:44:47 -04:00
Jordan Sherer 6725df3d26 Unify date formats in ALL.txt 2018-09-06 15:30:33 -04:00
Jordan Sherer dfdf23315b Added ability to send CQ QRP/CQ DX/CQ TEST along with customization for the message that the CQ button sends 2018-09-06 15:22:24 -04:00
Jordan Sherer 3a139fc87a Deselect callsign on Log QSO 2018-09-06 11:19:38 -04:00
Jordan Sherer 04e3dc9c3e Fixed tooltip backgrounds 2018-09-06 11:10:52 -04:00
Jordan Sherer ca66c6401c Fixed bug in printing. Do not append to a line that already has an EOT marker 2018-09-05 15:14:39 -04:00
Jordan Sherer 1ca079041f Updated APRSISClient to drop packets older than 5 minutes 2018-09-05 14:57:40 -04:00
Jordan Sherer e922df7635 Require APRS passcode for raw APRS usage 2018-09-05 11:33:50 -04:00
Jordan Sherer f30cf20400 Added tooltip description for up to 12 char grid locator 2018-09-05 10:54:56 -04:00
Jordan Sherer d4155ff348 Removed plotter context menu. Confusing. 2018-09-05 10:50:40 -04:00
Jordan Sherer 75fded07d3 Fixed call activity scroll jumping one last time 2018-09-04 15:39:43 -04:00
Jordan Sherer 61cddd5ba4 Added Darwin icons 2018-09-02 00:47:52 -04:00
Jordan Sherer 24e9b15e42 Added user configurable APRS server option 2018-09-02 00:05:15 -04:00
Jordan Sherer 9bbaba3f72 Moved aprs test 2018-09-02 00:01:08 -04:00
Jordan Sherer 8c8218bdd8 Fixed send button countdown text 2018-09-01 20:23:04 -04:00
Jordan Sherer b8c3b4ce91 Disable spotting of SSID suffix by default 2018-09-01 20:07:03 -04:00
Jordan Sherer bf7d057d6e Allow SSID-like suffixes to be sent to APRS 2018-09-01 20:04:15 -04:00
Jordan Sherer c4db1a9a00 Bump to v0.5.2 2018-09-01 18:31:43 -04:00
Jordan Sherer ecfbbe5219 Removed debug 2018-09-01 18:31:31 -04:00
Jordan Sherer 2620435e92 Added waterfall controls menu item 2018-09-01 18:26:10 -04:00
Jordan Sherer 0886dc1995 Fixed tx messages should display EOT character 2018-09-01 18:14:40 -04:00
Jordan Sherer 9a3d7dd992 Removed SSID from APRS spotting. Unintuitive 2018-09-01 18:06:12 -04:00
Jordan Sherer 6224c9cf75 Hide APRS SSID configuration option 2018-09-01 18:05:07 -04:00
Jordan Sherer a5e1d0206b Fixed bug when right click on band activity would display incorrect callsign that was selected in the call activity 2018-09-01 18:02:02 -04:00
Jordan Sherer c5531a5177 Updated QSO reply to send multiple stations if the base callsigns match 2018-09-01 17:56:10 -04:00
Jordan Sherer 536f017fd4 Bump to v0.5.1 2018-09-01 13:43:16 -04:00
Jordan Sherer 5c313af3ab Removed PWR. Added APRS SSID 2018-09-01 10:34:12 -04:00
Jordan Sherer 046fe83193 Fixed compound buffered commands double printing in the rx window 2018-08-31 22:29:13 -04:00
Jordan Sherer e861308d70 Added auto-prefix messages with directed callsigns 2018-08-31 21:30:34 -04:00
Jordan Sherer 6dcf4b96d2 Fixed bug in waterfall displaying mouse hover without mouse over 2018-08-31 19:04:57 -04:00
Jordan Sherer f00f5e23c1 Updated message textbox placeholder default 2018-08-31 19:03:31 -04:00
Jordan Sherer 2e8cde4193 Added deselect to the activity menus 2018-08-31 09:59:43 -04:00
Jordan Sherer 7caa7c83b8 Updated GRID command to no longer ACK a reply. It was giving off the wrong impression 2018-08-30 20:45:51 -04:00
Jordan Sherer 08d8beed64 Fixed issue with double printing of directed and undirected activity. Fixed enter key press with no message 2018-08-30 17:19:58 -04:00
Jordan Sherer e5347eb4b6 Fixed scrolling bug for band activity and call activity lists 2018-08-30 16:13:43 -04:00
Jordan Sherer 64022c18b6 Added compound callsigns to APRS position comment 2018-08-30 15:01:43 -04:00
Jordan Sherer 42c8d1c0bb Updated APRS client to be more resilient to server failure 2018-08-30 14:31:31 -04:00
Jordan Sherer 6ab3d32e3b Updated APRS spotting connections for better reliability 2018-08-30 12:18:20 -04:00
Jordan Sherer 2b62734437 Fixed bug with SNR report menu item 2018-08-29 22:17:14 -04:00
Jordan Sherer 95a91fb526 Updated listCopyReverse to support older versions of Qt 2018-08-29 16:00:25 -04:00
Jordan Sherer 081bc0380b Added reply message to configuration 2018-08-29 12:32:09 -04:00
Jordan Sherer 77715347c7 Reordered the query menu 2018-08-29 12:11:32 -04:00
Jordan Sherer 712580d08c Added QSO query for finding a remote station 2018-08-29 12:08:22 -04:00
Jordan Sherer 084765f271 Updated beacon default to 30 minutes 2018-08-29 11:28:26 -04:00
Jordan Sherer d2b7229815 Remove QSY checkbox from settings 2018-08-29 11:17:10 -04:00
Jordan Sherer 63739b9d31 Added scroll wheel support for waterfall. Added hover indicator to make selection of signal easier 2018-08-29 11:06:46 -04:00
Jordan Sherer d1b239201c Removed from callsign from message save log...redundant 2018-08-28 21:06:49 -04:00
Jordan Sherer f06df77db2 Added writing hashed messages to a file on disk 2018-08-28 20:58:39 -04:00
Jordan Sherer 2250589f83 Bump EOL 2018-08-28 16:49:44 -04:00
Jordan Sherer 65a19e4707 Added API entry for logging QSOs 2018-08-28 16:44:21 -04:00
Jordan Sherer c8c4f98610 Added offset to call activity display and sort menu 2018-08-28 16:35:14 -04:00
Jordan Sherer 0ecbbd0da1 Added reply button back into the main window 2018-08-28 16:04:49 -04:00
Jordan Sherer b5cebe41e8 Added caching and restoring band/call/rx activity on band change 2018-08-28 15:45:23 -04:00
Jordan Sherer 83b05df312 Added APRS payload sends to APRS-IS 2018-08-28 15:13:38 -04:00
Jordan Sherer 541bd8bca3 Example email over APRS 2018-08-28 09:45:22 -04:00
Jordan Sherer 565bdb5690 Added function to determine the checksum size needed for a buffered command 2018-08-27 22:04:17 -04:00
Jordan Sherer 7868c3fe70 Added double spacing between message lines 2018-08-27 21:41:22 -04:00
Jordan Sherer adcc728492 Added spotting to APRS-IS for grids larger than 4 characters. Added supporting commands for QTH QTC and GRID 2018-08-27 21:19:38 -04:00
Jordan Sherer 2fa1fcd4f8 Generic label for spotting 2018-08-24 09:39:33 -04:00
Jordan Sherer 8eb0fc327d Added option to enable/disable immediate transmission of directed items 2018-08-24 09:38:00 -04:00
Jordan Sherer e6f83e999b Added a few additional directed message short commands 2018-08-24 09:21:17 -04:00
Jordan Sherer b10ccc370f Added a few additional optional directeds 2018-08-24 00:20:10 -04:00
Jordan Sherer 121ffb48f6 Renamed labeling for sort 2018-08-24 00:11:21 -04:00
Jordan Sherer 4698db27f6 Bump EOL. Ensure grid is also configured before transmit. Optionally show warning message. Display configuration when not configured on application load 2018-08-23 23:59:15 -04:00
Jordan Sherer fe1463b730 Fixed overlay bounds 2018-08-23 17:25:48 -04:00
Jordan Sherer ad154cb2e6 Adjusted 160m frequency 2018-08-23 13:13:28 -04:00
Jordan Sherer 5166b1e0dd Block lower 500Hz from being used to allow frequency separation 2018-08-23 13:10:20 -04:00
Jordan Sherer 5d0e91a5ed Added menu items for band and call activity sorting in the main menu 2018-08-23 12:24:47 -04:00
Jordan Sherer c01238f5e0 Added sorting of band activity and call activity window 2018-08-23 11:59:20 -04:00
Jordan Sherer 726484a05a Remove restriction of grid locator to 4 or 6 chars. Upped to 16 chars 2018-08-22 15:15:30 -04:00
Jordan Sherer b7d2a370f8 Default to spotting 2018-08-17 17:37:43 -04:00
Jordan Sherer 6c8902d802 Tweaks to the directed menu 2018-08-17 11:13:49 -04:00
Jordan Sherer 1002dcbc1b Added enable/disable for UDP API. Added DATA for logging instead of RTTY 2018-08-17 10:07:17 -04:00
Jordan Sherer f2ca9caec7 Added right click menu to the band activity window 2018-08-17 09:35:45 -04:00
Jordan Sherer 96ca7786e5 Fixed issue with background colors 2018-08-17 09:27:31 -04:00
Jordan Sherer eecde27cd8 Open settings if no call has been set 2018-08-17 09:18:49 -04:00
Jordan Sherer d4bb4cf49a Bump to 0.5.0 2018-08-16 17:47:02 -04:00
Jordan Sherer db74c22890 Make sure to initialize the structs 2018-08-16 17:46:53 -04:00
Jordan Sherer 69b90b243a Fixed issue with allcall buffering responses while autoreply is disabled 2018-08-16 16:41:01 -04:00
Jordan Sherer 9bac05c86c Bump version of frequencies settings key to intialize new frequencies 2018-08-16 16:02:44 -04:00
Jordan Sherer fde19eebd8 Updated frequencies to be closer aligned with existing allocations 2018-08-16 15:53:46 -04:00
Jordan Sherer 6b4390fe5c Added warning message with a timeout for automatic band switching 2018-08-16 15:19:43 -04:00
Jordan Sherer ad4e567392 Fixed display of allcalls. No longer red 2018-08-16 11:31:10 -04:00
Jordan Sherer 612df625ed Added ability to change directed message window background color 2018-08-16 11:02:23 -04:00
Jordan Sherer 9475ea7461 Added a couple more frequency options. Decisions. Decisions. 2018-08-16 10:01:25 -04:00
Jordan Sherer 5fad5497d2 Fixed jumping of band activity and call activity tables on update 2018-08-15 23:24:16 -04:00
Jordan Sherer 9815c4dde9 API: Added RX.GET_CALL_SELECTED 2018-08-15 22:31:01 -04:00
Jordan Sherer 60c0f24ef8 Fixed restricted characterset for configuration messages and macros 2018-08-15 22:29:23 -04:00
Jordan Sherer e74e20680a Added alternate frequencies we can switch to for the next build 2018-08-15 21:54:35 -04:00
Jordan Sherer ee44e2e5d7 Fixed issue with QSY during message sending 2018-08-15 20:57:30 -04:00
Jordan Sherer 43574b10b1 Slight modified frequencies for 80m and 12m to avoid PSK 2018-08-15 16:46:19 -04:00
Jordan Sherer 08f046c289 Fixed incorrect labels for frame type enum 2018-08-14 22:26:49 -04:00
Jordan Sherer 5f4a66e916 Added warning message about empty callsign before transmitting 2018-08-14 12:09:14 -04:00
Jordan Sherer bc97c96a5b Added tooltips and better labels 2018-08-14 10:53:30 -04:00
Jordan Sherer 3b1519c603 Bump to v0.4.2 2018-08-12 10:38:59 -04:00
Jordan Sherer f30c2e3858 Fixed configuration of band hopping to reset cached band position after configuration save. Fixed issue with band hopping not working across a date transition 2018-08-12 10:35:19 -04:00
Jordan Sherer c60efba4ca Fixed display of messages that drift more than a few Hz during transmission 2018-08-12 10:03:14 -04:00
Jordan Sherer 5694b96f55 Fixed compound callsigns not displaying in the heard list 2018-08-12 09:23:05 -04:00
Jordan Sherer 52b6cea883 Bump to 0.4.1 2018-08-11 22:21:37 -04:00
Jordan Sherer fded3b5003 Allow changes to station message from external programs 2018-08-11 22:12:54 -04:00
Jordan Sherer de713e86fc Fixed printing of grid in compound call messages 2018-08-11 22:00:59 -04:00
Jordan Sherer ed9228d196 Fixed issues with double printing of messages and skipping printing some frames 2018-08-11 18:05:36 -04:00
Jordan Sherer 08357c4b11 Fixed issue with changing frequency in response to directed allcalls 2018-08-11 10:54:21 -04:00
Jordan Sherer 94d7b94f56 Fixed isFreqOffsetFree when responding to directed query 2018-08-11 10:45:39 -04:00
Jordan Sherer d3b593c953 Fixed alignment of red waterfall indicator 2018-08-11 10:38:38 -04:00
Jordan Sherer 8c8ddb533c Fixed issue with grid length. Fixed back-to-back CQs 2018-08-11 10:31:28 -04:00
Jordan Sherer c042a72d0d Fixed bug causing compound calls not to send when a grid locator larger than 4 characters was set in the configuration 2018-08-11 10:06:50 -04:00
Jordan Sherer a5b6984ede Fixed bug in configuring band hopping 2018-08-11 09:39:02 -04:00
Jordan Sherer 8b07b56250 Make sure MessageClient has QDataStream ref 2018-08-10 14:37:52 -04:00
Jordan Sherer ca2436c11d Fixed issue with legacy Qt and toSecsSinceEpoch 2018-08-10 14:34:21 -04:00
Jordan Sherer b3c0901de7 Fixed bug with 200Hz minimum RX frequency 2018-08-10 14:10:11 -04:00
Jordan Sherer df5b228ddc Redraw overlay for more consistent look and feel 2018-08-10 14:04:03 -04:00
Jordan Sherer 7a42fac9d9 Added selected callsign to log window. Fixed bug in window panel size restoration when new 2018-08-10 10:58:04 -04:00
Jordan Sherer aa59cc547f Added window menu for showing/hiding band activity, call activity, and waterfall...as well as reset all of those sizes to their defaults 2018-08-10 09:35:40 -04:00
Jordan Sherer 49224f5b81 Fixed bugginess when displaying rx activity that are buffered commands 2018-08-10 10:59:17 +03:00
Jordan Sherer c779bf4ca0 Restored ft8apset 2018-08-10 10:58:50 +03:00
Jordan Sherer 917e4f0771 Fixed bug in auto band switching checkbox 2018-08-10 00:37:48 -04:00
Jordan Sherer 3444bcaa17 Fixed bug in frequency list 2018-08-10 00:37:18 -04:00
Jordan Sherer 935708dd5e Use new dialFrequency function for grabbing the current rig frequency 2018-08-09 23:07:58 -04:00
Jordan Sherer 0353724f1a Updated band hopping to not hop bands when on the frequency 2018-08-09 23:07:14 -04:00
Jordan Sherer 899a914a88 Updated API to be better organized and scoped functions 2018-08-09 22:44:25 -04:00
Jordan Sherer f4688b44d3 Working through some common api commands 2018-08-09 17:32:19 -04:00
Jordan Sherer 7037baa0a6 Initial commands supported, get and set grid locator, with example app udp.py 2018-08-09 17:32:18 -04:00
Jordan Sherer e91e93c349 Simplified textual network command structure 2018-08-09 17:32:18 -04:00
Jordan Sherer 10d706e9fa Removed most message client networkmessage serialization 2018-08-09 17:32:18 -04:00
Jordan Sherer 80ed587514 Restructuring message client for external api with a python example 2018-08-09 17:32:18 -04:00
Jordan Sherer edf85a1e5f Do not reset frequency on saving of configuration 2018-08-09 15:54:59 -04:00
Jordan Sherer 4520cdd48d Updated frequency list with new locations for 40m and 80m 2018-08-09 15:50:57 -04:00
Jordan Sherer 6b3591df88 Cleanup some compiler warnings 2018-08-09 15:46:35 -04:00
Jordan Sherer af913532c5 Fixed bug in saving of band hopping information 2018-08-09 15:28:23 -04:00
Jordan Sherer e51cc6c3b5 Added some better scheduling logic around station band switching 2018-08-09 12:52:48 -04:00
Jordan Sherer 2989c20175 Updated editing experience for frequency schedule. Fixed some bugs with the data storage 2018-08-09 09:44:22 -04:00
Jordan Sherer d2ad5ee893 Switched to time range instead of a fixed point for easier comparisons 2018-08-09 00:06:02 -04:00
Jordan Sherer 330eb3a57e Initial stab at band switching...broken 2018-08-08 23:19:27 -04:00
Jordan Sherer c0cfac10dc Bump expiration date 2018-08-08 17:40:13 -04:00
Jordan Sherer 4eba12b2a2 Fix CQ highlighting 2018-08-08 17:38:50 -04:00
Jordan Sherer 27fe5a3d28 Our callsign is not a selected callsign 2018-08-08 17:30:02 -04:00
Jordan Sherer be8b4c18ee Fix bug in widegraph not actually setting offset value 2018-08-08 17:21:05 -04:00
Jordan Sherer bf0ebf227b Write to ft8call.log too 2018-08-07 13:42:55 -04:00
Jordan Sherer 5215e6764f FT8 does not permid CW id 2018-08-07 11:49:21 -04:00
Jordan Sherer 54862b9115 Added frequency offset spinbox into the widegraph 2018-08-07 09:31:18 -04:00
Jordan Sherer 9e6b647139 Long checksums for hash buffered messages. Display a newline if we reach the last frame and the frame is not buffered 2018-08-07 09:19:18 -04:00
Jordan Sherer 0755634366 Directed cache good for 5 minutes 2018-08-06 23:42:37 -04:00
Jordan Sherer fed71cb75c Updated display of command and rx activity 2018-08-06 23:39:43 -04:00
Jordan Sherer a08858a3f1 Fixed bug in beacon that prevented it from kicking off if AUTO was disabled 2018-08-06 17:24:42 -04:00
Jordan Sherer aa9014f2f5 Escape key clears message queue too 2018-08-06 17:11:31 -04:00
Jordan Sherer 9c98e01458 Get rid of the advanced tab in configuration 2018-08-06 16:47:49 -04:00
Jordan Sherer 45032cfdd8 Updated to ft8call_log.adif for logbook 2018-08-06 16:35:46 -04:00
Jordan Sherer 085a81ca18 Fixing some remnants related to modes logging 2018-08-06 16:30:28 -04:00
Jordan Sherer a81f9602a9 FT8CALL the mode is all uppercase 2018-08-06 16:22:16 -04:00
Jordan Sherer 80767c5dd0 Removed other modes. FT8CALL is THE mode 2018-08-06 16:20:46 -04:00
Jordan Sherer 9444b5c4d1 Initial stab at frequency suggestions 2018-08-06 15:42:31 -04:00
Jordan Sherer d303cbfe67 Better beacon scheduling. Should prevent future issues with beacons going missed 2018-08-06 14:43:32 -04:00
Jordan Sherer 07118dac49 Require i3bits to be set to avoid most weird false decodes 2018-08-06 14:05:10 -04:00
Jordan Sherer ebf30b38ef Message buffer should ack 2018-08-06 11:07:03 -04:00
Jordan Sherer c1e1d3864f Fixed bug in new decoder alphabet 2018-08-06 11:01:37 -04:00
Jordan Sherer 334b6ef443 Remove old style FT8 beacon 2018-08-06 11:01:17 -04:00
Jordan Sherer 3e67f4ef1f Updated directed frames to take advantage of the extra numerical bits so we don't have to delineate between positive and negative frame types 2018-08-06 10:29:57 -04:00
Jordan Sherer 3318fa1005 Updated decoded to use new alphabet. Updated frame packing to use new 72 bit messages 2018-08-06 10:18:11 -04:00
Jordan Sherer ba0a2fe52d Updated varicode to support 72 bit message lengths 2018-08-06 10:16:20 -04:00
Jordan Sherer e2f06a629d Added 72-bit packing 2018-08-06 09:37:43 -04:00
Jordan Sherer 88ad573de9 Experimenting with full packing of 72-bit messages using an intermediate base64 alphabet (12 x 6-bit characters) 2018-08-06 00:11:11 -04:00
Jordan Sherer db9f969dcc Added wider offset for band activity +/- 10Hz. Update dirty display 2x per transmission period 2018-08-06 00:05:56 -04:00
Jordan Sherer 2e41454e6b Bump Version to 0.4.0 2018-08-05 13:26:13 -04:00
Jordan Sherer 26581ca8af Fixed issue with rebase and FoxQSO definition 2018-08-05 11:55:11 -04:00
Jordan Sherer 049694365e Updated comment about FrameReserved 2018-08-05 11:48:19 -04:00
Jordan Sherer e3ae807c85 Modified the FT8 crc12 using XOR 42 so we do not interfere with standard FT8 stations 2018-08-05 11:48:19 -04:00
Jordan Sherer c1b374b858 Send compound frames for stations heard to be more efficient in delivery. Added FT8CallFirst to flush the buffers of incomplete transmissions. 2018-08-05 11:48:19 -04:00
Jordan Sherer 16a744d55e Added ability to add newline into the text edit panel with Shift+Enter 2018-08-05 11:48:19 -04:00
Jordan Sherer 883cb99c0f Fixed issue with compound directed calls with numerical values 2018-08-05 11:48:19 -04:00
Jordan Sherer c2bda71da5 Added QSL commands 2018-08-05 11:48:19 -04:00
Jordan Sherer 627367223b Cleanup compound call display 2018-08-05 11:48:19 -04:00
Jordan Sherer a3c5431000 Escape key stops transmission 2018-08-05 11:48:19 -04:00
Jordan Sherer 7a155a4820 Refactor compound call structure for directed messaging by using a new frame type FrameCompoundDirected. This allows us to send only two frames when each station has a compound callsign. No aliasing, full calls are sent with each transmission. 2018-08-05 11:42:02 -04:00
Jordan Sherer 172e1df31d Stop displaying general activity in the directed text area (for now) 2018-08-05 11:42:02 -04:00
Jordan Sherer b7b7167d85 Added hashed message with ack 2018-08-05 11:42:02 -04:00
Jordan Sherer 5f3ca913b7 Added large checksum message processing 2018-08-05 11:42:02 -04:00
Jordan Sherer e649a375cf Split beacon packing from compound packing 2018-08-05 11:42:02 -04:00
Jordan Sherer eb7882e253 Restructuring beacons to be more like standard allcalls 2018-08-05 11:42:02 -04:00
Jordan Sherer 96f7b9fd66 Refactoring for better compound message display 2018-08-05 11:42:02 -04:00
Jordan Sherer 479d647456 Refactored callsign packing to use 21 bits instead of 22, reducing our dependence on Prefix/Suffix flags added to our frame type enum 2018-08-05 11:42:01 -04:00
Jordan Sherer e316554b68 Removed BCN command... it's parsed separately 2018-08-05 11:42:01 -04:00
Jordan Sherer 323c4e888f Added remove activity to band activity right context menu 2018-08-05 11:42:01 -04:00
Jordan Sherer 7942bf3a4d Parse callsigns from BCN command 2018-08-05 11:42:01 -04:00
Jordan Sherer 5a5e37f119 Properly handle compound call parsing for CQs and DEs 2018-08-05 11:42:01 -04:00
Jordan Sherer 7ff43be5f3 Write unpacked entries to the ALL.txt file 2018-08-05 11:42:01 -04:00
Jordan Sherer 3a5707992c Cache in recent when we process rx activity 2018-08-05 11:42:01 -04:00
Jordan Sherer a47d722901 Refactor display of recent and directed messages 2018-08-05 11:42:01 -04:00
Jordan Sherer 3e19b2c98d Added some better alignment of low priority beacons with other messages 2018-08-05 11:42:01 -04:00
Jordan Sherer 62c449669f Added a prioritized TX queue for beacons (low priority) and automatic replies (normal priority) and eventually outgoing messages (high priority) 2018-08-05 11:42:01 -04:00
Jordan Sherer f0de2f2ba1 Continued refactoring of command processing 2018-08-05 11:38:08 -04:00
Jordan Sherer 0a7c4a68de Reordered varicode escapes for better efficiency 2018-08-05 11:38:08 -04:00
Jordan Sherer e1530c147c Reorder a few of the special escapes 2018-08-05 11:38:08 -04:00
Jordan Sherer ff77effb3e Varicode packing of trigram and quadgrams 2018-08-05 11:38:08 -04:00
Jordan Sherer 5238e1ade8 Added some comments about trigrams and quadgrams 2018-08-05 11:38:08 -04:00
Jordan Sherer 5d64ac37c5 Restructured building frames and decoding for better support of compound callsigns 2018-08-05 11:38:08 -04:00
Jordan Sherer 1df975f274 Varicode packing without a 5-bit pad integer 2018-08-05 11:38:08 -04:00
Jordan Sherer 565f4d9321 Starting compound call refactoring 2018-08-05 11:38:08 -04:00
Jordan Sherer 62899069bf Merged master 8748 2018-08-05 11:33:30 -04:00
Jordan Sherer 8f8772f1bd Version bump 2018-07-27 16:52:25 -04:00
Jordan Sherer f09132f6b4 Fix beacon for compound calls 2018-07-27 16:52:16 -04:00
Jordan Sherer bf57a67c43 Encoding of beacon messages that consist of compound call + (grid or arbitrary 15 bit number) + a flag (isCQ) 2018-07-27 16:11:11 -04:00
Jordan Sherer 091b3b3ee8 Disabled global keyboard shortcuts... 2018-07-27 14:40:37 -04:00
Jordan Sherer 17033f1044 Automatic reply to AGN queries. Restore last message in the text area menu 2018-07-27 13:53:07 -04:00
Jordan Sherer 7c656fac71 Updated compound callsign parsing in directed messages (use base callsign instead) 2018-07-27 11:28:31 -04:00
Jordan Sherer a6771b81c3 Fixed leading whitespace issue for buffered commands 2018-07-27 10:57:51 -04:00
Jordan Sherer eca184bac6 Version bump 2018-07-27 02:27:50 -04:00
Jordan Sherer 6ad2417804 Remove station from heard list 2018-07-27 02:22:48 -04:00
Jordan Sherer 21e87d8b6f QSY on right click of heard list 2018-07-27 01:43:25 -04:00
Jordan Sherer 52a5650a74 Restore original functionality regarding stations heard 2018-07-27 01:36:55 -04:00
Jordan Sherer 2158722ebc Fixed bug in checksuming of buffered messages 2018-07-27 01:24:38 -04:00
Jordan Sherer bf11d66f60 Dont reset the beacon at a 1 minute interval 2018-07-26 20:51:02 -04:00
Jordan Sherer 371aa1e20c Fixed callsign parsing expression 2018-07-26 20:46:08 -04:00
Jordan Sherer 8348f61a94 Bump date 2018-07-26 17:31:21 -04:00
Jordan Sherer bf28918096 Write current messages to ALL.TXT 2018-07-26 16:30:19 -04:00
Jordan Sherer 571aa6446d Added message alerts 2018-07-26 15:57:19 -04:00
Jordan Sherer 4290dd6e2f Extended charset via escapes. DE added to retransmits 2018-07-26 14:31:28 -04:00
Jordan Sherer de66664635 Added extended alphabet for special characters 2018-07-26 12:47:03 -04:00
Jordan Sherer 9e9c996813 Refactor message buffering for relay 2018-07-25 22:49:19 -04:00
Jordan Sherer f67ea3803d Changed to a better callsign validator expression 2018-07-25 20:24:22 -04:00
Jordan Sherer fa00e0dfd6 Added callsign label to main window 2018-07-25 20:13:23 -04:00
Jordan Sherer ceaa76c497 Experimental single-hop relay working 2018-07-25 17:15:59 -04:00
Jordan Sherer 9c9a5c2d8b Added power reply. Added ack reply 2018-07-25 16:51:47 -04:00
Jordan Sherer d611d83bb9 Fixed J1Y callsign bug. Added power reporting command 2018-07-25 14:46:21 -04:00
Jordan Sherer 253b60217f Added station power to configuration 2018-07-25 11:30:44 -04:00
Jordan Sherer 39a536bb91 Experimental foundation of all or nothing checksummed messages 2018-07-25 09:06:47 -04:00
Jordan Sherer 115a9d65f7 Send data frames after directed. Fix bug with enter key double sending 2018-07-24 23:10:47 -04:00
Jordan Sherer 796920cb6b Better EOT. Fixed bug in enter key press 2018-07-24 22:32:24 -04:00
Jordan Sherer c1c7d85195 UI Tweaks. Remove frequency restriction (causing problems). And keep track of the last message sent for later. 2018-07-24 21:04:04 -04:00
Jordan Sherer c5a6f76b1e Bump version to v0.3.0 2018-07-24 20:42:55 -04:00
Jordan Sherer 5b198351be Send message on enter key press 2018-07-24 17:45:23 -04:00
Jordan Sherer 246d53201c Updated compound call parsing and aliasing 2018-07-24 17:31:06 -04:00
Jordan Sherer 999a239e67 Remove reference to FT8Free 2018-07-24 16:47:14 -04:00
Jordan Sherer f091cb28ef Make sure log window is large enough 2018-07-24 16:47:05 -04:00
Jordan Sherer f415b0c94f Added autoreply button in conjuntion with beacon button 2018-07-24 16:46:04 -04:00
Jordan Sherer 0bf2afa5f8 Proper handling of directed messages for compound calls using an alias scheme 2018-07-24 15:19:02 -04:00
Jordan Sherer 706a9b1ebd Allow stations heard query 2018-07-24 11:11:04 -04:00
Jordan Sherer 4cec8b80a3 Check offsets above and below 5Hz 2018-07-24 09:42:07 -04:00
Jordan Sherer 9e68b8c402 Clear compound call cache on activity clear 2018-07-24 09:23:44 -04:00
Jordan Sherer 478ba82df7 Removed split rig check ignore for split operation 2018-07-24 09:08:53 -04:00
Jordan Sherer 7aef92dd68 Updated call activity once receiving compound callsign 2018-07-24 03:07:36 -04:00
Jordan Sherer 01249bd115 Support compound callsigns 2018-07-24 02:53:01 -04:00
Jordan Sherer 9bee00c5dd Remove directed buttons and put them in the menu 2018-07-24 02:52:12 -04:00
Jordan Sherer b9b274f2d6 Disallow callsigns with both prefixes and suffixes 2018-07-24 02:51:44 -04:00
Jordan Sherer 4a17062487 Added packing of compound callsigns into a dedicated message 2018-07-24 02:47:14 -04:00
Jordan Sherer 1c73ce2c90 Removed extra non-ft8 binaries 2018-07-23 23:56:51 -04:00
Jordan Sherer 07a29c7f1d Refactoring directed frame packing 2018-07-23 17:20:03 -04:00
Jordan Sherer f7a941406c Typing in a callsign not in your heard list recognizes it as a callsign selected 2018-07-23 17:19:26 -04:00
Jordan Sherer adecb88c29 Added callsign prefix packing 2018-07-23 15:28:36 -04:00
Jordan Sherer 857e19ed94 Updated callsign handling
Reducing compound callsigns to their basecall for most commands except CQ and DE (beacon)
2018-07-23 11:45:41 -04:00
Jordan Sherer f47224979e Refactor store freq. Rename to bacon. 2018-07-23 09:09:55 -04:00
Jordan Sherer c0833aa753 Added checksum generation and ACK 2018-07-23 08:51:29 -04:00
Jordan Sherer 20d931a9ca Moved macro button...again. 2018-07-23 08:49:58 -04:00
Jordan Sherer 1b2f8a1c6c Restore audio frequency after responding to allcall or transmitting beacon 2018-07-21 17:50:33 -04:00
Jordan Sherer 95e75741ed Fix bug in scrolling of the main window 2018-07-21 17:32:35 -04:00
Jordan Sherer dc75c08081 Configuration and MainWindow UI tweaks 2018-07-21 17:18:35 -04:00
Jordan Sherer 8c204e317b Fixed beacon postponement 2018-07-21 17:06:17 -04:00
Jordan Sherer a672668c3a Only respond to allcalls once per beacon interval 2018-07-21 16:57:42 -04:00
Jordan Sherer 8638b53e45 Added band activity age in the table 2018-07-21 16:55:04 -04:00
Jordan Sherer 394a6d045f Beacon interval default to 15 min 2018-07-21 16:10:13 -04:00
Jordan Sherer 29bbedcc8f Make sure standard messages are displayed with a space between them. 2018-07-21 15:57:01 -04:00
Jordan Sherer d66b4ffb37 Disable QTC QTH buttons if those messages are empty 2018-07-21 12:37:11 -04:00
Jordan Sherer c0c4693782 Widened the log qso dialog 2018-07-21 03:55:45 -04:00
Jordan Sherer 9223d3da40 Version bump to 0.2.0 2018-07-21 03:52:48 -04:00
Jordan Sherer 83e3f5ddbc SNR button sends a directed SNR message 2018-07-21 03:52:13 -04:00
Jordan Sherer 0f4057aa97 Make sure to clear seen beacon cache when changing bands 2018-07-21 03:45:56 -04:00
Jordan Sherer 591629e369 Disable heard list beaconing for now 2018-07-21 03:33:00 -04:00
Jordan Sherer 4a96ab3b13 Beaconing of heard list 2018-07-21 03:32:07 -04:00
Jordan Sherer e955cff24f Make sure selected call exists before using it 2018-07-21 02:31:30 -04:00
Jordan Sherer fe405cfba8 Added ability to encode power into dbm 2018-07-21 02:18:15 -04:00
Jordan Sherer 92117aa791 Added SNR directed command 2018-07-20 23:17:49 -04:00
Jordan Sherer d4c2d9a871 Log directed FT8Call messages to PSKReporter 2018-07-20 23:09:17 -04:00
Jordan Sherer b2e2b91d31 Refactored get current frequency 2018-07-20 22:17:41 -04:00
Jordan Sherer fa864c50cd Removed CQ DX from allcall 2018-07-20 16:23:48 -04:00
Jordan Sherer 1c6d1babe6 Set the QTH button to drop in the station location if provided 2018-07-20 16:11:21 -04:00
Jordan Sherer ac27d1a9b6 Brighter green for slider 2018-07-20 16:10:59 -04:00
Jordan Sherer 28eb082655 Further fix format of SNR 2018-07-20 16:04:14 -04:00
Jordan Sherer 9a945c156d Proper SNR formatting +00 +30 -09 2018-07-20 11:40:55 -04:00
Jordan Sherer 83c742f7ec Double click band activity now transfers the received message into the directed activity window and further transmissions on the offset will be added to the window automatically 2018-07-20 10:54:00 -04:00
Jordan Sherer 7a788c05c8 Added configuration options for controlling aging of the callsign and band activity windows 2018-07-20 10:13:12 -04:00
Jordan Sherer 7b409a6ff4 Fix varicode bug with empty messages 2018-07-20 09:38:34 -04:00
Jordan Sherer 87a631f5f0 Reorder directed and macro buttons 2018-07-20 09:38:10 -04:00
Jordan Sherer efd6b54ba7 Updated slider handle color 2018-07-20 09:00:36 -04:00
Jordan Sherer 553f2400e5 Updated text decoding to support more commands as well as numerical options for those commands 2018-07-19 23:14:11 -04:00
Jordan Sherer 5c84e79e5b Updated label text for qth message 2018-07-19 10:36:43 -04:00
Jordan Sherer 052b81ec8f Added 73 action and more appropriate all call responses. Added better handling of end of transmissions. 2018-07-19 10:35:00 -04:00
Jordan Sherer 7ecc550bc2 Added station qth to configuration options 2018-07-19 10:34:19 -04:00
Jordan Sherer b8267372e4 Added varicode encoding of messages
What this does is allow us to pack more than 13 characters in a single
transmission frame. Optimized using a Huffman encoding using weights of
alphabetical frequency, this will often allow us to send less than 5 bits
per character.
2018-07-19 03:44:08 -04:00
Jordan Sherer 512dffabf4 Added station message command processing 2018-07-19 02:09:19 -04:00
Jordan Sherer 50a3a56d2d Added station message to configuration 2018-07-19 00:39:31 -04:00
Jordan Sherer deb228948d Added ability to display when we receive the final transmission frame of a message 2018-07-18 16:45:27 -04:00
Jordan Sherer 58032b6ae4 Restrict low offset when not in split mode 2018-07-18 14:26:45 -04:00
Jordan Sherer 7845736c05 Smarter beacon scheduling for when editing a message or have recently transmitted 2018-07-18 09:04:58 -04:00
Jordan Sherer 77eb65d6b3 Display callsign prefix for transmitted directed messages 2018-07-16 09:14:28 -04:00
Jordan Sherer 252c21b818 Bump version to 0.1.1 2018-07-16 12:07:39 +00:00
Jordan Sherer 82c3b23e44 Merge branch 'ft8call-reorg' of https://bitbucket.org/widefido/wsjtx into ft8call-reorg 2018-07-16 11:59:06 +00:00
Jordan Sherer 5764170975 Disabled contest mode message packing which causes crashes when typing R 2018-07-16 11:58:41 +00:00
Jordan Sherer a2c85256e8 Only throttle ALLCALLs 2018-07-15 21:00:12 -04:00
Jordan Sherer 9419383ab0 Fixes for windows 2018-07-15 17:58:16 -04:00
Jordan Sherer 4c63129876 Fixed bug in beacon bumping 2018-07-15 16:48:27 -04:00
Jordan Sherer f2b876df49 Bump version to July 30 2018-07-15 16:12:57 -04:00
Jordan Sherer f229019ef5 Updated buttons while frame count is queued and is transmitting 2018-07-15 15:58:07 -04:00
Jordan Sherer 3260bb7b89 Use standard FT8 packing for standard FT8 messages, but apply a directed header for those messages that _can_ be directed 2018-07-15 15:43:29 -04:00
Jordan Sherer 2832572741 Process directed free text messages. Bump beacon on transmit. 2018-07-15 13:03:16 -04:00
Jordan Sherer 28df33b218 Better parsing of selected callsign. Blur edit box while transmitting 2018-07-15 11:00:57 -04:00
Jordan Sherer 6ee0820659 Disabled colors that are not displayed 2018-07-15 10:22:21 -04:00
Jordan Sherer 2c73ccde9b Huffman frame packing 2018-07-15 09:40:46 -04:00
Jordan Sherer 90ce372081 Added CRC-5 to directed messages to confirm message is valid 2018-07-14 22:05:08 -04:00
Jordan Sherer 15d75f7397 Try not to allocate every time... 2018-07-14 18:10:07 -04:00
Jordan Sherer f47c1a5024 Updated comment 2018-07-14 17:10:59 -04:00
Jordan Sherer c74ed5135b Parse callsigns from standard messages 2018-07-14 17:09:12 -04:00
Jordan Sherer b08ecd21e6 PSKReporter shouldnt include the rigname in the name. Added a cache to prevent allcall overrun 2018-07-14 09:26:39 -04:00
Jordan Sherer 1c98d47718 Bump EOL 2018-07-13 22:26:51 -04:00
Jordan Sherer 46e11f8d00 Complete rename to ft8call executable 2018-07-13 22:22:16 -04:00
Jordan Sherer 1e0a93e076 Update Help menu and Copyrights 2018-07-13 22:13:36 -04:00
Jordan Sherer f77f139abb Fix typo 2018-07-13 22:13:18 -04:00
Jordan Sherer 2ae74d8cde Added grid packing to varicode 2018-07-13 21:59:54 -04:00
Jordan Sherer 369b5fd73a Better beacon scheduling when receiving a directed message 2018-07-13 21:59:44 -04:00
Jordan Sherer 4de968d2f0 Try to prevent false directed decodes 2018-07-13 21:58:43 -04:00
Jordan Sherer 09b12701b5 Updated table call view. Added ALLCALL 2018-07-13 15:45:00 -04:00
Jordan Sherer d00eee440c Fixed accesses of invalid memory 2018-07-13 15:44:48 -04:00
Jordan Sherer c1df21f940 Better QSlider to match systems 2018-07-13 15:09:29 -04:00
Jordan Sherer 9117ad5381 New slider style 2018-07-13 14:43:57 -04:00
Jordan Sherer a96216e2f8 Refactored directed code into decoded text so the rest of the app can use it as is. 2018-07-13 10:32:58 -04:00
Jordan Sherer 4140114d8d Remove revision from PSKReporter report 2018-07-13 09:01:01 -04:00
Jordan Sherer bd34bf104f Bump version 2018-07-13 04:46:02 -04:00
Jordan Sherer 6a265efe48 Added command processing, code cleanup, new parsing of messages to be sent, etc. 2018-07-13 04:44:41 -04:00
Jordan Sherer 983790a3ff Added query toolbar button 2018-07-13 04:43:22 -04:00
Jordan Sherer 43b65d5ca9 Pack and unpack directed message commands naively 2018-07-13 04:42:23 -04:00
Jordan Sherer 8bc61902ac Added a priority queue 2018-07-13 02:44:31 -04:00
Jordan Sherer 4e0326ad6d Added callsign packing 2018-07-13 00:55:48 -04:00
Jordan Sherer 808782b965 Working through huffman interface 2018-07-12 20:31:45 -04:00
Jordan Sherer 707f577f31 Added huffman encoding utility 2018-07-12 18:02:54 -04:00
Jordan Sherer 705244786e Add bits accessor for decodedtext 2018-07-12 16:35:00 -04:00
Jordan Sherer 4e66e92671 Remove debug statement 2018-07-12 16:25:06 -04:00
Jordan Sherer 283e7fae77 Beacon every hour or less 2018-07-12 16:24:42 -04:00
Jordan Sherer 441936111a Output i3bits in FT8 decoder from JT9 2018-07-12 16:19:33 -04:00
Jordan Sherer f81a954d1d Ensure 10Hz offset for FT8 reception 2018-07-12 16:18:54 -04:00
Jordan Sherer 23c1730148 Disabled callsign parsing until we are ready 2018-07-12 15:23:12 -04:00
Jordan Sherer 05257d287f Parse callsigns in QSO and add to call panel 2018-07-12 15:14:41 -04:00
Jordan Sherer 64b5ebbdd2 Updated to refresh rx activity at least once per cycle 2018-07-12 14:15:18 -04:00
Jordan Sherer 91d6836fa5 Updated call activity detail 2018-07-12 10:35:41 -04:00
Jordan Sherer dd3613b214 Added bit packing to varicode 2018-07-12 09:54:56 -04:00
Jordan Sherer c96522c11b Added the start of varicode 2018-07-11 23:09:22 -04:00
Jordan Sherer 564b93f307 Removed unused count function 2018-07-11 22:53:21 -04:00
Jordan Sherer 04eaf61c13 Fixed the size of the top toolbar 2018-07-11 22:31:55 -04:00
Jordan Sherer b800dac9ce Contest should be false 2018-07-11 22:13:53 -04:00
Jordan Sherer 2cb78f5414 Extracted isMyCallIncluded 2018-07-11 10:40:29 -04:00
Jordan Sherer 494459ee11 Extracted isRecentlyDirected 2018-07-11 10:30:20 -04:00
Jordan Sherer 1cddbdf91e Experimenting with age in the band activity window 2018-07-10 22:32:35 -04:00
Jordan Sherer 74ea603801 Added clearAll action 2018-07-10 15:35:05 -04:00
Jordan Sherer 16854627d9 Updated PSKReporter spots to use FT8Call instead of WSJT-X for the application name 2018-07-10 15:23:52 -04:00
Jordan Sherer 495c16892f Bump 2018-07-10 00:56:17 -04:00
Jordan Sherer c596f23a05 Added wsjtx-ft8call as output target 2018-07-09 23:07:31 -04:00
Jordan Sherer b69e042f21 Bump version 2018-07-09 22:02:39 -04:00
Jordan Sherer ec568966c8 Fixed macros menu 2018-07-09 21:49:38 -04:00
Jordan Sherer eb062fb0b8 Macros should be updated more frequently 2018-07-09 20:55:54 -04:00
Jordan Sherer 9907a80136 Activity gui should update every 15 seconds 2018-07-09 20:51:42 -04:00
Jordan Sherer cd9079e7ff Updated directed call cache to be better represent recent directed calls 2018-07-09 17:29:43 -04:00
Jordan Sherer 42a8338d1c Allow transmit within 2 seconds of cycle start 2018-07-09 16:36:56 -04:00
Jordan Sherer f44b1154b7 Added SPOT button to UI 2018-07-09 16:31:37 -04:00
Jordan Sherer 722f2f10ae Fixed spec percent bug. Reduced default controls to nil 2018-07-09 15:34:44 -04:00
Jordan Sherer 2a7f38b187 Better breaking apart messages with newlines. Macros behavior 2018-07-09 15:17:53 -04:00
Jordan Sherer f9ab37530c Only clear activity on actual band change, not freq change 2018-07-09 10:10:04 -04:00
Jordan Sherer 442ff4b21d Fix bug on band change 2018-07-09 10:02:45 -04:00
Jordan Sherer ecacddb165 Updated makefile configs 2018-07-08 12:17:10 -04:00
Jordan Sherer 6aab2276ed Updated QAction for old versions of Qt 2018-07-08 09:29:31 -04:00
Jordan Sherer 5c9f9e8141 Version bump. 2018-07-08 09:25:35 -04:00
Jordan Sherer 60563a7dc3 Fix QAction constructor for old compilers 2018-07-07 22:04:27 -04:00
Jordan Sherer 7255728049 Added distance to the calls list 2018-07-07 22:02:11 -04:00
Jordan Sherer 50094fd8a9 Five minutes is too long. Down to two for activity 2018-07-07 17:15:17 -04:00
Jordan Sherer c45f4c137a Keep band activity around for 5 min 2018-07-07 16:58:09 -04:00
Jordan Sherer 16b46176a6 Only QSY your beacon if the frequency isn't free. Don't break lines in the rx window 2018-07-07 16:56:33 -04:00
Jordan Sherer 0df4bbcd29 Added QTH button 2018-07-07 00:47:17 -04:00
Jordan Sherer 3bbea95955 Add warning and eol message 2018-07-06 22:37:25 -04:00
Jordan Sherer fa0baad9a0 Pin calling activity to the top of the activity window 2018-07-06 22:21:04 -04:00
Jordan Sherer 7b7493d560 Fixed beacon tx display 2018-07-06 22:07:30 -04:00
Jordan Sherer dc6de6d819 Bump version 2018-07-06 20:14:09 -04:00
Jordan Sherer b7a51a5764 Disable a bunch of configuration settings that do not make sense for FT8Call 2018-07-06 20:06:41 -04:00
Jordan Sherer 145bc8d292 Updated configuration for beacon interval 2018-07-06 20:01:38 -04:00
Jordan Sherer f58ce3aec0 Propertly clear the edit widget. Properly space messages in the rx window 2018-07-06 18:25:27 -04:00
Jordan Sherer 27b45a26d9 Clear activity on band change. Scroll rx window 2018-07-06 16:54:26 -04:00
Jordan Sherer 0653f81a0d Smarter beaconing with band space 2018-07-06 16:40:09 -04:00
Jordan Sherer 1134cd5782 Disable activity word wrapping 2018-07-06 16:39:51 -04:00
Jordan Sherer aa1871dc66 Fixed beacon scheduling 2018-07-06 16:19:22 -04:00
Jordan Sherer 56869d16a9 Updated since computation to be accurate 2018-07-06 15:27:26 -04:00
Jordan Sherer ccf00dc460 Simple build script to help deploy linux app images 2018-07-06 15:27:06 -04:00
Jordan Sherer 57ad5fd0bc Compat for older Qt 2018-07-06 07:15:11 +00:00
Jordan Sherer 7d9553dd7c Added make app script 2018-07-06 03:03:02 -04:00
Jordan Sherer cad3f43752 Added version 2018-07-06 02:53:31 -04:00
Jordan Sherer 2605fb1a8f UI Customizations 2018-07-06 02:36:40 -04:00
Jordan Sherer 130b749dfe Disabled splashscreen. Updated application name and window title 2018-07-06 00:10:30 -04:00
Jordan Sherer 04bdf8574a Cache calls for easier display 2018-07-05 15:21:47 -04:00
Jordan Sherer 0dfc805a49 Highlight send button on transmit 2018-07-05 04:56:46 -04:00
Jordan Sherer 022866b52b Complete UI functionality 2018-07-05 04:45:55 -04:00
Jordan Sherer 9ed0fe80d2 UI: TableView customizations, including clear context menu 2018-07-03 18:57:49 -04:00
Jordan Sherer 7837ff5d74 UI: Updated tableview behavior 2018-07-03 15:34:03 -04:00
Jordan Sherer bee42d1762 UI Updates, Text Eliding, CallDetail Grid 2018-07-03 11:38:16 -04:00
Jordan Sherer 26c76662ac Read only edit box while transmitting 2018-07-03 03:29:26 -04:00
Jordan Sherer e3a9762179 Beaconing 2018-07-03 03:21:01 -04:00
Jordan Sherer d048f5a2ab Selection tracking 2018-07-03 02:02:19 -04:00
Jordan Sherer 0a95c79f3a Correct stop behavior when clicking send 2018-07-03 01:17:15 -04:00
Jordan Sherer 762f0fb3e1 Added proper send countdown 2018-07-02 23:03:07 -04:00
Jordan Sherer 812b11a53d Disable tx button 2018-07-02 22:56:51 -04:00
Jordan Sherer c517b555d8 Reorganized message transmission semantics 2018-07-02 22:54:26 -04:00
Jordan Sherer f610e946fc Reorganized the window, added beacon watch, macro buttons, etc 2018-07-02 15:08:26 -04:00
Jordan Sherer cb71c3dcf4 Adding messages to band activity 2018-06-15 10:11:44 -04:00
Jordan Sherer 5c8ff568c3 Updated main ui 2018-03-19 00:05:12 -04:00
Jordan Sherer 87cdc7f7e7 Reorganize main window and style meter 2018-03-10 16:59:09 -05:00
Jordan Sherer e694d862aa Modifying mainwindow to display waterfall and minimal ui 2018-03-09 13:10:19 -05:00
Jordan Sherer 4df7aae11a Merged in the extended free text experiment patch 2018-03-08 17:01:33 -05:00
122 changed files with 18222 additions and 8120 deletions
+308
View File
@@ -0,0 +1,308 @@
#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
@@ -0,0 +1,67 @@
#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,6 +87,19 @@ 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,6 +56,8 @@ 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
+27 -13
View File
@@ -2,13 +2,15 @@
# 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 wsjtx "@PROJECT_NAME@")
set (CPACK_CREATE_DESKTOP_LINKS wsjtx)
set (CPACK_PACKAGE_EXECUTABLES ft8call "@PROJECT_NAME@")
set (CPACK_CREATE_DESKTOP_LINKS ft8call)
set (CPACK_STRIP_FILES TRUE)
#
@@ -19,14 +21,25 @@ 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:\\WSJT")
# 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 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\\wsjtx.ico")
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
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 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
@@ -35,13 +48,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\\\\wsjtx.exe")
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\ft8call.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 "wsjtx.exe")
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "ft8call.exe")
set (CPACK_NSIS_MODIFY_PATH ON)
endif ()
@@ -54,20 +67,21 @@ 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/wsjtx_DMG.DS_Store")
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/ft8call_DMG.DS_Store")
set (CPACK_BUNDLE_NAME "@WSJTX_BUNDLE_NAME@")
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")
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 "/")
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}-@wsjtx_VERSION@-${CPACK_SYSTEM_NAME}")
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-${CPACK_SYSTEM_NAME}")
set (CPACK_SOURCE_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-Source")
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-Source")
if (NOT CPACK_WIX_SIZEOF_VOID_P)
set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
+48 -34
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 (wsjtx C CXX Fortran)
project (ft8call C CXX Fortran)
#
# CMake policies
@@ -45,10 +45,10 @@ message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}")
#
# project information
#
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_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_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,6 +303,11 @@ 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
@@ -665,6 +670,7 @@ set (wsjtx_UISRCS
widegraph.ui
logqso.ui
Configuration.ui
messagereplydialog.ui
)
set (UDP_library_CXXSRCS
@@ -718,7 +724,7 @@ set (TOP_LEVEL_RESOURCES
mouse_commands.txt
prefixes.txt
cty.dat
icons/Darwin/wsjtx.iconset/icon_128x128.png
icons/Darwin/FT8Call.iconset/icon_128x128.png
contrib/gpl-v3-logo.svg
artwork/splash.png
)
@@ -818,6 +824,7 @@ 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)
@@ -1298,7 +1305,7 @@ else (${OPENMP_FOUND} OR APPLE)
endif (${OPENMP_FOUND} OR APPLE)
# build the main application
add_executable (wsjtx MACOSX_BUNDLE
add_executable (ft8call MACOSX_BUNDLE
${wsjtx_CXXSRCS}
${wsjtx_GENUISRCS}
wsjtx.rc
@@ -1307,10 +1314,10 @@ add_executable (wsjtx MACOSX_BUNDLE
)
if (WSJT_CREATE_WINMAIN)
set_target_properties (wsjtx PROPERTIES WIN32_EXECUTABLE ON)
set_target_properties (ft8call PROPERTIES WIN32_EXECUTABLE ON)
endif (WSJT_CREATE_WINMAIN)
set_target_properties (wsjtx PROPERTIES
set_target_properties (ft8call 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}"
@@ -1323,27 +1330,27 @@ set_target_properties (wsjtx PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx"
)
target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
target_include_directories (ft8call PRIVATE ${FFTW3_INCLUDE_DIRS})
if (APPLE)
target_link_libraries (wsjtx wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
target_link_libraries (ft8call wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
else ()
target_link_libraries (wsjtx wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
target_link_libraries (ft8call wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
if (OpenMP_C_FLAGS)
set_target_properties (wsjtx PROPERTIES
set_target_properties (ft8call PROPERTIES
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
LINK_FLAGS "${OpenMP_C_FLAGS}"
)
endif ()
set_target_properties (wsjtx PROPERTIES
set_target_properties (ft8call PROPERTIES
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
)
if (WIN32)
set_target_properties (wsjtx PROPERTIES
set_target_properties (ft8call PROPERTIES
LINK_FLAGS -Wl,--stack,16777216
)
endif ()
endif ()
qt5_use_modules (wsjtx SerialPort) # not sure why the interface link library syntax above doesn't work
qt5_use_modules (ft8call 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})
@@ -1388,18 +1395,19 @@ endif (WSJT_CREATE_WINMAIN)
if (UNIX)
if (NOT WSJT_SKIP_MANPAGES)
add_subdirectory (manpages)
add_dependencies (wsjtx manpages)
add_dependencies (ft8call manpages)
endif (NOT WSJT_SKIP_MANPAGES)
if (NOT APPLE)
add_subdirectory (debian)
add_dependencies (wsjtx debian)
add_dependencies (ft8call debian)
endif (NOT APPLE)
endif (UNIX)
#
# installation
#
install (TARGETS wsjtx
install (TARGETS ft8call
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
BUNDLE DESTINATION . COMPONENT runtime
)
@@ -1476,7 +1484,6 @@ if (APPLE)
)
endif (APPLE)
#
# uninstall support
#
@@ -1489,15 +1496,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
@@ -1514,18 +1521,25 @@ configure_file (
if (NOT WIN32 AND NOT APPLE)
# install a desktop file so wsjtx appears in the application start
# install a desktop file so ft8call appears in the application start
# menu with an icon
install (
FILES wsjtx.desktop message_aggregator.desktop
DESTINATION share/applications
FILES ft8call.desktop
DESTINATION /usr/share/applications
#COMPONENT runtime
)
install (
FILES icons/Unix/wsjtx_icon.png
DESTINATION share/pixmaps
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
#COMPONENT runtime
)
endif (NOT WIN32 AND NOT APPLE)
+1
View File
@@ -10,6 +10,7 @@ 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 ();
+705 -138
View File
File diff suppressed because it is too large Load Diff
+47 -8
View File
@@ -94,10 +94,20 @@ 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 decoded_text_font () const;
QFont rx_text_font () const;
QFont tx_text_font () const;
QFont compose_text_font () const;
qint32 id_interval () const;
qint32 ntrials() const;
qint32 aggressive() const;
@@ -105,11 +115,15 @@ public:
double degrade() const;
double txDelay() const;
bool id_after_73 () const;
bool tx_QSY_allowed () const;
bool spot_to_psk_reporter () 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 monitor_off_at_startup () const;
bool monitor_last_used () const;
bool log_as_RTTY () const;
bool log_as_DATA () const;
bool report_in_comments () const;
bool prompt_to_log () const;
bool insert_blank () const;
@@ -119,6 +133,7 @@ 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;
@@ -138,6 +153,9 @@ 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;
@@ -147,6 +165,7 @@ 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;
@@ -154,15 +173,25 @@ 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_TxMsg () 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_DXCC () const;
QColor color_NewCall () const;
bool pwrBandTxMemory () const;
@@ -193,7 +222,11 @@ public:
void set_calibration (CalibrationParams);
// Set the dynamic grid which is only used if configuration setting is enabled.
void set_location (QString const&);
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);
// This method queries if a CAT and PTT connection is operational.
bool is_transceiver_online () const;
@@ -251,8 +284,12 @@ public:
// These signals indicate a font has been selected and accepted for
// the application text and decoded text respectively.
//
Q_SIGNAL void text_font_changed (QFont);
Q_SIGNAL void decoded_text_font_changed (QFont);
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 ();
//
// This signal is emitted when the UDP server changes
@@ -260,6 +297,8 @@ 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
+1546 -679
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/wsjtx/$UID"
WSJTX_TEMP="/tmp/ft8call/$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/wsjtx"
exec "$WSJTX_RESOURCES/bin/ft8call"
+4
View File
@@ -1,3 +1,7 @@
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
-----------------------------------------
+11 -151
View File
@@ -26,154 +26,16 @@ namespace
{
FrequencyList_v2::FrequencyItems const default_frequency_list =
{
{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},
{ 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
};
}
@@ -395,9 +257,7 @@ bool FrequencyList_v2::filterAcceptsRow (int source_row, QModelIndex const& /* p
}
if (result && m_->mode_filter_ != Modes::ALL)
{
// 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_;
result = Modes::ALL == item.mode_ || 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};
enum class Length {field = 2, square = 4, subsquare = 6, extended = 8, doubleextended = 16};
MaidenheadLocatorValidator (QObject * parent = nullptr
, Length length = Length::subsquare
, Length required = Length::square);
+92 -210
View File
@@ -4,6 +4,7 @@
#include <vector>
#include <algorithm>
#include <QApplication>
#include <QUdpSocket>
#include <QHostInfo>
#include <QTimer>
@@ -12,16 +13,70 @@
#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,
@@ -37,7 +92,7 @@ public:
connect (heartbeat_timer_, &QTimer::timeout, this, &impl::heartbeat);
connect (this, &QIODevice::readyRead, this, &impl::pending_datagrams);
heartbeat_timer_->start (NetworkMessage::pulse * 1000);
heartbeat_timer_->start (15 * 1000);
// bind to an ephemeral port
bind ();
@@ -86,6 +141,7 @@ public:
QByteArray last_message_;
};
#include "MessageClient.moc"
void MessageClient::impl::host_info_results (QHostInfo host_info)
@@ -138,111 +194,26 @@ void MessageClient::impl::parse_message (QByteArray const& msg)
{
try
{
//
// 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 ();
}
//
// 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);
}
}
break;
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;
}
if(msg.isEmpty()){
return;
}
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;
}
if(!d.isObject()){
Q_EMIT self_->error(QString {"MessageClient json parse error: json is not an object"});
return;
}
Message m;
m.read(d.object());
Q_EMIT self_->message(m);
}
catch (std::exception const& e)
{
@@ -258,14 +229,12 @@ void MessageClient::impl::heartbeat ()
{
if (server_port_ && !server_.isNull ())
{
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_);
}
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_);
}
}
@@ -273,12 +242,8 @@ void MessageClient::impl::closedown ()
{
if (server_port_ && !server_.isNull ())
{
QByteArray message;
NetworkMessage::Builder out {&message, NetworkMessage::Close, id_, schema_};
if (OK == check_status (out))
{
writeDatagram (message, server_, server_port_);
}
Message m("CLOSE");
writeDatagram (m.toJson(), server_, server_port_);
}
}
@@ -364,6 +329,7 @@ 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 ())
@@ -378,6 +344,10 @@ 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)
{
@@ -397,91 +367,3 @@ 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);
}
}
+32 -47
View File
@@ -3,8 +3,11 @@
#include <QObject>
#include <QTime>
#include <QDataStream>
#include <QDateTime>
#include <QString>
#include <QJsonDocument>
#include <QJsonObject>
#include "Radio.hpp"
#include "pimpl_h.hpp"
@@ -13,6 +16,29 @@ 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
@@ -24,7 +50,7 @@ class QColor;
class MessageClient
: public QObject
{
Q_OBJECT;
Q_OBJECT
public:
using Frequency = Radio::Frequency;
@@ -47,28 +73,8 @@ public:
// change the server port messages are sent to
Q_SLOT void set_server_port (port_type server_port = 0u);
// 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 is used to send an arbitrary message
Q_SLOT void send(Message const &message);
// this slot may be used to send arbitrary UDP datagrams to and
// destination allowing the underlying socket to be used for general
@@ -79,36 +85,15 @@ public:
// with send_raw_datagram() above)
Q_SLOT void add_blocked_destination (QHostAddress const&);
// 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);
Q_SIGNAL void message(Message 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 the a reply a message is received
Q_SIGNAL void message_received(QString const &type, QString const &message);
// 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_;
+1 -10
View File
@@ -14,16 +14,7 @@ namespace
char const * const mode_names[] =
{
"All",
"JT65",
"JT9",
"JT4",
"WSPR",
"Echo",
"ISCAT",
"MSK144",
"QRA64",
"FreqCal",
"FT8"
"FT8CALL",
};
std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]);
}
+1 -10
View File
@@ -40,16 +40,7 @@ public:
enum Mode
{
ALL, // matches with all modes
JT65,
JT9,
JT4,
WSPR,
Echo,
ISCAT,
MSK144,
QRA64,
FreqCal,
FT8,
FT8CALL,
MODES_END_SENTINAL_AND_COUNT // this must be last
};
Q_ENUM (Mode)
+40
View File
@@ -0,0 +1,40 @@
#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
@@ -0,0 +1,35 @@
#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
+152 -48
View File
@@ -28,8 +28,10 @@ QDebug operator << (QDebug debug, StationList::Station const& station)
QDebugStateSaver saver {debug};
debug.nospace () << "Station("
<< station.band_name_ << ", "
<< station.offset_ << ", "
<< station.antenna_description_ << ')';
<< station.frequency_ << ", "
<< station.switch_at_ << ", "
<< station.switch_until_ << ", "
<< station.description_ << ')';
return debug;
}
#endif
@@ -37,15 +39,19 @@ QDebug operator << (QDebug debug, StationList::Station const& station)
QDataStream& operator << (QDataStream& os, StationList::Station const& station)
{
return os << station.band_name_
<< station.offset_
<< station.antenna_description_;
<< station.frequency_
<< station.switch_at_
<< station.switch_until_
<< station.description_;
}
QDataStream& operator >> (QDataStream& is, StationList::Station& station)
{
return is >> station.band_name_
>> station.offset_
>> station.antenna_description_;
>> station.frequency_
>> station.switch_at_
>> station.switch_until_
>> station.description_;
}
@@ -90,7 +96,7 @@ public:
return matches.isEmpty () ? QModelIndex {} : matches.first ();
}
static int constexpr num_columns {3};
static int constexpr num_columns {5};
static auto constexpr mime_type = "application/wsjt.antenna-descriptions";
Bands const * bands_;
@@ -172,12 +178,6 @@ 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,6 +203,7 @@ QModelIndex StationList::impl::add (Station s)
return QModelIndex {};
}
#if 0
auto StationList::impl::offset (Frequency f) const -> FrequencyDelta
{
// Lookup band for frequency
@@ -214,12 +215,13 @@ auto StationList::impl::offset (Frequency f) const -> FrequencyDelta
{
if (stations_[i].band_name_ == band)
{
return stations_[i].offset_;
return stations_[i].frequency_;
}
}
}
return 0; // no offset
}
#endif
int StationList::impl::rowCount (QModelIndex const& parent) const
{
@@ -242,7 +244,10 @@ Qt::ItemFlags StationList::impl::flags (QModelIndex const& index) const
&& row < stations_.size ()
&& column < num_columns)
{
if (description_column == column)
if (band_column == column){
result |= Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
} else if (description_column == column)
{
result |= Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
}
@@ -295,14 +300,14 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
break;
case Qt::TextAlignmentRole:
item = Qt::AlignHCenter + Qt::AlignVCenter;
item = (int)Qt::AlignHCenter | Qt::AlignVCenter;
break;
}
break;
case offset_column:
case frequency_column:
{
auto frequency_offset = stations_.at (row).offset_;
auto frequency_offset = stations_.at (row).frequency_;
switch (role)
{
case SortRole:
@@ -317,37 +322,79 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
case Qt::ToolTipRole:
case Qt::AccessibleDescriptionRole:
item = tr ("Frequency offset");
item = tr ("Frequency");
break;
case Qt::TextAlignmentRole:
item = Qt::AlignRight + Qt::AlignVCenter;
item = (int)Qt::AlignRight | Qt::AlignVCenter;
break;
}
}
break;
case description_column:
switch (role)
{
case SortRole:
case Qt::EditRole:
case Qt::DisplayRole:
case Qt::AccessibleTextRole:
item = stations_.at (row).antenna_description_;
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 ("Antenna description");
break;
case Qt::ToolTipRole:
case Qt::AccessibleDescriptionRole:
item = tr ("Switch at this time");
break;
case Qt::TextAlignmentRole:
item = Qt::AlignLeft + Qt::AlignVCenter;
break;
}
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)
{
case SortRole:
case Qt::EditRole:
case Qt::DisplayRole:
case Qt::AccessibleTextRole:
item = stations_.at (row).description_;
break;
case Qt::ToolTipRole:
case Qt::AccessibleDescriptionRole:
item = tr ("Antenna description");
break;
case Qt::TextAlignmentRole:
item = (int)Qt::AlignLeft | Qt::AlignVCenter;
break;
}
break;
}
}
return item;
@@ -362,8 +409,10 @@ QVariant StationList::impl::headerData (int section, Qt::Orientation orientation
switch (section)
{
case band_column: header = tr ("Band"); break;
case offset_column: header = tr ("Offset"); break;
case description_column: header = tr ("Antenna Description"); 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;
}
}
else
@@ -402,23 +451,78 @@ bool StationList::impl::setData (QModelIndex const& model_index, QVariant const&
}
break;
case offset_column:
case frequency_column:
{
if (value.canConvert<FrequencyDelta> ())
if (value.canConvert<Frequency> ())
{
FrequencyDelta offset {qvariant_cast<Radio::FrequencyDelta> (value)};
if (offset != stations_[row].offset_)
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_)
{
stations_[row].offset_ = offset;
stations_[row].frequency_ = 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].antenna_description_ = value.toString ();
stations_[row].description_ = value.toString ();
Q_EMIT dataChanged (model_index, model_index, roles);
changed = true;
break;
@@ -527,7 +631,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, QString {}});
add (Station {band, 0, QDateTime::currentDateTimeUtc(), QDateTime::currentDateTimeUtc(), QString {}});
}
}
return true;
+11 -7
View File
@@ -2,6 +2,7 @@
#define STATION_LIST_HPP__
#include <QSortFilterProxyModel>
#include <QDateTime>
#include <QString>
#include <QList>
@@ -52,13 +53,15 @@ public:
struct Station
{
QString band_name_;
FrequencyDelta offset_;
QString antenna_description_;
Frequency frequency_;
QDateTime switch_at_;
QDateTime switch_until_;
QString description_;
};
using Stations = QList<Station>;
enum Column {band_column, offset_column, description_column};
enum Column {band_column, frequency_column, switch_at_column, switch_until_column, description_column};
explicit StationList (Bands const * bands, QObject * parent = nullptr);
explicit StationList (Bands const * bands, Stations, QObject * parent = nullptr);
@@ -74,7 +77,6 @@ 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;
@@ -88,9 +90,11 @@ private:
inline
bool operator == (StationList::Station const& lhs, StationList::Station const& rhs)
{
return lhs.band_name_ == rhs.band_name_
&& lhs.offset_ == rhs.offset_
&& lhs.antenna_description_ == rhs.antenna_description_;
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_;
}
QDataStream& operator << (QDataStream&, StationList::Station const&);
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
+3 -3
View File
@@ -1,6 +1,6 @@
# Version number components
set (WSJTX_VERSION_MAJOR 1)
set (WSJTX_VERSION_MINOR 10)
set (WSJTX_VERSION_PATCH 0)
set (WSJTX_VERSION_MAJOR 0)
set (WSJTX_VERSION_MINOR 6)
set (WSJTX_VERSION_PATCH 5)
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,12 +269,14 @@ 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};
+27 -15
View File
@@ -13,23 +13,35 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
{
ui->setupUi(this);
ui->labelTxt->setText ("<h2>" + QString {"WSJT-X v"
ui->labelTxt->setText ("<h2>" + QString {"FT8Call v"
+ QCoreApplication::applicationVersion ()
+ " " + revision ()}.simplified () + "</h2><br />"
"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>");
"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.");
}
CAboutDlg::~CAboutDlg()
+9 -1
View File
@@ -5,8 +5,16 @@
<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 WSJT-X</string>
<string>About FT8Call</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
+70
View File
@@ -0,0 +1,70 @@
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()
+7 -26
View File
@@ -12,8 +12,8 @@
sodipodi:version="0.32"
viewBox="0 0 640 480"
version="1.1"
sodipodi:docname="tasto_5_architetto_franc_01.svg"
inkscape:version="0.48.4 r9939"
sodipodi:docname="DragNDrop Background.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
width="100%"
height="100%">
<defs
@@ -27,10 +27,10 @@
inkscape:zoom="1.89375"
inkscape:cx="227.06271"
inkscape:cy="240"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g3" />
<g
@@ -72,25 +72,6 @@
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">
@@ -107,7 +88,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: 7.6 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

+95
View File
@@ -0,0 +1,95 @@
<?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>

After

Width:  |  Height:  |  Size: 3.1 KiB

+95
View File
@@ -0,0 +1,95 @@
<?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>

After

Width:  |  Height:  |  Size: 3.1 KiB

+64 -1098
View File
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

+31 -30
View File
@@ -3,8 +3,8 @@
#
# Windows
#
inkscape -z -e /tmp/image-0.png wsjt_globe_128x128.svg
inkscape -z -e /tmp/image-1.png wsjtx_globe_1024x1024.svg
inkscape -z -e /tmp/image-0.png icon_128.svg
inkscape -z -e /tmp/image-1.png icon_1024.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,41 +25,42 @@ 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/wsjtx.ico
-alpha remove ../icons/windows-icons/ft8call.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/wsjtx.ico
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/ft8call.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
#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
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/installer_logo.bmp
#
# Mac
#
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/*
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/*
# 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 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
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
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"
@@ -68,5 +69,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/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
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
-577
View File
@@ -1,577 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 32 KiB

-839
View File
@@ -1,839 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 40 KiB

-602
View File
@@ -1,602 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 33 KiB

+1699
View File
File diff suppressed because it is too large Load Diff
+199 -30
View File
@@ -4,6 +4,8 @@
#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);
}
@@ -15,43 +17,210 @@ 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)
{
message_ = message_.left (21).remove (QRegularExpression {"[<>]"});
int i1 = message_.indexOf ('\r');
if (i1 > 0)
{
message_ = message_.left (i1 - 1);
if(message_.length() >= 1) {
message_ = message_.left (21).remove (QRegularExpression {"[<>]"});
int i1 = message_.indexOf ('\r');
if (i1 > 0) {
message_ = message_.left (i1 - 1);
}
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
auto eom_pos = message_.indexOf (' ', 16);
// we always want at least the characters to position 16
if (eom_pos < 16) eom_pos = message_.size () - 1;
// remove DXCC entity and worked B4 status. TODO need a better way to do this
message_ = message_.left (eom_pos + 1);
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
auto eom_pos = message_.indexOf (' ', 16);
// we always want at least the characters to position 16
if (eom_pos < 16) eom_pos = message_.size () - 1;
// 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();
}
// 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);
}
};
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
{
+35 -6
View File
@@ -10,6 +10,7 @@
#define DECODEDTEXT_H
#include <QString>
#include <QStringList>
@@ -30,15 +31,35 @@ class DecodedText
{
public:
explicit DecodedText (QString const& message, bool, QString const& my_grid);
explicit DecodedText (QString const& ft8callmessage);
QString string() const { return string_; };
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_; }
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;
@@ -49,6 +70,8 @@ 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
@@ -75,6 +98,12 @@ 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_TxMsg, bool bFastMode)
QColor color_ReceivedMsg, 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_TxMsg);
appendText (t, color_ReceivedMsg);
}
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_TxMsg, bool bFastMode);
QColor color_ReceivedMsg, bool bFastMode);
void displayQSY(QString text);
void displayFoxToBeCalled(QString t, QColor bg);
+11
View File
@@ -0,0 +1,11 @@
[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: 32 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

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.

Before

Width:  |  Height:  |  Size: 538 KiB

+29
View File
@@ -0,0 +1,29 @@
#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
@@ -0,0 +1,33 @@
#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,6 +16,7 @@ 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
+13 -2
View File
@@ -2,13 +2,15 @@ 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)
@@ -20,6 +22,7 @@ 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
@@ -30,7 +33,15 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
enddo
i4Dec6BitWords(ibyte)=itmp
enddo
call unpackmsg(i4Dec6BitWords,msgreceived,.false.,' ')
!call unpackmsg(i4Dec6BitWords,msgreceived,.false.,' ')
msgreceived=' '
do ibyte=1,12
itmp=i4Dec6BitWords(ibyte)
msgreceived(ibyte:ibyte) = alphabet(itmp+1:itmp+1)
enddo
ncrcflag=1
else
msgreceived=' '
+1
View File
@@ -73,6 +73,7 @@ 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=mycall//' '//hiscall//' '//hisgrid
! 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
i3bit=0 ! ### TEMPORARY ??? ###
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
apsym=2*msgbits-1
+7 -39
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
character message*22,msgsent*22,origmsg*22
character*12 mycall12,hiscall12
character*6 mycall6,mygrid6,hiscall6,c1,c2
character*87 cbits
@@ -374,13 +374,12 @@ 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
if(i3bit.eq.1) decoded(57:)=0
call extractmessage174(decoded,message,ncrcflag)
call extractmessage174(decoded,origmsg,ncrcflag)
decoded=decoded0
! This needs fixing for messages with i3bit=1:
message(1:12)=origmsg(1:12)
call genft8(message,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
if(lsubtract) call subtractft8(dd0,itone,f1,xdt2)
xsig=0.0
@@ -396,41 +395,10 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
xsnr2=db(xsig/xbase - 1.0) - 32.0
if(.not.nagain) xsnr=xsnr2
if(xsnr .lt. -24.0) xsnr=-24.0
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)//' '
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
msg37=origmsg//' '
msg37(22:22) = char(48 + i3bit)
return
endif
+18 -48
View File
@@ -62,21 +62,17 @@ 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"
if(itype.eq.2) msgtype="Type 1 pfx"
if(itype.eq.3) msgtype="Type 1 sfx"
if(itype.eq.4) msgtype="Type 2 pfx"
if(itype.eq.5) msgtype="Type 2 sfx"
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
call packmsg(msg(1:22),dgen,itype,bcontest)
msgtype=""
if(itype.eq.1) msgtype="Std Msg"
if(itype.eq.2) msgtype="Type 1 pfx"
if(itype.eq.3) msgtype="Type 1 sfx"
if(itype.eq.4) msgtype="Type 2 pfx"
if(itype.eq.5) msgtype="Type 2 sfx"
if(itype.eq.6) msgtype="Free text"
i3bit=0
call genft8(msg(1:22),mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
decoded=msgbits
i3bit=4*decoded(73) + 2*decoded(74) + decoded(75)
iFreeText=decoded(57)
@@ -85,40 +81,14 @@ program ft8code
call extractmessage174(decoded,message,ncrcflag)
decoded=decoded0
if(i3bit.eq.0) then
if(bcontest) call fix_contest_msg(mygrid6,message)
bad=" "
comment=' '
if(itype.ne.6 .and. message.ne.msgchk) bad="*"
if(itype.eq.6 .and. message(1:13).ne.msgchk(1:13)) bad="*"
if(itype.eq.6 .and. len(trim(msgchk)).gt.13) comment='truncated'
write(*,1020) imsg,msgchk,message,bad,i3bit,itype,msgtype,comment
if(bcontest) call fix_contest_msg(mygrid6,message)
bad=" "
comment=' '
if(itype.ne.6 .and. message.ne.msgchk) bad="*"
if(itype.eq.6 .and. message(1:13).ne.msgchk(1:13)) bad="*"
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
+15 -2
View File
@@ -5,6 +5,7 @@ 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
@@ -16,8 +17,19 @@ 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
call packmsg(msg,i4Msg6BitWords,itype,bcontest) !Pack into 12 6-bit bytes
call unpackmsg(i4Msg6BitWords,msgsent,bcontest,mygrid) !Unpack to get msgsent
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
write(cbits,1000) i4Msg6BitWords,32*i3bit
1000 format(12b6.6,b8.8)
@@ -26,6 +38,7 @@ 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,6 +91,7 @@ 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,6 +63,7 @@ contains
1001 format("000000_",i6.6)
call ft8apset(mycall12,mygrid6,hiscall12,hisgrid6,bcontest,apsym,iaptype)
dd=iwave
ndecodes=0
allmessages=' '
+3 -1
View File
@@ -423,7 +423,9 @@ subroutine packbits(dbits,nsymd,m0,sym)
itype=1
if(bcontest) then
call to_contest_msg(msg0,msg)
!call to_contest_msg(msg0,msg)
! this causes problems with freetext ala, KN4CRD DE KN4CRD -13 R
msg=msg0
else
msg=msg0
end if
+1 -1
View File
@@ -6,7 +6,7 @@
namespace
{
auto logFileName = "wsjtx_log.adi";
auto logFileName = "ft8call_log.adi";
auto countryFileName = "cty.dat";
}
+7 -8
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 noSuffix, bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall)
bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall)
{
if(!isHidden()) return;
ui->call->setText(hisCall);
@@ -75,8 +75,7 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString
if(rptRcvd!="") t+=" Rcvd: " + rptRcvd;
ui->comments->setText(t);
}
if(noSuffix and mode.mid(0,3)=="JT9") mode="JT9";
if(toRTTY and mode.mid(0,3)=="JT9") mode="RTTY";
if(toRTTY) mode="DATA";
ui->mode->setText(mode);
ui->sent->setText(rptSent);
ui->rcvd->setText(rptRcvd);
@@ -113,10 +112,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 "wsjtx_log.adi"
QString filename = "wsjtx_log.adi"; // TODO allow user to set
//Log this QSO to ADIF file "ft8call_log.adi"
QString filename = "ft8call_log.adi"; // TODO allow user to set
ADIF adifile;
auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx_log.adi");
auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("ft8call_log.adi");
adifile.init(adifilePath);
QByteArray ADIF {adifile.QSOToADIF (hisCall, hisGrid, mode, rptSent, rptRcvd, m_dateTimeOn, m_dateTimeOff, band
@@ -138,8 +137,8 @@ void LogQSO::accept()
}
}
//Log this QSO to file "wsjtx.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")};
//Log this QSO to file "ft8call.log"
static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("ft8call.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 noSuffix, bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall);
bool toRTTY, bool dBtoComments, bool bFox, QString const& opCall);
public slots:
void accept();
+8 -2
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>377</width>
<height>257</height>
<width>600</width>
<height>285</height>
</rect>
</property>
<property name="sizePolicy">
@@ -16,6 +16,12 @@
<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">
+8 -3
View File
@@ -105,7 +105,8 @@ int main(int argc, char *argv[])
// that GUI has correct l18n
// Override programs executable basename as application name.
a.setApplicationName ("WSJT-X");
//a.setApplicationName ("WSJT-X");
a.setApplicationName("FT8Call");
a.setApplicationVersion (version ());
#if QT_VERSION >= 0x050200
@@ -259,7 +260,7 @@ int main(int argc, char *argv[])
multi_settings.set_common_value (splash_flag_name, false);
splash.close ();
});
splash.show ();
//splash.show ();
a.processEvents ();
}
}
@@ -295,8 +296,12 @@ 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"};
@@ -324,7 +329,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();
}
+4598 -810
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