diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..3c4a8e5 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,413 @@ +--- +version: 2.1 + +parameters: + run_workflow_deploy: + type: boolean + default: true + +## Start of build control of O58 and O562 pluginsrun_workflow_deploy +## run_workflow_deploy_O58 +## type: boolean +## default: true +## run_workflow_deploy_O562 +## type: boolean +## default: false + +std-filters: &std-filters + filters: + branches: + ignore: + - devel + - tmp + tags: + only: /.*/ + +workflows: + build_all: + jobs: +## ---------------------- +## OpenCPN 5.8 Plugins (Also work in 5.10) +## ---------------------- + - build-android-arm64: + <<: *std-filters + - build-android-armhf: + <<: *std-filters + - build-flatpak-aarch64-2208: + <<: *std-filters + - build-flatpak-x86-2208: + <<: *std-filters + - build-flatpak-aarch64-2408: + <<: *std-filters + - build-flatpak-x86-2408: + <<: *std-filters + - build-msvc-wx32-2022: + <<: *std-filters + - build-debian-arm64-12-bookworm: + <<: *std-filters + - build-debian-armhf-12-bookworm: + <<: *std-filters + - build-debian-x86_64-12-bookworm: + <<: *std-filters + - build-debian-armhf-11-bullseye: + <<: *std-filters + - build-debian-arm64-11-bullseye: + <<: *std-filters + - build-debian-x86_64-11-bullseye: + <<: *std-filters +# KEEP needed for Jammy with wx32 + - build-ubuntu-x86_64-2204-jammy: + <<: *std-filters + - build-macos-universal: + <<: *std-filters + +## ------------------------------------------- +## OpenCPN 5.6.2 Plugins Frozen - 28/05/2023 +## ------------------------------------------ +## Circleci will not build for macos 11 so removed - 18/10/2023 + - build-msvc-2022: + <<: *std-filters + +orbs: + cloudsmith: cloudsmith/cloudsmith@1.0.4 + win: circleci/windows@5.0 + +commands: + deploy-code: + parameters: + install_python: + type: boolean + default: false + deploy_use_orb: + type: boolean + default: true + steps: + - when: + condition: <> + steps: + - when: + condition: <> + steps: + - run: sudo apt install -y python3-pip + - run: python3 -m pip install cloudsmith-cli + - when: + condition: <> + steps: + - cloudsmith/ensure-api-key + - cloudsmith/install-cli + - run: bash ci/cloudsmith-upload.sh + +# if you want to use a local proxy add Acquire::http::Proxy \"http://192.168.1.1:3142\"; to a file called circleci-cache/apt-proxy. This will require +# --volume {your local directory}/circleci-cache:/home/circleci/circleci-cache +# on the circleci local command line so that the docker image script can have access to the directory +# if you are on a slow or data limited internet link you can put a copy of master.zip here, or allow one to be downloaded by the script, as it is used by the android builds to +# provide the wxWidgets QT information. + +jobs: +## --------------------- +## OpenCPN 5.8 Plugins +## --------------------- + build-android-arm64: + docker: + - image: cimg/android:2023.12-ndk + resource_class: large + environment: + - OCPN_TARGET: android-arm64 + - DEPLOY_USE_ORB: true + - INSTALL_PYTHON: true + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: bash ci/circleci-build-android-arm64.sh + - deploy-code: + install_python: true + build-android-armhf: + docker: + - image: cimg/android:2023.12-ndk + resource_class: large + environment: + - OCPN_TARGET: android-armhf + - DEPLOY_USE_ORB: true + - INSTALL_PYTHON: true + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: bash ci/circleci-build-android-armhf.sh + - deploy-code: + install_python: true + build-macos-universal: + macos: + xcode: "15.2.0" + environment: + OCPN_TARGET: macos + CMAKE_BUILD_PARALLEL_LEVEL: 2 + WX_VER: 32 + DEPLOY_USE_ORB: false + INSTALL_PYTHON: false + steps: + - checkout + - run: sudo chmod go+w /usr/local + - restore_cache: + key: "{{checksum \"build-deps/macos-cache-stamp\"}}\ + -{{checksum \"cmake/MacosWxwidgets.cmake\"}}\ + -{{checksum \"ci/circleci-build-macos-universal.sh\"}}" + - run: chmod a+x ci/*.sh + - run: chmod a+x cmake/*.sh + - run: ci/circleci-build-macos-universal.sh + - save_cache: + key: "{{checksum \"build-deps/macos-cache-stamp\"}}\ + -{{checksum \"cmake/MacosWxwidgets.cmake\"}}\ + -{{checksum \"ci/circleci-build-macos-universal.sh\"}}" + paths: + - /tmp/local.cache.tar + - /Users/distiller/project/cache + - run: > + sh -c "otool -L build/*.dylib" + - run: > + sh -c "cat build/*.xml" + - deploy-code: + deploy_use_orb: false + install_python: false + build-msvc-wx32-2022: + executor: + name: win/server-2022 + shell: cmd.exe + environment: + - OCPN_TARGET: MSVC + - MSVC_VERSION: 2022 + - WX_VER: 32 + - DEPLOY_USE_ORB: false + steps: + - checkout + - run: + privileged: False + shell: cmd.exe + command: ci\circleci-build-msvc.bat + - deploy-code: + deploy_use_orb: false + build-flatpak-aarch64-2208: + machine: + image: ubuntu-2204:current + resource_class: arm.medium + environment: + - OCPN_TARGET: flatpak + - BUILD_ARCH: aarch64 + - FLATPAK_BRANCH: stable + - CLOUDSMITH_PKG_EXT: gz + - SDK_VER: 22.08 + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: + command: bash ci/circleci-build-flatpak.sh + - deploy-code + build-flatpak-x86-2208: + machine: + image: ubuntu-2204:current + environment: + - OCPN_TARGET: flatpak + - BUILD_ARCH: x86_64 + - FLATPAK_BRANCH: stable + - CLOUDSMITH_PKG_EXT: gz + - SDK_VER: 22.08 + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: + command: bash ci/circleci-build-flatpak.sh + no_output_timeout: 30m + - deploy-code + build-flatpak-aarch64-2408: + machine: + image: ubuntu-2204:current + resource_class: arm.medium + environment: + - OCPN_TARGET: flatpak + - BUILD_ARCH: aarch64 + - FLATPAK_BRANCH: stable + - CLOUDSMITH_PKG_EXT: gz + - SDK_VER: 24.08 + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: + command: bash ci/circleci-build-flatpak.sh + - deploy-code + build-flatpak-x86-2408: + machine: + image: ubuntu-2204:current + environment: + - OCPN_TARGET: flatpak + - BUILD_ARCH: x86_64 + - FLATPAK_BRANCH: stable + - CLOUDSMITH_PKG_EXT: gz + - SDK_VER: 24.08 + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: + command: bash ci/circleci-build-flatpak.sh + no_output_timeout: 30m + - deploy-code + build-debian-arm64-12-bookworm: + machine: + image: ubuntu-2204:current + resource_class: arm.medium + environment: + - OCPN_TARGET=bookworm-arm64 + - DOCKER_IMAGE=arm64v8/debian:bookworm + - BUILD_FLAGS=-j3 + - BUILD_ENV=debian + - WX_VER: 32 + - BUILD_GTK3: true + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ./ci/*.sh + - run: + command: ci/circleci-build-ubuntu-docker.sh + no_output_timeout: 30m + - deploy-code + build-debian-armhf-12-bookworm: + machine: + image: ubuntu-2204:current + resource_class: arm.medium + environment: + - OCPN_TARGET=bookworm-armhf + - DOCKER_IMAGE=arm32v7/debian:bookworm + - BUILD_FLAGS=-j3 + - BUILD_ENV=debian + - WX_VER: 32 + - BUILD_GTK3: true + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ./ci/*.sh + - run: + command: ci/circleci-build-ubuntu-docker.sh + no_output_timeout: 30m + - deploy-code + build-debian-x86_64-12-bookworm: + machine: + image: ubuntu-2404:current + environment: + - OCPN_TARGET: bookworm + - BUILD_GTK3: true + - WX_VER: 32 + - DEPLOY_USE_ORB: true + - BUILD_ENV=debian + - DOCKER_IMAGE=debian:bookworm + steps: + - checkout + - run: chmod a+x ci/*.sh + - run: + command: ci/circleci-build-ubuntu-docker.sh + no_output_timeout: 30m + - deploy-code + build-debian-armhf-11-bullseye: + machine: + image: ubuntu-2204:current + resource_class: arm.medium + environment: + - OCPN_TARGET=bullseye-armhf + - DOCKER_IMAGE=jongough/debian-armhf:bullseye + - BUILD_FLAGS=-j3 + - BUILD_ENV=debian + - BUILD_GTK3: true + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ./ci/*.sh + - run: + command: ci/circleci-build-ubuntu-docker.sh + no_output_timeout: 30m + - deploy-code + build-debian-arm64-11-bullseye: + machine: + image: ubuntu-2204:current + resource_class: arm.medium + environment: + - OCPN_TARGET=bullseye-arm64 + - DOCKER_IMAGE=arm64v8/debian:bullseye-backports + - BUILD_FLAGS=-j3 + - BUILD_ENV=debian + - BUILD_GTK3: true + - DEPLOY_USE_ORB: true + steps: + - checkout + - run: chmod a+x ./ci/*.sh + - run: + command: ci/circleci-build-ubuntu-docker.sh + no_output_timeout: 30m + - deploy-code + build-debian-x86_64-11-bullseye: + docker: + - image: circleci/buildpack-deps:bullseye-scm + environment: + - OCPN_TARGET: bullseye + - BUILD_GTK3: true + - DEPLOY_USE_ORB: true + - BUILD_ENV=debian + steps: + - checkout + - run: > + echo "deb-src http://ftp.us.debian.org/debian bullseye main" + | sudo tee -a /etc/apt/sources.list + - run: > + echo "deb-src http://ftp.us.debian.org/debian bullseye-updates main" + | sudo tee -a /etc/apt/sources.list + - run: cat /etc/apt/sources.list + - run: chmod a+x ci/*.sh + - run: ci/circleci-build-debian.sh + - deploy-code +## KEEP needed for OpenCPN v5.8 Jammy wx32 build + build-ubuntu-x86_64-2204-jammy: + docker: + - image: cimg/base:edge-22.04 + environment: + - BUILD_GTK3: true + - WX_VER: 32 + - OCPN_TARGET: jammy + - DEPLOY_USE_ORB: true + - BUILD_ENV=ubuntu + steps: + - checkout + - run: > + echo "deb-src http://us.archive.ubuntu.com/ubuntu/ jammy main" | sudo tee -a /etc/apt/sources.list + - run: > + echo "deb-src http://us.archive.ubuntu.com/ubuntu/ jammy-updates main" | sudo tee -a /etc/apt/sources.list + - run: > + echo "deb [trusted=yes] https://ppa.launchpadcontent.net/opencpn/opencpn/ubuntu/ jammy main" | sudo tee -a /etc/apt/sources.list + - run: cat /etc/apt/sources.list + - run: chmod a+x ci/*.sh + - run: ci/circleci-build-debian.sh + - deploy-code +## --------------------- +## OpenCPN 5.6.2 Plugins +## --------------------- + +## Appveyor doesn't build for Windows now. +## If below is used, WinXT will not work. + build-msvc-2022: + executor: + name: win/server-2022 + shell: cmd.exe + environment: + - OCPN_TARGET: MSVC + - MSVC_VERSION: 2022 + - WX_VER: 31 + - DEPLOY_USE_ORB: false + steps: + - checkout + - run: + privileged: False + shell: cmd.exe + command: ci\circleci-build-msvc.bat + - deploy-code: + deploy_use_orb: false + + diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..f347591 --- /dev/null +++ b/.clang-format @@ -0,0 +1,182 @@ +--- +Language: Cpp +# BasedOnStyle: Google +# AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false +AlignConsecutiveAssignments: false +AlignConsecutiveBitFields: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Left +AlignOperands: Align +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortEnumsOnASingleLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: WithoutElse +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: Yes +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: MultiLine + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Regroup +IncludeCategories: + - Regex: '^' + Priority: 2 + SortPriority: 0 + - Regex: '^<.*\.h>' + Priority: 1 + SortPriority: 0 + - Regex: '^<.*' + Priority: 2 + SortPriority: 0 + - Regex: '.*' + Priority: 3 + SortPriority: 0 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IncludeIsMainSourceRegex: '' +IndentCaseLabels: true +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: AfterExternBlock +IndentWidth: 2 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Never +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +RawStringFormats: + - Language: Cpp + Delimiters: + - cc + - CC + - cpp + - Cpp + - CPP + - 'c++' + - 'C++' + CanonicalDelimiter: '' + BasedOnStyle: google + - Language: TextProto + Delimiters: + - pb + - PB + - proto + - PROTO + EnclosingFunctions: + - EqualsProto + - EquivToProto + - PARSE_PARTIAL_TEXT_PROTO + - PARSE_TEST_PROTO + - PARSE_TEXT_PROTO + - ParseTextOrDie + - ParseTextProtoOrDie + - ParseTestProto + - ParsePartialTestProto + CanonicalDelimiter: '' + BasedOnStyle: google +ReflowComments: true +SortIncludes: false +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +Standard: Auto +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseCRLF: false +UseTab: Never +WhitespaceSensitiveMacros: + - STRINGIZE + - PP_STRINGIZE + - BOOST_PP_STRINGIZE +... + diff --git a/.cmake-format.yaml b/.cmake-format.yaml new file mode 100644 index 0000000..dcb6298 --- /dev/null +++ b/.cmake-format.yaml @@ -0,0 +1,33 @@ +additional_commands: + foo: + flags: + - BAR + - BAZ + kwargs: + DEPENDS: '*' + HEADERS: '*' + SOURCES: '*' +algorithm_order: +- 0 +- 1 +- 2 +- 3 +always_wrap: [] +bullet_char: '-' +command_case: lower +dangle_parens: true +emit_byteorder_mark: false +enable_markup: true +enum_char: . +#fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$ +first_comment_is_literal: false +keyword_case: unchanged +line_ending: unix +line_width: 80 +literal_comment_pattern: null +max_subargs_per_line: 3 +per_command: {} +#ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$ +separate_ctrl_name_with_space: true +separate_fn_name_with_space: false +tab_size: 2 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8095603 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# For information on this file see: https://editorconfig.org + +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{xml}] +charset = utf-8 + +[*.{cmake,cpp,h,sh,in,yml,xsd}] +charset = latin1 +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ed3992 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +cmake-build* +.BATCH +.build +build/* +.directory +po/POTFILES.in.test +temp +tmp +master.zip +OCPNAndroidCommon* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..43e0770 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "opencpn-libs"] + path = opencpn-libs + url = https://github.com/OpenCPN/opencpn-libs.git + branch = main diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f4625ed --- /dev/null +++ b/.travis.yml @@ -0,0 +1,41 @@ +language: cpp + +matrix: + include: +# The following 2 env: sections are now being done in circleci but are left here for examples +# - env: +# - OCPN_TARGET=stretch-armhf +# - DOCKER_IMAGE=raspbian/stretch +# - BUILD_FLAGS="-j2" +# - BUILD_ENV=raspbian +# services: +# - docker +# before_script: +# - travis_wait 120 sleep infinity & bash ./ci/travis-build-raspbian-armhf-part1.sh +# script: +# - travis_wait 120 sleep infinity & bash ./ci/travis-build-raspbian-armhf-part2.sh +# - env: +# - OCPN_TARGET=buster-armhf +# - DOCKER_IMAGE=jongough/raspbian-buster:plugin_build_tooling_current +# - BUILD_FLAGS=-j2 +# - BUILD_ENV=raspbian +# services: +# - docker +# before_script: +# - travis_wait 120 sleep infinity & bash ./ci/travis-build-raspbian-armhf-part1.sh +# script: +# - travis_wait 120 sleep infinity & bash ./ci/travis-build-raspbian-armhf-part2.sh +# The following env: section is for arm64 has now been moved to run in circleci +# - env: +# - OCPN_TARGET=bionic-armh64 +# - BUILD_GTK3=true +# - DOCKER_IMAGE=arm64v8/ubuntu:18.04 +# - BUILD_FLAGS=-j2 +# - BUILD_ENV=ubuntu +# services: +# - docker +# before_script: +# - travis_wait 120 sleep infinity & bash ./ci/travis-build-raspbian-armhf-part1.sh +# script: +# - travis_wait 120 sleep infinity & bash ./ci/travis-build-raspbian-armhf-part2.sh +# - bash ./ci/cloudsmith-upload.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 3479c84..8ea7906 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,33 +1,203 @@ -##--------------------------------------------------------------------------- -## Author: Sean D'Epagnier -## Copyright: -## License: GPLv3+ -##--------------------------------------------------------------------------- - +# --------------------------------------------------------------------------- +# Author: Sean d'Epagnier Copyright: +# License: GPL v3+ License: wxWidgets +# *************************************************************************** +# - Copyright (C) 2010 by Sean d'Epagnier * +# - License: GPLv3+ +# - This program is free software; you can redistribute it and/or modify * +# - it under the terms of the GNU General Public License as published by * +# - the Free Software Foundation; either version 2 of the License, or * +# - (at your option) any later version. * +# - * +# - This program is distributed in the hope that it will be useful, * +# - but WITHOUT ANY WARRANTY; without even the implied warranty of * +# - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# - GNU General Public License for more details. * +# - * +# - You should have received a copy of the GNU General Public License * +# - along with this program; if not, write to the * +# - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, * +# - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx * +# ----------------------------------------------------------------------------- +# Frontend2 Author: Jon Gough Testplugin(TP) v1.0.326.0 18/01/2025 DD/MM/YYYY +# buildCI:yes useODAPI:no validateJSON:no +# --------------------------------------------------------------------------- +## -- When changing this file do NOT change the order of the sections. -- ## +## -- Make changes only between the section blocks identified -- ## +## -- The whole configuration process relies on this sequence for success.-- ## +## +## -- Modify section below to include all the details for your plugin. -- ## + +set(CMLOC "CMakeLists: ") + # define minimum cmake version -CMAKE_MINIMUM_REQUIRED(VERSION 2.6.2) +cmake_minimum_required(VERSION 3.5.1) +if(COMMAND cmake_policy) + if (POLICY CMP0043) + cmake_policy(SET CMP0043 NEW) + endif (POLICY CMP0043) + cmake_policy(SET CMP0048 NEW) + if (POLICY CMP0076) + cmake_policy(SET CMP0076 NEW) + endif (POLICY CMP0076) + if (POLICY CMP0077) + cmake_policy(SET CMP0077 NEW) + endif (POLICY CMP0077) +endif (COMMAND cmake_policy) + + + + +# define plugin name, owner and versions +SET(VERBOSE_NAME "RTLSDR") +set(COMMON_NAME "rtlsdr") # Search "getcommonname"in rtlsdr_pi.cpp +set(TITLE_NAME "RTLSDR") +set(PACKAGE_CONTACT "Sean D'Epagnier ") +set(PACKAGE "rtlsdr_pi") +set(SHORT_DESCRIPTION "rtlsdr PlugIn for OpenCPN") +set(LONG_DESCRIPTION + "Automatically controls external command-line tools for software radio, options for AIS data, as well as ADS-b FM radio and vhf audio." +) + +set(VERSION_MAJOR "1") +set(VERSION_MINOR "4") +set(VERSION_PATCH "10") +set(VERSION_TWEAK "0") +set(VERSION_DATE "23/01/2025")#DD/MM/YYYY format +set(OCPN_MIN_VERSION "ov58") + +set(OCPN_API_VERSION_MAJOR "1") +set(OCPN_API_VERSION_MINOR "18") +set(TP_COMMENT " * Release using CI") + +set(PARENT "opencpn") + +#Use to set up a local webserver with git installed. +#Default is github.com. Now set in pluginconfigure.cmake +#set(GIT_REPOSITORY_SERVER "github.com") + +## Specifies Cloudsmith upload repository suffix for each catalog +set(PROD "prod") #Standard Repos +set(BETA "beta") #Standard Repos +set(ALPHA "alpha") #Standard Repos + +# Set if Cloudsmith Base Repository name does not match your Git Repository name. +#set (CLOUDSMITH_BASE_REPOSITORY "${GIT_REPOSITORY_NAME}") +#set (CLOUDSMITH_BASE_REPOSITORY "opencpn-plugins") #Ricks's customization +set (CLOUDSMITH_BASE_REPOSITORY "rtlsdr") #without the pi + +# Set the following to use OpenCPN cloudsmith repositories instead of own repositories +set(CLOUDSMITH_USER "opencpn") +# set (CLOUDSMITH_USER "rick-gleason") + +set(XML_INFO_URL + "https://opencpn.org/OpenCPN/plugins/rtlsdr.html" +) +set(XML_SUMMARY ${SHORT_DESCRIPTION}) +set(XML_DESCRIPTION ${LONG_DESCRIPTION}) + +## ----- Modify section above to include all the details for your plugin ------- ## +## ----- Modify section below if there are special requirements for the plugin --## + +option(PLUGIN_USE_SVG "Use SVG graphics" ON) + +set(CMAKE_CXX_STANDARD 11) + +# Prefer libGL.so to libOpenGL.so, see CMP0072 +set(OpenGL_GL_PREFERENCE "LEGACY") #not operational + +option(USE_GL "Enable OpenGL support" ON) +message(STATUS "${CMLOC}USE_GL: ${USE_GL}") + +if ("${CMAKE_BUILD_TYPE}" STREQUAL "") + set(CMAKE_BUILD_TYPE + "Release" + CACHE STRING "Choose the type of build" FORCE + ) +endif ("${CMAKE_BUILD_TYPE}" STREQUAL "") +set_property( + CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "" "Debug" "Release" "RelWithDebInfo" + "MinSizeRel" +) +message(STATUS "${CMLOC}Build type: ${CMAKE_BUILD_TYPE}") + +# ----- Statements below used to setup standard variables required by the CMAKE -## +# ----- process -- Do not remove -## + +project(${PACKAGE}) + +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +##======================================================== + +include("PluginSetup") + +##======================================================== +## ----- Above sets up standard variables required by CMAKE - Do not remove -----## +## ----- Modify section below if there are special requirements for the plugin --## + +set(CMAKE_VERBOSE_MAKEFILE "Activate verbose mode for make files" ON) + +option(Plugin_CXX11 "Use c++11" OFF) + +## ----- Modify section above if there are special requirements for the plugin --## +## ----- Do not change next section - needed to configure build process ---------## +##=========================================================== + +include("PluginConfigure") + +##=========================================================== +## ----- Do not change section above - needed to configure build process --------## +## ----- Change below to match project requirements for source, headers, etc. ---## -PROJECT(rtlsdr_pi) -SET(PACKAGE_NAME rtlsdr_pi) -SET(VERBOSE_NAME RTLSDR) -SET(TITLE_NAME RTLSDR) -SET(CPACK_PACKAGE_CONTACT "Sean D'Epagnier ") +add_definitions(-DUSE_S57) -MESSAGE (STATUS "*** Building ${PACKAGE_NAME} ***") +## ---- Section Below - Add your project SET(SRCS and SET(HDRS etc.. -INCLUDE("cmake/PluginConfigure.cmake") -SET(SRC_RTLSDR +SET(SRCS src/rtlsdr_pi.cpp src/rtlsdrDialog.cpp src/rtlsdrPrefs.cpp src/rtlsdrUI.cpp - src/flights.cpp - src/FlightsDialog.cpp - src/georef.c src/icons.cpp - ) + src/flights.cpp + src/FlightsDialog.cpp + src/georef.c + ) + +SET(HDRS + src/rtlsdrDialog.h + src/rtlsdrPrefs.h + src/rtlsdrUI.h + src/georef.h +) +add_definitions(-DPLUGIN_USE_SVG) + +## ----- Section above - Add your project SET(SRCS and SET(HDRS etc.-------## +## ----- If using JSON validation in plugin section below is needed --------## + +# Do not need Json Schema Validation + +## ----- If using JSON validation in plugin section above is needed --------## + + + +##============================================================= +## Change as required to collect all the set( headers and SRCS +## This add_library can be used in conditionals below. +##============================================================= + +set(SRC ${SRCS} ${HDRS} ) + +##============================================================= +## Modify/configure 'Include' Directories below for the Plugin +##============================================================= + +#include_directories(BEFORE ${PROJECT_SOURCE_DIR}/include) + +include_directories(BEFORE ${PLUGIN_SOURCE_DIR}/src/libaudiofile) IF(UNIX AND NOT APPLE) find_library(RTLSDR_LIBRARY NAMES rtlsdr DOC "The rtlsdr library" @@ -57,11 +227,12 @@ IF(UNIX AND NOT APPLE) ENDIF() ENDIF(UNIX AND NOT APPLE) -ADD_LIBRARY(${PACKAGE_NAME} SHARED ${SRC_RTLSDR} ${SRC_AISDECODER}) - -INCLUDE_DIRECTORIES(${PLUGIN_SOURCE_DIR}/src/libaudiofile) - -INCLUDE("cmake/PluginInstall.cmake") +#ADD_LIBRARY(${PACKAGE_NAME} SHARED ${SRC} ${SRC_AISDECODER}) +# ERROR cannot create target another target with same name exists. +# ADD_LIBRARY cannot create target "rtlsdr_pi" because another target with +# the same name already exists. The existing target is a shared library +# created in source directory "C:/Users/fcgle/source/rtlsdr_pi". See +# documentation for policy CMP0002 for more details. # note, we don't need to include some dll files if they are already included # with a mingw opencpn, for now, copy them anyway (makes installer large) @@ -71,5 +242,63 @@ IF(WIN32) ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/buildwin/bin) ENDIF(WIN32) -INCLUDE("cmake/PluginLocalization.cmake") -INCLUDE("cmake/PluginPackage.cmake") +## Change target_sources to match your project needs. +##============================================================== + +target_sources(${PACKAGE_NAME} PUBLIC ${SRC} ) + + +if (NOT OCPN_FLATPAK_CONFIG) + # Build environment not available when flatpak is being configured so + # following statements will not work + message(STATUS "${CMLOC}Adding target link libraries to ${PACKAGE_NAME}") + + if (WIN32) + add_subdirectory(opencpn-libs/WindowsHeaders) + target_link_libraries(${PACKAGE_NAME} windows::headers) + endif (WIN32) + + add_subdirectory(opencpn-libs/api-18) + target_link_libraries(${PACKAGE_NAME} ocpn::api) + + + add_subdirectory(opencpn-libs/plugin_dc) + target_link_libraries(${PACKAGE_NAME} ocpn::plugin-dc) + +endif (NOT OCPN_FLATPAK_CONFIG) + +add_definitions(-DTIXML_USE_STL) + +## +## ----- If using JSON validation section below is needed ---------------## +## + +# Do not need Json Schema Validation + + +##------- Change below to match project requirements --------------------## + +# Needed for android builds +if (QT_ANDROID) + include_directories(BEFORE ${qt_android_include}) +endif (QT_ANDROID) + +## Needed for all builds Do not change - needed to build app -------------## +##=============================================================== + +include("PluginInstall") +include("PluginLocalization") +include("PluginPackage") + +##================================================================ +## ----- Do not change section above - needed to configure build process --## + +message(STATUS "${CMLOC}include directories: ") +get_property( + dirs + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + PROPERTY INCLUDE_DIRECTORIES +) +foreach (dir ${dirs}) + message(STATUS "${CMLOC}dir='${dir}'") +endforeach () diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/SAVE/bld.bat b/SAVE/bld.bat new file mode 100644 index 0000000..c686d3c --- /dev/null +++ b/SAVE/bld.bat @@ -0,0 +1,48 @@ +REM FE2 Testplugin + +REM For Opencpn 5.6.2 and wxWidgets-3.1.2 +REM cd build +REM cmake -T v141_xp -G -DOCPN_TARGET=MSVC "Visual Studio 15 2017" +REM -DCMAKE_BUILD_TYPE=RelWithDebInfo .. +REM cmake --build . --target tarball --config RelWithDebInfo >output.txt +REM bash ./cloudsmith-upload.sh + +REM For Opencpn 5.6.2 and wxWidgets-3.1.2 +REM cd build +REM cmake -T v141_xp -DOCPN_TARGET=MSVC .. +REM cmake --build . --target package --config release >output.txt +REM bash ./cloudsmith-upload.sh + +REM For Opencpn 5.7.1 and wxWidgets-3.2.1 +REM .\buildwin\win_deps.bat +REM cd build +REM cmake -T v143 -A Win32 -DOCPN_TARGET=MSVC "Visual Studio 17 2022" ^ +REM -DCMAKE_BUILD_TYPE=RelWithDebInfo .. +REM cmake --build . --target tarball --config RelWithDebInfo >output.txt + +REM Setup for wxWidgets 3.2.2 +REM wxWidgets_INCLUDE_DIRS %WXWIN%\include +REM wxWidgets_LIB_DIR %WXWIN%\lib\vc_dll +REM wxWidgets_LIBRARIES %WXWIN%\lib\vc_dll +REM wxWidgets_ROOT_DIR %WXWIN% +REM WXWIN C:\Users\fcgle\source\repos2\OpenCPN\cache\buildwxWidgets\ + +REM configdev58.bat +REM Can use "call configdev58.bat" +REM set "wxDIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets" +REM set "wxWidgets_ROOT_DIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets" +REM set "wxWidgets_LIB_DIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets\lib\vc_dll" + +REM Copied built wxWidgets-3.2.2 to C:\Users\fcgle\source\wxWidgets-3.2.2 +set "wxDIR=%WXWIN% +set "wxWidgets_ROOT_DIR=%WXWIN% +set "wxWidgets_LIB_DIR=%WXWIN%\lib\vc14x_dll" +set "WXWIN=C:\Users\fcgle\source\wxWidgets-3.2.2" + +REM For Opencpn 5.8 and wxWidgets-3.2.2 + + +cd build +cmake -T v143 -A Win32 -DOCPN_TARGET=MSVC .. +cmake --build . --target package --config relwithdebinfo >output.txt +bash ./cloudsmith-upload.sh diff --git a/SAVE/configdev58.txt b/SAVE/configdev58.txt new file mode 100644 index 0000000..f1ab5b5 --- /dev/null +++ b/SAVE/configdev58.txt @@ -0,0 +1,11 @@ +Rem So I could make a batch file configdev58.bat with + +REM wxWidgets_INCLUDE_DIRS %WXWIN%\include +REM wxWidgets_LIB_DIR %WXWIN%\lib\vc_dll +REM wxWidgets_LIBRARIES %WXWIN%\lib\vc_dll +REM wxWidgets_ROOT_DIR %WXWIN% +REM WXWIN C:\Users\fcgle\source\repos2\OpenCPN\cache\buildwxWidgets\ + +set "wxDIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets" +set "wxWidgets_ROOT_DIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets" +set "wxWidgets_LIB_DIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets\lib\vc_dll" \ No newline at end of file diff --git a/SAVE/fe2xcopy.bat b/SAVE/fe2xcopy.bat new file mode 100644 index 0000000..38b145e --- /dev/null +++ b/SAVE/fe2xcopy.bat @@ -0,0 +1,52 @@ +@echo off +@echo Copies the current version Testplugin FE2 files to the present working directory. +@echo If there is no destination identified , it defaults to the present working directory. +dir + +Rem source folder location +set "source=C:\Users\fcgle\source\testplugin_pi" + +Rem target folder location +Rem set "target=D:\" + +@echo Xcopy files and folders from %source% to the current directory +@echo Copy all files from one folder to another. +@echo Syntax: xcopy /s/z c:\source d:\target + +xcopy /s %source%\ci\ .\ci\ +rem xcopy /s %source%\ci\extras\ +xcopy /s %source%\cmake\ .\cmake\ +rem xcopy /s %source%\cmake\in-files\ +xcopy /s %source%\.circleci\ .\.circleci\ +xcopy /s %source%\mingw\ .\mingw\ +xcopy /s %source%\appveyor.yml +xcopy /s %source%\.travis.yml + + +Rem xcopy.exe is definitely your friend here. It's built into Windows, so its cost is nothing. +Rem https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/xcopy +Rem Just xcopy /s c:\source d:\target +Rem Copies files and directories, including subdirectories. +Rem You'd probably want to tweak a few things; some of the options we also add include these: +Rem +Rem Required. Specifies the location and names of the files you want to copy. +Rem This parameter must include either a drive or a path. +Rem [] Specifies the destination of the files you want to copy. +Rem This parameter can include a drive letter and colon, a directory name, a file name, or a combination of these. +Rem +Rem /s/e - recursive copy, including copying empty directories. +Rem /s - Copies directories and subdirectories, unless they are empty. If you omit /s, xcopy works within a single directory. +Rem /e - Copy all subdirectories, even if they are empty. Use /e with the /s and /t options. +Rem /v - verify the copy against the original. +Rem /h - copy system and hidden files. +Rem /k - copy read-only attributes, otherwise, all files become read-write. +Rem /x - if you care about permissions, if you worry about permissions /o or /x. +Rem /y - don't prompt before overwriting existing files. +Rem /z - if you think the copy might fail and you want to restart it, use this. +Rem It places a marker on each file as it copies, +Rem so you can rerun the xcopy command to pick up from where it left off. +Rem +Rem If you think the xcopy might fail partway through +Rem (like when you are copying over a flaky network connection), +Rem or that you have to stop it and want to continue it later, +Rem you can use xcopy /s/z c:\source d:\target. \ No newline at end of file diff --git a/SAVE/wx-config.bat b/SAVE/wx-config.bat new file mode 100644 index 0000000..aa89fab --- /dev/null +++ b/SAVE/wx-config.bat @@ -0,0 +1,2 @@ +set "wxWidgets_ROOT_DIR=%WXWIN%" +set "wxWidgets_LIB_DIR=%WXWIN%\lib\vc14x_dll" diff --git a/VERSION.cmake b/VERSION.cmake deleted file mode 100644 index a92f264..0000000 --- a/VERSION.cmake +++ /dev/null @@ -1,4 +0,0 @@ -SET(PLUGIN_VERSION_MAJOR "1") -SET(PLUGIN_VERSION_MINOR "4") -SET(PLUGIN_VERSION_PATCH "") -SET(PLUGIN_VERSION_DATE "2019-03-01") diff --git a/appveyor.yml b/appveyor.yml index 17898d1..a5df9ac 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,64 +1,102 @@ -clone_folder: c:\project\projections_pi -shallow_clone: true -image: -- Visual Studio 2015 +clone_folder: c:\project\ocpn_project +shallow_clone: false +clone_depth: 10 -platform: -# - x64 -- Win32 + +platform: +# - x64 +# - Win32 configuration: Release test: OFF -install: - - '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x86' +environment: + OCPN_TARGET: MSVC + +# use enviornment matrix with job_name to allow build of one or more environments + matrix: + - job_name: Visual Studio 2017 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + +## This can be built in Circleci and is currently the FE2 default +## +# - job_name: Visual Studio 2022 +# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 + + +matrix: +# allow either job to fail and the other to complete + fast_finish: false - # sent environment variables for wxWidgets - - set WXWIN=C:\wxWidgets-3.0.2 - - set wxWidgets_ROOT_DIR=%WXWIN% - - set wxWidgets_LIB_DIR=%WXWIN%\lib\vc_dll - - cmd: SET PATH=%PATH%;%WXWIN%;%wxWidgets_LIB_DIR%;C:\Program Files (x86)\Poedit\Gettexttools\bin; +init: + - appveyor version + +for: +- + matrix: + only: + - job_name: Visual Studio 2017 + install: + - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" + - set WX_VER= + - set WXWIN=c:\wxWidgets-3.1.2 + - set wxWidgets_ROOT_DIR=%WXWIN% + - set wxWidgets_LIB_DIR=%WXWIN%\lib\vc_dll + - set cmake_parms=-T v141_xp + - SET PATH=%PATH%;%WXWIN%;%wxWidgets_LIB_DIR%;C:\Program Files (x86)\Poedit\Gettexttools\bin # install dependencies: - - choco install poedit nsis -x86 + - choco install poedit + - choco install git + + - ps: Start-FileDownload https://download.opencpn.org/s/54HsBDLNzRZLL6i/download -FileName nsis-3.04-setup.exe + - cmd: nsis-3.04-setup.exe /S # Download and unzip wxwidgets - - ps: Start-FileDownload http://downloads.sourceforge.net/project/wxwindows/3.0.2/wxWidgets-3.0.2.zip - - cmd: 7z x wxwidgets-3.0.2.zip -o%WXWIN% > null + - ps: Start-FileDownload https://download.opencpn.org/s/E2p4nLDzeqx4SdX/download -FileName wxWidgets-3.1.2.7z + - cmd: 7z x wxWidgets-3.1.2.7z -o%WXWIN% > null - # some debugging information - - set - # - cmake --help +- + matrix: + only: + - job_name: Visual Studio 2022 + install: + - call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat" + - set WX_VER=32 + - set WXWIN=C:\wxWidgets-3.2.1 + - set wxWidgets_ROOT_DIR=%WXWIN% + - set wxWidgets_LIB_DIR=%WXWIN%\lib\vc_dll + - set cmake_parms=-A Win32 + - SET PATH=%PATH%;%WXWIN%;%wxWidgets_LIB_DIR%;C:\Program Files\Poedit\Gettexttools\bin - # build wxWidgets - - cmd: cd %WXWIN%\build\msw\ - - cmd: nmake -f makefile.vc BUILD=release SHARED=1 CFLAGS=/D_USING_V120_SDK71_ CXXFLAGS=/D_USING_V120_SDK71_ - - cmd: nmake -f makefile.vc BUILD=debug SHARED=1 CFLAGS=/D_USING_V120_SDK71_ CXXFLAGS=/D_USING_V120_SDK71_ + # install dependencies: + - choco install poedit + - choco install git + - choco install wget + + # Download and unzip wxwidgets + - wget -nv https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.1/wxMSW-3.2.1_vc14x_Dev.7z + - wget -nv https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.1/wxWidgets-3.2.1-headers.7z + - 7z x -o%WXWIN% wxMSW-3.2.1_vc14x_Dev.7z + - 7z x -o%WXWIN% wxWidgets-3.2.1-headers.7z before_build: - - cd c:\project\projections_pi - - mkdir build - - cd build - - ps: Start-FileDownload https://downloads.sourceforge.net/project/opencpnplugins/opencpn_lib/4.2-vc120_xp/opencpn.lib - - ps: Start-FileDownload https://downloads.sourceforge.net/project/opencpnplugins/opencpn_packaging_data/OpenCPN_buildwin.7z - - cmd: 7z x -y OpenCPN_buildwin.7z -oc:\project\projections_pi - - cmake -T v120_xp .. + - cd c:\project\ocpn_project + - git submodule update --init opencpn-libs + - ps: Start-FileDownload https://downloads.sourceforge.net/project/opencpnplugins/opencpn_packaging_data/PVW32Con.exe + - rm -rf build && mkdir build && cd build + - ps: Start-FileDownload https://sourceforge.net/projects/opencpnplugins/files/opencpn.lib + - ps: Start-FileDownload https://download.opencpn.org/s/oibxM3kzfzKcSc3/download -FileName OpenCPN_buildwin-4.99a.7z + - cmd: 7z x -y OpenCPN_buildwin-4.99a.7z -oc:\project\ocpn_project\buildwin + - cmake %cmake_parms% .. build_script: - # - cmake --build . --config debug - - cmake --build . --target package --config release + - cmake --build . --target package --config Release + - python -m ensurepip + - python -m pip install -q setuptools + - python -m pip install -q cloudsmith-cli + - bash ../build/cloudsmith-upload.sh artifacts: - path: 'build\*.exe' name: installer - -deploy: - description: 'release created by AppVeyor CI' - provider: GitHub - auth_token: '%GitHub_auth_token%' - artifact: installer - draft: true - prerelease: true - on: - appveyor_repo_tag: true # deploy on tag push only - configuration: Release # Debug contains non-redist MS DLLs \ No newline at end of file diff --git a/bld.bat b/bld.bat new file mode 100644 index 0000000..e079de5 --- /dev/null +++ b/bld.bat @@ -0,0 +1,78 @@ +REM FE2 Testplugin + + +REM Requires wxWidgets setup +REM C:\Users\fcgle\source\wxWidgets-3.1.2 +REM C:\Users\fcgle\source\wxWidgets-3.2.2 +REM Visual Studio 15 2017 installed +REM Visual Studio 17 2022 installed +REM -------------------------------------- +REM For Opencpn 5.8 and wxWidgets-3.2.2 using Visual Studio 15 2017 +REM -------------------------------------- +REM Used for local builds and testing. +REM Create an empty "[plugin]/build" directory +REM Use MSVC Command Prompt from [plugin]root directory ".\bld.bat" +REM Find the errors in the build\output.txt file +REM Then use bash prompt to run cloudsmith-upload.sh command "BASH ./bld.bat" +REM This adds the metadata file to the tarball gz file. +REM Set local environment using wxWidgets-3.2.2 +set "wxDIR=%WXWIN%" +set "wxWidgets_ROOT_DIR=%WXWIN%" +set "wxWidgets_LIB_DIR=%WXWIN%\lib\vc14x_dll" +set "WXWIN=C:\Users\fcgle\source\wxWidgets-3.2.2" +REM For Opencpn 5.8 and wxWidgets-3.2.2 +cd build +cmake -T v143 -A Win32 -DOCPN_TARGET=MSVC .. +cmake --build . --target package --config relwithdebinfo >output.txt +bash ./cloudsmith-upload.sh + +REM -------------------------------------- +REM For Opencpn 5.6.2 and wxWidgets-3.1.2 release +REM -------------------------------------- +REM Using built C:\Users\fcgle\source\wxWidgets-3.1.2 and local settings +REM set "wxDIR=%WXWIN%" +REM set "wxWidgets_ROOT_DIR=%WXWIN%" +REM set "wxWidgets_LIB_DIR=%WXWIN%\lib\vc14x_dll" +REM set "WXWIN=C:\Users\fcgle\source\wxWidgets-3.1.2" +REM cd build +REM cmake -T v141_xp -DOCPN_TARGET=MSVC .. +REM cmake --build . --target package --config release >output.txt +REM bash ./cloudsmith-upload.sh + +REM -------------------------------------- +REM For Opencpn 5.8 and wxWidgets-3.2.2 using Visual Studio 15 2017 +REM -------------------------------------- +REM Using built C:\Users\fcgle\source\wxWidgets-3.2.2 and local settings +REM set "wxDIR=%WXWIN%" +REM set "wxWidgets_LIB_DIR=%WXWIN%\lib\vc14x_dll" +REM set "WXWIN=C:\Users\fcgle\source\wxWidgets-3.2.2" +REM cd build +REM cmake -T v141_xp -G -DOCPN_TARGET=MSVC "Visual Studio 15 2017" +REM -DCMAKE_BUILD_TYPE=RelWithDebInfo .. +REM cmake --build . --target tarball --config RelWithDebInfo >output.txt +REM bash ./cloudsmith-upload.sh + +REM -------------------------------------- +REM For Opencpn 5.8.2 and wxWidgets-3.2.2 using Visual Studio 12 2022 +REM TransmitterDAN full Build in repos2 which executes win_deps.bat +REM -------------------------------------- +REM .\buildwin\win_deps.bat +REM cd build +REM cmake -T v143 -A Win32 -DOCPN_TARGET=MSVC "Visual Studio 17 2022" ^ +REM -DCMAKE_BUILD_TYPE=RelWithDebInfo .. +REM cmake --build . --target tarball --config RelWithDebInfo >output.txt + +REM Setup for wxWidgets 3.2.2 +REM wxWidgets_INCLUDE_DIRS %WXWIN%\include +REM wxWidgets_LIB_DIR %WXWIN%\lib\vc_dll +REM wxWidgets_LIBRARIES %WXWIN%\lib\vc_dll +REM wxWidgets_ROOT_DIR %WXWIN% +REM WXWIN C:\Users\fcgle\source\repos2\OpenCPN\cache\buildwxWidgets\ + +REM -------------------------------------- +REM configdev58.bat by Rick for local builds. +REM -------------------------------------- +REM Can use "call configdev58.bat" in another batch file to set up local wxWidgets environment +REM set "wxDIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets" +REM set "wxWidgets_ROOT_DIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets" +REM set "wxWidgets_LIB_DIR=C:\Users\fcgle\source\repos2\OpenCPN\buildwin\..\cache\buildwxWidgets\lib\vc_dll" diff --git a/build-deps/macos-cache-stamp b/build-deps/macos-cache-stamp new file mode 100644 index 0000000..612bd69 --- /dev/null +++ b/build-deps/macos-cache-stamp @@ -0,0 +1,4 @@ +# Any change in this file will cause the macos cache to be invalidated +# i. e., that the homebrew dependencies are downloaded and wxwidgets +# rebuilt. For example, change the stock 'v1' to 'v2' +v1 diff --git a/build-deps/macos-deps b/build-deps/macos-deps new file mode 100644 index 0000000..04593c1 --- /dev/null +++ b/build-deps/macos-deps @@ -0,0 +1,7 @@ +# brew packages installed in macos ci build +cmake +gettext +libexif +python +wget +openssl@3 diff --git a/buildosx/InstallOSX/pkg_background.jpg b/buildosx/InstallOSX/pkg_background.jpg index 807b976..91f4506 100644 Binary files a/buildosx/InstallOSX/pkg_background.jpg and b/buildosx/InstallOSX/pkg_background.jpg differ diff --git a/buildosx/InstallOSX/rtlsdr_pi.pkgproj.in b/buildosx/InstallOSX/plugin.pkgproj.in old mode 100755 new mode 100644 similarity index 85% rename from buildosx/InstallOSX/rtlsdr_pi.pkgproj.in rename to buildosx/InstallOSX/plugin.pkgproj.in index e5799c8..75f7668 --- a/buildosx/InstallOSX/rtlsdr_pi.pkgproj.in +++ b/buildosx/InstallOSX/plugin.pkgproj.in @@ -72,77 +72,77 @@ UID 0 - + + CHILDREN + + + CHILDREN + + + CHILDREN + + GID + 80 + PATH + Resources + PATH_TYPE + 3 + PERMISSIONS + 420 + TYPE + 3 + UID + 0 + + + GID + 80 + PATH + . + PATH_TYPE + 0 + PERMISSIONS + 509 + TYPE + 2 + UID + 0 + + + GID + 80 + PATH + . + PATH_TYPE + 0 + PERMISSIONS + 509 + TYPE + 2 + UID + 0 + + CHILDREN - - GID - 80 - PATH - Resources - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - - CHILDREN - - - CHILDREN - - - CHILDREN - - GID - 80 - PATH - ../data - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - GID - 80 - PATH - ${PACKAGE_NAME} - PATH_TYPE - 0 - PERMISSIONS - 509 - TYPE - 2 - UID - 0 - - - GID - 80 - PATH - plugins - PATH_TYPE - 0 - PERMISSIONS - 509 - TYPE - 2 - UID - 0 - - - GID + + + CHILDREN + + GID + 80 + PATH + data + PATH_TYPE + 1 + PERMISSIONS + 448 + TYPE + 3 + UID + 0 + + + GID 80 PATH SharedSupport @@ -642,7 +642,7 @@ LOCATION 0 NAME - ${VERBOSE_NAME}-Plugin + ${VERBOSE_NAME}-Plugin_${PACKAGE_VERSION}-${OCPN_MIN_VERSION}-${OCPN_API_VERSION_MAJOR}.${OCPN_API_VERSION_MINOR} OVERWRITE_PERMISSIONS USE_HFS+_COMPRESSION @@ -681,15 +681,15 @@ 4 BACKGROUND_PATH - PATH - pkg_background.jpg - PATH_TYPE - 1 - - CUSTOM - 1 - SCALING - 1 + PATH + pkg_background.jpg + PATH_TYPE + 1 + + CUSTOM + 1 + SCALING + 1 INSTALLATION TYPE @@ -1334,7 +1334,7 @@ NAME - ${VERBOSE_NAME}-Plugin_${VERSION_MAJOR}.${VERSION_MINOR} + ${VERBOSE_NAME}-Plugin-${PACKAGE_VERSION}-${OCPN_MIN_VERSION}-${OCPN_API_VERSION_MAJOR}.${OCPN_API_VERSION_MINOR} REFERENCE_FOLDER_PATH . diff --git a/buildwin/NSIS.template.in b/buildwin/NSIS.template.in deleted file mode 100644 index 55567c3..0000000 --- a/buildwin/NSIS.template.in +++ /dev/null @@ -1,976 +0,0 @@ -; CPack install script designed for a nmake build - -;-------------------------------- -; You must define these values - - !define VERSION "@CPACK_PACKAGE_VERSION@" - !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" - !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" - -;-------------------------------- -;Variables - - Var MUI_TEMP - Var STARTMENU_FOLDER - Var SV_ALLUSERS - Var START_MENU - Var DO_NOT_ADD_TO_PATH - Var ADD_TO_PATH_ALL_USERS - Var ADD_TO_PATH_CURRENT_USER - Var INSTALL_DESKTOP - Var IS_DEFAULT_INSTALLDIR -;-------------------------------- -;Include Modern UI - - !include "MUI.nsh" - - ;Default installation folder - InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" - -;-------------------------------- -;General - - ;Name and file - Name "@CPACK_NSIS_PACKAGE_NAME@" - OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" - - ;Set compression - SetCompressor @CPACK_NSIS_COMPRESSOR@ - - ;Require administrator access - RequestExecutionLevel admin - -@CPACK_NSIS_DEFINES@ - - !include Sections.nsh - -;--- Component support macros: --- -; The code for the add/remove functionality is from: -; http://nsis.sourceforge.net/Add/Remove_Functionality -; It has been modified slightly and extended to provide -; inter-component dependencies. -Var AR_SecFlags -Var AR_RegFlags -@CPACK_NSIS_SECTION_SELECTED_VARS@ - -; Loads the "selected" flag for the section named SecName into the -; variable VarName. -!macro LoadSectionSelectedIntoVar SecName VarName - SectionGetFlags ${${SecName}} $${VarName} - IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits -!macroend - -; Loads the value of a variable... can we get around this? -!macro LoadVar VarName - IntOp $R0 0 + $${VarName} -!macroend - -; Sets the value of a variable -!macro StoreVar VarName IntValue - IntOp $${VarName} 0 + ${IntValue} -!macroend - -!macro InitSection SecName - ; This macro reads component installed flag from the registry and - ;changes checked state of the section on the components page. - ;Input: section index constant name specified in Section command. - - ClearErrors - ;Reading component status from registry - ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" - IfErrors "default_${SecName}" - ;Status will stay default if registry value not found - ;(component was never installed) - IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits - SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags - IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off - IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit - - ; Note whether this component was installed before - !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags - IntOp $R0 $AR_RegFlags & $AR_RegFlags - - ;Writing modified flags - SectionSetFlags ${${SecName}} $AR_SecFlags - - "default_${SecName}:" - !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected -!macroend - -!macro FinishSection SecName - ; This macro reads section flag set by user and removes the section - ;if it is not selected. - ;Then it writes component installed flag to registry - ;Input: section index constant name specified in Section command. - - SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags - ;Checking lowest bit: - IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} - IntCmp $AR_SecFlags 1 "leave_${SecName}" - ;Section is not selected: - ;Calling Section uninstall macro and writing zero installed flag - !insertmacro "Remove_${${SecName}}" - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ - "Installed" 0 - Goto "exit_${SecName}" - - "leave_${SecName}:" - ;Section is selected: - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ - "Installed" 1 - - "exit_${SecName}:" -!macroend - -!macro RemoveSection_CPack SecName - ; This macro is used to call section's Remove_... macro - ;from the uninstaller. - ;Input: section index constant name specified in Section command. - - !insertmacro "Remove_${${SecName}}" -!macroend - -; Determine whether the selection of SecName changed -!macro MaybeSelectionChanged SecName - !insertmacro LoadVar ${SecName}_selected - SectionGetFlags ${${SecName}} $R1 - IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits - - ; See if the status has changed: - IntCmp $R0 $R1 "${SecName}_unchanged" - !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected - - IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" - !insertmacro "Deselect_required_by_${SecName}" - goto "${SecName}_unchanged" - - "${SecName}_was_selected:" - !insertmacro "Select_${SecName}_depends" - - "${SecName}_unchanged:" -!macroend -;--- End of Add/Remove macros --- - -;-------------------------------- -;Interface Settings - - !define MUI_HEADERIMAGE - !define MUI_ABORTWARNING - -;-------------------------------- -; path functions - -!verbose 3 -!include "WinMessages.NSH" -!verbose 4 - -;---------------------------------------- -; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" -;---------------------------------------- -!verbose 3 -!include "WinMessages.NSH" -!verbose 4 -;==================================================== -; get_NT_environment -; Returns: the selected environment -; Output : head of the stack -;==================================================== -!macro select_NT_profile UN -Function ${UN}select_NT_profile - StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single - DetailPrint "Selected environment for all users" - Push "all" - Return - environment_single: - DetailPrint "Selected environment for current user only." - Push "current" - Return -FunctionEnd -!macroend -!insertmacro select_NT_profile "" -!insertmacro select_NT_profile "un." -;---------------------------------------------------- -!define NT_current_env 'HKCU "Environment"' -!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' - -!ifndef WriteEnvStr_RegKey - !ifdef ALL_USERS - !define WriteEnvStr_RegKey \ - 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' - !else - !define WriteEnvStr_RegKey 'HKCU "Environment"' - !endif -!endif - -; AddToPath - Adds the given dir to the search path. -; Input - head of the stack -; Note - Win9x systems requires reboot - -Function AddToPath - Exch $0 - Push $1 - Push $2 - Push $3 - - # don't add if the path doesn't exist - IfFileExists "$0\*.*" "" AddToPath_done - - ReadEnvStr $1 PATH - ; if the path is too long for a NSIS variable NSIS will return a 0 - ; length string. If we find that, then warn and skip any path - ; modification as it will trash the existing path. - StrLen $2 $1 - IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done - CheckPathLength_ShowPathWarning: - Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" - Goto AddToPath_done - CheckPathLength_Done: - Push "$1;" - Push "$0;" - Call StrStr - Pop $2 - StrCmp $2 "" "" AddToPath_done - Push "$1;" - Push "$0\;" - Call StrStr - Pop $2 - StrCmp $2 "" "" AddToPath_done - GetFullPathName /SHORT $3 $0 - Push "$1;" - Push "$3;" - Call StrStr - Pop $2 - StrCmp $2 "" "" AddToPath_done - Push "$1;" - Push "$3\;" - Call StrStr - Pop $2 - StrCmp $2 "" "" AddToPath_done - - Call IsNT - Pop $1 - StrCmp $1 1 AddToPath_NT - ; Not on NT - StrCpy $1 $WINDIR 2 - FileOpen $1 "$1\autoexec.bat" a - FileSeek $1 -1 END - FileReadByte $1 $2 - IntCmp $2 26 0 +2 +2 # DOS EOF - FileSeek $1 -1 END # write over EOF - FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" - FileClose $1 - SetRebootFlag true - Goto AddToPath_done - - AddToPath_NT: - StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey - ReadRegStr $1 ${NT_current_env} "PATH" - Goto DoTrim - ReadAllKey: - ReadRegStr $1 ${NT_all_env} "PATH" - DoTrim: - StrCmp $1 "" AddToPath_NTdoIt - Push $1 - Call Trim - Pop $1 - StrCpy $0 "$1;$0" - AddToPath_NTdoIt: - StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey - WriteRegExpandStr ${NT_current_env} "PATH" $0 - Goto DoSend - WriteAllKey: - WriteRegExpandStr ${NT_all_env} "PATH" $0 - DoSend: - SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 - - AddToPath_done: - Pop $3 - Pop $2 - Pop $1 - Pop $0 -FunctionEnd - - -; RemoveFromPath - Remove a given dir from the path -; Input: head of the stack - -Function un.RemoveFromPath - Exch $0 - Push $1 - Push $2 - Push $3 - Push $4 - Push $5 - Push $6 - - IntFmt $6 "%c" 26 # DOS EOF - - Call un.IsNT - Pop $1 - StrCmp $1 1 unRemoveFromPath_NT - ; Not on NT - StrCpy $1 $WINDIR 2 - FileOpen $1 "$1\autoexec.bat" r - GetTempFileName $4 - FileOpen $2 $4 w - GetFullPathName /SHORT $0 $0 - StrCpy $0 "SET PATH=%PATH%;$0" - Goto unRemoveFromPath_dosLoop - - unRemoveFromPath_dosLoop: - FileRead $1 $3 - StrCpy $5 $3 1 -1 # read last char - StrCmp $5 $6 0 +2 # if DOS EOF - StrCpy $3 $3 -1 # remove DOS EOF so we can compare - StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine - StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine - StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine - StrCmp $3 "" unRemoveFromPath_dosLoopEnd - FileWrite $2 $3 - Goto unRemoveFromPath_dosLoop - unRemoveFromPath_dosLoopRemoveLine: - SetRebootFlag true - Goto unRemoveFromPath_dosLoop - - unRemoveFromPath_dosLoopEnd: - FileClose $2 - FileClose $1 - StrCpy $1 $WINDIR 2 - Delete "$1\autoexec.bat" - CopyFiles /SILENT $4 "$1\autoexec.bat" - Delete $4 - Goto unRemoveFromPath_done - - unRemoveFromPath_NT: - StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey - ReadRegStr $1 ${NT_current_env} "PATH" - Goto unDoTrim - unReadAllKey: - ReadRegStr $1 ${NT_all_env} "PATH" - unDoTrim: - StrCpy $5 $1 1 -1 # copy last char - StrCmp $5 ";" +2 # if last char != ; - StrCpy $1 "$1;" # append ; - Push $1 - Push "$0;" - Call un.StrStr ; Find `$0;` in $1 - Pop $2 ; pos of our dir - StrCmp $2 "" unRemoveFromPath_done - ; else, it is in path - # $0 - path to add - # $1 - path var - StrLen $3 "$0;" - StrLen $4 $2 - StrCpy $5 $1 -$4 # $5 is now the part before the path to remove - StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove - StrCpy $3 $5$6 - - StrCpy $5 $3 1 -1 # copy last char - StrCmp $5 ";" 0 +2 # if last char == ; - StrCpy $3 $3 -1 # remove last char - - StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey - WriteRegExpandStr ${NT_current_env} "PATH" $3 - Goto unDoSend - unWriteAllKey: - WriteRegExpandStr ${NT_all_env} "PATH" $3 - unDoSend: - SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 - - unRemoveFromPath_done: - Pop $6 - Pop $5 - Pop $4 - Pop $3 - Pop $2 - Pop $1 - Pop $0 -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Uninstall sutff -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -########################################### -# Utility Functions # -########################################### - -;==================================================== -; IsNT - Returns 1 if the current system is NT, 0 -; otherwise. -; Output: head of the stack -;==================================================== -; IsNT -; no input -; output, top of the stack = 1 if NT or 0 if not -; -; Usage: -; Call IsNT -; Pop $R0 -; ($R0 at this point is 1 or 0) - -!macro IsNT un -Function ${un}IsNT - Push $0 - ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - StrCmp $0 "" 0 IsNT_yes - ; we are not NT. - Pop $0 - Push 0 - Return - - IsNT_yes: - ; NT!!! - Pop $0 - Push 1 -FunctionEnd -!macroend -!insertmacro IsNT "" -!insertmacro IsNT "un." - -; StrStr -; input, top of stack = string to search for -; top of stack-1 = string to search in -; output, top of stack (replaces with the portion of the string remaining) -; modifies no other variables. -; -; Usage: -; Push "this is a long ass string" -; Push "ass" -; Call StrStr -; Pop $R0 -; ($R0 at this point is "ass string") - -!macro StrStr un -Function ${un}StrStr -Exch $R1 ; st=haystack,old$R1, $R1=needle - Exch ; st=old$R1,haystack - Exch $R2 ; st=old$R1,old$R2, $R2=haystack - Push $R3 - Push $R4 - Push $R5 - StrLen $R3 $R1 - StrCpy $R4 0 - ; $R1=needle - ; $R2=haystack - ; $R3=len(needle) - ; $R4=cnt - ; $R5=tmp - loop: - StrCpy $R5 $R2 $R3 $R4 - StrCmp $R5 $R1 done - StrCmp $R5 "" done - IntOp $R4 $R4 + 1 - Goto loop -done: - StrCpy $R1 $R2 "" $R4 - Pop $R5 - Pop $R4 - Pop $R3 - Pop $R2 - Exch $R1 -FunctionEnd -!macroend -!insertmacro StrStr "" -!insertmacro StrStr "un." - -Function Trim ; Added by Pelaca - Exch $R1 - Push $R2 -Loop: - StrCpy $R2 "$R1" 1 -1 - StrCmp "$R2" " " RTrim - StrCmp "$R2" "$\n" RTrim - StrCmp "$R2" "$\r" RTrim - StrCmp "$R2" ";" RTrim - GoTo Done -RTrim: - StrCpy $R1 "$R1" -1 - Goto Loop -Done: - Pop $R2 - Exch $R1 -FunctionEnd - -Function ConditionalAddToRegisty - Pop $0 - Pop $1 - StrCmp "$0" "" ConditionalAddToRegisty_EmptyString - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ - "$1" "$0" - ;MessageBox MB_OK "Set Registry: '$1' to '$0'" - DetailPrint "Set install registry entry: '$1' to '$0'" - ConditionalAddToRegisty_EmptyString: -FunctionEnd - -;-------------------------------- - -!ifdef CPACK_USES_DOWNLOAD -Function DownloadFile - IfFileExists $INSTDIR\* +2 - CreateDirectory $INSTDIR - Pop $0 - - ; Skip if already downloaded - IfFileExists $INSTDIR\$0 0 +2 - Return - - StrCpy $1 "@CPACK_DOWNLOAD_SITE@" - - try_again: - NSISdl::download "$1/$0" "$INSTDIR\$0" - - Pop $1 - StrCmp $1 "success" success - StrCmp $1 "Cancelled" cancel - MessageBox MB_OK "Download failed: $1" - cancel: - Return - success: -FunctionEnd -!endif - -;-------------------------------- -; Installation types -@CPACK_NSIS_INSTALLATION_TYPES@ - -;-------------------------------- -; Component sections -@CPACK_NSIS_COMPONENT_SECTIONS@ - -;-------------------------------- -; Define some macro setting for the gui -@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ -@CPACK_NSIS_INSTALLER_ICON_CODE@ -@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ -@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ - -;-------------------------------- -;Pages - !insertmacro MUI_PAGE_WELCOME - - !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" - Page custom InstallOptionsPage - !insertmacro MUI_PAGE_DIRECTORY - - ;Start Menu Folder Page Configuration -; !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" -; !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" -; !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" -; !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER - - @CPACK_NSIS_PAGE_COMPONENTS@ - - !insertmacro MUI_PAGE_INSTFILES - !insertmacro MUI_PAGE_FINISH - - !insertmacro MUI_UNPAGE_CONFIRM - !insertmacro MUI_UNPAGE_INSTFILES - -;-------------------------------- -;Languages - - !insertmacro MUI_LANGUAGE "English" ;first language is the default language - !insertmacro MUI_LANGUAGE "Albanian" - !insertmacro MUI_LANGUAGE "Arabic" - !insertmacro MUI_LANGUAGE "Basque" - !insertmacro MUI_LANGUAGE "Belarusian" - !insertmacro MUI_LANGUAGE "Bosnian" - !insertmacro MUI_LANGUAGE "Breton" - !insertmacro MUI_LANGUAGE "Bulgarian" - !insertmacro MUI_LANGUAGE "Croatian" - !insertmacro MUI_LANGUAGE "Czech" - !insertmacro MUI_LANGUAGE "Danish" - !insertmacro MUI_LANGUAGE "Dutch" - !insertmacro MUI_LANGUAGE "Estonian" - !insertmacro MUI_LANGUAGE "Farsi" - !insertmacro MUI_LANGUAGE "Finnish" - !insertmacro MUI_LANGUAGE "French" - !insertmacro MUI_LANGUAGE "German" - !insertmacro MUI_LANGUAGE "Greek" - !insertmacro MUI_LANGUAGE "Hebrew" - !insertmacro MUI_LANGUAGE "Hungarian" - !insertmacro MUI_LANGUAGE "Icelandic" - !insertmacro MUI_LANGUAGE "Indonesian" - !insertmacro MUI_LANGUAGE "Irish" - !insertmacro MUI_LANGUAGE "Italian" - !insertmacro MUI_LANGUAGE "Japanese" - !insertmacro MUI_LANGUAGE "Korean" - !insertmacro MUI_LANGUAGE "Latvian" - !insertmacro MUI_LANGUAGE "Lithuanian" - !insertmacro MUI_LANGUAGE "Luxembourgish" - !insertmacro MUI_LANGUAGE "Macedonian" - !insertmacro MUI_LANGUAGE "Malay" - !insertmacro MUI_LANGUAGE "Mongolian" - !insertmacro MUI_LANGUAGE "Norwegian" - !insertmacro MUI_LANGUAGE "Polish" - !insertmacro MUI_LANGUAGE "Portuguese" - !insertmacro MUI_LANGUAGE "PortugueseBR" - !insertmacro MUI_LANGUAGE "Romanian" - !insertmacro MUI_LANGUAGE "Russian" - !insertmacro MUI_LANGUAGE "Serbian" - !insertmacro MUI_LANGUAGE "SerbianLatin" - !insertmacro MUI_LANGUAGE "SimpChinese" - !insertmacro MUI_LANGUAGE "Slovak" - !insertmacro MUI_LANGUAGE "Slovenian" - !insertmacro MUI_LANGUAGE "Spanish" - !insertmacro MUI_LANGUAGE "Swedish" - !insertmacro MUI_LANGUAGE "Thai" - !insertmacro MUI_LANGUAGE "TradChinese" - !insertmacro MUI_LANGUAGE "Turkish" - !insertmacro MUI_LANGUAGE "Ukrainian" - !insertmacro MUI_LANGUAGE "Welsh" - - -;-------------------------------- -;Reserve Files - - ;These files should be inserted before other files in the data block - ;Keep these lines before any File command - ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) - - ReserveFile "NSIS.InstallOptions.ini" - !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -;-------------------------------- -;Installer Sections - -Section "-Core installation" - ;Use the entire tree produced by the INSTALL target. Keep the - ;list of directories here in sync with the RMDir commands below. - SetOutPath "$INSTDIR" - @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ - @CPACK_NSIS_FULL_INSTALL@ - - ;Store installation folder - WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR - - ;Create uninstaller - WriteUninstaller "$INSTDIR\Uninstall @CPACK_NSIS_PACKAGE_NAME@.exe" - Push "DisplayName" - Push "@CPACK_NSIS_DISPLAY_NAME@" - Call ConditionalAddToRegisty - Push "DisplayVersion" - Push "@CPACK_PACKAGE_VERSION@" - Call ConditionalAddToRegisty - Push "Publisher" - Push "@CPACK_PACKAGE_VENDOR@" - Call ConditionalAddToRegisty - Push "UninstallString" - Push "$INSTDIR\Uninstall @CPACK_NSIS_PACKAGE_NAME@.exe" - Call ConditionalAddToRegisty - Push "NoRepair" - Push "1" - Call ConditionalAddToRegisty - - !ifdef CPACK_NSIS_ADD_REMOVE - ;Create add/remove functionality - Push "ModifyPath" - Push "$INSTDIR\AddRemove.exe" - Call ConditionalAddToRegisty - !else - Push "NoModify" - Push "1" - Call ConditionalAddToRegisty - !endif - - ; Optional registration - Push "DisplayIcon" - Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" - Call ConditionalAddToRegisty - Push "HelpLink" - Push "@CPACK_NSIS_HELP_LINK@" - Call ConditionalAddToRegisty - Push "URLInfoAbout" - Push "@CPACK_NSIS_URL_INFO_ABOUT@" - Call ConditionalAddToRegisty - Push "Contact" - Push "@CPACK_NSIS_CONTACT@" - Call ConditionalAddToRegisty - !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" -; !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - - ;Create shortcuts -; CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" -; @CPACK_NSIS_CREATE_ICONS@ -; @CPACK_NSIS_CREATE_ICONS_EXTRA@ -; CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall @CPACK_NSIS_PACKAGE_NAME@.exe" - - ;Read a value from an InstallOptions INI file - !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" - !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" - !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" - - ; Write special uninstall registry entries - Push "StartMenu" - Push "$STARTMENU_FOLDER" - Call ConditionalAddToRegisty - Push "DoNotAddToPath" - Push "$DO_NOT_ADD_TO_PATH" - Call ConditionalAddToRegisty - Push "AddToPathAllUsers" - Push "$ADD_TO_PATH_ALL_USERS" - Call ConditionalAddToRegisty - Push "AddToPathCurrentUser" - Push "$ADD_TO_PATH_CURRENT_USER" - Call ConditionalAddToRegisty - Push "InstallToDesktop" - Push "$INSTALL_DESKTOP" - Call ConditionalAddToRegisty - -; !insertmacro MUI_STARTMENU_WRITE_END - -@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ - -SectionEnd - -Section "-Add to path" - Push $INSTDIR\bin - StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath - StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 - Call AddToPath - doNotAddToPath: -SectionEnd - -;-------------------------------- -; Create custom pages -Function InstallOptionsPage - !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" - -FunctionEnd - -;-------------------------------- -; determine admin versus local install -Function un.onInit - - ClearErrors - UserInfo::GetName - IfErrors noLM - Pop $0 - UserInfo::GetAccountType - Pop $1 - StrCmp $1 "Admin" 0 +3 - SetShellVarContext all - ;MessageBox MB_OK 'User "$0" is in the Admin group' - Goto done - StrCmp $1 "Power" 0 +3 - SetShellVarContext all - ;MessageBox MB_OK 'User "$0" is in the Power Users group' - Goto done - - noLM: - ;Get installation folder from registry if available - - done: - -FunctionEnd - -;--- Add/Remove callback functions: --- -!macro SectionList MacroName - ;This macro used to perform operation on multiple sections. - ;List all of your components in following manner here. -@CPACK_NSIS_COMPONENT_SECTION_LIST@ -!macroend - -Section -FinishComponents - ;Removes unselected components and writes component status to registry - !insertmacro SectionList "FinishSection" - -!ifdef CPACK_NSIS_ADD_REMOVE - ; Get the name of the installer executable - System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' - StrCpy $R3 $R0 - - ; Strip off the last 13 characters, to see if we have AddRemove.exe - StrLen $R1 $R0 - IntOp $R1 $R0 - 13 - StrCpy $R2 $R0 13 $R1 - StrCmp $R2 "AddRemove.exe" addremove_installed - - ; We're not running AddRemove.exe, so install it - CopyFiles $R3 $INSTDIR\AddRemove.exe - - addremove_installed: -!endif -SectionEnd -;--- End of Add/Remove callback functions --- - -;-------------------------------- -; Component dependencies -Function .onSelChange - !insertmacro SectionList MaybeSelectionChanged -FunctionEnd - -;-------------------------------- -;Uninstaller Section - -Section "Uninstall" -; ReadRegStr $START_MENU SHCTX \ -; "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" - ;MessageBox MB_OK "Start menu is in: $START_MENU" - ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ - "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" - ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ - "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" - ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ - "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" - ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" - ReadRegStr $INSTALL_DESKTOP SHCTX \ - "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" - ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " - -@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ - - ;Remove files we installed. - ;Keep the list of directories here in sync with the File commands above. -@CPACK_NSIS_DELETE_FILES@ -@CPACK_NSIS_DELETE_DIRECTORIES@ - -!ifdef CPACK_NSIS_ADD_REMOVE - ;Remove the add/remove program - Delete "$INSTDIR\AddRemove.exe" -!endif - - ;Remove the uninstaller itself. - Delete "$INSTDIR\Uninstall @CPACK_NSIS_PACKAGE_NAME@.exe" - DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" - - ;Remove the installation directory if it is empty. - RMDir "$INSTDIR" - - ; Remove the registry entries. - DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" - - ; Removes all optional components - !insertmacro SectionList "RemoveSection_CPack" - -; !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP - -; Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" -@CPACK_NSIS_DELETE_ICONS@ -@CPACK_NSIS_DELETE_ICONS_EXTRA@ - - ;Delete empty start menu parent diretories - StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" - - startMenuDeleteLoop: - ClearErrors - RMDir $MUI_TEMP - GetFullPathName $MUI_TEMP "$MUI_TEMP\.." - - IfErrors startMenuDeleteLoopDone - - StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop - startMenuDeleteLoopDone: - - ; If the user changed the shortcut, then untinstall may not work. This should - ; try to fix it. -; StrCpy $MUI_TEMP "$START_MENU" -; Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" -@CPACK_NSIS_DELETE_ICONS_EXTRA@ - - ;Delete empty start menu parent diretories - StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" - - secondStartMenuDeleteLoop: - ClearErrors - RMDir $MUI_TEMP - GetFullPathName $MUI_TEMP "$MUI_TEMP\.." - - IfErrors secondStartMenuDeleteLoopDone - - StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop - secondStartMenuDeleteLoopDone: - - DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" - - Push $INSTDIR\bin - StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 - Call un.RemoveFromPath - doNotRemoveFromPath: -SectionEnd - -;-------------------------------- -; determine admin versus local install -; Is install for "AllUsers" or "JustMe"? -; Default to "JustMe" - set to "AllUsers" if admin or on Win9x -; This function is used for the very first "custom page" of the installer. -; This custom page does not show up visibly, but it executes prior to the -; first visible page and sets up $INSTDIR properly... -; Choose different default installation folder based on SV_ALLUSERS... -; "Program Files" for AllUsers, "My Documents" for JustMe... - -Function .onInit - StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst - - ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" - StrCmp $0 "" inst - - MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ - "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ - IDYES uninst IDNO inst - Abort - -;Run the uninstaller -uninst: - ClearErrors - StrLen $2 "\Uninstall @CPACK_NSIS_PACKAGE_NAME@.exe" - StrCpy $3 $0 -$2 # remove "\Uninstall @CPACK_NSIS_PACKAGE_NAME@.exe" from UninstallString to get path - ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file - - IfErrors uninst_failed inst -uninst_failed: - MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." - Abort - - -inst: - ; Reads components status for registry - !insertmacro SectionList "InitSection" - - ; check to see if /D has been used to change - ; the install directory by comparing it to the - ; install directory that is expected to be the - ; default - StrCpy $IS_DEFAULT_INSTALLDIR 0 - StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 - StrCpy $IS_DEFAULT_INSTALLDIR 1 - - StrCpy $SV_ALLUSERS "JustMe" - ; if default install dir then change the default - ; if it is installed for JustMe - StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 - StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" - - ClearErrors - UserInfo::GetName - IfErrors noLM - Pop $0 - UserInfo::GetAccountType - Pop $1 - StrCmp $1 "Admin" 0 +4 - SetShellVarContext all - ;MessageBox MB_OK 'User "$0" is in the Admin group' - StrCpy $SV_ALLUSERS "AllUsers" - Goto done - StrCmp $1 "Power" 0 +4 - SetShellVarContext all - ;MessageBox MB_OK 'User "$0" is in the Power Users group' - StrCpy $SV_ALLUSERS "AllUsers" - Goto done - - noLM: - StrCpy $SV_ALLUSERS "AllUsers" - ;Get installation folder from registry if available - - done: - StrCmp $SV_ALLUSERS "AllUsers" 0 +3 - StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 - StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" - - StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" - - noOptionsPage: -FunctionEnd diff --git a/ci/circleci-build-android-arm64.sh b/ci/circleci-build-android-arm64.sh new file mode 100644 index 0000000..a015fb6 --- /dev/null +++ b/ci/circleci-build-android-arm64.sh @@ -0,0 +1,95 @@ +#!/bin/sh -xe + +# +# Build the Android artifacts inside the circleci linux container +# + + +set -xe + +pwd + +git submodule update --init opencpn-libs + +ls -la + +# FOR LOCAL BUILD - have a local version to avoid big download each run - need to stage it but not commit it. DO NOT COMMIT AND PUSH master.zip +if [ "${CIRCLECI_LOCAL,,}" = "true" ]; then + if [[ -d ~/circleci-cache ]]; then + if [[ -f ~/circleci-cache/apt-proxy ]]; then + cat ~/circleci-cache/apt-proxy | sudo tee -a /etc/apt/apt.conf.d/00aptproxy + cat /etc/apt/apt.conf.d/00aptproxy + fi + if [[ ! -f ~/circleci-cache/master.zip ]]; then + sudo wget https://github.com/bdbcat/OCPNAndroidCommon/archive/master.zip -O ~/circleci-cache/master.zip + fi + MASTER_LOC=~/circleci-cache + #unzip -qq -o /home/circleci/circleci-cache/master.zip + fi +else + MASTER_LOC=$(pwd) + wget https://github.com/bdbcat/OCPNAndroidCommon/archive/master.zip + #unzip -qq -o master.zip +fi +echo "unzipping $MASTER_LOC/master.zip" + +unzip -qq -o $MASTER_LOC/master.zip + +sudo apt-get -q update +sudo apt-get -y install git cmake gettext unzip + +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi + +pwd +ls -la + +mkdir -p build +cd build + +rm -f CMakeCache.txt + +# Install python to get a recent version of cmake +sudo apt install python3-pip +python3 -m pip install --user --force-reinstall -q pip setuptools +sudo apt remove python3-six python3-colorama python3-urllib3 +export LC_ALL=C.UTF-8 LANG=C.UTF-8 +python3 -m pip install --user -q cmake -vv + +last_ndk=$(ls -d /home/circleci/android-sdk/ndk/* | tail -1) +test -d /opt/android || sudo mkdir -p /opt/android +sudo ln -sf $last_ndk /opt/android/ndk + +if [ ! -z "$(BUILD_TYPE)" ]; then + tag=$(git tag --contains HEAD) + current_branch=$(git branch --show-current) + if [ -n "$tag" ] || [ "$current_branch" = "master" ]; then + BUILD_TYPE=Release + else + BUILD_TYPE=Debug + fi +fi + +cmake -DCMAKE_TOOLCHAIN_FILE=cmake/android-aarch64-toolchain.cmake \ + -D_wx_selected_config=androideabi-qt-arm64 \ + -DwxQt_Build=build_android_release_64_static_O3 \ + -DQt_Build=build_arm64/qtbase \ + -DOCPN_Android_Common=OCPNAndroidCommon-master \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + .. + +make VERBOSE=1 + +make package diff --git a/ci/circleci-build-android-armhf.sh b/ci/circleci-build-android-armhf.sh new file mode 100644 index 0000000..c95bee0 --- /dev/null +++ b/ci/circleci-build-android-armhf.sh @@ -0,0 +1,112 @@ +#!/bin/sh -xe + +# +# Build the Android artifacts inside the circleci linux container +# + +set -xe + +pwd + +git submodule update --init opencpn-libs + +ls -la + +#sudo apt-get -q update +#sudo apt-get -y install git cmake gettext unzip + +# Get the OCPN Android build support package. +# FOR LOCAL BUILD - have a local version to avoid big download each run - need to stage it but not commit it. DO NOT COMMIT AND PUSH master.zip +if [ "${CIRCLECI_LOCAL,,}" = "true" ]; then + if [[ -d ~/circleci-cache ]]; then + if [[ -f ~/circleci-cache/apt-proxy ]]; then + cat ~/circleci-cache/apt-proxy | sudo tee -a /etc/apt/apt.conf.d/00aptproxy + cat /etc/apt/apt.conf.d/00aptproxy + fi + if [[ ! -f ~/circleci-cache/master.zip ]]; then + sudo wget https://github.com/bdbcat/OCPNAndroidCommon/archive/master.zip -O ~/circleci-cache/master.zip + fi + MASTER_LOC=~/circleci-cache + #unzip -qq -o /home/circleci/circleci-cache/master.zip + fi +else + MASTER_LOC=$(pwd) + wget https://github.com/bdbcat/OCPNAndroidCommon/archive/master.zip + #unzip -qq -o master.zip +fi +echo "unzipping $MASTER_LOC/master.zip" + +unzip -qq -o $MASTER_LOC/master.zip + +sudo apt-get -q update +sudo apt-get -y install git cmake gettext unzip +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi + +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi + +pwd +ls -la + +mkdir -p build +cd build + +rm -f CMakeCache.txt + +# Install python to get a recent version of cmake +sudo apt install python3-pip +python3 -m pip install --user --force-reinstall -q pip setuptools +sudo apt remove python3-six python3-colorama python3-urllib3 +export LC_ALL=C.UTF-8 LANG=C.UTF-8 +python3 -m pip install --user -q cmake -vv + +last_ndk=$(ls -d /home/circleci/android-sdk/ndk/* | tail -1) +test -d /opt/android || sudo mkdir -p /opt/android +sudo ln -sf $last_ndk /opt/android/ndk + +if [ ! -z "$(BUILD_TYPE)" ]; then + tag=$(git tag --contains HEAD) + current_branch=$(git branch --show-current) + if [ -n "$tag" ] || [ "$current_branch" = "master" ]; then + BUILD_TYPE=Release + else + BUILD_TYPE=Debug + fi +fi + +cmake -DCMAKE_TOOLCHAIN_FILE=cmake/android-armhf-toolchain.cmake \ + -D_wx_selected_config=androideabi-qt-armhf \ + -DwxQt_Build=build_android_release_19_static_O3 \ + -DQt_Build=build_arm32_19_O3/qtbase \ + -DOCPN_Android_Common=OCPNAndroidCommon-master \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + .. + +make VERBOSE=1 + +make package diff --git a/ci/circleci-build-debian.sh b/ci/circleci-build-debian.sh new file mode 100644 index 0000000..81fe0f1 --- /dev/null +++ b/ci/circleci-build-debian.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +# +# Build the Debian artifacts +# +set -xe + +if [ "${CIRCLECI_LOCAL,,}" = "true" ]; then + if [[ -d ~/circleci-cache ]]; then + if [[ -f ~/circleci-cache/apt-proxy ]]; then + cat ~/circleci-cache/apt-proxy | sudo tee -a /etc/apt/apt.conf.d/00aptproxy + cat /etc/apt/apt.conf.d/00aptproxy + fi + fi +fi + +sudo apt-get -qq update +sudo apt-get install devscripts equivs + +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read -r line; do + sudo apt-get install $line + done < "$EXTRA_LIBS" +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read -r line; do + sudo apt-get install $line + done < "$EXTRA_LIBS" +fi + +pwd + +git submodule update --init opencpn-libs + +sudo mk-build-deps --install ./ci/control + +sudo apt-get --allow-unauthenticated install ./*all.deb || : +sudo apt-get --allow-unauthenticated install -f +rm -f ./*all.deb + + +if [ -n "$BUILD_GTK3" ] && [ "$BUILD_GTK3" = "TRUE" ]; then + sudo update-alternatives --set wx-config /usr/lib/*-linux-*/wx/config/gtk3-unicode-3.0 +fi + +rm -rf build && mkdir build && cd build + +tag=$(git tag --contains HEAD) +current_branch=$(git branch --show-current) + +if [ -n "$tag" ] || [ "$current_branch" = "master" ]; then + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local .. +else + cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local .. +fi + +make -j2 +make package +ls -l diff --git a/ci/circleci-build-fedora.sh b/ci/circleci-build-fedora.sh new file mode 100644 index 0000000..d59dc2f --- /dev/null +++ b/ci/circleci-build-fedora.sh @@ -0,0 +1,13 @@ +#!/bin/sh -xe + +# +# Build the mingw artifacts inside the Fedora container +# +set -xe + +su -c "dnf install -y sudo dnf-plugins-core" +sudo dnf builddep -y ci/opencpn-fedora.spec +rm -rf build; mkdir build; cd build +cmake .. +make -j2 +make package diff --git a/ci/circleci-build-flatpak.sh b/ci/circleci-build-flatpak.sh new file mode 100644 index 0000000..0880d0c --- /dev/null +++ b/ci/circleci-build-flatpak.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +# +# Build the flatpak artifacts. Uses docker to run Fedora on +# in full-fledged VM; the actual build is done in the Fedora +# container. +# +# flatpak-builder can be run in a docker image. However, this +# must then be run in privileged mode, which means it we need +# a full VM to run it. +# + +# bailout on errors and echo commands. +set -xe + +if [ "${CIRCLECI_LOCAL,,}" = "true" ]; then + if [[ -d ~/circleci-cache ]]; then + if [[ -f ~/circleci-cache/apt-proxy ]]; then + cat ~/circleci-cache/apt-proxy | sudo tee -a /etc/apt/apt.conf.d/00aptproxy + cat /etc/apt/apt.conf.d/00aptproxy + fi + fi +fi + +sudo apt-get -q -y --allow-unauthenticated --allow-downgrades --allow-remove-essential --allow-change-held-packages update + +#PLUGIN=bsb4 + +sudo apt --allow-unauthenticated --allow-downgrades --allow-remove-essential --allow-change-held-packages install flatpak flatpak-builder + +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + sudo apt update + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + sudo apt update + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi + +git config --global protocol.file.allow always +git submodule update --init opencpn-libs + +if [ -n "$CI" ]; then + sudo apt update + + # Avoid using outdated TLS certificates, see #210. + sudo apt install --reinstall ca-certificates + + # Use updated flatpak workaround +# sudo add-apt-repository -y ppa:alexlarsson/flatpak +# sudo apt update + + # Handle possible outdated key for google packages, see #486 + wget -q -O - https://cli-assets.heroku.com/apt/release.key \ + | sudo apt-key add - + wget -q -O - https://dl.google.com/linux/linux_signing_key.pub \ + | sudo apt-key add - + + + # Install flatpak and flatpak-builder - obsoleted by flathub + sudo apt install flatpak flatpak-builder + +fi + +flatpak remote-add --user --if-not-exists \ + flathub https://dl.flathub.org/repo/flathub.flatpakrepo + + +if [ "$FLATPAK_BRANCH" = "beta" ]; then + flatpak install --user -y flathub org.freedesktop.Sdk//$SDK_VER >/dev/null + flatpak remote-add --user --if-not-exists flathub-beta \ + https://dl.flathub.org/beta-repo/flathub-beta.flatpakrepo + flatpak install --user -y flathub-beta \ + org.opencpn.OpenCPN >/dev/null +else + flatpak install --user -y flathub org.freedesktop.Sdk//$SDK_VER >/dev/null + flatpak remote-add --user --if-not-exists flathub \ + https://dl.flathub.org/repo/flathub.flatpakrepo + flatpak install --user -y flathub \ + org.opencpn.OpenCPN >/dev/null + FLATPAK_BRANCH='stable' +fi + +rm -rf build && mkdir build && cd build +if [ -n "$WX_VER" ]; then + SET_WX_VER="-DWX_VER=$WX_VER" +else + SET_WX_VER="" +fi + +if [ "$FLATPAK_BRANCH" = '' ]; then + cmake -DOCPN_TARGET=$OCPN_TARGET -DBUILD_ARCH=$BUILD_ARCH -DOCPN_FLATPAK_CONFIG=ON -DSDK_VER=$SDK_VER -DFLATPAK_BRANCH='beta' $SET_WX_VER .. +else + cmake -DOCPN_TARGET=$OCPN_TARGET -DBUILD_ARCH=$BUILD_ARCH -DOCPN_FLATPAK_CONFIG=ON -DSDK_VER=$SDK_VER -DFLATPAK_BRANCH=$FLATPAK_BRANCH $SET_WX_VER .. +fi + +make flatpak-build +make flatpak-pkg diff --git a/ci/circleci-build-jammy.sh b/ci/circleci-build-jammy.sh new file mode 100644 index 0000000..9ac70f6 --- /dev/null +++ b/ci/circleci-build-jammy.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +# +# Build the Debian artifacts +# +set -xe + +if [ "${CIRCLECI_LOCAL,,}" = "true" ]; then + if [[ -d ~/circleci-cache ]]; then + if [[ -f ~/circleci-cache/apt-proxy ]]; then + cat ~/circleci-cache/apt-proxy | sudo tee -a /etc/apt/apt.conf.d/00aptproxy + cat /etc/apt/apt.conf.d/00aptproxy + fi + fi +fi + +sudo apt-get -qq update +sudo apt-get install devscripts equivs + +rm -rf build && mkdir build && cd build + +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi + +pwd +sudo mk-build-deps --install ../ci/control + +sudo apt-get --allow-unauthenticated install ./*all.deb || : +sudo apt-get --allow-unauthenticated install -f +rm -f ./*all.deb + +sudo apt-get install libwxgtk3.2-dev + +if [ -n "$BUILD_GTK3" ] && [ "$BUILD_GTK3" = "TRUE" ]; then + sudo update-alternatives --set wx-config /usr/lib/*-linux-*/wx/config/gtk3-unicode-3.0 +fi + +tag=$(git tag --contains HEAD) +current_branch=$(git branch --show-current) + +if [ -n "$tag" ] || [ "$current_branch" = "master" ]; then + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local .. +else + cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local .. +fi + +make -j2 +make package +ls -l diff --git a/ci/circleci-build-macos-universal.sh b/ci/circleci-build-macos-universal.sh new file mode 100755 index 0000000..78057d6 --- /dev/null +++ b/ci/circleci-build-macos-universal.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash + + +# Build the MacOS artifacts + + +# Copyright (c) 2021 Alec Leamas +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +set -x + +# Load local environment if it exists i. e., this is a local build +if [ -f ~/.config/local-build.rc ]; then source ~/.config/local-build.rc; fi + +git submodule update --init + +# If applicable, restore /usr/local from cache. +if [[ -n "$CI" && -f /tmp/local.cache.tar ]]; then + sudo rm -rf /usr/local/* + sudo tar -C /usr -xf /tmp/local.cache.tar +fi + +# Set up build directory +rm -rf build && mkdir build + +# Create a log file. +exec > >(tee build/build.log) 2>&1 + +export MACOSX_DEPLOYMENT_TARGET=10.10 + +# Return latest version of $1, optionally using option $2 +pkg_version() { brew list --versions $2 $1 | tail -1 | awk '{print $2}'; } + +# +# Check if the cache is with us. If not, re-install brew. +brew list --versions libexif || brew update-reset + +# Install packaged dependencies +here=$(cd "$(dirname "$0")"; pwd) +for pkg in $(sed '/#/d' < $here/../build-deps/macos-deps); do + brew list --versions $pkg || brew install $pkg || brew install $pkg || : + brew link --overwrite $pkg || brew install $pkg +done + +#Install python virtual environment +/usr/bin/python3 -m venv $HOME/cs-venv + +#Install prebuilt dependencies +wget -q https://dl.cloudsmith.io/public/nohal/opencpn-plugins/raw/files/macos_deps_universal.tar.xz \ + -O /tmp/macos_deps_universal.tar.xz +sudo tar -C /usr/local -xJf /tmp/macos_deps_universal.tar.xz + +export OPENSSL_ROOT_DIR='/usr/local' + +# Build and package +cd build +cmake \ + "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release}" \ + -DCMAKE_INSTALL_PREFIX= \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ + -DOCPN_TARGET_TUPLE="darwin-wx32;10;universal" \ + -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \ + .. + +if [[ -z "$CI" ]]; then + echo '$CI not found in environment, assuming local setup' + echo "Complete build using 'cd build; make tarball' or so." + exit 0 +fi + +# nor-reproducible error on first invocation, seemingly tarball-conf-stamp +# is not created as required. +make package || make package + +# Create the cached /usr/local archive +if [ -n "$CI" ]; then + tar -C /usr -cf /tmp/local.cache.tar local +fi diff --git a/ci/circleci-build-macos.sh b/ci/circleci-build-macos.sh new file mode 100644 index 0000000..8c2d4a8 --- /dev/null +++ b/ci/circleci-build-macos.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +# +# Build the MacOS artifacts +# + +set -xe + +set -o pipefail +# Check if the cache is with us. If not, re-install brew. +brew list --versions libexif || brew update-reset + +for pkg in cairo cmake gettext libarchive libexif python3 wget; do + brew list --versions $pkg || brew install $pkg || brew install $pkg || : + brew link --overwrite $pkg || brew install $pkg +done + +if [ -n "${WX_VER}" ] && [ "${WX_VER}" -eq "32" ]; then + echo "Building for WXVERSION 32"; + WX_URL=https://download.opencpn.org/s/Djqm4SXzYjF8nBw/download + WX_DOWNLOAD=/tmp/wx321_opencpn50_macos1010.tar.xz + WX_EXECUTABLE=/tmp/wx321_opencpn50_macos1010/bin/wx-config + WX_CONFIG="--prefix=/tmp/wx321_opencpn50_macos1010" + MACOSX_DEPLOYMENT_TARGET=10.10 +else + echo "Building for WXVERSION 315"; + WX_URL=https://download.opencpn.org/s/MCiRiq4fJcKD56r/download + WX_DOWNLOAD=/tmp/wx315_opencpn50_macos1010.tar.xz + WX_EXECUTABLE=/tmp/wx315_opencpn50_macos1010/bin/wx-config + WX_CONFIG="--prefix=/tmp/wx315_opencpn50_macos1010" + MACOSX_DEPLOYMENT_TARGET=10.10 +fi + +#Install python virtual environment +/usr/bin/python3 -m venv $HOME/cs-venv + +# Download required binaries using wget, since curl causes an issue with Xcode 13.1 and some specific certificates. +# Inspect the response code to see if the file is downloaded properly. +# If the download failed or file does not exist, then exit with an error. +# For local purposes: only download if it has not been downloaded already. That does not harm building on CircleCI. +if [ ! -f "$WX_DOWNLOAD" ]; then + echo "Downloading $WX_DOWNLOAD"; + SERVER_RESPONSE=$(wget --server-response -O $WX_DOWNLOAD $WX_URL 2>&1 | grep "HTTP"/ | awk '{print $2}') + if [ $SERVER_RESPONSE -ne 200 ]; then + echo "Fatal error: could not download $WX_DOWNLOAD. Server response: $SERVER_RESPONSE." + exit 0 + fi +fi +if [ -f "$WX_DOWNLOAD" ]; then + echo "$WX_DOWNLOAD exists" +else + echo "Fatal error: $WX_DOWNLOAD does not exist"; + exit 0 +fi + +# Unpack the binaries to /tmp +tar xJf $WX_DOWNLOAD -C /tmp + +# Extend PATH, only when necesary +INCLUDE_DIR_GETTEXT="/usr/local/opt/gettext/bin:" + +if [[ ":$PATH:" != *$INCLUDE_DIR_GETTEXT* ]]; then + echo "Your path is missing $INCLUDE_DIR_GETTEXT. Trying to add it automatically:" + export PATH=$INCLUDE_DIR_GETTEXT$PATH + echo 'export PATH="'$INCLUDE_DIR_GETTEXT'$PATH"' >> ~/.bash_profile +else + echo "Path includes $INCLUDE_DIR_GETTEXT" +fi + +export MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET + +# MacOS .pkg installer is deprecated in OCPN 5.6.2+ +# use brew to get Packages.pkg +#if brew list --cask --versions packages; then +# version=$(brew list --cask --versions packages) +# version="${version/"packages "/}" +# sudo installer \ +# -pkg /usr/local/Caskroom/packages/$version/packages/Packages.pkg \ +# -target / +#else +# brew install --cask packages +#fi + +git submodule update --init opencpn-libs + +rm -rf build && mkdir build && cd build +cmake \ + -DwxWidgets_CONFIG_EXECUTABLE=$WX_EXECUTABLE \ + -DwxWidgets_CONFIG_OPTIONS=$WX_CONFIG \ + -DCMAKE_INSTALL_PREFIX=app/files \ + -DBUILD_TYPE_PACKAGE:STRING=tarball \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \ + "/" \ + .. +make +make install +make package + diff --git a/ci/circleci-build-mingw.sh b/ci/circleci-build-mingw.sh new file mode 100644 index 0000000..a489273 --- /dev/null +++ b/ci/circleci-build-mingw.sh @@ -0,0 +1,14 @@ +#!/bin/sh -xe + +# +# Build the mingw artifacts inside the Fedora container +# + +set -xe + +su -c "dnf install -y sudo dnf-plugins-core" +sudo dnf builddep -y mingw/fedora/opencpn-deps.spec +rm -rf build; mkdir build; cd build +cmake -DCMAKE_TOOLCHAIN_FILE=../mingw/fedora/toolchain.cmake .. +make -j2 +make package diff --git a/ci/circleci-build-msvc.bat b/ci/circleci-build-msvc.bat new file mode 100644 index 0000000..b6d8e2a --- /dev/null +++ b/ci/circleci-build-msvc.bat @@ -0,0 +1,76 @@ +:: +:: Build the msvc artifacts +:: + +set "SCRIPTDIR=%~dp0" +set "GIT_HOME=C:\Program Files\Git" +if "%CONFIGURATION%" == "" set "CONFIGURATION=RelWithDebInfo" + +set wx_vers="wx%WX_VER%" +echo Building %wx_vers% +echo Building with %MSVC_VERSION% + +PATH %SCRIPTDIR%.local\bin;%PATH% +echo SCRIPTDIR: %SCRIPTDIR% +dir %SCRIPTDIR% +dir %SCRIPTDIR%.. +dir %SCRIPTDIR%..\msvc +call %SCRIPTDIR%..\msvc\win_deps.bat %wx_vers% +path %SCRIPTDIR%.local\bin;%PATH%;"C:\Program Files\CMake\bin" +call "%SCRIPTDIR%..\cache\wx-config.bat" +set PATH=%EXTRA_PATH%;%PATH% +echo EXTRA_PATH: %EXTRA_PATH% +echo USING wxWidgets_LIB_DIR: %wxWidgets_LIB_DIR% +echo USING wxWidgets_ROOT_DIR: %wxWidgets_ROOT_DIR% +echo USING OCPN_TARGET_TUPLE: %TARGET_TUPLE% + +nmake /? >nul 2>&1 +if errorlevel 1 ( + set "VS_HOME=C:\Program Files\Microsoft Visual Studio\2022" + call "%VS_HOME%\Community\VC\Auxiliary\Build\vcvars32.bat" +) + +git submodule update --init opencpn-libs + +dir + +if exist build (rmdir /s /q build) +mkdir build && cd build +dir + +wget https://sourceforge.net/projects/opencpnplugins/files/opencpn.lib +wget https://download.opencpn.org/s/oibxM3kzfzKcSc3/download/OpenCPN_buildwin-4.99a.7z +7z x -y OpenCPN_buildwin-4.99a.7z -o..\buildwin +wget https://download.opencpn.org/s/54HsBDLNzRZLL6i/download/nsis-3.04-setup.exe +nsis-3.04-setup.exe /S + +echo Check if poedit has been installed +poedit -version +echo Done check + +echo Create build environment + +if "%MSVC_VERSION%" == "2019" ( +cmake -T v141_xp -G "Visual Studio 16 2019" ^ + -DCMAKE_GENERATOR_PLATFORM=Win32 ^ + -DCMAKE_BUILD_TYPE=%CONFIGURATION% ^ + -DwxWidgets_LIB_DIR=%wxWidgets_LIB_DIR% ^ + -DwxWidgets_ROOT_DIR=%wxWidgets_ROOT_DIR% ^ + .. +) else ( +cmake -A Win32 -G "Visual Studio 17 2022" ^ + -DCMAKE_GENERATOR_PLATFORM=Win32 ^ + -DCMAKE_BUILD_TYPE=%CONFIGURATION% ^ + -DwxWidgets_LIB_DIR=%wxWidgets_LIB_DIR% ^ + -DwxWidgets_ROOT_DIR=%wxWidgets_ROOT_DIR% ^ + .. +) + + +cd +dir + +echo Build for windows + +:cmake --build . --target tarball --config %CONFIGURATION% +cmake --build . --target package --config %CONFIGURATION% diff --git a/ci/circleci-build-ubuntu-docker.sh b/ci/circleci-build-ubuntu-docker.sh new file mode 100644 index 0000000..7b0e818 --- /dev/null +++ b/ci/circleci-build-ubuntu-docker.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash + +# +# Build for Raspbian and debian in a docker container +# + +cd ~/project + +git submodule update --init opencpn-libs + +ls -la ~/project + +# bailout on errors and echo commands. +set -x +sudo apt-get -y --allow-unauthenticated update + +DOCKER_SOCK="unix:///var/run/docker.sock" + +echo "DOCKER_OPTS=\"-H tcp://127.0.0.1:2375 -H $DOCKER_SOCK -s devicemapper\"" | sudo tee /etc/default/docker > /dev/null +sudo service docker restart +sleep 5; + +if [ "$BUILD_ENV" = "raspbian" ]; then + docker run --rm --privileged multiarch/qemu-user-static:register --reset +else + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +fi + +docker run --privileged -d -ti -e "container=docker" \ + -e "CIRCLECI=$CIRCLECI" \ + -e "CIRCLE_BRANCH=$CIRCLE_BRANCH" \ + -e "CIRCLE_TAG=$CIRCLE_TAG" \ + -e "CIRCLE_PROJECT_USERNAME=$CIRCLE_PROJECT_USERNAME" \ + -e "CIRCLE_PROJECT_REPONAME=$CIRCLE_PROJECT_REPONAME" \ + -e "GIT_REPOSITORY_SERVER=$GIT_REPOSITORY_SERVER" \ + -e "OCPN_TARGET=$OCPN_TARGET" \ + -e "BUILD_GTK3=$BUILD_GTK3" \ + -e "WX_VER=$WX_VER" \ + -e "BUILD_ENV=$BUILD_ENV" \ + -e "TZ=$TZ" \ + -e "DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \ + -v $(pwd):/ci-source:rw -v ~/source_top:/source_top $DOCKER_IMAGE /bin/bash + +DOCKER_CONTAINER_ID=$(docker ps | grep $DOCKER_IMAGE | awk '{print $1}') + +echo "Target build: $OCPN_TARGET" +# Construct and run build script +rm -f build.sh + +if [ "$BUILD_ENV" = "raspbian" ]; then + if [ "$OCPN_TARGET" = "buster-armhf" ]; then + cat >> build.sh << "EOF01" + # cmake 3.16 has a bug that stops the build to use an older version + install_packages cmake=3.13.4-1 cmake-data=3.13.4-1 +EOF01 + else + cat >> build.sh << "EOF02" + install_packages cmake cmake-data +EOF02 + fi + if [ "$OCPN_TARGET" = "bullseye-armhf" ]; then + cat >> build.sh << "EOF03" + curl http://mirrordirector.raspbian.org/raspbian.public.key | apt-key add - + curl http://archive.raspbian.org/raspbian.public.key | apt-key add - + sudo apt -q --allow-unauthenticated update + sudo apt --allow-unauthenticated install devscripts equivs wget git lsb-release + sudo mk-build-deps -ir ci-source/ci/control + sudo apt-get --allow-unauthenticated install -f +EOF03 + else + cat >> build.sh << "EOF04" + install_packages git build-essential devscripts equivs gettext wx-common libgtk2.0-dev libwxbase3.0-dev libwxgtk3.0-dev libbz2-dev libcurl4-openssl-dev libexpat1-dev libcairo2-dev libarchive-dev liblzma-dev libexif-dev lsb-release +EOF04 + fi +else + if [ "$OCPN_TARGET" = "focal-arm64" ] || + [ "$OCPN_TARGET" = "focal-armhf" ] || + [ "$OCPN_TARGET" = "bullseye-armhf" ] || + [ "$OCPN_TARGET" = "bullseye-arm64" ] || + [ "$OCPN_TARGET" = "bookworm-armhf" ] || + [ "$OCPN_TARGET" = "bookworm-arm64" ] || + [ "$OCPN_TARGET" = "bookworm" ] || + [ "$OCPN_TARGET" = "buster-armhf" ]; then + cat >> build.sh << "EOF05" + echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + apt-get -qq --allow-unauthenticated update && DEBIAN_FRONTEND='noninteractive' TZ='America/New_York' apt-get -y --no-install-recommends --allow-change-held-packages install tzdata + apt-get -y --fix-missing install --allow-change-held-packages --allow-unauthenticated \ + software-properties-common devscripts equivs wget git build-essential gettext wx-common libgtk2.0-dev libbz2-dev libcurl4-openssl-dev libexpat1-dev libcairo2-dev libarchive-dev liblzma-dev libexif-dev lsb-release openssl libssl-dev +EOF05 + if [ "$OCPN_TARGET" = "buster-armhf" ] || + [ "$OCPN_TARGET" = "bullseye-arm64" ]; then + echo "BUILD_GTK3: $BUILD_GTK3" + if [ ! -n "$BUILD_GTK3" ] || [ "$BUILD_GTK3" = "false" ]; then + echo "Building for GTK2" + cat >> build.sh << "EOF06" + apt-get -y --no-install-recommends --fix-missing --allow-change-held-packages --allow-unauthenticated install libwxgtk3.0-dev +EOF06 + else + echo "Building for GTK3" + cat >> build.sh << "EOF07" + apt-get -y --no-install-recommends --fix-missing --allow-change-held-packages --allow-unauthenticated install libwxgtk3.0-gtk3-dev +EOF07 + fi + fi + echo "WX_VER: $WX_VER" + if [ ! -n "$WX_VER" ] || [ "$WX_VER" = "30" ]; then + echo "Building for WX30" + cat >> build.sh << "EOF08" + apt-get -y --no-install-recommends --fix-missing --allow-change-held-packages --allow-unauthenticated install libwxbase3.0-dev +EOF08 + elif [ "$WX_VER" = "32" ]; then + echo "Building for WX32" + if [ "$OCPN_TARGET" = "bullseye-armhf" ] || [ "$OCPN_TARGET" = "bullseye-arm64" ]; then + cat >> build.sh << "EOF09" + echo "deb [trusted=yes] https://ppa.launchpadcontent.net/opencpn/opencpn/ubuntu jammy main" | tee -a /etc/apt/sources.list + echo "deb-src [trusted=yes] https://ppa.launchpadcontent.net/opencpn/opencpn/ubuntu jammy main" | tee -a /etc/apt/sources.list + apt-get -y --allow-unauthenticated update +EOF09 + fi + cat >> build.sh << "EOF10" + apt-get -y --fix-missing --allow-change-held-packages --allow-unauthenticated install libwxgtk3.2-dev +EOF10 + fi + if [ "$OCPN_TARGET" = "focal-armhf" ]; then + cat >> build.sh << "EOF11" + CMAKE_VERSION=3.20.5-0kitware1ubuntu20.04.1 + wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc --no-check-certificate 2>/dev/null | apt-key add - + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' + apt-get --allow-unauthenticated update + apt --allow-unauthenticated install cmake=$CMAKE_VERSION cmake-data=$CMAKE_VERSION +EOF11 + else + cat >> build.sh << "EOF12" + apt install -y --allow-unauthenticated cmake +EOF12 + fi + else + cat > build.sh << "EOF13" + apt-get -qq --allow-unauthenticated update + apt-get -y --no-install-recommends --allow-change-held-packages --allow-unauthenticated install \ + git cmake build-essential gettext wx-common libgtk2.0-dev libwxbase3.0-dev libwxgtk3.0-dev libbz2-dev libcurl4-openssl-dev libexpat1-dev libcairo2-dev libarchive-dev liblzma-dev libexif-dev lsb-release +EOF13 + fi +fi + +# Install extra build libs +ME=$(echo ${0##*/} | sed 's/\.sh//g') +EXTRA_LIBS=./ci/extras/extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi +EXTRA_LIBS=./ci/extras/${ME}_extra_libs.txt +if test -f "$EXTRA_LIBS"; then + while read line; do + sudo apt-get install $line + done < $EXTRA_LIBS +fi + +cat build.sh + +if type nproc &> /dev/null +then + BUILD_FLAGS="-j"$(nproc) +fi + +docker exec -ti \ + $DOCKER_CONTAINER_ID /bin/bash -xec "bash -xe ci-source/build.sh; rm -rf ci-source/build; mkdir ci-source/build; cd ci-source/build; cmake ..; make $BUILD_FLAGS; make package; chmod -R a+rw ../build;" + +echo "Stopping" +docker ps -a +docker stop $DOCKER_CONTAINER_ID +docker rm -v $DOCKER_CONTAINER_ID + diff --git a/ci/cloudsmith-upload.sh b/ci/cloudsmith-upload.sh new file mode 100644 index 0000000..be9b27a --- /dev/null +++ b/ci/cloudsmith-upload.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# +# Run created cloudsmith upload script +# + +CURRENT_DIR=$(pwd) +ls +ls build +bash $CURRENT_DIR/build/cloudsmith-upload.sh diff --git a/ci/control b/ci/control new file mode 100644 index 0000000..e477ebe --- /dev/null +++ b/ci/control @@ -0,0 +1,41 @@ +Source: opencpn +Build-Depends: debhelper (>= 9), + cmake3 | cmake (>> 3.5.0), + curl, + libarchive-dev, + libbz2-dev, + libcairo2-dev, + libcurl4-openssl-dev, + libelf-dev, + libexif-dev, + libgdk-pixbuf2.0-dev, + liblz4-dev, + liblzma-dev, + libpango1.0-dev, + libsqlite3-dev, + libtinyxml-dev, + libunarr-dev | base-files (<< 11), + libgtk2.0-dev, + libgtk-3-dev, + libwxsvg-dev | base-files (<< 11), + base-files (>=12) | libwxgtk3.0-dev | libwxgtk3.0-gtk3-dev, + base-files (>=12) | libwxgtk3.0-0v5 | libwxgtk3.0-gtk3-0v5, + base-files (>=12) | libwxgtk-webview3.0-dev | libwxgtk-webview3.0-gtk3-dev, + base-files (<< 12) | libwxgtk3.2-dev (>= 3.2.2), + base-files (<< 12) | libwxgtk-webview3.2-dev (>= 3.2.2), + portaudio19-dev, + python3-pip, + python3-setuptools + +Standards-Version: 4.3.0 +Homepage: https://opencpn.org + +Description: Packages needed to build opencpn on debian. + The Build-Depends field can be used to install dependencies + using something like: + . + . sudo apt install devscripts equivs + . sudo mk-build-deps --install ci/control + . + These packages are available in trusty+. The base-files + fallback is for optional packages available in later releases. diff --git a/ci/extras/README.txt b/ci/extras/README.txt new file mode 100644 index 0000000..be190a2 --- /dev/null +++ b/ci/extras/README.txt @@ -0,0 +1,14 @@ +This directory can contain 0, 1, or more files that can be used to install extra libraries/programs +that need to be installed to ensure the build will be sucessful. There are three basic file names: + extra_libs.txt + {script name}_extra_libs.txt + {CIRCLE_JOB}_extra.libs.txt + +The first will be executed by all scripts, the second will only be executed by a specific script. +The second form will look like: + circleci-build-debian_extra_libs.txt +where 'circleci-build-debian' is the script name with the '.sh' removed. +The third form will look like: + build-jammy_extra_libs.txt +where 'build-jammy' is the circleci job. + diff --git a/ci/extras/circleci-build-flatpak_extra_libs.txt b/ci/extras/circleci-build-flatpak_extra_libs.txt new file mode 100644 index 0000000..1ce3f6b --- /dev/null +++ b/ci/extras/circleci-build-flatpak_extra_libs.txt @@ -0,0 +1 @@ +libcurl4-openssl-dev diff --git a/ci/extras/extra_libs.txt b/ci/extras/extra_libs.txt new file mode 100644 index 0000000..efaa0f4 --- /dev/null +++ b/ci/extras/extra_libs.txt @@ -0,0 +1 @@ +equivs diff --git a/ci/opencpn-deps.spec b/ci/opencpn-deps.spec new file mode 100644 index 0000000..219d5f8 --- /dev/null +++ b/ci/opencpn-deps.spec @@ -0,0 +1,66 @@ +Name: opencpn-deps +Version: 0.1 +Release: 1%{?dist} +Summary: Empty package with opencpn build dependencies + +License: MIT +URL: https://github.com/leamas/opencpn + +BuildRequires: cmake +BuildRequires: gettext +BuildRequires: make +BuildRequires: mingw-binutils-generic +BuildRequires: mingw-filesystem-base +BuildRequires: mingw32-binutils +BuildRequires: mingw32-bzip2 +BuildRequires: mingw32-cairo +BuildRequires: mingw32-curl +BuildRequires: mingw32-expat +BuildRequires: mingw32-filesystem +BuildRequires: mingw32-fontconfig +BuildRequires: mingw32-freetype +BuildRequires: mingw32-gcc +BuildRequires: mingw32-gcc-c++ +BuildRequires: mingw32-cpp +BuildRequires: mingw32-gettext +BuildRequires: mingw32-headers +BuildRequires: mingw32-glib2 +BuildRequires: mingw32-gtk2 +BuildRequires: mingw32-libarchive +BuildRequires: mingw32-libexif +BuildRequires: mingw32-libffi +BuildRequires: mingw32-libpng +BuildRequires: mingw32-libtiff +BuildRequires: mingw32-libxml2 +BuildRequires: mingw32-nsiswrapper +BuildRequires: mingw32-openssl +BuildRequires: mingw32-pcre +BuildRequires: mingw32-pixman +BuildRequires: mingw32-sqlite +BuildRequires: mingw32-win-iconv +BuildRequires: mingw32-wxWidgets3 >= 3.0.2 +BuildRequires: mingw32-xz-libs + +%description + +Empty package used to catch build dependencies for opencpn using +the mingw tools to create a Windows 32-bit executable + +Use dnf builddep opencpn-deps.spec to install the dependencies. + +%prep + + +%build + + +%install + + +%files +%doc COPYING + + +%changelog +* Fri Mar 15 2020 - 0.1 +- Initial release diff --git a/ci/opencpn-fedora.spec b/ci/opencpn-fedora.spec new file mode 100644 index 0000000..292dfee --- /dev/null +++ b/ci/opencpn-fedora.spec @@ -0,0 +1,37 @@ +Name: opencpn +Summary: Chartplotter and GPS navigation software +Version: 5.0.0 +Release: 4.1%{?dist} +License: GPLv2+ + +BuildRequires: bzip2-devel +BuildRequires: cmake +BuildRequires: curl +BuildRequires: desktop-file-utils +BuildRequires: elfutils-libelf-devel +BuildRequires: expat-devel +BuildRequires: gcc-c++ +BuildRequires: gettext +BuildRequires: libcurl-devel +BuildRequires: mesa-libGL-devel +BuildRequires: mesa-libGLU-devel +BuildRequires: portaudio-devel +BuildRequires: redhat-lsb-core +BuildRequires: tar +BuildRequires: tinyxml-devel +BuildRequires: compat-wxGTK3-gtk2-devel +BuildRequires: xz-devel +BuildRequires: xz-lzma-compat + +%description +Empty package to catch build dependecies for OpenCPN + +%prep + +%build + +%install + +%changelog +* Sun Apr 28 2019 Alec Leamas - 4.8.0-4.1 +- rebuilt diff --git a/cmake/FindGTK3.cmake b/cmake/FindGTK3.cmake new file mode 100644 index 0000000..b622378 --- /dev/null +++ b/cmake/FindGTK3.cmake @@ -0,0 +1,64 @@ +# - Try to find GTK+ 3 Once done, this will define +# +# GTK3_FOUND - system has GTK+ 3. GTK3_INCLUDE_DIRS - the GTK+ 3. include +# directories GTK3_LIBRARIES - link these to use GTK+ 3. +# +# Copyright (C) 2012 Raphael Kubo da Costa Copyright (C) +# 2013 Igalia S.L. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: 1. +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. 2. Redistributions in binary +# form must reproduce the above copyright notice, this list of conditions and +# the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS +# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +set(FindGTK3_SAVE_CMLOC ${CMLOC}) +set(CMLOC "FindGTK3: ") + +message(STATUS "${CMLOC}Finding package PkgConfig") +find_package(PkgConfig) +pkg_check_modules(GTK3 gtk+-3.0) +set(VERSION_OK TRUE) +if (GTK3_VERSION) + message(STATUS "${CMLOC}Found GTK3_VERSION") + if (GTK3_FIND_VERSION_EXACT) + message(STATUS "${CMLOC}Find exact version of GTK3") + if (NOT ("${GTK3_FIND_VERSION}" VERSION_EQUAL "${GTK3_VERSION}")) + set(VERSION_OK FALSE) + message( + STATUS + "${CMLOC}GTK3 exact version not found: GTK3_FIND_VERSION: ${GTK3_FIND_VERSION} != GTK3_VERSION: ${GTK3_VERSION}" + ) + endif () + else () + if ("${GTK3_VERSION}" VERSION_LESS "${GTK3_FIND_VERSION}") + set(VERSION_OK FALSE) + message( + STATUS + "${CMLOC}GTK3 exact version not found: GTK3_VERSION: ${GTK3_VERSION} < GTK3_FIND_VERSION: ${GTK3_FIND_VERSION}" + ) + endif () + endif () +elseif () + message(STATUS "${CMLOC}GTK3 not found") +endif () +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + GTK3 DEFAULT_MSG GTK3_INCLUDE_DIRS GTK3_LIBRARIES VERSION_OK +) +message(STATUS "${CMLOC}Finished FindGTK3") + +set(CMLOC ${FindGTK3_SAVE_CMLOC}) diff --git a/cmake/MacosWxwidgets.cmake b/cmake/MacosWxwidgets.cmake new file mode 100644 index 0000000..8e6395d --- /dev/null +++ b/cmake/MacosWxwidgets.cmake @@ -0,0 +1,98 @@ +# ~~~ +# Summary: If required, rebuild wxwidgets for macos from source. +# License: GPLv3+ +# Copyright (c) 2022 Alec Leamas +# ~~~ + +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. + +cmake_minimum_required(VERSION 3.20.0) + +set(wx_repo https://github.com/wxWidgets/wxWidgets.git) +set(wx_tag v3.2.2.1) + +option(IGNORE_SYSTEM_WX "Never use system wxWidgets installation" FALSE) + +# Check if we have done the wxWidgets build already +# +if (DEFINED wx_config) + return() +endif () + +# Check if there is a usable wxwidgets anyway +# +set(cache_dir ${PROJECT_SOURCE_DIR}/cache) + +if (IGNORE_SYSTEM_WX) + set(WX_CONFIG_PROG ${cache_dir}/lib/wx/config/osx_cocoa-unicode-3.2) +else () + find_program( + WX_CONFIG_PROG + NAMES wx-config osx_cocoa-unicode-3.2 + HINTS ${PROJECT_SOURCE_DIR}/cache/lib/wx/config /usr/local/lib/wx/config + ) +endif () +if (WX_CONFIG_PROG) + execute_process( + COMMAND ${WX_CONFIG_PROG} --version + RESULT_VARIABLE wx_status + OUTPUT_VARIABLE wx_version + ERROR_FILE /dev/null COMMAND_ECHO STDOUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else () + set(wx_status 1) +endif () + +if (${wx_status} EQUAL 0) + set(wx_config + ${WX_CONFIG_PROG} + CACHE FILEPATH "" + ) + set(ENV{WX_CONFIG} ${WX_CONFIG_PROG}) + if (${wx_version} VERSION_GREATER_EQUAL 3.2) + return() + endif () +endif () + +if (NOT EXISTS ${cache_dir}) + file(MAKE_DIRECTORY ${cache_dir}) +endif () + +# Download sources and get the source directory +# +include(FetchContent) +fetchcontent_declare( + wxwidgets + GIT_REPOSITORY ${wx_repo} + GIT_TAG ${wx_tag} +) +fetchcontent_populate(wxwidgets) +fetchcontent_getproperties(wxwidgets SOURCE_DIR wxwidgets_src_dir) + +execute_process( + COMMAND git submodule update --init 3rdparty/pcre + WORKING_DIRECTORY ${wxwidgets_src_dir} +) +execute_process( + COMMAND + ./configure --with-cxx=11 --with-macosx-version-min=10.10 --enable-unicode + --with-osx-cocoa --enable-aui --disable-debug --with-opengl + --enable-macosx_arch=arm64,x86_64 --enable-universal_binary=arm64,x86_64 + --without-subdirs --prefix=${cache_dir} + WORKING_DIRECTORY ${wxwidgets_src_dir} +) +math(_nproc ${OCPN_NPROC} * 2) # Assuming two threads/cpu +execute_process(COMMAND make -j${_nproc} WORKING_DIRECTORY ${wxwidgets_src_dir}) +execute_process( + COMMAND sudo make install WORKING_DIRECTORY ${wxwidgets_src_dir} +) + +set(wx_config ${cache_dir}/lib/wx/config/osx_cocoa-unicode-3.2) +if (NOT EXISTS ${wx_config}) + message(FATAL_ERROR "Cannot locate wx-config tool at ${wx_config}") +endif () +set(ENV{WX_CONFIG} ${wx_config}) diff --git a/cmake/PluginConfigure.cmake b/cmake/PluginConfigure.cmake index ba0fe69..2839aa7 100644 --- a/cmake/PluginConfigure.cmake +++ b/cmake/PluginConfigure.cmake @@ -1,312 +1,901 @@ -##--------------------------------------------------------------------------- -## Author: Sean D'Epagnier -## Copyright: -## License: GPLv3+ -##--------------------------------------------------------------------------- - -# To build for android, use this cmake invocation.. -#$cmake -DCMAKE_TOOLCHAIN_FILE=../buildandroid/build_android.cmake - - -SET(PLUGIN_SOURCE_DIR .) - - -MESSAGE (STATUS "*** Building ${PACKAGE_NAME} ***") - -MESSAGE (STATUS "Build type: ${CMAKE_BUILD_TYPE}") -IF (PREFIX) - SET(CMAKE_INSTALL_PREFIX ${PREFIX}) -ENDIF (PREFIX) - -SET(PREFIX_BIN bin) -SET(PREFIX_INCLUDE include) -SET(PREFIX_DATA share) -SET(PREFIX_PKGDATA ${PREFIX_DATA}/${PACKAGE_NAME}) - -IF (NOT WIN32) - # default - SET (ARCH "i386") - IF (UNIX AND NOT APPLE) - MESSAGE (STATUS "*** Will install to ${CMAKE_INSTALL_PREFIX} ***") - - IF (EXISTS /etc/debian_version) - SET (PACKAGE_FORMAT "DEB") - #SET (PACKAGE_DEPS "libc6, libwxgtk3.0-0, libglu1-mesa (>= 7.0.0)") - SET (LIB_INSTALL_DIR "lib") - IF (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET (ARCH "amd64") - ELSE (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET (ARCH "i386") - ENDIF (CMAKE_SIZEOF_VOID_P MATCHES "8") - ENDIF (EXISTS /etc/debian_version) - IF (EXISTS /etc/redhat-release) - SET (PACKAGE_FORMAT "RPM") - SET (PACKAGE_DEPS "opencpn") - IF (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET (ARCH "x86_64") - SET (LIB_INSTALL_DIR "lib64") - ELSE (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET (ARCH "i386") - SET (LIB_INSTALL_DIR "lib") - ENDIF (CMAKE_SIZEOF_VOID_P MATCHES "8") - ENDIF (EXISTS /etc/redhat-release) - ENDIF (UNIX AND NOT APPLE) -endif(NOT WIN32) - -IF (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") - SET (ARCH "armhf") - ADD_DEFINITIONS( -DARMHF ) -ENDIF (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") - -MESSAGE (STATUS "*** Build Architecture is ${ARCH}") - - -IF(DEFINED _wx_selected_config) - -# May be overridden -IF(NOT DEFINED Qt_Build) - SET(Qt_Build "android_armv7") -ENDIF(NOT DEFINED Qt_Build) - -MESSAGE (STATUS "selected config ${_wx_selected_config}") - -IF(_wx_selected_config MATCHES "androideabi-qt") - MESSAGE (STATUS "Building for wxQt-Android") - MESSAGE (STATUS "Qt_Base/Build: " ${Qt_Base} "/" ${Qt_Build}) - MESSAGE (STATUS "wxQt_Base/Build: " ${wxQt_Base} "/" ${wxQt_Build}) - SET(QT_ANDROID "ON") - SET(QT_LINUX "OFF") - SET(QT "ON") -ENDIF(_wx_selected_config MATCHES "androideabi-qt") - -ENDIF(DEFINED _wx_selected_config) - - -MESSAGE (STATUS "*** Staging to build ${PACKAGE_NAME} ***") - -include ("VERSION.cmake") -configure_file(${PROJECT_SOURCE_DIR}/cmake/wxWTranslateCatalog.h.in ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include/wxWTranslateCatalog.h) - -# Do the version.h configuration into the build output directory, -# thereby allowing building from a read-only source tree. -IF(NOT SKIP_VERSION_CONFIG) - configure_file(${PROJECT_SOURCE_DIR}/cmake/version.h.in ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include/version.h) - configure_file(cmake/wxWTranslateCatalog.h.in ${PROJECT_SOURCE_DIR}/src/wxWTranslateCatalog.h) - INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include) -ENDIF(NOT SKIP_VERSION_CONFIG) - -SET(PLUGIN_VERSION "${PLUGIN_VERSION_MAJOR}.${PLUGIN_VERSION_MINOR}.${PLUGIN_VERSION_PATCH}" ) - -INCLUDE_DIRECTORIES(BEFORE ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src) - -# SET(PROFILING 1) - -if (CMAKE_VERSION VERSION_LESS "3.1") - include(CheckCXXCompilerFlag) - CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) - CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) - if(COMPILER_SUPPORTS_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - message(STATUS "Setting C++11 standard via CXX flags") - elseif(COMPILER_SUPPORTS_CXX0X) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - message(STATUS "Setting C++0x standard via CXX FLAGS") - else() - message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") - endif() +# --------------------------------------------------------------------------- +# Author: Jon Gough (Based on the work of Sean D'Epagnier and Pavel Kalian) +# Copyright: 2019 License: GPLv3+ +# --------------------------------------------------------------------------- + +set(SAVE_CMLOC ${CMLOC}) +set(CMLOC "PluginConfigure: ") + +message(STATUS "${CMLOC}*** Staging to build ${PACKAGE_NAME} ***") + +message(STATUS "${CMLOC}CIRCLECI: ${CIRCLECLI}, Env CIRCLECI: $ENV{CIRCLECI}") +message(STATUS "${CMLOC}TRAVIS: ${TRAVIS}, Env TRAVIS: $ENV{TRAVIS}") + +set(GIT_REPOSITORY "") + +if ($ENV{CIRCLECI}) + set(GIT_REPOSITORY + "$ENV{CIRCLE_PROJECT_USERNAME}/$ENV{CIRCLE_PROJECT_REPONAME}" + ) + set(GIT_REPOSITORY_BRANCH "$ENV{CIRCLE_BRANCH}") + set(GIT_REPOSITORY_TAG "$ENV{CIRCLE_TAG}") +elseif ($ENV{TRAVIS}) + set(GIT_REPOSITORY "$ENV{TRAVIS_REPO_SLUG}") + set(GIT_REPOSITORY_BRANCH "$ENV{TRAVIS_BRANCH}") + set(GIT_REPOSITORY_TAG "$ENV{TRAVIS_TAG}") + if ("${GIT_REPOSITORY_BRANCH}" STREQUAL "${GIT_REPOSITORY_TAG}") + # Travis sets TRAVIS_BRANCH to TRAVIS_TAG for tagged builds. Need to clear + # this setting + set(GIT_REPOSITORY_BRANCH "") + endif () +elseif ($ENV{APPVEYOR}) + set(GIT_REPOSITORY "$ENV{APPVEYOR_REPO_NAME}") + set(GIT_REPOSITORY_BRANCH "$ENV{APPVEYOR_REPO_BRANCH}") + set(GIT_REPOSITORY_TAG "$ENV{APPVEYOR_REPO_TAG_NAME}") else () - set (CMAKE_CXX_STANDARD 11) - message(STATUS "Setting C++11 standard via cmake standard mecahnism") + if ("${GIT_REPOSITORY_EXISTS}" STREQUAL "0") + # Get the current working branch + execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_REPOSITORY_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if ("${GIT_REPOSITORY_BRANCH}" STREQUAL "") + message(STATUS "${CMLOC}Setting default GIT repository branch - master") + set(GIT_REPOSITORY_BRANCH "master") + endif () + execute_process( + COMMAND git tag --contains + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_REPOSITORY_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process( + COMMAND git status --porcelain -b + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_STATUS + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(FIND ${GIT_STATUS} "..." START_TRACKED) + if (NOT START_TRACKED EQUAL -1) + string(FIND ${GIT_STATUS} "/" END_TRACKED) + math(EXPR START_TRACKED "${START_TRACKED}+3") + math(EXPR END_TRACKED "${END_TRACKED}-${START_TRACKED}") + string(SUBSTRING ${GIT_STATUS} ${START_TRACKED} ${END_TRACKED} + GIT_REPOSITORY_REMOTE + ) + message(STATUS "${CMLOC}GIT_REPOSITORY_REMOTE: ${GIT_REPOSITORY_REMOTE}") + execute_process( + COMMAND git remote get-url ${GIT_REPOSITORY_REMOTE} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_REPOSITORY_URL + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE GIT_REMOTE_ERROR + ) + if (NOT GIT_REMOTE_ERROR STREQUAL "") + message(STATUS "${CMLOC}Command error: ${GIT_REMOTE_ERROR}") + message(STATUS "${CMLOC}Using default repository") + else () + string(FIND ${GIT_REPOSITORY_URL} ${GIT_REPOSITORY_SERVER} START_URL + REVERSE + ) + string(LENGTH ${GIT_REPOSITORY_SERVER} STRING_LENGTH) + math(EXPR START_URL "${START_URL}+1+${STRING_LENGTH}") + string(LENGTH ${GIT_REPOSITORY_URL} STRING_LENGTH) + message( + STATUS + "${CMLOC}START_URL: ${START_URL}, STRING_LENGTH: ${STRING_LENGTH}" + ) + string(SUBSTRING ${GIT_REPOSITORY_URL} ${START_URL} ${STRING_LENGTH} + GIT_REPOSITORY + ) + endif () + else () + message(STATUS "${CMLOC}Branch is not tracking a remote branch") + endif () + else () + message( + STATUS + "${CMLOC}This directory does not contain git or git is not available" + ) + set(GIT_REPOSITORY "") + set(GIT_REPOSITORY_BRANCH "") + set(GIT_REPOSITORY_TAG "") + endif () +endif () +message(STATUS "${CMLOC}GIT_REPOSITORY: ${GIT_REPOSITORY}") +message(STATUS "${CMLOC}Git Branch: \"${GIT_REPOSITORY_BRANCH}\"") +message(STATUS "${CMLOC}Git Tag: \"${GIT_REPOSITORY_TAG}\"") +if ("${GIT_REPOSITORY_BRANCH}" STREQUAL "") + set(GIT_BRANCH_OR_TAG "tag") + set(GIT_REPOSITORY_ITEM ${GIT_REPOSITORY_TAG}) +else () + set(GIT_BRANCH_OR_TAG "branch") + set(GIT_REPOSITORY_ITEM ${GIT_REPOSITORY_BRANCH}) +endif () +message(STATUS "${CMLOC}GIT_BRANCH_OR_TAG: ${GIT_BRANCH_OR_TAG}") +message(STATUS "${CMLOC}GIT_REPOSITORY_ITEM: ${GIT_REPOSITORY_ITEM}") + +if (NOT DEFINED CLOUDSMITH_BASE_REPOSITORY AND NOT ${GIT_REPOSITORY} STREQUAL + "" +) + string(FIND ${GIT_REPOSITORY} "/" START_NAME REVERSE) + math(EXPR START_NAME "${START_NAME}+1") + string(LENGTH ${GIT_REPOSITORY} STRING_LENGTH) + message( + STATUS "${CMLOC}START_NAME: ${START_NAME}, STRING_LENGTH: ${STRING_LENGTH}" + ) + string(SUBSTRING ${GIT_REPOSITORY} ${START_NAME} ${STRING_LENGTH} + CLOUDSMITH_BASE_REPOSITORY + ) +endif () +message( + STATUS "${CMLOC}CLOUDSMITH_BASE_REPOSITORY: ${CLOUDSMITH_BASE_REPOSITORY}" +) + +# Process files in in-files sub directory into the build output directory, +# thereby allowing building from a read-only source tree. +if (NOT SKIP_VERSION_CONFIG) + if (MINGW) + message( + STATUS "${CMLOC}Temporarily allowing different search path for MINGW" + ) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE_SAVE + ${CMAKE_FIND_ROOT_PATH_MODE_INCLUDE} + ) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) + endif () + set(BUILD_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) + unset(PLUGIN_EXTRA_VERSION_VARS CACHE) + find_file( + PLUGIN_EXTRA_VERSION_VARS + NAMES version.h.extra + PATHS ${CMAKE_CURRENT_LIST_DIR}/in-files + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if (${PLUGIN_EXTRA_VERSION_VARS} STREQUAL + "PLUGIN_EXTRA_VERSION_VARS-NOTFOUND" + ) + message(STATUS "${CMLOC}PLUGIN_EXTRA_VERSION_VARS: Not Found") + set(EXTRA_VERSION_INFO "") + else () + message(STATUS "${CMLOC}PLUGIN_EXTRA_VERSION_VARS: Found") + configure_file( + ${PLUGIN_EXTRA_VERSION_VARS} + ${BUILD_INCLUDE_PATH}/include/version_extra.h + ) + set(EXTRA_VERSION_INFO "#include \"version_extra.h\"") + endif () + find_file( + PLUGIN_EXTRA_FORMBUILDER_HEADERS + NAMES extra_formbuilder_headers.h.in + PATHS ${CMAKE_CURRENT_LIST_DIR}/in-files + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + message( + STATUS + "${CMLOC}PLUGIN_EXTRA_FORMBUILDER_HEADERS: ${PLUGIN_EXTRA_FORMBUILDER_HEADERS}" + ) + if (${PLUGIN_EXTRA_FORMBUILDER_HEADERS} STREQUAL + "PLUGIN_EXTRA_FORMBUILDER_HEADERS-NOTFOUND" + ) + message(STATUS "${CMLOC}PLUGIN_EXTRA_FORMBUILDER_HEADERS: Not found") + else () + message(STATUS "${CMLOC}PLUGIN_EXTRA_FORMBUILDER_HEADERS: Found") + configure_file( + ${PLUGIN_EXTRA_FORMBUILDER_HEADERS} + ${BUILD_INCLUDE_PATH}/include/extra_formbuilder_headers.h + ) + endif () + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/in-files/version.h.in + ${BUILD_INCLUDE_PATH}/include/version.h + ) + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/in-files/wxWTranslateCatalog.h.in + ${BUILD_INCLUDE_PATH}/include/wxWTranslateCatalog.h + ) + include_directories(${BUILD_INCLUDE_PATH}/include) + if (MINGW) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE + ${CMAKE_FIND_ROOT_PATH_MODE_INCLUDE_SAVE} + ) + endif () +endif (NOT SKIP_VERSION_CONFIG) + +# configure xml file for circleci +message(STATUS "${CMLOC}ENV BUILD_GTK2: $ENV{BUILD_GTK2}") +string(TOUPPER "$ENV{BUILD_GTK2}" BUILD_GTK2_TEMP) +set(ENV{BUILD_GTK2} ${BUILD_GTK2_TEMP}) +unset(BUILD_GTK2_TEMP) + +message(STATUS "${CMLOC}ENV BUILD_GTK3: $ENV{BUILD_GTK3}") +string(TOUPPER "$ENV{BUILD_GTK3}" BUILD_GTK3_TEMP) +set(ENV{BUILD_GTK3} ${BUILD_GTK3_TEMP}) +unset(BUILD_GTK3_TEMP) +string(TOUPPER "$ENV{BUILD_ENV}" BUILD_ENV_TEMP) +message( + STATUS + "${CMLOC}BUILD_ENV: $ENV{BUILD_ENV}, BUILD_ENV_TEMP ${BUILD_ENV_TEMP}, OCPN_TARGET: $ENV{OCPN_TARGET}" +) +message(STATUS "${CMLOC}Doing build_gtk3: $ENV{BUILD_GTK3}") +if ("$ENV{BUILD_GTK3}" STREQUAL "TRUE" + AND (("${BUILD_ENV_TEMP}" STREQUAL "UBUNTU" AND NOT "$ENV{OCPN_TARGET}" + STREQUAL "jammy") + OR "$ENV{OCPN_TARGET}" STREQUAL "buster-armhf") +) + set(PKG_TARGET_GTK "gtk3") + message(STATUS "${CMLOC}Found gtk3") +else () + unset(PKG_TARGET_GTK) +endif () +message(STATUS "${CMLOC}PKG_TARGET_GTK: ${PKG_TARGET_GTK}") + +if (UNIX AND NOT APPLE) + # Handle gtk3 build variant + string(STRIP "${PKG_TARGET}" PKG_TARGET) + string(TOLOWER "${PKG_TARGET}" PKG_TARGET) + + # Generate architecturally uniques names for linux output packages + if (ARCH MATCHES "aarch64") + set(PKG_TARGET_ARCH "-aarch64") + elseif (ARCH MATCHES "arm64") + set(PKG_TARGET_ARCH "-arm64") + elseif (ARCH MATCHES "armhf") + set(PKG_TARGET_ARCH "-armhf") + elseif (ARCH MATCHES "i386") + set(PKG_TARGET_ARCH "-i386") + elseif (ARCH MATCHES "amd64") + set(PKG_TARGET_ARCH "-amd64") + else () + set(PKG_TARGET_ARCH "-x86_64") + endif () +else () + if (MINGW) + set(PKG_TARGET_ARCH "-x86_64") + else (MINGW) + set(PKG_TARGET_ARCH "") + endif (MINGW) endif () +message(STATUS "${CMLOC}ARCH: ${ARCH}") -# IF NOT DEBUGGING CFLAGS="-O2 -march=native" -IF(NOT MSVC) - ADD_DEFINITIONS( "-fvisibility=hidden" ) - IF(PROFILING) - ADD_DEFINITIONS( "-Wall -g -fprofile-arcs -ftest-coverage -fexceptions -fPIC" ) - ELSE(PROFILING) -# ADD_DEFINITIONS( "-Wall -g -fexceptions" ) - ADD_DEFINITIONS( "-Wall -Wno-unused-result -g -fexceptions -fPIC" ) - ENDIF(PROFILING) - - IF(NOT APPLE) - SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic") - ELSE(NOT APPLE) - SET(CMAKE_SHARED_LINKER_FLAGS "-Wl -undefined dynamic_lookup") - ENDIF(NOT APPLE) - -ENDIF(NOT MSVC) - -# Add some definitions to satisfy MS -IF(MSVC) - ADD_DEFINITIONS(-D__MSVC__) - ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE) -ENDIF(MSVC) - -IF(NOT DEFINED wxWidgets_USE_FILE) - SET(wxWidgets_USE_LIBS base core net xml html adv) -ENDIF(NOT DEFINED wxWidgets_USE_FILE) - - -# QT_ANDROID is a cross-build, so the native FIND_PACKAGE(wxWidgets...) and wxWidgets_USE_FILE is not useful. -# We add the dependencies manually. -IF(QT_ANDROID) - ADD_DEFINITIONS(-D__WXQT__) - ADD_DEFINITIONS(-D__OCPN__ANDROID__) - ADD_DEFINITIONS(-DOCPN_USE_WRAPPER) - ADD_DEFINITIONS(-DANDROID) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include/android) - - SET(CMAKE_CXX_FLAGS "-pthread -s") - - ## Compiler flags - # if(CMAKE_COMPILER_IS_GNUCXX) - # set(CMAKE_CXX_FLAGS "-O2") ## Optimize - set(CMAKE_EXE_LINKER_FLAGS "-s") ## Strip binary - # endif() - - INCLUDE_DIRECTORIES("${Qt_Base}/${Qt_Build}/include/QtCore") - INCLUDE_DIRECTORIES("${Qt_Base}/${Qt_Build}/include") - INCLUDE_DIRECTORIES("${Qt_Base}/${Qt_Build}/include/QtWidgets") - INCLUDE_DIRECTORIES("${Qt_Base}/${Qt_Build}/include/QtGui") - INCLUDE_DIRECTORIES("${Qt_Base}/${Qt_Build}/include/QtOpenGL") - INCLUDE_DIRECTORIES("${Qt_Base}/${Qt_Build}/include/QtTest") - - INCLUDE_DIRECTORIES( "${wxQt_Base}/${wxQt_Build}/lib/wx/include/arm-linux-androideabi-qt-unicode-static-3.1") - INCLUDE_DIRECTORIES("${wxQt_Base}/include") - - ADD_DEFINITIONS(-DQT_WIDGETS_LIB) - -ENDIF(QT_ANDROID) - - -IF(MSYS) -# this is just a hack. I think the bug is in FindwxWidgets.cmake -STRING( REGEX REPLACE "/usr/local" "\\\\;C:/MinGW/msys/1.0/usr/local" wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}" ) -ENDIF(MSYS) - -# QT_ANDROID is a cross-build, so the native FIND_PACKAGE(OpenGL) is not useful. -# -IF (NOT QT_ANDROID ) - -OPTION(OCPN_USE_SVG "Use SVG graphics" ON) - -IF(OCPN_USE_SVG) - ADD_DEFINITIONS(-DOCPN_USE_SVG) -ENDIF(OCPN_USE_SVG) - - -FIND_PACKAGE(OpenGL) -IF(OPENGL_GLU_FOUND) - - SET(wxWidgets_USE_LIBS ${wxWidgets_USE_LIBS} gl) - INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) - - MESSAGE (STATUS "Found OpenGL..." ) - MESSAGE (STATUS " Lib: " ${OPENGL_LIBRARIES}) - MESSAGE (STATUS " Include: " ${OPENGL_INCLUDE_DIR}) - ADD_DEFINITIONS(-DocpnUSE_GL) -ELSE(OPENGL_GLU_FOUND) - MESSAGE (STATUS "OpenGL not found..." ) -ENDIF(OPENGL_GLU_FOUND) -ENDIF(NOT QT_ANDROID) - -# Building for QT_ANDROID involves a cross-building environment, -# So the OpenGL include directories, flags, etc must be stated explicitly -# without trying to locate them on the host build system. -IF(QT_ANDROID) - SET(CMAKE_VERBOSE_MAKEFILE ON) - ADD_DEFINITIONS(-DocpnUSE_GLES) - ADD_DEFINITIONS(-DocpnUSE_GL) -# ADD_DEFINITIONS(-DUSE_GLU_TESS) - ADD_DEFINITIONS(-DARMHF) - - SET(OPENGLES_FOUND "YES") - SET(OPENGL_FOUND "YES") - - - SET(USE_GLES2 ON ) - - IF(USE_GLES2) - MESSAGE (STATUS "Using GLESv2 for Android") - ADD_DEFINITIONS(-DUSE_ANDROID_GLES2) - ADD_DEFINITIONS(-DocpnUSE_GLES2) - ADD_DEFINITIONS(-DUSE_GLSL) - ENDIF(USE_GLES2) - -ENDIF(QT_ANDROID) - -IF (NOT QT_ANDROID ) - set (WXWIDGETS_FORCE_VERSION CACHE VERSION "Force usage of a specific wxWidgets version.") - if(WXWIDGETS_FORCE_VERSION) - set (wxWidgets_CONFIG_OPTIONS --version=${WXWIDGETS_FORCE_VERSION}) - endif() - FIND_PACKAGE(wxWidgets REQUIRED) - INCLUDE(${wxWidgets_USE_FILE}) -ENDIF (NOT QT_ANDROID ) - -# On Android, PlugIns need a specific linkage set.... -IF (QT_ANDROID ) - # These libraries are needed to create PlugIns on Android. - - SET(OCPN_Core_LIBRARIES - # Presently, Android Plugins are built in the core tree, so the variables {wxQT_BASE}, etc. - # flow to this module from above. If we want to build Android plugins out-of-core, this will need improvement. - - # TODO This is pretty ugly, but there seems no way to avoid specifying a full path in a cross build.... - #/home/dsr/Projects/opencpn/build-opencpn-Production_build_Android_for_armeabi_v7a_GCC_4_8_Qt_5_5_0-Release/libopencpn.so - /home/sean/build-opencpn-Production_Android_for_armeabi_v7a_Core_55_46_GCC_4_8_Qt_5_5_0-Release/libopencpn.so - - ${wxQt_Base}/${wxQt_Build}/lib/libwx_baseu-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_qtu_core-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_qtu_html-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_baseu_xml-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_qtu_qa-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_qtu_adv-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_qtu_aui-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_baseu_net-3.1-arm-linux-androideabi.a - ${wxQt_Base}/${wxQt_Build}/lib/libwx_qtu_gl-3.1-arm-linux-androideabi.a - ${Qt_Base}/${Qt_Build}/lib/libQt5Core.so - ${Qt_Base}/${Qt_Build}/lib/libQt5OpenGL.so - ${Qt_Base}/${Qt_Build}/lib/libQt5Widgets.so - ${Qt_Base}/${Qt_Build}/lib/libQt5Gui.so - ${Qt_Base}/${Qt_Build}/lib/libQt5AndroidExtras.so - libGLESv2.so - libEGL.so - ) - -ENDIF(QT_ANDROID) +if ("${PKG_BUILD_TARGET}" STREQUAL "") + set(PKG_BUILD_TARGET "${PKG_TARGET}") + set(PKG_TARGET_BUILD "-${PKG_BUILD_TARGET}") +endif () +if (NOT WIN32 + AND NOT APPLE + AND NOT QT_ANDROID +) + if(BUILD_GTK2) + find_package(GTK2) + endif() + if (GTK2_FOUND AND NOT "$ENV{BUILD_GTK3}" STREQUAL "TRUE") + set(wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS} --toolkit=gtk2) + include_directories(${GTK2_INCLUDE_DIRS}) + set(GTK_LIBRARIES ${GTK2_LIBRARIES}) + set(PKG_BUILT_WITH_GTK "gtk2") + message(STATUS "${CMLOC}Building against GTK2...") + else (GTK2_FOUND AND NOT "$ENV{BUILD_GTK3}" STREQUAL "TRUE") + find_package(GTK3) + if (GTK3_FOUND) + include_directories(${GTK3_INCLUDE_DIRS}) + set(GTK_LIBRARIES ${GTK3_LIBRARIES}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__WXGTK3__") + set(wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS} --toolkit=gtk3) + set(PKG_BUILT_WITH_GTK "gtk3") + message(STATUS "${CMLOC}Building against GTK3...") + else (GTK3_FOUND) + message(STATUS "${CMLOC} Unix: Neither FATAL_ERROR GTK2 nor GTK3") + set(PKG_BUILT_WITH_GTK "") + endif (GTK3_FOUND) + endif (GTK2_FOUND AND NOT "$ENV{BUILD_GTK3}" STREQUAL "TRUE") + set(EXTRA_LIBS ${EXTRA_LIBS} ${GTK_LIBRARIES}) +else () + set(PKG_BUILT_WITH_GTK "${PKG_TARGET_GTK}") +endif ( + NOT WIN32 + AND NOT APPLE + AND NOT QT_ANDROID +) + +if (NOT "${PKG_TARGET_GTK}" STREQUAL "") + set(PKG_BUILD_GTK "-${PKG_TARGET_GTK}") + set(PKG_TARGET_GTK "-${PKG_TARGET_GTK}") +endif () +message( + STATUS + "${CMLOC}PKG_NVR: ${PKG_NVR}, PKG_TARGET: ${PKG_TARGET}, ARCH: ${ARCH}, PKG_TARGET_WX_VER: ${PKG_TARGET_WX_VER}, PKG_BUILD_GTK: ${PKG_BUILD_GTK}, PKG_TARGET_VERSION: ${PKG_TARGET_VERSION}, OCPN_TARGET: $ENV{OCPN_TARGET}" +) +if (DEFINED ENV{OCPN_TARGET}) + message(STATUS "${CMLOC}OCPN_TARGET defined: $ENV{OCPN_TARGET}") + if (OCPN_FLATPAK_CONFIG + OR OCPN_FLATPAK_BUILD + OR MINGW + OR MSVC + OR (("$ENV{OCPN_TARGET}" STREQUAL "bookworm-armhf" + OR "$ENV{OCPN_TARGET}" STREQUAL "bookworm-arm64") + AND "$ENV{BUILD_ENV}" STREQUAL "debian") + OR (("$ENV{OCPN_TARGET}" STREQUAL "bullseye-armhf" + OR "$ENV{OCPN_TARGET}" STREQUAL "bullseye-arm64") + AND "$ENV{WX_VER}" STREQUAL "32" + AND "$ENV{BUILD_ENV}" STREQUAL "debian" + ) + ) + message(STATUS "${CMLOC}Including $ENV{OCPN_TARGET} $ENV{BUILD_ENV}") + set(PACKAGING_NAME + "${PKG_NVR}-${PKG_TARGET}-${ARCH}${PKG_TARGET_WX_VER}${PKG_BUILD_GTK}-${PKG_TARGET_VERSION}-$ENV{OCPN_TARGET}" + ) + set(PACKAGING_NAME_XML + "${PKG_NVR}-${PKG_TARGET}-${ARCH}${PKG_TARGET_WX_VER}${PKG_BUILD_GTK}-${PKG_TARGET_VERSION}-$ENV{OCPN_TARGET}" + ) + else () + if (APPLE AND CMAKE_OSX_ARCHITECTURES) + set(PACKAGING_NAME + "${PKG_NVR}-${PKG_TARGET}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}-$ENV{OCPN_TARGET}" + ) + set(PACKAGING_NAME_XML + "${PKG_NVR}-${PKG_TARGET}-${COMPOUND_ARCH_DASH}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}-$ENV{OCPN_TARGET}" + ) + else () + set(PACKAGING_NAME + "${PKG_NVR}-${PKG_TARGET}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}-$ENV{OCPN_TARGET}" + ) + set(PACKAGING_NAME_XML + "${PKG_NVR}-${PKG_TARGET}-${ARCH}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}-$ENV{OCPN_TARGET}" + ) + endif () + endif () +else () + if (OCPN_FLATPAK_CONFIG + OR OCPN_FLATPAK_BUILD + OR MINGW + OR MSVC + ) + set(PACKAGING_NAME + "${PKG_NVR}-${PKG_TARGET}-${ARCH}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}" + ) + set(PACKAGING_NAME_XML + "${PKG_NVR}-${PKG_TARGET}-${ARCH}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}" + ) + else ( + OCPN_FLATPAK_CONFIG + OR OCPN_FLATPAK_BUILD + OR MINGW + OR MSVC + ) + set(PACKAGING_NAME + "${PKG_NVR}-${PKG_TARGET}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}" + ) + set(PACKAGING_NAME_XML + "${PKG_NVR}-${PKG_TARGET}-${ARCH}-${PKG_TARGET_VERSION}${PKG_BUILD_GTK}" + ) + endif ( + OCPN_FLATPAK_CONFIG + OR OCPN_FLATPAK_BUILD + OR MINGW + OR MSVC + ) +endif (DEFINED ENV{OCPN_TARGET}) +if (OCPN_FLATPAK_CONFIG) + message(STATUS "${CMLOG}Checking for flatpak extensions") + find_file( + PLUGIN_FLATPAK_ARGS + NAMES flatpak_args.in + PATHS ${CMAKE_CURRENT_LIST_DIR}/in-files + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if (${PLUGIN_FLATPAK_ARGS} STREQUAL "PLUGIN_FLATPAK_ARGS-NOTFOUND") + message(STATUS "${CMLOC}PLUGIN_FLATPAK_ARGS: Not Found") + set(finish_args "") + else () + message(STATUS "${CMLOC}finish_args: Found") + message(STATUS "${CMLOC}PLUGIN_FLATPAK_ARGS: ${PLUGIN_FLATPAK_ARGS}") + file(READ ${PLUGIN_FLATPAK_ARGS} finish_args) + endif () + find_file( + PLUGIN_FLATPAK_OPTIONS + NAMES flatpak_options.in + PATHS ${CMAKE_CURRENT_LIST_DIR}/in-files + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if (${PLUGIN_FLATPAK_OPTIONS} STREQUAL "PLUGIN_FLATPAK_OPTIONS-NOTFOUND") + message(STATUS "${CMLOC}PLUGIN_FLATPAK_OPTIONS: Not Found") + set(build_options "") + else () + message(STATUS "${CMLOC}build_options: Found") + file(READ ${PLUGIN_FLATPAK_OPTIONS} build_options) + endif () + find_file( + PLUGIN_FLATPAK_EXTRA_MODULES + NAMES flatpak_extra_modules.in + PATHS ${CMAKE_CURRENT_LIST_DIR}/in-files + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if (${PLUGIN_FLATPAK_EXTRA_MODULES} STREQUAL + "PLUGIN_FLATPAK_EXTRA_MODULES-NOTFOUND" + ) + message(STATUS "${CMLOC}PLUGIN_FLATPAK_EXTRA_MODULES: Not Found") + set(flatpak_extra_modules "") + else () + message(STATUS "${CMLOC}flatpak_extra_modules: Found") + file(READ ${PLUGIN_FLATPAK_EXTRA_MODULES} flatpak_extra_modules) + endif () +endif () +message(STATUS "${CMLOC}PACKAGING_NAME: ${PACKAGING_NAME}") +message(STATUS "${CMLOC}PACKAGING_NAME_XML: ${PACKAGING_NAME_XML}") + +set(PKG_TARGET_FULL + "${PKG_TARGET}${PKG_TARGET_GTK}${PKG_TARGET_WX_VER}${PKG_TARGET_ARCH}" +) +message(STATUS "${CMLOC}PKG_TARGET_FULL: ${PKG_TARGET_FULL}") +message(STATUS "${CMLOC}PKG_BUILD_TARGET: ${PKG_BUILD_TARGET}") +message(STATUS "${CMLOC}PKG_BUILD_GTK: ${PKG_TARGET_GTK}") +message(STATUS "${CMLOC}PKG_BUILT_WITH_GTK: ${PKG_BUILT_WITH_GTK}") +message(STATUS "${CMLOC}*.in files generated in ${CMAKE_CURRENT_BINARY_DIR}") +configure_file( + ${PROJECT_SOURCE_DIR}/cmake/in-files/plugin.xml.in + ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGING_NAME_XML}.xml +) +configure_file( + ${PROJECT_SOURCE_DIR}/cmake/in-files/pkg_version.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/pkg_version.sh +) +configure_file( + ${PROJECT_SOURCE_DIR}/cmake/in-files/cloudsmith-upload.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/cloudsmith-upload.sh @ONLY +) +configure_file( + ${PROJECT_SOURCE_DIR}/cmake/in-files/PluginCPackOptions.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/PluginCPackOptions.cmake @ONLY +) + +if (OCPN_FLATPAK_CONFIG) + # set(SDK_VER $ENV{SDK_VER}) Hack for temporary "beta" status of 20.08 runtime + # See new substitution variable in + # cmake/in-files/org.opencpn.OpenCPN.Plugin.yaml.in + message(STATUS "${CMLOC}FLATPAK_BRANCH: ${FLATPAK_BRANCH}") + set(RUNTIME_VERSION ${FLATPAK_BRANCH}) + + message( + STATUS + "${CMLOC}Checking OCPN_FLATPAK_CONFIG: ${OCPN_FLATPAK_CONFIG}, SDK_VER: ${SDK_VER}, WX_VER: $ENV{WX_VER}" + ) + configure_file( + ${PROJECT_SOURCE_DIR}/cmake/in-files/org.opencpn.OpenCPN.Plugin.yaml.in + ${CMAKE_CURRENT_BINARY_DIR}/flatpak/org.opencpn.OpenCPN.Plugin.${PACKAGE}.yaml + ) + + message(STATUS "${CMLOC}Done OCPN_FLATPAK CONFIG") + message(STATUS "${CMLOC}Directory used: ${CMAKE_CURRENT_BINARY_DIR}/flatpak") + message(STATUS "${CMLOC}Git Branch: ${GIT_REPOSITORY_BRANCH}") + set(CMLOC ${SAVE_CMLOC}) + return() +endif (OCPN_FLATPAK_CONFIG) + +set(CMAKE_VERBOSE_MAKEFILE ON) + +include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src) + +set(CMAKE_SHARED_LINKER_FLAGS "") +set(CMAKE_EXE_LINKER_FLAGS "") -SET(BUILD_SHARED_LIBS TRUE) +# SET(PROFILING 1) +if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL + "RelWithDebInfo" +) + add_definitions("-DDEBUG_BUILD") + set(CMAKE_INSTALL_DO_STRIP FALSE) + set(CPACK_DEBIAN_DEBUGINFO_PACKAGE YES) + message(STATUS "${CMLOC}DEBUG available") +endif (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL + "RelWithDebInfo" +) + +if (NOT WIN32 AND NOT APPLE) + add_definitions( + "-Wall -Wno-unused -fexceptions -rdynamic -fvisibility=hidden" + ) + add_definitions(" -fno-strict-aliasing") + message(STATUS "${CMLOC}Build type: ${CMAKE_BUILD_TYPE}") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(" -O0 -g") + message(STATUS "${CMLOC}Optimisation: -O0 -g") + elseif (CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions(" -O2 -s") + message(STATUS "${CMLOC}Optimisation: -O2 -s") + elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + add_definitions(" -O2 -g") + message(STATUS "${CMLOC}Optimisation: -O2 -g") + else (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") + add_definitions(" -O2 -s") + message(STATUS "${CMLOC}Optimisation: -O2 -s") + endif (CMAKE_BUILD_TYPE STREQUAL "Debug") + + add_definitions(" -DPREFIX=\\\"${CMAKE_INSTALL_PREFIX}\\\"") + # profiling with gprof ADD_DEFINITIONS( -pg ) SET(CMAKE_EXE_LINKER_FLAGS -pg) + # profiling with gcov ADD_DEFINITIONS( "-fprofile-arcs -ftest-coverage" ) + # SET(EXTRA_LIBS ${EXTRA_LIBS} "gcov") +endif (NOT WIN32 AND NOT APPLE) + +if (MINGW) + add_definitions("-Wall -Wno-unused -Wno-cpp -fexceptions") + add_definitions(" -g -fno-strict-aliasing") + if (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL + "MinSizeRel" + ) + add_link_options(-Wl,--strip-all) + endif (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL + "MinSizeRel" + ) +endif (MINGW) + +if (APPLE) + string(APPEND CMAKE_CXX_FLAGS + " -Wall -Wno-unused -fexceptions -Wno-overloaded-virtual" + ) + string(APPEND CMAKE_CXX_FLAGS " -g -fno-strict-aliasing") + string(APPEND CMAKE_CXX_FLAGS + " -Wno-deprecated -Wno-deprecated-declarations -Wno-unknown-pragmas" + ) + string(APPEND CMAKE_CXX_FLAGS " -D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_") + string(APPEND CMAKE_CXX_FLAGS " -DAPPLE") +endif (APPLE) -FIND_PACKAGE(Gettext REQUIRED) +# Add some definitions to satisfy MS +if (MSVC) + add_definitions(-D__MSVC__) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE) + add_definitions(-D HAVE_SNPRINTF) + message(STATUS "${CMLOC}Set SNPRINTF") +else (MSVC) + if (NOT APPLE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Bsymbolic") + else (NOT APPLE) + set(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -Wl -undefined dynamic_lookup" + ) + endif (NOT APPLE) +endif (MSVC) + +set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) +set(BUILD_SHARED_LIBS TRUE) + +# Allow multiprocess compile +if (MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") +endif (MSVC) + +if (WIN32) + if (MSVC) + set(CMAKE_C_FLAGS_DEBUG "/MP /MDd /Ob0 /Od /D_DEBUG /Zi /RTC1") + set(CMAKE_C_FLAGS_MINSIZEREL "/MP /MD /O1 /Ob1 /D NDEBUG") + set(CMAKE_C_FLAGS_RELEASE "/MP /MD /O2 /Ob2 /D NDEBUG /Zi") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "/MP /MD /O2 /Ob1 /D NDEBUG /Zi") + set(CMAKE_CXX_FLAGS_DEBUG "/MP /MDd /Ob0 /Od /D_DEBUG /Zi /RTC1 /EHa") + set(CMAKE_CXX_FLAGS_MINSIZEREL "/MP /MD /O1 /Ob1 /D NDEBUG /EHa") + set(CMAKE_CXX_FLAGS_RELEASE "/MP /MD /O2 /Ob2 /D NDEBUG /Zi /EHa") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MP /MD /O2 /Ob1 /D NDEBUG /Zi /EHa") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") + endif (MSVC) +endif (WIN32) + +set(wxWidgets_USE_LIBS + base + core + net + xml + html + adv + aui +) + +# Search for opengles, short of running a program to test the speed of +# acceleration, I simply use gles on "native linux" arm systems +if (ARCH MATCHES "arm*" + AND (NOT QT_ANDROID) + AND USE_GL MATCHES "ON" +) + find_path(OPENGLESv1_INCLUDE_DIR GLES/gl.h) + if (OPENGLESv1_INCLUDE_DIR) + message(STATUS "${CMLOC}Found OpenGLESv1") + add_definitions(-DocpnUSE_GLES) + add_definitions(-DocpnUSE_GL) + + set(OPENGLES_FOUND "YES") + set(OPENGL_FOUND "YES") + + set(wxWidgets_USE_LIBS ${wxWidgets_USE_LIBS} gl) + + set(OPENGL_LIBRARIES "GL_static" "EGL" "X11" "drm") + endif () +endif () +if (DEFINED _wx_selected_config) + message(STATUS "${CMLOC}_wx_select_config defined as $ENV{_wx_select_config}") + if (_wx_selected_config MATCHES "androideabi-qt") + message(STATUS "${CMLOC}Qt_Base: " ${Qt_Base}) + message(STATUS "${CMLOC}wxQt_Base/Build: " ${wxQt_Base} "/" ${wxQt_Build}) + add_definitions(-DocpnUSE_GLES) + add_definitions(-DocpnUSE_GL) + add_definitions(-DARMHF) + + set(OPENGLES_FOUND "YES") + set(OPENGL_FOUND "YES") + + add_definitions(-DUSE_GLU_TESS) + set(USE_GLES2 ON) + message(STATUS "${CMLOC}Using GLESv2 for Android") + add_definitions(-DUSE_ANDROID_GLES2) + add_definitions(-DUSE_GLSL) + + endif (_wx_selected_config MATCHES "androideabi-qt") +endif (DEFINED _wx_selected_config) + +# Building for QT_ANDROID involves a cross-building environment, So the include +# directories, flags, etc must be stated explicitly without trying to locate +# them on the host build system. +if (QT_ANDROID) + message(STATUS "${CMLOC}Processing QT_ANDROID") + add_definitions(-D__WXQT__) + add_definitions(-D__OCPN__ANDROID__) + add_definitions(-DOCPN_USE_WRAPPER) + add_definitions(-DANDROID) + + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-soname,libgorp.so ") + + # set(CMAKE_POSITION_INDEPENDENT_CODE ON) + set(CMAKE_CXX_FLAGS "-pthread -fPIC ") + + # Compiler flags + add_compile_options( + "-Wno-inconsistent-missing-override" + "-Wno-potentially-evaluated-expression" "-Wno-overloaded-virtual" + "-Wno-unused-command-line-argument" "-Wno-unknown-pragmas" + ) + + message(STATUS "${CMLOC}Adding libgorp.o shared library") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-soname,libgorp.so ") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") # Strip binary + + set(QT_LINUX "OFF") + set(QT "ON") + set(CMAKE_SKIP_BUILD_RPATH TRUE) + add_definitions(-DQT_WIDGETS_LIB) + if ("$ENV{OCPN_TARGET}" STREQUAL "android-arm64") + message(STATUS "${CMLOC}Adding definition -DARM64") + add_definitions(-DARM64) + else () + message(STATUS "${CMLOC}Adding definition -DARMHF") + add_definitions(-DARMHF) + endif () + +endif (QT_ANDROID) + +if ((NOT OPENGLES_FOUND) AND (NOT QT_ANDROID)) + + if (USE_GL MATCHES "ON") + message(STATUS "${CMLOC}Finding package OpenGL") + find_package(OpenGL) + else (USE_GL MATCHES "ON") + message(STATUS "${CMLOC}OpenGL disabled by option...") + endif (USE_GL MATCHES "ON") + + if (OPENGL_FOUND) + + set(wxWidgets_USE_LIBS ${wxWidgets_USE_LIBS} gl) + include_directories(${OPENGL_INCLUDE_DIR}) + + message(STATUS "${CMLOC}Found OpenGL...") + message(STATUS "${CMLOC} Lib: " ${OPENGL_LIBRARIES}) + message(STATUS "${CMLOC} Include: " ${OPENGL_INCLUDE_DIR}) + add_definitions(-DocpnUSE_GL) + + # We need to remove GLU from the OPENGL_LIBRARIES list + foreach (_currentLibFile ${OPENGL_LIBRARIES}) + set(UCNAME ${_currentLibFile}) + string(TOUPPER ${UCNAME} UCNAME) + if (NOT ${UCNAME} MATCHES "(.*)GLU(.*)") + set(REVISED_OPENGL_LIBRARIES ${_currentLibFile} + ${REVISED_OPENGL_LIBRARIES} + ) + endif () + endforeach (_currentLibFile) -IF(NOT WIN32) - IF(NOT APPLE) - SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic") - ADD_DEFINITIONS( "-rdynamic" ) - ELSE(NOT APPLE) - SET(CMAKE_SHARED_LINKER_FLAGS "-Wl -undefined dynamic_lookup") - ADD_DEFINITIONS( "-Wno-overloaded-virtual" ) - ENDIF(NOT APPLE) + set(OPENGL_LIBRARIES ${REVISED_OPENGL_LIBRARIES}) + message(STATUS "${CMLOC} Revised GL Lib: " ${OPENGL_LIBRARIES}) -ENDIF(NOT WIN32) + else () + message(STATUS "${CMLOC}OpenGL not found...") + endif () +endif () +if (NOT QT_ANDROID) + # Find wxWidgets here, and the setting get inherited by all plugins. These + # options can be used to set the linux widgets build type + set(wxWidgets_USE_DEBUG OFF) + set(wxWidgets_USE_UNICODE ON) + set(wxWidgets_USE_UNIVERSAL OFF) + set(wxWidgets_USE_STATIC OFF) + + set(WXWIDGETS_FORCE_VERSION + CACHE STRING "Force usage of a specific wxWidgets version." + ) + if (NOT "$ENV{WX_VER}" STREQUAL "") + string(LENGTH $ENV{WX_VER} WX_VER_LEN) + string(SUBSTRING $ENV{WX_VER} 0 1 MAJOR) + string(SUBSTRING $ENV{WX_VER} 1 1 MINOR) + string(CONCAT WXWIDGETS_FORCE_VERSION ${MAJOR} "." ${MINOR}) + if (${WX_VER_LEN} EQUAL 3) + string(SUBSTRING $ENV{WX_VER} 2 1 PATCH) + # string(CONCAT WXWIDGETS_FORCE_VERSION ${WXWIDGETS_FORCE_VERSION} "." + # ${PATCH}) + endif () + endif () + message(STATUS "${CMLOC}wxWidgets_Version: ${WXWIDGETS_FORCE_VERSION}") + + if (WXWIDGETS_FORCE_VERSION) + set(wxWidgets_CONFIG_OPTIONS --version=${WXWIDGETS_FORCE_VERSION}) + endif () + + message(STATUS "${CMLOC}wxWidgets components: ${wxWidgets_USE_LIBS}") + find_package(wxWidgets REQUIRED COMPONENTS ${wxWidgets_USE_LIBS}) + + if (MSVC) + # Exclude wxexpat.lib, since we use our own version. Other things are + # excluded as well, but we don't need them + set(wxWidgets_EXCLUDE_COMMON_LIBRARIES TRUE) + endif (MSVC) + + if (WIN32 + OR APPLE + OR QT_ANDROID + ) + if (MSYS) + # this is to convert msys to windows paths, and handle the missing /usr + string(REGEX REPLACE "/usr/local" ";C:/MinGW/msys/1.0/local" + wxWidgets_INCLUDE_DIRS ${wxWidgets_INCLUDE_DIRS} + ) + endif (MSYS) + endif ( + WIN32 + OR APPLE + OR QT_ANDROID + ) + + include(${wxWidgets_USE_FILE}) + + message(STATUS "${CMLOC}Found wxWidgets...") + message(STATUS "${CMLOC} wxWidgets Include: ${wxWidgets_INCLUDE_DIRS}") + message(STATUS "${CMLOC} wxWidgets Libraries: ${wxWidgets_LIBRARIES}") + + # We need to remove GLU from the wxWidgets_LIBRARIES list It only appears to + # get on the list for MSW... + foreach (_currentLibFile ${wxWidgets_LIBRARIES}) + set(UCNAME ${_currentLibFile}) + string(TOUPPER ${UCNAME} UCNAME) + if (NOT ${UCNAME} MATCHES "(.*)GLU(.*)") + set(REVISED_wxWidgets_LIBRARIES ${REVISED_wxWidgets_LIBRARIES} + ${_currentLibFile} + ) + endif () + endforeach (_currentLibFile) + set(wxWidgets_LIBRARIES ${REVISED_wxWidgets_LIBRARIES}) + + message(STATUS "${CMLOC} Revised wxWidgets Libraries: ${wxWidgets_LIBRARIES}") +else (NOT QT_ANDROID) + if (_wx_selected_config MATCHES "androideabi-qt-arm64") + message(STATUS "${CMLOC}Processing androideabi-qt-arm64 includes") + + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/include" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/include/QtCore" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/include/QtWidgets" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/include/QtGui" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/include/QtOpenGL" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/include/QtTest" + ) + + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/wxWidgets/libarm64/wx/include/arm-linux-androideabi-qt-unicode-static-3.1" + ) + set(qt_android_include ${qt_android_include} + "${OCPN_Android_Common}/wxWidgets/include" + ) + + set(wxWidgets_LIBRARIES + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/lib/libQt5Core.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/lib/libQt5OpenGL.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/lib/libQt5Widgets.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/lib/libQt5Gui.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm64_O3/qtbase/lib/libQt5AndroidExtras.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/opencpn/API-117/libarm64/libgorp.so + -lc++_shared + -lz + libGLESv2.so + libEGL.so + ) + + else (_wx_selected_config MATCHES "androideabi-qt-arm64") + message(STATUS "${CMLOC}Processing androideabi-qt-armhf includes") + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/include" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/include/QtCore" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/include/QtWidgets" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/include/QtGui" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/include/QtOpenGL" + ) + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/include/QtTest" + ) + + set(qt_android_include + ${qt_android_include} + "${OCPN_Android_Common}/wxWidgets/libarmhf/wx/include/arm-linux-androideabi-qt-unicode-static-3.1" + ) + set(qt_android_include ${qt_android_include} + "${OCPN_Android_Common}/wxWidgets/include" + ) + + add_definitions(-DOCPN_ARMHF) + + set(wxWidgets_LIBRARIES + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/lib/libQt5Core.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/lib/libQt5OpenGL.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/lib/libQt5Widgets.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/lib/libQt5Gui.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/qt5/build_arm32_19_O3/qtbase/lib/libQt5AndroidExtras.so + ${CMAKE_CURRENT_SOURCE_DIR}/${OCPN_Android_Common}/opencpn/API-117/libarmhf/libgorp.so + -lc++_shared + -lz + libGLESv2.so + libEGL.so + ) -# Add some definitions to satisfy MS -IF(WIN32) - ADD_DEFINITIONS(-D__MSVC__) - ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE) -ENDIF(WIN32) + endif (_wx_selected_config MATCHES "androideabi-qt-arm64") -# Let cmake find additional modules private -LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) + # Needed for android builds + include_directories(BEFORE ${qt_android_include}) +endif (NOT QT_ANDROID) -ADD_DEFINITIONS(-DTIXML_USE_STL) +find_package(Gettext REQUIRED) +set(CMLOC ${SAVE_CMLOC}) diff --git a/cmake/PluginInstall.cmake b/cmake/PluginInstall.cmake index 2e7a4e0..b22152e 100644 --- a/cmake/PluginInstall.cmake +++ b/cmake/PluginInstall.cmake @@ -1,83 +1,216 @@ -##--------------------------------------------------------------------------- -## Author: Pavel Kalian (Based on the work of Sean D'Epagnier) -## Copyright: 2014 -## License: GPLv3+ -##--------------------------------------------------------------------------- - -IF(NOT APPLE) - TARGET_LINK_LIBRARIES( ${PACKAGE_NAME} ${wxWidgets_LIBRARIES} ${EXTRA_LIBS} ) -ENDIF(NOT APPLE) - -IF(WIN32) - SET(PARENT "opencpn") - - IF(MSVC) -# TARGET_LINK_LIBRARIES(${PACKAGE_NAME} -# gdiplus.lib -# glu32.lib) - TARGET_LINK_LIBRARIES(${PACKAGE_NAME} ${OPENGL_LIBRARIES}) - - SET(OPENCPN_IMPORT_LIB "${PARENT}.lib") - ENDIF(MSVC) - - IF(MINGW) -# assuming wxwidgets is compiled with unicode, this is needed for mingw headers - ADD_DEFINITIONS( " -DUNICODE" ) - TARGET_LINK_LIBRARIES(${PACKAGE_NAME} ${OPENGL_LIBRARIES}) - SET(OPENCPN_IMPORT_LIB "${PARENT}.dll") - SET( CMAKE_SHARED_LINKER_FLAGS "-L../buildwin" ) - ENDIF(MINGW) - - TARGET_LINK_LIBRARIES( ${PACKAGE_NAME} ${OPENCPN_IMPORT_LIB} ) -ENDIF(WIN32) - -IF(UNIX) - IF(PROFILING) - find_library(GCOV_LIBRARY - NAMES - gcov - PATHS - /usr/lib/gcc/i686-pc-linux-gnu/4.7 +# --------------------------------------------------------------------------- +# Author: Pavel Kalian (Based on the work of Sean D'Epagnier) Copyright: +# 2014 License: GPLv3+ +# --------------------------------------------------------------------------- + +set(SAVE_CMLOC ${CMLOC}) +set(CMLOC "PluginInstall: ") + +if (OCPN_FLATPAK_CONFIG) + return() +endif (OCPN_FLATPAK_CONFIG) + +if (NOT APPLE) + target_link_libraries(${PACKAGE_NAME} ${wxWidgets_LIBRARIES} ${EXTRA_LIBS}) +endif (NOT APPLE) + +if (WIN32) + if (MSVC) + # TARGET_LINK_LIBRARIES(${PACKAGE_NAME} gdiplus.lib glu32.lib) + target_link_libraries(${PACKAGE_NAME} ${OPENGL_LIBRARIES}) + # add_subdirectory(libs/ocpn-api) target_link_libraries(${PACKAGE_NAME} + # ocpn::api) message(STATUS "${CMLOC}Added ocpn-api for MSVC") + endif (MSVC) + + if (MINGW) + # assuming wxwidgets is compiled with unicode, this is needed for mingw + # headers + add_definitions(" -DUNICODE") + target_link_libraries(${PACKAGE_NAME} ${OPENGL_LIBRARIES}) + set(CMAKE_SHARED_LINKER_FLAGS "-L../buildwin") + # add_subdirectory(libs/ocpn-api) target_link_libraries(${PACKAGE_NAME} + # ocpn::api) message(STATUS "${CMLOC}Added ocpn-api for MINGW") + endif (MINGW) +endif (WIN32) + +if (UNIX) + if (PROFILING) + find_library( + GCOV_LIBRARY + NAMES gcov + PATHS /usr/lib/gcc/i686-pc-linux-gnu/4.7 + ) + + set(EXTRA_LIBS ${EXTRA_LIBS} ${GCOV_LIBRARY}) + endif (PROFILING) +endif (UNIX) + +if (UNIX + AND NOT APPLE + AND NOT QT_ANDROID +) + find_package(BZip2 REQUIRED) + include_directories(${BZIP2_INCLUDE_DIR}) + find_package(ZLIB REQUIRED) + include_directories(${ZLIB_INCLUDE_DIR}) + target_link_libraries(${PACKAGE_NAME} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARY}) +endif ( + UNIX + AND NOT APPLE + AND NOT QT_ANDROID +) + +set(PARENT opencpn) + +if (APPLE) + install( + TARGETS ${PACKAGE_NAME} + RUNTIME + LIBRARY DESTINATION OpenCPN.app/Contents/PlugIns + ) + if (EXISTS ${PROJECT_SOURCE_DIR}/data) + install( + DIRECTORY data + DESTINATION OpenCPN.app/Contents/SharedSupport/plugins/${PACKAGE_NAME} + ) + endif () + + if (EXISTS ${PROJECT_SOURCE_DIR}/UserIcons) + install( + DIRECTORY UserIcons + DESTINATION OpenCPN.app/Contents/SharedSupport/plugins/${PACKAGE_NAME} + ) + endif () + + find_package(ZLIB REQUIRED) + target_link_libraries(${PACKAGE_NAME} ${ZLIB_LIBRARIES}) + +endif (APPLE) + +# Based on code from nohal +if (NOT CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX ${TENTATIVE_PREFIX}) +endif (NOT CMAKE_INSTALL_PREFIX) + +message(STATUS "${CMLOC}*** Will install to ${CMAKE_INSTALL_PREFIX} ***") +set(PREFIX_DATA share) +set(PREFIX_PKGDATA ${PREFIX_DATA}/${PACKAGE_NAME}) +# set(PREFIX_LIB "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}") +set(PREFIX_LIB lib) + +if (WIN32) + message(STATUS "${CMLOC}Install Prefix: ${CMAKE_INSTALL_PREFIX}") + set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/../OpenCPN) + if (CMAKE_CROSSCOMPILING) + install(TARGETS ${PACKAGE_NAME} RUNTIME DESTINATION "plugins") + set(INSTALL_DIRECTORY "plugins/${PACKAGE_NAME}") + else (CMAKE_CROSSCOMPILING) + install(TARGETS ${PACKAGE_NAME} RUNTIME DESTINATION "plugins") + set(INSTALL_DIRECTORY "plugins\\\\${PACKAGE_NAME}") + endif (CMAKE_CROSSCOMPILING) + + if (EXISTS ${PROJECT_SOURCE_DIR}/UserIcons) + install(DIRECTORY UserIcons DESTINATION "${INSTALL_DIRECTORY}") + message(STATUS "${CMLOC}Install UserIcons: ${INSTALL_DIRECTORY}") + endif (EXISTS ${PROJECT_SOURCE_DIR}/UserIcons) + + if (EXISTS ${PROJECT_SOURCE_DIR}/data) + install(DIRECTORY data DESTINATION "${INSTALL_DIRECTORY}") + message(STATUS "${CMLOC}Install Data: ${INSTALL_DIRECTORY}") + endif (EXISTS ${PROJECT_SOURCE_DIR}/data) + + # fix for missing dll's FILE(GLOB gtkdll_files + # "${CMAKE_CURRENT_SOURCE_DIR}/buildwin/gtk/*.dll") INSTALL(FILES + # ${gtkdll_files} DESTINATION ".") FILE(GLOB expatdll_files + # "${CMAKE_CURRENT_SOURCE_DIR}/buildwin/expat-2.1.0/*.dll") INSTALL(FILES + # ${expatdll_files} DESTINATION ".") + +endif (WIN32) + +if (UNIX AND NOT APPLE) + set(PREFIX_PARENTDATA ${PREFIX_DATA}/${PARENT}) + set(PREFIX_PARENTLIB ${PREFIX_LIB}/${PARENT}) + message(STATUS "${CMLOC}PREFIX_PARENTLIB: ${PREFIX_PARENTLIB}") + message(STATUS "${CMLOC}Library") + install(TARGETS ${PACKAGE_NAME} LIBRARY DESTINATION ${PREFIX_PARENTLIB}) + + if (EXISTS ${PROJECT_SOURCE_DIR}/data) + install(DIRECTORY data + DESTINATION ${PREFIX_PARENTDATA}/plugins/${PACKAGE_NAME} + ) + message( + STATUS + "${CMLOC}Install data: ${PREFIX_PARENTDATA}/plugins/${PACKAGE_NAME}" + ) + endif () + if (EXISTS ${PROJECT_SOURCE_DIR}/UserIcons) + install(DIRECTORY UserIcons + DESTINATION ${PREFIX_PARENTDATA}/plugins/${PACKAGE_NAME} + ) + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${PROJECT_SOURCE_DIR}/script/postinst" + ) + set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE + "${PROJECT_SOURCE_DIR}/script/postinst" + ) + message( + STATUS + "${CMLOC}Install UserIcons: ${PREFIX_PARENTDATA}/plugins/${PACKAGE_NAME}" ) + endif () +endif (UNIX AND NOT APPLE) + +if (APPLE) + message(STATUS "${CMLOC}Install Prefix: ${CMAKE_INSTALL_PREFIX}") + + # For Apple build, we need to copy the "data" directory contents to the build + # directory, so that the packager can pick them up. + if (NOT EXISTS "${PROJECT_BINARY_DIR}/data/") + file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/data/") + message("Generating data directory") + endif () + + file( + GLOB_RECURSE PACKAGE_DATA_FILES + LIST_DIRECTORIES true + ${PROJECT_SOURCE_DIR}/data/* + ) + + foreach (_currentDataFile ${PACKAGE_DATA_FILES}) + message(STATUS "${CMLOC}copying: ${_currentDataFile}") + file(COPY ${_currentDataFile} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data) + endforeach (_currentDataFile) + + if (EXISTS ${PROJECT_SOURCE_DIR}/UserIcons) + file( + GLOB_RECURSE PACKAGE_DATA_FILES + LIST_DIRECTORIES true + ${PROJECT_SOURCE_DIR}/UserIcons/* + ) + + foreach (_currentDataFile ${PACKAGE_DATA_FILES}) + message(STATUS "${CMLOC}copying: ${_currentDataFile}") + file(COPY ${_currentDataFile} + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/UserIcons + ) + endforeach (_currentDataFile) + endif () + + # On macos, fix paths which points to the build environment, make sure they + # refers to runtime locations + message(STATUS "${CMLOC}copying: Adjusting MacOS library paths") + install(CODE "execute_process( + COMMAND bash ${PROJECT_SOURCE_DIR}/cmake/fix-macos-libs.sh + )" + ) + + install( + TARGETS ${PACKAGE_NAME} + RUNTIME + LIBRARY DESTINATION OpenCPN.app/Contents/PlugIns + ) + message(STATUS "${CMLOC}Install Target: OpenCPN.app/Contents/PlugIns") + +endif (APPLE) - SET(EXTRA_LIBS ${EXTRA_LIBS} ${GCOV_LIBRARY}) - ENDIF(PROFILING) -ENDIF(UNIX) - -IF(APPLE) - INSTALL(TARGETS ${PACKAGE_NAME} RUNTIME LIBRARY DESTINATION ${CMAKE_BINARY_DIR}/OpenCPN.app/Contents/SharedSupport/plugins) - FIND_PACKAGE(ZLIB REQUIRED) - TARGET_LINK_LIBRARIES( ${PACKAGE_NAME} ${ZLIB_LIBRARIES} ) - INSTALL(TARGETS ${PACKAGE_NAME} RUNTIME LIBRARY DESTINATION ${CMAKE_BINARY_DIR}/OpenCPN.app/Contents/PlugIns) -ENDIF(APPLE) - -SET(PARENT opencpn) - -SET(PREFIX_DATA share) -SET(PREFIX_LIB lib) - -IF(WIN32) - MESSAGE (STATUS "Install Prefix: ${CMAKE_INSTALL_PREFIX}") - SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/../OpenCPN) - IF(CMAKE_CROSSCOMPILING) - INSTALL(TARGETS ${PACKAGE_NAME} RUNTIME DESTINATION "plugins") - SET(INSTALL_DIRECTORY "plugins/${PACKAGE_NAME}") - ELSE(CMAKE_CROSSCOMPILING) - INSTALL(TARGETS ${PACKAGE_NAME} RUNTIME DESTINATION "plugins") - SET(INSTALL_DIRECTORY "plugins\\\\${PACKAGE_NAME}") - ENDIF(CMAKE_CROSSCOMPILING) - - IF(EXISTS ${PROJECT_SOURCE_DIR}/data) - INSTALL(DIRECTORY data DESTINATION "${INSTALL_DIRECTORY}") - ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/data) -ENDIF(WIN32) - -IF(UNIX AND NOT APPLE) - SET(PREFIX_PARENTDATA ${PREFIX_DATA}/${PARENT}) - SET(PREFIX_PARENTLIB ${PREFIX_LIB}/${PARENT}) - INSTALL(TARGETS ${PACKAGE_NAME} RUNTIME LIBRARY DESTINATION ${PREFIX_PARENTLIB}) - - IF(EXISTS ${PROJECT_SOURCE_DIR}/data) - INSTALL(DIRECTORY data DESTINATION ${PREFIX_PARENTDATA}/plugins/${PACKAGE_NAME}) - ENDIF() -ENDIF(UNIX AND NOT APPLE) +set(CMLOC ${SAVE_CMLOC}) diff --git a/cmake/PluginLocalization.cmake b/cmake/PluginLocalization.cmake index 061c6ff..b83cba6 100644 --- a/cmake/PluginLocalization.cmake +++ b/cmake/PluginLocalization.cmake @@ -1,78 +1,159 @@ -##--------------------------------------------------------------------------- -## Author: Pavel Kalian / Sean D'Epagnier -## Copyright: -## License: GPLv3+ -##--------------------------------------------------------------------------- +# --------------------------------------------------------------------------- +# Author: Pavel Kalian / Sean D'Epagnier Copyright: License: GPLv3+ +# --------------------------------------------------------------------------- -FIND_PROGRAM(GETTEXT_XGETTEXT_EXECUTABLE xgettext) +set(SAVE_CMLOC ${CMLOC}) +set(CMLOC "PluginLocalization: ") + +if (OCPN_FLATPAK_CONFIG) + set(CMLOC ${SAVE_CMLOC}) + return() +endif (OCPN_FLATPAK_CONFIG) + +message(STATUS "${CMLOC}Starting POTFILE generation") + +set(POTFILE ${CMAKE_CURRENT_SOURCE_DIR}/po/POTFILES.in) +file(REMOVE ${POTFILE}.test) +file(WRITE ${POTFILE}.test "") +message( + STATUS + "${CMLOC}Checking file: ${CMAKE_CURRENT_SOURCE_DIR}/po/${PACKAGE_NAME}.pot" +) +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/po/${PACKAGE_NAME}.pot) + message( + STATUS "${CMLOC}Found: ${CMAKE_CURRENT_SOURCE_DIR}/po/${PACKAGE_NAME}.pot" + ) +else () + file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/po/${PACKAGE_NAME}.pot "") + message( + STATUS + "${CMLOC}Creating empty ${CMAKE_CURRENT_SOURCE_DIR}/po/${PACKAGE_NAME}.pot" + ) +endif () +foreach (POTLINE IN ITEMS ${SRCS}) + file(APPEND ${POTFILE}.test "${POTLINE}\n") +endforeach (POTLINE) +foreach (POTLINE IN ITEMS ${HDRS}) + file(APPEND ${POTFILE}.test "${POTLINE}\n") +endforeach (POTLINE) +# convert crlf to lf for consistency and make copy_if_different work correctly +configure_file(${POTFILE}.test ${POTFILE}.test NEWLINE_STYLE UNIX) +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${POTFILE}.test ${POTFILE} + OUTPUT_QUIET ERROR_QUIET +) + +find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext) string(REPLACE "_pi" "" I18N_NAME ${PACKAGE_NAME}) -IF (GETTEXT_XGETTEXT_EXECUTABLE) - ADD_CUSTOM_COMMAND( +if (GETTEXT_XGETTEXT_EXECUTABLE) + add_custom_command( OUTPUT po/${PACKAGE_NAME}.pot.dummy - COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} --force-po --package-name=${PACKAGE_NAME} --package-version="${PACKAGE_VERSION}" --output=po/${PACKAGE_NAME}.pot --keyword=_ --width=80 --files-from=${CMAKE_CURRENT_SOURCE_DIR}/po/POTFILES.in + COMMAND + ${GETTEXT_XGETTEXT_EXECUTABLE} --force-po -F + --package-name=${PACKAGE_NAME} --package-version="${PACKAGE_VERSION}" + --output=po/${PACKAGE_NAME}.pot --keyword=_ --width=80 + --files-from=${CMAKE_CURRENT_SOURCE_DIR}/po/POTFILES.in DEPENDS po/POTFILES.in po/${PACKAGE_NAME}.pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "${I18N_NAME}-pot-update [${PACKAGE_NAME}]: Generated pot file." - ) - ADD_CUSTOM_TARGET(${I18N_NAME}-pot-update COMMENT "[${PACKAGE_NAME}]-pot-update: Done." DEPENDS po/${PACKAGE_NAME}.pot.dummy) + ) + add_custom_target( + ${I18N_NAME}-pot-update + COMMENT "[${PACKAGE_NAME}]-pot-update: Done." + DEPENDS po/${PACKAGE_NAME}.pot.dummy + ) -ENDIF(GETTEXT_XGETTEXT_EXECUTABLE ) +endif (GETTEXT_XGETTEXT_EXECUTABLE) -MACRO(GETTEXT_UPDATE_PO _potFile) - SET(_poFiles ${_potFile}) - GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) +macro (GETTEXT_UPDATE_PO _potFile) + set(_poFiles ${_potFile}) + get_filename_component(_absPotFile ${_potFile} ABSOLUTE) - FOREACH (_currentPoFile ${ARGN}) - GET_FILENAME_COMPONENT(_absFile ${_currentPoFile} ABSOLUTE) - GET_FILENAME_COMPONENT(_poBasename ${_absFile} NAME_WE) + foreach (_currentPoFile ${ARGN}) + get_filename_component(_absFile ${_currentPoFile} ABSOLUTE) + get_filename_component(_poBasename ${_absFile} NAME_WE) - ADD_CUSTOM_COMMAND( + add_custom_command( OUTPUT ${_absFile}.dummy - COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --width=80 --strict --quiet --update --backup=none --no-location -s ${_absFile} ${_absPotFile} + COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --width=80 --strict --quiet + --update --backup=none --no-location -s ${_absFile} ${_absPotFile} DEPENDS ${_absPotFile} ${_absFile} COMMENT "${I18N_NAME}-po-update [${_poBasename}]: Updated po file." - ) + ) - SET(_poFiles ${_poFiles} ${_absFile}.dummy) + set(_poFiles ${_poFiles} ${_absFile}.dummy) - ENDFOREACH (_currentPoFile ) + endforeach (_currentPoFile) - ADD_CUSTOM_TARGET(${I18N_NAME}-po-update COMMENT "[${PACKAGE_NAME}]-po-update: Done." DEPENDS ${_poFiles}) -ENDMACRO(GETTEXT_UPDATE_PO) + add_custom_target( + ${I18N_NAME}-po-update + COMMENT "[${PACKAGE_NAME}]-po-update: Done." + DEPENDS ${_poFiles} + ) +endmacro (GETTEXT_UPDATE_PO) -IF (GETTEXT_MSGMERGE_EXECUTABLE) - FILE(GLOB PACKAGE_PO_FILES po/*.po) - GETTEXT_UPDATE_PO(po/${PACKAGE_NAME}.pot ${PACKAGE_PO_FILES}) -ENDIF(GETTEXT_MSGMERGE_EXECUTABLE) +if (GETTEXT_MSGMERGE_EXECUTABLE) + file(GLOB PACKAGE_PO_FILES po/*.po) + gettext_update_po(po/${PACKAGE_NAME}.pot ${PACKAGE_PO_FILES}) +endif (GETTEXT_MSGMERGE_EXECUTABLE) -SET(_gmoFiles) -MACRO(GETTEXT_BUILD_MO) - FOREACH (_poFile ${ARGN}) - GET_FILENAME_COMPONENT(_absFile ${_poFile} ABSOLUTE) - GET_FILENAME_COMPONENT(_poBasename ${_absFile} NAME_WE) - SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_poBasename}.mo) +set(_gmoFiles) +macro (GETTEXT_BUILD_MO) + file(MAKE_DIRECTORY "Resources") + message(STATUS "${CMLOC}Creating Resources directory") + add_custom_target( + create_resources_dir ALL COMMAND ${CMAKE_COMMAND} -E make_directory + "./Resources" + ) + foreach (_poFile ${ARGN}) + get_filename_component(_absFile ${_poFile} ABSOLUTE) + get_filename_component(_poBasename ${_absFile} NAME_WE) + set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_poBasename}.mo) - ADD_CUSTOM_COMMAND( + add_custom_command( OUTPUT ${_gmoFile} COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_absFile} - COMMAND ${CMAKE_COMMAND} -E copy ${_gmoFile} "Resources/${_poBasename}.lproj/opencpn-${PACKAGE_NAME}.mo" + COMMAND ${CMAKE_COMMAND} -E copy ${_gmoFile} + "Resources/${_poBasename}.lproj/opencpn-${PACKAGE_NAME}.mo" DEPENDS ${_absFile} COMMENT "${I18N_NAME}-i18n [${_poBasename}]: Created mo file." + ) + + if (APPLE) + install( + FILES ${_gmoFile} + DESTINATION OpenCPN.app/Contents/Resources/${_poBasename}.lproj + RENAME opencpn-${PACKAGE_NAME}.mo + ) + message( + STATUS + "${CMLOC}Install language files to: OpenCPN.app/Contents/Resources/${_poBasename}.lproj renamed to: opencpn-${PACKAGE_NAME}.mo" + ) + else (APPLE) + install( + FILES ${_gmoFile} + DESTINATION ${PREFIX_DATA}/locale/${_poBasename}/LC_MESSAGES + RENAME opencpn-${PACKAGE_NAME}.mo ) + message( + STATUS + "${CMLOC}Install language files to: ${PREFIX_DATA}/locale/${_poBasename}/LC_MESSAGES renamed to: opencpn-${PACKAGE_NAME}.mo" + ) + endif (APPLE) + + set(_gmoFiles ${_gmoFiles} ${_gmoFile}) + endforeach (_poFile) +endmacro (GETTEXT_BUILD_MO) + +if (GETTEXT_MSGFMT_EXECUTABLE) + file(GLOB PACKAGE_PO_FILES po/*.po) + gettext_build_mo(${PACKAGE_PO_FILES}) + add_custom_target( + ${I18N_NAME}-i18n + COMMENT "${PACKAGE_NAME}-i18n: Done." + DEPENDS ${_gmoFiles} + ) + add_dependencies(${PACKAGE_NAME} ${I18N_NAME}-i18n) +endif (GETTEXT_MSGFMT_EXECUTABLE) - IF(APPLE) - INSTALL(FILES ${_gmoFile} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Resources/${_poBasename}.lproj RENAME opencpn-${PACKAGE_NAME}.mo ) - ELSE(APPLE) - INSTALL(FILES ${_gmoFile} DESTINATION ${PREFIX_DATA}/locale/${_poBasename}/LC_MESSAGES RENAME opencpn-${PACKAGE_NAME}.mo ) - ENDIF(APPLE) - - SET(_gmoFiles ${_gmoFiles} ${_gmoFile}) - ENDFOREACH (_poFile ) -ENDMACRO(GETTEXT_BUILD_MO) - -if(GETTEXT_MSGFMT_EXECUTABLE) - FILE(GLOB PACKAGE_PO_FILES po/*.po) - GETTEXT_BUILD_MO(${PACKAGE_PO_FILES}) - ADD_CUSTOM_TARGET(${I18N_NAME}-i18n COMMENT "${PACKAGE_NAME}-i18n: Done." DEPENDS ${_gmoFiles}) - ADD_DEPENDENCIES(${PACKAGE_NAME} ${I18N_NAME}-i18n) -ENDIF(GETTEXT_MSGFMT_EXECUTABLE) +set(CMLOC ${SAVE_CMLOC}) diff --git a/cmake/PluginPackage.cmake b/cmake/PluginPackage.cmake index 612c41b..6a5eaf8 100644 --- a/cmake/PluginPackage.cmake +++ b/cmake/PluginPackage.cmake @@ -1,183 +1,231 @@ -##--------------------------------------------------------------------------- -## Author: Pavel Kalian (Based on the work of Sean D'Epagnier) -## Copyright: 2014 -## License: GPLv3+ -##--------------------------------------------------------------------------- - -# build a CPack driven installer package -#include (InstallRequiredSystemLibraries) - -SET(CPACK_PACKAGE_NAME "${PACKAGE_NAME}") -SET(CPACK_PACKAGE_VENDOR "opencpn.org") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${CPACK_PACKAGE_NAME} ${PACKAGE_VERSION}) -SET(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION}) -SET(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) -SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) -SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) -SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_CURRENT_BINARY_DIR};${PACKAGE_NAME};ALL;/") -SET(CPACK_PACKAGE_EXECUTABLES OpenCPN ${PACKAGE_NAME}) - -IF(WIN32) -# to protect against confusable windows users, let us _not_ generate zip packages -# SET(CPACK_GENERATOR "NSIS;ZIP") +# --------------------------------------------------------------------------- +# Author: Pavel Kalian (Based on the work of Sean D'Epagnier) Copyright: +# 2014 License: GPLv3+ +# --------------------------------------------------------------------------- + +set(SAVE_CMLOC ${CMLOC}) +set(CMLOC "PluginPackage: ") + +# build a FLATPAK installer package +message(STATUS "${CMLOC}Package: OCPN_FLATPAK_CONFIG: ${OCPN_FLATPAK_CONFIG}") + +if (OCPN_FLATPAK_CONFIG) + # On a flatpak build lib libraries such as LibGL and wxWidgets are only + # available in the flatpak sandbox. Thus, building flatpak must be done before + # attempts to locate these non-existing libraries in the host i. e., before + # any FindLibrary(), FindWxWidgets(), etc. + find_program(TAR NAMES gtar tar) + if (NOT TAR) + message(FATAL_ERROR "${CMLOC}tar not found, required for OCPN_FLATPAK") + endif () + add_custom_target( + flatpak-build ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/flatpak + COMMAND + cat + ${CMAKE_CURRENT_BINARY_DIR}/flatpak/org.opencpn.OpenCPN.Plugin.${PACKAGE}.yaml + COMMAND + /usr/bin/flatpak-builder --force-clean -v ${CMAKE_CURRENT_BINARY_DIR}/app + ${CMAKE_CURRENT_BINARY_DIR}/flatpak/org.opencpn.OpenCPN.Plugin.${PACKAGE}.yaml + ) + add_custom_target("flatpak-pkg") + add_custom_command( + TARGET flatpak-pkg + COMMAND + ${TAR} -czf + ${PKG_NVR}-${ARCH}${PKG_TARGET_WX_VER}_${PKG_TARGET_NVR}.tar.gz --verbose + --transform 's|.*/files/|${PACKAGE}-flatpak-${PACKAGE_VERSION}/|' + ${CMAKE_CURRENT_BINARY_DIR}/app/files + COMMAND chmod -R a+wr ../build + ) + + message( + STATUS + "${CMLOC}Zip file name: ${PKG_NVR}-${ARCH}${PKG_TARGET_WX_VER}_${PKG_TARGET_NVR}.tar.gz" + ) + set(CMLOC ${SAVE_CMLOC}) + return() +endif (OCPN_FLATPAK_CONFIG) + +# build a CPack driven installer package SET(CPACK_PACKAGE_NAME +# "${PACKAGE_NAME}") +set(CPACK_PACKAGE_CONTACT ${PACKAGE_CONTACT}) +set(CPACK_PACKAGE_VENDOR "opencpn.org") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${CPACK_PACKAGE_NAME} ${PACKAGE_VERSION}) +set(CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}-${OCPN_MIN_VERSION}") +set(CPACK_INSTALL_CMAKE_PROJECTS + "${CMAKE_CURRENT_BINARY_DIR};${PACKAGE_NAME};ALL;/" +) +message(STATUS "${CMLOC}CPACK_PACKAGE_NAME: ${CPACK_PACKAGE_NAME}") - # override install directory to put package files in the opencpn directory - SET(CPACK_PACKAGE_INSTALL_DIRECTORY "OpenCPN") +if (WIN32) + # The TGZ (tar.gz) is used by experimental plugin manager, + set(CPACK_GENERATOR "NSIS;TGZ") -# CPACK_NSIS_DIR ?? -# CPACK_BUILDWIN_DIR ?? -# CPACK_PACKAGE_ICON ?? + # override install directory to put package files in the opencpn directory + set(CPACK_PACKAGE_INSTALL_DIRECTORY "OpenCPN") - SET(CPACK_NSIS_PACKAGE_NAME "${PACKAGE_NAME}") + set(CPACK_NSIS_PACKAGE_NAME "${PACKAGE_NAME}") # Let cmake find NSIS.template.in - SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/buildwin") - -# These lines set the name of the Windows Start Menu shortcut and the icon that goes with it -# SET(CPACK_NSIS_INSTALLED_ICON_NAME "${PACKAGE_NAME}") -SET(CPACK_NSIS_DISPLAY_NAME "OpenCPN ${PACKAGE_NAME}") - -# SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${VERSION_MAJOR}.${VERSION_MINOR}_setup" ) - - SET(CPACK_NSIS_DIR "${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode") #Gunther - SET(CPACK_BUILDWIN_DIR "${PROJECT_SOURCE_DIR}/buildwin") #Gunther - -ELSE(WIN32) - SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${PACKAGE_NAME}) -ENDIF(WIN32) - -SET(CPACK_STRIP_FILES "${PACKAGE_NAME}") - -SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/gpl.txt") - -IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README") -# MESSAGE(STATUS "Using generic cpack package description file.") - SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") - SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README") -ENDIF () - -#SET(CPACK_SOURCE_GENERATOR "TGZ") - -# The following components are regex's to match anywhere (unless anchored) -# in absolute path + filename to find files or directories to be excluded -# from source tarball. + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/buildwin") + + # These lines set the name of the Windows Start Menu shortcut and the icon + # that goes with it + set(CPACK_NSIS_DISPLAY_NAME "OpenCPN ${PACKAGE_NAME}") + + set(CPACK_PACKAGE_FILE_NAME + "${PACKAGE_FILE_NAME}_${CPACK_PACKAGE_VERSION}-${OCPN_MIN_VERSION}_win32" + ) + message(STATUS "${CMLOC}CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}") + + set(CPACK_NSIS_DIR "${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode") # Gunther + set(CPACK_BUILDWIN_DIR "${PROJECT_SOURCE_DIR}/buildwin") # Gunther + + message(STATUS "${CMLOC}FILE: ${CPACK_PACKAGE_FILE_NAME}") +else (WIN32) + set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PACKAGE_NAME}) +endif (WIN32) + +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CPACK_STRIP_FILES FALSE) + message(STATUS "${CMLOC}Not stripping debug information from module") +else (CMAKE_BUILD_TYPE STREQUAL "DEBUG") + set(CPACK_STRIP_FILES TRUE) + message(STATUS "${CMLOC}Stripping debug information from module") +endif (CMAKE_BUILD_TYPE STREQUAL "Debug") + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/gpl.txt") + +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README") + message(STATUS "${CMLOC}Using generic cpack package description file.") + set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") + set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README") +endif () + +# SET(CPACK_SOURCE_GENERATOR "TGZ") + +# The following components are regex's to match anywhere (unless anchored) in +# absolute path + filename to find files or directories to be excluded from +# source tarball. set(CPACK_SOURCE_IGNORE_FILES -"^${CMAKE_CURRENT_SOURCE_DIR}/.git/*" -"^${CMAKE_CURRENT_SOURCE_DIR}/build*" -"^${CPACK_PACKAGE_INSTALL_DIRECTORY}/*" + "^${CMAKE_CURRENT_SOURCE_DIR}/.git/*" "^${CMAKE_CURRENT_SOURCE_DIR}/build*" + "^${CPACK_PACKAGE_INSTALL_DIRECTORY}/*" ) -IF(UNIX AND NOT APPLE) -# INCLUDE(UseRPMTools) -# IF(RPMTools_FOUND) -# RPMTools_ADD_RPM_TARGETS(packagename ${PROJECT_SOURCE_DIR}/package.spec) -# ENDIF(RPMTools_FOUND) - -# need apt-get install rpm, for rpmbuild - SET(PACKAGE_DEPS "opencpn") - SET(PACKAGE_RELEASE 1) - - - IF (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") - SET (ARCH "armhf") - # don't bother with rpm on armhf - SET(CPACK_GENERATOR "DEB;RPM;TBZ2") - ELSE () - SET(CPACK_GENERATOR "DEB;RPM;TBZ2") - - IF (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET (ARCH "amd64") - SET(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64") - ELSE (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET (ARCH "i386") - # note: in a chroot must use "setarch i686 make package" - SET(CPACK_RPM_PACKAGE_ARCHITECTURE "i686") - ENDIF (CMAKE_SIZEOF_VOID_P MATCHES "8") - ENDIF () - - SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${PACKAGE_DEPS}) - SET(CPACK_DEBIAN_PACKAGE_RECOMMENDS ${PACKAGE_RECS}) - SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCH}) - SET(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") - SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") - SET(CPACK_DEBIAN_COMPRESSION_TYPE "xz") # requires my patches to cmake - - SET(CPACK_RPM_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") - SET(CPACK_RPM_PACKAGE_REQUIRES ${PACKAGE_DEPS}) -# SET(CPACK_RPM_PACKAGE_GROUP "Applications/Engineering") - SET(CPACK_RPM_PACKAGE_LICENSE "gplv3+") - - SET(CPACK_RPM_COMPRESSION_TYPE "xz") -# SET(CPACK_RPM_USER_BINARY_SPECFILE "${PROJECT_SOURCE_DIR}/opencpn.spec.in") - - SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE_NAME} PlugIn for OpenCPN") - SET(CPACK_PACKAGE_DESCRIPTION "${PACKAGE_NAME} PlugIn for OpenCPN") -# SET(CPACK_SET_DESTDIR ON) - SET(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - - - SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${PACKAGE_VERSION}-${PACKAGE_RELEASE}_${ARCH}" ) -ENDIF(UNIX AND NOT APPLE) - -IF(TWIN32 AND NOT UNIX) -# configure_file(${PROJECT_SOURCE_DIR}/src/opencpn.rc.in ${PROJECT_SOURCE_DIR}/src/opencpn.rc) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_GERMAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_GERMAN.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_FRENCH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_FRENCH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_CZECH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_CZECH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_DANISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_DANISH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_SPANISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_SPANISH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_ITALIAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_ITALIAN.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_DUTCH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_DUTCH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_POLISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_POLISH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_PORTUGUESEBR.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_PORTUGUESEBR.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_PORTUGUESE.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_PORTUGUESE.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_RUSSIAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_RUSSIAN.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_SWEDISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_SWEDISH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_FINNISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_FINNISH.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_NORWEGIAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_NORWEGIAN.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_CHINESETW.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_CHINESETW.nsh" @ONLY) - configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_TURKISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_TURKISH.nsh" @ONLY) -ENDIF(TWIN32 AND NOT UNIX) - - -# this dummy target is necessary to make sure the ADDITIONAL_MAKE_CLEAN_FILES directive is executed. -# apparently, the base CMakeLists.txt file must have "some" target to activate all the clean steps. -#ADD_CUSTOM_TARGET(dummy COMMENT "dummy: Done." DEPENDS ${PACKAGE_NAME}) - - -INCLUDE(CPack) - - -IF(APPLE) - - # Copy a bunch of files so the Packages installer builder can find them - # relative to ${CMAKE_CURRENT_BINARY_DIR} - # This avoids absolute paths in the chartdldr_pi.pkgproj file - -configure_file(${PROJECT_SOURCE_DIR}/cmake/gpl.txt - ${CMAKE_CURRENT_BINARY_DIR}/license.txt COPYONLY) - -configure_file(${PROJECT_SOURCE_DIR}/buildosx/InstallOSX/pkg_background.jpg - ${CMAKE_CURRENT_BINARY_DIR}/pkg_background.jpg COPYONLY) - - # Patch the pkgproj.in file to make the output package name conform to Xxx-Plugin_x.x.pkg format - # Key is: - # NAME - # ${VERBOSE_NAME}-Plugin_${VERSION_MAJOR}.${VERSION_MINOR} - - configure_file(${PROJECT_SOURCE_DIR}/buildosx/InstallOSX/${PACKAGE_NAME}.pkgproj.in - ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}.pkgproj) - - ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}-Plugin.pkg - COMMAND /usr/local/bin/packagesbuild -F ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}.pkgproj - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${PACKAGE_NAME} - COMMENT "create-pkg [${PACKAGE_NAME}]: Generating pkg file." -) - - ADD_CUSTOM_TARGET(create-pkg COMMENT "create-pkg: Done." - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}-Plugin.pkg ) - - -ENDIF(APPLE) +if (UNIX AND NOT APPLE) + + # need apt-get install rpm, for rpmbuild + set(PACKAGE_DEPS "${PACKAGE_DEPS},opencpn, bzip2, gzip") + message(STATUS "${CMLOC}PACKAGE_DEPS: ${PACKAGE_DEPS}") + if (NOT QT_ANDROID) + set(CPACK_GENERATOR "DEB;TGZ") + else () + set(CPACK_GENERATOR "TGZ") + endif () + + set(CPACK_DEBIAN_PACKAGE_NAME ${PACKAGING_NAME}) + set(CPACK_DEBIAN_PACKAGE_DEPENDS ${PACKAGE_DEPS}) + set(CPACK_DEBIAN_PACKAGE_RECOMMENDS ${PACKAGE_RECS}) + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCH}) + set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") + set(CPACK_DEBIAN_PACKAGE_SECTION "misc") + set(CPACK_DEBIAN_COMPRESSION_TYPE "xz") # requires my patches to cmake + set(CPACK_CMAKE_GENERATOR Ninja) + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE_NAME} PlugIn for OpenCPN") + set(CPACK_PACKAGE_DESCRIPTION "${PACKAGE_NAME} PlugIn for OpenCPN") + set(CPACK_SET_DESTDIR ON) + +endif (UNIX AND NOT APPLE) + +if (NOT STANDALONE MATCHES "BUNDLED") + # MacOS .pkg installer is deprecated in OCPN 5.6.2+ if(APPLE) + if (FALSE) + message(STATUS "${CMLOC}*** Staging to build PlugIn OSX Package ***") + + # Copy a bunch of files so the Packages installer builder can find them + # relative to ${CMAKE_CURRENT_BINARY_DIR} This avoids absolute paths in the + # chartdldr_pi.pkgproj file + + configure_file( + ${PROJECT_SOURCE_DIR}/cmake/gpl.txt + ${CMAKE_CURRENT_BINARY_DIR}/license.txt COPYONLY + ) + + configure_file( + ${PROJECT_SOURCE_DIR}/buildosx/InstallOSX/pkg_background.jpg + ${CMAKE_CURRENT_BINARY_DIR}/pkg_background.jpg COPYONLY + ) + + # Patch the pkgproj.in file to make the output package name conform to + # Xxx-Plugin_x.x.pkg format Key is: NAME + # ${VERBOSE_NAME}-Plugin_${VERSION_MAJOR}.${VERSION_MINOR} + + configure_file( + ${PROJECT_SOURCE_DIR}/buildosx/InstallOSX/plugin.pkgproj.in + ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}.pkgproj + ) + + add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}-Plugin_${PACKAGE_VERSION}_${OCPN_MIN_VERSION}.pkg + COMMAND /usr/local/bin/packagesbuild -F ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}.pkgproj + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${PACKAGE_NAME} + COMMENT "create-pkg [${PACKAGE_NAME}]: Generating pkg file." + ) + + add_custom_target( + create-pkg + COMMENT "create-pkg: Done." + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}-Plugin_${PACKAGE_VERSION}_${OCPN_MIN_VERSION}.pkg + ) + + endif (FALSE) + + set(CPACK_GENERATOR "TGZ") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE_NAME} PlugIn for OpenCPN") + set(CPACK_PACKAGE_DESCRIPTION "${PACKAGE_NAME} PlugIn for OpenCPN") + set(CPACK_PACKAGE_FILE_NAME "${PACKAGING_NAME_XML}") + message(STATUS "${CMLOC}CPACK_PACKAGE_FILE_NAME: ${CPACK_PACKAGE_FILE_NAME}") + + if (WIN32) + set(CPACK_SET_DESTDIR OFF) + message(STATUS "${CMLOC}FILE: ${CPACK_PACKAGE_FILE_NAME}") + add_custom_command( + OUTPUT ${CPACK_PACKAGE_FILE_NAME} + COMMAND + signtool sign /v /f \\cert\\OpenCPNSPC.pfx /d http://www.opencpn.org /t + http://timestamp.verisign.com/scripts/timstamp.dll + ${CPACK_PACKAGE_FILE_NAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${PACKAGE_NAME} + COMMENT "Code-Signing: ${CPACK_PACKAGE_FILE_NAME}" + ) + add_custom_target( + codesign + COMMENT "code signing: Done." + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME} + ) + endif (WIN32) + + message( + STATUS + "${CMLOC}CPACK_PACKAGE_VERSION: ${CPACK_PACKAGE_VERSION}, PACKAGE_VERSION ${PACKAGE_VERSION}, CPACK_PACKAGE_FILE_NAME: ${CPACK_PACKAGE_FILE_NAME}" + ) + + set(CPACK_PROJECT_CONFIG_FILE + "${CMAKE_CURRENT_BINARY_DIR}/PluginCPackOptions.cmake" + ) + message( + STATUS + "${CMLOC}PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}, CPACK_PROJECT_CONFIG_FILE: ${CPACK_PROJECT_CONFIG_FILE}" + ) + + include(CPack) + +endif (NOT STANDALONE MATCHES "BUNDLED") + +set(CMLOC ${SAVE_CMLOC}) diff --git a/cmake/PluginSetup.cmake b/cmake/PluginSetup.cmake new file mode 100644 index 0000000..ac808e7 --- /dev/null +++ b/cmake/PluginSetup.cmake @@ -0,0 +1,440 @@ +# --------------------------------------------------------------------------- +# Author: Jon Gough based on the work of Pavel Kalian (Based on the work of +# Sean D'Epagnier) Copyright: 2020 License: GPLv3+ +# --------------------------------------------------------------------------- + +set(SAVE_CMLOC ${CMLOC}) +set(CMLOC "PluginSetup: ") + +# Make sure cmake sub directory files can be found by cmake +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + +if (NOT DEFINED GIT_REPOSITORY_SERVER) + set(GIT_REPOSITORY_SERVER "github.com") + message( + STATUS + "${CMLOC}GIT_REPOSITORY_SERVER not found setting to: ${GIT_REPOSITORY_SERVER}" + ) +endif () + +# Export variables used in plugin setup: GIT_HASH, GIT_COMMIT, PKG_TARGET, +# PKG_TARGET_VERSION and PKG_NVR +if (NOT ${PACKAGE} MATCHES "(.*)_pi") + set(PACKAGE_NAME ${PACKAGE}_pi) + set(PACKAGE_FILE_NAME "${PACKAGE}_pi") +else (NOT ${PACKAGE} MATCHES "(.*)_pi") + set(PACKAGE_NAME ${PACKAGE}) + set(PACKAGE_FILE_NAME "${PACKAGE}") +endif (NOT ${PACKAGE} MATCHES "(.*)_pi") +string(TOUPPER "${PACKAGE}" TITLE_NAME) + +# add library for use later +add_library(${PACKAGE_NAME} SHARED) + +project( + ${PACKAGE} + VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK} +) +message(STATUS "${CMLOC}PROJECT_VERSION: ${PROJECT_VERSION}") + +set(PACKAGE_VERSION + "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}" +) + +message( + STATUS + "${CMLOC}${VERBOSE_NAME} Version: ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}" +) +message(STATUS "${CMLOC}OPCN_FLATPAK: ${OCPN_FLATPAK}") + +set(PKG_NVR ${PACKAGE_NAME}-${PROJECT_VERSION}) +set(PKG_URL + "https://dl.cloudsmith.io/public/--pkg_repo--/raw/names/--name--/versions/--version--/--filename--" +) + +# check to make sure we have a git repository +execute_process( + COMMAND git status $>/dev/null + RESULT_VARIABLE GIT_REPOSITORY_EXISTS + OUTPUT_QUIET ERROR_QUIET +) +if ("${GIT_REPOSITORY_EXISTS}" STREQUAL "0") + execute_process( + COMMAND git log -1 --format=%h + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND git log -1 --format=%ci + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else () + set(GIT_HASH "") + set(GIT_COMMIT_DATE "") +endif () + +message( + STATUS + "${CMLOC}OCPN_FLATPAK_CONFIG: ${OCPN_FLATPAK_CONFIG}, OCPN_FLATPAK_BUILD: ${OCPN_FLATPAK_BUILD}, UNIX: ${UNIX}" +) +unset(PKG_TARGET_WX_VER) +if (OCPN_FLATPAK_CONFIG OR OCPN_FLATPAK_BUILD) + set(PKG_TARGET "flatpak") + set(PKG_TARGET_VERSION "${SDK_VER}") # As of flatpak/*yaml + message(STATUS "${CMLOC}PKG_TARGET_VERSION: ${PKG_TARGET_VERSION}") + if (NOT "$ENV{WX_VER}" STREQUAL "") + set(PKG_TARGET_WX_VER "-$ENV{WX_VER}") + else () + unset(PKG_TARGET_WX_VER) + endif () + message(STATUS "${CMLOC}PKG_TARGET_WX_VER: ${PKG_TARGET_WX_VER}") +elseif (MINGW) + set(PKG_TARGET "mingw") + if (CMAKE_SYSTEM_VERSION) + set(PKG_TARGET_VERSION ${CMAKE_SYSTEM_VERSION}) + else () + set(PKG_TARGET_VERSION 10) + endif () +elseif (MSVC) + set(PKG_TARGET "msvc") + message(STATUS "${CMLOC}WX_VER: $ENV{WX_VER}") + if (NOT "$ENV{WX_VER}" STREQUAL "31") + # if( NOT "$ENV{WX_VER}" STREQUAL "" ) + set(PKG_TARGET_WX_VER "-wx$ENV{WX_VER}") + else () + unset(PKG_TARGET_WX_VER) + endif () + message( + STATUS + "${CMLOC}PKG_TARGET_WX_VER: ${PKG_TARGET_WX_VER}, WX_VER: $ENV{WX_VER}" + ) + if (CMAKE_SYSTEM_VERSION) + set(PKG_TARGET_VERSION ${CMAKE_SYSTEM_VERSION}) + elseif (CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION) + set(PKG_TARGET_VERSION ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}) + else () + set(PKG_TARGET_VERSION 10) + endif () +elseif (APPLE) + set(PKG_BUILD_TARGET "darwin") + if (NOT "$ENV{WX_VER}" STREQUAL "") + set(PKG_TARGET "darwin-wx$ENV{WX_VER}") + else () + set(PKG_TARGET "${PKG_BUILD_TARGET}") + endif () + execute_process( + COMMAND "sw_vers" "-productVersion" OUTPUT_VARIABLE PKG_TARGET_VERSION + ) +elseif (_wx_selected_config MATCHES "androideabi-qt-arm64") + set(PKG_TARGET "Android") + set(PKG_TARGET_VERSION 16) + set(QT_ANDROID ON) +elseif (_wx_selected_config MATCHES "androideabi-qt-armhf") + set(PKG_TARGET "Android") + set(PKG_TARGET_VERSION 16) + set(QT_ANDROID ON) +elseif (UNIX) + # Some linux dist: + execute_process( + COMMAND "lsb_release" "-rs" OUTPUT_VARIABLE PKG_TARGET_VERSION + ) + if ("$ENV{BUILD_ENV}" STREQUAL "debian" OR "$ENV{BUILD_ENV}" STREQUAL + "DEBIAN" + ) + set(PKG_TARGET "$ENV{BUILD_ENV}") + if ("${PKG_TARGET_VERSION}" STRLESS "12") + if (NOT "$ENV{WX_VER}" STREQUAL "") + set(PKG_TARGET_WX_VER "-wx$ENV{WX_VER}") + endif () + endif () + message( + STATUS + "${CMLOC}PKG_TARGET_WX_VER: ${PKG_TARGET_WX_VER}, WX_VER: $ENV{WX_VER}" + ) + elseif ( + ("$ENV{BUILD_ENV}" STREQUAL "ubuntu" OR "$ENV{BUILD_ENV}" STREQUAL "UBUNTU") + AND (("$ENV{OCPN_TARGET}" STREQUAL "jammy" OR "$ENV{OCPN_TARGET}" STREQUAL + "JAMMY")) + ) + set(PKG_TARGET "ubuntu") + if (NOT "$ENV{WX_VER}" STREQUAL "") + set(PKG_TARGET_WX_VER "-wx$ENV{WX_VER}") + endif () + message( + STATUS + "${CMLOC}PKG_TARGET_WX_VER: ${PKG_TARGET_WX_VER}, WX_VER: $ENV{WX_VER}" + ) + else () + execute_process(COMMAND "lsb_release" "-is" OUTPUT_VARIABLE PKG_TARGET) + endif () +else () + set(PKG_TARGET "unknown") + set(PKG_TARGET_VERSION 1) +endif () + +if (${BUILD_GTK3}) + message(STATUS "${CMLOC}set CMAKE defined BUILD_GTK3: ${BUILD_GTK3}") + set(ENV{BUILD_GTK3} ${BUILD_GTK3}) +endif () + +if (NOT WIN32 AND NOT QT_ANDROID) + # default + set(ARCH "i386") + if (UNIX AND NOT APPLE) + + message(STATUS "${CMLOC}*** Will install to ${CMAKE_INSTALL_PREFIX} ***") + + if (EXISTS /etc/debian_version) + message(STATUS "${CMLOC}*** Debian detected ***") + set(PACKAGE_FORMAT "DEB") + set(PACKAGE_DEPS + "libc6, libwxgtk3.0-0, wx-i18n, libglu1-mesa (>= 7.0.0), libgl1-mesa-glx (>= 7.0.0), zlib1g, bzip2, libportaudio2" + ) + set(PACKAGE_RECS "xcalib,xdg-utils") + set(LIB_INSTALL_DIR "lib") + if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + if (CMAKE_SIZEOF_VOID_P MATCHES "8") + if ("$ENV{OCPN_TARGET}" MATCHES "flatpak") + message(STATUS "${CMLOC}*** Flatpak detected ***") + if ("$ENV{BUILD_ARCH}" MATCHES "aarch64") + set(ARCH "aarch64") + else ("$ENV{BUILD_ARCH}" MATCHES "aarch64") + set (ARCH "x86_64") + endif ("$ENV{BUILD_ARCH}" MATCHES "aarch64") + else ("$ENV{OCPN_TARGET}" MATCHES "flatpak") + set(ARCH "arm64") + endif ("$ENV{OCPN_TARGET}" MATCHES "flatpak") + add_definitions(-DOCPN_ARM64) + else (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "armhf") + add_definitions(-DOCPN_ARMHF) + endif (CMAKE_SIZEOF_VOID_P MATCHES "8") + else (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + if (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "x86_64") + else (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "i386") + endif (CMAKE_SIZEOF_VOID_P MATCHES "8") + endif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + endif (EXISTS /etc/debian_version) + if (NOT DEFINED PACKAGE_FORMAT) + if ("$ENV{OCPN_TARGET}" MATCHES "flatpak") + message(STATUS "*** Flatpak detected ***") + message(STATUS "** BUILD_ARCH: $ENV{BUILD_ARCH}") + set(PACKAGE_FORMAT "TGZ") + if ("$ENV{BUILD_ARCH}" MATCHES "aarch64") + set(ARCH "aarch64") + else ("$ENV{BUILD_ARCH}" MATCHES "aarch64") + set (ARCH "x86_64") + endif ("$ENV{BUILD_ARCH}" MATCHES "aarch64") + set(LIB_INSTALL_DIR "lib") + endif ("$ENV{OCPN_TARGET}" MATCHES "flatpak") + endif (NOT DEFINED PACKAGE_FORMAT) + + if (NOT DEFINED PACKAGE_FORMAT) + if (EXISTS /etc/redhat-release) + message(STATUS "${CMLOC}*** Redhat detected ***") + set(PACKAGE_FORMAT "RPM") + set(PACKAGE_DEPS "opencpn") + + if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + if (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "aarch64") + add_definitions(-DOCPN_ARM64) + else (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "armhf") + add_definitions(-DOCPN_ARMHF) + endif (CMAKE_SIZEOF_VOID_P MATCHES "8") + else (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + if (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "x86_64") + set(LIB_INSTALL_DIR "lib64") + else (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "i386") + set(LIB_INSTALL_DIR "lib") + endif (CMAKE_SIZEOF_VOID_P MATCHES "8") + endif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + + endif (EXISTS /etc/redhat-release) + endif (NOT DEFINED PACKAGE_FORMAT) + + if (NOT DEFINED PACKAGE_FORMAT) + if (EXISTS /etc/os-release + OR EXISTS /etc/sysconfig/SuSEfirewall2.d + OR EXISTS /etc/suse-release + OR EXISTS /etc/SuSE-release + ) + message(STATUS "${CMLOC}*** OpenSUSE detected ***") + set(PACKAGE_FORMAT "RPM") + set(PACKAGE_DEPS "opencpn") + if (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "x86_64") + set(LIB_INSTALL_DIR "lib64") + else (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH "i386") + set(LIB_INSTALL_DIR "lib") + endif (CMAKE_SIZEOF_VOID_P MATCHES "8") + endif ( + EXISTS /etc/os-release + OR EXISTS /etc/sysconfig/SuSEfirewall2.d + OR EXISTS /etc/suse-release + OR EXISTS /etc/SuSE-release + ) + endif (NOT DEFINED PACKAGE_FORMAT) + + endif (UNIX AND NOT APPLE) + + if (APPLE) + set(ARCH "x86_64") + endif (APPLE) + +else (NOT WIN32 AND NOT QT_ANDROID) + set(ARCH "x86_64") + if (MSVC) + string(TOLOWER "${CMAKE_VS_PLATFORM_NAME}" platform_name) + if (platform_name MATCHES "x64") + set(ARCH "x86_64") + elseif (platform_name MATCHES "arm64") + set(ARCH "arm64") + else () + set(ARCH "x86") + endif () + else () + if (_wx_selected_config MATCHES "androideabi-qt-arm64") + set(ARCH "arm64") + # android cannot used graphics context is wxWidgets as it does not exist + set(wxUSE_GRAPHICS_CONTEXT 0) + endif (_wx_selected_config MATCHES "androideabi-qt-arm64") + if (_wx_selected_config MATCHES "androideabi-qt-armhf") + set(ARCH "armhf") + # android cannot used graphics context is wxWidgets as it does not exist + set(wxUSE_GRAPHICS_CONTEXT 0) + endif (_wx_selected_config MATCHES "androideabi-qt-armhf") + endif () +endif (NOT WIN32 AND NOT QT_ANDROID) + +if (APPLE AND CMAKE_OSX_ARCHITECTURES) + string(REPLACE ";" "-" _compound_arch "${CMAKE_OSX_ARCHITECTURES}") + set(COMPOUND_ARCH_DASH "${_compound_arch}") + set(ARCH "${CMAKE_OSX_ARCHITECTURES}") +else () + set(COMPOUND_ARCH_DASH "${ARCH}") +endif () + +message(STATUS "${CMLOC}ARCH: ${ARCH}") +message(STATUS "${CMLOC}COMPOUND_ARCH_DASH: ${COMPOUND_ARCH_DASH}") + +if (NOT "${PKG_TARGET}" STREQUAL "") + string(STRIP ${PKG_TARGET} PKG_TARGET) + string(TOLOWER ${PKG_TARGET} PKG_TARGET) +endif () +if (NOT "${PKG_TARGET_VERSION}" STREQUAL "") + string(STRIP ${PKG_TARGET_VERSION} PKG_TARGET_VERSION) + string(TOLOWER ${PKG_TARGET_VERSION} PKG_TARGET_VERSION) +endif () +set(PKG_TARGET_NVR ${PKG_TARGET}-${PKG_TARGET_VERSION}) +message( + STATUS + "${CMLOC}PKG_TARGET: ${PKG_TARGET}, PKG_TARGET_VERSION: ${PKG_TARGET_VERSION}" +) + +# Allow OCPN_TARGET to be used on the cmake command line +message(STATUS "${CMLOC}OCPN_TARGET: $ENV{OCPN_TARGET}") +if (NOT DEFINED ENV{OCPN_TARGET}) + if (DEFINED OCPN_TARGET) + message(STATUS "${CMLOC}OCPN_TARGET: ${OCPN_TARGET}") + set(ENV{OCPN_TARGET} ${OCPN_TARGET}) + else () + message(STATUS "${CMLOC}PKG_TARGET: ${PKG_TARGET}") + endif () +endif () + +set(PLUGIN_NAME ${PACKAGE}-plugin-${PKG_TARGET}-${ARCH}-${PKG_TARGET_VERSION}) + +if (Plugin_CXX11) + message(STATUS "${CMLOC}Attempting to use c++11") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11) + check_cxx_compiler_flag("-std=c++0x" COMPILER_SUPPORTS_CXX0X) + if (COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(Plugin_USE_CXX11 ON) + elseif (COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") + set(Plugin_USE_CXX11 ON) + else () + message( + STATUS + "${CMLOC}The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler." + ) + set(Plugin_USE_CXX11 OFF) + endif () +else () + set(Plugin_USE_CXX11 OFF) +endif () + +if (Plugin_USE_CXX11) + message(STATUS "${CMLOC}Allowing use of c++11") +endif () + +message(STATUS "${CMLOC}CMAKE version: ${CMAKE_VERSION}") +if (CMAKE_VERSION VERSION_GREATER 3.4) + set(ENABLE_CLANG_TIDY + OFF + CACHE BOOL "Add clang-tidy automatically to builds" + ) + if (ENABLE_CLANG_TIDY) + find_program( + CLANG_TIDY_EXE + NAMES "clang-tidy" + PATHS /usr/local/opt/llvm/bin + ) + if (CLANG_TIDY_EXE) + message(STATUS "${CMLOC}clang-tidy found: ${CLANG_TIDY_EXE}") + # For more, see http://clang.llvm.org/extra/clang-tidy/ + # set(CLANG_TIDY_CHECKS "-*,modernize-*") + set(CLANG_TIDY_CHECKS "-*,performance-*") + set(CMAKE_CXX_CLANG_TIDY + "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${PROJECT_SOURCE_DIR}/*'" + CACHE STRING "" FORCE + ) + else () + message(AUTHOR_WARNING "clang-tidy not found!") + set(CMAKE_CXX_CLANG_TIDY + "" + CACHE STRING "" FORCE + ) # delete it + endif () + endif () +endif () + +if (CMAKE_VERSION VERSION_GREATER 3.9) + set(ENABLE_CPPCHECK + OFF + CACHE BOOL "Add cppcheck automatically to builds" + ) + if (ENABLE_CPPCHECK) + find_program(CPPCHECK_EXECUTABLE NAMES "cppcheck") + set(CMAKE_CXX_CPPCHECK ${CPPCHECK_EXECUTABLE}) + endif () +endif () + +find_program( + HAVE_LD_SO + PATHS /lib + NO_DEFAULT_PATH + NAMES ld.so ld-linux.so.1 ld-linux.so.2 +) + +set(CMAKE_SKIP_BUILD_RPATH true) +if (HAVE_LD_SO) # linux. + message(STATUS "${CMLOC}Setting RPATH: \$ORIGIN:\$ORIGIN/..") + set(CMAKE_BUILD_RPATH "\$ORIGIN;\$ORIGIN/..") + set(CMAKE_INSTALL_RPATH "\$ORIGIN;\$ORIGIN/..") +endif () + +set(CMLOC ${SAVE_CMLOC}) diff --git a/cmake/android-aarch64-toolchain.cmake b/cmake/android-aarch64-toolchain.cmake new file mode 100644 index 0000000..9edda13 --- /dev/null +++ b/cmake/android-aarch64-toolchain.cmake @@ -0,0 +1,24 @@ +# ~~~ +# Summary: Cmake toolchain file for android arm64 +# License: GPLv3+ +# Copyright (c) 2021 Alec Leamas +# ~~~ + +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. + +set(CMAKE_SYSTEM_NAME Android) +set(CMAKE_SYSTEM_VERSION 21) +set(CMAKE_ANDROID_ARCH_ABI arm64-v8a) +if (DEFINED ENV{NDK_HOME}) + set(CMAKE_ANDROID_NDK $ENV{NDK_HOME}) +else () + set(CMAKE_ANDROID_NDK /opt/android/ndk) +endif () + +set(ARM_ARCH + aarch64 + CACHE STRING "Selected arm architecture" FORCE +) diff --git a/cmake/android-armhf-toolchain.cmake b/cmake/android-armhf-toolchain.cmake new file mode 100644 index 0000000..533ebc3 --- /dev/null +++ b/cmake/android-armhf-toolchain.cmake @@ -0,0 +1,23 @@ +# ~~~ +# Summary: Cmake toolchain file for 32-bit android armhf +# License: GPLv3+ +# Copyright (c) 2021 Alec Leamas +# ~~~ + +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. + +set(CMAKE_SYSTEM_NAME Android) +set(CMAKE_SYSTEM_VERSION 21) +set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) +if (DEFINED ENV{NDK_HOME}) + set(CMAKE_ANDROID_NDK $ENV{NDK_HOME}) +else () + set(CMAKE_ANDROID_NDK /opt/android/ndk) +endif () +set(ARM_ARCH + armhf + CACHE STRING "Selected arm architecture" FORCE +) diff --git a/cmake/fix-macos-libs.sh b/cmake/fix-macos-libs.sh new file mode 100755 index 0000000..725ebb9 --- /dev/null +++ b/cmake/fix-macos-libs.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Adjust absolute paths to wxWidgets libraries to match their +# location ot the target MacOS system where they are installed +# as part of OpenCPN + +readonly RUNTIME_PATH="@executable_path/../Frameworks/" + +plugin=$(find . -maxdepth 1 -name '*.dylib') +for lib in $(otool -L "$plugin" | awk ' /wx/ {print $1}'); do + libdir=${lib%/*} + if [ "$libdir" = "$lib" ]; then + continue + elif [ "$libdir" != "$RUNTIME_PATH" ]; then + runtime_lib=$(echo $lib | sed "s|$libdir|$RUNTIME_PATH|") + install_name_tool -change "$lib" "$runtime_lib" "$plugin" + fi +done +echo "fix-macos-libs.sh: Revised library paths:" +otool -L "$plugin" | grep wx diff --git a/cmake/in-files/NSIS.template.in b/cmake/in-files/NSIS.template.in new file mode 100644 index 0000000..c2de88c --- /dev/null +++ b/cmake/in-files/NSIS.template.in @@ -0,0 +1,4628 @@ +/*----------------------------------------------------------------------------------------------------- +NSIS Installer script for OpenCPN (Windows) +NSIS version 2.46 +Written by Gunther Pilz (Netsurfer) netsurfer@opencpn.de +------------------------------------------------------------------------------------------------------- +CMake variables + CPACK_PACKAGE_NAME "OpenCPN" + CPACK_NSIS_PACKAGE_NAME_LC "opencpn" + CPACK_PACKAGE_VENDOR "opencpn.org" + CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR} + CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR} + CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH} + CPACK_PACKAGE_VERSION ${PACKAGE_VERSION} + CPACK_NSIS_INSTALLED_ICON_NAME "opencpn.exe" + CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/src/bitmaps\\\\opencpn.ico" + CPACK_NSIS_EXTRA_INSTALL_COMMANDS ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/data/license.txt" + CPACK_BUILDWIN_DIR "${PROJECT_SOURCE_DIR}/buildwin" + CPACK_NSIS_DIR "${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode") + + #CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_CURRENT_BINARY_DIR};${PACKAGE_NAME};ALL;/" + #CPACK_PACKAGE_EXECUTABLES ${PACKAGE_NAME} "OpenCPN" + #CPACK_PACKAGE_INSTALL_DIRECTORY ${PACKAGE_NAME} "OpenCPN" + #CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenCPN ${PACKAGE_VERSION}" + #CPACK_NSIS_LINK_NAME "${CPACK_PACKAGE_NAME} ${PACKAGE_VERSION}" + #CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_NAME} Version ${PACKAGE_VERSION}" + #CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.opencpn.org" + #CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.opencpn.org" + #CPACK_NSIS_CONTACT "http:\\\\\\\\www.opencpn.org" + #CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}_setup" + +----------------------------------------------------------------------------------------------------------*/ +;# Set compression + SetCompressor /FINAL lzma + +;-------------------------------- +;# You must define these values + !define OCPN_INSTALLER_VERSION "1.0.0" + /* + !define CPACK_NSIS_INSTALLED_ICON_NAME "opencpn.exe" + !define CPACK_NSIS_PACKAGE_NAME_LC "opencpn" + !define CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_NAME} ${PACKAGE_VERSION}" + !define CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/src/bitmaps/opencpn.ico" + !define CPACK_BUILDWIN_DIR "${PROJECT_SOURCE_DIR}/buildwin" + !define CPACK_NSIS_DIR "${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode" + */ + !define /date YEAR "%Y" + !define OUTPUT_FILE_NAME "@CPACK_NSIS_PACKAGE_NAME_LC@_@CPACK_PACKAGE_VERSION@_setup.exe" + !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + !define REG_ROOT_KEY "Software" + !define REG_KEY "Software\s63_pi" + !define REG_ROOT_KEY_UN "Software\Microsoft\Windows\CurrentVersion\Uninstall" + !define REG_KEY_UN "Software\Microsoft\Windows\CurrentVersion\Uninstall\s63_pi @CPACK_PACKAGE_VERSION@" + !define CSIDL_LOCAL_APPDATA "0x1C" + !define Explode "!insertmacro Explode" + !define unExplode "!insertmacro unExplode" + + +;-------------------------------- +;# Variables + Var INST_USER_SID + Var CONFIG_EXISTS + Var CONFIG_EMPTY + Var INI_EXISTS + Var CHARTDB_EXISTS + Var SENC_EXISTS + Var CM93_EXISTS + Var NAVOBJ_EXISTS + Var LOG_EXISTS + Var REG_LANG + Var Count_SecGrpResetConfig + Var SecGrpEndSetConfig_Text + Var RESET_CONFIG + Var STARTMENU_FOLDER + Var OLD_INSTALLS + Var Prev_Install_RegKey + Var MULTIPLE_INSTALLS + Var VERSION_EXISTS + Var VERSION_NEWER + Var VERSION_OLDER + Var CANCEL_INSTALLER + Var VERSION_DATE + Var LANG_NAME + Var Status_SecGrpSetConfig + Var MAJOR_D + Var MINOR_D + Var PATCH_D + Var PATCH_ND + Var LM_VERSION + Var LM_VERSION_INST + Var LM_VERSION_UNINST + Var latest_version + Var latest_pathexe + Var BU_X + Var BU_Y + Var UAT + Var OUAT + Var USERS_APPDATA + Var ADMIN_APPDATA + Var USERS_NAME + Var counter_tmp + Var CurrentDirVar + Var CurrentFileVar + Var CONTEXT + Var REG_CHARTDIRS + Var USERNAME + Var IS_ADMIN + Var Compare_Version_Result + Var Inst_Or_Uninst + Var Marquee_Handle + Var Banner_Text_Blink + Var error_tmp +# onSelChange + Var ConfigSetLang + Var ConfigSetChartDir + Var SetConfig +# Installer Pages + Var Skip_Page_CleanUp + Var Skip_Page_TypeInst + Var Skip_Page_SetConfig + Var Skip_Page_Directory + Var Skip_Page_Startmenu + Var Skip_Page_Confirm +# Page_TypeInst + Var Label_TypeInst_Reinstall + Var RB_Reinstall + Var Label_TypeInst_Upgrade + Var RB_Upgrade + Var Label_TypeInst_Downgrade + Var RB_Downgrade + Var Label_TypeInst_Parallel + Var GroupBox_TypeInst + Var RB_Parallel + Var TI_REINSTALL + Var TI_UPGRADE + Var TI_DOWNGRADE + Var TI_PARALLEL + Var GroupBox_Size + Var INSTALL_TYPE +# Page_SetConfig + Var Label_SetConfig + Var GroupBox_Language_SetConfig + Var CheckBox_Language_SetConfig + Var GroupBox_ChartDir_SetConfig + Var DirRequest_SetConfig + Var Button_Delete_SetConfig + Var Button_DeleteAll_SetConfig + Var Button_Add_SetConfig + Var ListBox_SetConfig +;# Page_SetConfig_Leave + Var CHART_DIR_TMP_FILE + Var CHART_DIR_EMPTY + Var CONFIG_SET_LANG + +# Uninstaller Pages + Var Skip_UnPage_Components +;-------------------------------- +;# Execution Level + RequestExecutionLevel highest + +;-------------------------------- +;# Includes + !addincludedir "@CPACK_NSIS_DIR@/Include" + !addplugindir "@CPACK_NSIS_DIR@/Plugins" + + !include MUI2.nsh + !include LogicLib.nsh + !include nsDialogs.nsh + !include Sections.nsh + !include StrFunc.nsh + !include WordFunc.nsh + !include TextFunc.nsh + !include FileFunc.nsh + !include WinVer.nsh + + !include UAC.nsh + + !define MUI_UI "@CPACK_NSIS_DIR@/UI/opencpn_ui.exe" + +;-------------------------------- +;# General + ;# Name and file + Name "@CPACK_NSIS_PACKAGE_NAME@" + OutFile "@CPACK_TOPLEVEL_DIRECTORY@/${OUTPUT_FILE_NAME}" + + ;# Default installation folder + InstallDir "$PROGRAMFILES\s63_pi" + + BrandingText /TRIMLEFT "s63_pi $(Installer) v${OCPN_INSTALLER_VERSION}" +;-------------------------------- +;# Interface Settings + !define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit + !define MUI_CUSTOMFUNCTION_UNGUIINIT un.myGuiInit + + !define MUI_ABORTWARNING + + ;# MUI Settings / Header + !define MUI_ICON "@CPACK_PACKAGE_ICON@" + !define MUI_HEADERIMAGE + !define MUI_HEADERIMAGE_LEFT + !define MUI_HEADERIMAGE_BITMAP "@CPACK_NSIS_DIR@\Bitmaps\header-install.bmp" + !define MUI_HEADERIMAGE_UNBITMAP "@CPACK_NSIS_DIR@\Bitmaps\header-uninstall.bmp" + + ;# MUI Settings / Wizard + !define MUI_WELCOMEFINISHPAGE_BITMAP "@CPACK_NSIS_DIR@\Bitmaps\wizard-install.bmp" + !define MUI_UNWELCOMEFINISHPAGE_BITMAP "@CPACK_NSIS_DIR@\Bitmaps\wizard-uninstall.bmp" + + ;# Set Multi-Language settings + ;# Language Selection Dialog Settings + ;# Show all languages, despite user's codepage + !define MUI_LANGDLL_ALLLANGUAGES +/* + ;# Remember the installer language + !define MUI_LANGDLL_REGISTRY_ROOT "HKLM" + !define MUI_LANGDLL_REGISTRY_KEY "${REG_KEY_UN}" + !define MUI_LANGDLL_REGISTRY_VALUENAME "SetupLanguage" + !define MUI_LANGDLL_WINDOWTITLE "$(LangDialog_Title)" + !define MUI_LANGDLL_INFO "$(LangDialog_Text)" + */ +;-------------------------------- +;# Calls for making respective functions available + ${StrLoc} + +;-------------------------------- +;################################################################################################## +;# Macros # +;################################################################################################## + +!ifndef ___EnumHKU___ + !define ___EnumHKU___ + + !include LogicLib.nsh + !include WordFunc.nsh + + !define TOKEN_QUERY 0x0008 + !define TOKEN_ADJUST_PRIVILEGES 0x0020 + + !define SE_RESTORE_NAME SeRestorePrivilege + + !define SE_PRIVILEGE_ENABLED 0x00000002 + + !define HKEY_USERS 0x80000003 + + Var key + Var logged + Var EnumHKU_counter + Var SID + Var USERPROFILE + + !macro _EnumHKU_AdjustTokens + StrCpy $R1 0 + + System::Call "kernel32::GetCurrentProcess() i .R0" + System::Call "advapi32::OpenProcessToken(i R0, i ${TOKEN_QUERY}|${TOKEN_ADJUST_PRIVILEGES}, *i R1R1) i .R0" + + ${If} $R0 != 0 + System::Call "advapi32::LookupPrivilegeValue(t n, t '${SE_RESTORE_NAME}', *l .R2) i .R0" + + ${If} $R0 != 0 + System::Call "*(i 1, l R2, i ${SE_PRIVILEGE_ENABLED}) i .R0" + System::Call "advapi32::AdjustTokenPrivileges(i R1, i 0, i R0, i 0, i 0, i 0)" + System::Free $R0 + ${EndIf} + + System::Call "kernel32::CloseHandle(i R1)" + ${EndIf} + !macroend + + !macro _EnumHKU_InvokeCallback CALLBACK SUBKEY + Push $0 + Push $1 + Push $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + + Push "${SUBKEY}" + Call "${CALLBACK}" + + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + Pop $1 + Pop $0 + !macroend + + !macro _EnumHKU_Load FILE CALLBACK SUBKEY + GetFullPathName /SHORT $R2 ${FILE} + System::Call "advapi32::RegLoadKeyW(i ${HKEY_USERS}, t '${SUBKEY}', t R2) i .R3" + ${If} $R3 == 0 + !insertmacro _EnumHKU_InvokeCallback ${CALLBACK} "${SUBKEY}" + ;System::Call "advapi32::RegUnLoadKeyW(i ${HKEY_USERS}, t '${SUBKEY}')" + IntOp $EnumHKU_counter $EnumHKU_counter + 1 + ${EndIf} + !macroend + + !macro EnumHKU UN CALLBACK SUBKEY + Push $0 + Push $1 + StrCpy $EnumHKU_counter 0 + GetFunctionAddress $0 "${CALLBACK}" + StrCpy $1 "${SUBKEY}_$EnumHKU_counter" + StrCpy $key ${SUBKEY} + Call ${UN}_EnumHKU + Pop $1 + Pop $0 + !macroend + + !define EnumHKU '!insertmacro EnumHKU ""' + !define un.EnumHKU '!insertmacro EnumHKU "un."' + + !macro _EnumHKU UN + Function ${UN}_EnumHKU + Push $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + + # enumerate logged on users + StrCpy $R0 0 + ${Do} + EnumRegKey $R1 HKU "" $R0 + ${If} $R1 != "" + StrLen $R4 $R1 + ${If} $R4 > 8 + StrCpy $R6 0 + ${WordFind} "$R1" "_Classes" "E*" $R6 + IfErrors 0 cont + + ReadRegStr $R5 HKU "$R1\Volatile Environment" USERPROFILE + ExpandEnvStrings $R5 $R5 + StrCpy $USERPROFILE $R5 + StrCpy $logged "on" + !insertmacro _EnumHKU_InvokeCallback $0 $R1 + StrCpy $USERPROFILE "" + StrCpy $logged "" + ${EndIf} + cont: + IntOp $R0 $R0 + 1 + ${EndIf} + ${LoopUntil} $R1 == "" + + # enumerate logged off users + System::Call "kernel32::GetVersion() i .R0" + IntOp $R0 $R0 & 0x80000000 + ${If} $R0 == 0 + # nt + !insertmacro _EnumHKU_AdjustTokens + StrCpy $R0 0 + ${Do} + EnumRegKey $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $R0 + ${If} $R1 != "" + StrLen $R4 $R1 + ${If} $R4 > 8 + ClearErrors + ReadRegStr $R5 HKU "$R1\Volatile Environment" HOMEPATH + IfErrors 0 cont1 + ReadRegStr $R5 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$R1" ProfileImagePath + ExpandEnvStrings $R5 $R5 + StrCpy $USERPROFILE $R5 + StrCpy $logged "off" + !insertmacro _EnumHKU_Load "$R5\NTUSER.DAT" $0 $1 + StrCpy $1 "$key_$EnumHKU_counter" + StrCpy $USERPROFILE "" + StrCpy $logged "" + ${EndIf} + + cont1: + IntOp $R0 $R0 + 1 + ${EndIf} + ${LoopUntil} $R1 == "" + ${Else} + # 9x + ClearErrors + FindFirst $R1 $R2 "$WINDIR\Profiles\*.*" + ${Unless} ${Errors} + ${Do} + ${If} $R2 != "." + ${AndIf} $R2 != ".." + ${If} ${FileExists} "$WINDIR\Profiles\$R2\USER.DAT" + !insertmacro _EnumHKU_Load "$WINDIR\Profiles\$R2\USER.DAT" $0 $1 + ${EndIf} + ${EndIf} + ClearErrors + FindNext $R1 $R2 + ${LoopUntil} ${Errors} + FindClose $R1 + ${EndUnless} + ${Endif} + + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + FunctionEnd + !macroend + + !insertmacro _EnumHKU "" + !insertmacro _EnumHKU "un." +!endif + +!macro IndexOf Var Str Char + Push "${Char}" + Push "${Str}" + Call IndexOf + Pop "${Var}" +!macroend +!define IndexOf "!insertmacro IndexOf" + +!macro RIndexOf Var Str Char + Push "${Char}" + Push "${Str}" + Call RIndexOf + Pop "${Var}" +!macroend +!define RIndexOf "!insertmacro RIndexOf" + + +!macro Explode Length Separator String + Push `${Separator}` + Push `${String}` + Call Explode + Pop `${Length}` +!macroend + +!macro unExplode Length Separator String + Push `${Separator}` + Push `${String}` + Call un.Explode + Pop `${Length}` +!macroend + +!ifndef _RecFind_Included + !define _RecFind_Included + + Var _RecFindVar1 + Var _RecFindVar2 + + !macro _RecFindOpen Dir CurrentDirVar CurrentFileVar + !define _Local `${__LINE__}` + !define _Dir `${Dir}` + !define _CurrentDirVar `${CurrentDirVar}` + !define _CurrentFileVar `${CurrentFileVar}` + + !define _RecFindOpenSet + + StrCpy $_RecFindVar2 1 + Push `` + + `nextDir${_Local}:` + Pop `${_CurrentDirVar}` + IntOp $_RecFindVar2 $_RecFindVar2 - 1 + !macroend + !define RecFindOpen `!insertmacro _RecFindOpen` + + !macro _RecFindFirst + !ifndef _RecFindOpenSet + !error `Incorrect use of RecFind commands!` + !else + !define _RecFindFirstSet + !endif + + ClearErrors + FindFirst $_RecFindVar1 `${_CurrentFileVar}` `${_Dir}${_CurrentDirVar}\*.*` + IfErrors `Done${_Local}` + + `checkFile${_Local}:` + StrCmp ${_CurrentFileVar} . `nextFile${_Local}` + StrCmp ${_CurrentFileVar} .. `nextFile${_Local}` + + IfFileExists `${_Dir}${_CurrentDirVar}\${_CurrentFileVar}\*.*` 0 +4 + Push `${_CurrentDirVar}\${_CurrentFileVar}` + IntOp $_RecFindVar2 $_RecFindVar2 + 1 + Goto `nextFile${_Local}` + !macroend + !define RecFindFirst `!insertmacro _RecFindFirst` + + !macro _RecFindNext + !ifndef _RecFindOpenSet | _RecFindFirstSet + !error `Incorrect use of RecFind commands!` + !else + !define _RecFindNextSet + !endif + + `nextFile${_Local}:` + + ClearErrors + FindNext $_RecFindVar1 `${_CurrentFileVar}` + IfErrors 0 `checkFile${_Local}` + + StrCmp $_RecFindVar2 0 +3 + FindClose $_RecFindVar1 + Goto `nextDir${_Local}` + !macroend + !define RecFindNext `!insertmacro _RecFindNext` + + !macro _RecFindClose + !ifndef _RecFindOpenSet | _RecFindFirstSet | _RecFindNextSet + !error `Incorrect use of RecFind commands!` + !else + !undef _RecFindOpenSet + !undef _RecFindFirstSet + !undef _RecFindNextSet + !endif + + `Done${_Local}:` + FindClose $_RecFindVar1 + + StrCmp $_RecFindVar2 0 +4 + Pop $_RecFindVar1 + IntOp $_RecFindVar2 $_RecFindVar2 - 1 + Goto -3 + + !undef _CurrentFileVar + !undef _CurrentDirVar + !undef _Dir + !undef _Local + !macroend + !define RecFindClose `!insertmacro _RecFindClose` +!endif + +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# FUNCTIONS # +;################################################################################################## + +; StrContains +; This function does a case sensitive searches for an occurrence of a substring in a string. +; It returns the substring if it is found. +; Otherwise it returns null(""). +; Written by kenglish_hi +; Adapted from StrReplace written by dandaman32 + + +Var STR_HAYSTACK +Var STR_NEEDLE +Var STR_CONTAINS_VAR_1 +Var STR_CONTAINS_VAR_2 +Var STR_CONTAINS_VAR_3 +Var STR_CONTAINS_VAR_4 +Var STR_RETURN_VAR + +Function StrContains + Exch $STR_NEEDLE + Exch 1 + Exch $STR_HAYSTACK + ; Uncomment to debug + ;MessageBox MB_OK 'STR_NEEDLE = $STR_NEEDLE STR_HAYSTACK = $STR_HAYSTACK ' + StrCpy $STR_RETURN_VAR "" + StrCpy $STR_CONTAINS_VAR_1 -1 + StrLen $STR_CONTAINS_VAR_2 $STR_NEEDLE + StrLen $STR_CONTAINS_VAR_4 $STR_HAYSTACK + loop: + IntOp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_1 + 1 + StrCpy $STR_CONTAINS_VAR_3 $STR_HAYSTACK $STR_CONTAINS_VAR_2 $STR_CONTAINS_VAR_1 + StrCmp $STR_CONTAINS_VAR_3 $STR_NEEDLE found + StrCmp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_4 done + Goto loop + found: + StrCpy $STR_RETURN_VAR $STR_NEEDLE + Goto done + done: + Pop $STR_NEEDLE ;Prevent "invalid opcode" errors and keep the + Exch $STR_RETURN_VAR +FunctionEnd + +!macro _StrContainsConstructor OUT NEEDLE HAYSTACK + Push `${HAYSTACK}` + Push `${NEEDLE}` + Call StrContains + Pop `${OUT}` +!macroend + +!define StrContains '!insertmacro "_StrContainsConstructor"' + + + + + + +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# PAGES # +;################################################################################################## +;# Installer Pages # +;################################################################################################## +/* Var Skip_Page_CleanUp + Var Skip_Page_TypeInst + Var Skip_Page_SetConfig + Var Skip_Page_Directory + Var Skip_Page_Startmenu + Var Skip_Page_Confirm +*/ + ;# Welcome page + !define MUI_WELCOMEPAGE_TITLE_3LINES + !insertmacro MUI_PAGE_WELCOME + + ;# License page + !define MUI_PAGE_CUSTOMFUNCTION_LEAVE Page_License_Leave + ;!insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" + + !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)" + !define MUI_LICENSEPAGE_TEXT_BOTTOM $(License_Message) + + !insertmacro MUI_PAGE_LICENSE $(license) + +/* + ;# Clean up page - only shown if previous installation(s) <= 2.2.823 were found - checked in .onInit function +; Page custom Page_CleanUp Page_CleanUp_Leave +*/ + ;# Install type page - only shown if previous installation(s) > 2.2.823 were found - checked in .onInit function + Page custom Page_TypeInst Page_TypeInst_Leave + +/* + ;# Components page + !define MUI_COMPONENTSPAGE_SMALLDESC + !define MUI_PAGE_HEADER_TEXT $(CP_HEADER_TEXT) + !define MUI_PAGE_HEADER_SUBTEXT $(CP_HEADER_SUBTEXT) + !define MUI_COMPONENTSPAGE_TEXT_TOP $(CP_TOP) + !define MUI_COMPONENTSPAGE_TEXT_COMPLIST $(CP_COMPLIST) + !define MUI_COMPONENTSPAGE_TEXT_INSTTYPE "" ;#CHANGE $(CP_INSTTYPE) + ;!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE $(CP_DESCRIPTION_TITLE) ;# for this we can use the default text + ;!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO $(CP_DESCRIPTION_INFO) ;# for this we can use the default text + !define MUI_PAGE_CUSTOMFUNCTION_PRE Page_Components_Pre + !define MUI_PAGE_CUSTOMFUNCTION_SHOW Page_Components_Show + !define MUI_PAGE_CUSTOMFUNCTION_LEAVE Page_Components_Leave + !insertmacro MUI_PAGE_COMPONENTS +*/ + ;# Directory page - allows for changing/ selecting the install directory + !define MUI_DIRECTORYPAGE_VERIFYONLEAVE + !define MUI_PAGE_CUSTOMFUNCTION_PRE Page_Directory_Pre + !define MUI_PAGE_CUSTOMFUNCTION_LEAVE Page_Directory_Leave + !insertmacro MUI_PAGE_DIRECTORY + +/* + ;# Start Menu Folder page - allows for changing/ selecting the Start Menu Folder (if Shortcuts get installed is configured on the Components page) + !define MUI_STARTMENUPAGE_NODISABLE + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "${REG_KEY_UN}" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "StartMenuFolder" + !define MUI_STARTMENUPAGE_DEFAULTFOLDER "OpenCPN" + !define MUI_PAGE_CUSTOMFUNCTION_PRE Page_Startmenu_Pre + !insertmacro MUI_PAGE_STARTMENU "Application" $STARTMENU_FOLDER + + ;# Set Config page - selecting chart director[y|ies] and setting the language in opencpn.ini - only available if opencpn.ini does not exist (or is being deleted) + Page custom Page_SetConfig Page_SetConfig_Leave +*/ + ;# Confirm page - shows all settings for the installation (is mainly needed to always have the 'Install' button on the right page, ie. if Start Menu page is skipped) + Page custom Page_Confirm + + ;# Install page + !define MUI_PAGE_CUSTOMFUNCTION_SHOW Page_Instfiles_Show + !insertmacro MUI_PAGE_INSTFILES + + ;# Finish page + + #!define MUI_FINISHPAGE_RUN opencpn.exe +# !define MUI_FINISHPAGE_RUN +# !define MUI_FINISHPAGE_RUN_FUNCTION ExecAppFile + + !define MUI_FINISHPAGE_SHOWREADME install.log + !define MUI_FINISHPAGE_SHOWREADME_TEXT $(Show_Readme_Text) + !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED + !define MUI_FINISHPAGE_LINK $(Finish_Link_Text) + !define MUI_FINISHPAGE_LINK_LOCATION $(Finish_Link_URL) + !define MUI_FINISHPAGE_LINK_COLOR 000080 + !define MUI_FINISHPAGE_NOREBOOTSUPPORT + !define MUI_FINISHPAGE_TITLE_3LINES + !insertmacro MUI_PAGE_FINISH + +;-------------------------------- +;################################################################################################## +;# Uninstaller Pages # +;################################################################################################## + ;# Welcome page + !define MUI_WELCOMEPAGE_TITLE_3LINES + !insertmacro MUI_UNPAGE_WELCOME + +/* + ;# Components page + !define MUI_PAGE_CUSTOMFUNCTION_PRE un.Page_Components_Pre + !insertmacro MUI_UNPAGE_COMPONENTS +*/ + ;# Confirm page + !insertmacro MUI_UNPAGE_CONFIRM + ;# Uninstall page + !insertmacro MUI_UNPAGE_INSTFILES + + ;# Finish page + !define MUI_FINISHPAGE_TITLE_3LINES + !insertmacro MUI_UNPAGE_FINISH + +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# Languages # +;################################################################################################## +;# Languages + !insertmacro MUI_LANGUAGE "English" ;# first language is the default language + !insertmacro MUI_LANGUAGE "German" + !include /NONFATAL "Langstrings_GERMAN.nsh" + !insertmacro MUI_LANGUAGE "French" + !include /NONFATAL "Langstrings_FRENCH.nsh" + !insertmacro MUI_LANGUAGE "Czech" + !include /NONFATAL "Langstrings_CZECH.nsh" + !insertmacro MUI_LANGUAGE "Danish" + !include /NONFATAL "Langstrings_DANISH.nsh" + !insertmacro MUI_LANGUAGE "Spanish" + !include /NONFATAL "Langstrings_SPANISH.nsh" + !insertmacro MUI_LANGUAGE "Italian" + !include /NONFATAL "Langstrings_ITALIAN.nsh" + !insertmacro MUI_LANGUAGE "Dutch" + !include /NONFATAL "Langstrings_DUTCH.nsh" + !insertmacro MUI_LANGUAGE "Polish" + !include /NONFATAL "Langstrings_POLISH.nsh" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !include /NONFATAL "Langstrings_PORTUGUESEBR.nsh" + !insertmacro MUI_LANGUAGE "Portuguese" + !include /NONFATAL "Langstrings_PORTUGUESE.nsh" + !insertmacro MUI_LANGUAGE "Russian" + !include /NONFATAL "Langstrings_RUSSIAN.nsh" + !insertmacro MUI_LANGUAGE "Swedish" + !include /NONFATAL "Langstrings_SWEDISH.nsh" + !insertmacro MUI_LANGUAGE "Finnish" + !include /NONFATAL "Langstrings_FINNISH.nsh" + !insertmacro MUI_LANGUAGE "Norwegian" + !include /NONFATAL "Langstrings_NORWEGIAN.nsh" + !insertmacro MUI_LANGUAGE "TradChinese" + !include /NONFATAL "Langstrings_CHINESETW.nsh" + !insertmacro MUI_LANGUAGE "Turkish" + !include /NONFATAL "Langstrings_TURKISH.nsh" + ;!insertmacro MUI_LANGUAGE "Hungarian" + ;!include /NONFATAL "Langstrings_HUNGARIAN.nsh" + +;-------------------------------- +;# Reserve Files + ;# If you are using solid compression, files that are required before + ;# the actual installation should be stored first in the data block, + ;# because this will make your installer start faster. + !insertmacro MUI_RESERVEFILE_LANGDLL + +;# Remember the installer language + !define MUI_LANGDLL_REGISTRY_ROOT "HKLM" + !define MUI_LANGDLL_REGISTRY_KEY "${REG_KEY_UN}" + !define MUI_LANGDLL_REGISTRY_VALUENAME "SetupLanguage" + !define MUI_LANGDLL_WINDOWTITLE $(LangDialog_Title) + !define MUI_LANGDLL_INFO $(LangDialog_Text) + +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# S E C T I O N S # +;################################################################################################## +;# Installer Sections # +;################################################################################################## +Section "-Topmost Section" SecTopmost ;# this needs to be always the first section to be executed! + SetShellVarContext all + SetOutPath $INSTDIR + + ${If} $INSTALL_TYPE == 1 + ${OrIf} $INSTALL_TYPE == 2 + ${OrIf} $INSTALL_TYPE == 3 + ReadRegStr $0 HKLM "$Prev_Install_RegKey" "UninstallString" + ${StrFilter} "$0" "" "" "$\"" $0 + ClearErrors + ExecWait '"$0" /S /type=1 _?=$INSTDIR' + IfErrors 0 +2 + DetailPrint "Error on uninstalling" + Sleep 100 + Delete $0 + ${EndIf} +SectionEnd + + +;# Install Section /hidden +Section "-Install Section" SecInstall + @CPACK_NSIS_FULL_INSTALL@ + + @CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + + ;# Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall @CPACK_PACKAGE_VERSION@.exe" + + ;# Registry Entries + SetShellVarContext all ;# make sure that we write to HKLM + ;# HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN + WriteRegStr SHCTX "${REG_KEY_UN}" "DisplayName" "@CPACK_PACKAGE_NAME@ @CPACK_PACKAGE_VERSION@" + WriteRegStr SHCTX "${REG_KEY_UN}" "DisplayVersion" "@CPACK_PACKAGE_VERSION@" + WriteRegStr SHCTX "${REG_KEY_UN}" "CompareVersion" "$VERSION_DATE" + WriteRegStr SHCTX "${REG_KEY_UN}" "StartMenuPath" "$SMPROGRAMS\$STARTMENU_FOLDER" + WriteRegStr SHCTX "${REG_KEY_UN}" "InstallLocation" "$INSTDIR" + WriteRegStr SHCTX "${REG_KEY_UN}" "UninstallString" "$\"$INSTDIR\Uninstall @CPACK_PACKAGE_VERSION@.exe$\"" + WriteRegStr SHCTX "${REG_KEY_UN}" "QuietUninstallString" "$\"$INSTDIR\Uninstall @CPACK_PACKAGE_VERSION@.exe /S$\"" + WriteRegStr SHCTX "${REG_KEY_UN}" "ConfigLocation" "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" + WriteRegStr SHCTX "${REG_KEY_UN}" "DisplayIcon" "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" + WriteRegStr SHCTX "${REG_KEY_UN}" "Publisher" "@CPACK_PACKAGE_VENDOR@" + WriteRegDWORD SHCTX "${REG_KEY_UN}" "VersionMajor" $MAJOR_D + WriteRegDWORD SHCTX "${REG_KEY_UN}" "VersionMinor" $MINOR_D + WriteRegDWORD SHCTX "${REG_KEY_UN}" "VersionPatch" $PATCH_D + WriteRegDWORD SHCTX "${REG_KEY_UN}" "NoModify" 1 + WriteRegDWORD SHCTX "${REG_KEY_UN}" "NoRepair" 1 + WriteRegStr SHCTX "${REG_KEY_UN}" "HelpLink" "http://opencpn.org/" + WriteRegStr SHCTX "${REG_KEY_UN}" "URLInfoAbout" "http://opencpn.org/" + WriteRegStr SHCTX "${REG_KEY_UN}" "Contact" "http://opencpn.org/" + WriteRegStr SHCTX "${REG_KEY_UN}" "InstallUser" "$USERS_NAME" + ${If} ${UAC_IsInnerInstance} + WriteRegStr SHCTX "${REG_KEY_UN}" "InstallAdminUser" "$USERNAME" + ${EndIf} + + ;# Create the config folder if it does not exist and set full access rights to it +; ${IfNot} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" +; CreateDirectory "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" +; Sleep 250 +; ${EndIf} +; AccessControlW::GrantOnFile "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" "(BU)" "GenericRead + GenericExecute + GenericWrite + Delete + FullAccess" + + ;# Save the log file + StrCpy $0 "$INSTDIR\install.log" + Push $0 + Call DumpLog +SectionEnd + +;-------------------------------- +;################################################################################################## +;# Uninstaller Sections # +;################################################################################################## + +Section "-un.Delete Config RegKey" UnSecDeleteConfigRegKey + DeleteRegKey HKLM "${REG_KEY}" +SectionEnd + +Section /o "-un.Backup Config to RegKey" UnSecBackupConfigToRegKey + SetShellVarContext all +/* + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" + ClearErrors + StrCpy $0 "" + StrCpy $2 0 + loop: + IntOp $2 $2 + 1 + ReadINIStr $1 "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" "ChartDirectories" "ChartDir$2" + StrCmp $1 "" cont + ${WordReplace} "$1" "\\" "\" "+" $3 + ${unExplode} $4 "^" "$3" + Pop $5 + StrCmp $5 "" cont + StrCmp $0 "" 0 +2 + StrCpy $0 $5 + StrCpy $0 "$0;$5" + Goto loop + cont: + WriteRegStr HKLM "${REG_KEY}" "ChartDirs" "$0" + + ReadINIStr $0 "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" "Settings" "Locale" + StrCmp $0 "" +2 0 + WriteRegStr HKLM "${REG_KEY}" "InstallerLanguage" "$0" + ${EndIf} +*/ +SectionEnd + +Section "un.Delete Config Folder" UnSecDeleteConfigFolder + SetShellVarContext all +/* + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" + RMDir /r "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" + ClearErrors + ${EndIf} +*/ +SectionEnd + +Section "-un.Uninstall" UnSecUninstall + +/* + ;# Delete all Shortcuts + Push $INSTDIR + Call un.Delete_Desktop_Shortcuts + Push $INSTDIR + Call un.Delete_Start_Menu_Shortcuts +*/ + ;# Delete subdirs and files in INSTDIR + ;# Remove the uninstaller itself + ReadRegStr $0 HKLM "${REG_KEY_UN}" "UninstallString" + ${StrFilter} "$0" "" "" "$\"" $0 + Delete $0 + ;# Remove the installation log file + Delete "$INSTDIR\install.log" + @CPACK_NSIS_DELETE_FILES@ + @CPACK_NSIS_DELETE_DIRECTORIES@ + + ;# Remove the installation directory INSTDIR if it is empty + ClearErrors + RMDir "$INSTDIR" + IfErrors 0 cont + IfSilent cont + MessageBox MB_OK|MB_ICONEXCLAMATION "$(Msg_Error_Remove_InstDir)" + + cont: + ;# Remove RegKey + DeleteRegKey HKLM "${REG_KEY_UN}" +SectionEnd + +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# F U N C T I O N S # +;################################################################################################## +;# Installer Functions # +;################################################################################################## +;# .onInit Function +Function .onInit + ;# Check if Windows version is at least XP (not Win 98, Win 2000 or older) + ${IfNot} ${AtLeastWinXP} + MessageBox MB_OK|MB_ICONEXCLAMATION "$(Installer_Unsupported_Windows_Version)" + Abort + ${Else} + ${If} ${IsWinXP} + ${AndIf} ${AtMostServicePack} 2 + MessageBox MB_OK|MB_ICONEXCLAMATION "$(Installer_Unsupported_XP_SP_Version)" + Abort + ${EndIf} + ${EndIf} + + ;Prevent multiple instances of the installer + ${IfNot} ${UAC_IsInnerInstance} + System::Call 'kernel32::CreateMutexW(i 0, i 0, t "ocpn_inst_@CPACK_PACKAGE_VERSION@") i .r1 ?e' + Pop $R0 + StrCmp $R0 0 +3 + MessageBox MB_OK|MB_ICONEXCLAMATION "$(Installer_Running)" + Abort + ${EndIf} + + Call GetUserInfo + StrCpy $USERS_NAME $USERNAME + + ;# Macros to be inserted + ${If} $IS_ADMIN == 1 + !insertmacro MUI_LANGDLL_DISPLAY + ${EndIf} + + SetShellVarContext current + StrCpy $USERS_APPDATA $APPDATA + StrCpy $ADMIN_APPDATA $APPDATA + + ;# UAC check if user has Admin privileges and prompt for elevation if not + uac_tryagain: + !insertmacro UAC_RunElevated + StrCpy $Inst_Or_Uninst "$(Installer)" + ${Switch} $0 + ${Case} 0 + ${IfThen} $1 = 1 ${|} Quit ${|} ;# we are the outer process, the inner process has done its work, we are done + ${IfThen} $3 <> 0 ${|} ${Break} ${|} ;# we are admin, let the show go on + ${If} $1 = 3 ;# RunAs completed successfully, but with a non-admin user + MessageBox mb_IconExclamation|mb_TopMost|mb_SetForeground "$(Msg_UAC_Admin_Retry)" /SD IDNO IDOK uac_tryagain IDNO 0 + ${EndIf} + ;# fall-through and die + ${Case} 1223 + MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "$(Msg_UAC_Admin_Abort)" + Quit + ${Case} 1062 + MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "$(Msg_UAC_Logon_Abort)" + Quit + ${Default} + MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "$(Msg_UAC_No_Elevation)" + Quit + ${EndSwitch} + +########## from here we can be sure to run with admin privileges ########## + + ;# Delete all temporary files created during the installation + Delete "$TEMP\opencpn_*.tmp" + + ;# Check for unloaded Registry hive from previous installation attempt e.g. when installer crashed + StrCpy $0 0 + !insertmacro _EnumHKU_AdjustTokens + ${Do} + EnumRegKey $1 HKU "" $0 + StrCmp $1 "" done + IntOp $0 $0 + 1 + ClearErrors + ${WordFind} "$1" "opencpn-inst-tmp-sid" "E*" $2 + IfErrors +2 0 + System::Call "advapi32::RegUnLoadKeyW(i ${HKEY_USERS}, t '$1') i .r3" + ${Loop} + done: + ${If} ${UAC_IsInnerInstance} + !insertmacro UAC_AsUser_GetGlobalVar $USERS_APPDATA + !insertmacro UAC_AsUser_GetGlobalVar $USERS_NAME + ${EndIf} + + ClearErrors + Var /GLOBAL INST_PARAMS + Var /GLOBAL FORCE_SCAN + ${GetParameters} $INST_PARAMS + ${GetOptions} "$INST_PARAMS" "/scan" $FORCE_SCAN + IfErrors +2 + + # Get the user's SID from the username + ReadRegStr $0 HKCU "Volatile Environment" "USERNAME" + System::Call /NOUNLOAD '*(&w${NSIS_MAX_STRLEN})i.R9' + System::Call /NOUNLOAD 'advapi32::LookupAccountNameW(,t "$0",i R9,*i ${NSIS_MAX_STRLEN},w .R8,*i ${NSIS_MAX_STRLEN},*i .r4)i.r5' + System::Call /NOUNLOAD 'advapi32::ConvertSidToStringSidW(i R9,*t .R8)i.r5' + StrCpy $INST_USER_SID $R8 + + Call VersionDate + + ;# check for previous installed versions conforming to this installer + Call Check_Prev_Installs + + ;# check for old installed versions prior to the ones that uses this installer + StrCpy $OLD_INSTALLS 0 + + Call Reg_Scan_Old_Versions_HKLM + + Call EnumProfileList + + Call Get_Users_Values + + ${If} $OLD_INSTALLS == 0 + StrCpy $Skip_Page_CleanUp 1 + ${EndIf} + + + ;# make sure that the DWORD values for the Registry only contain digits + ${StrFilter} "@CPACK_PACKAGE_VERSION_MAJOR@" "1" "" "" $MAJOR_D + ${StrFilter} "@CPACK_PACKAGE_VERSION_MINOR@" "1" "" "" $MINOR_D + ${StrFilter} "@CPACK_PACKAGE_VERSION_PATCH@" "1" "" "" $PATCH_D + + StrCpy $INSTDIR "$PROGRAMFILES\OpenCPN\plugins\s63_pi" + + ;Call GetAllUsers +FunctionEnd + +;-------------------------------- +;# myGuiInit Function +/* +Var CONFIG_EMPTY +Var INI_EXISTS +Var CHARTDB_EXISTS +Var SENC_EXISTS +Var CM93_EXISTS +Var NAVOBJ_EXISTS +Var LOG_EXISTS +Var REG_LANG +Var Count_SecGrpResetConfig +Var SecGrpEndSetConfig_Text +*/ +Function myGuiInit + ;Get chosen installer language + ${Switch} $LANGUAGE + ${Case} ${LANG_CZECH} + StrCpy $LANG_NAME "Čeština" + StrCpy $REG_LANG "cs_CZ" + ${Break} + ${Case} ${LANG_DANISH} + StrCpy $LANG_NAME "Dansk" + StrCpy $REG_LANG "da_DK" + ${Break} + ${Case} ${LANG_GERMAN} + StrCpy $LANG_NAME "Deutsch" + StrCpy $REG_LANG "de_DE" + ${Break} + ${Case} ${LANG_ENGLISH} + StrCpy $LANG_NAME "English" + StrCpy $REG_LANG "en_US" + ${Break} + ${Case} ${LANG_SPANISH} + StrCpy $LANG_NAME "Español" + StrCpy $REG_LANG "es_ES" + ${Break} + ${Case} ${LANG_FRENCH} + StrCpy $LANG_NAME "Français" + StrCpy $REG_LANG "fr_FR" + ${Break} + ${Case} ${LANG_ITALIAN} + StrCpy $LANG_NAME "Italiano" + StrCpy $REG_LANG "it_IT" + ${Break} + ${Case} ${LANG_DUTCH} + StrCpy $LANG_NAME "Nederlandse" + StrCpy $REG_LANG "nl_NL" + ${Break} + ${Case} ${LANG_POLISH} + StrCpy $LANG_NAME "Polski" + StrCpy $REG_LANG "pl_PL" + ${Break} + ${Case} ${LANG_PORTUGUESE} + StrCpy $LANG_NAME "Português" + StrCpy $REG_LANG "pt_PT" + ${Break} + ${Case} ${LANG_PORTUGUESEBR} + StrCpy $LANG_NAME "Português Brasileiro" + StrCpy $REG_LANG "pt_BR" + ${Break} + ${Case} ${LANG_SWEDISH} + StrCpy $LANG_NAME "Svenska" + StrCpy $REG_LANG "sv_SE" + ${Break} + ${Case} ${LANG_RUSSIAN} + StrCpy $LANG_NAME "Русский" + StrCpy $REG_LANG "ru_RU" + ${Break} + ${Case} ${LANG_NORWEGIAN} + StrCpy $LANG_NAME "Norsk" + StrCpy $REG_LANG "nb_NO" + ${Break} + ${Case} ${LANG_FINNISH} + StrCpy $LANG_NAME "Suomalainen" + StrCpy $REG_LANG "fi_FI" + ${Break} + ${Case} ${LANG_TRADCHINESE} + StrCpy $LANG_NAME "正體中文" + StrCpy $REG_LANG "zh_TW" + ${Break} + ${Case} ${LANG_Turkish} + StrCpy $LANG_NAME "Türkçe" + StrCpy $REG_LANG "tr_TR" + ${Break} + ${Default} + ${Break} + ${EndSwitch} + + ;# Set Sections Text + SectionSetText ${SecGrpShortcuts} $(SecGrpShortcuts_Text) + SectionSetText ${SecShortcutStartmenu} $(SecShortcutStartmenu_Text) + SectionSetText ${SecShortcutDesktop} $(SecShortcutDesktop_Text) + SectionSetText ${SecSetConfig} $(SecSetConfig_Text) + +/* + ;# Look for config dir ("%APPDATA%\opencpn) and the several config files + Call Check_Config_Exists + + ${If} $CONFIG_EXISTS != 1 + ${OrIf} $CONFIG_EMPTY == 1 + Call Hide_SecGrpResetConfig + IntOp $0 ${SF_SELECTED} | ${SF_BOLD} + SectionSetFlags ${SecSetConfig} $0 + StrCpy $SetConfig 1 + ${EndIf} +*/ + SetShellVarContext all ;# switch SetShellVarContext back to ALL +FunctionEnd + +/* +;-------------------------------- +;# onSelChange +;Var ConfigSetLang +;Var ConfigSetChartDir +;Var SetConfig +Function .onSelChange + ;# Check if all available Sections in SecGrpResetConfig are selected => set SecGrpResetConfig to selected instead of partially selected + Push $0 + Push $1 + Push $2 + Push $3 + Push $R0 + Push $R1 + StrCpy $0 ${SecGrpResetConfig} + StrCpy $1 0 + StrCpy $2 0 + ${Do} + IntOp $0 $0 + 1 + ${If} ${SectionIsSectionGroupEnd} $0 + Goto end + ${EndIf} + SectionGetText $0 $R0 + ${If} $R0 != "" + ${AndIf} ${SectionIsSelected} $0 + Goto found_selected + ${ElseIf} $R0 != "" + ${AndIfNot} ${SectionIsSelected} $0 + Goto found_unselected + ${EndIf} + ${Loop} + + found_selected: + StrCpy $0 ${SecGrpResetConfig} + ${Do} + IntOp $0 $0 + 1 + ${If} ${SectionIsSectionGroupEnd} $0 + Goto end + ${EndIf} + SectionGetText $0 $R0 + ${If} $R0 == "" + ${AndIfNot} ${SectionIsSelected} $0 + SectionSetFlags $0 ${SF_SELECTED} + ${EndIf} + ${Loop} + + found_unselected: + StrCpy $0 ${SecGrpResetConfig} + ${Do} + IntOp $0 $0 + 1 + ${If} ${SectionIsSectionGroupEnd} $0 + Goto end + ${EndIf} + SectionGetText $0 $R0 + ${If} $R0 == "" + ${AndIf} ${SectionIsSelected} $0 + !insertmacro ClearSectionFlag $0 ${SF_SELECTED} + ${EndIf} + ${Loop} + + end: + SectionGetText ${SecDeleteConfigFile} $R1 + ${If} $R1 != "" + ${IfNot} ${SectionIsReadOnly} ${SecSetConfig} + ${AndIfNot} ${SectionIsSelected} ${SecSetConfig} + ${AndIf} $SetConfig == 1 + StrCpy $SetConfig 0 + ${EndIf} + + ${IfNot} ${SectionIsSelected} ${SecDeleteConfigFile} + ${AndIf} ${SectionIsSelected} ${SecSetConfig} + !insertmacro ClearSectionFlag ${SecSetConfig} ${SF_SELECTED} + IntOp $0 ${SF_RO} | ${SF_BOLD} + SectionSetFlags ${SecSetConfig} $0 + ;SectionSetFlags ${SecSetConfig} ${SF_RO} + StrCpy $SetConfig 1 + ${ElseIfNot} ${SectionIsSelected} ${SecDeleteConfigFile} + ${AndIfNot} ${SectionIsSelected} ${SecSetConfig} + IntOp $0 ${SF_RO} | ${SF_BOLD} + SectionSetFlags ${SecSetConfig} $0 + ;SectionSetFlags ${SecSetConfig} ${SF_RO} + StrCpy $SetConfig 0 + ${ElseIf} ${SectionIsSelected} ${SecDeleteConfigFile} + ${AndIfNot} ${SectionIsSelected} ${SecSetConfig} + ${AndIf} $SetConfig == 1 + !insertmacro ClearSectionFlag ${SecSetConfig} ${SF_RO} + IntOp $0 ${SF_SELECTED} | ${SF_BOLD} + SectionSetFlags ${SecSetConfig} $0 + ;SectionSetFlags ${SecSetConfig} ${SF_SELECTED} + ${ElseIf} ${SectionIsSelected} ${SecDeleteConfigFile} + ${AndIf} $SetConfig == 0 + !insertmacro ClearSectionFlag ${SecSetConfig} ${SF_RO} + StrCpy $SetConfig 0 + ${EndIf} + ${EndIf} + + Pop $R1 + Pop $R0 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +*/ +Function .OnInstFailed + Call InstallerEnd +FunctionEnd + + +Function .OnInstSuccess + Call InstallerEnd +FunctionEnd + + +Function .onGUIEnd + Call InstallerEnd +FunctionEnd + + +Function InstallerEnd + ;# Delete all temporary files created during the installation + Delete "$TEMP\opencpn_*.tmp" + ${If} $EnumHKU_counter > 0 + ${ForEach} $1 $EnumHKU_counter 0 - 1 + System::Call "advapi32::RegUnLoadKeyW(i ${HKEY_USERS}, t '$key_$1')" + ${Next} + ${Endif} +FunctionEnd + +;-------------------------------- +;################################################################################################## +;# Installer Page Functions # +;################################################################################################## +;# Page_License_Leave + Function Page_License_Leave +/* + FindWindow $mui.ComponentsPage "#32770" "" $HWNDPARENT + System::Call "*(i 0, i 0, i 4, i 8) i .r1" + System::Call "User32::MapDialogRect(i $mui.ComponentsPage, i r1) i .r2" + System::Call "*$1(i .r2, i.r3, i.r4, i.r5)" + System::Free $1 + StrCpy $BU_X $4 + StrCpy $BU_Y $5 +*/ + FunctionEnd + +/* +;-------------------------------- +;# Page_CleanUp + Var Label_CleanUp + Var Label_FullScan_CleanUp + Var GroupBox_CleanUp + Var ListBox_CleanUp + Var Button_FullScan_CleanUp + Var Button_UnselectAll_CleanUp + Var Button_SelectAll_CleanUp + Var Button_Uninstall_Selected_CleanUp + Var Banner_Handle + Var MSG_Box_Uninstall_Shown + Function Page_CleanUp + ${If} $Skip_Page_CleanUp == 1 + Abort + ${EndIf} + + !ifndef PBS_MARQUEE + !define PBS_MARQUEE 0x08 + !endif + !ifndef PBM_SETMARQUEE + !define PBM_SETMARQUEE 0x040A + !endif + !ifndef GWL_STYLE + !define GWL_STYLE -16 + !endif + + ${IfNot} $MSG_Box_Uninstall_Shown == 1 + MessageBox MB_YESNO|MB_ICONQUESTION "$(Msg_Uninstall_Old_Versions)" IDYES cont IDNO skip + ${Else} + Goto cont + ${EndIf} + + skip: + Abort + + cont: + StrCpy $MSG_Box_Uninstall_Shown 1 + !insertmacro MUI_HEADER_TEXT "$(Page_CleanUp_Title)" "$(Page_CleanUp_Subtitle)" + + nsDialogs::Create /NOUNLOAD 1018 + Pop $0 + ${If} $0 == error + Abort + ${EndIf} + + ${NSD_CreateLabel} 0 0 200u 16u "$(LAB_FullScan_CleanUp)" + Pop $Label_FullScan_CleanUp + + ${NSD_CreateButton} 220u 0 70u 15u "$(BT_FullScan_CleanUp)" + Pop $Button_FullScan_CleanUp + GetFunctionAddress $0 Button_FullScan_CleanUp_Click + nsDialogs::OnClick /NOUNLOAD $Button_FullScan_CleanUp $0 + + ${NSD_CreateLabel} 0 22u 100% 24u "$(Label_CleanUp_Text)" + Pop $Label_CleanUp + + ${NSD_CreateGroupBox} 0 55u 100% 85u "$(Install_Location_Default)" + Pop $GroupBox_CleanUp + + !define __NSD_ListBoxMultiselect_CLASS LISTBOX + !define __NSD_ListBoxMultiselect_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY}|${LBS_MULTIPLESEL} + !define __NSD_ListBoxMultiselect_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} + !insertmacro __NSD_DefineControl ListBoxMultiselect + ${NSD_CreateListboxMultiselect} 10u 70u 200u 65u "$(LB_CleanUp)" + Pop $ListBox_CleanUp + GetFunctionAddress $0 ListBox_CleanUp_Change + nsDialogs::OnChange /NOUNLOAD $ListBox_CleanUp $0 + + ${NSD_CreateButton} 220u 70u 70u 15u "$(BT_UnselectAll_CleanUp)" + Pop $Button_UnselectAll_CleanUp + GetFunctionAddress $0 Button_UnselectAll_CleanUp_Click + nsDialogs::OnClick /NOUNLOAD $Button_UnselectAll_CleanUp $0 + + ${NSD_CreateButton} 220u 100u 70u 15u "$(BT_SelectAll_CleanUp)" + Pop $Button_SelectAll_CleanUp + GetFunctionAddress $0 Button_SelectAll_CleanUp_Click + nsDialogs::OnClick /NOUNLOAD $Button_SelectAll_CleanUp $0 + + ${NSD_CreateButton} 220u 120u 70u 15u "$(BT_Uninstall_Selected_CleanUp)" + Pop $Button_Uninstall_Selected_CleanUp + GetFunctionAddress $0 Button_Uninstall_Selected_CleanUp_Click + nsDialogs::OnClick /NOUNLOAD $Button_Uninstall_Selected_CleanUp $0 + + + ;# First check if HDD scan was already done + ${If} ${FileExists} "$TEMP\opencpn_hdd_full_scan.tmp" + EnableWindow $Button_FullScan_CleanUp 0 + EnableWindow $Label_FullScan_CleanUp 0 + SendMessage $GroupBox_CleanUp ${WM_SETTEXT} 0 "STR:$(Install_Location_HDD_Scan)" + ClearErrors + FileOpen $R0 "$TEMP\opencpn_hdd_full_scan.tmp" r + IfErrors done1 + ${Do} + FileReadUTF16LE $R0 $R1 + ${If} $R1 == "" + Goto done1 + ${Else} + ${TrimNewLines} $R1 $R1 + SendMessage $ListBox_CleanUp ${LB_ADDSTRING} 0 "STR:$R1" + ${EndIf} + ${Loop} + done1: + FileClose $R0 + ;# if not get values from LM_VERSION and opencpn_old_installs.tmp file + ${Else} + ${IfNot} ${FileExists} "$TEMP\opencpn_hdd_quick_scan.tmp" + ;# Scan the default locations for program installations on a per-user and all-users basis + Banner::show /NOUNLOAD /set 76 "$(Search_old_installations)" + Banner::getWindow /NOUNLOAD + Pop $Banner_Handle + ShowWindow $Banner_Handle ${SW_HIDE} + ${NSD_AddExStyle} $Banner_Handle ${WS_EX_APPWINDOW} + ShowWindow $Banner_Handle ${SW_SHOW} + GetDlgItem $2 $Banner_Handle 1030 + SendMessage $2 ${WM_SETTEXT} 0 "STR:$(text_please_wait_1)" + + ; Get progress bar handle. + GetDlgItem $Marquee_Handle $Banner_Handle 1004 + + ; Set PBS_MARQUEE style for the progress bar control. + System::Call "user32::GetWindowLong(i $Marquee_Handle, i ${GWL_STYLE}) i .r1" + System::Call "user32::SetWindowLong(i $Marquee_Handle, i ${GWL_STYLE}, i $1|${PBS_MARQUEE})" + + ; Send PBM_SETMARQUEE message to start the marquee. + ; lParam is time in milliseconds between marquee animation updates. + SendMessage $Marquee_Handle ${PBM_SETMARQUEE} 1 50 + + System::Call "User32::SetWindowPos(i $Banner_Handle, i -1, i 0, i 0, i 0, i 0, i 83)" + + HideWindow + + Call Quick_Scan_Old_Versions + + ShowWindow $HWNDPARENT ${SW_SHOW} + BringToFront + SendMessage $Marquee_Handle ${PBM_SETMARQUEE} 0 0 + System::Call "user32::SetWindowLong(i $Marquee_Handle, i ${GWL_STYLE}, i $1)" + Banner::destroy + ${EndIf} + + ClearErrors + FileOpen $R0 "$TEMP\opencpn_hdd_quick_scan.tmp" r + IfErrors done2 + ${Do} + FileReadUTF16LE $R0 $R1 + ${If} $R1 == "" + Goto done2 + ${Else} + ${TrimNewLines} $R1 $R1 + SendMessage $ListBox_CleanUp ${LB_ADDSTRING} 0 "STR:$R1" + ${EndIf} + ${Loop} + + done2: + FileClose $R0 + ${EndIf} + ;# Pre-select all listbox-items + ${NSD_LB_GetCount} $ListBox_CleanUp $1 + IntOp $1 $1 - 1 + SendMessage $ListBox_CleanUp ${LB_SELITEMRANGEEX} 0 $1 + Call ListBox_CleanUp_Change + + nsDialogs::Show + FunctionEnd +*/ + +/* + Function Button_FullScan_CleanUp_Click + SendMessage $ListBox_CleanUp ${LB_RESETCONTENT} 0 0 + + Banner::show /NOUNLOAD /set 76 "$(Scanning_HDD)" + Banner::getWindow /NOUNLOAD + Pop $Banner_Handle + ShowWindow $Banner_Handle ${SW_HIDE} + SendMessage $Banner_Handle ${WM_SETTEXT} 0 "STR:$(OCPN_Scanning_HDD)" + ${NSD_AddExStyle} $Banner_Handle ${WS_EX_APPWINDOW} + ShowWindow $Banner_Handle ${SW_SHOW} + GetDlgItem $2 $Banner_Handle 1030 + SendMessage $2 ${WM_SETTEXT} 0 "STR:$(text_please_wait_1)" + + ; Get progress bar handle. + GetDlgItem $Marquee_Handle $Banner_Handle 1004 + + ; Set PBS_MARQUEE style for the progress bar control. + System::Call "user32::GetWindowLong(i $Marquee_Handle, i ${GWL_STYLE}) i .r1" + System::Call "user32::SetWindowLong(i $Marquee_Handle, i ${GWL_STYLE}, i $1|${PBS_MARQUEE})" + + ; Send PBM_SETMARQUEE message to start the marquee. + ; lParam is time in milliseconds between marquee animation updates. + SendMessage $Marquee_Handle ${PBM_SETMARQUEE} 1 50 + + System::Call "User32::SetWindowPos(i $Banner_Handle, i -1, i 0, i 0, i 0, i 0, i 83)" + + HideWindow + + Call Full_Scan_Old_Versions + + ${If} ${FileExists} "$TEMP\opencpn_hdd_full_scan.tmp" + Delete "$TEMP\opencpn_hdd_quick_scan.tmp" + ${EndIf} + + ;# If install locations were found compare with Registry keys + ${If} $counter_tmp > 0 + ${If} $LM_VERSION_INST != "" + ClearErrors + FileOpen $R0 "$TEMP\opencpn_hdd_full_scan.tmp" r + IfErrors done1 + ${Do} + FileReadUTF16LE $R0 $R1 + ${If} $R1 == "" + Goto done1 + ${Else} + ${TrimNewLines} $R1 $R1 + StrCmp $R1 $R2 done1 + ${EndIf} + ${Loop} + ;# Path from Registry key wasn't found => delete RegKey + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1" + StrCpy $LM_VERSION_INST "" + + done1: + FileClose $R0 + ${EndIf} + + ${If} ${FileExists} "$TEMP\opencpn_old_installs.tmp" + ;# Clear the stack + ClearErrors + ${Do} + Pop $0 + IfErrors empty + ${Loop} + empty: + + ClearErrors + FileOpen $R0 "$TEMP\opencpn_old_installs.tmp" r + + IfErrors done3 + ${Do} + FileReadUTF16LE $R0 $R3 + FileReadUTF16LE $R0 $R2 + ${If} $R3 == "" + Goto done3 + ${Else} + ${TrimNewLines} $R3 $R3 + ${TrimNewLines} $R2 $R2 + FileReadUTF16LE $R0 $R1 + ${TrimNewLines} $R1 $R1 + ClearErrors + FileOpen $0 "$TEMP\opencpn_hdd_full_scan.tmp" r + IfErrors next + ${Do} + FileReadUTF16LE $0 $1 + ${If} $1 == "" + Goto next + ${Else} + ${TrimNewLines} $1 $1 + StrCmp $1 $R1 done2 + ${EndIf} + ${Loop} + ;# Path from Registry key wasn't found => delete RegKey + DeleteRegKey HKU $R3 + Goto next + + done2: + Push $R1 + Push $R2 + Push $R3 + next: + FileClose $0 + ${EndIf} + ${Loop} + done3: + FileClose $R0 + + ClearErrors + FileOpen $R0 "$TEMP\opencpn_old_installs.tmp" w + IfErrors done4 + ${Do} + Pop $R1 + IfErrors done4 + FileWriteUTF16LE $R0 $R1 + FileWriteUTF16LE $R0 "$\r$\n" + ${Loop} + done4: + FileClose $R0 + ${EndIf} + ${EndIf} + + EnableWindow $Button_FullScan_CleanUp 0 ;# Disable the Scan HDD button after scan was done + EnableWindow $Label_FullScan_CleanUp 0 ;# Disable the Scan HDD label after scan was done + SendMessage $GroupBox_CleanUp ${WM_SETTEXT} 0 "STR:$(Install_Location_HDD_Scan)" + + ShowWindow $HWNDPARENT ${SW_SHOW} + BringToFront + + ; Stop the marquee and set the old styles back for the progress bar control. + SendMessage $Marquee_Handle ${PBM_SETMARQUEE} 0 0 + System::Call "user32::SetWindowLong(i $Marquee_Handle, i ${GWL_STYLE}, i $1)" + + Banner::destroy + FunctionEnd +*/ + + Function Button_UnselectAll_CleanUp_Click + SendMessage $ListBox_CleanUp ${LB_SETSEL} FALSE -1 + Call ListBox_CleanUp_Change + FunctionEnd + + Function Button_SelectAll_CleanUp_Click + ${NSD_LB_GetCount} $ListBox_CleanUp $1 + IntOp $1 $1 - 1 + ${If} $1 == 0 + IntOp $1 $1 + 1 + ${EndIf} + SendMessage $ListBox_CleanUp ${LB_SELITEMRANGEEX} 0 $1 + Call ListBox_CleanUp_Change + FunctionEnd + + Function ListBox_CleanUp_Change + SendMessage $ListBox_CleanUp ${LB_GETSELCOUNT} 0 0 $1 + ${NSD_LB_GetCount} $ListBox_CleanUp $2 + ${If} $2 > 0 + ${If} $1 == 0 + EnableWindow $Button_Uninstall_Selected_CleanUp 0 + EnableWindow $Button_UnselectAll_CleanUp 0 + EnableWindow $Button_SelectAll_CleanUp 1 + ${ElseIf} $1 > 0 + ${AndIf} $1 == $2 + EnableWindow $Button_Uninstall_Selected_CleanUp 1 + EnableWindow $Button_UnselectAll_CleanUp 1 + EnableWindow $Button_SelectAll_CleanUp 0 + ${Else} + EnableWindow $Button_Uninstall_Selected_CleanUp 1 + EnableWindow $Button_UnselectAll_CleanUp 1 + EnableWindow $Button_SelectAll_CleanUp 1 + ${EndIf} + ${Else} + EnableWindow $Button_Uninstall_Selected_CleanUp 0 + EnableWindow $Button_UnselectAll_CleanUp 0 + EnableWindow $Button_SelectAll_CleanUp 0 + ${EndIf} + FunctionEnd + +/* + Var Uninstall_Path_Tmp + Function Button_Uninstall_Selected_CleanUp_Click + EnableWindow $Button_Uninstall_Selected_CleanUp 0 + SendMessage $ListBox_CleanUp ${LB_GETSELCOUNT} 0 0 $1 + ${NSD_LB_GetCount} $ListBox_CleanUp $2 + ClearErrors + FileOpen $R0 "$TEMP\opencpn_uninstall.tmp" w + IfErrors done + IntOp $2 $2 - 1 + ${ForEach} $3 $2 0 - 1 + SendMessage $ListBox_CleanUp ${LB_GETSEL} $3 0 $4 + ${If} $4 > 0 + System::Call "User32::SendMessage(i $ListBox_CleanUp, i ${LB_GETTEXT}, i $3, t .r5)" + FileWriteUTF16LE $R0 "$5" + FileWriteUTF16LE $R0 "$\r$\n" + SendMessage $ListBox_CleanUp ${LB_DELETESTRING} $3 0 + ${EndIf} + ${Next} + done: + FileClose $R0 + + Call ListBox_CleanUp_Change + + StrCpy $R8 "" + StrCpy $R7 "" + StrCpy $R6 "" + StrCpy $R5 "" + ${If} ${FileExists} "$TEMP\opencpn_uninstall.tmp" + ${If} ${FileExists} "$TEMP\opencpn_hdd_full_scan.tmp" + StrCpy $R8 "opencpn_hdd_full_scan.tmp" + ${ElseIf} ${FileExists} "$TEMP\opencpn_hdd_quick_scan.tmp" + StrCpy $R8 "opencpn_hdd_quick_scan.tmp" + ${EndIf} + + ${If} ${FileExists} "$TEMP\opencpn_old_installs.tmp" + StrCpy $R7 1 + ${EndIf} + + ${If} ${FileExists} "$TEMP\opencpn_old_uninstall_regkeys.tmp" + StrCpy $R6 1 + ${EndIf} + + ${If} ${FileExists} "$TEMP\opencpn_appdata.tmp" + StrCpy $R5 1 + ${EndIf} + + ClearErrors + FileOpen $R4 "$TEMP\opencpn_uninstall.tmp" r + IfErrors end + loop: + ClearErrors + FileReadUTF16LE $R4 $0 + IfErrors end + StrCmp $0 "" loop + StrCmp $0 "$\r$\n" loop + + ${TrimNewLines} $0 $0 + StrCpy $Uninstall_Path_Tmp $0 + + ;# Delete installation directory + ClearErrors + Call Delete_Installation_Dir + IfErrors 0 +2 + MessageBox MB_OK|MB_ICONEXCLAMATION "Error RMDir: $0" ;#ON ERROR + + ;# If deleted installation was the one in the HKLM ...\OpenCPN_is1 subkey => delete RegKey + ${If} $LM_VERSION_INST != "" + StrCmp $0 $LM_VERSION_INST 0 cont + ClearErrors + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1" + IfErrors 0 +2 + MessageBox MB_OK|MB_ICONEXCLAMATION "Error DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1" ;#ON ERROR + StrCpy $LM_VERSION "" + StrCpy $LM_VERSION_INST "" + StrCpy $LM_VERSION_UNINST "" + ${EndIf} + + cont: + ;# Delete Start Menu shortcuts + Push $Uninstall_Path_Tmp + Call Delete_Start_Menu_Shortcuts + + ;# Delete Desktop shortcuts + Push $Uninstall_Path_Tmp + Call Delete_Desktop_Shortcuts + + ;# Delete RegKeys in HKU Software\opencpn.org\... + ${If} $R7 == 1 + Call Update_Old_Installs + ${EndIf} + + ;# Delete RegKeys in HKU Software\...\Uninstall\OpenCPN + ${If} $R6 == 1 + Call Update_Old_Uninstalls + ${EndIf} + + ;# Delete %APPDATA\opencpn folder + ${If} $R5 == 1 + Call Update_Appdata + ${EndIf} + + ${IfNot} $R8 == "" + Call Update_HDD_Scan + ${EndIf} + + Goto loop + end: + FileClose $R4 + Delete "$TEMP\opencpn_uninstall.tmp" + StrCpy $Uninstall_Path_Tmp "" + ${EndIf} + + ${NSD_LB_GetCount} $ListBox_CleanUp $2 + ${If} $2 == 0 ;# listbox is empty - all were uninstalled + StrCpy $Skip_Page_CleanUp 1 + GetDlgItem $0 $HWNDPARENT 1 + SendMessage $0 ${BM_CLICK} 0 0 + ${EndIf} + FunctionEnd +*/ + +/* + Function Update_HDD_Scan + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $R0 + Push $R8 + ClearErrors + FileOpen $0 "$TEMP\$R8" r ;# open target file for reading + GetTempFileName $R0 ;# get new temp file name + FileOpen $1 $R0 w ;# open temp file for writing + IfErrors end + loop: + FileReadUTF16LE $0 $2 ;# read line from target file + IfErrors done ;# check if end of file reached + ${TrimNewLines} $2 $2 + StrCmp $2 "$Uninstall_Path_Tmp" +2 ;# compare line with search string with CR/LF + FileWriteUTF16LE $1 "$2$\r$\n" ;# write line to temp file + Goto loop + done: + FileClose $0 ;# close target file + FileClose $1 ;# close temp file + Delete "$TEMP\$R8" ;# delete target file + CopyFiles /SILENT $R0 "$TEMP\$R8" ;# copy temp file to target file + Delete $R0 ;# delete temp file + end: + Pop $R8 + Pop $R0 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + FunctionEnd +*/ + +/* + Function Update_Old_Installs + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $R0 + Push $R1 + ClearErrors + FileOpen $0 "$TEMP\opencpn_old_installs.tmp" r ;# open target file for reading + GetTempFileName $R0 ;# get new temp file name + FileOpen $1 $R0 w ;# open temp file for writing + IfErrors end + loop: + FileReadUTF16LE $0 $4 ;# read line from target file + FileReadUTF16LE $0 $3 ;# read line from target file + FileReadUTF16LE $0 $2 ;# read line from target file + IfErrors done ;# check if end of file reached + ${TrimNewLines} $2 $2 + StrCmp $2 "$Uninstall_Path_Tmp" +5 ;# compare line with search string with CR/LF + FileWriteUTF16LE $1 $4 ;# write line to temp file + FileWriteUTF16LE $1 $3 ;# write line to temp file + FileWriteUTF16LE $1 "$2$\r$\n" ;# write line to temp file + Goto loop + ${TrimNewLines} $4 $4 + DeleteRegKey HKU "$4" + ${WordFind} "$4" "\" "-2{*" $4 + DeleteRegKey /ifempty HKU "$4" + ClearErrors + Goto loop + done: + FileClose $0 ;# close target file + FileClose $1 ;# close temp file + Delete "$TEMP\opencpn_old_installs.tmp" ;# delete target file + CopyFiles /SILENT $R0 "$TEMP\opencpn_old_installs.tmp" ;# copy temp file to target file + Delete $R0 ;# delete temp file + end: + Pop $R1 + Pop $R0 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + FunctionEnd +*/ + +/* + Function Update_Old_Uninstalls + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $R0 + Push $R1 + ClearErrors + FileOpen $0 "$TEMP\opencpn_old_uninstall_regkeys.tmp" r ;# open target file for reading + GetTempFileName $R0 ;# get new temp file name + FileOpen $1 $R0 w ;# open temp file for writing + IfErrors end + loop: + FileReadUTF16LE $0 $4 ;# read line from target file + FileReadUTF16LE $0 $3 ;# read line from target file + FileReadUTF16LE $0 $2 ;# read line from target file + IfErrors done ;# check if end of file reached + ${TrimNewLines} $2 $2 + StrCmp $2 "$Uninstall_Path_Tmp" +5 ;# compare line with search string with CR/LF + FileWriteUTF16LE $1 $4 ;# write line to temp file + FileWriteUTF16LE $1 $3 ;# write line to temp file + FileWriteUTF16LE $1 "$2$\r$\n" ;# write line to temp file + Goto loop + ${TrimNewLines} $3 $3 + DeleteRegKey HKU "$3" + ClearErrors + Goto loop + done: + FileClose $0 ;# close target file + FileClose $1 ;# close temp file + Delete "$TEMP\opencpn_old_uninstall_regkeys.tmp" ;# delete target file + CopyFiles /SILENT $R0 "$TEMP\opencpn_old_uninstall_regkeys.tmp" ;# copy temp file to target file + Delete $R0 ;# delete temp file + end: + Pop $R1 + Pop $R0 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + FunctionEnd +*/ + +/* + Function Update_Appdata + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $R0 + Push $R1 + ClearErrors + FileOpen $0 "$TEMP\opencpn_appdata.tmp" r ;# open target file for reading + GetTempFileName $R0 ;# get new temp file name + FileOpen $1 $R0 w ;# open temp file for writing + IfErrors end + loop: + FileReadUTF16LE $0 $4 ;# read line from target file + FileReadUTF16LE $0 $3 ;# read line from target file + FileReadUTF16LE $0 $2 ;# read line from target file + IfErrors done ;# check if end of file reached + ${TrimNewLines} $2 $2 + StrCmp $2 "$Uninstall_Path_Tmp" +5 ;# compare line with search string with CR/LF + FileWriteUTF16LE $1 $4 ;# write line to temp file + FileWriteUTF16LE $1 $3 ;# write line to temp file + FileWriteUTF16LE $1 "$2$\r$\n" ;# write line to temp file + Goto loop + ${TrimNewLines} $3 $3 + RMDir /r "$3\opencpn" + ClearErrors + Goto loop + done: + FileClose $0 ;# close target file + FileClose $1 ;# close temp file + Delete "$TEMP\opencpn_appdata.tmp" ;# delete target file + CopyFiles /SILENT $R0 "$TEMP\opencpn_appdata.tmp" ;# copy temp file to target file + Delete $R0 ;# delete temp file + end: + Pop $R1 + Pop $R0 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + FunctionEnd +*/ + +/* +;-------------------------------- +;# Page_CleanUp_Leave + Function Page_CleanUp_Leave + ${NSD_LB_GetCount} $ListBox_CleanUp $2 + ${If} $2 > 0 ;# listbox is not empty - not all old versions were uninstalled + MessageBox MB_YESNO|MB_ICONQUESTION "$(Msg_Not_All_Old_Uninstalled)" IDYES leaving + Abort + ${EndIf} + leaving: + SendMessage $ListBox_CleanUp ${LB_RESETCONTENT} 0 0 + FunctionEnd + +*/ + +;-------------------------------- +;# Page_TypeInst +/* Var Label_TypeInst_Reinstall + Var RB_Reinstall + Var Label_TypeInst_Upgrade + Var RB_Upgrade + Var Label_TypeInst_Downgrade + Var RB_Downgrade + Var Label_TypeInst_Parallel + Var GroupBox_TypeInst + Var RB_Parallel + Var TI_REINSTALL + Var TI_UPGRADE + Var TI_DOWNGRADE + Var TI_PARALLEL + Var GroupBox_Size + Var INSTALL_TYPE + */ + Function Page_TypeInst + ${If} $Skip_Page_TypeInst == 1 + Abort + ${EndIf} + ${If} $VERSION_EXISTS == 1 + !insertmacro MUI_HEADER_TEXT $(Page_TypeInst_Title_Exists) $(Page_TypeInst_Subtitle_Exists) + ${ElseIf} $MULTIPLE_INSTALLS == 1 + !insertmacro MUI_HEADER_TEXT $(Page_TypeInst_Title_1) $(Page_TypeInst_Subtitle_1) + ${ElseIf} $MULTIPLE_INSTALLS > 1 + !insertmacro MUI_HEADER_TEXT $(Page_TypeInst_Title) $(Page_TypeInst_Subtitle) + ${EndIf} + + nsDialogs::Create /NOUNLOAD 1018 + Pop $0 + + ${If} $0 == error + Abort + ${EndIf} + + ;Case 1: same version already installed => Option 1: Reinstall + ${If} $VERSION_EXISTS == 1 + ${NSD_CreateLabel} 0 0 100% 40u "$(Label_TypeInst_Reinstall_Text)" + Pop $Label_TypeInst_Reinstall + + ${NSD_CreateRadioButton} 10u 65u 100% 10u "$(RB_Reinstall_TypeInst_Text)" + Pop $RB_Reinstall + ${NSD_AddStyle} $RB_Reinstall ${WS_GROUP} + ${NSD_SetState} $RB_Reinstall ${BST_CHECKED} + + StrCpy $GroupBox_Size 1 + ;Case 2: one older previous installation => Option 1: Upgrade Option 2: Parallel Installation + ${ElseIf} $MULTIPLE_INSTALLS == 1 + ${AndIf} $VERSION_NEWER == 1 + ${NSD_CreateLabel} 0 0 100% 32u "$(Label_TypeInst_Upgrade_Text)" + Pop $Label_TypeInst_Upgrade + + ${NSD_CreateRadioButton} 10u 65u 100% 10u "$(RB_Upgrade_TypeInst_Text)" + Pop $RB_Upgrade + ${NSD_AddStyle} $RB_Upgrade ${WS_GROUP} + ${If} $TI_UPGRADE != "" + ${NSD_SetState} $RB_Upgrade $TI_UPGRADE + ${ElseIf} $TI_UPGRADE == "" + ${AndIf} $TI_PARALLEL == "" + ${NSD_SetState} $RB_Upgrade ${BST_CHECKED} + ${EndIf} +/* + ${NSD_CreateRadioButton} 10u 85u 100% 10u "$(RB_Parallel_TypeInst_Text)" + Pop $RB_Parallel + ${If} $TI_PARALLEL != "" + ${NSD_SetState} $RB_Parallel $TI_PARALLEL + ${EndIf} +*/ + StrCpy $GroupBox_Size 1 + ;Case 3: one newer previous installation => Option 1: Downgrade Option 2: Parallel Installation + ${ElseIf} $MULTIPLE_INSTALLS == 1 + ${AndIf} $VERSION_OLDER == 1 + ${NSD_CreateLabel} 0 0 100% 32u "$(Label_TypeInst_Downgrade_Text)" + Pop $Label_TypeInst_Downgrade + + ${NSD_CreateRadioButton} 10u 65u 100% 10u "$(RB_Downgrade_TypeInst_Text)" + Pop $RB_Downgrade + ${NSD_AddStyle} $RB_Downgrade ${WS_GROUP} + ${If} $TI_DOWNGRADE != "" + ${NSD_SetState} $RB_Upgrade $TI_DOWNGRADE + ${ElseIf} $TI_DOWNGRADE == "" + ${AndIf} $TI_PARALLEL == "" + ${NSD_SetState} $RB_Downgrade ${BST_CHECKED} + ${EndIf} +/* + ${NSD_CreateRadioButton} 10u 85u 100% 10u "$(RB_Parallel_TypeInst_Text)" + Pop $RB_Parallel + ${If} $TI_PARALLEL != "" + ${NSD_SetState} $RB_Parallel $TI_PARALLEL + ${EndIf} +*/ + StrCpy $GroupBox_Size 1 +/* + ;Case 4: more than one previous installation => Option 1: Parallel Installation + ${ElseIf} $MULTIPLE_INSTALLS > 1 + ${NSD_CreateLabel} 0 0 100% 32u "$(Label_TypeInst_Parallel_Text)" + Pop $Label_TypeInst_Parallel + + ${NSD_CreateRadioButton} 10u 65u 100% 10u "$(RB_Parallel_TypeInst_Text)" + Pop $RB_Parallel + ${NSD_AddStyle} $RB_Parallel ${WS_GROUP} + ${NSD_SetState} $RB_Parallel ${BST_CHECKED} + + StrCpy $GroupBox_Size 1 +*/ + ${EndIf} + + ${If} $GroupBox_Size == 1 + ${NSD_CreateGroupBox} 0 50u 100% 35u "Install Type" + Pop $GroupBox_TypeInst + ${ElseIf} $GroupBox_Size == 2 + ${NSD_CreateGroupBox} 0 50u 100% 55u "Install Type" + Pop $GroupBox_TypeInst + ${EndIf} + + nsDialogs::Show + FunctionEnd + +;-------------------------------- +;# Page_TypeInst_Leave + Function Page_TypeInst_Leave + ${If} $RB_Reinstall != "" + ${NSD_GetState} $RB_Reinstall $TI_REINSTALL + ${EndIf} + ${If} $RB_Upgrade != "" + ${NSD_GetState} $RB_Upgrade $TI_UPGRADE + ${EndIf} + ${If} $RB_Downgrade != "" + ${NSD_GetState} $RB_Downgrade $TI_DOWNGRADE + ${EndIf} + ${If} $RB_Parallel != "" + ${NSD_GetState} $RB_Parallel $TI_PARALLEL + ${EndIf} + + StrCpy $Skip_Page_Directory "" + ${If} $TI_REINSTALL == 1 + StrCpy $INSTALL_TYPE 1 + ${ElseIf} $TI_UPGRADE == 1 + StrCpy $INSTALL_TYPE 2 + ${ElseIf} $TI_DOWNGRADE == 1 + StrCpy $INSTALL_TYPE 3 + ${ElseIf} $TI_PARALLEL == 1 + StrCpy $INSTALL_TYPE 4 + ${EndIf} + + ${If} $INSTALL_TYPE == 1 + ${OrIf} $INSTALL_TYPE == 2 + ${OrIf} $INSTALL_TYPE == 3 + StrCpy $Skip_Page_Directory 1 + ReadRegStr $0 HKLM "$Prev_Install_RegKey" "InstallLocation" + StrCpy $INSTDIR $0 + ${EndIf} + + ; On Upgrade or Downgrade, tentatively trim any Package Version trailer from install location + ${If} $INSTALL_TYPE == 2 + ${OrIf} $INSTALL_TYPE == 3 + StrCpy $R1 0 + Push $INSTDIR + Push "OpenCPN\plugins\s63_pi" + Push ">" + Call StrLoc + Pop $0 + + StrCpy $R1 $INSTDIR $0 + StrCpy $R1 "$R1OpenCPN\plugins\s63_pi" + StrLen $R2 $INSTDIR + StrLen $R3 $R1 + +/* + ; If Previous install dir was a parallel, make the upgrade also parallel. + ${If} $R2 > $R3 + StrCpy $INSTDIR "$R1 @CPACK_PACKAGE_VERSION@" + ${Else} + StrCpy $INSTDIR $R1 + ${Endif} +*/ + ${Endif} + + ${If} $INSTALL_TYPE == 4 + StrCpy $INSTDIR "$PROGRAMFILES\OpenCPN\plugins\s63_pi @CPACK_PACKAGE_VERSION@" + ${EndIf} + FunctionEnd + +/* +;-------------------------------- +;# Page_Components_Pre + Function Page_Components_Pre + + FunctionEnd + +;-------------------------------- +;# Page_Components_Show + Function Page_Components_Show + ;# change controls size and position on the Components Page + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + + FindWindow $mui.ComponentsPage "#32770" "" $HWNDPARENT + + ;GetDlgItem $mui.ComponentsPage.Text $mui.ComponentsPage 1006 + GetDlgItem $mui.ComponentsPage.InstTypesText $mui.ComponentsPage 1021 + ShowWindow $mui.ComponentsPage.InstTypesText ${SW_HIDE} + + GetDlgItem $mui.ComponentsPage.ComponentsText $mui.ComponentsPage 1022 + GetDlgItem $mui.ComponentsPage.InstTypes $mui.ComponentsPage 1017 + ShowWindow $mui.ComponentsPage.InstTypes ${SW_HIDE} + + GetDlgItem $mui.ComponentsPage.Components $mui.ComponentsPage 1032 + GetDlgItem $mui.ComponentsPage.DescriptionTitle $mui.ComponentsPage 1042 + GetDlgItem $mui.ComponentsPage.DescriptionText $mui.ComponentsPage 1043 + GetDlgItem $mui.ComponentsPage.SpaceRequired $mui.ComponentsPage 1023 + ShowWindow $mui.ComponentsPage.SpaceRequired ${SW_HIDE} + + Push "198" + Push "40" + Push "100" + Push "100" + Call DU2Pix + System::Call "User32::SetWindowPos(i $mui.ComponentsPage.DescriptionTitle, i 0, i $1, i $2, i $3, i $4, i 64)" ;# 1042 + + Push "203" + Push "50" + Push "90" + Push "85" + Call DU2Pix + System::Call "User32::SetWindowPos(i $mui.ComponentsPage.DescriptionText, i 0, i $1, i $2, i $3, i $4, i 64)" ;# 1043 + + Push "0" + Push "25" + Push "300" + Push "15" + Call DU2Pix + System::Call "User32::SetWindowPos(i $mui.ComponentsPage.ComponentsText, i 0, i $1, i $2, i $3, i $4, i 64)" ;# 1022 + + Push "0" + Push "40" + Push "195" + Push "100" + Call DU2Pix + System::Call "User32::SetWindowPos(i $mui.ComponentsPage.Components, i 0, i $1, i $2, i $3, i $4, i 64)" ;# 1032 + + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + FunctionEnd + +;-------------------------------- +;# Page_Components_Leave + Function Page_Components_Leave + ${IfNot} ${SectionIsSelected} ${SecSetConfig} + StrCpy $Skip_Page_SetConfig 1 + ${Else} + StrCpy $Skip_Page_SetConfig 0 + ${EndIf} + + ${IfNot} ${SectionIsSelected} ${SecShortcutStartmenu} + StrCpy $Skip_Page_Startmenu 1 + ${Else} + StrCpy $Skip_Page_Startmenu 0 + ${EndIf} + FunctionEnd +*/ +;-------------------------------- +;# Page_Directory_Pre + Function Page_Directory_Pre + ${If} $Skip_Page_Directory == 1 + Abort + ${EndIf} + FunctionEnd + +;-------------------------------- +;# Page_Directory_Leave + Function Page_Directory_Leave + GetInstDirError $R0 + ${If} $R0 > 0 ;# Invalid path entered + MessageBox MB_OK|MB_ICONSTOP "$(Msg_Path_Invalid)" + Abort + ${EndIf} + + ${If} $INSTALL_TYPE == 4 + ${AndIf} ${FileExists} "$INSTDIR\opencpn.exe" + MessageBox MB_OK|MB_ICONSTOP "$(Msg_Path_Installation_Exists)" + Abort + ${EndIf} + FunctionEnd + + + + + +/* +;-------------------------------- +;# Page_Startmenu_Pre + Function Page_Startmenu_Pre + ${If} $Skip_Page_Startmenu == 1 + Abort + ${EndIf} + + ${If} $INSTALL_TYPE == 1 + ${OrIf} $INSTALL_TYPE == 2 + ${OrIf} $INSTALL_TYPE == 3 + ReadRegStr $0 HKLM "$Prev_Install_RegKey" "StartMenuFolder" + StrCpy $STARTMENU_FOLDER $0 + ${EndIf} + FunctionEnd +*/ +;-------------------------------- +/*# Page_SetConfig + Var Label_SetConfig + Var GroupBox_Language_SetConfig + Var CheckBox_Language_SetConfig + Var GroupBox_ChartDir_SetConfig + Var DirRequest_SetConfig + Var Button_Delete_SetConfig + Var Button_DeleteAll_SetConfig + Var Button_Add_SetConfig + Var ListBox_SetConfig +*/ + +/* + Function Page_SetConfig + ${If} $Skip_Page_SetConfig == 1 + Abort + ${EndIf} + !insertmacro MUI_HEADER_TEXT $(Page_SetConfig_Title) $(Page_SetConfig_Subtitle) + nsDialogs::Create /NOUNLOAD 1018 + Pop $0 + ${If} $0 == error + Abort + ${EndIf} + + ${NSD_CreateLabel} 0 0 100% 16u "$(Label_SetConfig_Text)" + Pop $Label_SetConfig + + ${NSD_CreateGroupBox} 0 20u 100% 30u "$(GB_Language_SetConfig_Text)" + Pop $GroupBox_Language_SetConfig + + ${NSD_CreateCheckBox} 10u 35u 100% 10u "$(CB_Language_SetConfig_Text)" + Pop $CheckBox_Language_SetConfig + ;StrCmp $CONFIG_SET_LANG "" cont + ${If} $CONFIG_SET_LANG == "" + ${NSD_SetState} $CheckBox_Language_SetConfig ${BST_CHECKED} + Goto cont + ${EndIf} + + StrCmp $CONFIG_SET_LANG 0 0 +2 + ${NSD_SetState} $CheckBox_Language_SetConfig ${BST_UNCHECKED} + StrCmp $CONFIG_SET_LANG 1 0 +2 + ${NSD_SetState} $CheckBox_Language_SetConfig ${BST_CHECKED} + + cont: + ${NSD_CreateGroupBox} 0 55u 100% 85u "$(GB_ChartDir_SetConfig_Text)" + Pop $GroupBox_ChartDir_SetConfig + + ${NSD_CreateButton} 220u 70u 60u 15u "$(BT_Delete_SetConfig_Text)" + Pop $Button_Delete_SetConfig + GetFunctionAddress $0 Button_Delete_SetConfig_Click + nsDialogs::OnClick /NOUNLOAD $Button_Delete_SetConfig $0 + + ${NSD_CreateButton} 220u 88u 60u 15u "$(BT_DeleteAll_SetConfig_Text)" + Pop $Button_DeleteAll_SetConfig + GetFunctionAddress $0 Button_DeleteAll_SetConfig_Click + nsDialogs::OnClick /NOUNLOAD $Button_DeleteAll_SetConfig $0 + + ${NSD_CreateButton} 220u 115u 60u 15u "$(BT_Browse_SetConfig_Text)" + Pop $Button_Add_SetConfig + GetFunctionAddress $0 Button_Add_SetConfig_Click + nsDialogs::OnClick /NOUNLOAD $Button_Add_SetConfig $0 + + ${NSD_CreateListBox} 10u 70u 200u 60u $(LB_SetConfig) + Pop $ListBox_SetConfig + GetFunctionAddress $0 ListBox_SetConfig_Change + nsDialogs::OnChange /NOUNLOAD $ListBox_SetConfig $0 + ${IfNot} $CHART_DIR_EMPTY == 1 + SetShellVarContext all + ${If} ${FileExists} "$TEMP\opencpn_chart_dirs.tmp" + ClearErrors + FileOpen $R0 "$TEMP\opencpn_chart_dirs.tmp" r + IfErrors end + loop: + ClearErrors + FileReadUTF16LE $R0 $1 + IfErrors end + ${TrimNewLines} $1 $1 + SendMessage $ListBox_SetConfig ${LB_ADDSTRING} 0 "STR:$1" + Goto loop + end: + FileClose $R0 + ${ElseIf} $INI_EXISTS == 1 + StrCpy $R2 0 + loop2: + IntOp $R2 $R2 + 1 + ReadINIStr $R1 "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" "ChartDirectories" "ChartDir$R2" + StrCmp $R1 "" cont2 + ${WordReplace} "$R1" "\\" "\" "+" $R3 + ${Explode} $R4 "^" "$R3" + Pop $R5 + StrCmp $R5 "" cont2 + SendMessage $ListBox_SetConfig ${LB_ADDSTRING} 0 "STR:$R5" + Goto loop2 + ${Else} + ReadRegStr $0 HKLM "Software\OpenCPN" "ChartDirs" + StrCmp $0 "" cont2 + ${Explode} $3 ";" "$0" + ${For} $1 1 $3 + Pop $2 + ${TrimNewLines} $2 $2 + SendMessage $ListBox_SetConfig ${LB_ADDSTRING} 0 "STR:$2" + ${Next} + ${EndIf} + ${EndIf} + + cont2: + Call ListBox_SetConfig_Change + nsDialogs::Show + FunctionEnd + + Function Button_Delete_SetConfig_Click + SendMessage $ListBox_SetConfig ${LB_GETCURSEL} 0 0 $0 + SendMessage $ListBox_SetConfig ${LB_DELETESTRING} $0 0 + Call ListBox_SetConfig_Change + FunctionEnd + + Function Button_DeleteAll_SetConfig_Click + SendMessage $ListBox_SetConfig ${LB_RESETCONTENT} 0 0 + Call ListBox_SetConfig_Change + FunctionEnd + + Function Button_Add_SetConfig_Click + Var /GLOBAL Initial_Dir + StrCmp $Initial_Dir "" 0 +3 + SetShellVarContext all + StrCpy $Initial_Dir "$DOCUMENTS" + nsDialogs::SelectFolderDialog /NOUNLOAD "$(Select_Chart_Directory)" "$Initial_Dir" + Pop $0 + ${If} $0 == error + Abort + ${EndIf} + StrCpy $Initial_Dir $0 + ${NSD_LB_GetCount} $ListBox_SetConfig $2 + ${If} $2 > 0 + SendMessage $ListBox_SetConfig ${LB_FINDSTRINGEXACT} -1 "STR:$0" $6 + ${IfNot} $6 < 0 + Goto end + ${EndIf} + ${EndIf} + SendMessage $ListBox_SetConfig ${LB_ADDSTRING} 0 "STR:$0" + end: + Call ListBox_SetConfig_Change + FunctionEnd + + Function ListBox_SetConfig_Change + ${NSD_LB_GetCount} $ListBox_SetConfig $0 + ${If} $0 > 0 + StrCpy $CHART_DIR_EMPTY 0 + ${NSD_LB_GetSelection} $ListBox_SetConfig $1 + ${If} $1 != "" + EnableWindow $Button_Delete_SetConfig 1 + ${Else} + EnableWindow $Button_Delete_SetConfig 0 + ${EndIf} + EnableWindow $Button_DeleteAll_SetConfig 1 + ${Else} + EnableWindow $Button_Delete_SetConfig 0 + EnableWindow $Button_DeleteAll_SetConfig 0 + StrCpy $CHART_DIR_EMPTY 1 + ${EndIf} + FunctionEnd + +*/ +/* +;-------------------------------- +# Page_SetConfig_Leave +# Var CHART_DIR_TMP_FILE + + Function Page_SetConfig_Leave + ${NSD_LB_GetCount} $ListBox_SetConfig $0 + ${If} $0 > 0 + ClearErrors + FileOpen $R0 "$TEMP\opencpn_chart_dirs.tmp" w + IfErrors done + IntOp $0 $0 - 1 + ${For} $1 0 $0 + SendMessage $ListBox_SetConfig ${LB_SETCURSEL} $1 0 + System::Call "User32::SendMessage(i $ListBox_SetConfig, i ${LB_GETTEXT}, i $1, t .r2)" + FileWriteUTF16LE $R0 $2 + FileWriteUTF16LE $R0 "$\r$\n" + ${Next} + FileClose $R0 + StrCpy $CHART_DIR_TMP_FILE 1 + ${Else} + StrCpy $CHART_DIR_EMPTY 1 + ${EndIf} + + done: + ${NSD_GetState} $CheckBox_Language_SetConfig $0 + ${If} $0 == ${BST_CHECKED} + StrCpy $CONFIG_SET_LANG 1 + ${Else} + StrCpy $CONFIG_SET_LANG 0 + ${EndIf} + FunctionEnd +*/ +;-------------------------------- +;# Page_Confirm + Var Install_Options + Var TEXT_INSTALL_OPTIONS + Function Page_Confirm + !insertmacro MUI_HEADER_TEXT $(Page_Confirm_Title) $(Page_Confirm_Subtitle) + ;# gather all installation settings and prepare (string) variable '$Install_Options' to display + ;# add the installation type to '$Install_Options' + StrCpy $Install_Options "$(Installation_Type):$\r$\n" + ${If} $Skip_Page_TypeInst != 1 + ${Switch} $INSTALL_TYPE + ${Case} 1 + StrCpy $Install_Options "$Install_Options$\t$(Type_Reinstall)" + ${Break} + ${Case} 2 + StrCpy $Install_Options "$Install_Options$\t$(Type_Upgrade)" + ${Break} + ${Case} 3 + StrCpy $Install_Options "$Install_Options$\t$(Type_Downgrade)" + ${Break} + ${Case} 4 + StrCpy $Install_Options "$Install_Options$\t$(Type_Parallel_Installation)" + ${Break} + ${Default} + ${Break} + ${EndSwitch} + ${Else} + StrCpy $Install_Options "$Install_Options$\t$(Type_Fresh_Installation)" + ${EndIf} + + ;# add the installation directory to '$Install_Options' + StrCpy $Install_Options "$Install_Options$\r$\n$\r$\n$(Installation_Directory):$\r$\n$\t$INSTDIR" + +/* + ;# add the delete config settings to '$Install_Options' + ${If} $CONFIG_EXISTS == 1 + ${AndIf} $CONFIG_EMPTY != 1 + StrCpy $Install_Options "$Install_Options$\r$\n$\r$\n$(Installation_Delete_Config):" + SectionGetFlags ${SecGrpResetConfig} $0 + SectionGetFlags ${SecGrpResetConfig} $1 + IntOp $0 $0 & ${SF_SELECTED} + IntOp $1 $1 & ${SF_PSELECTED} + StrCmp $0 0 +3 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecGrpResetConfig_Text)" + Goto cont + + StrCmp $1 0 none_selected 0 + SectionGetFlags ${SecDeleteConfigFile} $0 + IntOp $0 $0 & ${SF_SELECTED} + StrCmp $0 0 +2 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecDeleteConfigFile_Text)" + SectionGetFlags ${SecDeleteChartDB} $0 + IntOp $0 $0 & ${SF_SELECTED} + StrCmp $0 0 +2 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecDeleteChartDB_Text)" + SectionGetFlags ${SecDeleteSENC} $0 + IntOp $0 $0 & ${SF_SELECTED} + StrCmp $0 0 +2 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecDeleteSENC_Text)" + SectionGetFlags ${SecDeleteCM93} $0 + IntOp $0 $0 & ${SF_SELECTED} + StrCmp $0 0 +2 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecDeleteCM93_Text)" + SectionGetFlags ${SecDeleteNavobjFile} $0 + IntOp $0 $0 & ${SF_SELECTED} + StrCmp $0 0 +2 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecDeleteNavobjFile_Text)" + SectionGetFlags ${SecDeleteLogFile} $0 + IntOp $0 $0 & ${SF_SELECTED} + StrCmp $0 0 +2 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(SecDeleteLogFile_Text)" + Goto cont + + none_selected: + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(text_none)" + + cont: + ${EndIf} +*/ + +/* + ;# add the shortcut settings to '$Install_Options' + StrCpy $Install_Options "$Install_Options$\r$\n$\r$\n$(Create_Shortcuts):" + SectionGetFlags ${SecShortcutStartmenu} $0 + IntOp $0 $0 & ${SF_SELECTED} + ${If} $0 != 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(Create_Shortcut_Start_Menu): $STARTMENU_FOLDER" + StrCpy $2 1 + ${Else} + StrCpy $2 0 + ${EndIf} + + SectionGetFlags ${SecShortcutDesktop} $0 + IntOp $0 $0 & ${SF_SELECTED} + ${If} $0 != 0 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(Create_Shortcut_Desktop): $DESKTOP" + ${Else} + StrCmp $2 0 0 +2 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(text_none)" + ${EndIf} +*/ + +/* + ;# add the pre-config settings to '$Install_Options' + ${IfNot} ${SectionIsReadOnly} ${SecSetConfig} + ${AndIf} ${SectionIsSelected} ${SecSetConfig} + StrCpy $Install_Options "$Install_Options$\r$\n$\r$\n$(SecSetConfig_Text):" + StrCmp $CONFIG_SET_LANG 1 0 +2 + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(CB_Language_SetConfig_Text)" + StrCmp $CHART_DIR_TMP_FILE 1 0 end + IfFileExists "$TEMP\opencpn_chart_dirs.tmp" 0 end + StrCpy $Install_Options "$Install_Options$\r$\n$\t$(GB_ChartDir_SetConfig_Text)" + ClearErrors + FileOpen $0 "$TEMP\opencpn_chart_dirs.tmp" r + IfErrors end + ${Do} + FileReadUTF16LE $0 $1 + IfErrors done + ${TrimNewLines} $1 $1 + StrCmp $1 "" +2 + StrCpy $Install_Options "$Install_Options$\r$\n$\t - $1" + ${Loop} + done: + FileClose $0 + end: + ${EndIf} + ;# end '$Install_Options' +*/ + nsDialogs::Create /NOUNLOAD 1018 + Pop $0 + ${If} $0 == error + Abort + ${EndIf} + + nsDialogs::CreateControl EDIT "${__NSD_Text_STYLE}|${WS_VSCROLL}|${WS_HSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}|${ES_READONLY}" "${__NSD_Text_EXSTYLE}" 0 0 100% 100% "$Install_Options" + Pop $TEXT_INSTALL_OPTIONS + + nsDialogs::Show + FunctionEnd + +;# Page_Instfiles_Show + Function Page_Instfiles_Show + w7tbp::Start + FunctionEnd + +;-------------------------------- +;################################################################################################## +;# General Installer Functions # +;################################################################################################## +Function GetAllUsers + ReadRegStr $0 HKLM "System\CurrentControlSet\Control\ComputerName\ActiveComputerName" "ComputerName" + System::Call 'netapi32::NetUserEnum(w "\\$0",i 0,i 2,*i .R0,i ${NSIS_MAX_STRLEN}, *i .R1,*i .R2,*i .r1)i .r2' + StrCpy $R8 $R0 + IntOp $R2 $R2 - 1 + ${ForEach} $9 0 $R2 + 1 + System::Call "*$R0(w.R9)" + MessageBox MB_OK "[$R9]" + IntOp $R0 $R0 + 4 + ${Next} + System::Call 'netapi32.dll::NetApiBufferFree(i R8)i .R1' +FunctionEnd + + +Function Hide_SecGrpResetConfig + Push $0 + !insertmacro ClearSectionFlag ${SecDeleteConfigFile} ${SF_SELECTED} + SectionSetText ${SecDeleteConfigFile} "" + !insertmacro ClearSectionFlag ${SecDeleteChartDB} ${SF_SELECTED} + SectionSetText ${SecDeleteChartDB} "" + !insertmacro ClearSectionFlag ${SecDeleteSENC} ${SF_SELECTED} + SectionSetText ${SecDeleteSENC} "" + !insertmacro ClearSectionFlag ${SecDeleteCM93} ${SF_SELECTED} + SectionSetText ${SecDeleteCM93} "" + !insertmacro ClearSectionFlag ${SecDeleteNavobjFile} ${SF_SELECTED} + SectionSetText ${SecDeleteNavobjFile} "" + !insertmacro ClearSectionFlag ${SecDeleteLogFile} ${SF_SELECTED} + SectionSetText ${SecDeleteLogFile} "" + !insertmacro ClearSectionFlag ${SecGrpResetConfig} ${SF_SECGRP} + !insertmacro ClearSectionFlag ${SecGrpResetConfig} ${SF_SELECTED} + SectionSetFlags ${SecGrpResetConfig} 0 + SectionSetText ${SecGrpResetConfig} "" + IntOp $0 ${SecDeleteLogFile} + 1 + !insertmacro ClearSectionFlag $0 ${SF_SECGRPEND} + SectionSetText $0 "" + Pop $0 +FunctionEnd + + +Function Check_Config_Exists + ;# Look for config dir ("%APPDATA%\opencpn) and the several config files + SetShellVarContext all + + ${IfNot} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" + ${If} ${FileExists} "$USERS_APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" + CreateDirectory "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" + Sleep 250 + AccessControlW::GrantOnFile "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" "(BU)" "GenericRead + GenericExecute + GenericWrite + Delete + FullAccess" + CopyFiles /SILENT "$USERS_APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" + ${ElseIf} ${FileExists} "$ADMIN_APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" + CreateDirectory "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" + Sleep 250 + AccessControlW::GrantOnFile "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" "(BU)" "GenericRead + GenericExecute + GenericWrite + Delete + FullAccess" + CopyFiles /SILENT "$ADMIN_APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@" + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" + DeleteINISec "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" Directories + ${EndIf} + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\*.*" + StrCpy $CONFIG_EXISTS 1 + SectionSetText ${SecGrpResetConfig} $(SecGrpResetConfig_Text) + ${EndIf} + StrCpy $Count_SecGrpResetConfig 0 + ${If} $CONFIG_EXISTS == 1 + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" + StrCpy $INI_EXISTS 1 + IntOp $Count_SecGrpResetConfig $Count_SecGrpResetConfig + 1 + SectionSetText ${SecDeleteConfigFile} $(SecDeleteConfigFile_Text) + ${Else} + !insertmacro ClearSectionFlag ${SecDeleteConfigFile} ${SF_SELECTED} + SectionSetText ${SecDeleteConfigFile} "" + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\CHRTLIST.DAT" + StrCpy $CHARTDB_EXISTS 1 + IntOp $Count_SecGrpResetConfig $Count_SecGrpResetConfig + 1 + SectionSetText ${SecDeleteChartDB} $(SecDeleteChartDB_Text) + ${Else} + !insertmacro ClearSectionFlag ${SecDeleteChartDB} ${SF_SELECTED} + SectionSetText ${SecDeleteChartDB} "" + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\SENC\*.*" + StrCpy $SENC_EXISTS 1 + IntOp $Count_SecGrpResetConfig $Count_SecGrpResetConfig + 1 + SectionSetText ${SecDeleteSENC} $(SecDeleteSENC_Text) + ${Else} + !insertmacro ClearSectionFlag ${SecDeleteSENC} ${SF_SELECTED} + SectionSetText ${SecDeleteSENC} "" + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\cm93\*.*" + StrCpy $CM93_EXISTS 1 + IntOp $Count_SecGrpResetConfig $Count_SecGrpResetConfig + 1 + SectionSetText ${SecDeleteCM93} $(SecDeleteCM93_Text) + ${Else} + !insertmacro ClearSectionFlag ${SecDeleteCM93} ${SF_SELECTED} + SectionSetText ${SecDeleteCM93} "" + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\navobj.xml" + StrCpy $NAVOBJ_EXISTS 1 + IntOp $Count_SecGrpResetConfig $Count_SecGrpResetConfig + 1 + SectionSetText ${SecDeleteNavobjFile} $(SecDeleteNavobjFile_Text) + ${Else} + !insertmacro ClearSectionFlag ${SecDeleteNavobjFile} ${SF_SELECTED} + SectionSetText ${SecDeleteNavobjFile} "" + ${EndIf} + + ${If} ${FileExists} "$APPDATA\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.log" + StrCpy $LOG_EXISTS 1 + IntOp $Count_SecGrpResetConfig $Count_SecGrpResetConfig + 1 + SectionSetText ${SecDeleteLogFile} $(SecDeleteLogFile_Text) + ${Else} + !insertmacro ClearSectionFlag ${SecDeleteLogFile} ${SF_SELECTED} + SectionSetText ${SecDeleteLogFile} "" + ${EndIf} + + ${If} $Count_SecGrpResetConfig == 0 + StrCpy $CONFIG_EMPTY 1 + ${EndIf} + + !insertmacro ClearSectionFlag ${SecSetConfig} ${SF_SELECTED} + IntOp $0 ${SF_RO} | ${SF_BOLD} + SectionSetFlags ${SecSetConfig} $0 + ;SectionSetFlags ${SecSetConfig} ${SF_RO} + StrCpy $SetConfig 0 + ${EndIf} +FunctionEnd + + +Function Reg_Scan_Old_Versions_HKLM + ;# Registry look-up + ;# Versions prior to 2.2.727 write RegKey "OpenCPN_is1" to "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" + ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1 "DisplayName" + ${If} $0 != "" + ${StrFilter} "$0" "31" "." " " $1 + StrCpy $LM_VERSION "$1" + ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1 "UninstallString" + ${StrFilter} "$0" "" "" "$\"" $2 + ${If} ${FileExists} "$2" + ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1 "QuietUninstallString" + ${StrFilter} "$0" "" "" "$\"" $3 + StrCpy $LM_VERSION_UNINST $3 + ReadRegStr $4 HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1 "InstallLocation" + ${TrimNewLines} $4 $4 + ${If} ${FileExists} "$4opencpn.exe" + ${AndIf} ${FileExists} "$4unins*.exe" + ;# check if last character of $4 is a "\" and if so remove it + ${RIndexOf} $6 "$4" "\" + ${If} $6 == 1 + ${WordReplace} "$4" "\" "" "-1" $4 + ${EndIf} + + StrCpy $LM_VERSION_INST $4 + IntOp $OLD_INSTALLS $OLD_INSTALLS + 1 + ;StrCpy $VERSION_NEWER 1 + ${Else} + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN_is1" + StrCpy $LM_VERSION "" + StrCpy $LM_VERSION_UNINST "" + ${EndIf} + ${EndIf} + ${EndIf} +FunctionEnd + + +Function EnumProfileList + ${EnumHKU} Callback_EnumProfileList opencpn-inst-tmp-sid +FunctionEnd + + +Function Callback_EnumProfileList + ;# Get the SID or tmpkey from the stack + Pop $SID + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_users_sid.tmp" + FileOpen $R0 "$TEMP\opencpn_users_sid.tmp" a + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_users_sid.tmp" w + ${EndIf} + + IfErrors done + FileWriteUTF16LE $R0 "$SID" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$USERPROFILE" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + done: +FunctionEnd + + +Function Get_Users_Values + Var /GLOBAL tmp_file_handle + StrCpy $SID "" + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_users_sid.tmp" + FileOpen $tmp_file_handle "$TEMP\opencpn_users_sid.tmp" r + IfErrors end + ${Do} + FileReadUTF16LE $tmp_file_handle $SID + FileReadUTF16LE $tmp_file_handle $USERPROFILE + StrCmp $SID "" done + ${TrimNewLines} $SID $SID + ${TrimNewLines} $USERPROFILE $USERPROFILE + ;# List of functions to call + Call Users_Appdata_Paths + Call Users_StartMenu_Paths + Call Users_Desktop_Paths + Call Users_Personal_Paths + Call Reg_Scan_Old_Versions_HKCU + ${Loop} + done: + FileClose $tmp_file_handle + StrCpy $SID "" + StrCpy $USERPROFILE "" + ${EndIf} + end: +FunctionEnd + + +Function Users_Appdata_Paths + ReadRegStr $1 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" AppData + ${WordReplace} "$1" "%USERPROFILE%" "$USERPROFILE" "+" $2 + ExpandEnvStrings $2 $2 + StrCmp $2 "" done + + StrCpy $5 "none" + ;# check if an OpenCPN config folder exists in the given path + ${If} ${FileExists} "$2\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" + ReadINIStr $3 "$2\@CPACK_NSIS_PACKAGE_NAME_LC@\opencpn.ini" Directories S57DataLocation + ${WordReplace} "$3" "\\" "\" "+" $4 + ${WordFind} "$4" "\" "-2{*" $5 + StrCmp $5 "" 0 +2 + StrCpy $5 "none" + ${EndIf} + + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_appdata.tmp" + FileOpen $R0 "$TEMP\opencpn_appdata.tmp" a + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_appdata.tmp" w + ${EndIf} + IfErrors done + FileWriteUTF16LE $R0 "$SID" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$2" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$5" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + done: +FunctionEnd + + +Function Users_Personal_Paths + ReadRegStr $1 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" Personal + ${WordReplace} "$1" "%USERPROFILE%" "$USERPROFILE" "+" $2 + ExpandEnvStrings $2 $2 + + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_personal.tmp" + FileOpen $R0 "$TEMP\opencpn_personal.tmp" a + IfErrors done + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_personal.tmp" w + IfErrors done + ${EndIf} + + FileWriteUTF16LE $R0 "$SID" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$2" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + done: +FunctionEnd + + +Function Users_StartMenu_Paths + ReadRegStr $1 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" "Start Menu" + ${WordReplace} "$1" "%USERPROFILE%" "$USERPROFILE" "+" $2 + ExpandEnvStrings $2 $2 + + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_startmenu.tmp" + FileOpen $R0 "$TEMP\opencpn_startmenu.tmp" a + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_startmenu.tmp" w + ${EndIf} + IfErrors done + FileWriteUTF16LE $R0 "$SID" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$2" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + done: +FunctionEnd + + +Function Users_Desktop_Paths + ReadRegStr $1 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" Desktop + ${WordReplace} "$1" "%USERPROFILE%" "$USERPROFILE" "+" $2 + ExpandEnvStrings $2 $2 + + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_desktop.tmp" + FileOpen $R0 "$TEMP\opencpn_desktop.tmp" a + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_desktop.tmp" w + ${EndIf} + IfErrors done + FileWriteUTF16LE $R0 "$SID" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$2" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + done: +FunctionEnd + + +;Var latest_version +;Var latest_pathexe +Function Reg_Scan_Old_Versions_HKCU + ;# Versions from 2.2.727 up to 2.2.xxxx write RegKey "OpenCPN" to "HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\" + ;# and also RegKey "OpenCPN " to "HKCU\Software\opencpn.org\" + ;# Find latest installed version => it's the one found in "HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN" + + ReadRegStr $0 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN" "DisplayVersion" + ${If} $0 != "" + StrCpy $latest_version $0 + ReadRegStr $0 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN" "DisplayIcon" + StrCpy $latest_pathexe $0 + ReadRegStr $0 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN" "UninstallString" + ;StrCpy $CU_VERSION_UNINST $0 + ${WordFind} "$0" "\" "-2{*" $1 + ${If} ${FileExists} "$1\opencpn.exe" + ${AndIf} ${FileExists} "$1\unins*.exe" + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_old_uninstall_regkeys.tmp" + FileOpen $R0 "$TEMP\opencpn_old_uninstall_regkeys.tmp" a + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_old_uninstall_regkeys.tmp" w + ${EndIf} + + IfErrors done + FileWriteUTF16LE $R0 "$SID$\r$\n" + FileWriteUTF16LE $R0 "$SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN$\r$\n" + FileWriteUTF16LE $R0 "$1$\r$\n" + FileClose $R0 + ${Else} + DeleteRegKey HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenCPN" + ${EndIf} + ${EndIf} + + done: + ClearErrors + ${Do} + Pop $0 + IfErrors empty + ${Loop} + empty: + StrCpy $0 0 + StrCpy $1 "" + ${Do} + EnumRegKey $1 HKU "$SID\Software\opencpn.org" $0 + StrCmp $1 "" done1 + IntOp $0 $0 + 1 + Push $1 + ${Loop} + done1: + ${If} $0 > 0 + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_old_installs.tmp" + FileOpen $R0 "$TEMP\opencpn_old_installs.tmp" a + FileSeek $R0 0 END + ${Else} + FileOpen $R0 "$TEMP\opencpn_old_installs.tmp" w + ${EndIf} + IfErrors done2 + ${Do} + Pop $R1 + IfErrors finished + ${StrFilter} "$R1" "31" "." " " $R2 ;# R2 = version + ;StrCpy $CU_VERSION $R2 + ReadRegStr $R3 HKU "$SID\Software\opencpn.org\$R1" "" ;# R3 = install path + ReadRegStr $R4 HKU "$SID\Software\opencpn.org\$R1" "Start Menu Folder" ;# R4 = Start Menu Folder + ReadRegStr $R5 HKU "$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" "Start Menu" ;# R5 = Start Menu Path + ${WordReplace} "$R5" "%USERPROFILE%" "$USERPROFILE" "+" $R5 + ExpandEnvStrings $R5 $R5 + ;StrCpy $CU_VERSION_INST "$R3\" + ${If} "$R3\opencpn.exe" == $latest_pathexe + ${AndIf} $R2 != $latest_version + DeleteRegKey HKU "$SID\Software\opencpn.org\$R1" + ${ElseIf} ${FileExists} "$R3\opencpn.exe" + ${AndIf} ${FileExists} "$R3\unins*.exe" + FileWriteUTF16LE $R0 "$SID\Software\opencpn.org\$R1" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$R5\$R4" + FileWriteUTF16LE $R0 "$\r$\n" + FileWriteUTF16LE $R0 "$R3" + FileWriteUTF16LE $R0 "$\r$\n" + IntOp $OLD_INSTALLS $OLD_INSTALLS + 1 + ;StrCpy $VERSION_NEWER 1 + ${Else} + DeleteRegKey HKU "$SID\Software\opencpn.org\$R1" + DeleteRegKey /ifempty HKU "$SID\Software\opencpn.org" + ${EndIf} + ${Loop} + finished: + FileClose $R0 + ${Else} + DeleteRegKey HKU "$SID\Software\opencpn.org" + ${EndIf} + + done2: + StrCpy $latest_version "" + StrCpy $latest_pathexe "" +FunctionEnd + + +Function Quick_Scan_Old_Versions + ;# Scan the given Drive for file "opencpn.exe" + ${If} ${FileExists} "$TEMP\opencpn_personal.tmp" + ClearErrors + FileOpen $R0 "$TEMP\opencpn_personal.tmp" r + IfErrors end + ${Do} + FileReadUTF16LE $R0 $R1 + FileReadUTF16LE $R0 $R2 + IfErrors done + StrCmp $R2 "" done + ${TrimNewLines} $R2 $R2 + ${Locate} "$R2" "/L=F /M=opencpn.exe" "Found_OpenCPN_Installation" + ${Loop} + done: + FileClose $R0 + ${EndIf} + + end: + ${Locate} "$PROGRAMFILES" "/L=F /M=opencpn.exe" "Found_OpenCPN_Installation" +FunctionEnd + + +Function Found_OpenCPN_Installation + Push $R0 + Push $R1 + ${If} ${FileExists} "$R8\unins*.exe" + ${If} ${FileExists} "$TEMP\opencpn_prev_installs.tmp" + ClearErrors + FileOpen $R1 "$TEMP\opencpn_prev_installs.tmp" r + IfErrors cont + ${Do} + FileReadUTF16LE $R1 $R2 + FileReadUTF16LE $R1 $R3 + StrCmp $R2 "" done + ${TrimNewLines} $R2 $R2 + ${TrimNewLines} $R3 $R3 + StrCmp $R3 $R8 found + ${LoopUntil} $R2 == "" + done: + FileClose $R1 + Goto cont + + found: + FileClose $R1 + Goto end + ${EndIf} + + cont: + IntOp $counter_tmp $counter_tmp + 1 + ClearErrors + ${IfNot} ${FileExists} "$TEMP\opencpn_hdd_quick_scan.tmp" + FileOpen $R0 "$TEMP\opencpn_hdd_quick_scan.tmp" w + IfErrors end + ${Else} + FileOpen $R0 "$TEMP\opencpn_hdd_quick_scan.tmp" a + IfErrors end + FileSeek $R0 0 END + ${EndIf} + + FileWriteUTF16LE $R0 "$R8" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + ${EndIf} + + end: + Pop $R1 + Pop $R0 + Push $0 +FunctionEnd + + +;Var counter_tmp +Function Full_Scan_Old_Versions + ;# Get all HDD Drive Letters on the system + StrCpy $counter_tmp 0 + ${GetDrives} "HDD" "Scan_Drive" +FunctionEnd + + +Function Scan_Drive + ;# Scan the given Drive for file "opencpn.exe" + /*;#DEBUG - scan only crtain drives + ${IfNot} $9 == "D:\" + ;${AndIfNot} $9 == "F:\" + Goto end + ${EndIf} + ;#DEBUG End */ + StrCpy $3 "$(Banner_Scan_Drive)" + GetDlgItem $2 $Banner_Handle 76 + SendMessage $2 ${WM_SETTEXT} 0 "STR:$3" + ${Locate} "$9" "/L=F /M=opencpn.exe" "Found_OCPN_Exe" + end: + Push $0 +FunctionEnd + + +Function Found_OCPN_Exe + Push $1 + ClearErrors + StrCpy $1 0 + StrCpy $2 0 + ${WordFind} "$R8" "\RECYCLER\" "E*" $1 + ${WordFind} "$R8" "\$$Recycle.Bin" "E*" $2 + IfErrors 0 cont1 + ${If} $1 == 1 + ${AndIf} $2 == 1 + Goto cont2 + ${EndIf} + + cont1: + ${If} $1 > 0 + ${OrIf} $2 > 0 + Goto end + ${EndIf} + + cont2: + ${If} ${FileExists} "$R8\unins*.exe" + ${If} ${FileExists} "$TEMP\opencpn_prev_installs.tmp" + ClearErrors + FileOpen $R1 "$TEMP\opencpn_prev_installs.tmp" r + IfErrors cont3 + ${Do} + FileReadUTF16LE $R1 $R2 + FileReadUTF16LE $R1 $R3 + StrCmp $R2 "" done + ${TrimNewLines} $R2 $R2 + ${TrimNewLines} $R3 $R3 + StrCmp $R3 $R8 found + ${LoopUntil} $R2 == "" + done: + FileClose $R1 + Goto cont3 + + found: + FileClose $R1 + Goto end + ${EndIf} + + cont3: + IntOp $counter_tmp $counter_tmp + 1 + GetDlgItem $2 $Banner_Handle 1030 + StrCmp $counter_tmp 1 0 +3 + StrCpy $R4 "$(Banner_Installation_Found_Singular)" + Goto +2 + StrCpy $R4 "$(Banner_Installation_Found_Plural)" + SendMessage $2 ${WM_SETTEXT} 0 "STR:$R4" + SendMessage $ListBox_CleanUp ${LB_ADDSTRING} 0 "STR:$R8" + ClearErrors + ${IfNot} ${FileExists} "$TEMP\opencpn_hdd_full_scan.tmp" + FileOpen $R0 "$TEMP\opencpn_hdd_full_scan.tmp" w + IfErrors end + ${Else} + FileOpen $R0 "$TEMP\opencpn_hdd_full_scan.tmp" a + IfErrors end + FileSeek $R0 0 END + ${EndIf} + + FileWriteUTF16LE $R0 "$R8" + FileWriteUTF16LE $R0 "$\r$\n" + FileClose $R0 + end: + ${EndIf} + Pop $1 + Push $0 +FunctionEnd + + +Function Delete_Installation_Dir + StrCmp $Uninstall_Path_Tmp "" end + ;# Check subdirs and remove them recursive ... + ${If} ${FileExists} "$Uninstall_Path_Tmp\doc\*.*" + RMDir /r "$Uninstall_Path_Tmp\doc" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\lang\*.*" + RMDir /r "$Uninstall_Path_Tmp\lang" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\Microsoft.VC80.CRT\*.*" + RMDir /r "$Uninstall_Path_Tmp\Microsoft.VC80.CRT" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\s57data\*.*" + RMDir /r "$Uninstall_Path_Tmp\s57data" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\sounds\*.*" + RMDir /r "$Uninstall_Path_Tmp\sounds" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\TCDATA\*.*" + RMDir /r "$Uninstall_Path_Tmp\TCDATA" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\gshhs\*.*" + RMDir /r "$Uninstall_Path_Tmp\gshhs" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\plugins\*.*" + RMDir /r "$Uninstall_Path_Tmp\plugins" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\share\*.*" + RMDir /r "$Uninstall_Path_Tmp\share" + ${EndIf} + + ;# Check files and delete them ... + ${If} ${FileExists} "$Uninstall_Path_Tmp\opencpn.exe" + Delete "$Uninstall_Path_Tmp\opencpn.exe" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\license.txt" + Delete "$Uninstall_Path_Tmp\license.txt" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\unins000.dat" + Delete "$Uninstall_Path_Tmp\unins000.dat" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\unins000.exe" + Delete "$Uninstall_Path_Tmp\unins000.exe" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\install.log" + Delete "$Uninstall_Path_Tmp\install.log" + ${EndIf} + + ${If} ${FileExists} "$Uninstall_Path_Tmp\install.log" + Delete "$Uninstall_Path_Tmp\install.log" + ${EndIf} + + Push $0 + Push $1 + Push $2 + Push $R9 + Push $R8 + Push $R7 + Push $R6 + ;# Find the Uninstall file + ${Locate} "$Uninstall_Path_Tmp" "/L=F /M=Uninstall*.exe /G=0" "Delete_Located_File_Single" + ;# Find the wx.. DLLs + ${Locate} "$Uninstall_Path_Tmp" "/L=F /M=wx*.dll /G=0" "Delete_Located_File_Multi" + ;# Dummy call of Locate as it does not properly close its handle and so the dir cannot be deleted though it might be empty + ${Locate} "C:\" "/L=DE /M=*.* /G=0" "Dummy_Function" + + ;# Remove the installation dir ($Uninstall_Path_Tmp) if empty + RMDir "$Uninstall_Path_Tmp" + ${If} ${FileExists} "$Uninstall_Path_Tmp\*.*" + Sleep 250 + RMDir "$Uninstall_Path_Tmp" + ${EndIf} + + Pop $R6 + Pop $R7 + Pop $R8 + Pop $R9 + Pop $2 + Pop $1 + Pop $0 + end: +FunctionEnd + ;# Helper-Functions for Delete_Installation_Dir + Function Delete_Located_File_Single + Delete "$R9" + StrCpy $0 StopLocate + Push $0 + FunctionEnd + + Function Delete_Located_File_Multi + Delete "$R9" + Push $0 + FunctionEnd + + Function Dummy_Function + StrCpy $0 StopLocate + Push $0 + FunctionEnd + ;# End Helper-Functions + + +Function ExecAppFile + !insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\opencpn.exe' '' '$INSTDIR' '' + loop: + System::Call user32::GetForegroundWindow()i.r0 + Sleep 200 + IntCmpU $0 $hwndparent loop +FunctionEnd + + +Function DU2Pix + Pop $4 + Pop $3 + Pop $2 + Pop $1 + IntOp $1 $1 * $BU_X + IntOp $1 $1 / 4 + IntOp $2 $2 * $BU_Y + IntOp $2 $2 / 8 + IntOp $3 $3 * $BU_X + IntOp $3 $3 / 4 + IntOp $4 $4 * $BU_Y + IntOp $4 $4 / 8 +FunctionEnd + + +;!define LVM_GETITEMCOUNT 0x1004 ;# ANSI +;!define LVM_GETITEMTEXT 0x102D ;# ANSI +!define LVM_GETITEMCOUNT 0x1004 +!define LVM_GETITEMTEXT 0x1073 + +Function DumpLog + Exch $5 + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $6 + + FindWindow $0 "#32770" "" $HWNDPARENT + GetDlgItem $0 $0 1016 + StrCmp $0 0 error + FileOpen $5 $5 "w" + FileWriteWord $5 0xfeff ; Write the BOM + StrCmp $5 0 error + SendMessage $0 ${LVM_GETITEMCOUNT} 0 0 $6 + System::StrAlloc ${NSIS_MAX_STRLEN} + Pop $3 + StrCpy $2 0 + System::Call "*(i, i, i, i, i, i, i, i, i) i \ + (0, 0, 0, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1" + loop: StrCmp $2 $6 done + System::Call "User32::SendMessageW(i, i, i, i) i \ + ($0, ${LVM_GETITEMTEXT}, $2, r1)" + System::Call "*$3(&t${NSIS_MAX_STRLEN} .r4)" + FileWriteUTF16LE $5 "$4$\r$\n" + IntOp $2 $2 + 1 + Goto loop + done: + FileClose $5 + System::Free $1 + System::Free $3 + Goto exit + error: + MessageBox MB_OK error + exit: + Pop $6 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + Exch $5 +FunctionEnd + + +Function Write_Reg_ChartDirs + ClearErrors + FileOpen $R0 "$TEMP\opencpn_chart_dirs.tmp" r + IfErrors end + loop: + FileReadUTF16LE $R0 $R1 + IfErrors done + ${TrimNewLines} $R1 $R1 + ${If} $REG_CHARTDIRS == "" + StrCpy $REG_CHARTDIRS "$R1" + ${Else} + StrCpy $REG_CHARTDIRS "$REG_CHARTDIRS;$R1" + ${EndIf} + Goto loop + done: + FileClose $R0 + WriteRegStr HKLM "Software\OpenCPN" "ChartDirs" $REG_CHARTDIRS + end: +FunctionEnd + + +Function IndexOf + Exch $R0 + Exch + Exch $R1 + Push $R2 + Push $R3 + + StrCpy $R3 $R0 + StrCpy $R0 -1 + IntOp $R0 $R0 + 1 + StrCpy $R2 $R3 1 $R0 + StrCmp $R2 "" +2 + StrCmp $R2 $R1 +2 -3 + + StrCpy $R0 -1 + + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 +FunctionEnd + + +Function RIndexOf + Exch $R0 + Exch + Exch $R1 + Push $R2 + Push $R3 + + StrCpy $R3 $R0 + StrCpy $R0 0 + IntOp $R0 $R0 + 1 + StrCpy $R2 $R3 1 -$R0 + StrCmp $R2 "" +2 + StrCmp $R2 $R1 +2 -3 + + StrCpy $R0 -1 + + Pop $R3 + Pop $R2 + Pop $R1 + Exch $R0 +FunctionEnd + +;################################################################################################## +;# Uninstaller Functions # +;################################################################################################## +;# un.onInit Function +Function un.onInit + ;Prevent multiple instances of the uninstaller + ${IfNot} ${UAC_IsInnerInstance} + System::Call 'kernel32::CreateMutexW(i 0, i 0, t "ocpn_uninst_@CPACK_PACKAGE_VERSION@") i .r1 ?e' + Pop $R0 + StrCmp $R0 0 +3 + MessageBox MB_OK|MB_ICONEXCLAMATION "$(Uninstaller_Running)" + Abort + ${EndIf} + + Call un.GetUserInfo + StrCpy $USERS_NAME $USERNAME + + ;# Macros to be inserted + ${If} $IS_ADMIN == 1 + !insertmacro MUI_UNGETLANGUAGE + ${EndIf} + + StrCpy $USERS_APPDATA $APPDATA + + ;# UAC check if user has Admin privileges and prompt for elevation if not + uac_tryagain: + !insertmacro UAC_RunElevated + StrCpy $Inst_Or_Uninst "$(Uninstaller)" + ${Switch} $0 + ${Case} 0 + ${IfThen} $1 = 1 ${|} Quit ${|} ;# we are the outer process, the inner process has done its work, we are done + ${IfThen} $3 <> 0 ${|} ${Break} ${|} ;# we are admin, let the show go on + ${If} $1 = 3 ;# RunAs completed successfully, but with a non-admin user + MessageBox mb_IconExclamation|mb_TopMost|mb_SetForeground "$(Msg_UAC_Admin_Retry)" /SD IDNO IDOK uac_tryagain IDNO 0 + ${EndIf} + ;# fall-through and die + ${Case} 1223 + MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "$(Msg_UAC_Admin_Abort)" + Quit + ${Case} 1062 + MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "$(Msg_UAC_Logon_Abort)" + Quit + ${Default} + MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "$(Msg_UAC_No_Elevation)" + Quit + ${EndSwitch} + +########## from here we can be sure to run with admin privileges ########## + + SectionSetText ${UnSecDeleteConfigFolder} $(UnSecDeleteConfigFolder_Text) + + ClearErrors + Var /GLOBAL UN_INST_PARAMS + Var /GLOBAL UN_INST_HELP + Var /GLOBAL UN_INST_TYPE + StrCpy $UN_INST_TYPE "" + ${GetParameters} $UN_INST_PARAMS + StrCmp $UN_INST_PARAMS "" no_params + + ${GetOptions} "$UN_INST_PARAMS" "/?" $UN_INST_HELP + IfErrors +3 + StrCpy $UN_INST_HELP "help" + Goto end + + ClearErrors + ${GetOptions} "$UN_INST_PARAMS" "/type" $UN_INST_TYPE + IfErrors no_type_param + ${Switch} $UN_INST_TYPE + ${Case} "=1" ;# 1 = Program Files only (Remove/ Delete: Program Files) + StrCpy $UN_INST_TYPE 1 + !insertmacro ClearSectionFlag ${UnSecDeleteConfigFolder} ${SF_SELECTED} + !insertmacro ClearSectionFlag ${UnSecDeleteConfigRegKey} ${SF_SELECTED} + ${Break} + ${Case} "=2" ;# 2 = Preserve Config folder (Remove/ Delete: Program Files + RegKey) + StrCpy $UN_INST_TYPE 2 + !insertmacro ClearSectionFlag ${UnSecDeleteConfigFolder} ${SF_SELECTED} + ${Break} + ${Case} "=3" ;# 3 = Preserve RegKey (Remove/ Delete: Program Files + Config folder) + StrCpy $UN_INST_TYPE 3 + !insertmacro ClearSectionFlag ${UnSecDeleteConfigRegKey} ${SF_SELECTED} + SectionSetFlags ${UnSecBackupConfigToRegKey} ${SF_SELECTED} + ${Break} + ${Case} "=4" ;# 4 = Delete Config folder (Remove/ Delete: Config folder) + StrCpy $UN_INST_TYPE 4 + !insertmacro ClearSectionFlag ${UnSecUninstall} ${SF_SELECTED} + !insertmacro ClearSectionFlag ${UnSecDeleteConfigRegKey} ${SF_SELECTED} + SectionSetFlags ${UnSecBackupConfigToRegKey} ${SF_SELECTED} + ${Break} + ${Case} "=5" ;# 5 = Delete RegKey (Remove/ Delete: RegKey) + StrCpy $UN_INST_TYPE 5 + !insertmacro ClearSectionFlag ${UnSecUninstall} ${SF_SELECTED} + !insertmacro ClearSectionFlag ${UnSecDeleteConfigFolder} ${SF_SELECTED} + ${Break} + ${Default} + StrCpy $9 $UN_INST_TYPE + StrCpy $UN_INST_TYPE "error_type" ;# unknown value given for the type parameter => MsgBox => Quit + ${Break} + ${EndSwitch} + + StrCmp $UN_INST_TYPE "error_type" 0 cont + MessageBox MB_OK|MB_ICONEXCLAMATION "$(Msg_Unknown_Type_Param)" + Quit + + no_type_param: + ;# If no parameter 'type' is given assume full uninstall + StrCpy $UN_INST_TYPE 0 ;# 0 = Full Uninstall (Remove/ Delete: Program Files + Config folder + RegKey) + Goto cont + + no_params: + ;# If no parameters are given assume full uninstall + StrCpy $UN_INST_TYPE 0 ;# 0 = Full Uninstall (Remove/ Delete: Program Files + Config folder + RegKey) + + cont: + ;# Delete all temporary files created during the installation + Delete "$TEMP\opencpn_*.tmp" + + Call un.VersionDate + + Call un.Check_Prev_Installs + + ;# If there are other installations of OCPN do not remove the config folder! + ${If} $UN_INST_TYPE == 0 + ${AndIf} $VERSION_EXISTS == 1 + ${AndIf} $MULTIPLE_INSTALLS > 1 + StrCpy $Skip_UnPage_Components 1 + !insertmacro ClearSectionFlag ${UnSecDeleteConfigFolder} ${SF_SELECTED} + ${EndIf} + + ReadRegStr $0 HKLM "${REG_KEY_UN}" "CompareVersion" + + end: +FunctionEnd + + +Function un.myGuiInit + ${If} $UN_INST_HELP == "help" + MessageBox MB_OK|MB_ICONINFORMATION "$(Msg_Uninstaller_Param_Help)" + Quit + ${EndIf} +FunctionEnd + +;-------------------------------- +;################################################################################################## +;# Uninstaller Page Functions # +;################################################################################################## +/* + ;# UnPage_Components_Pre + Function un.Page_Components_Pre + ${If} $Skip_UnPage_Components == 1 + Abort + ${EndIf} + FunctionEnd +*/ +;-------------------------------- +;################################################################################################## +;# General Uninstaller Functions # +;################################################################################################## + + + +;-------------------------------- +;################################################################################################## +;# Shared Functions # +;################################################################################################## +!macro GetUserInfo_Macro un + Function ${un}GetUserInfo + ClearErrors + UserInfo::GetName + ${If} ${Errors} + StrCpy $IS_ADMIN 1 + Return + ${EndIf} + Pop $USERNAME + + UserInfo::GetAccountType + Pop $R0 + StrCpy $UAT $R0 + ${If} ${IsNT} + ${AndIf} ${IsWinNT4} + ${If} $R0 == "Admin" + StrCpy $IS_ADMIN 1 + ${Else} + StrCpy $IS_ADMIN 0 + ${EndIf} + Goto end + ${EndIf} + + ${Switch} $R0 + ${Case} "Admin" + ${Case} "Power" + StrCpy $IS_ADMIN 1 + ${Break} + ${Default} + StrCpy $IS_ADMIN 0 + ${Break} + ${EndSwitch} + + UserInfo::GetOriginalAccountType + Pop $OUAT + + end: + FunctionEnd +!macroend +!insertmacro GetUserInfo_Macro "" +!insertmacro GetUserInfo_Macro "un." + + +!macro Check_Prev_Installs_Macro un + Function ${un}Check_Prev_Installs + StrCpy $R0 0 + StrCpy $R1 "" + StrCpy $R5 0 + StrCpy $VERSION_EXISTS 0 + SetShellVarContext all + ${Do} + EnumRegKey $R1 SHCTX "${REG_ROOT_KEY_UN}" $R0 + ${If} $R1 != "" + StrLen $R2 $R1 + ${WordFind} "$R1" " " "+1" $R3 + IntOp $R0 $R0 + 1 + ${If} $R3 == "s63_pi" + ${AndIf} $R2 > 7 + ReadRegStr $R4 SHCTX "${REG_ROOT_KEY_UN}\$R1" "CompareVersion" + ReadRegStr $R6 SHCTX "${REG_ROOT_KEY_UN}\$R1" "InstallLocation" + ${If} $R4 != "" + ${VersionCompare} $VERSION_DATE $R4 $Compare_Version_Result + ${Switch} $Compare_Version_Result + ${Case} 0 ;equal + StrCpy $VERSION_EXISTS 1 + ${Break} + ${Case} 1 ;version to install is newer + StrCpy $VERSION_NEWER 1 + ${Break} + ${Case} 2 ;version to install is older + StrCpy $VERSION_OLDER 1 + ${Break} + ${Default} + ${Break} + ${EndSwitch} + IntOp $R5 $R5 + 1 + StrCpy $Prev_Install_RegKey "${REG_ROOT_KEY_UN}\$R1" + ${EndIf} + StrCmp ${un} "" 0 uninst ;# only execute when it is the Installer function + ${If} $R6 != "" + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_prev_installs.tmp" + FileOpen $0 "$TEMP\opencpn_prev_installs.tmp" a + FileSeek $0 0 END + ${Else} + FileOpen $0 "$TEMP\opencpn_prev_installs.tmp" w + ${EndIf} + IfErrors done + FileWriteUTF16LE $0 "$R1$\r$\n" + FileWriteUTF16LE $0 "$R6$\r$\n" + FileClose $0 + done: + ${EndIf} + + ${If} $VERSION_EXISTS == 1 + ${Break} + ${EndIf} + + uninst: + ${EndIf} + ${Else} + Goto done2 + ${EndIf} + ${Loop} + done2: + ${If} $R5 > 0 + StrCpy $MULTIPLE_INSTALLS $R5 + ${Else} + StrCpy $MULTIPLE_INSTALLS 0 + ${EndIf} + ${If} $MULTIPLE_INSTALLS == 0 + StrCpy $Skip_Page_TypeInst 1 + ${Else} + StrCpy $Skip_Page_TypeInst 0 + ${EndIf} + FunctionEnd +!macroend +!insertmacro Check_Prev_Installs_Macro "" +!insertmacro Check_Prev_Installs_Macro "un." + + +/* VersionDate + normalizes the CPACK_PACKAGE_VERSION_PATCH to a comparable format 'yyyy.[02|19].mmdd.00' + 02 = Beta version + 19 = Stable release + IN: CPACK_PACKAGE_VERSION_PATCH + OUT: $VERSION_DATE +*/ +Var Patch_Version +Var Version_Digits_Only +Var Version_Unified +Var Patch_Date +!macro VersionDate_Macro un + Function ${un}VersionDate + StrCpy $Patch_Version "@CPACK_PACKAGE_VERSION_PATCH@" + ${If} $Patch_Version == "" + StrCpy $Patch_Version "0000" + ${EndIf} + StrLen $0 "$Patch_Version" + ${StrFilter} "$Patch_Version" "1" "" "" $Version_Digits_Only + StrLen $1 $Version_Digits_Only + ;# Patch version contains non-digit characters + ${If} $0 != $1 + ${StrFilter} "$Patch_Version" "-2" "" "" $PATCH_ND + ${If} $1 == 3 + StrCpy $Version_Unified "b${YEAR}0$Patch_Version" + ${ElseIf} $1 == 2 + StrCpy $Version_Unified "s${YEAR}00$Patch_Version" + ${ElseIf} $1 == 1 + StrCpy $Version_Unified "s${YEAR}000$Patch_Version" + ${Else} + StrCpy $Version_Unified "b${YEAR}$Patch_Version" + ${EndIf} + ${VersionConvert} $Version_Unified "" $Patch_Date + StrCpy $VERSION_DATE "@CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@.$Patch_Date" + ;# Patch version contains only digits + ${Else} + ${If} $0 == 3 + StrCpy $Version_Unified "b${YEAR}0$Patch_Version" + ${ElseIf} $0 == 2 + StrCpy $Version_Unified "s${YEAR}00$Patch_Version" + ${ElseIf} $0 == 1 + StrCpy $Version_Unified "s${YEAR}000$Patch_Version" + ${Else} + StrCpy $Version_Unified "b${YEAR}$Patch_Version" + ${EndIf} + ${VersionConvert} $Version_Unified "" $Patch_Date + StrCpy $VERSION_DATE "@CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@.$Patch_Date.00" + ${EndIf} + FunctionEnd +!macroend +!insertmacro VersionDate_Macro "" +!insertmacro VersionDate_Macro "un." + + +!macro Delete_Start_Menu_Shortcuts_Macro un + Function ${un}Delete_Start_Menu_Shortcuts + Pop $9 + Push $R0 + Push $R1 + Push $R2 + Push $R3 + Push $R4 + ${TrimNewLines} $9 $9 + SetShellVarContext all + ${RecFindOpen} "$STARTMENU" $CurrentDirVar $CurrentFileVar + ${RecFindFirst} + ClearErrors + ${WordFind} "$CurrentFileVar" ".lnk" "E*" $8 + IfErrors next + IntCmp $8 1 0 next 0 + ShellLink::GetShortCutWorkingDirectory "$STARTMENU$CurrentDirVar\$CurrentFileVar" + Pop $0 + StrCmp "$0" "" +2 + StrCmp "$0" "$9" 0 next + ShellLink::GetShortCutTarget "$STARTMENU$CurrentDirVar\$CurrentFileVar" + Pop $1 + ${WordFind2X} "$1" "\" ".exe" "-1" $7 + ClearErrors + ${WordFind} "$7" "uninstall" "E*" $6 + IfErrors 0 +2 + StrCpy $6 0 + ;#NON-DEBUG + ${If} $7 == "opencpn" + ${OrIf} $7 == "Uninstall" + ${OrIf} $7 == "unins000" + ${OrIf} $6 == 1 + Delete "$STARTMENU$CurrentDirVar\$CurrentFileVar" + StrCmp $CurrentDirVar "" next + ClearErrors + RMDir "$STARTMENU$CurrentDirVar" + Sleep 250 + IfErrors 0 check_parent + ${If} ${FileExists} "$STARTMENU$CurrentDirVar\*.*" + ClearErrors + RMDir "$STARTMENU$CurrentDirVar" + Sleep 250 + IfErrors next check_parent + ${EndIf} + + Goto next + + check_parent: + StrCpy $R3 "$STARTMENU$CurrentDirVar" + Push $R3 + Call ${un}Parent_Dirs_Check + ${EndIf} + + next: + ${RecFindNext} + ${RecFindClose} + + ${If} ${FileExists} "$TEMP\opencpn_startmenu.tmp" + FileOpen $R0 "$TEMP\opencpn_startmenu.tmp" r + IfErrors end + ${Do} + FileReadUTF16LE $R0 $R1 + FileReadUTF16LE $R0 $R2 + ${TrimNewLines} $R1 $R1 + ${TrimNewLines} $R2 $R2 + StrCmp $R2 "" 0 +2 + ${Break} + ${RecFindOpen} "$R2" $CurrentDirVar $CurrentFileVar + ${RecFindFirst} + ClearErrors + ${WordFind} "$CurrentFileVar" ".lnk" "E*" $8 + IfErrors next1 + IntCmp $8 1 0 next1 0 + ShellLink::GetShortCutWorkingDirectory "$R2$CurrentDirVar\$CurrentFileVar" + Pop $0 + StrCmp "$0" "$9" 0 next1 + ShellLink::GetShortCutTarget "$R2$CurrentDirVar\$CurrentFileVar" + Pop $1 + ${WordFind2X} "$1" "\" ".exe" "-1" $7 + ;#NON-DEBUG + ${If} $7 == "opencpn" + ${OrIf} $7 == "Uninstall" + ${OrIf} $7 == "unins000" + Delete "$R2$CurrentDirVar\$CurrentFileVar" + StrCmp $CurrentDirVar "" next1 + ClearErrors + RMDir "$R2$CurrentDirVar" + Sleep 250 + IfErrors 0 check_parent1 + ${If} ${FileExists} "$R2$CurrentDirVar\*.*" + ClearErrors + RMDir "$R2$CurrentDirVar" + Sleep 250 + IfErrors next1 check_parent1 + ${EndIf} + + Goto next1 + + check_parent1: + StrCpy $R3 "$STARTMENU$CurrentDirVar" + Push $R3 + Call ${un}Parent_Dirs_Check + ${EndIf} + + next1: + ${RecFindNext} + ${RecFindClose} + ${LoopUntil} $R2 == "" + FileClose $R0 + ${EndIf} + + end: + Call ${un}Delete_Empty_Parents + + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + FunctionEnd +!macroend +!insertmacro Delete_Start_Menu_Shortcuts_Macro "" +!insertmacro Delete_Start_Menu_Shortcuts_Macro "un." + + +!macro Delete_Desktop_Shortcuts_Macro un + Function ${un}Delete_Desktop_Shortcuts + Pop $9 + Push $R0 + Push $R1 + Push $R2 + Push $R3 + ${TrimNewLines} $9 $9 + SetShellVarContext all + ${RecFindOpen} "$DESKTOP" $CurrentDirVar $CurrentFileVar + ${RecFindFirst} + ClearErrors + ${WordFind} "$CurrentFileVar" ".lnk" "E*" $8 + IfErrors next + IntCmp $8 1 0 next 0 + ShellLink::GetShortCutWorkingDirectory "$DESKTOP$CurrentDirVar\$CurrentFileVar" + Pop $0 + StrCmp "$0" "" +2 + StrCmp "$0" "$9" 0 next + ShellLink::GetShortCutTarget "$DESKTOP$CurrentDirVar\$CurrentFileVar" + Pop $1 + ${WordFind2X} "$1" "\" ".exe" "-1" $7 + ClearErrors + ${WordFind} "$7" "uninstall" "E*" $6 + IfErrors 0 +2 + StrCpy $6 0 + ;#NON-DEBUG + ${If} $7 == "opencpn" + ${OrIf} $7 == "Uninstall" + ${OrIf} $7 == "unins000" + ${OrIf} $6 == 1 + Delete "$DESKTOP$CurrentDirVar\$CurrentFileVar" + StrCmp $CurrentDirVar "" next + RMDir "$DESKTOP$CurrentDirVar" + Sleep 250 + IfErrors 0 check_parent + ${If} ${FileExists} "$DESKTOP$CurrentDirVar\*.*" + ClearErrors + RMDir "$DESKTOP$CurrentDirVar" + Sleep 250 + IfErrors next check_parent + ${EndIf} + + Goto next + + check_parent: + StrCpy $R3 "$DESKTOP$CurrentDirVar" + Push $R3 + Call ${un}Parent_Dirs_Check + ${EndIf} + + next: + ${RecFindNext} + ${RecFindClose} + + ${If} ${FileExists} "$TEMP\opencpn_desktop.tmp" + FileOpen $R0 "$TEMP\opencpn_desktop.tmp" r + IfErrors end + ${Do} + FileReadUTF16LE $R0 $R1 + FileReadUTF16LE $R0 $R2 + ${TrimNewLines} $R1 $R1 + ${TrimNewLines} $R2 $R2 + StrCmp $R2 "" 0 +2 + ${Break} + ${RecFindOpen} "$R2" $CurrentDirVar $CurrentFileVar + ${RecFindFirst} + ClearErrors + ${WordFind} "$CurrentFileVar" ".lnk" "E*" $8 + IfErrors next1 + IntCmp $8 1 0 next1 0 + ShellLink::GetShortCutWorkingDirectory "$R2$CurrentDirVar\$CurrentFileVar" + Pop $0 + StrCmp "$0" "$9" 0 next1 + ShellLink::GetShortCutTarget "$R2$CurrentDirVar\$CurrentFileVar" + Pop $1 + ${WordFind2X} "$1" "\" ".exe" "-1" $7 + ;#NON-DEBUG + ${If} $7 == "opencpn" + ${OrIf} $7 == "Uninstall" + ${OrIf} $7 == "unins000" + Delete "$R2$CurrentDirVar\$CurrentFileVar" + StrCmp $CurrentDirVar "" next1 + RMDir "$R2$CurrentDirVar" + Sleep 250 + IfErrors 0 check_parent1 + ${If} ${FileExists} "$R2$CurrentDirVar\*.*" + ClearErrors + RMDir "$R2$CurrentDirVar" + Sleep 250 + IfErrors next1 check_parent1 + ${EndIf} + + Goto next1 + + check_parent1: + StrCpy $R3 "$STARTMENU$CurrentDirVar" + Push $R3 + Call ${un}Parent_Dirs_Check + ${EndIf} + + next1: + ${RecFindNext} + ${RecFindClose} + ${LoopUntil} $R2 == "" + FileClose $R0 + ${EndIf} + + end: + Call ${un}Delete_Empty_Parents + + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + FunctionEnd +!macroend +!insertmacro Delete_Desktop_Shortcuts_Macro "" +!insertmacro Delete_Desktop_Shortcuts_Macro "un." + + +!macro Parent_Dirs_Check_Macro un + Function ${un}Parent_Dirs_Check + Pop $R3 + Push $R4 + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_check_parent.tmp" + FileOpen $R4 "$TEMP\opencpn_check_parent.tmp" a + IfErrors end + ${Else} + FileOpen $R4 "$TEMP\opencpn_check_parent.tmp" w + IfErrors end + ${EndIf} + + ${WordFind} "$R3" "\" "E-2{*" $R3 + IfErrors close + FileWriteUTF16LE $R4 "$R3$\r$\n" + + close: + FileClose $R4 + + end: + Pop $R4 + FunctionEnd +!macroend +!insertmacro Parent_Dirs_Check_Macro "" +!insertmacro Parent_Dirs_Check_Macro "un." + + +!macro Delete_Empty_Parents_Macro un + Function ${un}Delete_Empty_Parents + Push $R3 + Push $R4 + Push $R5 + ClearErrors + ${If} ${FileExists} "$TEMP\opencpn_check_parent.tmp" + FileOpen $R4 "$TEMP\opencpn_check_parent.tmp" r + IfErrors end + ${Do} + FileReadUTF16LE $R4 $R3 + IfErrors close + ${TrimNewLines} "$R3" $R3 + ${DirState} $R3 $R5 + StrCmp $R5 0 0 next + ClearErrors + RMDir "$R3" + Sleep 250 + IfErrors next + + loop: + ${WordFind} "$R3" "\" "E-2{*" $R3 + IfErrors next + StrCpy $error_tmp 0 + Push $R3 + Call ${un}Delete_Empty_Dir + StrCmp $error_tmp 1 loop + next: + ${Loop} + close: + FileClose $R4 + Delete "$TEMP\opencpn_check_parent.tmp" + ${EndIf} + end: + Pop $R5 + Pop $R4 + Pop $R3 + FunctionEnd +!macroend +!insertmacro Delete_Empty_Parents_Macro "" +!insertmacro Delete_Empty_Parents_Macro "un." + + +!macro Delete_Empty_Dir_Macro un + Function ${un}Delete_Empty_Dir + Push $R3 + Exch + Pop $R3 + Push $R4 + ${DirState} $R3 $R4 + StrCmp $R4 0 0 end + RMDir "$R3" + Sleep 100 + StrCpy $error_tmp 1 + + end: + Pop $R4 + Pop $R3 + FunctionEnd +!macroend +!insertmacro Delete_Empty_Dir_Macro "" +!insertmacro Delete_Empty_Dir_Macro "un." + + +; Initialize variables +Var explString +Var explSeparator +Var explStrLen +Var explSepLen +Var explOffset +Var explTmp +Var explTmp2 +Var explTmp3 +Var explArrCount +!macro Explodes_Macro un + Function ${un}Explode + /*; Initialize variables + Var /GLOBAL explString + Var /GLOBAL explSeparator + Var /GLOBAL explStrLen + Var /GLOBAL explSepLen + Var /GLOBAL explOffset + Var /GLOBAL explTmp + Var /GLOBAL explTmp2 + Var /GLOBAL explTmp3 + Var /GLOBAL explArrCount + */ + ; Get input from user + Pop $explString + Pop $explSeparator + + ; Calculates initial values + StrLen $explStrLen $explString + StrLen $explSepLen $explSeparator + StrCpy $explArrCount 1 + + ${If} $explStrLen <= 1 ; If we got a single character + ${OrIf} $explSepLen > $explStrLen ; or separator is larger than the string, + Push $explString ; then we return initial string with no change + Push 1 ; and set array's length to 1 + Return + ${EndIf} + + ; Set offset to the last symbol of the string + StrCpy $explOffset $explStrLen + IntOp $explOffset $explOffset - 1 + + ; Clear temp string to exclude the possibility of appearance of occasional data + StrCpy $explTmp "" + StrCpy $explTmp2 "" + StrCpy $explTmp3 "" + + ; Loop until the offset becomes negative + ${Do} + ; If offset becomes negative, it is time to leave the function + ${IfThen} $explOffset == -1 ${|} ${ExitDo} ${|} + + ; Remove everything before and after the searched part ("TempStr") + StrCpy $explTmp $explString $explSepLen $explOffset + + ${If} $explTmp == $explSeparator + ; Calculating offset to start copy from + IntOp $explTmp2 $explOffset + $explSepLen ; Offset equals to the current offset plus length of separator + StrCpy $explTmp3 $explString "" $explTmp2 + + Push $explTmp3 ; Throwing array item to the stack + IntOp $explArrCount $explArrCount + 1 ; Increasing array's counter + + StrCpy $explString $explString $explOffset 0 ; Cutting all characters beginning with the separator entry + StrLen $explStrLen $explString + ${EndIf} + + ${If} $explOffset = 0 ; If the beginning of the line met and there is no separator, + ; copying the rest of the string + ${If} $explSeparator == "" ; Fix for the empty separator + IntOp $explArrCount $explArrCount - 1 + ${Else} + Push $explString + ${EndIf} + ${EndIf} + + IntOp $explOffset $explOffset - 1 + ${Loop} + + Push $explArrCount + FunctionEnd +!macroend +!insertmacro Explodes_Macro "" +!insertmacro Explodes_Macro "un." + + +!macro isEmptyDir_Macro un + Function ${un}isEmptyDir + # Stack -> # Stack: + Exch $0 # Stack: $0 + Push $1 # Stack: $1, $0 + FindFirst $0 $1 "$0\*.*" + StrCmp $1 "." 0 _notempty + FindNext $0 $1 + StrCmp $1 ".." 0 _notempty + ClearErrors + FindNext $0 $1 + IfErrors 0 _notempty + FindClose $0 + Pop $1 # Stack: $0 + StrCpy $0 1 + Exch $0 # Stack: 1 (true) + Goto _end + _notempty: + FindClose $0 + Pop $1 # Stack: $0 + StrCpy $0 0 + Exch $0 # Stack: 0 (false) + _end: + FunctionEnd +!macroend +!insertmacro isEmptyDir_Macro "" +!insertmacro isEmptyDir_Macro "un." +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# D E S C R I P T I O N S # +;################################################################################################## +;# Installer Descriptions # +;################################################################################################## + +;# License page + LicenseLangString license ${LANG_ENGLISH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_GERMAN} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_FRENCH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_CZECH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_DANISH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_SPANISH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_ITALIAN} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_DUTCH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_POLISH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_PORTUGUESE} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_PORTUGUESEBR} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_RUSSIAN} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_SWEDISH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_FINNISH} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_NORWEGIAN} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_TRADCHINESE} "@CPACK_RESOURCE_FILE_LICENSE@" + LicenseLangString license ${LANG_TURKISH} "@CPACK_RESOURCE_FILE_LICENSE@" + ;LicenseLangString license ${LANG_HUNGARIAN} "@CPACK_RESOURCE_FILE_LICENSE@" + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecGrpResetConfig} $(SecGrpResetConfig_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecDeleteConfigFile} $(SecDeleteConfigFile_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecDeleteChartDB} $(SecDeleteChartDB_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecDeleteSENC} $(SecDeleteSENC_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecDeleteCM93} $(SecDeleteCM93_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecDeleteNavobjFile} $(SecDeleteNavobjFile_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecDeleteLogFile} $(SecDeleteLogFile_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecGrpShortcuts} $(SecGrpShortcuts_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcutStartmenu} $(SecShortcutStartmenu_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcutDesktop} $(SecShortcutDesktop_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${SecSetConfig} $(SecSetConfig_Desc) +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +;################################################################################################## +;# Uninstaller Descriptions # +;################################################################################################## +!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${UnSecDeleteConfigFolder} $(UnSecDeleteConfigFolder_Desc) +!insertmacro MUI_UNFUNCTION_DESCRIPTION_END + + +;-------------------------------------------------------------------------------------------------- +;################################################################################################## +;# Language Strings # +;################################################################################################## +;#DO NOT EDIT THE NEXT LINE!!! It is needed for the online generating of the translation files! +;#Language Strings Start as of: 2010-10-10 +;#IMPORTANT: Do not end a multi-line with $\" + + LangString Installer ${LANG_ENGLISH} "installer" + + LangString Uninstaller ${LANG_ENGLISH} "uninstaller" + + ;Installer running on unsupported version of Windows + LangString Installer_Unsupported_Windows_Version ${LANG_ENGLISH} "Your Windows version is not supported (it's too old)!$\r$\nYou need at least Windows XP SP3." + + ;Installer running on Windows XP without SP3 + LangString Installer_Unsupported_XP_SP_Version ${LANG_ENGLISH} "Your Windows XP Service Pack version is not supported (it's too old)!$\r$\nYou need at least Windows XP SP3." + + ;Installer already running + LangString Installer_Running ${LANG_ENGLISH} "The installer is already running." + + ;Uninstaller already running + LangString Uninstaller_Running ${LANG_ENGLISH} "The uninstaller is already running." + + ;Language Dialog + LangString LangDialog_Title ${LANG_ENGLISH} "@CPACK_PACKAGE_NAME@ @CPACK_PACKAGE_VERSION@ Installation" + + LangString LangDialog_Text ${LANG_ENGLISH} "Please select a language:" + + ;License dialog + LangString License_Message ${LANG_ENGLISH} "OpenCPN is software libre. You are encouraged and legally \ + entitled to copy, reinstall, modify, and redistribute this program \ + for yourself and your friends under the terms of the GPL. $\r$\nSmooth sailing!" + + ;Clean up page + LangString text_please_wait_1 ${LANG_ENGLISH} "... please wait!" + + LangString Scanning_HDD ${LANG_ENGLISH} "Scanning HDD ..." + + LangString OCPN_Scanning_HDD ${LANG_ENGLISH} "OpenCPN: Scan HDD ..., please wait!" + + LangString Search_old_installations ${LANG_ENGLISH} "Searching for old installations" + + LangString Install_Location_Default ${LANG_ENGLISH} "Install Locations by default paths (may not find all)" + + LangString Install_Location_HDD_Scan ${LANG_ENGLISH} "Install Location by full HDD scan (most reliable)" + + LangString Label_CleanUp_Text ${LANG_ENGLISH} "Click on a list-item to select/ unselect it or Select ALL (recommended) and then Uninstall selected." + + LangString BT_Uninstall_Selected_CleanUp ${LANG_ENGLISH} "Uninstall Selected" + + LangString BT_SelectAll_CleanUp ${LANG_ENGLISH} "Select ALL" + + LangString BT_UnselectAll_CleanUp ${LANG_ENGLISH} "Unselect ALL" + + LangString LB_CleanUp ${LANG_ENGLISH} "Listbox Text" + + LangString BT_FullScan_CleanUp ${LANG_ENGLISH} "Scan HDD ..." + + LangString LAB_FullScan_CleanUp ${LANG_ENGLISH} "Scan the HDD for the most reliable detection.$\r$\nATTENTION: may last several minutes!" + + LangString Page_CleanUp_Title ${LANG_ENGLISH} "Uninstall older Version" + + LangString Page_CleanUp_Subtitle ${LANG_ENGLISH} "Incompatible version detected" + + ;Components Page + ;Header + LangString CP_HEADER_TEXT ${LANG_ENGLISH} "Installation Settings" + + ;Subheader + LangString CP_HEADER_SUBTEXT ${LANG_ENGLISH} "Choose the settings for the installation" + + ;Top + LangString CP_TOP ${LANG_ENGLISH} "Check or uncheck the options for the installation.$\r$\nClick 'Next' to continue." + + ;Installation type + LangString CP_INSTTYPE ${LANG_ENGLISH} "Installation type:" + + ;Components list + LangString CP_COMPLIST ${LANG_ENGLISH} "Adjust the settings individually:" + + + ;Directory page + + + ;Set Config page + LangString Page_SetConfig_Title ${LANG_ENGLISH} "Default configuration settings" + + LangString Page_SetConfig_Subtitle ${LANG_ENGLISH} "Preconfigure settings for OpenCPN" + + LangString Select_Chart_Directory ${LANG_ENGLISH} "Please select a chart directory to add to OpenCPN" + + LangString BT_Browse_SetConfig_Text ${LANG_ENGLISH} "Browse..." + + LangString BT_DeleteAll_SetConfig_Text ${LANG_ENGLISH} "Delete ALL" + + LangString BT_Delete_SetConfig_Text ${LANG_ENGLISH} "Delete" + + LangString GB_ChartDir_SetConfig_Text ${LANG_ENGLISH} "Add Chart Directory" + + LangString CB_Language_SetConfig_Text ${LANG_ENGLISH} "Set OpenCPN program language to $LANG_NAME" + + LangString GB_Language_SetConfig_Text ${LANG_ENGLISH} "Set OpenCPN program language" + + LangString Label_SetConfig_Text ${LANG_ENGLISH} "Configure preconfig settings for the OpenCPN program.$\r$\nThese settings are saved in the file opencpn.ini." + + ;Confirm page + LangString Page_Confirm_Title ${LANG_ENGLISH} "Ready to Install" + + LangString Page_Confirm_Subtitle ${LANG_ENGLISH} "Check the installation options" + + LangString Installation_Type ${LANG_ENGLISH} "Setup type" + + LangString Installation_Directory ${LANG_ENGLISH} "Destination location" + + LangString Create_Shortcuts ${LANG_ENGLISH} "Create shortcuts" + + LangString Type_Reinstall ${LANG_ENGLISH} "Reinstallation" + + LangString Type_Upgrade ${LANG_ENGLISH} "Upgrade" + + LangString Type_Downgrade ${LANG_ENGLISH} "Downgrade" + + LangString Type_Parallel_Installation ${LANG_ENGLISH} "Parallel installation" + + LangString Type_Fresh_Installation ${LANG_ENGLISH} "New installation" + + LangString Shortcuts ${LANG_ENGLISH} "Shortcuts" + + LangString Create_Shortcut_Start_Menu ${LANG_ENGLISH} "in the Start Menu folder" + + LangString Create_Shortcut_Desktop ${LANG_ENGLISH} "on the Desktop" + + LangString not_selected ${LANG_ENGLISH} "not selected" + + LangString text_none ${LANG_ENGLISH} "none" + + ;Installer Sections + ;Reset config + LangString SecGrpResetConfig_Text ${LANG_ENGLISH} "Reset ALL OpenCPN configuration files" + + ;Delete Config file (opencpn.ini) + LangString SecDeleteConfigFile_Text ${LANG_ENGLISH} "Delete config file (opencpn.ini)" + + ;Delete Chart DB (CHRTLIST.DAT) + LangString SecDeleteChartDB_Text ${LANG_ENGLISH} "Delete Chart Database file (CHRTLIST.DAT)" + + ;Delete SENC directory + LangString SecDeleteSENC_Text ${LANG_ENGLISH} "Delete SENC directory" + + ;Delete CM93 directory + LangString SecDeleteCM93_Text ${LANG_ENGLISH} "Delete CM93 Directory" + + ;Delete Log file (opencpn.log) + LangString SecDeleteLogFile_Text ${LANG_ENGLISH} "Delete Log file (opencpn.log)" + + ;Delete navobj.xml + LangString SecDeleteNavobjFile_Text ${LANG_ENGLISH} "Delete Navobject file (navobj.xml)" + + ;Set config + LangString SecSetConfig_Text ${LANG_ENGLISH} "OpenCPN Configuration Settings" + + ;Set language + LangString SecSetConfigLang_Text ${LANG_ENGLISH} "Set language to $LANG_NAME" + + ;Set chart dir(s) + LangString SecSetConfigChartDir_Text ${LANG_ENGLISH} "Select Chart Directories" + + ;Uninstaller Sections + ;Reset config + LangString UnSecDeleteConfigFolder_Text ${LANG_ENGLISH} "Delete Config folder" + + ;Installer Descriptions + LangString SecGrpResetConfig_Desc ${LANG_ENGLISH} "Deletes ALL files and subdirectories in the configuration folder." + + LangString SecDeleteConfigFile_Desc ${LANG_ENGLISH} "Deletes the configuration file. This file helds also Routes and Waypoints." + + LangString SecDeleteChartDB_Desc ${LANG_ENGLISH} "Deletes the Chart DB file." + + LangString SecDeleteSENC_Desc ${LANG_ENGLISH} "Deletes the SENC subfolder which helds the Bitmaps and S57 chart cache files." + + LangString SecDeleteCM93_Desc ${LANG_ENGLISH} "Deletes the cm93 subfolder which helds the cached cm93 chart outlines." + + LangString SecDeleteNavobjFile_Desc ${LANG_ENGLISH} "Deletes the file 'navobj.xml' in the config folder. This file contains the Tracks." + + LangString SecDeleteLogFile_Desc ${LANG_ENGLISH} "Deletes the OpenCPN log file 'opencpn.log'." + + LangString SecGrpShortcuts_Desc ${LANG_ENGLISH} "Creates shortcuts in both, the Start Menu and on the Desktop." + + LangString SecShortcutStartmenu_Desc ${LANG_ENGLISH} "Creates shortcuts for OpenCPN and the Uninstaller in the Start Menu - configurable on the next page." + + LangString SecShortcutDesktop_Desc ${LANG_ENGLISH} "Creates a shortcut for OpenCPN on the Desktop." + + LangString SecSetConfig_Desc ${LANG_ENGLISH} "Preconfigure the language setting and the chart dir(s) for s63_pi. When selected a separate page is shown for configuration." + + ;Uninstaller Descriptions + LangString UnSecDeleteConfigFolder_Desc ${LANG_ENGLISH} "Deletes the config folder and all its files and subdirectories." + + ;Un-install Link + LangString Uninstall_Link ${LANG_ENGLISH} "Uninstall @CPACK_PACKAGE_NAME@ @CPACK_PACKAGE_VERSION@" + + ;Multiple Install > 1 + ;Title + LangString Page_TypeInst_Title ${LANG_ENGLISH} "Previous Installations" + + ;Subtitle + LangString Page_TypeInst_Subtitle ${LANG_ENGLISH} "$MULTIPLE_INSTALLS installations of s63_pi found.$\r$\nChoose how you want to install s63_pi." + + ;Multiple Install = 1 + ;Title + LangString Page_TypeInst_Title_1 ${LANG_ENGLISH} "Already Installed" + + ;Subtitle + LangString Page_TypeInst_Subtitle_1 ${LANG_ENGLISH} "Found installed version of s63_pi.$\r$\n" + + ;Version exists + ;Title + LangString Page_TypeInst_Title_Exists ${LANG_ENGLISH} "Version Already Installed" + + ;Subtitle + LangString Page_TypeInst_Subtitle_Exists ${LANG_ENGLISH} "s63_pi @CPACK_PACKAGE_VERSION@ is already installed.$\r$\nChoose how you want to install s63_pi." + + ;Label + LangString Label_TypeInst_Reinstall_Text ${LANG_ENGLISH} "s63_pi @CPACK_PACKAGE_VERSION@ is already installed on your system. You can reinstall the version now using the previous settings. If you wish to install the program with different settings, cancel installation and un-install the existing version first. Click Next to continue." + + ;Radio button 'Reinstall' + LangString RB_Reinstall_TypeInst_Text ${LANG_ENGLISH} "Reinstall using previous settings" + + ;Version newer + ;Label + LangString Label_TypeInst_Upgrade_Text ${LANG_ENGLISH} "An older version of s63_pi is installed on your system. Click Next to continue upgrade." + + ;Radio button 'Upgrade' + LangString RB_Upgrade_TypeInst_Text ${LANG_ENGLISH} "Upgrade s63_pi using previous settings (recommended)" + + ;Version older + ;Label + LangString Label_TypeInst_Downgrade_Text ${LANG_ENGLISH} "A newer version of s63_pi is installed on your system. It is not recommended to downgrade to an older version. Select the installation type you want to perform and click Next to continue." + + ;Radio button 'Downgrade' + LangString RB_Downgrade_TypeInst_Text ${LANG_ENGLISH} "Downgrade s63_pi using previous settings (recommended)" + + ;Multiple versions + ;Label + LangString Label_TypeInst_Parallel_Text ${LANG_ENGLISH} "Setup has detected several installed versions of s63_pi on your system. It is recommended to have only one version of s63_pi installed at a time. Select the operation you want to perform and click Next to continue." + + ;Radio button 'Parallel Installation' + LangString RB_Parallel_TypeInst_Text ${LANG_ENGLISH} "Parallel Installation (advanced users)" + + ;Empty string - needed for Components page + LangString EmptyString ${LANG_ENGLISH} "" + + ;Finish page + LangString Show_Readme_Text ${LANG_ENGLISH} "Show Install Log file" + + LangString Finish_Link_Text ${LANG_ENGLISH} "OpenCPN website (Internet connection required)" + + LangString Finish_Link_URL ${LANG_ENGLISH} "http://opencpn.info/?ref=installer&user=$USERS_NAME&lang=$REG_LANG&version=@CPACK_PACKAGE_VERSION@" + + ;Message Boxes + LangString Msg_UAC_Admin_Retry ${LANG_ENGLISH} "This $Inst_Or_Uninst requires admin access!$\r$\nPlease log on as an Administrator and try again." + + LangString Msg_UAC_Admin_Abort ${LANG_ENGLISH} "This $Inst_Or_Uninst requires admin privileges, aborting!" + + LangString Msg_UAC_Logon_Abort ${LANG_ENGLISH} "Logon service not running, aborting!" + + LangString Msg_UAC_No_Elevation ${LANG_ENGLISH} "Unable to elevate , error $0" + + LangString Msg_Error_Remove_InstDir ${LANG_ENGLISH} "The installation directory$\r$\n'$INSTDIR'$\r$\ncould not be removed because it is not empty." + + LangString Msg_Path_Invalid ${LANG_ENGLISH} "The entered path is invalid!$\r$\n$\r$\nPlease check your input." + + LangString Msg_Path_Installation_Exists ${LANG_ENGLISH} "There already exists an installation of s63_pi in the given path.$\r$\nIf you wish to use this path, first uninstall the version. Or select another path for this installation." + + LangString Msg_Uninstall_Old_Versions ${LANG_ENGLISH} "Setup has detected at least one older version of s63_pi which is not compatible with the new version control.$\r$\n\ + It is recommended to first uninstall all of these installations (this does not affect your Config files) and clean-up the Registry.$\r$\n\ + If you click Yes on the next page a listbox with all installation locations will be shown and you will have the possibility to select the installations you wish to uninstall.$\r$\n\ + If you are unsure about possible other previous installations than those shown in the listbox, you can also perform a scan of the entire \ + Harddisk (ATTENTION: This may take several minutes) to find all install locations (recommended).$\r$\n$\r$\n\ + Do you want to uninstall the old version(s)?" + + LangString Msg_Not_All_Old_Uninstalled ${LANG_ENGLISH} "You have not uninstalled all previous installations.$\r$\n$\r$\nDo you want to continue anyway?" + + LangString Msg_Uninstaller_Param_Help ${LANG_ENGLISH} "Uninstaller Help$\r$\n$\r$\nUse the command line or a shortcut to run the uninstaller:$\r$\n$INSTDIR\Uninstall @CPACK_PACKAGE_VERSION@.exe [/?] | [/S], [/type=X]$\r$\n$\r$\nParameters:$\r$\n/?$\tshows this help message box$\r$\n/S$\truns the uninstaller in silent mode$\r$\n$\twill do a full uninstall if called without any type parameter$\r$\n/type=X$\tX must be a digit between 1 and 5$\r$\n$\t1 = Removes only the program files$\r$\n$\t2 = Removes only the program files + preconfig RegKey$\r$\n$\t3 = Removes the program files + config folder$\r$\n$\tpreserves the preconfig RegKey$\r$\n$\t4 = Deletes only the config folder$\r$\n$\t5 = Deletes only the preconfig RegKey$\r$\n$\r$\nEntering any other number or value will quit the uninstaller with a message box without removing or deleting anything." + + LangString Msg_Unknown_Type_Param ${LANG_ENGLISH} "The entered value '$9' for the type parameter is not valid!$\r$\nUse $INSTDIR\Uninstall @CPACK_PACKAGE_VERSION@.exe /?$\r$\nto see a list of valid values." + + ;added on 2010-10-16 + LangString SecGrpShortcuts_Text ${LANG_ENGLISH} "Create Shortcuts" + + LangString SecShortcutStartmenu_Text ${LANG_ENGLISH} "Add Shortcuts to the Start Menu" + + LangString SecShortcutDesktop_Text ${LANG_ENGLISH} "Create Shortcut on the Desktop" + + LangString Installation_Delete_Config ${LANG_ENGLISH} "Delete (existing) Config Subdirectories/ Files" + + ;added on 2010-10-17 + LangString Banner_Scan_Drive ${LANG_ENGLISH} "Scanning Drive $9" + + LangString Banner_Installation_Found_Singular ${LANG_ENGLISH} "Found $counter_tmp installation" + + LangString Banner_Installation_Found_Plural ${LANG_ENGLISH} "Found $counter_tmp installations" + + ;added on 2010-10-21 + LangString Uninstall_Folder_Name ${LANG_ENGLISH} "Uninstall" + + ;added on 2011-06-13 + LangString ^NameDA ${LANG_ENGLISH} "@CPACK_PACKAGE_NAME@ Version @CPACK_PACKAGE_VERSION@" + LangString Installer ${LANG_ENGLISH} "Installer" + +;#EOF diff --git a/cmake/in-files/PluginCPackOptions.cmake.in b/cmake/in-files/PluginCPackOptions.cmake.in new file mode 100644 index 0000000..5379264 --- /dev/null +++ b/cmake/in-files/PluginCPackOptions.cmake.in @@ -0,0 +1,15 @@ +# --------------------------------------------------------------------------- +# Author: Jon Gough Copyright: 2020 License: GPLv3+ +# --------------------------------------------------------------------------- + +# This file contains changes needed during the make package process depending on the type of package being created + +if(CPACK_GENERATOR MATCHES "DEB") + set(CPACK_PACKAGE_FILE_NAME "@PACKAGING_NAME@") + if(CPACK_DEBIAN_PACKAGE_ARCHITECTURE MATCHES "x86_64") + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE @ARCH_DEB@) + endif() +else() + set(CPACK_PACKAGE_FILE_NAME "@PACKAGING_NAME_XML@") + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE @ARCH@) +endif() diff --git a/cmake/in-files/cloudsmith-upload.sh.in b/cmake/in-files/cloudsmith-upload.sh.in new file mode 100644 index 0000000..717bf88 --- /dev/null +++ b/cmake/in-files/cloudsmith-upload.sh.in @@ -0,0 +1,264 @@ +#!/usr/bin/env bash + +# +# Upload the .tar.gz and .xml artifacts to cloudsmith +# +# Builds are uploaded to one of PROD, BETA or ALPHA repositories +# The repository depends on the branch and use of tag to determine which repo. +# ALPHA: Non-master branch no tag +# BETA: Non-master branch with annotated tag +# BETA: Master branch no tag +# PROD: Master branch with annotated tag +# +# If this script is used on CIRCLECI, TRAVIS or APPVEYOR it will upload the correct files to the chosen repository +# If this script is used locally it will build the correct artifacts but will not do the upload +# + +set -xe + +PROD_REPO=${CLOUDSMITH_PROD_REPO:-'@CLOUDSMITH_USER@/@CLOUDSMITH_BASE_REPOSITORY@-@PROD@'} +BETA_REPO=${CLOUDSMITH_BETA_REPO:-'@CLOUDSMITH_USER@/@CLOUDSMITH_BASE_REPOSITORY@-@BETA@'} +ALPHA_REPO=${CLOUDSMITH_ALPHA_REPO:-'@CLOUDSMITH_USER@/@CLOUDSMITH_BASE_REPOSITORY@-@ALPHA@'} + +LOCAL_BUILD=false + +if [ "$CIRCLECI" ]; then + BUILD_ID=${CIRCLE_BUILD_NUM:-1} + BUILD_DIR=$HOME/project/build + BUILD_BRANCH=$CIRCLE_BRANCH + BUILD_TAG=$CIRCLE_TAG + PKG_EXT=${CLOUDSMITH_PKG_EXT:-'deb'} +elif [ "$TRAVIS" ]; then + BUILD_ID=${TRAVIS_BUILD_NUM:-1} + BUILD_DIR=$TRAVIS_BUILD_DIR/build + BUILD_BRANCH=$TRAVIS_BRANCH + BUILD_TAG=$TRAVIS_TAG + if [ "$BUILD_BRANCH" = "$BUILD_TAG" ]; then + # Travis makes BUILD_BRANCH = BUILD_TAG so make BUILD_BRANCH "" + BUILD_BRANCH="" + fi + PKG_EXT=${CLOUDSMITH_PKG_EXT:-'deb'} +elif [ "$APPVEYOR" ]; then + BUILD_ID=${APPVEYOR_BUILD_NUMBER:-1} + BUILD_DIR=$(pwd) + BUILD_BRANCH=$APPVEYOR_REPO_BRANCH + BUILD_TAG=$APPVEYOR_REPO_TAG_NAME + PKG_EXT=${CLOUDSMITH_PKG_EXT:-'exe'} +else + BUILD_ID=${CIRCLE_BUILD_NUM:-1} + BUILD_DIR=. + BUILD_BRANCH=$CIRCLE_BRANCH + BUILD_TAG=$CIRCLE_TAG + PKG_EXT=${CLOUDSMITH_PKG_EXT:-'deb'} + LOCAL_BUILD=true +fi + +set +x +if [ -z "$CLOUDSMITH_API_KEY" ] && [ "$LOCAL_BUILD" = "false" ]; then + echo 'Cannot deploy to cloudsmith, missing $CLOUDSMITH_API_KEY' + exit 0 +fi +set -x + +if [ "$CIRCLECI" ] || [ "$TRAVIS" ]; then + if [ "$DEPLOY_USE_ORB" != "true" ]; then + if pyenv versions 2>&1 >/dev/null; then + pyenv versions + version_1=$(python --version | cut -d '.' -f1 | cut -d ' ' -f2) + version_2=$(python --version | cut -d '.' -f2) + if [ $version_1 -lt 3 ] || [ $version_2 -lt 5 ]; then + sudo apt install software-properties-common + sudo apt update + sudo apt install -y python3.8 python3-pip + sudo rm /usr/bin/python3 + sudo ln -s /usr/bin/python3.8 /usr/bin/python3 + fi + python3 --version + sudo python3 -m pip install cloudsmith-cli + pyenv rehash + elif test -d $HOME/cs-venv; then + source $HOME/cs-venv/bin/activate + python -m pip install cloudsmith-cli + elif dnf --version 2>&1 >/dev/null; then + sudo dnf -y install python3-pip python3-setuptools + sudo python3 -m pip install -q cloudsmith-cli + elif apt-get --version 2>&1 >/dev/null; then + COUNTER=0 + sudo apt install software-properties-common + sudo apt update + sudo apt install -y python3.8 + sudo rm /usr/bin/python3 + sudo ln -s /usr/bin/python3.8 /usr/bin/python3 + until + sudo apt-get install python3-pip python3-setuptools + do + if [ "$COUNTER" -gt "20" ]; then + exit -1 + fi + sleep 5 + ((COUNTER++)) + done + sudo python3 -m pip install --upgrade pip + sudo python3 -m pip install -q cloudsmith-cli + fi + fi +fi + +commit=$(git rev-parse --short=7 HEAD) || commit="unknown" +tag=$(git tag --contains HEAD) + +ls -la +pwd +xml=$(ls $BUILD_DIR/*.xml) +cat $xml +tarball=$(ls $BUILD_DIR/*.tar.gz) +tarball_basename=${tarball##*/} +echo $tarball +echo $tarball_basename + +source $BUILD_DIR/pkg_version.sh +if [ -n "${OCPN_TARGET}" ]; then + tarball_name=@PACKAGE_NAME@-@PACKAGE_VERSION@-${PKG_TARGET}-@COMPOUND_ARCH_DASH@@PKG_TARGET_WX_VER@@PKG_BUILD_GTK@-${PKG_TARGET_VERSION}-${OCPN_TARGET}-tarball +else + tarball_name=@PACKAGE_NAME@-@PACKAGE_VERSION@-${PKG_TARGET}-@COMPOUND_ARCH_DASH@@PKG_TARGET_WX_VER@@PKG_BUILD_GTK@-${PKG_TARGET_VERSION}-tarball +fi + +if [ "$(ls $BUILD_DIR/*.${PKG_EXT})" ]; then + pkg=$(ls $BUILD_DIR/*.${PKG_EXT}) +else + pkg="" +fi + +echo $BUILD_BRANCH +echo $BUILD_TAG +echo ${#BUILD_TAG} +if [ "$BUILD_TAG" = "" ] && [ "$tag" != "" ]; then + BUILD_TAG=$tag + echo "Build tag: $BUILD_TAG" +fi +if [ "$BUILD_BRANCH" = "" ]; then + build_commit=$(git show -s --format=%d $BUILD_TAG) + is_master=$(echo $build_commit | awk '/\/master/ {print}') + if [ "$is_master" != "" ] || [ "$TRAVIS" ]; then + BUILD_BRANCH="master" + fi +fi + +BUILD_BRANCH_LOWER=`echo $BUILD_BRANCH | tr '[A-Z]' '[a-z]'` +if [ "$BUILD_BRANCH_LOWER" = "master" ]; then + echo "In master branch " + if [ -n "$BUILD_TAG" ]; then + echo "building with tag" + VERSION=$BUILD_TAG + REPO="$PROD_REPO" + else + VERSION="@PROJECT_VERSION@+${BUILD_ID}.${commit}" + echo "building without tag" + REPO="$BETA_REPO" + fi +else + echo "In non master branch " $BUILD_BRANCH + if [ -n "$BUILD_TAG" ]; then + echo "building with tag" + VERSION=$BUILD_TAG + REPO="$BETA_REPO" + else + echo "building without tag" + VERSION="@PROJECT_VERSION@+${BUILD_ID}.${commit}" + REPO="$ALPHA_REPO" + fi +fi +echo $VERSION +echo $REPO + +if [ "$APPVEYOR" ] || [ $LOCAL_BUILD=true ]; then + echo 'substituting xml file variables for windows build' + while read line; do + line=${line//--pkg_repo--/$REPO} + line=${line//--name--/$tarball_name} + line=${line//--version--/$VERSION} + line=${line//--filename--/$tarball_basename} + echo $line + done < "$xml" > xml.tmp && cat xml.tmp && cp xml.tmp $xml && rm xml.tmp +else + echo 'substituting xml file variables for non-windows build' + sudo sed -i -e "s|--pkg_repo--|$REPO|" $xml + sudo sed -i -e "s|--name--|$tarball_name|" $xml + sudo sed -i -e "s|--version--|$VERSION|" $xml + sudo sed -i -e "s|--filename--|$tarball_basename|" $xml +fi + +cat $xml +ls -l $BUILD_DIR +cur_dir=$(pwd) +gunzip -f $tarball +cd "$BUILD_DIR" +rm -f metadata.xml +tarball_tar=$(ls *.tar) +xml_here=$(ls *.xml) +cp -f $xml_here metadata.xml +if [ "$TRAVIS" ] || [ "$CIRCLECI" ] || [ ! -z ${LOCAL_DEPLOY+x} ]; then + mkdir build_tar + cp $tarball_tar build_tar/. + cd build_tar + tar -xf $tarball_tar + rm *.tar + rm -rf root + cp ../metadata.xml . + tar -cf build_tarfile.tar * + tar -tf build_tarfile.tar + rm ../$tarball_tar + cp build_tarfile.tar ../$tarball_tar + cd .. + rm -rf build_tar +else + tar -rf $tarball_tar metadata.xml +fi +tar -tf $tarball_tar +gzip -f $tarball_tar +pwd +cd "$cur_dir" +pwd +ls -la +ls -la ~/. + +# Find if file exists in directory +function have_any() { + [ $# -gt 0 ] +} + +if [ ! -z ${LOCAL_DEPLOY+x} ]; then + if [ -d "/home/circleci/circleci-output" ]; then + sudo cp build/*.gz ~/circleci-output + if have_any ./build/*.deb; then + sudo cp ./build/*.deb ~/circleci-output + elif have_any ./build/*.exe; then + sudo cp ./build/*.exe ~/circleci-output + fi + else + echo "Directory ~/circleci-output not found" + fi +elif [ $LOCAL_BUILD = false ]; then +# Only upload if the owner did the pull request. Non-owners probably don't have security to upload to the cloudsmith repository + if [ "$CIRCLE_PROJECT_USERNAME" = "$CIRCLE_USERNAME" ]; then + cloudsmith push raw --republish --no-wait-for-sync \ + --name @PACKAGE_NAME@-@PACKAGE_VERSION@-@PKG_TARGET@-@COMPOUND_ARCH_DASH@@PKG_TARGET_WX_VER@@PKG_BUILD_GTK@-@PKG_TARGET_VERSION@-${OCPN_TARGET}-metadata \ + --version ${VERSION} \ + --summary "@PACKAGE@ opencpn plugin metadata for automatic installation" \ + $REPO $xml + + cloudsmith push raw --republish --no-wait-for-sync \ + --name $tarball_name \ + --version ${VERSION} \ + --summary "@PACKAGE@ opencpn plugin tarball for automatic installation" \ + $REPO $tarball + + if [ "${PKG_EXT}" != "gz" ] && [ "$pkg" != "" ]; then + cloudsmith push raw --republish --no-wait-for-sync \ + --name opencpn-package-@PACKAGE@-@PACKAGE_VERSION@-@PKG_TARGET@-@COMPOUND_ARCH_DASH@@PKG_TARGET_WX_VER@@PKG_BUILD_GTK@-@PKG_TARGET_VERSION@-${OCPN_TARGET}.${PKG_EXT} \ + --version ${VERSION} \ + --summary "@PACKAGE@ .${PKG_EXT} installation package" \ + $REPO $pkg + fi + fi +fi diff --git a/cmake/in-files/flatpak_args.in b/cmake/in-files/flatpak_args.in new file mode 100644 index 0000000..5919f0e --- /dev/null +++ b/cmake/in-files/flatpak_args.in @@ -0,0 +1,13 @@ +# add flatpak-build args in here like this: +#finish-args: +# - --socket=x11 +# - --socket=pulseaudio +# - --filesystem=home +# - --device=all +# be carefull about indents and naming. +finish-args: + - --socket=x11 + - --socket=pulseaudio + - --filesystem=home + - --device=all + diff --git a/cmake/in-files/flatpak_extra_modules.in b/cmake/in-files/flatpak_extra_modules.in new file mode 100644 index 0000000..55a9479 --- /dev/null +++ b/cmake/in-files/flatpak_extra_modules.in @@ -0,0 +1,14 @@ +# add flatpak-options args in here like this: +# - name: libusb +# config-opts: +# - --disable-shared +# - --enable-static +# - --disable-udev +# - --prefix=/app/extensions/${PACKAGE} +# sources: +# - type: archive +# url: https://downloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.24/libusb-1.0.24.tar.bz2 +# sha256: 7efd2685f7b327326dcfb85cee426d9b871fd70e22caa15bb68d595ce2a2b12a +# cleanup: ["/include", "/lib/*.a", "/lib/*.la", "/lib/pkgconfig"] +# +# be carefull about indents and naming. diff --git a/cmake/in-files/flatpak_options.in b/cmake/in-files/flatpak_options.in new file mode 100644 index 0000000..71ebcbf --- /dev/null +++ b/cmake/in-files/flatpak_options.in @@ -0,0 +1,8 @@ +# add flatpak-options args in here like this: +#build-options: +# build-args: +# - --share=network +# be carefull about indents and naming. +build-options: + build-args: + - --share=network diff --git a/cmake/in-files/org.opencpn.OpenCPN.Plugin.yaml.in b/cmake/in-files/org.opencpn.OpenCPN.Plugin.yaml.in new file mode 100644 index 0000000..de722e0 --- /dev/null +++ b/cmake/in-files/org.opencpn.OpenCPN.Plugin.yaml.in @@ -0,0 +1,30 @@ +id: org.opencpn.OpenCPN.Plugin.${PACKAGE} +runtime: org.opencpn.OpenCPN +runtime-version: ${RUNTIME_VERSION} +sdk: org.freedesktop.Sdk//${SDK_VER} +build-extension: true +separate-locales: false +appstream-compose: false +${finish_args} +${build_options} + +modules: + - name: ${PACKAGE} + no-autogen: true + buildsystem: cmake + builddir: true + config-opts: + - -DCMAKE_INSTALL_PREFIX=/app/extensions/${PACKAGE} + - -DOCPN_FLATPAK_BUILD=ON + - -DOCPN_TARGET=${OCPN_TARGET} + - -DSDK_VER=${SDK_VER} + - -DWX_VER=${WX_VER} + build-options: + cflags: -fPIC + cxxflags: -fPIC -DFLATPAK + strip: true + sources: + - type: git + url: https://${GIT_REPOSITORY_SERVER}/${GIT_REPOSITORY} + ${GIT_BRANCH_OR_TAG}: ${GIT_REPOSITORY_ITEM} +${flatpak_extra_modules} diff --git a/cmake/in-files/pkg_version.sh.in b/cmake/in-files/pkg_version.sh.in new file mode 100644 index 0000000..b6e5c6a --- /dev/null +++ b/cmake/in-files/pkg_version.sh.in @@ -0,0 +1,11 @@ +# +# File is 'sourced' in script files to ensure the correct environment variables are created +# + +VERSION=@PACKAGE_VERSION@.@PKG_RELEASE@ +VERSION_DATE="@GIT_COMMIT_DATE@" +PKG_TARGET=@PKG_TARGET@ +PKG_TARGET_VERSION=@PKG_TARGET_VERSION@ + +# Opencpn api version, part of win32 installer name (major * 100 + minor). +OCPN_API_VERSION=@OCPN_API_VERSION_MAJOR@.@OCPN_API_VERSION_MINOR@ diff --git a/cmake/in-files/plugin.xml.in b/cmake/in-files/plugin.xml.in new file mode 100644 index 0000000..0e7229a --- /dev/null +++ b/cmake/in-files/plugin.xml.in @@ -0,0 +1,26 @@ + + + ${COMMON_NAME} + ${PACKAGE_VERSION} + ${PROJECT_VERSION_TWEAK} + ${XML_SUMMARY} + + ${OCPN_API_VERSION_MAJOR}.${OCPN_API_VERSION_MINOR} + yes + ${PACKAGE_CONTACT} + https://github.com/${GIT_REPOSITORY} + + + ${XML_DESCRIPTION} + + + ${PKG_TARGET_FULL} + ${PKG_BUILD_TARGET} + ${PKG_BUILT_WITH_GTK} + ${PKG_TARGET_VERSION} + ${ARCH} + + ${PKG_URL} + + ${XML_INFO_URL} + diff --git a/cmake/in-files/readme.txt b/cmake/in-files/readme.txt new file mode 100644 index 0000000..149fbc9 --- /dev/null +++ b/cmake/in-files/readme.txt @@ -0,0 +1,10 @@ +The files in this directory are not executed but are transformed or used by the build process. + +version.h.in is updated to include the current settings from CMakeLists.txt and put in a location that +is part of the include directory set. Source code that needs these settings just have to use: +#include "version.h" +at/near the top of the source code file. + +the wxWTranslateCatalog.h.in file is used to ensure that the plugins language files are accessed rather than +OpenCPN language files. This allows for change of context of words to be applied correctly. Without this there +can be confusion when a language uses a different word translation in different contexts. diff --git a/cmake/in-files/version.h.in b/cmake/in-files/version.h.in new file mode 100644 index 0000000..8325645 --- /dev/null +++ b/cmake/in-files/version.h.in @@ -0,0 +1,16 @@ +#define PLUGIN_NAME ${PROJECT_NAME} +#define PLUGIN_CATALOG_NAME wxS("opencpn-${PACKAGE_NAME}") +#define PLUGIN_VERSION_MAJOR ${VERSION_MAJOR} +#define PLUGIN_VERSION_MINOR ${VERSION_MINOR} +#define PLUGIN_VERSION_PATCH ${VERSION_PATCH} +#define PLUGIN_VERSION_TWEAK ${VERSION_TWEAK} +#define PLUGIN_VERSION_DATE "${VERSION_DATE}" +#define PLUGIN_COMMON_NAME "${COMMON_NAME}" +#define PLUGIN_SHORT_DESCRIPTION "${SHORT_DESCRIPTION}" +#define PLUGIN_LONG_DESCRIPTION "${LONG_DESCRIPTION}" +#define PLUGIN_PACKAGE_NAME "${PACKAGE_NAME}" +// API version of OCPN to use +#define OCPN_API_VERSION_MAJOR ${OCPN_API_VERSION_MAJOR} +#define OCPN_API_VERSION_MINOR ${OCPN_API_VERSION_MINOR} +// Include extra version settings if required +${EXTRA_VERSION_INFO} diff --git a/cmake/wxWTranslateCatalog.h.in b/cmake/in-files/wxWTranslateCatalog.h.in similarity index 90% rename from cmake/wxWTranslateCatalog.h.in rename to cmake/in-files/wxWTranslateCatalog.h.in index 834073c..1a07e2a 100644 --- a/cmake/wxWTranslateCatalog.h.in +++ b/cmake/in-files/wxWTranslateCatalog.h.in @@ -25,17 +25,17 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * *************************************************************************** */ -#ifndef _ODCATTRANS_H_ -#define _ODCATTRANS_H_ +#ifndef _PICATTRANS_H_ +#define _PICATTRANS_H_ #ifndef WXINTL_NO_GETTEXT_MACRO #ifdef _ #undef _ #endif // _ #if wxCHECK_VERSION(3,0,0) -#define _(s) wxGetTranslation((s), wxS("opencpn-${PROJECT_NAME}")) + #define _(s) wxGetTranslation((s), wxS("opencpn-${PACKAGE_NAME}")) #else // wxCHECK_VERSION(3,0,0) - #define _(s) wxGetTranslation(wxT(s), wxT("opencpn-${PROJECT_NAME}")) +#define _(s) wxGetTranslation(wxT(s), wxT("opencpn-${PACKAGE_NAME}")) #endif // wxCHECK_VERSION(3,0,0) #endif // WXINTL_NO_GETTEXT_MACRO diff --git a/cmake/readme.txt b/cmake/readme.txt new file mode 100644 index 0000000..54def7e --- /dev/null +++ b/cmake/readme.txt @@ -0,0 +1,22 @@ +The *.cmake files in this directory provide resources to build the make environment. However, the contents of these +files is mainly static, so this helps reduce the size and complexity of the main CMakeLists.txt file. + +The following files are manadatory for the cmake process to work: +pluginConfigure.cmake +PluginInstall.cmake +PluginLocalization.cmake +PluginPackage.cmake +PluginSetup.cmake + +These file should only be changed with great care as they use generalised processes to handle the generation of the +build environments. If you need to add functionality that you need for your plugin then add extra cmake files here +for your purpose. It is strongly suggested that you do not change these files as if updates to the process are +required it is much easier to do a file replace than identify what has changed. + +An example of an 'extra' cmake file can be seen with: +FindTinyXML.cmake + +Extra files are added to the CMakeLists.txt file by using an include statement such as: +include("cmake/FindTinyXML.cmake") + +Please be case sensitive as it may work on windows builds without this but Linux builds will not. diff --git a/cmake/version.h.in b/cmake/version.h.in deleted file mode 100644 index 0257c30..0000000 --- a/cmake/version.h.in +++ /dev/null @@ -1,3 +0,0 @@ -#define PLUGIN_VERSION_MAJOR ${PLUGIN_VERSION_MAJOR} -#define PLUGIN_VERSION_MINOR ${PLUGIN_VERSION_MINOR} -#define PLUGIN_VERSION_DATE "${PLUGIN_VERSION_DATE}" diff --git a/manual/.gitignore b/manual/.gitignore new file mode 100644 index 0000000..d8f8d46 --- /dev/null +++ b/manual/.gitignore @@ -0,0 +1 @@ +docs diff --git a/manual/antora.yml b/manual/antora.yml new file mode 100644 index 0000000..bbe3bd0 --- /dev/null +++ b/manual/antora.yml @@ -0,0 +1,3 @@ +name: rtlsdr +title: AIS RTLsdr USB +version: ~ diff --git a/manual/modules/ROOT/images/r820t.jpeg b/manual/modules/ROOT/images/r820t.jpeg new file mode 100644 index 0000000..7103920 Binary files /dev/null and b/manual/modules/ROOT/images/r820t.jpeg differ diff --git a/manual/modules/ROOT/images/rtlsdr.png b/manual/modules/ROOT/images/rtlsdr.png new file mode 100644 index 0000000..a97d236 Binary files /dev/null and b/manual/modules/ROOT/images/rtlsdr.png differ diff --git a/manual/modules/ROOT/pages/index.adoc b/manual/modules/ROOT/pages/index.adoc new file mode 100644 index 0000000..158269e --- /dev/null +++ b/manual/modules/ROOT/pages/index.adoc @@ -0,0 +1,116 @@ += RTLsdr USB AIS + +For AIS vhf and more on tv tuner usb dongle + +Use a low cost USB DVB-T (Digital TV) receiver for AIS messages from +Ships. Various dongles are supported, the r820-t works the best and is +also the cheapest (typically $8 US) + +image:r820t.jpeg[] + +== Links + +* Source: https://github.com/seandepagnier/rtlsdr_pi + +* Maintenance Source: https://github.com/rgleason/rtlsdr_pi + +* Download: https://opencpn.org/OpenCPN/plugins/rtlsdr.html[Website +Download] + +* Forum: http://www.cruisersforum.com/forums/f134/new-rtlsdr-plugin-102929.html[Rtlsdr Plugin] + +* French Blog https://1plus1blog.com/2017/04/19/fabriquer-un-recepteur-ais-avec-antenne-rtl-sdr-et-opencpn/[rtlsdr +and Opencpn] + +== 1. Installation + +* Install and Enable the plugin: xref:opencpn-plugins:misc:plugin-install.adoc[Instructions] + +RtlsdR_pi is available as a managed plugin. The OpenCPN Manual has general information in xref:opencpn-plugins:misc:plugin-install.adoc[Plugin Download, Install and Enable] for installing this plugin. This is the preferred way. + +In OpenCPN, go to the _Options → Plugins_ and download, install and enable the LogbookKonni plugin (no settings are required). + +* First "Update" the master plugins catalog. +* Select the rtlsdr_pi entry and "Install" the plugin. +* In the list of installed plugins "Enable" the sQuiddio plugin. +* After successful installation, the plugin should be available in the plugins tab of your OpenCPN options dialog box. + +=== A. Notes for Mac RTLSDR + +https://github.com/nohal/OpenCPN/wiki/RTL-SDR-AIS-on-macOS + +=== B. Hardware Setup: + +You must use a proper vhf antenna, not the one included with the dongle. +I cut the antenna coax included with the dongle, and spliced it to the +vhf coax. You must solder both inner and outer (shield) connections. + +=== C. Software Setup: + +==== Linux + +You must now compile rtl-sdr from source: + +[source,code] +---- +git clone git://git.osmocom.org/rtl-sdr.git +mkdir build +cd build +cmake .. +sudo make install +---- + +Next, you must have either aisdecoder or gnuradio (with gr-ais). + +For aisdecoder: + +[source,code] +---- +wget +http://www.aishub.net/downloads/ +aisdecoder +. +tar +. +gz tar zxvf aisdecoder.tar.gz +cd aisdecoder +mkdir build +cd build +cmake .. +sudo make install +---- + +For gnuradio with gr-ais: + +==== Windows + +You must run the program zadig to install the driver available here +https://zadig.akeo.ie/ The default settings should be fine. + +The receiver program (rtl_fm) and decoder (aisdecoder) are included as +pre-built binaries, so from here, install the plugin setup package. So +far I have no pre-built packages for gnuradio on windows, but this would +be useful if provided. If there are issues it may be helpful to install +the sdrsharp program to determine if the dongle is receiving data at +all. + +== 2. Preferences - All Platforms + +It should be possible (from the preferences dialog) to calibrate the +dongle with the Auto Calibrate button: + +image:rtlsdr.png[] + +From what I can tell so far, the error correction range is +- 128 (my +two dongles use values of 35 and 50) and must be within 5 for aisdecoder +and 15-20 for gnuradio. When the value is more accurate, more ais +messages are received as well. + +From here, install the plugin package, or build from source and install. +This works best in an area with a lot of ais traffic. Once calibrated, +ships should appear on the chart. + +== 3. Other Links + +http://tomdove.com/blog/ham-radio/software-defined-radio-sdr/[Software +Defined Radio by Tom Dove] + +https://www.rtl-sdr.com/rtl-sdr-tutorial-cheap-ais-ship-tracking/[RTL-SDR +Tutorial Cheap AIS Ship Tracking] + +xref:opencpn-plugins:misc:ais-devices.adoc[dAISy AIS Receiver Alternative] diff --git a/manual/site.yml b/manual/site.yml new file mode 100644 index 0000000..5349e33 --- /dev/null +++ b/manual/site.yml @@ -0,0 +1,20 @@ +site: + title: AIS RTLsdr USB + url: https://nowhere.net + start_page: rtlsdr:ROOT:index.adoc + +content: + sources: + - url: .. + start_path: manual + branches: HEAD + edit_url: https://github.com/opencpn-manuals/rtlsdr_pi/edit/master/{path} + +ui: + bundle: + url: https://gitlab.com/leamas/antora-ui-default/-/raw/master/latest/ui-bundle.zip + snapshot: true + +output: + dir: ./docs + clean: true diff --git a/mingw/fedora/README.md b/mingw/fedora/README.md new file mode 100644 index 0000000..033fb59 --- /dev/null +++ b/mingw/fedora/README.md @@ -0,0 +1,21 @@ +What's here? +============ + +Tools to build a windows 32-bit executable using the mingw toolchain. + +How? +==== + $ sudo dnf copr enable /opencpn-mingw + $ sudo dnf builddep opencpn-deps.spec + $ cd ../.. + $ rm -rf build; mkdir build + $ cd build; + $ cmake -DCMAKE_TOOLCHAIN_FILE=../mingw/fedora/toolchain.cmake .. + $ make + $ make package + +Notes: +===== +The build requires updated packages, notably wx3GTK, available at +https://copr.fedorainfracloud.org/coprs/leamas/opencpn-mingw. +The copr enable command above sets up access to this repo. diff --git a/mingw/fedora/opencpn-deps.spec b/mingw/fedora/opencpn-deps.spec new file mode 100644 index 0000000..2c1892c --- /dev/null +++ b/mingw/fedora/opencpn-deps.spec @@ -0,0 +1,69 @@ +Name: opencpn-deps +Version: 0.1 +Release: 1%{?dist} +Summary: Empty package with opencpn build dependencies + +License: MIT +URL: https://github.com/leamas/opencpn + +BuildRequires: binutils +BuildRequires: cmake +BuildRequires: gettext +BuildRequires: git +BuildRequires: make +BuildRequires: mingw-binutils-generic +BuildRequires: mingw-filesystem-base +BuildRequires: mingw32-binutils +BuildRequires: mingw32-bzip2 +BuildRequires: mingw32-cairo +BuildRequires: mingw32-curl +BuildRequires: mingw32-expat +BuildRequires: mingw32-filesystem +BuildRequires: mingw32-fontconfig +BuildRequires: mingw32-freetype +BuildRequires: mingw32-gcc +BuildRequires: mingw32-gcc-c++ +BuildRequires: mingw32-cpp +BuildRequires: mingw32-gettext +BuildRequires: mingw32-headers +BuildRequires: mingw32-glib2 +BuildRequires: mingw32-gtk2 +BuildRequires: mingw32-libarchive +BuildRequires: mingw32-libffi +BuildRequires: mingw32-libpng +BuildRequires: mingw32-libtiff +BuildRequires: mingw32-libxml2 +BuildRequires: mingw32-nsiswrapper +BuildRequires: mingw32-openssl +BuildRequires: mingw32-pcre +BuildRequires: mingw32-pixman +BuildRequires: mingw32-sqlite +BuildRequires: mingw32-win-iconv +BuildRequires: mingw32-wxWidgets3 >= 3.0.2 +BuildRequires: mingw32-xz-libs +BuildRequires: p7zip +BuildRequires: wget + +%description + +Empty package used to catch build dependencies for opencpn using +the mingw tools to create a Windows 32-bit executable + +Use dnf builddep opencpn-deps.spec to install the dependencies. + +%prep + + +%build + + +%install + + +%files +%doc COPYING + + +%changelog +* Fri Mar 01 2019 Alec Leamas - 0.1-1 +- Initial release diff --git a/mingw/fedora/toolchain.cmake b/mingw/fedora/toolchain.cmake new file mode 100644 index 0000000..96e95bf --- /dev/null +++ b/mingw/fedora/toolchain.cmake @@ -0,0 +1,18 @@ +# the name of the target operating system +SET(CMAKE_SYSTEM_NAME Windows) + +# which compilers to use for C and C++ +SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc) +SET(CMAKE_CXX_COMPILER i686-w64-mingw32-c++) +SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) + +# here is the target environment located +SET(CMAKE_FIND_ROOT_PATH + /usr/i686-w64-mingw32i;/usr/i686-w64-mingw32/sys-root/mingw) + +# adjust the default behaviour of the FIND_XXX() commands: +# search headers and libraries in the target environment, search +# programs in the host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/mingw/readme.txt b/mingw/readme.txt new file mode 100644 index 0000000..d612dc7 --- /dev/null +++ b/mingw/readme.txt @@ -0,0 +1,7 @@ +This directory structure is used by the mingw build process script file: +circleci-build-mingw.sh + +If new dependencies for the build need to be added then they should go in the file: +mingw/fedora/opencpn-deps.spec + +These dependencies can be subtally different from the other spec files being used diff --git a/msvc/win_deps.bat b/msvc/win_deps.bat new file mode 100644 index 0000000..67d2469 --- /dev/null +++ b/msvc/win_deps.bat @@ -0,0 +1,113 @@ +:: Install build dependencies. Requires a working choco installation, +:: see https://docs.chocolatey.org/en-us/choco/setup. +:: +:: Usage: +:: win_deps.bat [wx32] +:: +:: Arguments: +:: wx32: +:: If present install dependencies for building against +:: wxWidgets 3.2. If non-existing or anything but wx32 +:: build using 3.1 +:: Output: +:: cache\wx-config.bat: +:: Script which set wxWidgets_LIB_DIR and wxWidgets_ROOT_DIR +:: +:: Initial run will do choco installs requiring administrative +:: privileges. +:: +:: NOTE: at the very end, this script runs refreshenv. This clears the +:: process's PATH and replaces it with a fresh copy from the +:: registry. This means that any "set PATH=..." is lost for caller. + +:: Install the pathman tool: https://github.com/therootcompany/pathman +:: Fix PATH so it can be used in this script +:: + +@echo off +echo In win_deps + +setlocal enabledelayedexpansion + +if not exist %SCRIPTDIR%\..\cache ( mkdir %SCRIPTDIR%\..\cache ) +set "CONFIG_FILE=%SCRIPTDIR%\..\cache\wx-config.bat" +set EXTRA_PATH= + +git --version > nul 2>&1 +if errorlevel 1 ( + set "GIT_HOME=C:\Program Files\Git" + if not exist "!GIT_HOME!" choco install -y git +) +echo done git +:: Install choco cmake and add it's persistent user path element +:: +cmake --version > nul 2>&1 +if errorlevel 1 ( + set "CMAKE_HOME=C:\Program Files\CMake" + choco install -y --no-progress cmake + set "EXTRA_PATH=%CMAKE_HOME%\bin;%EXTRA_PATH%" +) + +:: Install choco poedit and add it's persistent user path element +:: +set "POEDIT_HOME=C:\Program Files (x86)\Poedit\GettextTools" +if not exist "%POEDIT_HOME%" (choco install -y poedit) +dir "%POEDIT_HOME%" +set "EXTRA_PATH=%POEDIT_HOME%\bin;%EXTRA_PATH%" + +:: Update required python stuff +:: +echo doing python +python --version > nul 2>&1 && python -m ensurepip > nul 2>&1 +if errorlevel 1 choco install -y python +python --version +python -m ensurepip +python -m pip install --upgrade pip +python -m pip install -q setuptools wheel +python -m pip install -q cloudsmith-cli +python -m pip install -q cryptography + +:: Install pre-compiled wxWidgets and other DLL; add required paths. +:: +set SCRIPTDIR=%~dp0 +if "%~1"=="wx32" ( + set "WXWIN=%SCRIPTDIR%..\cache\wxWidgets-3.2.1" + set "wxWidgets_ROOT_DIR=!WXWIN!" + set "wxWidgets_LIB_DIR=!WXWIN!\lib\vc14x_dll" + set "TARGET_TUPLE=msvc-wx32" +) else ( + set "WXWIN=%SCRIPTDIR%..\cache\wxWidgets-3.1.2" + set "wxWidgets_ROOT_DIR=!WXWIN!" + set "wxWidgets_LIB_DIR=!WXWIN!\lib\vc_dll" + set "TARGET_TUPLE=msvc" +) + +:: Add settings to CONFIG_FILE to allow them to be set in the calling batch file +echo set "EXTRA_PATH=%EXTRA_PATH%" > %CONFIG_FILE% +echo set "wxWidgets_ROOT_DIR=%wxWidgets_ROOT_DIR%" >> %CONFIG_FILE% +echo set "wxWidgets_LIB_DIR=%wxWidgets_LIB_DIR%" >> %CONFIG_FILE% +echo set "TARGET_TUPLE=%TARGET_TUPLE%" >> %CONFIG_FILE% + +if not exist "%WXWIN%" ( + wget --version > nul 2>&1 || choco install -y wget + if "%~1"=="wx32" ( + echo Downloading 3.2.1 + if not exist %SCRIPTDIR%..\cache\wxWidgets-3.2.1 ( + mkdir %SCRIPTDIR%..\cache\wxWidgets-3.2.1 + ) + set "GITHUB_DL=https://github.com/wxWidgets/wxWidgets/releases/download" + wget -nv !GITHUB_DL!/v3.2.1/wxMSW-3.2.1_vc14x_Dev.7z + 7z x -o%SCRIPTDIR%..\cache\wxWidgets-3.2.1 wxMSW-3.2.1_vc14x_Dev.7z + wget -nv !GITHUB_DL!/v3.2.1/wxWidgets-3.2.1-headers.7z + 7z x -o%SCRIPTDIR%..\cache\wxWidgets-3.2.1 wxWidgets-3.2.1-headers.7z + ) else ( + echo Downloading 3.1.2 + wget -O wxWidgets-3.1.2.7z -nv ^ + https://download.opencpn.org/s/E2p4nLDzeqx4SdX/download + 7z i > nul 2>&1 || choco install -y 7zip + 7z x wxWidgets-3.1.2.7z -o%WXWIN% + ) +) +dir cache +type "%CONFIG_FILE%" +refreshenv diff --git a/opencpn-libs b/opencpn-libs new file mode 160000 index 0000000..c1d8263 --- /dev/null +++ b/opencpn-libs @@ -0,0 +1 @@ +Subproject commit c1d82631756056437edc58235d9e1ff68b46ddf3 diff --git a/po/POTFILES.in b/po/POTFILES.in index a159985..4fb3eda 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,8 +1,12 @@ +src/rtlsdr_pi.cpp src/rtlsdrDialog.cpp -src/rtlsdrDialog.h src/rtlsdrPrefs.cpp -src/rtlsdrPrefs.h src/rtlsdrUI.cpp +src/icons.cpp +src/flights.cpp +src/FlightsDialog.cpp +src/georef.c +src/rtlsdrDialog.h +src/rtlsdrPrefs.h src/rtlsdrUI.h -src/rtlsdr_pi.cpp -src/rtlsdr_pi.h +src/georef.h diff --git a/po/ar_SA.po b/po/ar_SA.po new file mode 100644 index 0000000..b39d029 --- /dev/null +++ b/po/ar_SA.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Arabic\n" +"Language: ar_SA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: ar\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/bg_BG.po b/po/bg_BG.po new file mode 100644 index 0000000..c749f97 --- /dev/null +++ b/po/bg_BG.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/ca.po b/po/ca_ES.po similarity index 59% rename from po/ca.po rename to po/ca_ES.po index 5b04725..0614945 100644 --- a/po/ca.po +++ b/po/ca_ES.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Catalan\n" "Language: ca_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: ca\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "Decodificador d'AIS" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "Error de calibració rtlsdr" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Cap missatge AIS rebut\n" "Calibració ha fallat" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Com que el programari de ràdio no és un dispositiu de precisió, el va "Per realitzar el calibratge, l'Autocalibratge porta algun temps, però explorarà molts valors d'error a la recerca de senyals AIS. Això requereix un trànsit bastant freqüent d'AIS per funcionar.\n\n" "Alternativament, si s'instal·la gnuradio, pot utilitzar el script inclòs i, o bé buscar els pics de trànsit ais, o utilitzar una freqüència coneguda (per exemple, el canal VHF 8 és " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,35 +61,30 @@ msgstr ") a continuació, transmet amb transmissor VHF en aquest canal i compta "Quan funciona, haureu de ser capaços de veure les explosions (dades AIS) des del A i B\n" "A la sortida filtrada, i rebre missatges AIS (si n'hi ha algun disponible)\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Aquest Connector integra OpenCPN amb el projecte rtlsdr que converteix adaptadors TDT a receptors SDR. Veure: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"L'autor utilitza un adaptador TDT r820t amb una antena VHF estàndard però altres models funcionaran també. El cable coaxial de l'antena està empalmat amb el cable de l'adaptador. S'han de fer dues connexions interior i exterior.\n\n" -"Actualment amb la manera rtl_fm i aisdecoder només està disponible el canal AIS A. Aquest mètode usa molt poca CPU i és molt eficient. \n" -"En el mode gnuradio rep automàticament tots dos canals A i B simultàniament \n" -"però utilitza molta més CPU (degut a la implementació en python)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Sota el sistema operatiu de Windows, una vegada que el dispositiu està connectat, primer cal que executeu el programa d'utilitat 'zadig' per a instal·lar el controlador usb necessari.\n" "Podeu trobar aquest programa en http://zadig.akeo.ie \n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Missatges" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Activat" @@ -98,135 +100,179 @@ msgstr "Elimina" msgid "Close" msgstr "Tancar" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programa" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdecoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "Arguments complementaris (Blanc per defecte)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Freqüència de mostreig (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Calibratge de correcció d'error" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Correcció d'Error" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Calibratge automàtic" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Manual mitjançant grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "traçat" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "Ràdio FM" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "Àudio VHF" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Ràdio FM" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Soroll de fons" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "Àudio VHF" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Sobre l'autor" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Informació" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "Preferències rtlsdr" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "Connector rtlsdr per a OpenCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "Connector rtlsdr per a OpenCPN\n" -"aquest connector llegeix les sentències NMEA des dels scripts gr-ais ais_rx.py\n" -"Suporta les ràdios FM i VHF ADS-b\n" -"La versió final haurà de enllaçar amb la ràdio gnu directament.\n\n" -"El connector rtlsdr ha estat escrit per Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "L´execució ha fallat" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Freqüència d'FM no vàlida" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Mode de desconegut" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Executat: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "No s'ha pogut obrir: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Executat: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Es va aturar: " diff --git a/po/cs.po b/po/cs_CZ.po similarity index 52% rename from po/cs.po rename to po/cs_CZ.po index 32d88ce..9753dff 100644 --- a/po/cs.po +++ b/po/cs_CZ.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: crowdin.com\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: cs\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/da.po b/po/da_DK.po similarity index 54% rename from po/da.po rename to po/da_DK.po index 4bdf52a..8eb3513 100644 --- a/po/da.po +++ b/po/da_DK.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: da\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100644 index 0000000..cfa4e00 --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,280 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: German\n" +"Language: de_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: de\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "rtlsdr Fehlerkalibrierung" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "Keine AIS-Meldungen empfangen\n" +"Kalibrierung fehlgeschlagen" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Weil das Software Radio kein Präzisionsgerät ist, muss der Fehlerwert festgelegt werden, um den Radio-Dongle richtig zu kalibrieren.\n\n" +"Um die Kalibrierung durchzuführen, dauert die Selbstkalibrierung einige Zeit, wird aber viele Fehlerwerte auf der Suche nach AIS-Signalen scannen. Dazu ist regelmäßiger AIS-Verkehr erforderlich.\n\n" +"Wenn Gnuradio installiert ist, können Sie alternativ das mitgelieferte Skript nutzen und entweder Spitzen im Ais-Verkehr suchen oder eine bekannte Frequenz (z. B. UKW Kanal 8) verwenden " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "und senden auf dieser Frequenz, um festzustellen, wie weit die Spitze von der wahren Frequenz in khz entfernt ist. Das ist dann der Fehlerwert zum Kalibrieren des Dongle.\n\n" +"Wenn es funktioniert, sollten Sie die Häufungen (AIS-Daten) der beiden Kanäle A und B am gefilterten Ausgang sehen können und AIS-Nachrichten empfangen (falls vorhanden).\n" +" \n" +"\n" +"in die gefilterte Ausgabe sehen, und Ais-Mitteilungen zu erhalten, (falls vorhanden) \n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "Unter Windows muss erst das Programm \"zadig\" ausgeführt werden, um den benötigten USB-Treiber zu installieren nachdem das Gerät verbunden wurde.\n" +"Sie finden das Programm unter http://zadig.akeo.ie\n\n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Mitteilungen" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Aktiviere" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Einstellungen" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Eingabe löschen" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Schließen" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Programm" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | aisdecoder" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "zusätzliche Argumente (leer ist Standard)" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Abtastrate (kHz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Fehler-Korrektur-Kalibrierung" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Fehlerkorrektur" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Autokalibrierung" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Handbuch über grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "Info" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100.4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "MHz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "UKW-Radio" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "Rauschunterdrückung" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "UKW Audio" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Über den Autor" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Information" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "rtlsdr Einstellungen" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Ausführung fehlgeschlagen" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Ungültige Frequenz" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Unbekannte Betriebsart" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Fehler beim Öffnen: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Ausgeführt: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Beendet: " + diff --git a/po/el.po b/po/el.po deleted file mode 100644 index a06f73f..0000000 --- a/po/el.po +++ /dev/null @@ -1,218 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: opencpn\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" -"Language-Team: Greek\n" -"Language: el_GR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" -"X-Crowdin-Project: opencpn\n" -"X-Crowdin-Language: el\n" -"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" - -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "" - -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "" - -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "" - -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 -msgid "rtlsdr error calibration" -msgstr "Βαθνομήση σφάλματος rtlsdr" - -#: src/rtlsdrPrefs.cpp:166 -msgid "No AIS messages received\n" -"Calibration Failed" -msgstr "" - -#: src/rtlsdrPrefs.cpp:183 -msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" -"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" -"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " -msgstr "" - -#: src/rtlsdrPrefs.cpp:192 -msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" -"Once working, you should be able to see bursts (ais data) from the A and B\n" -"in the filtered output, and receive ais messages (if any are available)\n" -msgstr "" - -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 -msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "" - -#: src/rtlsdrPrefs.cpp:215 -msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" -"You can find this program at http://zadig.akeo.ie\n\n" -msgstr "" - -#: src/rtlsdrUI.cpp:24 -msgid "Messages" -msgstr "" - -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 -msgid "Enable" -msgstr "" - -#: src/rtlsdrUI.cpp:50 -msgid "Preferences" -msgstr "" - -#: src/rtlsdrUI.cpp:53 -msgid "Clear" -msgstr "" - -#: src/rtlsdrUI.cpp:56 -msgid "Close" -msgstr "" - -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "" - -#: src/rtlsdrUI.cpp:116 -msgid "Program" -msgstr "" - -#: src/rtlsdrUI.cpp:120 -msgid "rtl_fm | aisdecoder" -msgstr "" - -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "" - -#: src/rtlsdrUI.cpp:130 -msgid "extra args (blank default)" -msgstr "" - -#: src/rtlsdrUI.cpp:163 -msgid "Sample Rate (khz)" -msgstr "" - -#: src/rtlsdrUI.cpp:174 -msgid "Error Correction Calibration" -msgstr "" - -#: src/rtlsdrUI.cpp:181 -msgid "Error Correction" -msgstr "" - -#: src/rtlsdrUI.cpp:188 -msgid "Auto Calibrate" -msgstr "" - -#: src/rtlsdrUI.cpp:191 -msgid "Manual via grc" -msgstr "" - -#: src/rtlsdrUI.cpp:194 -msgid "Info" -msgstr "" - -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "" - -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "" - -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "" - -#: src/rtlsdrUI.cpp:251 -msgid "100.4" -msgstr "" - -#: src/rtlsdrUI.cpp:254 -msgid "Mhz" -msgstr "" - -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "" - -#: src/rtlsdrUI.cpp:275 -msgid "16" -msgstr "" - -#: src/rtlsdrUI.cpp:278 -msgid "WX" -msgstr "" - -#: src/rtlsdrUI.cpp:281 -msgid "Squelch" -msgstr "" - -#: src/rtlsdrUI.cpp:303 -msgid "About Author" -msgstr "" - -#: src/rtlsdrUI.cpp:306 -msgid "Information" -msgstr "" - -#: src/rtlsdrUI.h:110 -msgid "rtlsdr Preferences" -msgstr "" - -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "" - -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" -msgstr "" - -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" -msgstr "" - -#: src/rtlsdr_pi.cpp:436 -msgid "Unknown mode" -msgstr "" - -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "" - -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 -msgid "Failed to open: " -msgstr "" - -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 -msgid "Stopped: " -msgstr "" - diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100644 index 0000000..25aea79 --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,278 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Greek\n" +"Language: el_GR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: el\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "Βαθνομήση σφάλματος rtlsdr" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "Δεν ελήφθησαν μηνύματα AIS\n" +" Αποτυχία βαθμονόμησης" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Επειδή το λογισμικό του ραδιοφώνου δεν είναι μια συσκευή ακριβείας, πρέπει να οριστεί το σφάλμα για να βαθμονομηθεί.\n\n" +"Η αυτό-βαθμονόμηση παίρνει κάποιο χρόνο, αλλά θα σαρώσει πολλά σφάλματα, ψάχνοντας για σήματα AIS. Αυτό απαιτεί κάμποση κυκλοφορία πλοίων με AIS.\n\n" +"Εναλλακτικά, αν είναι εγκατεστημένο το gnuradio, μπορείτε να χρησιμοποιήσετε το προγραμματάκι που περιλαμβάνεται και να αναζητήστε κορυφές στην κυκλοφορία του AIS, ή να χρησιμοποιήσετε μια γνωστή συχνότητα (για παράδειγμα, το vhf κανάλι 8 είναι " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr ") και να διαβιβάσετε σε αυτή τη συχνότητα για να δείτε πόσο μακριά είναι η κορυφή από την πραγματική συχνότητα σε khz. Αυτή είναι η τιμή σφάλματος που απαιτείται για τη βαθμονόμηση.\n\n" +"Άπαξ και βαθμονομηθεί θα μπορείτε να βλέπετε ομάδες δεδομένων (σήματα AIS) από το Α και το B\n" +"στην φιλτραρισμένη έξοδο, και να λάβετε μηνύματα AIS (αν υπάρχουν διαθέσιμα)\n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "Στα Windows, πρέπει πρώτα να εκτελέσετε την εφαρμογή 'zadig' για να εγκαταστήσετε τον usb driver μολις συνδέσετε τη συσκευή.\n" +"Η εφαρμογή υπάρχει στο http://zadig.akeo.ie \n\n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Μηνύματα" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Ενεργοποίηση" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Προτιμήσεις" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Εκκαθάριση" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Κλείσιμο" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Πρόγραμμα" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | ais αποκωδικοποιητής" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "επιπλέον args (κενή προεπιλογή)" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Ρυθμός Δειγματοληψίας (khz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Βαθμονόμηση διόρθωσης λάθους" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Διόρθωση λάθους" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Αυτο-βαθμονόμηση" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Μη αυτόματη μέσω grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "Πληροφορίες" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100,4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "MHz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM Ράδιο" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "Squelch" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF ήχου" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Σχετικά με το συγγραφέα" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Πληροφορίες" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "Προτιμήσεις rtl-sdr" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Η εκτέλεση απέτυχε" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Μη έγκυρη συχνότητα FM" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Άγνωστος τρόπος" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Απέτυχε το άνοιγμα: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Εκτελέστηκε: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Σταμάτησε: " + diff --git a/po/en_GB.po b/po/en_GB.po new file mode 100644 index 0000000..621e749 --- /dev/null +++ b/po/en_GB.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: English, United Kingdom\n" +"Language: en_GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: en-GB\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/es.po b/po/es_ES.po similarity index 55% rename from po/es.po rename to po/es_ES.po index f7bf801..353b3be 100644 --- a/po/es.po +++ b/po/es_ES.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: es-ES\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "¡Error al ir a la posición!" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "Conectado" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "No conectado" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "Calibración de rtlsdr" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Mensajes AIS no recibidos\n" "Calibración fallida" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,42 +53,42 @@ msgstr "Los dispositivos de radio por software no son aparatos de precisión y p "La autocalibración requiere de cierto tiempo ya que compara resultados para diferentes valores de error posibles buscando mensajes en las frecuencias AIS. Es necesario que haya bastante tráfico de barcos para que funcione.\n\n" "Como método alternativo puede usar gnuradio, o similar, y buscar la señal de los mensajes en los canales AIS o sintonizar en un canal conocido y transmitir en él (por ejemplo el canal 8 está en 156.40 MHZ). " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "A continuación observe la distancia entre el pico de la señal y la frecuencia real en khz. Este será el valor del factor de error para calibrar el dispositivo.\n\n" "Una vez en funcionamiento deberia poder ver ráfagas (datos AIS) en el canal A Y B y recibir mensajes AIS en la salida filtrada (si estuvieran presentes).\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Este plugin integra OpenCPN con el proyecto rtlsdr que convierte adaptadores TDT en receptores SDR. Ver: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"El autor utiliza un adaptador TDT r820t con una antena VHF estandar pero otros modelos funcionarán también. El cable coaxial de la antena está empalmado con el cable del adaptador. Deben hacerse ambas conexiones interior y exterior.\n\n" -"Actualmente con el modo rtl_fm y aisdecoder solo está disponible el canal AIS A. Este método usa muy poca CPU y es muy eficiente. \n" -"El modo gnuradio recibe automáticamente ambos canales A y B simultaneamente \n" -"pero utiliza mucha más CPU (debido a la implementación en python)." - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "Este plugin integra opencpn con el proyecto rtlsdr para convertir dongles DVB en un receptor SDR. Ver http://sdr.osmocom. rg/trac/wiki/rtl-sdr\n\n" +"El autor está usando el dvb-t tipo r820t con una antena vhf estándar, pero muchos otros pueden funcionar. El cable coaxial de la antena esta empalmado en el cable dvb-t, tanto en el interior como en el exterior.\n\n" +"rtl_ais puede recibir eficientemente el canal A y B simultáneamente\n" +"rtl_fm/softfm y aisdecoder solo puede recibir el canal A o B\n" +"ais_rx (gnuradio) recibe ambos canales A y B pero utiliza mucho más cpu." + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Bajo sistemas operativos Windows, debe primero ejecutar el pograma 'zadig' para instalar el driver usb que necesita una vez que inserte el dispositivo.\n" "Puede encontrar este programa en http://zadig.akeo.ie\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "Donde dump1090 está mandando datos al puerto 30003\n" +"Normalmente establecido en 127.0.0.1 (localhost)" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Mensajes" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Activar" @@ -97,135 +104,179 @@ msgstr "Borrar" msgid "Close" msgstr "Cerrar" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "N/A" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "Ir a" + +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programa" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "rtl_ais incorporado" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "rtl_ais" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdecoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "Descodificador AIS| soft_fm " -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "extra args (blanco por defecto)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Fr muestreo (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Calibración de factor de error" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Factor de error" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Auto Calibración" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Manual vía grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Información" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Trazar" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "Planes de selección (ADSB)" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "Servidor dump1090" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "?" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "ADSB" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM Radio" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Suprimir ruido" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "Internacional" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "EE.UU." + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF Audio" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Sobre el autor" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Información" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "Vuelos" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "Preferencias rtlsdr" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "Plugin rtlsdr para OpenCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "Plugin rtlsdr para OpenCPN\n" -"Lee mensajes NMEA rtlsdr desde los scripts gr-ais, ais_rx.py, aisdecoder. \n" -"Implementa ADS-b, radio FM y VHF.\n" -"Eventualmente necesitará enlazar con gnuradio directamente.\n\n" -"Creado por Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Ejecución fallida" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Frecuencia FM inválida" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "Iniciado rtl_ais incorporado" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "fallo al iniciar rtl_ais incorporado" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "¿está disponible un dispositivo rtlsdr?\n" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Modo desconocido" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Ejecutedo: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "Ejecutando: " -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Error abriendo: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Ejecutedo: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "Detenido rtl_ais incorporado" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Parado: " diff --git a/po/et.po b/po/et_EE.po similarity index 59% rename from po/et.po rename to po/et_EE.po index 0b126f2..13a74c0 100644 --- a/po/et.po +++ b/po/et_EE.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:13-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: et\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "AIS-dekooder" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "rtlsdr-vea kalibreerimine" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "AIS-teateid pole vastu võetud\n" "Kalibreerimine nurjus" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Sest tarkvaraline raadio ei ole täppisseade. Vea väärtus peab olema m "Kalibreerimise teostamisel - autokalibreerimine võtab mõnevõrra aega - skaneeritakse palju veaväärtusi otsides AIS-signaali. See nõuab töötamiseks küllaltki tihedat AIS-liiklust.\n\n" "Selle asemel, kui gnu-raadio on paigaldatud, võite kasutada kaasa pandud skripti ja kas vaadata AIS-liikluse haripunkte või kasutada teadaolevat sagedust (näiteks, VHF kanal 8 on " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,34 +61,30 @@ msgstr ") ning kiirata sellel sagedusel, märkamaks, kui palju kõrval on haripu "Kui ta ükskord töötab, peaksite olema võimelised nägema purskeid (AIS-andmed) filtreeritud väljundi A-st ja B-st\n" "ning vastu võtma AIS-teateid (kui midagi on saadaval)\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "See plugin integreerib OpenCPN'i rtlsdr-projektiga DVB-dongli muutmiseks SDR-vastuvõtjaks. Vaata: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"Autor kasutab r820t-tüüpi DVB-T donglit koos standartse ULL-antenniga, kuid paljud teised võivad ka töötada. Antenni koakskaabel tuleb pleissida DVB-T kaabliga, mõlemad ühendused, sisemine ja väline, peavad olema tehtud.\n\n" -"Praegu on koos rtl_fm ja AIS-dekooder režiimiga ainult AIS-kanal A saadaval. See meetod kasutab vähe CPU'd ja on väga effektiivne. \n" -"gnu-raadio rakendus võtab automaatselt mõlemad kanalid A ja B sama-aegselt vastu, kuid kasutab rohkem CPU'd (seoses python'i teostusega)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Windows operatsioonisüsteemis pead sa esimesena käivitama abiprogrammi 'zadig', et paigaldada vajalik usb-draiver kui seade saab külge ühendatud.\n" "Sa leiad selle programmi http://zadig.akeo.ie\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Teated" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Võimalda" @@ -97,135 +100,179 @@ msgstr "Tühjenda" msgid "Close" msgstr "Sulge" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programm" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnu-raadio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | AIS-dekooder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnu-raadio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "Lisa args (vaikimisi tühi)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Diskreetimissagedus (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Vea paranduse kalibreerimine" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Vea parandus" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Automaatne kalibreerimine" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Käsitsi üle grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Kõver" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "FM-raadio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF-audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM-raadio" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Summutus" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF-audio" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Autorist" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Info" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "rtlsdr eelistused" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "rtlsdr-plugIn OpenCPN'i jaoks" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "rtlsdr-plugIn OpenCPN'i jaoks\n" -"Loeb rtlsdr NMEA-teateid gr-ais ais_rx.py skriptist. \n" -"Toetab ADS-b FM-raadiot ja ULL\n" -"Viimaks tuleb see versioon otselinkida gnu raadioga.\n\n" -"rtlsdr-plugIna kirjutas Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Käivitamine nurjus" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Kehtetu FM-sagedus" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Tundmatu režiim" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Käivitatud: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Avamine nurjus: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Käivitatud: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Peatatud: " diff --git a/po/fi.po b/po/fi_FI.po similarity index 59% rename from po/fi.po rename to po/fi_FI.po index 69c112b..f2dc884 100644 --- a/po/fi.po +++ b/po/fi_FI.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: fi\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisdecooderi" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "rtlsdr kalibrointivirhe" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "AIS-viestejä ei ole vastaanotettu\n" "kalibrointi epäonnistui" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Koska ohjelmisto radio ei ole tarkkuuslaite, virhearvo on määritettäv "Kalibroinnin suoritus, autocalibrate kestää jonkin aikaa, mutta löytää monet virhearvot, kun AIS-signaaleja etsitään. Tämä toiminta edellyttää varsin runsasta AIS liikennettä.\n\n" "Vaihtoehtoisesti, jos gnuradio on asennettu, voit käyttää sisällytettyä komentosarjaa ja joko etsiä ais-liikenteen huiput tai käyttää tunnettua taajuutta (esimerkiksi vhf kanava 8 on " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,35 +61,30 @@ msgstr ") ja ottaa tämän taajuus huomioon, niin nähdään ero huipun ja oikea "Kun on toimiva, on voitava nähdä purskeet (ais tiedot) A ja B\n" "suodatetussa lähtösignaalissa ja vastaanottaa ais-viestejä (jos niitä on saatavilla) \n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Tämä liitännäinen yhdistää opencpn:n ja rtlsdr-projektin, jotta käänetään DVB-pulikat SDR-vastaanottimiksi. Katso: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"Tekijä käyttää r820t tyyppiä dvb-t pulikkaa ja standardia vhf-antennia, mutta monet muutkin toimivat. Antennin koaksiaalikaapeli on liitetty dvb-t-kaapeliin, sekä sisäisten että ulkoisten liitosten on oltava tehdyt.\n\n" -"Nyt on vain AIS kanava A saatavilla rtl_fm- ja aisdecoder-tilassa. Tämä menetelmä käyttää vähän cpu:ta ja on erittäin tehokas. \n" -"Gnuradion käyttöönotto vastaanottaa automaattisesti molemmat kanavat A ja B \n" -"vuorottain, mutta se käyttää paljon cpu:ta (koska python on mukana)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Windows-käyttöjärjestelmässä on ensin suoritettava lisäohjelma 'zadig' joka asentaa tarvittavat usb-ohjaimet, kun laite on kytkettynä\n" "Tämä ohjelma löytyy osoitteesta http://zadig.akeo.ie\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Viestit" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Käytä" @@ -98,135 +100,179 @@ msgstr "Tyhjennä" msgid "Close" msgstr "Sulje" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Ohjelma" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdecoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "lisäargumentit (tyhjä oletusarvo)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Näytteenottotaajuus (kHz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Virheen korjauskalibrointi" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Virheen korjaus" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Automaattikalibrointi" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Käsin grc:n kautta" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Tietoa" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Diagrammi" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM Radio" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Kohinasalpa" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF Audio" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Tietoa Tekijästä" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Informaatiota" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "rtlsdr asetukset" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "rtlsdr lisäosa OpenCPN:lle" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "rtlsdr lisäosa OpenCPN:lle\n" -"Lukee rtlsdr nmea viestejä gr-ais ais_rx.py skriptistä. \n" -"Tukee ADS-b FM radiota ja vhf:ää\n" -"Lopullinen versio on yhdistettävä gnu-Radioon suoraan.\n\n" -"rtlsdr lisäosan oli kirjoittanut Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Suoritus epäonnistui" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Virheellinen FM-taajuus" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Tuntematon tila" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Suoritettu: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Ei voitu avata: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Suoritettu: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Keskeytetty: " diff --git a/po/fil_PH.po b/po/fil_PH.po new file mode 100644 index 0000000..8123491 --- /dev/null +++ b/po/fil_PH.po @@ -0,0 +1,278 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Filipino\n" +"Language: fil_PH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: fil\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "rtlsdr pagkakalibrate ng kamalian" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "Walang mga mensaheng AIS na natanggap\n" +"Nabigo sa Pagkalibrate" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Dahil sa ang radyo ng softwer ay hindi isang aparatong pangkatumpakan. Ang halaga ng pagkakamali ay dapat na itakda upang makalibrate ng maayos ang dongle radyo.\n\n" +"Upang magawa ang pagkalibrate ang awtomatikong pagkalibrate ay tumatagal ng ilang oras, ngunit susuriing mabuti ang halaga ng mga kamalian na naghahanap ng mga signal na AIS. Ito ay nangangailangan ng medyo madalas na trapik sa AIS upang magawa.\n\n" +"Halilihan kung ang gnuradio ay na-install, maaari mong gamitin ang mga kalakip na skrip at tignan ang alinman para sa mga rurok ng trapik sa AIS, o gumamit ng kilalang prikwensya (halimbawa, vhf channel ay " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr ") at magpadala sa prikwensiyang ito upang tandaan ang layo ng rurok mula sa tunay na prikwensiya sa khz. Ang halaga ng kamaliang ito ay kinakailangan upang makalibrate ang dongle.\n\n" +"Kapag gumana, maaari mo nang makita ang mga pagputok (datos na ais) mula sa A at B\n" +"sa nasalang kalalabasan, at makatanggap ng mga mensaheng ais (kung meron man)\n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "Sa ilalim ng sistema ng Windows Operating, kailangang mo munang paganahin ang kagamitan ng programang \\zadig\\upang ma-install ang mga kinakailangang usb driver pagkatapos mapasak ang aparato.\n" +"Maaaring makita ang programa sa http://zadig.akeo.ie\n\n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Mensahe" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Paganahin" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Preperensiya" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Linawin" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Isarado" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Programa" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | aisdecoder" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "karagdagang args (blanko sa default)" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Halimbawa na Tulin (naka-khz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Pagkalibrate na Nagwawasto ng Kamalian" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Pagwawasto ng Kamalian" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Awtomatikong Pagkalibrate" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Manwal gamit ang grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "Impormasyon" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100.4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "Mhz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Radyong FM" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "Pagpapatahimik" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "Audio na VHF" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Tungkol sa May-akda" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Impormasyon" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "Preperensiya ng rtlsdr" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Nabio sa pagpapatupad" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Hindi balidong prikwensyang FM" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Hindi kilalang moda" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Nabigo sa pagbukas: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Napatupad: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Nahinto: " + diff --git a/po/fr.po b/po/fr_FR.po similarity index 58% rename from po/fr.po rename to po/fr_FR.po index f6a4d5b..bdbe334 100644 --- a/po/fr.po +++ b/po/fr_FR.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: fr\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "Impossible d'aller à la position !" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "Décodeur AIS" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "Connecté" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "Non connecté" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "Correction d'erreur" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Aucun message AIS reçu\n" "Echec du calibrage" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Because the software radio is not a precision device, The error value mu "To perform calibration, launch \"gnuradio-companion gr-ais.grc\"(On a netbook first enable only the lower block or the top two take thewhole screen and you cannot see the third block)\n" " Set the frequency to a known vhf frequency, (for example, channel 8 is " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,35 +61,30 @@ msgstr ") then transmit with vhf transmitter on this channel and note how far th "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output.\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Sous Windows, vous pouvez exécuter l'utilitaire \"Zadig\" pour installer le driver nécessaire dés lors qu'un périphérique est branché.\n" "Vous pouvez trouver cet utilitaire en suivant ce lien : http://zadig.akeo.ie\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" -msgstr "Méssages" +msgstr "Messages" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Activer" @@ -98,135 +100,179 @@ msgstr "Effacer" msgid "Close" msgstr "Fermer" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "N/D" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "Aller à" + +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programme" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "rtl_ais" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdecoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "Arguments complémentaires (Blanc par défaut)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Taux d'échantillonnage (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Correction d'erreur" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Correction d'erreur" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Auto calibrage" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Manuel via grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Tracer" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "Radio FM" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "?" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "Audio VHF" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Radio FM" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Bruit de fond" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "Audio VHF" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Au sujet de l'auteur" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Information" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "Préférences rtlsdr" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "Complément rtlsdr pour openCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "Complément rtlsdr pour OpenCPN\n" -"Ce complément lit les phrases NMEA depuis les scripts gr-ais ais_rx.py. \n" -"Il supporte les radio FM et les VHF ADS-b\n" -"Éventuellement, cette version devra faire le lien avec la radio gnu directement..\n\n" -"Le complément a été développé par Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Echec de l'exécution" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Fréquence FM invalide" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Mode inconnu" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Exécuté : " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "Exécution : " -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Impossible d'ouvrir :" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Exécuté : " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Arrêté : " diff --git a/po/gl.po b/po/gl_ES.po similarity index 54% rename from po/gl.po rename to po/gl_ES.po index 3395b03..53ce403 100644 --- a/po/gl.po +++ b/po/gl_ES.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:13-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Galician\n" "Language: gl_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: gl\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/he_IL.po b/po/he_IL.po new file mode 100644 index 0000000..ca87582 --- /dev/null +++ b/po/he_IL.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Hebrew\n" +"Language: he_IL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: he\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/de.po b/po/hi_IN.po similarity index 52% rename from po/de.po rename to po/hi_IN.po index f01bd7b..424fb7c 100644 --- a/po/de.po +++ b/po/hi_IN.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" -"Language-Team: German\n" -"Language: de_DE\n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Hindi\n" +"Language: hi_IN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" -"X-Crowdin-Language: de\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: hi\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/hu.po b/po/hu_HU.po similarity index 54% rename from po/hu.po rename to po/hu_HU.po index 320adca..33b8670 100644 --- a/po/hu.po +++ b/po/hu_HU.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: hu\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/id_ID.po b/po/id_ID.po new file mode 100644 index 0000000..d9381e6 --- /dev/null +++ b/po/id_ID.po @@ -0,0 +1,279 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Indonesian\n" +"Language: id_ID\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: id\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "Tidak ada pesan AIS yang diterima\n" +"Kalibrasi yang gagal" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Karena perangkat lunak radio bukan perangkat presisi, Kesalahan harus dipasang untuk mengkalibrasi dongle radio dengan benar.\n\n" +"Untuk melaksanakan kalibrasi, autocalibrate mebutuhkan beberapa waktu, namun akan meninjau banyak kesalahan yang mencari sinyal AIS. Ini membutuhkan pergantian AIS yang cukup sering untuk bekerja.\n\n" +"jika gnuradio dipasang, Kamu bisa memakai tulisan yang disertakan dan mencari puncak kesalahan pada pergantian ais, atau memakai frekuensi yang diketahui (misalnya, vhf channel 8 " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr ") dan mengirimkan pada frekuensi ini untuk mencatat seberapa jauh puncaknya dari frekuensi sebenarnya di khz. Ini merupakan nilai error yang dibutuhkan untuk mengkalibrasi dongle. \n\n" +"Setelah bekerja, Anda harus bisa melihat semburan (ais data) dari A dan B\n" +"pada mengeluarkan yang disaring, dan menerima pesan ais (jika ada yang tersedia)\n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "Di bawah sistem operasi Windows, Anda harus terlebih dahulu menjalankan program utilitas 'zadig' untuk menginstal driver usb yang diperlukan begitu perangkat terpasang. \n" +" Anda dapat menemukan program ini di http://zadig.akeo.ie\n" +" \n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Pesan" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Aktifkan" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Preferensi" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Bersih" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Dekat" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Program" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Rating sampel (khz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Koreksi Kesalahan Kalibrasi" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Koreksi kesalahan" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Kalibrasi otomatis" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Manual melalui grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "Info" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100.4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "Mhz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Radio FM" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "Suara VHF" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Tentang pencipta" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Informasi" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "preferensi rtlsdr" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Gagal eksekusi" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Frekuensi FM tidak sah" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Mode tak dikenal" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Gagal membuka: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Dilaksanakan: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Berhenti: " + diff --git a/po/is_IS.po b/po/is_IS.po new file mode 100644 index 0000000..49229b9 --- /dev/null +++ b/po/is_IS.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Icelandic\n" +"Language: is_IS\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: is\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Hreinsa" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Loka" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100.4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "Mhz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM útvarp" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Mistókst að opna: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/it.po b/po/it_IT.po similarity index 59% rename from po/it.po rename to po/it_IT.po index 0c289b9..356c462 100644 --- a/po/it.po +++ b/po/it_IT.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: it\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "Rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 -msgid "rtlsdr error calibration" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "calibrazione errore di rtlsdr" + +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Nessun messaggio AIS ricevuto\n" "Calibrazione fallita" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Poiché la radio software non è un dispositivo di precisione, è necess "Effettuare la calibrazione con l'autocalibrazione richiede un certo tempo, ma verranno scansionati molti valori d'errore durante la ricerca dei segnali AIS. Affinché ciò funzioni è necessario un traffico AIS abbastanza frequente.\n\n" "In alternativa, se è installato gnuradio, si può usare lo script incluso e, o cercare i picchi di traffico AIS, oppure usare una frequenza nota (ad esempio, quella del canale 8 vhf è " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,37 +61,32 @@ msgstr ") e trasmettere su questa frequenza per capire quanto lontano è il picc "Quando funziona, si dovrebbero vedere sull'uscita filtrata i pacchetti (dati ais) da A e B\n" "e ricevere i messaggi AIS (se ce ne sono disponibili)\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "Rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Questo plugin integra OpenCPN con il progetto rtlsdr per trasformare un dongle DVB in un ricevitore SDR. Vedi: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"L'autore ha utilizzato il dongle dvb-t tipo r820tcon una antenna vhf standard, ma molti altri possono funzionare. Il cavo coassiale dell'antenna viene collegato al cavo del donlge dvb-t, devono essere collegati sia il connettore interno che la calza esterna.\n\n" -"Al momento, con rtl_fm e aisdecoder, è disponibile solamente il canale A dell'AIS. Questo metodo impegna poco la cpu ed è molto efficiente.\n" -" L'implementazione gnuradio riceve automaticamente entrambi ci canale A e B\n" -"simultaneamente ma impegna molto di più la cpu (a causa della implementazione in python)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Nel sistema operativo Windows, è necessario eseguire prima il programma 'zadig' per installare il driver usb necessario dopo che il dispositivo è stato inserito.\n" "E' possibile trovare questo programma in http://zadig.akeo.ie\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Messaggi" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" -msgstr "" +msgstr "Abilita" #: src/rtlsdrUI.cpp:50 msgid "Preferences" @@ -98,135 +100,179 @@ msgstr "Cancellare" msgid "Close" msgstr "Chiudi" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programma" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdecoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "Arg. extra (default: spazio)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Frequenza di campionamento (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Calibrazione correzione d'errore" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Correzione d'errore" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Auto Calibrazione" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Manuale via grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Curve" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "Radio FM" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "MHz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "Audio VHF" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Radio FM" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Squelch" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "Audio VHF" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Sull'autore" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Informazioni" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "Preferenze Rtlsdr" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "Plugin Rtlsdr per OpenCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "Plugin Rtlsdr per OpenCPN\n" -"Legge messaggi nmea da script gr-ais ais_rx.py.\n" -"Supporta ADS-b, radio FM e vhf\n" -"Eventualmente potrà essere necessario collegarsi direttamenente con gnu radio.\n\n" -"Il plugin rtlsdr è stato scritto da Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Esecuzione fallita" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Frequenza FM non valida" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Modalità sconosciuta" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Eseguito: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Impossibile aprire: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Eseguito: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Terminato: " diff --git a/po/ja.po b/po/ja_JP.po similarity index 60% rename from po/ja.po rename to po/ja_JP.po index a318701..c1cdb70 100644 --- a/po/ja.po +++ b/po/ja_JP.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisデコーダ" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "rtlsdr 誤差補正" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" -msgstr "AIS メッセージレシーバがありません\n" +msgstr "AIS メッセージが受信できません\n" "キャリブレーション 失敗" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "ソフトウェア無線は、精密機器ではないため、無線ド "オートキャリブレートには多少時間がかかりますが、AIS信号から多くのエラー値をスキャンします。これが動作するには、かなり頻繁なAISのトラフィックを必要とします。\n\n" "代わりにgnuradioがインストールされている場合、含まれているスクリプトを使用して、いずれかのAISトラフィックのピークを探すか、既知の周波数を使用してもよい(例えば、VHFチャンネル8 " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -55,42 +62,32 @@ msgstr ") \n" "これは、ドングルを較正するために必要なエラー値です。\n\n" "AとBいずれかが使用可能な場合フィルタリングされた出力にバースト(ais data) を見る ことができ、aisメッセージを受信します。\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "このプラグインはrtlsdrプロジェクトでopencpnに統合しています。\n" -"DVBドングルをSDR受信機にします。\n" -"参照:http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"\n" -"著者は、標準的なVHFアンテナとr820t型DVB-Tのドングルを使用しているが、他の多くが動作します。\n" -"アンテナ同軸ケーブルはDVB-Tケーブルに接続され、内側と外側の両方の接続がなされなければなりません。\n\n" -"現在、rtl_fmとaisdecoderモードではAISチャンネルAのみ使用可能です。\n" -"この方法は、限られたCPUを使用して、非常に効率的です。\n\n" -"gnuradioの実装は、自動的にチャンネルAとBの両方を受信します\n" -"しかし、ずっと多くのCPUを使用しています(これはPythonの実装)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Windowsオペレーティングシステムの下では、 必要なUSBドライバをインストールするには、ユーティリティプログラム zadig を実行する必要があります。\n" "あなたは、http://zadig.akeo.ie でこのプログラムを見つけることができます\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" -msgstr "" +msgstr "メッセージ" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" -msgstr "" +msgstr "有効" #: src/rtlsdrUI.cpp:50 msgid "Preferences" @@ -104,131 +101,179 @@ msgstr "クリア" msgid "Close" msgstr "閉じる" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" msgstr "" -#: src/rtlsdrUI.cpp:116 -msgid "Program" +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "rtl_fm | aisdecoder" -msgstr "" +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "プログラム" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 msgid "ais_rx (gnuradio)" msgstr "ais_rx (gnuradio)" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | aisdecoder" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" -msgstr "余分な引数 (空白のデフォルト)" +msgstr "追加の引数 (デフォルトは空白)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "サンプリング レート (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "エラー補正キャリブレーション" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "エラー訂正" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "自動キャリブレーション" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" -msgstr "" +msgstr "Grc を介して手動" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" +msgstr "情報" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:290 +msgid "?" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "FMラジオ" +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" -msgstr "" +msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" -msgstr "" +msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF オーディオ" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FMラジオ" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" -msgstr "" +msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" -msgstr "" +msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "スケルチ" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF オーディオ" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "著者について" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "情報" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "rtlsdr の設定" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "rtlsdr OpenCPN のためのプラグイン" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "実行に失敗しました" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "無効な FM 周波数" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "不明なモード" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "実行 " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "開けませんでした。 " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 -msgid "Stopped: " +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "実行 " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" msgstr "" +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "止まった: " + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..2f15ab0 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Korean\n" +"Language: ko_KR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: ko\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/mr_IN.po b/po/mr_IN.po new file mode 100644 index 0000000..12e26b3 --- /dev/null +++ b/po/mr_IN.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Marathi\n" +"Language: mr_IN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: mr\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/nb.po b/po/nb_NO.po similarity index 59% rename from po/nb.po rename to po/nb_NO.po index 8e94a9a..91138ab 100644 --- a/po/nb.po +++ b/po/nb_NO.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:13-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Norwegian Bokmal\n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: nb\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisdekoder" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "rtlsdr feilkalibrering" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Ingen AIS melding mottatt\n" "Kalibrering feilet" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Da programvareradio ikke er en presisjons enhet, må feilmarginen settes "For å utføre kalibrering, autokalibrering tar noe tid, men vil søke gjennom mange feilverdier etter AIS signaler. Dette krever en del AIS trafikk for å fungere.\n\n" "Hvis gnuradio er installert, kan du benytte det medfølgende skriptet for å se etter topper av AIS signaler eller bruke en kjent frekvens (f.eks. vhf kanal 8 er " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,35 +61,30 @@ msgstr ") og sende på denne frekvensen å merke hvor langt toppen er fra sann f "Når den arbeider, skal du kunne se pakker (ais-data) fra A og B\n" "i filtrert utdata, og motta ais meldinger (hvis de er tilgjengelige)\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Denne utvidelsen integrerer OpenCPN med RTLSDR prosjektet for å gjøre om DVB dungler til en SDR mottaker. Se: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"Forfatteren bruker r820t DVB-T dungle med en standard VHF antenne, men mange andre kan også virke. Antennekabelen er koblet til DVB-T kabelen, både indre og ytre leder må være tilkoblet.\n\n" -"Bare AIS kanal A er tilgjengelig med rtl_fm og aisdekoder modus. Denne metoden bruker lite kraft fra CPU og er veldig effektiv. \n" -"Gnuradio integrering gjør at du mottar på både A og B kanaler \n" -"samtidig, men bruker da også mye mer CPU (pga. Python integrering)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Under Windows operativsystem, kjør først hjelpeprogrammet 'zadig' for å installere påkrevde USB drivere så snart enheten er plugget inn.\n" "Du kan finne dette programmet på http://zadig.akeo.ie\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Meldinger" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Aktiver" @@ -98,135 +100,179 @@ msgstr "Tøm" msgid "Close" msgstr "Lukk" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Program" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdekoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "ekstra argumenter (tom = standard)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Eksempel rate (kHz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Kalibrering av feilkorreksjon" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Feilkorrigering" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Automatisk kalibrering" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Manuelt via grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Plott" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "FM-radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "MHz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF-lyd" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM-radio" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Squelch" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF-lyd" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Om opphav" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "informasjon" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "rtlsdr egenskaper" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "RTLSDR utvidelse for OpenCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "rtlsdr utvidelse for OpenCPN\n" -"Leser rtlsdr NMEA setninger fra gr-ais ais_rx.py skript. \n" -"Støtter ADS-b FM radio og VHF\n" -"Til slutt vil versjonen kobles direkte opp mot GNU radio.\n\n" -"rtlsdr utvidelsen er skrevet av Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Utførelse feilet" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Ugyldig FM-frekvens" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Ukjent modus" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Utført: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Kunne ikke åpne: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Utført: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Stoppet: " diff --git a/po/nl.po b/po/nl_NL.po similarity index 58% rename from po/nl.po rename to po/nl_NL.po index 0c4645a..b1e2b3e 100644 --- a/po/nl.po +++ b/po/nl_NL.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: nl\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "RTLSDR" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "rtlsdr foutcalibratie" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Geen AIS-berichten ontvangen\n" "Calibratie mislukt" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Omdat de software-radio geen precisie-apparaat is, moet de foutwaarde wo "Calibreren met AutoCalibratie duurt enige tijd, maar daarbij zullen veel foutwaarden gevonden worden bij het zoeken naar AIS-signalen. Dit vereist vrij veel AIS-verkeer.\n\n" "Als alternatief - als gnuradio is geïnstalleerd - kunt u het ingesloten script gebruiken en ofwel pieken in ais-verkeer zoeken, of een bekende frequentie gebruiken. Bijvoorbeeld: vhf kanaal 8 is " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,36 +61,32 @@ msgstr "). Zend op deze frequentie om te merken hoe ver de piek ligt van de ware "Zodra het werkt, zou u 'bursts' moeten zien (ais-gegevens) in de A en B\n" "van de gefilterde uitvoer, en ais-berichten moeten ontvangen (indien beschikbaar).\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "RTLSDR" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Deze plugin integreert OpenCPN met het RTLSDR-project dat DVB-dongles omzet in een SDR-ontvanger (zie: http://sdr.osmocom.org/trac/wiki/rtl-sdr).\n\n" -"De auteur gebruikt het type r820t DVB-T-dongle met een standaard VHF-antenne, maar ook andere kunnen werken. De antenne coaxkabel is gesplitst op de DVB-T kabel; zowel de binnen- en buitengeleider moeten worden verbonden. \n\n" -"Momenteel is AIS-kanaal A alleen beschikbaar in rtl_fm en AIS-decoder modus. Deze methode belast de CPU slecht in geringe mate en is zeer efficiënt. \n" -"De gnuradio uitvoering ontvangt automatisch de beide kanalen A en B \\gelijktijdig, maar belast de CPU veel meer (als gevolg van de Python implementatie)." - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Onder Windows moet u, zodra het apparaat is aangesloten, eerst het hulpprogramma 'Zadig' uitvoeren om het benodigde USB-stuurprogramma te installeren .\n" "U kunt dit programma vinden op http://zadig.akeo.ie .\n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Berichten" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" -msgstr "Activeren" +msgstr "Inschakelen" #: src/rtlsdrUI.cpp:50 msgid "Preferences" @@ -97,135 +100,179 @@ msgstr "Wissen" msgid "Close" msgstr "Sluiten" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programma" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | AIS-decoder" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "Extra argumenten ( standaard leeg)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Monsterfrequentie (kHz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Foutcorrectie-calibratie" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Foutcorrectie" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "AutoCalibratie" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Handmatig via grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "Info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "FM-radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100.4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM-radio" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Squelch" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF audio" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Over de auteur" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Informatie" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "Voorkeuren RTLSDR" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "RTLSDR PlugIn voor OpenCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "RTLSDR PlugIn voor OpenCPN\n" -"Leest rtlsdr NMEA-berichten van gr-ais ais_rx.py script.\n" -"Ondersteunt ADS-b FM-radio en VHF.\n" -"Mogeljk zal deze versie een directe koppeling vereisen met gnu-radio.\n\n" -"De RTLSDR PlugIn is geschreven door Sean D'Epagnier.\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Uitvoering mislukt" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Ongeldige FM-frequentie" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Onbekende modus" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Uitgevoerd: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Kon niet openen:" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Uitgevoerd: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Gestopt: " diff --git a/po/pl.po b/po/pl.po deleted file mode 100644 index b0bbc3b..0000000 --- a/po/pl.po +++ /dev/null @@ -1,218 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: opencpn\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" -"Language-Team: Polish\n" -"Language: pl_PL\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: crowdin.com\n" -"X-Crowdin-Project: opencpn\n" -"X-Crowdin-Language: pl\n" -"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" - -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "" - -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "" - -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "" - -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 -msgid "rtlsdr error calibration" -msgstr "" - -#: src/rtlsdrPrefs.cpp:166 -msgid "No AIS messages received\n" -"Calibration Failed" -msgstr "" - -#: src/rtlsdrPrefs.cpp:183 -msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" -"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" -"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " -msgstr "" - -#: src/rtlsdrPrefs.cpp:192 -msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" -"Once working, you should be able to see bursts (ais data) from the A and B\n" -"in the filtered output, and receive ais messages (if any are available)\n" -msgstr "" - -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 -msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "" - -#: src/rtlsdrPrefs.cpp:215 -msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" -"You can find this program at http://zadig.akeo.ie\n\n" -msgstr "" - -#: src/rtlsdrUI.cpp:24 -msgid "Messages" -msgstr "" - -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 -msgid "Enable" -msgstr "" - -#: src/rtlsdrUI.cpp:50 -msgid "Preferences" -msgstr "" - -#: src/rtlsdrUI.cpp:53 -msgid "Clear" -msgstr "" - -#: src/rtlsdrUI.cpp:56 -msgid "Close" -msgstr "" - -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "" - -#: src/rtlsdrUI.cpp:116 -msgid "Program" -msgstr "" - -#: src/rtlsdrUI.cpp:120 -msgid "rtl_fm | aisdecoder" -msgstr "" - -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "" - -#: src/rtlsdrUI.cpp:130 -msgid "extra args (blank default)" -msgstr "" - -#: src/rtlsdrUI.cpp:163 -msgid "Sample Rate (khz)" -msgstr "" - -#: src/rtlsdrUI.cpp:174 -msgid "Error Correction Calibration" -msgstr "" - -#: src/rtlsdrUI.cpp:181 -msgid "Error Correction" -msgstr "" - -#: src/rtlsdrUI.cpp:188 -msgid "Auto Calibrate" -msgstr "" - -#: src/rtlsdrUI.cpp:191 -msgid "Manual via grc" -msgstr "" - -#: src/rtlsdrUI.cpp:194 -msgid "Info" -msgstr "" - -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "" - -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "" - -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "" - -#: src/rtlsdrUI.cpp:251 -msgid "100.4" -msgstr "" - -#: src/rtlsdrUI.cpp:254 -msgid "Mhz" -msgstr "" - -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "" - -#: src/rtlsdrUI.cpp:275 -msgid "16" -msgstr "" - -#: src/rtlsdrUI.cpp:278 -msgid "WX" -msgstr "" - -#: src/rtlsdrUI.cpp:281 -msgid "Squelch" -msgstr "" - -#: src/rtlsdrUI.cpp:303 -msgid "About Author" -msgstr "" - -#: src/rtlsdrUI.cpp:306 -msgid "Information" -msgstr "" - -#: src/rtlsdrUI.h:110 -msgid "rtlsdr Preferences" -msgstr "" - -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "" - -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" -msgstr "" - -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" -msgstr "" - -#: src/rtlsdr_pi.cpp:436 -msgid "Unknown mode" -msgstr "" - -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "" - -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 -msgid "Failed to open: " -msgstr "" - -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 -msgid "Stopped: " -msgstr "" - diff --git a/po/pl_PL.po b/po/pl_PL.po new file mode 100644 index 0000000..c10fe31 --- /dev/null +++ b/po/pl_PL.po @@ -0,0 +1,278 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"Language: pl_PL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "rtlsdr błąd kalibracji" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "Nie odebrano komunikatów AIS\n" +"Kalibracja nie powiodła się" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Ponieważ radio softwarowe nie jest urządzeniem precyzyjnym, wartość błędu musi byc ustawiona aby odpowiednio skalibrować paluch radiowy\n\n" +"Aby dokonać kalibracji autokalibracja wymaga pewnego czasu, ale skanowanie daje dużo błędów przy szukaniu sygnału AIS. To wymaga odpowiednio częstego odbioru sygnałów AIS.\n\n" +"Alternatywnie, jeśli jest zainstalowane gnu radio, możesz użyć załączonego skryptu i albo szukać pików na trafice ais albo użyć znanej częstotliwości (na przykład kanał 8 vhf jest " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr ") i nadawać na tej częstotliwości aby zobaczy jak daleko są piki od właściwej częstotliwości w khz. To jest wartość błędu wymagana do skalibrowania palucha.\n\n" +"Jeśli będzie działać będziesz mógł zobaczyć rozbłyski (dane ais) z A i B\n" +"na filtrowanym wyjściu i odebrać komunikaty ais (jeśli będą dostępne)\n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "Pod systemem operacyjnym Windows, należy najpierw uruchomić program narzędziowy ' zadig' żeby zainstalowa sterownik usb potrzebny, gdy urządzenie jest podłączone.\n" +"Możesz znaleźć ten program na http://zadig.akeo.ie\n\n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Wiadomości" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Aktywuj" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Ustawienia" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Wyczyść" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Zamknij" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Program" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | aisdecoder" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "dodatkowe argumenty (domyślnie puste)" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Częstotliwość próbkowania (khz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Błąd kalibracji korekcji" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Korekcja błędów" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Automatyczna kalibracja" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Ręcznie przez grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "Info" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100,4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "Mhz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Radio FM" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "Blokada szumów" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF Audio" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "O autorze" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Informacja" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "ustawienia RTL-SDR" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Wykonanie nie powiodło się" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Nieprawidłowa częstotliwość FM" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Nieznany tryb" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Nie można otworzyć: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Wykonane: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Zatrzymany: " + diff --git a/po/pt.po b/po/pt_BR.po similarity index 60% rename from po/pt.po rename to po/pt_BR.po index d08cff3..c741aad 100644 --- a/po/pt.po +++ b/po/pt_BR.po @@ -2,43 +2,50 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:13-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: pt-BR\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "erro de calibração rtlsdr" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Não recebeu mensagens AIS\n" "Falha na Calibração" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " @@ -46,7 +53,7 @@ msgstr "Porque o Software do rádio não é um dispositivo de precisão, o valor "Para realizar a calibração, a auto calibração levara algum tempo, mas irá escanear muitos valores errados, procurando por sinais de AIS. Isso requer bastante freqüente tráfego AIS para trabalhar.\n\n" "Alternadamente se gnuradio estiver instalado, você pode usar o script incluído e também procurar por picos no tráfego ais, ou usar uma freqüência conhecida (por exemplo, vhf canal 8 " -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -54,35 +61,30 @@ msgstr ") e transmitir nesta freqüência observar a que distância fica o pico "Uma vez trabalhando, você deve ser capaz de ver explosões (dados de ais) de A e B\n" "na saída filtrada e receber mensagens de ais (se houverem algumas disponíveis) \n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "Este plugin integra opencpn com o projeto rtlsdr para transformar um receptor DVB dongles em SRD receiver consulte: http://sdr.osmocom.org/trac/wiki/rtl-sdr \n\n" -"O autor esta usando o tipo r820t dvb-t dongle com uma antena vhf padrão, mas muitos outros podem funcionar. O cabo coaxial da antena é emendado ao cabo dvb-t, Ambas ligações internas e externas devem ser feitas.\n\n" -"Atualmente ais canal só está disponível com o modo de rtl_fm e aisdecoder. Este método usa pouco a cpu e é muito eficiente.\n" -" A gnuradio implementação recebe automaticamente os dois canais A e B \n" -"simaltaniously mas usa muito mais cpu (devido a implementação do python)" - -#: src/rtlsdrPrefs.cpp:215 +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "Sob o sistema operacional Windows, primeiro você deve executar o programa utilitário ' zadig' para instalar o driver usb necessário, uma vez que o dispositivo está conectado em.\n" "Você pode encontrar este programa em http://zadig.akeo.ie \n\n" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Mensagens" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Habilitar" @@ -98,135 +100,179 @@ msgstr "Limpar" msgid "Close" msgstr "Fechar" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Programa" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "rtl_fm | aisdecodificador" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "extra args (padrão em branco)" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "Taxa de amostragem (khz)" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "Correção de erro Calibração" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Correção de erro" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "Calibragem automática" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "Manual através de grc" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "info" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "Rádio FM" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "100,4" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "Mhz" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Rádio FM" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "16" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "WX" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "Silenciar" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF Audio" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "Sobre o autor" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "Informação" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "rtlsdr preferências" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "rtlsdr PlugIn para OpenCPN" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "rtlsdr PlugIn para OpenCPN\n" -"Leia rtlsdr nmea mensagens de script de ais_rx.py gr-ais. \n" -"Support ADS-b FM e vhf rádio\n" -"Eventualmente versão será necessário vincular com gnu rádio gnu diretamente.\n\n" -"O rtlsdr plugin foi escrito por Sean D'Epagnier\n" - -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "Falha na execução" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "Freqüência de FM inválida" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "Modo desconhecido" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "Executado: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "Falha ao abrir: " -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Executado: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "Parou: " diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..539803a --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,278 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Portuguese\n" +"Language: pt_PT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: pt-PT\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "calibração de erros rtlsdr" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "Não recebeu mensagens AIS\n" +"Falha na Calibração" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Porque o Software do rádio não é um dispositivo de precisão, o valor de erro deve ser definido para calibrar correctamente o rádio dongle.\n\n" +"Para realizar a calibração, a auto calibração levara algum tempo, mas irá varrer muitos valores errados, procurando por sinais de AIS. Isso requer tráfego AIS bastante freqüente para trabalhar.\n\n" +"Alternativamento se gnuradio estiver instalado, pode usar o script incluído e também procurar por picos no tráfego ais, ou usar uma freqüência conhecida (por exemplo, vhf canal 8 " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr ") e transmitir nesta freqüência observar a que distância fica o pico é da verdadeira freqüência em khz. Este é o valor do erro necessário para calibrar o dongle.\n\n" +"Uma vez trabalhando, você deve ser capaz de ver explosões (dados de ais) de A e B\n" +"na saída filtrada e receber mensagens de ais (se houverem algumas disponíveis) \n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "No sistema operativo Windows, deve executar o programa utilitário ' zadig' para instalar o driver usb necessário, uma vez que o dispositivo esteja ligado.\n" +"Poderá encontrar o programa em http://zadig.akeo.ie \n\n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Mensagens" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Activar" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Preferências" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Limpar" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Fechar" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Programa" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradio)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | aisdecodificador" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "extra args (padrão em branco)" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Taxa de amostragem (khz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Calibração de Correção de erro" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Correção de erro" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Calibragem automática" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Manual através de grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "info" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100.4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "Mhz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "Rádio FM" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "Atenuação" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "Audio VHF" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Sobre o autor" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Informação" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "Preferências rtlsdr" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Falha na execução" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Freqüência de FM inválida" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Modo desconhecido" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Falha ao abrir: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Executado: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Parado: " + diff --git a/po/ro_RO.po b/po/ro_RO.po new file mode 100644 index 0000000..8367b9e --- /dev/null +++ b/po/ro_RO.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Romanian\n" +"Language: ro_RO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: ro\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/rtlsdr_pi.pot b/po/rtlsdr_pi.pot index 1ecf62c..849eac3 100644 --- a/po/rtlsdr_pi.pot +++ b/po/rtlsdr_pi.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: rtlsdr_pi 0.13\n" +"Project-Id-Version: rtlsdr_pi 1.4.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,29 +17,35 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "" "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "" "Because the software radio is not a precision device, The error value must be " "set to properly calibrate the radio dongle.\n" @@ -53,7 +59,7 @@ msgid "" "vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid "" ") and transmit on this frequency to note how far the peak is from the true " "frequency in khz. This is the error value needed to calibrate the dongle.\n" @@ -62,12 +68,7 @@ msgid "" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "" "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles " "into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n" @@ -76,13 +77,12 @@ msgid "" "but many others can work. The antenna coax cable is spliced to the dvb-t " "cable, both inner and outer connections must be made.\n" "\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. " -"This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "" "Under Windows Operating system, you must first run the utility program " "'zadig'to install the needed usb driver once the device is plugged in.\n" @@ -90,12 +90,17 @@ msgid "" "\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "" +"Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -111,132 +116,178 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "" -"rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n" -"\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/ru.po b/po/ru_RU.po similarity index 50% rename from po/ru.po rename to po/ru_RU.po index c159b92..184f6f7 100644 --- a/po/ru.po +++ b/po/ru_RU.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: crowdin.com\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: ru\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -82,137 +88,185 @@ msgstr "" #: src/rtlsdrUI.cpp:53 msgid "Clear" -msgstr "" +msgstr "Очистить" #: src/rtlsdrUI.cpp:56 msgid "Close" +msgstr "Закрыть" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" +msgstr "Программа" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" +msgstr "Информация" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "АИС" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:290 +msgid "?" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" -msgstr "" +msgstr "МГц" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM-радио" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 -msgid "About Author" +#: src/rtlsdrUI.cpp:341 +msgid "International" msgstr "" -#: src/rtlsdrUI.cpp:306 -msgid "Information" +#: src/rtlsdrUI.cpp:341 +msgid "US" msgstr "" -#: src/rtlsdrUI.h:110 -msgid "rtlsdr Preferences" +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Об авторе" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Информация" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:346 +#: src/rtlsdr_pi.cpp:502 msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:388 +#: src/rtlsdr_pi.cpp:603 msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/sv.po b/po/sv_SE.po similarity index 57% rename from po/sv.po rename to po/sv_SE.po index 3e9eac7..4e07b0e 100644 --- a/po/sv.po +++ b/po/sv_SE.po @@ -2,49 +2,56 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: sv-SE\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "rtlsdr felkalibrering" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "Inget AIS-meddelanden mottaget\n" "Kalibreringen misslyckades" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" @@ -52,30 +59,29 @@ msgstr ") och sända på denna frekvensen för att notera hur långt maximum är "När den fungerar skall du kunna se ais-data från A och B\n" "som filtrerade utdata, och också ta emot ais-meddelanden (om sådana är tillgängliga)\n" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "rtlsdr" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "Meddelanden" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "Aktivera" @@ -91,131 +97,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "Program" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "Felkorrigering" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/th_TH.po b/po/th_TH.po new file mode 100644 index 0000000..1262b10 --- /dev/null +++ b/po/th_TH.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Thai\n" +"Language: th_TH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: th\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/tr.po b/po/tr.po deleted file mode 100644 index aea32a8..0000000 --- a/po/tr.po +++ /dev/null @@ -1,218 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: opencpn\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" -"Language-Team: Turkish\n" -"Language: tr_TR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n\n" -"X-Generator: crowdin.com\n" -"X-Crowdin-Project: opencpn\n" -"X-Crowdin-Language: tr\n" -"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" - -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" -msgstr "" - -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" -msgstr "" - -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" -msgstr "" - -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 -msgid "rtlsdr error calibration" -msgstr "" - -#: src/rtlsdrPrefs.cpp:166 -msgid "No AIS messages received\n" -"Calibration Failed" -msgstr "" - -#: src/rtlsdrPrefs.cpp:183 -msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" -"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" -"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " -msgstr "" - -#: src/rtlsdrPrefs.cpp:192 -msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" -"Once working, you should be able to see bursts (ais data) from the A and B\n" -"in the filtered output, and receive ais messages (if any are available)\n" -msgstr "" - -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 -msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" -"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" -msgstr "" - -#: src/rtlsdrPrefs.cpp:215 -msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" -"You can find this program at http://zadig.akeo.ie\n\n" -msgstr "" - -#: src/rtlsdrUI.cpp:24 -msgid "Messages" -msgstr "" - -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 -msgid "Enable" -msgstr "" - -#: src/rtlsdrUI.cpp:50 -msgid "Preferences" -msgstr "" - -#: src/rtlsdrUI.cpp:53 -msgid "Clear" -msgstr "" - -#: src/rtlsdrUI.cpp:56 -msgid "Close" -msgstr "" - -#: src/rtlsdrUI.cpp:101 -msgid "AIS" -msgstr "" - -#: src/rtlsdrUI.cpp:116 -msgid "Program" -msgstr "" - -#: src/rtlsdrUI.cpp:120 -msgid "rtl_fm | aisdecoder" -msgstr "" - -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" -msgstr "" - -#: src/rtlsdrUI.cpp:130 -msgid "extra args (blank default)" -msgstr "" - -#: src/rtlsdrUI.cpp:163 -msgid "Sample Rate (khz)" -msgstr "" - -#: src/rtlsdrUI.cpp:174 -msgid "Error Correction Calibration" -msgstr "" - -#: src/rtlsdrUI.cpp:181 -msgid "Error Correction" -msgstr "" - -#: src/rtlsdrUI.cpp:188 -msgid "Auto Calibrate" -msgstr "" - -#: src/rtlsdrUI.cpp:191 -msgid "Manual via grc" -msgstr "" - -#: src/rtlsdrUI.cpp:194 -msgid "Info" -msgstr "" - -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" -msgstr "" - -#: src/rtlsdrUI.cpp:228 -msgid "Plot" -msgstr "" - -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" -msgstr "" - -#: src/rtlsdrUI.cpp:251 -msgid "100.4" -msgstr "" - -#: src/rtlsdrUI.cpp:254 -msgid "Mhz" -msgstr "" - -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" -msgstr "" - -#: src/rtlsdrUI.cpp:275 -msgid "16" -msgstr "" - -#: src/rtlsdrUI.cpp:278 -msgid "WX" -msgstr "" - -#: src/rtlsdrUI.cpp:281 -msgid "Squelch" -msgstr "" - -#: src/rtlsdrUI.cpp:303 -msgid "About Author" -msgstr "" - -#: src/rtlsdrUI.cpp:306 -msgid "Information" -msgstr "" - -#: src/rtlsdrUI.h:110 -msgid "rtlsdr Preferences" -msgstr "" - -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" -msgstr "" - -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" -msgstr "" - -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" -msgstr "" - -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" -msgstr "" - -#: src/rtlsdr_pi.cpp:436 -msgid "Unknown mode" -msgstr "" - -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " -msgstr "" - -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 -msgid "Failed to open: " -msgstr "" - -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 -msgid "Stopped: " -msgstr "" - diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..9f4e66e --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,275 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Turkish\n" +"Language: tr_TR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: tr\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "rtlsdr" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "rtlsdr hata kalibrasyonu" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "AIS mesajı yok. Kalibrasyon Başarısız Oldu" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "Hassas bir cihaz olmadığından yazılım düzgün şekilde kalibre etmek için ayarlanmalıdır. Kalibrasyonu otomatik olarak gerçekleştirmek biraz zaman alır, ancak AIS sinyalleri taranacaktır. Bunu çalıştırmak için oldukça sık AIS trafiği gerekir. Eğer gnuradio yüklüyse, birlikte verilen komut dosyasını kullanabilir ve AIS trafiğinde tepe noktaları aranıp bilinen bir frekansı kullanabilirsiniz (örneğin, vhf channel 8) " + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr ") ve bu frekansta tepe noktası gerçek frekanstan ne kadar uzakta olduğunu kHz olarak bildirir. Bu, dongle'ı kalibre etmek için gereken hata değeridir.\n\n" +"Çalışmaya başladıktan sonra A ve B'den patlamaları (ais verileri) görebilirsiniz\n" +"filtrelenmiş çıktıda, ve ais mesajlarını alın (eğer mevcutsa)\n" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "Windows'ta, cihaz bağlandıktan sonra, gerekli Usb sürücüsünü yüklemek için önce 'Zadig' aracını çalıştırmanız gerekir.\n" +"Bu programı http://zadig.akeo.ie adresinde bulabilirsiniz\n\n" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "Mesajlar" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "Etkin" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "Tercihler" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "Temizleyiniz" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "Kapatınız" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "Program" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "ais_rx (gnuradyo)" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "rtl_fm | aisdecoder" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "ilave args (boş varsayılan)" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "Aynı oran (khz)" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "Hata Düzeltme Kalibrasyonu" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "Hata düzeltme" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "Otomatik kalibre" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "Manuel ile grc" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "Bilgi" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "AIS" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "100.4" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "Mhz" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "FM Radyo" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "16" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "WX" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "Squelch" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "VHF ses" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "Yazar hakkında" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "Bilgilendirme" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "rtlsdr seçenekleri" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "Uygulama işlemi başarısız oldu" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "Geçersiz FM frekansı" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "Bilinmeyen mod" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "Açma işlemi gerçekleştirilemedi: " + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "Yürütünüz: " + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "Durduruldu: " + diff --git a/po/vi.po b/po/vi_VN.po similarity index 54% rename from po/vi.po rename to po/vi_VN.po index 1d69fb1..f09787d 100644 --- a/po/vi.po +++ b/po/vi_VN.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:13-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: vi\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..5a336ec --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: opencpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" + +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" +msgstr "" + +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" +msgstr "" + +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 +msgid "rtlsdr error calibration" +msgstr "" + +#: src/rtlsdrPrefs.cpp:173 +msgid "No AIS messages received\n" +"Calibration Failed" +msgstr "" + +#: src/rtlsdrPrefs.cpp:190 +msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" +"To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" +"Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " +msgstr "" + +#: src/rtlsdrPrefs.cpp:199 +msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" +"Once working, you should be able to see bursts (ais data) from the A and B\n" +"in the filtered output, and receive ais messages (if any are available)\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:209 +msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" +"The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." +msgstr "" + +#: src/rtlsdrPrefs.cpp:221 +msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" +"You can find this program at http://zadig.akeo.ie\n\n" +msgstr "" + +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + +#: src/rtlsdrUI.cpp:24 +msgid "Messages" +msgstr "" + +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 +msgid "Enable" +msgstr "" + +#: src/rtlsdrUI.cpp:50 +msgid "Preferences" +msgstr "" + +#: src/rtlsdrUI.cpp:53 +msgid "Clear" +msgstr "" + +#: src/rtlsdrUI.cpp:56 +msgid "Close" +msgstr "关闭" + +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" +msgstr "" + +#: src/rtlsdrUI.cpp:164 +msgid "Program" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" +msgstr "" + +#: src/rtlsdrUI.cpp:178 +msgid "extra args (blank default)" +msgstr "" + +#: src/rtlsdrUI.cpp:211 +msgid "Sample Rate (khz)" +msgstr "" + +#: src/rtlsdrUI.cpp:222 +msgid "Error Correction Calibration" +msgstr "" + +#: src/rtlsdrUI.cpp:229 +msgid "Error Correction" +msgstr "" + +#: src/rtlsdrUI.cpp:236 +msgid "Auto Calibrate" +msgstr "" + +#: src/rtlsdrUI.cpp:239 +msgid "Manual via grc" +msgstr "" + +#: src/rtlsdrUI.cpp:242 +msgid "Info" +msgstr "" + +#: src/rtlsdrUI.cpp:263 +msgid "AIS" +msgstr "" + +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" +msgstr "" + +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" +msgstr "" + +#: src/rtlsdrUI.cpp:310 +msgid "100.4" +msgstr "" + +#: src/rtlsdrUI.cpp:313 +msgid "Mhz" +msgstr "" + +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" +msgstr "" + +#: src/rtlsdrUI.cpp:328 +msgid "16" +msgstr "" + +#: src/rtlsdrUI.cpp:331 +msgid "WX" +msgstr "" + +#: src/rtlsdrUI.cpp:334 +msgid "Squelch" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 +msgid "About Author" +msgstr "" + +#: src/rtlsdrUI.cpp:363 +msgid "Information" +msgstr "" + +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 +msgid "rtlsdr Preferences" +msgstr "" + +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" +msgstr "" + +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" +msgstr "" + +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" +msgstr "" + +#: src/rtlsdr_pi.cpp:678 +msgid "Unknown mode" +msgstr "" + +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " +msgstr "" + +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 +msgid "Failed to open: " +msgstr "" + +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 +msgid "Stopped: " +msgstr "" + diff --git a/po/zh.po b/po/zh_TW.po similarity index 54% rename from po/zh.po rename to po/zh_TW.po index 59698d9..d39d4a8 100644 --- a/po/zh.po +++ b/po/zh_TW.po @@ -2,77 +2,83 @@ msgid "" msgstr "" "Project-Id-Version: opencpn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-27 14:11-0300\n" -"PO-Revision-Date: 2016-02-27 12:12-0500\n" -"Last-Translator: nohal \n" +"POT-Creation-Date: 2023-10-21 13:09+0200\n" +"PO-Revision-Date: 2023-11-09 21:22\n" +"Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: crowdin.com\n" "X-Crowdin-Project: opencpn\n" +"X-Crowdin-Project-ID: 49843\n" "X-Crowdin-Language: zh-TW\n" "X-Crowdin-File: /plugins/rtlsdr_pi/po/rtlsdr_pi.pot\n" +"X-Crowdin-File-ID: 119\n" -#: src/rtlsdrPrefs.cpp:67 -msgid "ais_rx" +#: src/FlightsDialog.cpp:64 +msgid "Failed to go to position!" msgstr "" -#: src/rtlsdrPrefs.cpp:69 -msgid "rtl_fm" +#: src/FlightsDialog.cpp:65 src/rtlsdrPrefs.cpp:203 src/rtlsdrPrefs.cpp:226 +#: src/rtlsdrPrefs.cpp:237 src/rtlsdrUI.h:58 src/rtlsdr_pi.cpp:135 +#: src/rtlsdr_pi.cpp:690 src/rtlsdr_pi.cpp:704 +msgid "rtlsdr" +msgstr "" + +#: src/FlightsDialog.cpp:75 +msgid "Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:70 -msgid "aisdecoder" +#: src/FlightsDialog.cpp:75 +msgid "Not Connected" msgstr "" -#: src/rtlsdrPrefs.cpp:77 src/rtlsdrPrefs.cpp:167 +#: src/rtlsdrPrefs.cpp:84 src/rtlsdrPrefs.cpp:174 msgid "rtlsdr error calibration" msgstr "" -#: src/rtlsdrPrefs.cpp:166 +#: src/rtlsdrPrefs.cpp:173 msgid "No AIS messages received\n" "Calibration Failed" msgstr "" -#: src/rtlsdrPrefs.cpp:183 +#: src/rtlsdrPrefs.cpp:190 msgid "Because the software radio is not a precision device, The error value must be set to properly calibrate the radio dongle.\n\n" "To perform calibration, the autocalibrate takes some time, but will scan many error values searching for AIS signals. This requires fairly frequent AIS traffic to work.\n\n" "Alternately if gnuradio is installed, you may use the included script and either look for peaks on ais traffic, or use a known frequency (for example, vhf channel 8 is " msgstr "" -#: src/rtlsdrPrefs.cpp:192 +#: src/rtlsdrPrefs.cpp:199 msgid ") and transmit on this frequency to note how far the peak is from the true frequency in khz. This is the error value needed to calibrate the dongle.\n\n" "Once working, you should be able to see bursts (ais data) from the A and B\n" "in the filtered output, and receive ais messages (if any are available)\n" msgstr "" -#: src/rtlsdrPrefs.cpp:196 src/rtlsdrPrefs.cpp:220 src/rtlsdrUI.h:56 -#: src/rtlsdr_pi.cpp:121 src/rtlsdr_pi.cpp:448 src/rtlsdr_pi.cpp:462 -msgid "rtlsdr" -msgstr "" - -#: src/rtlsdrPrefs.cpp:202 +#: src/rtlsdrPrefs.cpp:209 msgid "This plugin integrates opencpn with the rtlsdr project to turn DVB dongles into a SDR receiver. see: http://sdr.osmocom.org/trac/wiki/rtl-sdr\n\n" "The author is using the r820t type dvb-t dongle with a standard vhf antenna, but many others can work. The antenna coax cable is spliced to the dvb-t cable, both inner and outer connections must be made.\n\n" -"Currently ais channel A only is available with rtl_fm and aisdecoder mode. This method uses little cpu and is very efficient. \n" -"The gnuradio implementation automatically receives both channels A and B \n" -"simaltaniously but uses much more cpu (due to the python implementation)" +"rtl_ais can efficiently recieve channel A and B simultaneously\n" +"rtl_fm/softfm and aisdecoder can only receive channel A or B\n" +"ais_rx (gnuradio) receives both channels A and B but uses much more cpu." msgstr "" -#: src/rtlsdrPrefs.cpp:215 +#: src/rtlsdrPrefs.cpp:221 msgid "Under Windows Operating system, you must first run the utility program 'zadig'to install the needed usb driver once the device is plugged in.\n" "You can find this program at http://zadig.akeo.ie\n\n" msgstr "" +#: src/rtlsdrPrefs.cpp:233 +msgid "Where dump1090 is providing data on port 30003\n" +"Normally set to 127.0.0.1 (localhost)" +msgstr "" + #: src/rtlsdrUI.cpp:24 msgid "Messages" msgstr "" -#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:108 src/rtlsdrUI.cpp:225 -#: src/rtlsdrUI.cpp:248 src/rtlsdrUI.cpp:272 +#: src/rtlsdrUI.cpp:47 src/rtlsdrUI.cpp:273 msgid "Enable" msgstr "" @@ -88,131 +94,179 @@ msgstr "" msgid "Close" msgstr "" -#: src/rtlsdrUI.cpp:101 -msgid "AIS" +#: src/rtlsdrUI.cpp:106 +msgid "N/A" +msgstr "" + +#: src/rtlsdrUI.cpp:110 +msgid "Goto" msgstr "" -#: src/rtlsdrUI.cpp:116 +#: src/rtlsdrUI.cpp:164 msgid "Program" msgstr "" -#: src/rtlsdrUI.cpp:120 +#: src/rtlsdrUI.cpp:168 +msgid "ais_rx (gnuradio)" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "builtin rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 +msgid "rtl_ais" +msgstr "" + +#: src/rtlsdrUI.cpp:168 msgid "rtl_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:120 -msgid "ais_rx (gnuradio)" +#: src/rtlsdrUI.cpp:168 +msgid "soft_fm | aisdecoder" msgstr "" -#: src/rtlsdrUI.cpp:130 +#: src/rtlsdrUI.cpp:178 msgid "extra args (blank default)" msgstr "" -#: src/rtlsdrUI.cpp:163 +#: src/rtlsdrUI.cpp:211 msgid "Sample Rate (khz)" msgstr "" -#: src/rtlsdrUI.cpp:174 +#: src/rtlsdrUI.cpp:222 msgid "Error Correction Calibration" msgstr "" -#: src/rtlsdrUI.cpp:181 +#: src/rtlsdrUI.cpp:229 msgid "Error Correction" msgstr "" -#: src/rtlsdrUI.cpp:188 +#: src/rtlsdrUI.cpp:236 msgid "Auto Calibrate" msgstr "" -#: src/rtlsdrUI.cpp:191 +#: src/rtlsdrUI.cpp:239 msgid "Manual via grc" msgstr "" -#: src/rtlsdrUI.cpp:194 +#: src/rtlsdrUI.cpp:242 msgid "Info" msgstr "" -#: src/rtlsdrUI.cpp:218 -msgid "ADS-B" +#: src/rtlsdrUI.cpp:263 +msgid "AIS" msgstr "" -#: src/rtlsdrUI.cpp:228 -msgid "Plot" +#: src/rtlsdrUI.cpp:265 +msgid "Plotting Planes (ADSB)" msgstr "" -#: src/rtlsdrUI.cpp:241 -msgid "FM Radio" +#: src/rtlsdrUI.cpp:283 +msgid "dump1090 Server" +msgstr "" + +#: src/rtlsdrUI.cpp:290 +msgid "?" +msgstr "" + +#: src/rtlsdrUI.cpp:303 +msgid "ADSB" msgstr "" -#: src/rtlsdrUI.cpp:251 +#: src/rtlsdrUI.cpp:310 msgid "100.4" msgstr "" -#: src/rtlsdrUI.cpp:254 +#: src/rtlsdrUI.cpp:313 msgid "Mhz" msgstr "" -#: src/rtlsdrUI.cpp:265 -msgid "VHF Audio" +#: src/rtlsdrUI.cpp:321 +msgid "FM Radio" msgstr "" -#: src/rtlsdrUI.cpp:275 +#: src/rtlsdrUI.cpp:328 msgid "16" msgstr "" -#: src/rtlsdrUI.cpp:278 +#: src/rtlsdrUI.cpp:331 msgid "WX" msgstr "" -#: src/rtlsdrUI.cpp:281 +#: src/rtlsdrUI.cpp:334 msgid "Squelch" msgstr "" -#: src/rtlsdrUI.cpp:303 +#: src/rtlsdrUI.cpp:341 +msgid "International" +msgstr "" + +#: src/rtlsdrUI.cpp:341 +msgid "US" +msgstr "" + +#: src/rtlsdrUI.cpp:351 +msgid "VHF Audio" +msgstr "" + +#: src/rtlsdrUI.cpp:360 msgid "About Author" msgstr "" -#: src/rtlsdrUI.cpp:306 +#: src/rtlsdrUI.cpp:363 msgid "Information" msgstr "" -#: src/rtlsdrUI.h:110 +#: src/rtlsdrUI.h:83 src/rtlsdr_pi.cpp:140 +msgid "Flights" +msgstr "" + +#: src/rtlsdrUI.h:144 msgid "rtlsdr Preferences" msgstr "" -#: src/rtlsdr_pi.cpp:202 -msgid "rtlsdr PlugIn for OpenCPN" +#: src/rtlsdr_pi.cpp:502 +msgid "Execution failed" msgstr "" -#: src/rtlsdr_pi.cpp:207 -msgid "rtlsdr PlugIn for OpenCPN\n" -"Read rtlsdr nmea messages from gr-ais ais_rx.py script. \n" -"Support ADS-b FM radio and vhf\n" -"Eventually version will need to link with gnu radio directly.\n\n" -"The rtlsdr plugin was written by Sean D'Epagnier\n" +#: src/rtlsdr_pi.cpp:603 +msgid "Invalid FM frequency" msgstr "" -#: src/rtlsdr_pi.cpp:346 -msgid "Execution failed" +#: src/rtlsdr_pi.cpp:638 +msgid "Started builtin rtl_ais" msgstr "" -#: src/rtlsdr_pi.cpp:388 -msgid "Invalid FM frequency" +#: src/rtlsdr_pi.cpp:641 +msgid "failed to start builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:642 +msgid "is an rtlsdr device available?\n" msgstr "" -#: src/rtlsdr_pi.cpp:436 +#: src/rtlsdr_pi.cpp:678 msgid "Unknown mode" msgstr "" -#: src/rtlsdr_pi.cpp:445 src/rtlsdr_pi.cpp:459 -msgid "Executed: " +#: src/rtlsdr_pi.cpp:687 +msgid "Executing: " msgstr "" -#: src/rtlsdr_pi.cpp:447 src/rtlsdr_pi.cpp:461 +#: src/rtlsdr_pi.cpp:689 src/rtlsdr_pi.cpp:703 msgid "Failed to open: " msgstr "" -#: src/rtlsdr_pi.cpp:475 src/rtlsdr_pi.cpp:484 +#: src/rtlsdr_pi.cpp:701 +msgid "Executed: " +msgstr "" + +#: src/rtlsdr_pi.cpp:729 +msgid "Stopped builtin rtl_ais" +msgstr "" + +#: src/rtlsdr_pi.cpp:740 src/rtlsdr_pi.cpp:749 msgid "Stopped: " msgstr "" diff --git a/src/FlightsDialog.cpp b/src/FlightsDialog.cpp index 66e23a7..6fc1744 100644 --- a/src/FlightsDialog.cpp +++ b/src/FlightsDialog.cpp @@ -27,6 +27,7 @@ #include #include "rtlsdr_pi.h" +#include "georef.h" enum {HEX, NAME, HDG, SPD, LAT, LON, ALT, AGE, DIST, MSGS}; diff --git a/src/ocpn_plugin.h b/src/ocpn_plugin.h deleted file mode 100644 index 553f996..0000000 --- a/src/ocpn_plugin.h +++ /dev/null @@ -1,558 +0,0 @@ -/****************************************************************************** - * - * Project: OpenCPN - * Purpose: PlugIn Object Definition/API - * Author: David Register - * - *************************************************************************** - * Copyright (C) 2010 by David S. Register * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - *************************************************************************** - * - */ -#ifndef _PLUGIN_H_ -#define _PLUGIN_H_ - - -#ifndef DECL_EXP -#ifdef __WXMSW__ -# define DECL_EXP __declspec(dllexport) -#else -# define DECL_EXP -#endif -#endif - - -#ifdef __GNUC__ -#undef DECL_EXP -#define DECL_EXP __attribute__((visibility("default"))) -#endif - -#include -#include - -// This is the most modern API Version number -// It is expected that the API will remain downward compatible, meaning that -// PlugIns conforming to API Version less then the most modern will also -// be correctly supported. -#define API_VERSION_MAJOR 1 -#define API_VERSION_MINOR 9 - -// Fwd Definitions -class wxFileConfig; -class wxNotebook; -class wxFont; -class wxAuiManager; - -//--------------------------------------------------------------------------------------------------------- -// -// Bitfield PlugIn Capabilites flag definition -// -//--------------------------------------------------------------------------------------------------------- -#define WANTS_OVERLAY_CALLBACK 0x00000001 -#define WANTS_CURSOR_LATLON 0x00000002 -#define WANTS_TOOLBAR_CALLBACK 0x00000004 -#define INSTALLS_TOOLBAR_TOOL 0x00000008 -#define WANTS_CONFIG 0x00000010 -#define INSTALLS_TOOLBOX_PAGE 0x00000020 -#define INSTALLS_CONTEXTMENU_ITEMS 0x00000040 -#define WANTS_NMEA_SENTENCES 0x00000080 -#define WANTS_NMEA_EVENTS 0x00000100 -#define WANTS_AIS_SENTENCES 0x00000200 -#define USES_AUI_MANAGER 0x00000400 -#define WANTS_PREFERENCES 0x00000800 -#define INSTALLS_PLUGIN_CHART 0x00001000 -#define WANTS_ONPAINT_VIEWPORT 0x00002000 -#define WANTS_PLUGIN_MESSAGING 0x00004000 -#define WANTS_OPENGL_OVERLAY_CALLBACK 0x00008000 -#define WANTS_DYNAMIC_OPENGL_OVERLAY_CALLBACK 0x00010000 - -//---------------------------------------------------------------------------------------------------------- -// Some PlugIn API interface object class definitions -//---------------------------------------------------------------------------------------------------------- -enum PI_ColorScheme -{ - PI_GLOBAL_COLOR_SCHEME_RGB, - PI_GLOBAL_COLOR_SCHEME_DAY, - PI_GLOBAL_COLOR_SCHEME_DUSK, - PI_GLOBAL_COLOR_SCHEME_NIGHT, - PI_N_COLOR_SCHEMES -}; - -class PlugIn_ViewPort -{ - public: - double clat; // center point - double clon; - double view_scale_ppm; - double skew; - double rotation; - - float chart_scale; // conventional chart displayed scale - - int pix_width; - int pix_height; - wxRect rv_rect; - bool b_quilt; - int m_projection_type; - - double lat_min, lat_max, lon_min, lon_max; - - bool bValid; // This VP is valid -}; - -class PlugIn_Position_Fix -{ - public: - double Lat; - double Lon; - double Cog; - double Sog; - double Var; // Variation, typically from RMC message - time_t FixTime; - int nSats; -}; - -class PlugIn_Position_Fix_Ex -{ - public: - double Lat; - double Lon; - double Cog; - double Sog; - double Var; // Variation, typically from RMC message - double Hdm; - double Hdt; - time_t FixTime; - int nSats; -}; - -// Describe AIS Alarm state -enum plugin_ais_alarm_type -{ - PI_AIS_NO_ALARM = 0, - PI_AIS_ALARM_SET, - PI_AIS_ALARM_ACKNOWLEDGED - -}; - - -class PlugIn_AIS_Target -{ - public: - - int MMSI; - int Class; - int NavStatus; - double SOG; - double COG; - double HDG; - double Lon; - double Lat; - int ROTAIS; - char CallSign[8]; // includes terminator - char ShipName[21]; - unsigned char ShipType; - int IMO; - - double Range_NM; - double Brg; - - // Per target collision parameters - bool bCPA_Valid; - double TCPA; // Minutes - double CPA; // Nautical Miles - - plugin_ais_alarm_type alarm_state; -}; - - -// ChartType constants -typedef enum ChartTypeEnumPI -{ - PI_CHART_TYPE_UNKNOWN = 0, - PI_CHART_TYPE_DUMMY, - PI_CHART_TYPE_DONTCARE, - PI_CHART_TYPE_KAP, - PI_CHART_TYPE_GEO, - PI_CHART_TYPE_S57, - PI_CHART_TYPE_CM93, - PI_CHART_TYPE_CM93COMP, - PI_CHART_TYPE_PLUGIN -}_ChartTypeEnumPI; - -// ChartFamily constants -typedef enum ChartFamilyEnumPI -{ - PI_CHART_FAMILY_UNKNOWN = 0, - PI_CHART_FAMILY_RASTER, - PI_CHART_FAMILY_VECTOR, - PI_CHART_FAMILY_DONTCARE -}_ChartFamilyEnumPI; - -// Depth unit type enum -typedef enum ChartDepthUnitTypePI -{ - PI_DEPTH_UNIT_UNKNOWN, - PI_DEPTH_UNIT_FEET, - PI_DEPTH_UNIT_METERS, - PI_DEPTH_UNIT_FATHOMS -}_ChartDepthUnitTypePI; - -// Projection type enum -typedef enum OcpnProjTypePI -{ - PI_PROJECTION_UNKNOWN, - PI_PROJECTION_MERCATOR, - PI_PROJECTION_TRANSVERSE_MERCATOR, - PI_PROJECTION_POLYCONIC -}_OcpnProjTypePI; - -typedef struct _ExtentPI{ - double SLAT; - double WLON; - double NLAT; - double ELON; -}ExtentPI; - -// PlugInChartBase::Init() init_flags constants -#define PI_FULL_INIT 0 -#define PI_HEADER_ONLY 1 -#define PI_THUMB_ONLY 2 - - -// ---------------------------------------------------------------------------- -// PlugInChartBase -// This class is the base class for Plug-able chart types -// ---------------------------------------------------------------------------- - -class DECL_EXP PlugInChartBase : public wxObject -{ - public: - // These methods Must be overriden in any derived class - PlugInChartBase(); - virtual ~PlugInChartBase(); - - virtual wxString GetFileSearchMask(void); - - virtual int Init( const wxString& full_path, int init_flags ); - virtual void SetColorScheme(int cs, bool bApplyImmediate); - - virtual double GetNormalScaleMin(double canvas_scale_factor, bool b_allow_overzoom); - virtual double GetNormalScaleMax(double canvas_scale_factor, int canvas_width); - virtual double GetNearestPreferredScalePPM(double target_scale_ppm); - - virtual bool GetChartExtent(ExtentPI *pext); - - virtual wxBitmap &RenderRegionView(const PlugIn_ViewPort& VPoint, const wxRegion &Region); - - virtual bool AdjustVP(PlugIn_ViewPort &vp_last, PlugIn_ViewPort &vp_proposed); - - virtual void GetValidCanvasRegion(const PlugIn_ViewPort& VPoint, wxRegion *pValidRegion); - - virtual int GetCOVREntries(){ return 0; } - virtual int GetCOVRTablePoints(int iTable) { return 0; } - virtual int GetCOVRTablenPoints(int iTable){ return 0; } - virtual float *GetCOVRTableHead(int iTable){ return (float *)NULL; } - - virtual wxBitmap *GetThumbnail(int tnx, int tny, int cs); - -// Accessors, need not be overridden in derived class if the member variables are maintained - virtual wxString GetFullPath() const { return m_FullPath;} - virtual ChartTypeEnumPI GetChartType() { return m_ChartType;} - virtual ChartFamilyEnumPI GetChartFamily() { return m_ChartFamily;} - virtual OcpnProjTypePI GetChartProjection() { return m_projection;} - virtual wxString GetName() { return m_Name;} - virtual wxString GetDescription() { return m_Description;} - virtual wxString GetID() { return m_ID;} - virtual wxString GetSE() { return m_SE;} - virtual wxString GetDepthUnits() { return m_DepthUnits;} - virtual wxString GetSoundingsDatum() { return m_SoundingsDatum;} - virtual wxString GetDatumString() { return m_datum_str;} - virtual wxString GetExtraInfo() { return m_ExtraInfo; } - virtual wxString GetPubDate() { return m_PubYear;} - virtual double GetChartErrorFactor() { return m_Chart_Error_Factor;} - virtual ChartDepthUnitTypePI GetDepthUnitId() { return m_depth_unit_id;} - virtual bool IsReadyToRender() { return m_bReadyToRender;} - virtual int GetNativeScale() { return m_Chart_Scale; }; - virtual double GetChartSkew() { return m_Chart_Skew; } - virtual wxDateTime GetEditionDate(void) { return m_EdDate;} - -// Methods pertaining to CHART_FAMILY_RASTER type PlugIn charts only - virtual void ComputeSourceRectangle(const PlugIn_ViewPort &vp, wxRect *pSourceRect); - virtual double GetRasterScaleFactor(); - virtual bool GetChartBits( wxRect& source, unsigned char *pPix, int sub_samp ); - virtual int GetSize_X(); - virtual int GetSize_Y(); - virtual void latlong_to_chartpix(double lat, double lon, double &pixx, double &pixy); - - protected: - ChartTypeEnumPI m_ChartType; - ChartFamilyEnumPI m_ChartFamily; - - wxString m_FullPath; - OcpnProjTypePI m_projection; - int m_Chart_Scale; - double m_Chart_Skew; - - wxDateTime m_EdDate; - bool m_bReadyToRender; - - wxString m_Name; - wxString m_Description; - wxString m_ID; - wxString m_SE; - wxString m_SoundingsDatum; - wxString m_datum_str; - wxString m_PubYear; - wxString m_DepthUnits; - wxString m_ExtraInfo; - - ChartDepthUnitTypePI m_depth_unit_id; - - double m_Chart_Error_Factor; - - -}; - - - - - -// Declare an array of PlugIn_AIS_Targets -WX_DEFINE_ARRAY_PTR(PlugIn_AIS_Target *, ArrayOfPlugIn_AIS_Targets); - - - -//---------------------------------------------------------------------------------------------------------- -// The Generic PlugIn Interface Class Definition -// -// This is a virtual class. -// opencpn PlugIns must derive from this class. -// There are two types of methods in this class -// a. Required...must be overridden and implemented by PlugIns -// b. Optional..may be overridden by PlugIns - -// PlugIns must implement optional method overrides consistent with their -// declared capabilities flag as returned by Init(). -//---------------------------------------------------------------------------------------------------------- -class DECL_EXP opencpn_plugin -{ - -public: - opencpn_plugin(void *pmgr) {} - virtual ~opencpn_plugin(); - - // Public API to the PlugIn class - - // This group of methods is required, and will be called by the opencpn host - // opencpn PlugIns must implement this group - virtual int Init(void); // Return the PlugIn Capabilites flag - virtual bool DeInit(void); - - virtual int GetAPIVersionMajor(); - virtual int GetAPIVersionMinor(); - virtual int GetPlugInVersionMajor(); - virtual int GetPlugInVersionMinor(); - virtual wxBitmap *GetPlugInBitmap(); - - // These three methods should produce valid, meaningful strings always - // ---EVEN IF--- the PlugIn has not (yet) been initialized. - // They are used by the PlugInManager GUI - virtual wxString GetCommonName(); - virtual wxString GetShortDescription(); - virtual wxString GetLongDescription(); - - // This group is optional. - // PlugIns may override any of these methods as required - - virtual void SetDefaults(void); //This will be called upon enabling a PlugIn via the user Dialog - //It gives a chance to setup any default options and behavior - - virtual int GetToolbarToolCount(void); - - virtual int GetToolboxPanelCount(void); - virtual void SetupToolboxPanel(int page_sel, wxNotebook* pnotebook); - virtual void OnCloseToolboxPanel(int page_sel, int ok_apply_cancel); - - virtual void ShowPreferencesDialog( wxWindow* parent ); - - virtual bool RenderOverlay(wxMemoryDC *pmdc, PlugIn_ViewPort *vp); - virtual void SetCursorLatLon(double lat, double lon); - virtual void SetCurrentViewPort(PlugIn_ViewPort &vp); - - virtual void SetPositionFix(PlugIn_Position_Fix &pfix); - virtual void SetNMEASentence(wxString &sentence); - virtual void SetAISSentence(wxString &sentence); - - virtual void ProcessParentResize(int x, int y); - virtual void SetColorScheme(PI_ColorScheme cs); - - virtual void OnToolbarToolCallback(int id); - virtual void OnContextMenuItemCallback(int id); - - virtual void UpdateAuiStatus(void); - - virtual wxArrayString GetDynamicChartClassNameArray(void); - - }; - - - // the types of the class factories used to create PlugIn instances - typedef opencpn_plugin* create_t(void*); - typedef void destroy_t(opencpn_plugin*); - - class DECL_EXP opencpn_plugin_16 : public opencpn_plugin - { - public: - opencpn_plugin_16(void *pmgr); - virtual ~opencpn_plugin_16(); - - virtual bool RenderOverlay(wxDC &dc, PlugIn_ViewPort *vp); - - virtual void SetPluginMessage(wxString &message_id, wxString &message_body); - - }; - -class DECL_EXP opencpn_plugin_17 : public opencpn_plugin -{ - public: - opencpn_plugin_17(void *pmgr); - virtual ~opencpn_plugin_17(); - - virtual bool RenderOverlay(wxDC &dc, PlugIn_ViewPort *vp); - virtual bool RenderGLOverlay(wxGLContext *pcontext, PlugIn_ViewPort *vp); - - virtual void SetPluginMessage(wxString &message_id, wxString &message_body); - -}; - -class DECL_EXP opencpn_plugin_18 : public opencpn_plugin -{ - public: - opencpn_plugin_18(void *pmgr); - virtual ~opencpn_plugin_18(); - - virtual bool RenderOverlay(wxDC &dc, PlugIn_ViewPort *vp); - virtual bool RenderGLOverlay(wxGLContext *pcontext, PlugIn_ViewPort *vp); - - virtual void SetPluginMessage(wxString &message_id, wxString &message_body); - virtual void SetPositionFixEx(PlugIn_Position_Fix_Ex &pfix); - -}; - -class DECL_EXP opencpn_plugin_19 : public opencpn_plugin_18 -{ - public: - opencpn_plugin_19(void *pmgr); - virtual ~opencpn_plugin_19(); - - virtual void OnSetupOptions(void); -}; - -//---------------------------------------------------------------------------------------------------------- -// The PlugIn CallBack API Definition -// -// The API back up to the PlugIn Manager -// PlugIns may call these static functions as necessary for system services -// -//---------------------------------------------------------------------------------------------------------- - - -extern "C" DECL_EXP int InsertPlugInTool(wxString label, wxBitmap *bitmap, wxBitmap *bmpDisabled, wxItemKind kind, - wxString shortHelp, wxString longHelp, wxObject *clientData, int position, - int tool_sel, opencpn_plugin *pplugin); -extern "C" DECL_EXP void RemovePlugInTool(int tool_id); -extern "C" DECL_EXP void SetToolbarToolViz(int item, bool viz); // Temporarily change toolbar tool viz -extern "C" DECL_EXP void SetToolbarItemState(int item, bool toggle); -extern "C" DECL_EXP void SetToolbarToolBitmaps(int item, wxBitmap *bitmap, wxBitmap *bmpDisabled); - -extern "C" DECL_EXP int AddCanvasContextMenuItem(wxMenuItem *pitem, opencpn_plugin *pplugin ); -extern "C" DECL_EXP void RemoveCanvasContextMenuItem(int item); // Fully remove this item -extern "C" DECL_EXP void SetCanvasContextMenuItemViz(int item, bool viz); // Temporarily change context menu ptions -extern "C" DECL_EXP void SetCanvasContextMenuItemGrey(int item, bool grey); - - -extern "C" DECL_EXP wxFileConfig *GetOCPNConfigObject(void); - -extern "C" DECL_EXP void RequestRefresh(wxWindow *); -extern "C" DECL_EXP bool GetGlobalColor(wxString colorName, wxColour *pcolour); - -extern "C" DECL_EXP void GetCanvasPixLL(PlugIn_ViewPort *vp, wxPoint *pp, double lat, double lon); -extern "C" DECL_EXP void GetCanvasLLPix( PlugIn_ViewPort *vp, wxPoint p, double *plat, double *plon); - -extern "C" DECL_EXP wxWindow *GetOCPNCanvasWindow(); - -extern "C" DECL_EXP wxFont *OCPNGetFont(wxString TextElement, int default_size); - -extern "C" DECL_EXP wxString *GetpSharedDataLocation(); - -extern "C" DECL_EXP ArrayOfPlugIn_AIS_Targets *GetAISTargetArray(void); - -extern "C" DECL_EXP wxAuiManager *GetFrameAuiManager(void); - -extern "C" DECL_EXP bool AddLocaleCatalog( wxString catalog ); - -extern "C" DECL_EXP void PushNMEABuffer( wxString str ); - -extern DECL_EXP wxXmlDocument GetChartDatabaseEntryXML(int dbIndex, bool b_getGeom); - -extern DECL_EXP bool UpdateChartDBInplace(wxArrayString dir_array, - bool b_force_update, - bool b_ProgressDialog); -extern DECL_EXP wxArrayString GetChartDBDirArrayString(); - -extern "C" DECL_EXP void SendPluginMessage( wxString message_id, wxString message_body ); - -extern "C" DECL_EXP void DimeWindow(wxWindow *); - -extern "C" DECL_EXP void JumpToPosition(double lat, double lon, double scale); - -/* API 1.9 adds some common cartographic fucntions to avoid unnecessary code duplication */ -/* Study the original OpenCPN source (georef.c) for functional definitions */ - -extern "C" void DistanceBearingMercator(double lat0, double lon0, double lat1, double lon1, double *brg, double *dist); -extern "C" double DistGreatCircle(double slat, double slon, double dlat, double dlon); - -extern "C" void toTM(float lat, float lon, float lat0, float lon0, double *x, double *y); -extern "C" void fromTM(double x, double y, double lat0, double lon0, double *lat, double *lon); -extern "C" void toSM(double lat, double lon, double lat0, double lon0, double *x, double *y); -extern "C" void fromSM(double x, double y, double lat0, double lon0, double *lat, double *lon); -extern "C" void toSM_ECC(double lat, double lon, double lat0, double lon0, double *x, double *y); -extern "C" void fromSM_ECC(double x, double y, double lat0, double lon0, double *lat, double *lon); - -extern "C" DECL_EXP bool DecodeSingleVDOMessage( const wxString& str, PlugIn_Position_Fix_Ex *pos, wxString *acc ); - - -/* API 1.9 */ -typedef enum OptionsParentPI -{ - PI_OPTIONS_PARENT_DISPLAY, - PI_OPTIONS_PARENT_CONNECTIONS, - PI_OPTIONS_PARENT_CHARTS, - PI_OPTIONS_PARENT_SHIPS, - PI_OPTIONS_PARENT_UI, - PI_OPTIONS_PARENT_PLUGINS -}_OptionsParentPI; -extern DECL_EXP wxScrolledWindow *AddOptionsPage( OptionsParentPI parent, wxString title ); -extern DECL_EXP bool DeleteOptionsPage( wxScrolledWindow* page ); - -extern "C" DECL_EXP int GetChartbarHeight( void ); -extern "C" DECL_EXP bool GetActiveRoutepointGPX( char *buffer, unsigned int buffer_length ); - -#endif // _PLUGIN_H_ - diff --git a/src/rtlsdr_pi.cpp b/src/rtlsdr_pi.cpp index 11f99d8..dce2025 100644 --- a/src/rtlsdr_pi.cpp +++ b/src/rtlsdr_pi.cpp @@ -40,7 +40,14 @@ #include "rtlsdrPrefs.h" #include "georef.h" #include "icons.h" +#include +#ifdef __WXOSX__ +#include +#include +#else +#include +#endif static void KillProcess(wxProcess *process) { @@ -89,7 +96,7 @@ void rtlsdr_pi::OnTestTerminate(wxProcessEvent& event) rtlsdr_pi::rtlsdr_pi(void *ppimgr) - : opencpn_plugin_18(ppimgr), m_bNeedStart(false), m_Process1(NULL), m_Process2(NULL), + : opencpn_plugin_118(ppimgr), m_bNeedStart(false), m_Process1(NULL), m_Process2(NULL), m_prtlsdrDialog(NULL), m_flightsDialog(NULL) { // Create the PlugIn icons @@ -193,12 +200,12 @@ bool rtlsdr_pi::DeInit(void) int rtlsdr_pi::GetAPIVersionMajor() { - return MY_API_VERSION_MAJOR; + return OCPN_API_VERSION_MAJOR; } int rtlsdr_pi::GetAPIVersionMinor() { - return MY_API_VERSION_MINOR; + return OCPN_API_VERSION_MINOR; } int rtlsdr_pi::GetPlugInVersionMajor() @@ -211,6 +218,17 @@ int rtlsdr_pi::GetPlugInVersionMinor() return PLUGIN_VERSION_MINOR; } +int rtlsdr_pi::GetPlugInVersionPatch() +{ + return PLUGIN_VERSION_PATCH; +} + +int rtlsdr_pi::GetPlugInVersionPost() +{ + return PLUGIN_VERSION_TWEAK; +} + + wxBitmap *rtlsdr_pi::GetPlugInBitmap() { return new wxBitmap(_img_rtlsdr->ConvertToImage().Copy()); @@ -218,21 +236,18 @@ wxBitmap *rtlsdr_pi::GetPlugInBitmap() wxString rtlsdr_pi::GetCommonName() { - return _T("rtlsdr"); + return _T(PLUGIN_COMMON_NAME); } wxString rtlsdr_pi::GetShortDescription() { - return _("rtlsdr PlugIn for OpenCPN"); + return _(PLUGIN_SHORT_DESCRIPTION); } wxString rtlsdr_pi::GetLongDescription() { - return _("rtlsdr PlugIn for OpenCPN\n\ -This plugin automatically controls external command-line tools for software radio.\n\ -There are several options for AIS data, as well as ADS-b FM radio and vhf audio.\ -"); + return _(PLUGIN_LONG_DESCRIPTION); } int rtlsdr_pi::GetToolbarToolCount(void) @@ -875,8 +890,11 @@ bool rtlsdr_pi::LoadConfig(void) pConf->Read ( _T ( "VHFSet" ), &m_iVHFSet, 0L ); pConf->Read ( _T ( "VHFWX" ), &m_bVHFWX, false ); - m_bEnableFlights = pConf->Read ( _T ( "EnableFlights" ), false ); - m_Dump1090Server = pConf->Read ( _T ( "Dump1090Server" ), "127.0.0.1" ); +// m_bEnableFlights = pConf->Read ( _T ( "EnableFlights" ), false ); +// m_Dump1090Server = pConf->Read ( _T ( "Dump1090Server" ), "127.0.0.1" ); + pConf->Read ( _T ( "EnableFlights" ), &m_bEnableFlights, false ); + pConf->Read ( _T ( "Dump1090Server" ), &m_Dump1090Server, "127.0.0.1" ); + if(m_bEnabled) Start(); diff --git a/src/rtlsdr_pi.h b/src/rtlsdr_pi.h index 76a2319..af84bc3 100644 --- a/src/rtlsdr_pi.h +++ b/src/rtlsdr_pi.h @@ -32,8 +32,6 @@ #include #include "version.h" -#define MY_API_VERSION_MAJOR 1 -#define MY_API_VERSION_MINOR 8 #define ABOUT_AUTHOR_URL "http://seandepagnier.users.sourceforge.net" @@ -52,7 +50,7 @@ class wxProcessEvent; enum rtlsdrMode {AIS, ADSB, FM, VHF}; -class rtlsdr_pi : public opencpn_plugin_18, public wxEvtHandler +class rtlsdr_pi : public opencpn_plugin_118, public wxEvtHandler { public: rtlsdr_pi(void *ppimgr); @@ -65,6 +63,8 @@ class rtlsdr_pi : public opencpn_plugin_18, public wxEvtHandler int GetAPIVersionMinor(); int GetPlugInVersionMajor(); int GetPlugInVersionMinor(); + int GetPlugInVersionPatch(); + int GetPlugInVersionPost(); wxBitmap *GetPlugInBitmap(); wxString GetCommonName(); wxString GetShortDescription(); diff --git a/src/wxWTranslateCatalog.h b/src/wxWTranslateCatalog.h deleted file mode 100644 index 7ce2f22..0000000 --- a/src/wxWTranslateCatalog.h +++ /dev/null @@ -1,42 +0,0 @@ -/****************************************************************************** - * $Id: ocpn_draw_pi.h,v 1.0 2015/01/28 01:54:37 jongough Exp $ - * - * Project: OpenCPN - * Purpose: Redefine _() macro to allow usage of catalog - * Author: Jon Gough - * - *************************************************************************** - * Copyright (C) 2010 by David S. Register * - * $EMAIL$ * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - *************************************************************************** - */ -#ifndef _ODCATTRANS_H_ -#define _ODCATTRANS_H_ - -#ifndef WXINTL_NO_GETTEXT_MACRO -#ifdef _ -#undef _ -#endif // _ -#if wxCHECK_VERSION(3,0,0) -#define _(s) wxGetTranslation((s), wxS("opencpn-rtlsdr_pi")) -#else // wxCHECK_VERSION(3,0,0) - #define _(s) wxGetTranslation(wxT(s), wxT("opencpn-rtlsdr_pi")) -#endif // wxCHECK_VERSION(3,0,0) -#endif // WXINTL_NO_GETTEXT_MACRO - -#endif