This is an automated email from the git hooks/post-receive script.

jsonic-guest pushed a commit to branch master
in repository pentobi.

commit f85d86ecf29ba9912e8440c1f8cc4b4ae58cbdf9
Author: Juhani Numminen <juhaninummin...@gmail.com>
Date:   Thu Jan 11 11:22:23 2018 +0200

    New upstream version 14.1
---
 CMakeLists.txt                                   | 14 +++++------
 COPYING                                          |  2 +-
 INSTALL                                          | 17 ++++++-------
 NEWS                                             | 22 ++++++++++++++--
 README                                           |  2 +-
 doc/blksgf/Pentobi-SGF.html                      | 15 +++++++++++
 doc/gtp/Pentobi-GTP.html                         | 17 +++++++++++--
 doc/man/pentobi.6.in                             |  6 ++---
 src/libboardgame_base/Rating.cpp                 |  1 -
 src/libboardgame_mcts/LastGoodReply.h            |  5 +---
 src/libboardgame_mcts/Node.h                     | 11 +++++---
 src/libpentobi_mcts/Player.cpp                   |  4 ---
 src/libpentobi_mcts/State.cpp                    |  2 +-
 src/pentobi/MainWindow.cpp                       |  2 +-
 src/pentobi/Util.h                               |  1 -
 src/pentobi/help/C/pentobi/become_stronger.html  | 11 ++++----
 src/pentobi/help/C/pentobi/callisto_rules.html   |  8 +++---
 src/pentobi/help/C/pentobi/classic_rules.html    |  6 ++---
 src/pentobi/help/C/pentobi/duo_rules.html        |  4 +--
 src/pentobi/help/C/pentobi/gembloq_rules.html    |  8 +++---
 src/pentobi/help/C/pentobi/index.html            |  1 +
 src/pentobi/help/C/pentobi/junior_rules.html     |  2 +-
 src/pentobi/help/C/pentobi/nexos_rules.html      |  8 +++---
 src/pentobi/help/C/pentobi/stylesheet.css        | 32 ++++++++++++++++++------
 src/pentobi/help/C/pentobi/trigon_rules.html     |  6 ++---
 src/pentobi/help/de/pentobi/become_stronger.html | 10 ++++----
 src/pentobi/help/de/pentobi/callisto_rules.html  | 12 ++++-----
 src/pentobi/help/de/pentobi/classic_rules.html   | 12 ++++-----
 src/pentobi/help/de/pentobi/duo_rules.html       |  8 +++---
 src/pentobi/help/de/pentobi/gembloq_rules.html   | 12 ++++-----
 src/pentobi/help/de/pentobi/index.html           |  1 +
 src/pentobi/help/de/pentobi/junior_rules.html    |  4 +--
 src/pentobi/help/de/pentobi/nexos_rules.html     | 12 ++++-----
 src/pentobi/help/de/pentobi/trigon_rules.html    | 12 ++++-----
 src/pentobi_qml/CMakeLists.txt                   |  7 ------
 src/pentobi_qml/Main.cpp                         |  2 +-
 src/pentobi_qml/Pentobi.pro                      | 16 ++++++++----
 src/pentobi_qml/PieceModel.cpp                   |  1 +
 src/pentobi_qml/android/AndroidManifest.xml      | 18 +++----------
 src/pentobi_qml/deployment.pri                   | 27 --------------------
 src/pentobi_qml/pentobi.conf.in                  |  3 ---
 src/pentobi_qml/qml/Button.qml                   |  2 +-
 src/pentobi_qml/qml/Comment.qml                  |  2 --
 src/pentobi_qml/qml/ComputerColorDialog.qml      |  2 +-
 src/pentobi_qml/qml/ExportImageDialog.qml        |  2 +-
 src/pentobi_qml/qml/GameDisplayMobile.qml        |  2 +-
 src/pentobi_qml/qml/GameInfoDialog.qml           |  2 +-
 src/pentobi_qml/qml/GotoMoveDialog.qml           |  2 +-
 src/pentobi_qml/qml/HelpWindow.qml               | 15 +++++------
 src/pentobi_qml/qml/InitialRatingDialog.qml      |  2 +-
 src/pentobi_qml/qml/Main.js                      |  3 ++-
 src/pentobi_qml/qml/Main.qml                     |  1 -
 src/pentobi_qml/qml/MessageDialog.qml            |  2 +-
 src/pentobi_qml/qml/PieceCallisto.qml            |  2 +-
 src/pentobi_qml/qml/PieceClassic.qml             |  2 +-
 src/pentobi_qml/qml/PieceGembloQ.qml             |  2 +-
 src/pentobi_qml/qml/PieceNexos.qml               |  2 +-
 src/pentobi_qml/qml/PieceTrigon.qml              |  2 +-
 src/pentobi_qml/qml/RatingDialog.qml             |  2 +-
 src/pentobi_qml/qml/ToolBar.qml                  |  2 +-
 src/twogtp/Analyze.cpp                           |  1 -
 src/unittest/libboardgame_gtp/EngineTest.cpp     |  8 +++---
 62 files changed, 215 insertions(+), 209 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 889ed69..051f548 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,8 +1,8 @@
 cmake_minimum_required(VERSION 3.1.0)
 
 project(Pentobi)
-set(PENTOBI_VERSION 14.0)
-set(PENTOBI_RELEASE_DATE 2017-10-26)
+set(PENTOBI_VERSION 14.1)
+set(PENTOBI_RELEASE_DATE 2018-01-03)
 
 cmake_policy(SET CMP0043 NEW)
 
@@ -68,11 +68,11 @@ if(PENTOBI_BUILD_GUI)
   find_package(Qt5Svg 5.6 REQUIRED)
 endif()
 if(PENTOBI_BUILD_QML)
-  find_package(Qt5Concurrent 5.6 REQUIRED)
-  find_package(Qt5Qml 5.6 REQUIRED)
-  find_package(Qt5Gui 5.6 REQUIRED)
-  find_package(Qt5Svg 5.6 REQUIRED)
-  find_package(Qt5WebView 5.6 REQUIRED)
+  find_package(Qt5Concurrent 5.7 REQUIRED)
+  find_package(Qt5Qml 5.7 REQUIRED)
+  find_package(Qt5Gui 5.7 REQUIRED)
+  find_package(Qt5Svg 5.7 REQUIRED)
+  find_package(Qt5WebView 5.7 REQUIRED)
 endif()
 
 if(UNIX)
diff --git a/COPYING b/COPYING
index 72591e1..7eb2fa2 100644
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-Copyright (C) 2011-2017 Markus Enzenberger <e...@users.sourceforge.net>
+Copyright (C) 2011-2018 Markus Enzenberger <e...@users.sourceforge.net>
 
 Pentobi 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
diff --git a/INSTALL b/INSTALL
index e6c3f78..ba97879 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,11 +6,11 @@ This file explains how to compile and install Pentobi from 
the sources.
 Pentobi requires the Qt libraries (>=5.6). The C++ compiler needs C++14
 support (GCC >=4.9). The build system uses CMake (>=3.1.0).
 
-Ubuntu 16.10 provides suitable versions of the required tools and libraries in
+Ubuntu 17.10 provides suitable versions of the required tools and libraries in
 its package repository. They can be installed with the shell command:
 
   sudo apt-get install \
-    g++ make cmake qttools5-dev qttools5-dev-tools libqt5svg5-dev
+    g++ make cmake qtbase5-dev libqt5svg5-dev qttools5-dev-tools
 
 
 == Building ==
@@ -25,8 +25,8 @@ Pentobi can be compiled from the source directory with the 
shell commands:
 
 A thumbnailer plugin for KDE can be built by using the cmake option
 -DPENTOBI_BUILD_KDE_THUMBNAILER=1. In this case, the KDE development files
-need to be installed (packages kio-dev and extra-cmake-modules on
-Ubuntu 16.10). Note that on Ubuntu 16.10, the plugin will not be found if
+need to be installed (packages libkf5kio-dev and extra-cmake-modules on
+Ubuntu 17.10). Note that on Ubuntu 17.10, the plugin will not be found if
 the default installation prefix /usr/local is used. You need to add
 QT_PLUGIN_PATH=/usr/local/lib/plugins to /etc/environment. After that, you
 can enable previews for Blokus game file in the Dolphin file manager in
@@ -41,7 +41,7 @@ On Linux, Pentobi can be installed after compilation with the 
shell command:
 
 After installation, the system-wide databases should be updated to
 make Pentobi appear in the desktop menu and register it as handler for Blokus
-files (*.blksgf). On Ubuntu 16.10 with install prefix /usr/local, this can be
+files (*.blksgf). On Ubuntu 17.10 with install prefix /usr/local, this can be
 done by running:
 
   sudo update-mime-database /usr/local/share/mime
@@ -51,9 +51,8 @@ done by running:
 == Building the Android version ==
 
 For building the Android app, there is a QtCreator project file in
-src/pentobi_qml/Pentobi.pro. It requires Qt 5.6. Before compilation, the
-binary translation files need to be generated by using File/Release in
-Qt Linguist for all TS files in src/pentobi_qml/qml/i18n
+src/pentobi_qml/Pentobi.pro. It requires Qt >=5.7.
 
 For testing purposes, the GUI that is used for Android can also be built as a
-desktop application by running CMake with -DPENTOBI_BUILD_QML=1.
+desktop application by running CMake with -DPENTOBI_BUILD_QML=1 (needs the
+packages qtdeclarative5-dev and libqt5webview5-dev on Ubuntu 17.10).
diff --git a/NEWS b/NEWS
index 54aca92..041ff00 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,22 @@
+Version 14.1 (03 Jan 2018)
+==========================
+
+General:
+
+* Fixed a potential race condition during move generation.
+* Reduced maximum memory usage to a quarter instead of a third of the
+  total system memory.
+* Made unit tests work again.
+
+Android version:
+
+* Migrated QML files from Qt 5.6 to Qt >=5.7.
+* The binary translation files are now automatically created by the
+  qmake project file.
+
+
 Version 14.0 (26 Oct 2017)
-================================
+==========================
 
 General:
 
@@ -13,7 +30,8 @@ Desktop version:
 
 * Minimum required Qt version is now 5.6.
 * Bugfix: dot indicating color to play in orientation selector was not
-  always updated correctly after loading a file of a different game variant.
+  always updated correctly after loading a file of a different game
+  variant.
 * Bugfix: added missing include that broke compilation on FreeBSD 11.
 
 
diff --git a/README b/README
index 8974089..5070931 100644
--- a/README
+++ b/README
@@ -3,7 +3,7 @@ Pentobi is a computer opponent for the board game Blokus.
 It has a strong Blokus engine with 9 different playing levels. The supported
 game variants are: Classic, Duo, Trigon, Junior, Nexos, GembloQ, Callisto.
 
-Copyright (C) 2011-2017 Markus Enzenberger <e...@users.sourceforge.net>
+Copyright (C) 2011-2018 Markus Enzenberger <e...@users.sourceforge.net>
 
 See COPYING for license information.
 See INSTALL for instructions how to build the program from the sources.
diff --git a/doc/blksgf/Pentobi-SGF.html b/doc/blksgf/Pentobi-SGF.html
index 4987a61..2c8d5d1 100644
--- a/doc/blksgf/Pentobi-SGF.html
+++ b/doc/blksgf/Pentobi-SGF.html
@@ -3,6 +3,21 @@
 <head>
 <title>Pentobi SGF Files</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<style type="text/css">
+html { background-color: lightgray; }
+body {
+  background-color:white;
+  color:black;
+  font-size:17px;
+  line-height:23px;
+  max-width:60em;
+  margin:auto;
+  padding:15px;
+  min-height: 100vh;
+}
+a:link { text-decoration:none; color:blue; }
+a:visited { text-decoration:none; color:purple; }
+</style>
 </head>
 <body>
 <h1>Pentobi SGF Files</h1>
diff --git a/doc/gtp/Pentobi-GTP.html b/doc/gtp/Pentobi-GTP.html
index 1e4e5ca..f00b2ca 100644
--- a/doc/gtp/Pentobi-GTP.html
+++ b/doc/gtp/Pentobi-GTP.html
@@ -3,6 +3,21 @@
 <head>
 <title>Pentobi GTP Interface</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<style type="text/css">
+html { background-color: lightgray; }
+body {
+  background-color:white;
+  color:black;
+  font-size:17px;
+  line-height:23px;
+  max-width:60em;
+  margin:auto;
+  padding:15px;
+  min-height: 100vh;
+}
+a:link { text-decoration:none; color:blue; }
+a:visited { text-decoration:none; color:purple; }
+</style>
 </head>
 <body>
 <h1>Pentobi GTP Interface</h1>
@@ -173,8 +188,6 @@ was played, otherwise to the last position in the main 
variation.</dd>
 <dd>Return the name of the GTP engine (<tt>Pentobi</tt>).</dd>
 <dt>play <i>color</i> <i>move</i></dt>
 <dd>Play a move for a given color in the current board position.</dd>
-<dt>protocol_version</dt>
-<dd>Return the version of the GTP protocol used (currently <tt>2</tt>).</dd>
 <dt>quit</dt>
 <dd>Exit the command loop and quit the engine.</dd>
 <dt>reg_genmove <i>color</i></dt>
diff --git a/doc/man/pentobi.6.in b/doc/man/pentobi.6.in
index 6bfb301..917fb74 100644
--- a/doc/man/pentobi.6.in
+++ b/doc/man/pentobi.6.in
@@ -1,4 +1,4 @@
-.TH PENTOBI 6 "2017-04-17" "Pentobi @PENTOBI_VERSION@" "Pentobi command 
reference"
+.TH PENTOBI 6 "2017-11-03" "Pentobi @PENTOBI_VERSION@" "Pentobi command 
reference"
 
 .SH NAME
 pentobi \- computer opponent for the board game Blokus
@@ -25,10 +25,10 @@ doc/blksgf/Pentobi-SGF.html in the Pentobi source package.
 Set the maximum playing level. Reducing this value reduces the amount
 of memory used by the search, which can be useful to run Pentobi on systems
 that have low memory or are too slow to use the highest levels.
-By default, Pentobi currently allocates up to 2 GB (but not more than a third
+By default, Pentobi currently allocates up to 2 GB (but not more than a quarter
 of the physical memory available on the system).
 Reducing the maximum level to 8 currently reduces this amount by a factor
-of 6 and lower maximum levels even more.
+of 3 to 4 and lower maximum levels even more.
 .TP
 .B \-h, \-\-help
 Display help and exit.
diff --git a/src/libboardgame_base/Rating.cpp b/src/libboardgame_base/Rating.cpp
index 786dc2e..ada6dbe 100644
--- a/src/libboardgame_base/Rating.cpp
+++ b/src/libboardgame_base/Rating.cpp
@@ -10,7 +10,6 @@
 
 #include "Rating.h"
 
-#include <cmath>
 #include <iostream>
 #include "libboardgame_util/Assert.h"
 
diff --git a/src/libboardgame_mcts/LastGoodReply.h 
b/src/libboardgame_mcts/LastGoodReply.h
index 4726cef..2f49133 100644
--- a/src/libboardgame_mcts/LastGoodReply.h
+++ b/src/libboardgame_mcts/LastGoodReply.h
@@ -7,12 +7,9 @@
 #ifndef LIBBOARDGAME_MCTS_LAST_GOOD_REPLY_H
 #define LIBBOARDGAME_MCTS_LAST_GOOD_REPLY_H
 
-#include <algorithm>
-#include <cstring>
-#include <memory>
+#include <cstddef>
 #include <random>
 #include "Atomic.h"
-#include "PlayerMove.h"
 
 namespace libboardgame_mcts {
 
diff --git a/src/libboardgame_mcts/Node.h b/src/libboardgame_mcts/Node.h
index c898946..9cac9f1 100644
--- a/src/libboardgame_mcts/Node.h
+++ b/src/libboardgame_mcts/Node.h
@@ -118,7 +118,7 @@ private:
 
     Move m_move;
 
-    NodeIdx m_first_child;
+    Atomic<NodeIdx, MT> m_first_child;
 };
 
 template<typename M, typename F, bool MT>
@@ -185,7 +185,7 @@ template<typename M, typename F, bool MT>
 inline NodeIdx Node<M, F, MT>::get_first_child() const
 {
     LIBBOARDGAME_ASSERT(has_children());
-    return m_first_child;
+    return m_first_child.load(memory_order_acquire);
 }
 
 template<typename M, typename F, bool MT>
@@ -256,7 +256,10 @@ inline void Node<M, F, MT>::link_children(NodeIdx 
first_child,
     LIBBOARDGAME_ASSERT(nu_children < Move::range);
     // first_child cannot be 0 because 0 is always used for the root node
     LIBBOARDGAME_ASSERT(first_child != 0);
-    m_first_child = first_child;
+    // Even if m_first_child is only used by other threads after m_nu_children
+    // was set, we need release/acquire order for both because m_first_child
+    // can be overwritten later if two threads expand a node simultaneously.
+    m_first_child.store(first_child, memory_order_release);
     m_nu_children.store(nu_children, memory_order_release);
 }
 
@@ -267,8 +270,8 @@ inline void Node<M, F, MT>::link_children_st(NodeIdx 
first_child,
     LIBBOARDGAME_ASSERT(nu_children < Move::range);
     // first_child cannot be 0 because 0 is always used for the root node
     LIBBOARDGAME_ASSERT(first_child != 0);
-    m_first_child = first_child;
     // Store relaxed (wouldn't even need to be atomic)
+    m_first_child.store(first_child, memory_order_relaxed);
     m_nu_children.store(nu_children, memory_order_relaxed);
 }
 
diff --git a/src/libpentobi_mcts/Player.cpp b/src/libpentobi_mcts/Player.cpp
index dac4169..8fd4db7 100644
--- a/src/libpentobi_mcts/Player.cpp
+++ b/src/libpentobi_mcts/Player.cpp
@@ -241,11 +241,7 @@ size_t Player::get_memory()
         available = 512000000;
     }
     // Don't use all of the available memory
-#if PENTOBI_LOW_RESOURCES
     size_t reasonable = available / 4;
-#else
-    size_t reasonable = available / 3;
-#endif
     size_t wanted = 2000000000;
     if (m_max_level < max_supported_level)
     {
diff --git a/src/libpentobi_mcts/State.cpp b/src/libpentobi_mcts/State.cpp
index 70e93b7..594bc77 100644
--- a/src/libpentobi_mcts/State.cpp
+++ b/src/libpentobi_mcts/State.cpp
@@ -114,7 +114,7 @@ void State::add_starting_moves(Color c, const 
Board::PiecesLeftList& pieces,
     for (Piece piece : pieces)
         for (Move mv : get_moves(c, piece, p, 0))
         {
-            // In GembloQ, not all moves covering on starting point
+            // In GembloQ, not all moves covering one starting point
             // (=quarter-square tringle) are legal.
             if (is_gembloq && ! m_bd.is_legal(c, mv))
                 continue;
diff --git a/src/pentobi/MainWindow.cpp b/src/pentobi/MainWindow.cpp
index e4a46f3..903c076 100644
--- a/src/pentobi/MainWindow.cpp
+++ b/src/pentobi/MainWindow.cpp
@@ -286,7 +286,7 @@ void MainWindow::about()
                        "<p>" +
                        tr("Computer opponent for the board game Blokus.")
                        + "<br>" +
-                       tr("&copy; 2011&ndash;%1 Markus Enzenberger").arg(2017) 
+
+                       tr("&copy; 2011&ndash;%1 Markus Enzenberger").arg(2018) 
+
                        + "<br>" +
                        "<a 
href=\"https://pentobi.sourceforge.io\";>https://pentobi.sourceforge.io</a>"
                        "</p>");
diff --git a/src/pentobi/Util.h b/src/pentobi/Util.h
index 1f8f9a9..3e8aef4 100644
--- a/src/pentobi/Util.h
+++ b/src/pentobi/Util.h
@@ -7,7 +7,6 @@
 #ifndef PENTOBI_UTIL_H
 #define PENTOBI_UTIL_H
 
-#include "RatingHistory.h"
 #include "libboardgame_base/Rating.h"
 #include "libpentobi_base/Color.h"
 #include "libpentobi_base/Variant.h"
diff --git a/src/pentobi/help/C/pentobi/become_stronger.html 
b/src/pentobi/help/C/pentobi/become_stronger.html
index 1d738ab..8a33b13 100644
--- a/src/pentobi/help/C/pentobi/become_stronger.html
+++ b/src/pentobi/help/C/pentobi/become_stronger.html
@@ -16,8 +16,7 @@ player.</p>
 <i>Tools</i> menu. This will make the computer player evaluate each position in
 the main variation. The result is displayed in a window with a diagram of
 colored dots.</p>
-<p align="center"><img src="analysis.jpg" width="320" height="160" alt=
-"Game analysis window"></p>
+<p align="center"><img src="analysis.jpg" alt="Game analysis window"></p>
 <div align="center" class="caption">Analysis of a game of variant Classic (2
 players).</div>
 <p>Each dot represents a game position in which the color of the dot was to
@@ -46,10 +45,10 @@ disabled: you cannot undo moves, navigate in the game, 
change the computer
 colors or change the playing level. To get an accurate rating, you should
 always play rated games until the end.</p>
 <p>After the game has ended, your rating will be updated depending on the game
-result and the computer level. For the game result, it only matters if the game
-was won, lost or a tie. The exact number of score points does not matter.</p>
-<p align="center"><img src="rating.jpg" width="240" height="239" alt=
-"Rating window"></p>
+result and the computer level. For the game result, it only matters whether the
+game was won, lost or a tie. The exact number of score points does not
+matter.</p>
+<p align="center"><img src="rating.jpg" alt="Rating window"></p>
 <div align="center" class="caption">Window with rating graph.</div>
 <p>You can always see your current rating by selecting <i>Rating</i> from the
 <i>Tools</i> menu. This will open a window that shows the development of your
diff --git a/src/pentobi/help/C/pentobi/callisto_rules.html 
b/src/pentobi/help/C/pentobi/callisto_rules.html
index a5c9dfd..b673eaa 100644
--- a/src/pentobi/help/C/pentobi/callisto_rules.html
+++ b/src/pentobi/help/C/pentobi/callisto_rules.html
@@ -14,21 +14,21 @@ from the classic 20×20 Blokus board by removing the corners 
such that an
 octagon with a top edge of size six remains. The pieces are a subset of the
 polyominoes up to size five. They include three 1×1 pieces per player that play
 a special role.</p>
-<p align="center"><img src="pieces_callisto.png" width="317" height="132" alt=
+<p align="center"><img src="pieces_callisto.png" alt=
 "Pieces for game variant Callisto"></p>
 <div align="center" class="caption">The 21 pieces.</div>
 <p>The 1×1 pieces may be placed anywhere on the board apart from the center of
 the board. The center consists of an octagon with width six and top edge size
 two. The first two moves of a player must use a 1×1 piece, the third 1×1 piece
 may be played anytime later.</p>
-<p align="center"><img src="board_callisto.png" width="320" height="320" alt=
+<p align="center"><img src="board_callisto.png" alt=
 "Board for game variant Callisto"></p>
 <div align="center" class="caption">The board with the center having a darker
 color.</div>
 <p>All larger pieces may be placed anwhere on the board but must touch an
 existing piece of the same color edge-to-edge.</p>
-<p align="center"><img src="position_callisto.png" width="321" height="320"
-alt="Example position for game variant Callisto"></p>
+<p align="center"><img src="position_callisto.png" alt=
+"Example position for game variant Callisto"></p>
 <div align="center" class="caption">An example position after a few
 moves.</div>
 <p>The score of a color is the number of squares on the board occupied by the
diff --git a/src/pentobi/help/C/pentobi/classic_rules.html 
b/src/pentobi/help/C/pentobi/classic_rules.html
index a891332..90f1a77 100644
--- a/src/pentobi/help/C/pentobi/classic_rules.html
+++ b/src/pentobi/help/C/pentobi/classic_rules.html
@@ -14,13 +14,13 @@ of 20×20 squares.</p>
 <p>Each player has a set of 21 pieces of his color shaped like the polyominoes
 up to size five. (A polyomino is a shape built by a number of squares connected
 along the edges.)</p>
-<p align="center"><img src="pieces.png" width="294" height="122" alt=
+<p align="center"><img src="pieces.png" alt=
 "Pieces for game variant Classic"></p>
 <div align="center" class="caption">The 21 pieces.</div>
 <p>The players alternate in placing one of their pieces on the board. The first
 piece of a player must cover its starting square. The starting squares are
 located in the corners of the board.</p>
-<p align="center"><img src="board_classic.png" width="320" height="320" alt=
+<p align="center"><img src="board_classic.png" alt=
 "Board for game variant Classic"></p>
 <div align="center" class="caption">The 20×20 board with the starting<br>
 squares marked with colored dots.</div>
@@ -28,7 +28,7 @@ squares marked with colored dots.</div>
 touches at least one piece of its own color corner-to-corner but does not touch
 any piece of its own color along the edges. The new piece may touch edges of
 pieces of the opponent colors.</p>
-<p align="center"><img src="position_classic.png" width="320" height="320" alt=
+<p align="center"><img src="position_classic.png" alt=
 "Example position for game variant Classic"></p>
 <div align="center" class="caption">An example position after a few
 moves.</div>
diff --git a/src/pentobi/help/C/pentobi/duo_rules.html 
b/src/pentobi/help/C/pentobi/duo_rules.html
index a39c174..1292b1a 100644
--- a/src/pentobi/help/C/pentobi/duo_rules.html
+++ b/src/pentobi/help/C/pentobi/duo_rules.html
@@ -14,12 +14,12 @@ played on a smaller board with 14×14 squares. There is only 
one color per
 player (Purple and Orange) and the starting squares are not in the corners, but
 on the square with the coordinates (5,10) for Purple, and on (10,5) for
 Orange.</p>
-<p align="center"><img src="board_duo.png" width="224" height="224" alt=
+<p align="center"><img src="board_duo.png" alt=
 "Board for game variant Duo"></p>
 <div align="center" class="caption">The 14×14 board used in game variant Duo
 with<br>
 the starting squares marked with colored dots.</div>
-<p align="center"><img src="position_duo.png" width="224" height="224" alt=
+<p align="center"><img src="position_duo.png" alt=
 "Example position for game variant Duo"></p>
 <div align="center" class="caption">An example position in game variant
 Duo.</div>
diff --git a/src/pentobi/help/C/pentobi/gembloq_rules.html 
b/src/pentobi/help/C/pentobi/gembloq_rules.html
index 8697a4f..8abcb2e 100644
--- a/src/pentobi/help/C/pentobi/gembloq_rules.html
+++ b/src/pentobi/help/C/pentobi/gembloq_rules.html
@@ -13,13 +13,11 @@
 rotated by 45 degrees. The board has a diagonal size of 27 squares. In addition
 to the full squares, the edges also contain half squares such that the edges
 are straight lines.</p>
-<p align="center"><img src="pieces_gembloq.jpg" width="304" height="110" alt=
-"Pieces for GembloQ"></p>
+<p align="center"><img src="pieces_gembloq.jpg" alt="Pieces for GembloQ"></p>
 <div align="center" class="caption">The 21 pieces.</div>
 <p>Each player has a set of 21 pieces, which include a subset of the pieces
 used in Blokus, but also some pieces that contain a half square.</p>
-<p align="center"><img src="board_gembloq.png" width="320" height="320" alt=
-"Board for GembloQ"></p>
+<p align="center"><img src="board_gembloq.png" alt="Board for GembloQ"></p>
 <div align="center" class="caption">The board for GembloQ with the<br>
 starting points marked with colored dots.</div>
 <p>As in Blokus, the starting squares are in the corners, the first move must
@@ -27,7 +25,7 @@ fully cover the starting square of the color and subsequent 
moves must touch a
 piece of the player color at a vertex, but not edge-to-edge. Moves are also
 legal, if a vertex of a half square touches an edge of a piece of the same
 color.</p>
-<p align="center"><img src="position_gembloq.png" width="320" height="320" alt=
+<p align="center"><img src="position_gembloq.png" alt=
 "Example position for GembloQ"></p>
 <div align="center" class="caption">An example position after a few
 moves.</div>
diff --git a/src/pentobi/help/C/pentobi/index.html 
b/src/pentobi/help/C/pentobi/index.html
index 8fec6d7..cd26a63 100644
--- a/src/pentobi/help/C/pentobi/index.html
+++ b/src/pentobi/help/C/pentobi/index.html
@@ -25,5 +25,6 @@ and the game variants Duo, Trigon, Junior, Nexos, GembloQ and 
Callisto.</p>
 <a href="shortcuts.html">Keyboard Shortcuts</a><br>
 <a href="system.html">System Requirements</a><br>
 <a href="license.html">License</a></p>
+<p align="right"><a href="classic_rules.html">Next</a></p>
 </body>
 </html>
diff --git a/src/pentobi/help/C/pentobi/junior_rules.html 
b/src/pentobi/help/C/pentobi/junior_rules.html
index d28a9bc..152a26d 100644
--- a/src/pentobi/help/C/pentobi/junior_rules.html
+++ b/src/pentobi/help/C/pentobi/junior_rules.html
@@ -12,7 +12,7 @@
 <p>Junior is a simplified game variant for two players. It is played on the
 same 14×14 board as game variant Duo but uses only a subset of the pentominoes
 and the players get two of each of those pentominoes.</p>
-<p align="center"><img src="pieces_junior.png" width="300" height="110" alt=
+<p align="center"><img src="pieces_junior.png" alt=
 "Pieces for game variant Junior"></p>
 <div align="center" class="caption">The 24 pieces used in Junior.</div>
 <p>Bonus points are not used in Junior.</p>
diff --git a/src/pentobi/help/C/pentobi/nexos_rules.html 
b/src/pentobi/help/C/pentobi/nexos_rules.html
index 511b7ed..8eeda92 100644
--- a/src/pentobi/help/C/pentobi/nexos_rules.html
+++ b/src/pentobi/help/C/pentobi/nexos_rules.html
@@ -12,14 +12,12 @@
 <p>Nexos is a board game similar to Blokus. The board is a rectangular 13×13
 line grid. Each color uses 24 pieces that consist of up to four connected line
 segments.</p>
-<p align="center"><img src="pieces_nexos.png" width="308" height="112" alt=
-"Pieces for Nexos"></p>
+<p align="center"><img src="pieces_nexos.png" alt="Pieces for Nexos"></p>
 <div align="center" class="caption">The 24 pieces.</div>
 <p>Each color has a starting intersection on the intersection of the third
 lines close to a corner. The first piece must touch the starting
 intersection.</p>
-<p align="center"><img src="board_nexos.png" width="320" height="320" alt=
-"Board for Nexos"></p>
+<p align="center"><img src="board_nexos.png" alt="Board for Nexos"></p>
 <div align="center" class="caption">The board for Nexos with segments touching
 the<br>
 starting intersections marked with colored dots.</div>
@@ -30,7 +28,7 @@ or cover the same intersection. However, pieces may not 
overlap. The junctions
 between the segments within a piece are such that two rectangular junctions of
 different pieces can cover the same intersection without overlapping, but
 straight junctions cannot.</p>
-<p align="center"><img src="position_nexos.png" width="320" height="320" alt=
+<p align="center"><img src="position_nexos.png" alt=
 "Example position for Nexos"></p>
 <div align="center" class="caption">An example position after a few
 moves.</div>
diff --git a/src/pentobi/help/C/pentobi/stylesheet.css 
b/src/pentobi/help/C/pentobi/stylesheet.css
index 62522b0..553a026 100644
--- a/src/pentobi/help/C/pentobi/stylesheet.css
+++ b/src/pentobi/help/C/pentobi/stylesheet.css
@@ -1,20 +1,36 @@
-body
-{
+html {
+  background-color: lightgray;
+}
+
+body {
   color: black;
   background-color: white;
   font-family: sans-serif;
   font-size: 15px;
-  margin-left: 0.5em;
-  margin-right: 0.5em;
+  line-height: 20px;
   max-width: 60em;
+  margin:auto;
+  padding:15px;
+  min-height: 100vh;
 }
 
-:link
-{
+:link {
   text-decoration: none;
+  color:blue;
+}
+
+:visited {
+  text-decoration: none;
+  color:purple;
+}
+
+img {
+  width: auto;
+  height: auto;
+  max-width: 100%;
+  max-height: 90%;
 }
 
-div.caption
-{
+div.caption {
   font-size: 14px;
 }
diff --git a/src/pentobi/help/C/pentobi/trigon_rules.html 
b/src/pentobi/help/C/pentobi/trigon_rules.html
index 2994ae6..4414b2f 100644
--- a/src/pentobi/help/C/pentobi/trigon_rules.html
+++ b/src/pentobi/help/C/pentobi/trigon_rules.html
@@ -14,19 +14,19 @@ but it uses a differently shaped board and a different set 
of pieces. Each
 color uses 22 pieces that are shaped like the polyiamonds up to size six. (A
 polyiamond is a shape built by a number of equilateral triangles connected
 along the edges.)</p>
-<p align="center"><img src="pieces_trigon.jpg" width="332" height="115" alt=
+<p align="center"><img src="pieces_trigon.jpg" alt=
 "Pieces for game variant Trigon"></p>
 <div align="center" class="caption">The 22 Trigon pieces.</div>
 <p>The board also consists of triangles and is shaped like a hexagon with an
 edge size of nine triangles.</p>
-<p align="center"><img src="board_trigon.jpg" width="320" height="277" alt=
+<p align="center"><img src="board_trigon.jpg" alt=
 "Board for game variant Trigon"></p>
 <div align="center" class="caption">The board with the starting<br>
 fields marked with gray dots.</div>
 <p>There are six starting points on the board, each located in the middle of
 the fourth row away from each edge. The starting points are not colored and the
 players may freely choose a starting point for the first piece of a color.</p>
-<p align="center"><img src="position_trigon.jpg" width="320" height="276" alt=
+<p align="center"><img src="position_trigon.jpg" alt=
 "Example position for game variant Trigon"></p>
 <div align="center" class="caption">An example position after a few
 moves.</div>
diff --git a/src/pentobi/help/de/pentobi/become_stronger.html 
b/src/pentobi/help/de/pentobi/become_stronger.html
index 39af79e..f768070 100644
--- a/src/pentobi/help/de/pentobi/become_stronger.html
+++ b/src/pentobi/help/de/pentobi/become_stronger.html
@@ -16,8 +16,8 @@ Blokus-Spieler zu werden.</p>
 <i>Extras</i>-Menü wählen. Dies lässt den Computer eine Bewertung jeder
 Brettstellung der Hauptvariante ausführen. Das Ergebnis wird in einem Fenster
 mit einem Diagramm farbiger Punkte dargestellt.</p>
-<p align="center"><img src="../../C/pentobi/analysis.jpg" width="320" height=
-"160" alt="Spielanalyse-Fenster"></p>
+<p align="center"><img src="../../C/pentobi/analysis.jpg" alt=
+"Spielanalyse-Fenster"></p>
 <div align="center" class="caption">Analyse eines Spiels der Spielvariante
 Klassisch (2 Spieler).</div>
 <p>Jeder Punkt repräsentiert eine Spielstellung, in der die Farbe des Punkts am
@@ -45,7 +45,7 @@ Sie Anfänger sind, belassen Sie die Anfangswertung auf 
1000.</p>
 Computerspieler gemäß Ihrer gegenwärtigen Wertung wählen. Die Farbe, die Sie
 spielen, wird in jedem Spiel zufällig ausgewählt.</p>
 <p>Während eines gewerteten Spiels sind die meisten Funktionen, die nicht zum
-Spielen benötigt werden, deaktiviert: Sie können keine Züge zurücknehmen, im
+Spielen benötigt werden, deaktiviert: Sie können nicht Züge zurücknehmen, im
 Spiel navigieren, die Computer-Farben ändern oder die Spielstufe ändern. Um
 eine akkurate Wertung zu erhalten, sollten Sie gewertete Spiele immer bis zum
 Ende spielen.</p>
@@ -53,8 +53,8 @@ Ende spielen.</p>
 Spielergebnis und der Spielstufe aktualisiert. Für das Spielergebnis zählt nur,
 ob Sie gewonnen oder verloren haben, oder ob das Spiel in einem Unentschieden
 endete. Die genaue Anzahl der Spielpunkte spielt keine Rolle.</p>
-<p align="center"><img src="../../C/pentobi/rating.jpg" width="240" height=
-"239" alt="Wertungsfenster"></p>
+<p align="center"><img src="../../C/pentobi/rating.jpg" alt=
+"Wertungsfenster"></p>
 <div align="center" class="caption">Fenster mit Wertungsgraph.</div>
 <p>Sie können Ihre aktuelle Wertung jederzeit mit <i>Wertung</i> aus dem
 <i>Extras</i>-Menü sehen. Dies öffnet ein Fenster, in dem die Entwicklung Ihrer
diff --git a/src/pentobi/help/de/pentobi/callisto_rules.html 
b/src/pentobi/help/de/pentobi/callisto_rules.html
index eec55e5..06cc2d5 100644
--- a/src/pentobi/help/de/pentobi/callisto_rules.html
+++ b/src/pentobi/help/de/pentobi/callisto_rules.html
@@ -15,23 +15,23 @@ werden, sodass ein Achteck verbleibt mit einer oberen 
Kantenlänge von sechs.
 Die Spielsteine sind eine Untermenge der Polyominos bis zur Größe fünf. Sie
 beinhalten drei 1×1-Spielsteine pro Spieler, die eine besondere Rolle
 spielen.</p>
-<p align="center"><img src="../../C/pentobi/pieces_callisto.png" width="317"
-height="132" alt="Spielsteine für Spielvariante Callisto"></p>
+<p align="center"><img src="../../C/pentobi/pieces_callisto.png" alt=
+"Spielsteine für Spielvariante Callisto"></p>
 <div align="center" class="caption">Die 21 Spielsteine.</div>
 <p>Die 1×1-Spielsteine dürfen überall auf dem Spielbrett gesetzt werden außer
 im Zentrum des Spielbretts. Das Zentrums besteht aus einem Achteck mit Breite
 sechs und oberer Kantenlänge zwei. Die ersten zwei Züge eines Spielers müssen
 einen 1×1-Spielstein benutzen, der dritte 1×1-Spielstein kann jederzeit später
 gespielt werden.</p>
-<p align="center"><img src="../../C/pentobi/board_callisto.png" width="320"
-height="320" alt="Spielbrett für Spielvariante Callisto"></p>
+<p align="center"><img src="../../C/pentobi/board_callisto.png" alt=
+"Spielbrett für Spielvariante Callisto"></p>
 <div align="center" class="caption">Das Brett mit einer dunkleren Farbe im
 Zentrum.</div>
 <p>Alle größeren Spielsteine dürfen überall auf dem Brett gesetzt werden,
 müssen aber einen existierenden Spielstein der selben Farbe Kante an Kante
 berühren.</p>
-<p align="center"><img src="../../C/pentobi/position_callisto.png" width="321"
-height="320" alt="Beispielstellung für Spielvariante Callisto"></p>
+<p align="center"><img src="../../C/pentobi/position_callisto.png" alt=
+"Beispielstellung für Spielvariante Callisto"></p>
 <div align="center" class="caption">Eine Beispielstellung nach ein paar
 Zügen.</div>
 <p>Die Punktzahl einer Farbe ist die Anzahl der Quadrate auf dem Brett, die von
diff --git a/src/pentobi/help/de/pentobi/classic_rules.html 
b/src/pentobi/help/de/pentobi/classic_rules.html
index 51b56bb..ba76810 100644
--- a/src/pentobi/help/de/pentobi/classic_rules.html
+++ b/src/pentobi/help/de/pentobi/classic_rules.html
@@ -14,22 +14,22 @@ Quadraten besteht.</p>
 <p>Jeder Spieler besitzt 21 Spielsteine seiner Farbe, die die Form von
 Polyominos bis zur Größe fünf haben (ein Polyomino ist eine Figur, die aus
 einer Anzahl von Quadraten besteht, die entlang der Kanten verbunden sind).</p>
-<p align="center"><img src="../../C/pentobi/pieces.png" width="294" height=
-"122" alt="Spielsteine für Spielvariante Klassisch"></p>
+<p align="center"><img src="../../C/pentobi/pieces.png" alt=
+"Spielsteine für Spielvariante Klassisch"></p>
 <div align="center" class="caption">Die 21 Spielsteine.</div>
 <p>Die Spieler setzen abwechselnd einen ihrer Spielsteine aufs Brett. Der erste
 Spielstein eines Spielers muss sein Startfeld abdecken. Die Startfelder
 befinden sich in den Ecken des Bretts.</p>
-<p align="center"><img src="../../C/pentobi/board_classic.png" width="320"
-height="320" alt="Spielbrett für Spielvariante Klassisch"></p>
+<p align="center"><img src="../../C/pentobi/board_classic.png" alt=
+"Spielbrett für Spielvariante Klassisch"></p>
 <div align="center" class="caption">Das 20×20-Brett mit den Startfeldern<br>
 durch farbige Punkte markiert.</div>
 <p>Die folgenden Spielsteine müssen so auf leere Quadrate gesetzt werden, dass
 der neue Spielstein mindestens einen Spielstein der eigenen Farbe Ecke an Ecke
 berührt, aber keinen Spielstein der eigenen Farbe entlang der Kanten. Der neue
 Spielstein darf die Kanten von gegnerischen Spielsteinen berühren.</p>
-<p align="center"><img src="../../C/pentobi/position_classic.png" width="320"
-height="320" alt="Beispielstellung für Spielvariante Klassisch"></p>
+<p align="center"><img src="../../C/pentobi/position_classic.png" alt=
+"Beispielstellung für Spielvariante Klassisch"></p>
 <div align="center" class="caption">Eine Beispielstellung nach ein paar
 Zügen.</div>
 <p>Wenn der Spieler einer Farbe keine Spielsteine mehr setzen kann, muss der
diff --git a/src/pentobi/help/de/pentobi/duo_rules.html 
b/src/pentobi/help/de/pentobi/duo_rules.html
index eee3fd2..4e146b9 100644
--- a/src/pentobi/help/de/pentobi/duo_rules.html
+++ b/src/pentobi/help/de/pentobi/duo_rules.html
@@ -14,13 +14,13 @@ Spiel wird auf einem kleineren Brett mit 14×14 Quadraten 
gespielt. Es gibt eine
 Farbe pro Spieler (Lila und Orange) und die Startfelder befinden sich nicht in
 den Ecken, sondern auf dem Feld mit den Koordinaten (5,10) für Lila und auf
 (10,5) für Orange.</p>
-<p align="center"><img src="../../C/pentobi/board_duo.png" width="224" height=
-"224" alt="Spielbrett für Spielvariante Duo"></p>
+<p align="center"><img src="../../C/pentobi/board_duo.png" alt=
+"Spielbrett für Spielvariante Duo"></p>
 <div align="center" class="caption">Das 14×14-Brett, das in der Spielvariante
 Duo benutzt<br>
 wird, mit den Startfeldern durch farbige Punkte markiert.</div>
-<p align="center"><img src="../../C/pentobi/position_duo.png" width="224"
-height="224" alt="Beispielstellung für Spielvariante Duo"></p>
+<p align="center"><img src="../../C/pentobi/position_duo.png" alt=
+"Beispielstellung für Spielvariante Duo"></p>
 <div align="center" class="caption">Eine Beispielstellung in der Spielvariante
 Duo.</div>
 <p align="right"><a href="classic_rules.html">Zurück</a> | <a href=
diff --git a/src/pentobi/help/de/pentobi/gembloq_rules.html 
b/src/pentobi/help/de/pentobi/gembloq_rules.html
index 4c04987..7c8324d 100644
--- a/src/pentobi/help/de/pentobi/gembloq_rules.html
+++ b/src/pentobi/help/de/pentobi/gembloq_rules.html
@@ -13,14 +13,14 @@
 des Bretts sind um 45 Grad gedreht. Die Diagonale des Bretts hat eine Größe von
 27 Quadraten. Zusätzlich zu den vollen Quadraten enthalten die Ränder noch
 halbe Quadrate, so dass die Ränder gerade Linien sind.</p>
-<p align="center"><img src="../../C/pentobi/pieces_gembloq.jpg" width="304"
-height="110" alt="Spielsteine für GembloQ"></p>
+<p align="center"><img src="../../C/pentobi/pieces_gembloq.jpg" alt=
+"Spielsteine für GembloQ"></p>
 <div align="center" class="caption">Die 21 Spielsteine.</div>
 <p>Jeder Spieler besitzt 21 Spielsteine, unter denen eine Teilmenge der in
 Blokus benutzten Spielsteine ist, jedoch zusätzlich einige Spielsteine, die ein
 halbes Quadrat beinhalten.</p>
-<p align="center"><img src="../../C/pentobi/board_gembloq.png" width="320"
-height="320" alt="Spielbrett für GembloQ"></p>
+<p align="center"><img src="../../C/pentobi/board_gembloq.png" alt=
+"Spielbrett für GembloQ"></p>
 <div align="center" class="caption">Das Brett für GembloQ mit den
 Startfeldern<br>
 durch farbige Punkte markiert.</div>
@@ -29,8 +29,8 @@ Startfeld der Farbe vollständig abdecken und folgende Züge 
müssen einen
 Spielstein der Farbe am Zug an einer Ecke berühren, jedoch noch entlang der
 Kanten. Züge sind auch legal, wenn eine Spitze eines halben Quadrats die Kante
 eines Spielsteins der selben Farbe berührt.</p>
-<p align="center"><img src="../../C/pentobi/position_gembloq.png" width="320"
-height="320" alt="Beispielstellung für GembloQ"></p>
+<p align="center"><img src="../../C/pentobi/position_gembloq.png" alt=
+"Beispielstellung für GembloQ"></p>
 <div align="center" class="caption">Eine Beispielstellung nach ein paar
 Zügen.</div>
 <p>Die Punktzahl am Spielende wird wie in Blokus ermittelt, wobei halbe
diff --git a/src/pentobi/help/de/pentobi/index.html 
b/src/pentobi/help/de/pentobi/index.html
index aca3077..1c9c9c2 100644
--- a/src/pentobi/help/de/pentobi/index.html
+++ b/src/pentobi/help/de/pentobi/index.html
@@ -26,5 +26,6 @@ Junior, Nexos, GembloQ und Callisto.</p>
 <a href="shortcuts.html">Tastenkürzel</a><br>
 <a href="system.html">Systemvoraussetzungen</a><br>
 <a href="license.html">Lizenz</a></p>
+<p align="right"><a href="classic_rules.html">Weiter</a></p>
 </body>
 </html>
diff --git a/src/pentobi/help/de/pentobi/junior_rules.html 
b/src/pentobi/help/de/pentobi/junior_rules.html
index 5bf4c78..5077c7a 100644
--- a/src/pentobi/help/de/pentobi/junior_rules.html
+++ b/src/pentobi/help/de/pentobi/junior_rules.html
@@ -13,8 +13,8 @@
 gleichen 14×14-Brett gespielt wie die Spielvariante Duo, benutzt aber nur eine
 Teilmenge der Pentominos und die Spieler bekommen zwei von jedem dieser
 Pentominos.</p>
-<p align="center"><img src="../../C/pentobi/pieces_junior.png" width="300"
-height="110" alt="Spielsteine für Spielvariante Junior"></p>
+<p align="center"><img src="../../C/pentobi/pieces_junior.png" alt=
+"Spielsteine für Spielvariante Junior"></p>
 <div align="center" class="caption">Die 24 Spielsteine, die in Junior benutzt
 werden.</div>
 <p>Bonuspunkte werden in Junior nicht benutzt.</p>
diff --git a/src/pentobi/help/de/pentobi/nexos_rules.html 
b/src/pentobi/help/de/pentobi/nexos_rules.html
index 8413e69..85c3d98 100644
--- a/src/pentobi/help/de/pentobi/nexos_rules.html
+++ b/src/pentobi/help/de/pentobi/nexos_rules.html
@@ -12,14 +12,14 @@
 <p>Nexos ist ein Brettspiel ähnlich wie Blokus. Das Spielbrett ist ein
 rechtwinkliges 13×13-Liniengitter. Jede Farbe benutzt 24 Spielsteine, die aus
 bis zu vier verbundenen Liniensegmenten bestehen.</p>
-<p align="center"><img src="../../C/pentobi/pieces_nexos.png" width="308"
-height="112" alt="Spielsteine für Nexos"></p>
+<p align="center"><img src="../../C/pentobi/pieces_nexos.png" alt=
+"Spielsteine für Nexos"></p>
 <div align="center" class="caption">Die 24 Spielsteine.</div>
 <p>Jede Farbe hat einen Startkreuzungspunkt auf der Kreuzung der dritten Linien
 nahe einer Ecke. Der erste Spielstein muss den Startkreuzungspunkt
 berühren.</p>
-<p align="center"><img src="../../C/pentobi/board_nexos.png" width="320"
-height="320" alt="Spielbrett für Nexos"></p>
+<p align="center"><img src="../../C/pentobi/board_nexos.png" alt=
+"Spielbrett für Nexos"></p>
 <div align="center" class="caption">Das Brett für Nexos mit den die
 Startkreuzungspunkte<br>
 berührenden Segmenten durch farbige Punkte markiert.</div>
@@ -31,8 +31,8 @@ Allerdings dürfen sich Spielsteine nicht überlappen. Die 
Verbindungen zwischen
 den Segmenten innerhalb eines Spielsteins sind so, dass zwei rechtwinklige
 Verbindungen verschiedener Spielsteine denselben Kreuzungspunkt bedecken können
 ohne sich zu überlappen, während gerade Verbindungen das nicht können.</p>
-<p align="center"><img src="../../C/pentobi/position_nexos.png" width="320"
-height="320" alt="Beispielstellung für Nexos"></p>
+<p align="center"><img src="../../C/pentobi/position_nexos.png" alt=
+"Beispielstellung für Nexos"></p>
 <div align="center" class="caption">Eine Beispielstellung nach ein paar
 Zügen.</div>
 <p>Die Punktzahl einer Farbe ist die Anzahl der Liniensegmente auf dem Brett,
diff --git a/src/pentobi/help/de/pentobi/trigon_rules.html 
b/src/pentobi/help/de/pentobi/trigon_rules.html
index fe8ba16..ea28798 100644
--- a/src/pentobi/help/de/pentobi/trigon_rules.html
+++ b/src/pentobi/help/de/pentobi/trigon_rules.html
@@ -15,21 +15,21 @@ Spielsteine verwendet. Jede Farbe benutzt 22 Spielsteine, 
die wie die
 Polyiamonds bis zur Größe sechs geformt sind (ein Polyiamond ist eine Figur,
 die aus einer Anzahl von gleichseitigen Dreiecken besteht, die entlang der
 Kanten verbunden sind).</p>
-<p align="center"><img src="../../C/pentobi/pieces_trigon.jpg" width="332"
-height="115" alt="Spielsteine für Spielvariante Trigon"></p>
+<p align="center"><img src="../../C/pentobi/pieces_trigon.jpg" alt=
+"Spielsteine für Spielvariante Trigon"></p>
 <div align="center" class="caption">Die 22 Trigon-Spielsteine.</div>
 <p>Das Spielbrett besteht ebenfalls aus Dreiecken und hat die Form eines
 Sechsecks mit jeweils neun Dreiecken pro Kante.</p>
-<p align="center"><img src="../../C/pentobi/board_trigon.jpg" width="320"
-height="277" alt="Spielbrett für Spielvariante Trigon"></p>
+<p align="center"><img src="../../C/pentobi/board_trigon.jpg" alt=
+"Spielbrett für Spielvariante Trigon"></p>
 <div align="center" class="caption">Das Brett mit den Startfeldern<br>
 durch graue Punkte markiert.</div>
 <p>Es gibt sechs Startfelder auf dem Brett, jedes in der Mitte der vierten
 Reihe von jeder Kante aus gesehen. Die Startfelder sind nicht farbig und die
 Spieler dürfen das Startfeld für den ersten Spielstein einer Farbe frei
 wählen.</p>
-<p align="center"><img src="../../C/pentobi/position_trigon.jpg" width="320"
-height="276" alt="Beispielstellung für Spielvariante Trigon"></p>
+<p align="center"><img src="../../C/pentobi/position_trigon.jpg" alt=
+"Beispielstellung für Spielvariante Trigon"></p>
 <div align="center" class="caption">Eine Beispielstellung nach ein paar
 Zügen.</div>
 <h3>Regeln für zwei Spieler</h3>
diff --git a/src/pentobi_qml/CMakeLists.txt b/src/pentobi_qml/CMakeLists.txt
index 1865937..7bb5096 100644
--- a/src/pentobi_qml/CMakeLists.txt
+++ b/src/pentobi_qml/CMakeLists.txt
@@ -56,10 +56,3 @@ target_link_libraries(pentobi_qml
   Qt5::WebView
   Threads::Threads
 )
-
-if(MSVC)
-  configure_file(pentobi.conf.in Debug/pentobi.conf @ONLY)
-  configure_file(pentobi.conf.in Release/pentobi.conf @ONLY)
-else()
-  configure_file(pentobi.conf.in pentobi.conf @ONLY)
-endif()
diff --git a/src/pentobi_qml/Main.cpp b/src/pentobi_qml/Main.cpp
index 3dca800..e468efa 100644
--- a/src/pentobi_qml/Main.cpp
+++ b/src/pentobi_qml/Main.cpp
@@ -45,6 +45,7 @@ int main(int argc, char *argv[])
 {
     libboardgame_util::LogInitializer log_initializer;
     QGuiApplication app(argc, argv);
+    QtWebView::initialize();
     app.setOrganizationName("Pentobi");
     app.setApplicationName("Pentobi");
 #ifdef VERSION
@@ -112,7 +113,6 @@ int main(int argc, char *argv[])
             PlayerModel::nuThreads = nuThreads;
         }
         QQmlApplicationEngine engine(QUrl("qrc:///qml/Main.qml"));
-        QtWebView::initialize();
         return app.exec();
     }
     catch (const bad_alloc&)
diff --git a/src/pentobi_qml/Pentobi.pro b/src/pentobi_qml/Pentobi.pro
index 82a9b35..b44518c 100644
--- a/src/pentobi_qml/Pentobi.pro
+++ b/src/pentobi_qml/Pentobi.pro
@@ -6,7 +6,7 @@ INCLUDEPATH += ..
 CONFIG += c++14
 DEFINES += QT_DEPRECATED_WARNINGS
 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050900
-DEFINES += VERSION=\"\\\"14.0\\\"\"
+DEFINES += VERSION=\"\\\"14.1\\\"\"
 DEFINES += PENTOBI_LOW_RESOURCES
 android {
     QMAKE_CXXFLAGS_RELEASE += -DLIBBOARDGAME_DISABLE_LOG
@@ -103,7 +103,9 @@ RESOURCES += \
     translations.qrc
 
 # Default rules for deployment.
-include(deployment.pri)
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
 
 HEADERS += \
     AnalyzeGameModel.h \
@@ -220,9 +222,13 @@ SOURCES += \
     qml/*.js
 }
 
-TRANSLATIONS += \
-    qml/i18n/qml_de.ts \
-    qml/i18n/replace_qtbase_de.ts
+TRANSLATIONS = $$files(qml/i18n/*.ts)
+qtPrepareTool(LRELEASE, lrelease)
+updateqm.input = TRANSLATIONS
+updateqm.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm
+updateqm.commands = $$LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
+updateqm.CONFIG += no_link target_predeps
+QMAKE_EXTRA_COMPILERS += updateqm
 
 OTHER_FILES += \
     android/AndroidManifest.xml
diff --git a/src/pentobi_qml/PieceModel.cpp b/src/pentobi_qml/PieceModel.cpp
index e7e318a..cc13f2c 100644
--- a/src/pentobi_qml/PieceModel.cpp
+++ b/src/pentobi_qml/PieceModel.cpp
@@ -11,6 +11,7 @@
 #include "libboardgame_sys/Compiler.h"
 #include "libpentobi_base/Board.h"
 #include "libpentobi_base/GembloQTransform.h"
+#include "libpentobi_base/PieceInfo.h"
 #include "libpentobi_base/TrigonTransform.h"
 
 using namespace std;
diff --git a/src/pentobi_qml/android/AndroidManifest.xml 
b/src/pentobi_qml/android/AndroidManifest.xml
index f209c77..897d035 100644
--- a/src/pentobi_qml/android/AndroidManifest.xml
+++ b/src/pentobi_qml/android/AndroidManifest.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<manifest package="net.sf.pentobi" 
xmlns:android="http://schemas.android.com/apk/res/android"; 
android:versionName="14.0" android:versionCode="14000" 
android:installLocation="auto">
+<manifest package="net.sf.pentobi" 
xmlns:android="http://schemas.android.com/apk/res/android"; 
android:versionName="14.1" android:versionCode="14001" 
android:installLocation="auto">
     <application android:hardwareAccelerated="true" 
android:name="org.qtproject.qt5.android.bindings.QtApplication" 
android:label="Pentobi" android:theme="@style/AppTheme" 
android:icon="@drawable/icon">
         <activity 
android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation"
 android:name="org.qtproject.qt5.android.bindings.QtActivity" 
android:label="@string/app_name" android:screenOrientation="portrait" 
android:launchMode="singleTop" android:windowSoftInputMode="adjustPan">
             <intent-filter>
@@ -32,18 +32,8 @@
             <!-- Splash screen -->
         </activity>
     </application>
-    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/>
+    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23"/>
     <supports-screens android:largeScreens="true" android:normalScreens="true" 
android:anyDensity="true" android:smallScreens="true"/>
-
-    <!-- The following comment will be replaced upon deployment with default 
permissions based on the dependencies of the application.
-         Remove the comment if you do not require these default permissions. 
-->
-
-
-    <!-- The following comment will be replaced upon deployment with default 
features based on the dependencies of the application.
-         Remove the comment if you do not require these default features. -->
-
-
-<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
-
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <!-- %%INSERT_FEATURES -->
 </manifest>
diff --git a/src/pentobi_qml/deployment.pri b/src/pentobi_qml/deployment.pri
deleted file mode 100644
index 5441b63..0000000
--- a/src/pentobi_qml/deployment.pri
+++ /dev/null
@@ -1,27 +0,0 @@
-android-no-sdk {
-    target.path = /data/user/qt
-    export(target.path)
-    INSTALLS += target
-} else:android {
-    x86 {
-        target.path = /libs/x86
-    } else: armeabi-v7a {
-        target.path = /libs/armeabi-v7a
-    } else {
-        target.path = /libs/armeabi
-    }
-    export(target.path)
-    INSTALLS += target
-} else:unix {
-    isEmpty(target.path) {
-        qnx {
-            target.path = /tmp/$${TARGET}/bin
-        } else {
-            target.path = /opt/$${TARGET}/bin
-        }
-        export(target.path)
-    }
-    INSTALLS += target
-}
-
-export(INSTALLS)
diff --git a/src/pentobi_qml/pentobi.conf.in b/src/pentobi_qml/pentobi.conf.in
deleted file mode 100644
index c0a0217..0000000
--- a/src/pentobi_qml/pentobi.conf.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# Config file to override installation settings such that the executable
-# can be tested without installation
-HelpDir=@CMAKE_SOURCE_DIR@/src/pentobi/help
diff --git a/src/pentobi_qml/qml/Button.qml b/src/pentobi_qml/qml/Button.qml
index 25df28d..1f5ecd9 100644
--- a/src/pentobi_qml/qml/Button.qml
+++ b/src/pentobi_qml/qml/Button.qml
@@ -1,6 +1,6 @@
 import QtQuick 2.0
 import QtQuick.Window 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 
 /** Button that supports an automatically scaled image.
     The image source should be a SVG file with size 22x22. */
diff --git a/src/pentobi_qml/qml/Comment.qml b/src/pentobi_qml/qml/Comment.qml
index 69ce58c..d1c3f72 100644
--- a/src/pentobi_qml/qml/Comment.qml
+++ b/src/pentobi_qml/qml/Comment.qml
@@ -3,8 +3,6 @@ import QtQuick.Controls 1.4
 import QtQuick.Controls.Styles 1.4
 
 TextArea {
-    id: comment
-
     style: TextAreaStyle {
         textColor: theme.fontColorPosInfo
         selectionColor: theme.selectionColor
diff --git a/src/pentobi_qml/qml/ComputerColorDialog.qml 
b/src/pentobi_qml/qml/ComputerColorDialog.qml
index ce5b3ed..e2342cc 100644
--- a/src/pentobi_qml/qml/ComputerColorDialog.qml
+++ b/src/pentobi_qml/qml/ComputerColorDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Layouts 1.1
 import QtQuick.Dialogs 1.2
 
diff --git a/src/pentobi_qml/qml/ExportImageDialog.qml 
b/src/pentobi_qml/qml/ExportImageDialog.qml
index f010242..a4b2303 100644
--- a/src/pentobi_qml/qml/ExportImageDialog.qml
+++ b/src/pentobi_qml/qml/ExportImageDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Dialogs 1.2
 
 Dialog {
diff --git a/src/pentobi_qml/qml/GameDisplayMobile.qml 
b/src/pentobi_qml/qml/GameDisplayMobile.qml
index 800a543..4da5aab 100644
--- a/src/pentobi_qml/qml/GameDisplayMobile.qml
+++ b/src/pentobi_qml/qml/GameDisplayMobile.qml
@@ -1,6 +1,6 @@
 import QtQuick 2.0
 import QtQuick.Controls 1.1
-import Qt.labs.controls 1.0 as Controls2
+import QtQuick.Controls 2.0 as Controls2
 import QtQuick.Layouts 1.0
 import Qt.labs.settings 1.0
 import "GameDisplay.js" as Logic
diff --git a/src/pentobi_qml/qml/GameInfoDialog.qml 
b/src/pentobi_qml/qml/GameInfoDialog.qml
index 32db46e..eab7807 100644
--- a/src/pentobi_qml/qml/GameInfoDialog.qml
+++ b/src/pentobi_qml/qml/GameInfoDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Dialogs 1.2
 import QtQuick.Layouts 1.0
 
diff --git a/src/pentobi_qml/qml/GotoMoveDialog.qml 
b/src/pentobi_qml/qml/GotoMoveDialog.qml
index a0341ad..768b156 100644
--- a/src/pentobi_qml/qml/GotoMoveDialog.qml
+++ b/src/pentobi_qml/qml/GotoMoveDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Dialogs 1.2
 
 Dialog {
diff --git a/src/pentobi_qml/qml/HelpWindow.qml 
b/src/pentobi_qml/qml/HelpWindow.qml
index 3e43d34..3a8b6a5 100644
--- a/src/pentobi_qml/qml/HelpWindow.qml
+++ b/src/pentobi_qml/qml/HelpWindow.qml
@@ -15,9 +15,14 @@ Window {
     }
     property url startUrl: helpFileExtractor.extract(language)
 
+    // Instead of initializing webView.url with startUrl, we provide an init
+    // function that needs to be called after show() to work around an issue
+    // with the initial zoom factor of WebView sometimes very large on Android
+    // (last tested with Qt 5.9.2)
+    function init() { webView.url = startUrl }
+
     width: isAndroid ? Screen.desktopAvailableWidth : 
Math.min(Screen.pixelDensity * 150, Screen.desktopAvailableWidth)
     height: isAndroid ? Screen.desktopAvailableHeight : 
Math.min(Screen.pixelDensity * 180, Screen.desktopAvailableHeight)
-    visibility: Window.AutomaticVisibility
     title: qsTr("Pentobi Help")
     color: theme.backgroundColor
     flags: Qt.Dialog
@@ -31,14 +36,6 @@ Window {
         id: webView
 
         anchors.fill: parent
-        url: startUrl
-
-        // Workaround for a bug in Qt on Android that makes the webview
-        // sometimes have a very small initial width until it is scrolled for
-        // the first time despite that we create it with
-        // "anchors.fill: parent" (last tested with Qt 5.8-rc)
-        onWidthChanged: reload()
-        onHeightChanged: reload()
     }
     HelpFileExtractor { id: helpFileExtractor }
 }
diff --git a/src/pentobi_qml/qml/InitialRatingDialog.qml 
b/src/pentobi_qml/qml/InitialRatingDialog.qml
index 037a818..00f80c9 100644
--- a/src/pentobi_qml/qml/InitialRatingDialog.qml
+++ b/src/pentobi_qml/qml/InitialRatingDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Controls 1.2 as Controls1
 import QtQuick.Dialogs 1.2
 import QtQuick.Layouts 1.0
diff --git a/src/pentobi_qml/qml/Main.js b/src/pentobi_qml/qml/Main.js
index 925a569..9df2b22 100644
--- a/src/pentobi_qml/qml/Main.js
+++ b/src/pentobi_qml/qml/Main.js
@@ -5,7 +5,7 @@ function about() {
     showInfo("<h2>" + qsTr("Pentobi") + "</h2><br/>" +
              qsTr("Version %1").arg(Qt.application.version) + "<br/><br/>" +
              qsTr("Computer opponent for the board game Blokus.") + "<br/>" +
-             qsTr("Copyright 2011-%1 Markus&nbsp;Enzenberger").arg(2017) +
+             qsTr("Copyright 2011-%1 Markus&nbsp;Enzenberger").arg(2018) +
              "<br><a href=\"" + url + "\">" + url + "</a></p>")
 }
 
@@ -268,6 +268,7 @@ function help() {
     if (helpWindowLoader.status === Loader.Null)
         helpWindowLoader.source = "HelpWindow.qml"
     helpWindowLoader.item.show()
+    helpWindowLoader.item.init()
 }
 
 function init() {
diff --git a/src/pentobi_qml/qml/Main.qml b/src/pentobi_qml/qml/Main.qml
index 480d42d..758ad6d 100644
--- a/src/pentobi_qml/qml/Main.qml
+++ b/src/pentobi_qml/qml/Main.qml
@@ -45,7 +45,6 @@ Window {
     minimumWidth: 240; minimumHeight: 301
 
     width: defaultWidth; height: defaultHeight
-    visibility: Window.AutomaticVisibility
     color: theme.backgroundColor
     title: qsTr("Pentobi")
     Component.onCompleted: {
diff --git a/src/pentobi_qml/qml/MessageDialog.qml 
b/src/pentobi_qml/qml/MessageDialog.qml
index 995a4dc..77367a2 100644
--- a/src/pentobi_qml/qml/MessageDialog.qml
+++ b/src/pentobi_qml/qml/MessageDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Dialogs 1.2
 import QtQuick.Window 2.0
 
diff --git a/src/pentobi_qml/qml/PieceCallisto.qml 
b/src/pentobi_qml/qml/PieceCallisto.qml
index b9ab63f..419bfd4 100644
--- a/src/pentobi_qml/qml/PieceCallisto.qml
+++ b/src/pentobi_qml/qml/PieceCallisto.qml
@@ -254,7 +254,7 @@ Item
                 NumberAnimation {
                     properties: "x,y,scale"
                     duration: 300
-                    easing.type: Easing.InOutQuad
+                    easing.type: Easing.InOutSine
                 }
             }
     }
diff --git a/src/pentobi_qml/qml/PieceClassic.qml 
b/src/pentobi_qml/qml/PieceClassic.qml
index 19d026c..782aeb6 100644
--- a/src/pentobi_qml/qml/PieceClassic.qml
+++ b/src/pentobi_qml/qml/PieceClassic.qml
@@ -218,7 +218,7 @@ Item
                 NumberAnimation {
                     properties: "x,y,scale"
                     duration: 300
-                    easing.type: Easing.InOutQuad
+                    easing.type: Easing.InOutSine
                 }
             }
     }
diff --git a/src/pentobi_qml/qml/PieceGembloQ.qml 
b/src/pentobi_qml/qml/PieceGembloQ.qml
index 4ab9be0..cc5df91 100644
--- a/src/pentobi_qml/qml/PieceGembloQ.qml
+++ b/src/pentobi_qml/qml/PieceGembloQ.qml
@@ -254,7 +254,7 @@ Item
                 NumberAnimation {
                     properties: "x,y,scale"
                     duration: 300
-                    easing.type: Easing.InOutQuad
+                    easing.type: Easing.InOutSine
                 }
             }
     }
diff --git a/src/pentobi_qml/qml/PieceNexos.qml 
b/src/pentobi_qml/qml/PieceNexos.qml
index c954a04..99372fd 100644
--- a/src/pentobi_qml/qml/PieceNexos.qml
+++ b/src/pentobi_qml/qml/PieceNexos.qml
@@ -271,7 +271,7 @@ Item
                 NumberAnimation {
                     properties: "x,y,scale"
                     duration: 300
-                    easing.type: Easing.InOutQuad
+                    easing.type: Easing.InOutSine
                 }
             }
     }
diff --git a/src/pentobi_qml/qml/PieceTrigon.qml 
b/src/pentobi_qml/qml/PieceTrigon.qml
index 29b1ef1..6bea320 100644
--- a/src/pentobi_qml/qml/PieceTrigon.qml
+++ b/src/pentobi_qml/qml/PieceTrigon.qml
@@ -257,7 +257,7 @@ Item
                 NumberAnimation {
                     properties: "x,y,scale"
                     duration: 300
-                    easing.type: Easing.InOutQuad
+                    easing.type: Easing.InOutSine
                 }
             }
     }
diff --git a/src/pentobi_qml/qml/RatingDialog.qml 
b/src/pentobi_qml/qml/RatingDialog.qml
index e13c092..888edc3 100644
--- a/src/pentobi_qml/qml/RatingDialog.qml
+++ b/src/pentobi_qml/qml/RatingDialog.qml
@@ -1,5 +1,5 @@
 import QtQuick 2.0
-import Qt.labs.controls 1.0
+import QtQuick.Controls 2.0
 import QtQuick.Controls 1.1 as Controls1
 import QtQuick.Dialogs 1.2
 import QtQuick.Layouts 1.0
diff --git a/src/pentobi_qml/qml/ToolBar.qml b/src/pentobi_qml/qml/ToolBar.qml
index 2d4cff1..10ad727 100644
--- a/src/pentobi_qml/qml/ToolBar.qml
+++ b/src/pentobi_qml/qml/ToolBar.qml
@@ -1,6 +1,6 @@
 import QtQuick 2.0
 import QtQuick.Controls 1.1
-import Qt.labs.controls 1.0 as Controls2
+import QtQuick.Controls 2.0 as Controls2
 import QtQuick.Layouts 1.1
 import QtQuick.Window 2.0
 import "." as Pentobi
diff --git a/src/twogtp/Analyze.cpp b/src/twogtp/Analyze.cpp
index 198a60f..a5a77b3 100644
--- a/src/twogtp/Analyze.cpp
+++ b/src/twogtp/Analyze.cpp
@@ -12,7 +12,6 @@
 
 #include <fstream>
 #include <map>
-#include <regex>
 #include "libboardgame_util/FmtSaver.h"
 #include "libboardgame_util/Statistics.h"
 #include "libboardgame_util/StringUtil.h"
diff --git a/src/unittest/libboardgame_gtp/EngineTest.cpp 
b/src/unittest/libboardgame_gtp/EngineTest.cpp
index de8aff5..e1d07cf 100644
--- a/src/unittest/libboardgame_gtp/EngineTest.cpp
+++ b/src/unittest/libboardgame_gtp/EngineTest.cpp
@@ -64,20 +64,20 @@ void InvalidResponseEngine::invalid_response_2(Response& r)
 
 LIBBOARDGAME_TEST_CASE(gtp_engine_command)
 {
-    istringstream in("version\n");
+    istringstream in("known_command known_command\n");
     ostringstream out;
     Engine engine;
     engine.exec_main_loop(in, out);
-    LIBBOARDGAME_CHECK_EQUAL(string("= \n\n"), out.str());
+    LIBBOARDGAME_CHECK_EQUAL(string("= true\n\n"), out.str());
 }
 
 LIBBOARDGAME_TEST_CASE(gtp_engine_command_with_id)
 {
-    istringstream in("10 version\n");
+    istringstream in("10 known_command known_command\n");
     ostringstream out;
     Engine engine;
     engine.exec_main_loop(in, out);
-    LIBBOARDGAME_CHECK_EQUAL(string("=10 \n\n"), out.str());
+    LIBBOARDGAME_CHECK_EQUAL(string("=10 true\n\n"), out.str());
 }
 
 /** Check that invalid responses with one empty line are sanitized. */

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-games/pentobi.git

_______________________________________________
Pkg-games-commits mailing list
Pkg-games-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to