mirror of
https://git.zap.org.au/git/trader.git
synced 2024-11-03 17:27:29 -05:00
1e0285f6c0
Current and previous versions of ISO/IEC 9945-1 (POSIX), particularly SUSv3 (2001) and SUSv4 (2008), require strfmon() to return rather meaningless strings when used with the POSIX "C" locale. In particular, the standard POSIX locale does not define a currency symbol, a monetary radix symbol (decimal point) or a negative sign. This means strfmon(..., "%n", -123.45) is supposed to produce "12345" instead of something like "$-123.45"! The new xstrfmon() overcomes these limitations by using snprintf() as appropriate.
312 lines
14 KiB
Plaintext
312 lines
14 KiB
Plaintext
**************************************************************************
|
|
* *
|
|
* Star Traders: A Game of Interstellar Trading *
|
|
* Copyright (C) 1990-2018, John Zaitseff *
|
|
* *
|
|
**************************************************************************
|
|
|
|
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
|
|
browse the Git repository on The ZAP Group web server at the following
|
|
location: https://www.zap.org.au/gitweb/trader.git
|
|
|
|
|
|
Version 7.13 (not yet released)
|
|
-------------------------------
|
|
|
|
Modified the code to work more reliably on non-Glibc (GNU C Library) plat-
|
|
forms, particularly FreeBSD, Solaris and Cygwin, when using the standard
|
|
POSIX locale.
|
|
|
|
Added the Spanish translation, with thanks to Francisco Javier Serrador.
|
|
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.
|
|
|
|
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. In particular, successfully tested at least
|
|
the following combinations:
|
|
|
|
+-------------------------+--------+-------+-------------------------+---+
|
|
| Operating system | Arch | Glibc | Compiler | N |
|
|
+-------------------------+--------+-------+-------------------------+---+
|
|
| Debian GNU/Linux Sid | x86_64 | 2.27 | GNU C Compiler 8.2.0 | |
|
|
| Debian GNU/Linux Sid | i686 | 2.27 | GNU C Compiler 8.2.0 | |
|
|
| Debian GNU/Linux 9.5 | x86_64 | 2.24 | GNU C Compiler 6.3.0 | |
|
|
| Ubuntu 18.04 | x86_64 | 2.27 | GNU C Compiler 7.3.0 | |
|
|
| Ubuntu 18.04 | x86_64 | 2.27 | Clang (LLVM) 6.0.0 | |
|
|
| Ubuntu 18.04 | x86_64 | 2.27 | Portland PGI C/C++ 18.5 | |
|
|
| Fedora 28 | x86_64 | 2.27 | GNU C Compiler 8.1.1 | |
|
|
| CentOS 7.5 | x86_64 | 2.17 | GNU C Compiler 4.8.5 | |
|
|
| CentOS 6.10 | x86_64 | 2.12 | GNU C Compiler 4.4.7 | |
|
|
| CentOS 6.10 | x86_64 | 2.12 | Portland PGI C/C++ 18.3 | |
|
|
| CentOS 6.9 | x86_64 | 2.12 | Intel C/C++ 18.0.3 | |
|
|
| OpenSUSE 15.0 | x86_64 | 2.26 | GNU C Compiler 7.3.1 | |
|
|
| FreeBSD 11.2 | x86_64 | +----+ Clang (LLVM) 6.0.0 | 1 |
|
|
| Solaris 11.3 (x86_64) | i386 | | GNU C Compiler 4.8.2 | |
|
|
| Solaris 11.3 (x86_64) | x86_64 | | GNU C Compiler 4.8.2 | 2 |
|
|
| Solaris 11.3 (x86_64) | i386 | | Oracle Developer Studio 12.6 | 3 |
|
|
| Solaris 11.3 (x86_64) | x86_64 | | Oracle Developer Studio 12.6 | 4 |
|
|
| Cygwin 2.10.0 (Win7SP1) | i686 | | GNU C Compiler 7.3.0 | |
|
|
+-------------------------+--------+--+------------------------------+---+
|
|
|
|
Notes:
|
|
|
|
1. FreeBSD with the gettext, gettext-runtime, gettext-tools and libiconv
|
|
binary packages installed with "pkg", using:
|
|
|
|
./configure --with-libiconv-prefix=/usr/local \
|
|
--with-libintl-prefix=/usr/local
|
|
|
|
2. Using "./configure CC='gcc -m64'" for 64-bit user-space.
|
|
3. Using "./configure CC='/opt/developerstudio12.6/bin/cc'".
|
|
4. Using "./configure CC='/opt/developerstudio12.6/bin/cc -m64'".
|
|
|
|
The following systems are known not to work at the current time; this list
|
|
is almost certainly not exhaustive:
|
|
|
|
+-------------------------+--------+---------------------------------+---+
|
|
| Operating system | Arch | Compiler | N |
|
|
+-------------------------+--------+---------------------------------+---+
|
|
| OpenBSD 6.3 | x86_64 | GNU C Compiler 4.2.1 | 1 |
|
|
| OpenBSD 6.3 | x86_64 | Clang (LLVM) 5.0.1 | 1 |
|
|
+-------------------------+--------+---------------------------------+---+
|
|
|
|
Notes:
|
|
|
|
1. The OpenBSD C library does not include <monetary.h> nor its associated
|
|
functions, particularly strfmon().
|
|
|
|
|
|
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 "char"
|
|
as "unsigned char", and this caused b64decode() to fail while loading a
|
|
saved game. Changed the relevant type from "char" to "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 transla-
|
|
tions, 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 80x24 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) Star Traders game was written by S. J.
|
|
Singer in 1984 using Altair Basic. This was modified for Microsoft Basic
|
|
(MBASIC) running under the CP/M-80 operating system by John Zaitseff and
|
|
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 and some
|
|
of the 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...
|