.. -*- mode: rst; coding: utf-8 -*-
.. role:: filename(literal)
.. default-role:: filename

============================================
Star Traders: A Game of Interstellar Trading
============================================

Star Traders is a simple game of interstellar trading, where the
objective is to create companies, buy and sell shares, borrow and repay
money, in order to become the wealthiest player (the winner).

The following history is presented in reverse chronological order.  If
you would like to see a list of detailed changes to this project, you
should clone the `Star Traders Git repository`__ and view the commit
history::

    git clone https://git.zap.org.au/git/trader.git
    git log --stat

__ https://git.zap.org.au/git/trader.git


.. contents::


Version 7.21 (17th May, 2026)
-----------------------------

Added SPDX__ licence identifiers to all source code files.

__ https://spdx.dev/

Minor bug fix for the manual page: removed the invocation to the
undefined "mR" font.  Updated all documentation to use HTTPS instead of
the insecure Git and obsolete FTP protocols.

Updated to GNU Gettext 0.22 or later.  Updated to the latest snapshot of
the Gnulib GNU Portability Library, including changes to make Star
Traders work with Gnulib’s new Python-based ``gnulib-tool``.  Modified
the configuration code to work with Autoconf 2.73 and later.

Extensively tested this release with many Linux distributions and
non-Linux operating systems, as has been done with all releases
since 2019.


Version 7.20 (31st January, 2024)
---------------------------------

Updated the history of the game based on information kindly supplied by
Patrick Dumais, who pointed out the source of Star Lanes in its original
incarnation.  Reworked the manual page as part of the updated history.

Updated the Swedish, Norwegian Bokmål, French, German, Serbian,
Esperanto, Romanian and Polish translations (in that order), with sincere
thanks to Anders Jonsson, Johnny A. Solbu, Frédéric Marchal, Roland
Illig, Мирослав Николић, Felipe Castro, Remus-Gabriel Chelu and Alina
Skrinnikoff respectively.

Made minor changes to the Ukrainian translation, using uk.po files from
GNU C Library, GNU Coreutils and GNU AWK projects as a basis.  This
translation still needs a native speaker to look over it!

Updated to the latest snapshot of the Gnulib GNU Portability Library.


Version 7.19 (5th January, 2024)
--------------------------------

Added a Romanian translation, with thanks to Remus-Gabriel Chelu.
Updated the Hungarian translation, with thanks to Balázs Úr.  Added
preliminary Polish and Ukrainian translations—feel free to improve them!

Updated to GNU Gettext 0.21 or later, to Automake 1.16 or later, and to
the latest snapshot of the Gnulib GNU Portability Library.

Renamed the desktop and AppStream data files to conform to the AppStream
1.0 specification; these now have names based on ``au.org.zap.trader``.
Added a caption to the AppStream screenshot and updated all translations
to suit.  Renamed `build-aux/msgfmt-appdata` to `msgfmt-metainfo` to
reflect these changes.


Version 7.18 (3rd August, 2022)
-------------------------------

Minor bug fix: remove the ``<icon>`` line from `trader.appdata.xml.in` so
that the icon is taken from the `trader.desktop` file instead, otherwise
Fedora builds fail with a message from ``appstream-util validate-relax``
that “tag-invalid: stock icon is not valid [trader.svg]”.


Version 7.17 (3rd August, 2022)
-------------------------------

Fixed two TOCTOU (time-of-check / time-of-use) bugs that arose between
checking for the traditional data directory and creating a data directory
later.  Also fixed a bug when the ``HOME`` environment variable is empty:
use the current directory instead.

Updated the Brazilian Portuguese, Norwegian Bokmål, Swedish, French,
Esperanto, Serbian, German and English translations (in that order), with
thanks to Rafael Fontenelle, Johnny A. Solbu, Anders Jonsson, Frédéric
Marchal, Felipe Castro, Мирослав Николић and Roland Illig respectively.

Updated the minimum version of GNU Autoconf required, giving the option
of compiling with C17 or C11 instead of C99.  Updated to the latest
snapshot of the Gnulib GNU Portability Library.


Version 7.16 (19th January, 2021)
---------------------------------

Added code to allow the ``TEXTDOMAINDIR`` environment variable to specify
where compiled translations are located.  Updated the documentation to
mention this new feature.

Added an application metadata file that conforms to the AppStream 0.12
specification.  Updated all translations to suit, using parts of existing
strings.

Updated the German translation, with thanks to Mario Blättermann.


Version 7.15 (12th January, 2021)
---------------------------------

Changed the default location where game files are saved from `~/.trader`
to `~/.local/share/trader`, so as to follow the `XDG Base Directory
Specification`__.  If set to an absolute path, the ``XDG_DATA_HOME``
environment variable will override this location.  If the `~/.trader`
directory is already present, it will continue to be used.  Updated the
manual page to suit.

__ https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

Updated the Russian translation to use the uppercase polite singular
forms «Вы» and «Ваш», as is customary in written documents.

Updated to GNU Gettext 0.20 or later.  Updated to the latest snapshot of
the Gnulib GNU Portability Library.  Also updated the `INSTALL` file to
list the latest tested versions of operating systems, including a new
listing for Haiku R1/beta2.


Version 7.14 (9th January, 2020)
--------------------------------

Added the Brazilian Portuguese translation, with thanks to Rafael
Fontenelle.  Updated the French, Hungarian and Esperanto translations, in
that order, with thanks to Frédéric Marchal, Balázs Úr and Felipe Castro.

Updated to the latest snapshot of the Gnulib GNU Portability Library.
Also updated the `INSTALL` file to list macOS 10.15 (Catalina) and the
64-bit version of Cygwin under Microsoft Windows 10 as being tested
platforms.


Version 7.13 (13th November, 2019)
----------------------------------

Converted all text files to reStructuredText (ReST) format.  This format
is still quite readable as raw text, and is much more capable than the
myriad all-slightly-incompatible variants of Markdown.

Modified the source code to work more reliably on non-GNU C Library
(``glibc``) platforms, particularly FreeBSD, Solaris and Cygwin, when
using the standard POSIX locale.  Extensively tested the build procedure
on multiple operating systems and compilers, and submitted code upstream
to the Autoconf Archive project to make this work more robustly.  Listed
tested operating system and compiler combinations in the `INSTALL` file.

Updated the Esperanto translation, with thanks to Felipe Castro.

Updated one string in the game for consistency with other labels; updated
all PO translations to suit.  Also added strings from obsolete versions
of the GNU C Library so that Star Traders can provide translations for
them.

Updated to the latest snapshot of the Gnulib GNU Portability Library.  In
addition, updated the list of prerequisites in the `INSTALL` file and
listed some more command line options for the ``configure`` script.


Version 7.12 (24th August, 2017)
--------------------------------

Updated the Serbian translation, with thanks to Мирослав Николић.


Version 7.11 (18th June, 2017)
------------------------------

Bug fix: some architectures (such as ARM, PowerPC and S390) treat
:code:`char` as :code:`unsigned char`, and this caused
:code:`b64decode()` to fail while loading a saved game.  Changed the
relevant type from :code:`char` to :code:`int` to fix this.


Version 7.10 (2nd June, 2017)
-----------------------------

Added a `data` directory that contains a desktop file and appropriate
icons.  Adjusted the game constants for more dynamic play: allow the
share prices and returns to change a bit more frequently and more
rapidly.  Tweaked the colours in the example monochrome retro-computing
command lines, including adding an amber monitor version.

Added a Serbian translation, with thanks to Мирослав Николић.  Updated
the Danish, French, Swedish, Hungarian, Norwegian Bokmål and German
translations, in that order, with thanks to Joe Hansen, Frédéric Marchal,
Anders Jonsson, Balázs Úr, Johnny A. Solbu and Philipp Thomas
respectively.

Updated translatable strings to overcome a limitation of ``msgfmt``\(1):
if a string starts or ends with a new-line character, its translation
must do so as well.  This has an impact on labels in particular.  Also
changed the help text string “Page *N* of *M*” to allow translations of
the form “Of *M* pages, this is page *N*”, and all quoted strings using
the obsolete GNU form ```like this'`` to ``'this'``.  In addition, newer
versions of `lib/getopt.c` have different strings.  All translations have
been updated as a result.

Removed the obsolete Gnulib ``gettext`` module and updated to the latest
Git snapshot of Gnulib.  Updated the dependency version numbers for
Autoconf, Automake and Gettext.  Also updated all macros from the
Autoconf Archive.

Migrated the source code repository from Subversion to Git.  Updated the
documentation to suit, and also listed specific required version numbers
for the Autoconf and Automake tools in the `INSTALL` file.


Version 7.9 (5th January, 2016)
-------------------------------

Updated the Danish translation, with thanks to Joe Hansen.


Version 7.8 (10th September, 2015)
----------------------------------

Changed the name of the seventh company from “Gemeni Inc” to “Gemini
Inc”: a spelling mistake that has been present since 1990!  Special
thanks to Anders Jonsson for pointing this out.

Added the Swedish translation, with thanks to Anders Jonsson.  Minor code
changes were made to accommodate this language.  Incorporated changes
made by the translators for German, French and Norwegian Bokmål, in that
order, with thanks to Philipp Thomas, Frédéric Marchal and
Johnny A. Solbu.  Also updated all references to GNU Gettext to version
0.19.5.


Version 7.7 (18th August, 2015)
-------------------------------

Added the Hungarian translation, with thanks to Balázs Úr.  Minor code
changes were made to accommodate this language.  Also added documentation
in the file `INSTALL` to translate Star Traders into another language.


Version 7.6 (13th August, 2014)
-------------------------------

A minor release to fix compilation bugs under Cygwin: the ``libiconv``
library must be listed *after* the GNU Portability Library on that
platform.

In addition, the minimum and maximum share return values were changed
from -10% to -15% and 20% to 25% respectively.  This gives more incentive
to borrow money from the Interstellar Trading Bank, whose interest rate
can reach a maximum of 20%.


Version 7.5 (24th May, 2014)
----------------------------

Rewrote the file input and output routines so that saved games are now
stored in a much more reliable (scrambled) ASCII format.  However, saved
games from older versions will no longer load: the workaround is to start
the older version of Star Traders with the ``--dont-encrypt`` command
line option, load the relevant game and save it again straight away,
change the second line in the game file from “``File API 7.2``” to
“``File API 7.5``”, then run the new version of Star Traders.

Added translations for Norwegian Bokmål, Danish and Esperanto (in that
order), with thanks to Johnny A. Solbu, Joe Hansen and Felipe Castro.
Updated auxiliary files to the latest versions available from the Gnulib
GNU Portability Library and the GNU Autoconf project.


Version 7.4 (9th May, 2012)
---------------------------

For the first time since the CP/M-80 version of Star Traders, the game
algorithms have been carefully reviewed and revised.  In particular,
companies may now have negative returns, making players lose money on
such shares.  This may encourage players to use the “Sell shares” option
at appropriate times…  In addition, changes in share prices, returns and
bank interest rates have been made much “smoother”, less prone to wild
variations.  These new algorithms were first modelled using Gnuplot and
Perl before being implemented in C.

The ``configure`` script now prints a prominent warning if a
wide-character version of Curses, such as NcursesW, is not available when
compiling the game.  It is a warning and not an error as single-byte
locales (such as US-ASCII and ISO8859-1) do not require NcursesW, even if
the compilation environment itself is a multibyte one (such as UTF-8).

The Russian translation has been updated, with thanks to Vladimir Tsarkov
and Pavel Maryanov.  Translations for French, German, Finnish and
Croatian have been added (in that order), with thanks to Frédéric
Marchal, Philipp Thomas, Jorma Karvonen and Tomislav Krznar.  Special
thanks also to the Translation Project, which brings free (open-source)
software developers and translators together.


Version 7.3 (16th March, 2012)
------------------------------

Star Traders has been translated into Russian.  In addition, a number of
bugs with internationalisation have been fixed.  The “default value” key
(originally “``=``” or “``;``” as the first key-press in any input field)
has been incorporated into the language translation files.


Version 7.2 (29th August, 2011)
-------------------------------

Star Traders has been internationalised!  As part of this update, all
input and output routines have been rewritten to handle multibyte
strings.  English (Australian, British, Canadian and US) translations
have been included.  Translations for other languages (and corrections to
existing languages) are more than welcome!

Game files are now stored in UTF-8 format (once decrypted!) and can be
loaded under any locale with automatic character set translation.  This
does mean, however, that game files from versions 7.0 and 7.1 of Star
Traders will not load under this release.

The program now better handles terminal resizing events (for versions of
Curses supporting such events).  It also tries to restore the terminal
environment correctly when receiving a terminating signal.


Version 7.1 (29th July, 2011)
-----------------------------

A minor updated release to fix configuration problems on some platforms.
In particular, some systems could not find the Curses libraries or header
files, so the Autoconf macro that performed the search was rewritten and
extended.


Version 7.0 (25th July, 2011)
-----------------------------

Released the first version of Star Traders for Unix-like operating
systems such as Linux.  It requires a text console or window of at least
80×24 in size.  The code is written in the C99 programming language as a
learning exercise for a number of software tools and libraries; the
algorithms in the original Pascal and Visual Basic versions are reused
for the game logic.

Note that versions 7.0 and 7.1 of Star Traders did *not* handle locales
with multibyte character sequences (such as UTF-8) correctly.  Each byte
in a such a sequence was treated as a separate character.  Eight-bit
locales (such as US-ASCII, ISO8859-1, etc.) worked correctly.


Early history
-------------

The original (and very primitive) game was written by Steven Faber and
published as Star Lanes on pages `131–138`__ in :t:`Interface Age`,
June 1977.  It was described by the magazine’s software editor as:

    … a new imaginative Monopoly-type microcomputer game that everyone
    can and will want to play if you have a microcomputer.  Like the
    Monopoly game, STAR LANES combines financial and positional
    strategies as players attempt to lay claim to valuable pieces of
    space real estate between the stars in the Galaxy.

    -- Robert A. Stevens, page 123__, :t:`Interface Age`, June 1977

__ https://www.zap.org.au/projects/trader/historical/mbasic/src/star-lanes.pdf
__ https://archive.org/details/197706InterfaceAge/page/n124/mode/1up

S. J. Singer took Star Lanes and republished it in 1984 as Star Traders.
His version was modified by John Zaitseff for Microsoft Basic (MBASIC)
running under the CP/M-80 operating system; it was released on 7th
March, 1988.

Star Traders was then completely rewritten in 1990 for the
Australian-designed 8-bit MicroBee computer running CP/M-80 on a Zilog
Z80 processor, using Turbo Pascal 3.01a.  Essentially, only the name of
the game, the names of the first five companies and some of the key ideas
were retained in this version.  Version 4.1 of Star Traders was released
on 1st August, 1991.

In 1992, it was recompiled for the NEC Advanced Personal Computer (with
8-inch floppy drives!) running CP/M-86 on an 8086 processor, using Turbo
Pascal 2.0.  This version had colour added to it in the form of ANSI
escape sequences; version 4.4 was released on 2nd August, 1993.

The next version came in 1993, when the program was recompiled to run on
IBM-compatible machines running MS-DOS and ANSI.SYS.  Turbo Pascal 6.0
was used for this.  The ANSI escape sequences were slightly different
under MS-DOS than under the NEC, in that the NEC supported a number of
extra character attributes.  In other words, the MS-DOS version looked
worse than the one running under CP/M-86!

Star Traders was recompiled again in 1994 for IBM-compatible machines
with VGA/EGA/CGA video graphics adapters.  The output routines were
recoded to use a “windowed” look.  Borland Pascal 7.0 was used for this
purpose, along with a number of text window manipulation modules.
Version 5.4 was released on 1st June, 1994.

In 1995, Star Traders was completely rewritten for the 16-bit Microsoft
Windows 3.1 graphical environment.  Microsoft Visual Basic 3.0 was used
for this purpose.  Although completely rewritten, the original algorithms
were reused from previous versions.  Version 6.0 of the game was released
on 15th September, 1995.

Star Traders was then to languish until almost 16 years later…
