aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--games/xspacewarp/README8
-rw-r--r--games/xspacewarp/XSpacewarp267
-rw-r--r--games/xspacewarp/doinst.sh6
-rw-r--r--games/xspacewarp/slack-desc2
-rw-r--r--games/xspacewarp/winclose.diff78
-rw-r--r--games/xspacewarp/xspacewarp.SlackBuild72
-rw-r--r--games/xspacewarp/xspacewarp.desktop3
-rw-r--r--games/xspacewarp/xspacewarp.man12
8 files changed, 126 insertions, 322 deletions
diff --git a/games/xspacewarp/README b/games/xspacewarp/README
index d2dcecc72e18..f10ecc74c3f3 100644
--- a/games/xspacewarp/README
+++ b/games/xspacewarp/README
@@ -1,5 +1,7 @@
-In xspacewarp the player maneuvers a Federation spaceship, called the Endever,
-through 81 sectors of space trying to destroy an Armada of enemy Jovian ships
-before they destroy the all the Federation bases.
+xspacewarp (Time Trek like game for X Window System)
+
+In xspacewarp the player maneuvers a Federation spaceship, called the
+Endever, through 81 sectors of space trying to destroy an Armada of
+enemy Jovian ships before they destroy the all the Federation bases.
Ported to X from a game originally written for the TRS-80 in 1977.
diff --git a/games/xspacewarp/XSpacewarp b/games/xspacewarp/XSpacewarp
deleted file mode 100644
index 15960e6a1e8b..000000000000
--- a/games/xspacewarp/XSpacewarp
+++ /dev/null
@@ -1,267 +0,0 @@
-! app-defaults for xspacewarp 1.2 (12/22/95)
-
-! whether to use mouse pointer inside xspacewarp window
-*nomouse: true
-
-! number rows of 9x15 blocks in a sector of the universe
-*rows: 26
-
-! number columns of 9x15 blocks in a sector of the universe
-*columns: 79
-
-! The following resources refer to the number of bases, jovians,
-! stars and blackholes in the universe. "min" values correspond
-! to the lowest skill level of the game and "max" values
-! correspond to the highest skill level. Values for the other
-! skill levels are interpolated linearly between the "min" value
-! and the "max" value. Populations are chosen randomly in the
-! range: (average) +/- (variation).
-
-! Limits for the average population and the variation in
-! population for bases. The actual average and variation used
-! is interpolated linearly from these limits as a function of
-! the skill level.
-
-*minAverageBasePop: 18
-*maxAverageBasePop: 18
-*minVariationBasePop: 3
-*maxVariationBasePop: 3
-
-! Limits for the average population and the variation in
-! population for jovians.
-
-*minAverageJovianPop: 10
-*maxAverageJovianPop: 73
-*minVariationJovianPop: 3
-*maxVariationJovianPop: 3
-
-! Limits for the average population and the variation in
-! population for stars.
-
-*minAverageStarPop: 75
-*maxAverageStarPop: 75
-*minVariationStarPop: 5
-*maxVariationStarPop: 5
-
-! Limits for the average population and the variation in
-! population for blackholes.
-
-*minAverageBlackholePop: 5
-*maxAverageBlackholePop: 5
-*minVariationBlackholePop: 4
-*maxVariationBlackholePop: 4
-
-! color for text and graphical borders
-*foreground: white
-
-! background color for everything
-*background: black
-
-! visual representation of the endever (icon must have exactly 3 characters)
-*endeverColor: white
-*endeverIcon: >-0
-
-! visual representation of the jovians (icon must have exactly 3 characters)
-*jovianColor: white
-*jovianIcon: <*>
-
-! visual representation of the bases (icon must have exactly 3 characters)
-*baseColor: white
-*baseIcon: +0+
-
-! visual representation of the stars (icon must have exactly 1 character)
-*starColor: white
-*starIcon: .
-
-! visual representation of the blackholes (icon must have exactly 1 character)
-*blackholeColor: black
-*blackholeIcon: \040
-
-! faser color
-*faserColor: white
-
-! torpedo color
-*torpedoColor: white
-
-! Fasers are drawn as dashed lines. The dash list describes the
-! dash pattern of the line. A list such as "3 2 4" (elements of
-! the list are separated by \040, the octal code for a space
-! character) will make a dash pattern that has the first 3
-! pixels of the line lit, the next 2 pixels dark and the next 4
-! pixels lit. This pattern is repeated through the dashed
-! line. The dash offset is the pixel in the dash list at which
-! to begin the pattern. Eg, offset=3 in the example above would
-! mean starting the dashed line with 2 lit pixels followed by 4
-! unlit pixels and then 3 lit pixels, etc.
-*faserDashList: 4\0404
-*faserDashOffset: 0
-
-! Thickness of faser in pixels
-*faserWidth: 9
-
-! millisec time determines speed of ion thrusters
-*endeverThrustSpeed: 100
-
-! millisec interval for ship (base, jovian, endever) re-energizing
-*shipEnergizeSpeed: 3000
-
-! millisec interval between jovian actions
-*jovianActionSpeed: 100
-
-! millisec interval for faser movement
-*faserSpeed: 15
-
-! millisec interval for torpedo movement
-*torpedoSpeed: 30
-
-! dimensions of torpedo (in pixels)
-*torpedoLength: 6
-*torpedoWidth: 9
-
-! millisec interval for rate of explosion growth
-*explosionSpeed: 20
-
-*explosionColor: white
-
-! radius to use for most ship explosions
-*explosionRadiusSmall: 35
-
-! radius to use for endever self-destruct explosion
-*explosionRadiusBig: 200
-
-! endever self-destruct code
-*selfDestructCode: 123
-
-! endever default faser/torpedo angle (radians). type float.
-*defaultFiringAngle: 0.0
-
-! starting number of torpedoes for endever
-*maxTorpedoes: 10
-
-*maxJoviansPerSector: 3
-*maxStarsPerSector: 5
-
-! probability a sector is masked (percent)
-*maskProbability: 5
-
-! When the Endever leaps into a new sector, it gets placed at a
-! random location inside that sector. The euclidean distance
-! (in pixels) from this location to the jovians inside the
-! sector is at least this value.
-
-*minJovianDistance: 150
-
-! min percent energy needed for endever fasers to work
-*endeverMinFaserEnergy: 10
-
-! min percent energy for endever warpdrive to work
-*endeverMinWarpEnergy: 20
-
-! min percent energy for endever ion thrusters to work
-*endeverMinThrustEnergy: 10
-
-! min percent energy needed for jovian fasers to work
-*jovianMinFaserEnergy: 10
-
-! min percent energy for jovian warpdrive to work
-*jovianMinWarpEnergy: 20
-
-! min percent energy for ion thrusters to work
-*jovianMinThrustEnergy: 10
-
-
-! Now some "artificial intelligence" parameters for controlling
-! jovian behavior.
-
-! If the percent energy levels (ie, percent of maximum energy)
-! of the thrusters, warpdrive, fasers and shields of a jovian
-! drop to levels less than the respective "retreat" energies
-! given below, then the jovian will exit the battle scene with
-! probability (given as a percent)
-! jovianRetreatProbability. jovianRetreatSpeed (type float) is
-! the average rate (movements/sec) at which the jovian retreats
-! toward the sector edge. Thus if jovianRetreatSpeed is 1.4,
-! then a fleeing jovian will make a movement toward the edge of
-! the sector, on average, once every 1.4 seconds. And if the
-! jovian happens to already be on the edge of the sector, then
-! the jovian will leap to a different sector (if its warpdrive
-! energy is adequate) after a pause of 1.4 seconds on average.
-
-*jovianThrustRetreatEnergy: 30
-*jovianWarpRetreatEnergy: 40
-*jovianFaserRetreatEnergy: 30
-*jovianShieldRetreatEnergy: 40
-*jovianRetreatProbability: 50
-*jovianRetreatSpeed: 1.0
-
-
-! If the endever or a base being raided is in the same sector as
-! a jovian, then the jovian moves or shoots (on average) every
-! jovianMaxFightFrequency seconds in the highest skill level of
-! the game and every jovianMinFightFrequency seconds in lowest
-! skill level. Fight frequencies for the other skill levels are
-! interpolated linearly between jovianMinFightFrequency and
-! jovianMaxFightFrequency. These resources are type "float".
-
-*jovianMaxFightFrequency: 1.5
-*jovianMinFightFrequency: 3.5
-
-! When a sector contains a base and a jovian, but not the
-! endever, then there is a possibility of an attack or "raid" on
-! the base. These resources are the average time in seconds
-! before some jovian somewhere in the universe launches a raid
-! on a base. jovianMaxRaidFrequency is for the highest skill
-! level, jovianMinRaidFrequency is for the lowest skill
-! level. Values for other skill levels are interpolated linearly
-! between these extremes. These resources are type "float".
-
-*jovianMaxRaidFrequency: 40.0
-*jovianMinRaidFrequency: 400.0
-
-! If a jovian is in a sector containing neither a base nor the
-! endever, then there is a possibility of the jovian leaping to
-! a different sector. These resources are the average number of
-! seconds until some jovian somewhere in the universe leaps to a
-! sector containing a base or the
-! endever. jovianMaxLeapFrequency is for the highest skill level
-! and jovianMinLeapFrequency is for the lowest skill
-! level. Values for the other skill levels are interpolated in
-! between these extremes. These resources are type "float".
-
-*jovianMaxLeapFrequency: 40.0
-*jovianMinLeapFrequency: 400.0
-
-! key bindings for the endever
-
-*widget.translations: #replace \n\
- <Expose>: expose() \n\
- <Key>KP_Up: move(up) \n\
- <Key>KP_Down: move(down) \n\
- <Key>KP_Left: move(left) \n\
- <Key>KP_Right: move(right) \n\
- <Key>Up: move(up) \n\
- <Key>Down: move(down) \n\
- <Key>Left: move(left) \n\
- <Key>Right: move(right) \n\
- <Key>space: mission(start) sector() \n\
- <Key>1: input() scanner() \n\
- <Key>2: input() summary() \n\
- <Key>3: input() leap() \n\
- <Key>4: input() shields() \n\
- <Key>5: input() fasers() \n\
- <Key>6: input() torpedoes() \n\
- <Key>7: input() selfdestruct() \n\
- <Key>8: input() \n\
- <Key>9: input() \n\
- <Key>0: input() \n\
- <Key>-: input() \n\
- <Key>Return: endinput() \n\
- <Key>BackSpace: backspace() \n\
- <Key>n: orientation(next) replay(no) \n\
- <Key>o: mission(orient) \n\
- <Key>p: orientation(prev) pause() \n\
- <Key>q: orientation(quit) \n\
- <Key>y: replay(yes)
-
-! end app-defaults
-
diff --git a/games/xspacewarp/doinst.sh b/games/xspacewarp/doinst.sh
index 1015d8fd4dec..519aaca034f4 100644
--- a/games/xspacewarp/doinst.sh
+++ b/games/xspacewarp/doinst.sh
@@ -16,3 +16,9 @@ config etc/X11/app-defaults/XSpacewarp.new
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi
+
+if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
+ if [ -x /usr/bin/gtk-update-icon-cache ]; then
+ /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
+ fi
+fi
diff --git a/games/xspacewarp/slack-desc b/games/xspacewarp/slack-desc
index 25c2651c01cb..3b0bd7daa5a3 100644
--- a/games/xspacewarp/slack-desc
+++ b/games/xspacewarp/slack-desc
@@ -6,7 +6,7 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-xspacewarp: xspacewarp (Time Trek - like game for X Window System)
+xspacewarp: xspacewarp (Time Trek like game for X Window System)
xspacewarp:
xspacewarp: In xspacewarp the player maneuvers a Federation spaceship, called the
xspacewarp: Endever, through 81 sectors of space trying to destroy an Armada of
diff --git a/games/xspacewarp/winclose.diff b/games/xspacewarp/winclose.diff
new file mode 100644
index 000000000000..15da48e27d24
--- /dev/null
+++ b/games/xspacewarp/winclose.diff
@@ -0,0 +1,78 @@
+diff -Naur xspacewarp-1.2/actions.cc xspacewarp-1.2.patched/actions.cc
+--- xspacewarp-1.2/actions.cc 2021-10-12 04:25:30.580232070 -0400
++++ xspacewarp-1.2.patched/actions.cc 2021-10-12 05:37:05.063841685 -0400
+@@ -287,6 +287,7 @@
+ break;
+ case 'n': // quit xspacewarp
+ cout << "Live long and prosper!" << endl;
++ XCloseDisplay(XtDisplay(w));
+ exit(0);
+ default:
+ cerr << "xspacewarp: replay: unknown argument in X defaults." << endl;
+@@ -310,6 +311,12 @@
+ }
+ }
+
++void quit(Widget w, XEvent *event, String *str, Cardinal *len) {
++ if(event->type == ClientMessage && ((Atom) event->xclient.data.l[0]) == wm_delete_window) {
++ XCloseDisplay(XtDisplay(w));
++ exit(0);
++ }
++}
+
+ // not an action but invoked by one.
+ // Initialize Jovian AI data and start AppTimeOuts so jovians
+diff -Naur xspacewarp-1.2/globals.hh xspacewarp-1.2.patched/globals.hh
+--- xspacewarp-1.2/globals.hh 1995-12-29 02:41:39.000000000 -0500
++++ xspacewarp-1.2.patched/globals.hh 2021-10-12 05:03:56.900022417 -0400
+@@ -24,6 +24,7 @@
+ extern Pixmap pixmap;
+ extern GC def_GC, defrv_GC, faserGC, faserGC_rv, torpGC, torpGC_rv, explodeGC;
+ extern GC endeverGC, baseGC, jovianGC, starGC, blackholeGC;
++extern Atom wm_delete_window;
+
+ extern Sector universe[UROWS][UCOLS];
+ extern GameState gamestate;
+diff -Naur xspacewarp-1.2/xprep.cc xspacewarp-1.2.patched/xprep.cc
+--- xspacewarp-1.2/xprep.cc 2021-10-12 04:25:30.587232070 -0400
++++ xspacewarp-1.2.patched/xprep.cc 2021-10-12 05:23:53.950913600 -0400
+@@ -28,6 +28,7 @@
+ static int read_dashes(const char *, char *);
+ static void check_values(void);
+
++Atom wm_delete_window;
+
+ void xprep(int argc, char **argv)
+ {
+@@ -66,6 +67,10 @@
+
+ XtRealizeWidget(toplevel);
+
++ wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW", False);
++ XSetWMProtocols(XtDisplay(toplevel), XtWindow(toplevel), &wm_delete_window, 1);
++ XtOverrideTranslations(toplevel, XtParseTranslationTable("<Message>WM_PROTOCOLS: quit()"));
++
+ // if desired, install an invisible mouse cursor
+ // that does not block view of xspacewarp.
+
+diff -Naur xspacewarp-1.2/xprep.hh xspacewarp-1.2.patched/xprep.hh
+--- xspacewarp-1.2/xprep.hh 2021-10-12 04:25:30.588232069 -0400
++++ xspacewarp-1.2.patched/xprep.hh 2021-10-12 05:29:26.455883374 -0400
+@@ -39,6 +39,7 @@
+ extern void endinput(Widget, XEvent *, String *, Cardinal *);
+ extern void replay(Widget, XEvent *, String *, Cardinal *);
+ extern void pause(Widget, XEvent *, String *, Cardinal *);
++extern void quit(Widget, XEvent *, String *, Cardinal *);
+
+ static XtActionsRec actions[] =
+ {
+@@ -58,7 +59,8 @@
+ {(char*)"backspace", (XtActionProc)backspace},
+ {(char*)"endinput", (XtActionProc)endinput},
+ {(char*)"replay", (XtActionProc)replay},
+- {(char*)"pause", (XtActionProc)pause}
++ {(char*)"pause", (XtActionProc)pause},
++ {(char*)"quit", (XtActionProc)quit},
+ };
+
+
diff --git a/games/xspacewarp/xspacewarp.SlackBuild b/games/xspacewarp/xspacewarp.SlackBuild
index f620f0171bb6..27305a04a2b6 100644
--- a/games/xspacewarp/xspacewarp.SlackBuild
+++ b/games/xspacewarp/xspacewarp.SlackBuild
@@ -1,49 +1,35 @@
#!/bin/bash
# Slackware build script for xspacewarp
-# Time Trek - like game for X Window System
-# Written by Niels Horn <niels.horn@gmail.com>
+# Written by Niels Horn <email removed>.
+# man page by Luis Henrique <email removed>.
+# Formerly maintained by Ryan P.C. McQuen.
+# Now maintained by B. Watson <yalhcru@gmail.com>.
-# man-page and app-defaults files by Luis Henrique <lmello.009@gmail.com>
+# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
-# Formerly maintained by:
-# Ryan P.C. McQuen | Everett, WA | ryanpcmcquen@member.fsf.org
-
-# Now maintained by B. Watson <yalhcru@gmail.com>
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version, with the following exception:
-# the text of the GPL license may be omitted.
-
-# This program is distributed in the hope that it will be useful, but
-# without any warranty; without even the implied warranty of
-# merchantability or fitness for a particular purpose. Compiling,
-# interpreting, executing or merely reading the text of the program
-# may result in lapses of consciousness and/or very being, up to and
-# including the end of all existence and the Universe as we know it.
-# See the GNU General Public License for more details.
-
-# You may have received a copy of the GNU General Public License along
-# with this program (most likely, a file named COPYING). If not, see
-# <http://www.gnu.org/licenses/>.
+# 20211012 bkw: BUILD=3
+# - relicense as WTFPL with permissions from Ryan (who was the one
+# who originally added the license).
+# - new-style icon.
+# - use copy of app defaults file shipped with the source, instead
+# of including our own. they were identical except for one extra
+# blank line.
+# - fix man page typos.
+# - make the window close button work.
# 20170309 bkw:
# - take over maintenance
# - fix download & homepage URLs
# - i486 => i586
# - minor tweaks
-# - TODO: re-enable the close button on the window? I don't see a way
-# to quit the game (nothing mentioned in the 'Orientation', man page,
-# or README).
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=xspacewarp
VERSION=${VERSION:-1.2b}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-3}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@@ -57,9 +43,6 @@ if [ -z "$ARCH" ]; then
esac
fi
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
@@ -92,15 +75,17 @@ rm -rf $PRGNAM-$SRCVER
tar xvf $CWD/$PRGNAM-$SRCVER.tar.gz
cd $PRGNAM-$SRCVER
chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
+ \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
# Apply patch to version 1.2b (adapt for modern gcc compiler)
patch -p1 < $CWD/version12b.patch
+# Patch by B. Watson: make the window close button work. This took
+# more effort than I wanted it to... and I had to look at the source
+# to xbiff to see how this gibberish works.
+patch -p1 < $CWD/winclose.diff
+
xmkmf
make Makefile
make CDEBUGFLAGS="$SLKCFLAGS -fno-strength-reduce -fno-strict-aliasing" $PRGNAM
@@ -108,17 +93,18 @@ make CDEBUGFLAGS="$SLKCFLAGS -fno-strength-reduce -fno-strict-aliasing" $PRGNAM
strip $PRGNAM
make install BINDIR=/usr/games DESTDIR=$PKG
-mkdir -p $PKG/usr/share/applications $PKG/usr/share/pixmaps
+mkdir -p $PKG/usr/share/applications \
+ $PKG/usr/share/pixmaps \
+ $PKG/usr/share/icons/hicolor/32x32/apps
cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop
-cat $CWD/$PRGNAM.png > $PKG/usr/share/pixmaps/$PRGNAM.png
+cat $CWD/$PRGNAM.png > $PKG/usr/share/icons/hicolor/32x32/apps/$PRGNAM.png
+ln -s ../icons/hicolor/32x32/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png
-# Install X app-defaults
mkdir -p $PKG/etc/X11/app-defaults
-cat $CWD/XSpacewarp > $PKG/etc/X11/app-defaults/XSpacewarp.new
+cat XSpacewarp.app_def > $PKG/etc/X11/app-defaults/XSpacewarp.new
-# Put man-page in package
mkdir -p $PKG/usr/man/man6
-cat $CWD/xspacewarp.man | gzip -9 > $PKG/usr/man/man6/xspacewarp.6.gz
+gzip -9c <$CWD/xspacewarp.man > $PKG/usr/man/man6/xspacewarp.6.gz
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a CHANGES $PKG/usr/doc/$PRGNAM-$VERSION/
diff --git a/games/xspacewarp/xspacewarp.desktop b/games/xspacewarp/xspacewarp.desktop
index 0fa4793e0816..f431de2f7a36 100644
--- a/games/xspacewarp/xspacewarp.desktop
+++ b/games/xspacewarp/xspacewarp.desktop
@@ -4,7 +4,6 @@ Type=Application
Name=XSpaceWarp
Comment=Live long and prosper!
Categories=Game;
-Exec=xspacewarp
+Exec=/usr/games/xspacewarp
Icon=xspacewarp
StartupNotify=false
-
diff --git a/games/xspacewarp/xspacewarp.man b/games/xspacewarp/xspacewarp.man
index f2ed19075949..e4b462c68299 100644
--- a/games/xspacewarp/xspacewarp.man
+++ b/games/xspacewarp/xspacewarp.man
@@ -1,4 +1,4 @@
-.TH XSPACEWARP 6 "July 26, 2010"
+.TH XSPACEWARP 6 "October 2021" "1.2b" "SlackBuilds.org"
.SH NAME
xspacewarp -\ Time Trek like game for X Window System
.SH SYNOPSIS
@@ -10,7 +10,7 @@ xspacewarp -\ Time Trek like game for X Window System
In \fBxspacewarp\fP the player maneuvers a Federation spaceship,
called the Endever, through 81 sectors of space trying to
destroy an Armada of enemy Jovian ships before they destroy the
-all the Federation bases. To accompish this task, the Endever
+all the Federation bases. To accomplish this task, the Endever
has fasers, ion thrust engines, warpdrive for jumping between
sectors, a limited number of photon torpedoes, and a finite
store of energy which gets depleted during battles and must be
@@ -20,13 +20,13 @@ limit and has a choice of 10 skill levels.
Ported to X from a game originally written for the TRS-80 in 1977.
.SH OPTIONS
.B xspacewarp
-only takes default \fIX options\fR, see X(7) for more details.
+only takes default \fIX options\fR, see \fBX\fR(7) for more details.
.SH FILES
-You can modify pratically every single variable of the game by
-making a copy of \fI/etc/X11/app-defaults/XSpacewarp\fR into your
+You can modify practically every single variable of the game by
+making a copy of \fI/etc/X11/app-defaults/XSpacewarp\fR in your
home directory and tweaking it accordingly.
.SH SEE ALSO
-X(7)
+\fBX\fR(7)
.SH CREDITS
Joshua Lavinsky - original TRS-80 program (1977)
.br