games/tetrinet: Added (networked multiplayer deathmatch Tetris)

Signed-off-by: bedlam <dave@slackbuilds.org>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2023-02-14 01:29:06 +00:00 committed by Willy Sudiarto Raharjo
parent caa9e090b0
commit 8d7e9667f3
No known key found for this signature in database
GPG key ID: 3F617144D7238786
11 changed files with 711 additions and 0 deletions

21
games/tetrinet/README Normal file
View file

@ -0,0 +1,21 @@
tetrinet (networked multiplayer deathmatch Tetris)
Gee, Tetris? Whats that? Yeah, yeah, so it's been done 2 billion
times before (give or take a few bil), but this is different!
Yes, all you tetris addicts out there be prepared for even MORE
excitement.. internet tetris! Now you can play your five best buddies
in one of the most well known games in existence!
This contains the (n)curses client and the server. Note that you'll
have to run the client in a terminal window at least 50 lines high.
Resize or maximize your xterm/konsole/etc window. If you're at the
framebuffer console, try loading a smaller-sized font.
If your F1/F2/F3 keys don't work in this game, you can press Tab to
cycle between the three windows instead. Also, if your arrow keys
don't work (or if you just prefer vi bindings), you can use H J K
L instead.
The tetrinet-server included here is fairly bare-bones, compared to
tetrinetx. However, unlike tetrinetx, it does support the TetriFAST
game mode.

View file

@ -0,0 +1,135 @@
.TH "TETRINET-SERVER" "6" "2023-02-13"
.\" Please adjust this date whenever revising the manpage.
.SH "NAME"
tetrinet-server \- server program for tetrinet
.SH "SYNOPSIS"
.B tetrinet\-server
.SH "DESCRIPTION"
.B tetrinet\-server
is a server program for
.BR tetrinet (6),
a networked version of tetris. You can use it to serve both a TetriFast and an
original server for up to 6 people to connect and play. It doesn't support any
fancy features like different channels, but still includes support for
configurable cookie mode and a small winlist.
.PP
.SH "OPTIONS"
.B tetrinet-server
doesn't take any options at all. It reads all its settings from
.I ~/.tetrinet
on startup and creates a default file if there isn't one already there.
.SH "NOTE"
.B tetrinet\-server
does not fork into the background or run as a daemon. If you want to
run it this way, start it with a command like:
.BI\ nohup\ tetrinet\-server\ >tetsrv.log\ 2>&1\ </dev/null\ &
.SH "EXAMPLES"
This is a short explanation of the configuration file
.I ~/.tetrinet
together with its default entries. It is written after every game or when the
server quits. If it is not there, it will be created automatically.
.TP
.BI winlist\ "Alcan;0;3;1 AndrewK;0;2;1"
This is the winlist the server keeps. Each parameter consists of four
semicolon-seperated fields:
.IR Name ; Team ; Points ; Games .\ Team
is a flag which is either
.I 1
if the entry is for a team or
.I 0
if the entry is for a player.
.I Points
is just the number of points for the entry, and
.I Games
is the number of games the entry has participated.
.TP
.BI classic\ 1
Sets classic mode for the game - that means, no cookies.
.TP
.BI initiallevel\ 1
Sets the level in which the game will start.
.TP
.BI linesperlevel\ 2
Defines how many lines will issue a level increase.
.TP
.BI levelinc\ 1
How many levels are increased per
.B linesperlevel
removed lines.
.TP
.BI averagelevels\ 1
The levels of all player get averaged if this is set to
.IR 1 .
.TP
.BI speciallines\ 1
How many lines must be removed to get specials.
.TP
.BI specialcount\ 1
The number of specials that are added each time
.BR speciallines '
lines are removed.
.TP
.BI specialcapacity\ 18
This number tells you how many specials you can hold.
.TP
.BI pieces\ "14 14 15 14 14 14 15"
Sets the likeliness of the different pieces. Must sum up to 100. The order is:
bar (dark blue), square (yellow), reverse-L (green), L (purple), Z (red), S
(light blue), and T (yellow).
.TP
.BI specials\ "18 18 3 12 0 16 3 12 18"
Sets the likeliness of the different specials. Must sum up to 100. The order
is: A, C, N, R, S, B, G, Q, O.
.TP
.BI linuxmode\ 0
This setting selects whether the client should try to remain compatible with
Windows clients. This only affects the winlist display; if
.B linuxmode
is set to
.IR 1 ,
the server will send the number of games played by each player as well as
points won. This is set to zero by default.
.TP
.BI ipv6_only\ 0
Listen on ipv6 only.
.SH "FILES"
.TP
.I ~/.tetrinet
The configuration file for
.BR tetrinet-server .
.SH "AUTHOR"
This manual page was written by Gerfried Fuchs <alfie@ist.org>,
and modified by B. Watson <urchlay@slackware.uk>.
.SH "SEE ALSO"
.BR tetrinet (6),
.BR gtetrinet (6),
.BR tetrinetx (6).

View file

@ -0,0 +1,180 @@
.TH TETRINET 6 "2023-02-13"
.\" Please adjust this date whenever revising the manpage.
.SH NAME
tetrinet \- textmode client program for tetrinet
.SH SYNOPSIS
.B tetrinet
.RB [\| \-fancy \|]
.RB [\| \-fast \|]
.RB [\| \-log
.IR file \|]
.RB [\| \-noshadow \|]
.RB [\| \-noslide \|]
.RB [\| \-slide \|]
.RB [\| \-shadow \|]
.RB [\| \-windows \|]
.I nickname server
.SH DESCRIPTION
.B tetrinet
is a textmode client program for tetrinet, a networked version of tetris. You
can play both on TetriFast server and on the original servers with it. Please
notice that your terminal needs to be at least 50 lines high, to be able to play it.
.SH OPTIONS
A summary of options is included below.
.TP
.B \-fancy
Use "fancy" TTY graphics. (Note that this will slow down redraws somewhat.)
.TP
.B \-fast
Use the "tetrifast" mode to connect to the server. This mode eliminates the
delay before a new cube appears, thus speeding the game up noticeably. This
mode is incompatible with the classic mode and the server has to support it.
If in doubt, ask the other players.
.TP
.BI \-log\ file
Log network traffic to the given file. All lines start with an absolute time
(seconds) in brackets. Lines sent from the client to the server are prefixed
with ">>>", and lines from the server to the client are prefixed with "<<<".
This could be used with a utility program to replay a game later on (though
such a program is not currently included in the Tetrinet distribution.)
.TP
.B \-noshadow
Do not make pieces cast "shadows" when they are slowly falling. (Normally the
area under piece is filled by dim dots to help to determine where the piece
would hit the ground if one would press the spacebar.)
.TP
.B \-noslide
Do not allow pieces to "slide" after being dropped with the spacebar.
(Normally, there is a short time after pressing the spacebar during which a
piece can "slide" left or right before it solidifies.)
.TP
.B \-shadow
Opposite of
.BR \-noshadow ;
make the pieces cast "shadows". Can speed up gameplay considerably, but it can
be considered as cheating by some people since some other tetrinet clients lack
this.
.TP
.B \-slide
Opposite of
.BR \-noslide ;
allows pieces to "slide" after being dropped. If both
.BR \-slide\ and\ \-noslide
are given,
.B \-slide
takes precedence. If both
.BR \-windows\ and\ \-slide
are given, this overrides the "no sliding" part of
.B \-windows
without affecting the other changes in program behavior.
.TP
.B \-windows
Behave as much like the Windows version of Tetrinet as possible. Implies
.BR \-noslide\ and\ \-noshadow .
.SH USAGE
When you start
.B tetrinet
you will find yourself in the partyline. In here you can chat with the other
players. With
.I /help
you will get the list of the server supported commands. You can switch between
three screens with
.I F1
through
.IR F3 ,
or with the
.I Tab
key.
.P
With
.I /start
you can start a game (if you are in position one). You will have to switch over
to the Fields with the
.I F1
key (an automatic switch over on game start is planned). To pause a running game
you have to enter
.I /pause
in the partyline. To restart the game you enter
.IR /unpause .
.SH CONTROLS
You can use either the arrow keys or vi\-style movement keys.
.TP
.B Left, h
Move the piece left.
.TP
.B Right, l
Move the piece right.
.TP
.B Up, k, x
Rotate clockwise.
.TP
.B Down, j
Move the piece down.
.TP
.B z
Rotate counterclockwise.
.TP
.B Space
Drop (move piece down until it hits something).
.TP
.B 1 to 6
Use special block on player number 1 to 6.
.TP
.B d
Drop (get rid of) unwanted special block.
.TP
.B t
Talk (chat).
.SH GAMEPLAY
You have to fill the lines completely, because complete lines
will get removed from the display. The more lines you can eliminate with a
single stone the better. If the play room supports specials you will eventually
see a list of letters below your playfield that you can use with the number
keys from
.I 1
to
.IR 6
for the corresponding playfield.
If you want to get rid of a special, drop it with
.IR d .
You can also chat in the playfield, to open the chat box press
.I t
(for
.BR t alk.)
That's it, more or less.
.SH AUTHOR
This manual page was written by Gerfried Fuchs <alfie@ist.org>,
and modified by B. Watson <urchlay@slackware.uk>.
.SH "SEE ALSO"
.BR tetrinet-server (6),
.BR gtetrinet (6),
.BR tetrinetr (6).

View file

@ -0,0 +1,19 @@
diff -Naur tetrinet-0.11/tty.c tetrinet-0.11.patched/tty.c
--- tetrinet-0.11/tty.c 2003-09-11 16:26:53.000000000 -0400
+++ tetrinet-0.11.patched/tty.c 2020-11-21 00:53:04.798758121 -0500
@@ -237,6 +237,15 @@
if ((has_color = has_colors()))
start_color();
getmaxyx(stdscr, scrheight, scrwidth);
+
+ if(scrheight < 50 || scrwidth < 80) {
+ screen_cleanup();
+ fprintf(stderr,
+ "Terminal size %dx%d is too small. Minimum is 80x50.\n",
+ scrwidth, scrheight);
+ exit(-1);
+ }
+
scrwidth--; /* Don't draw in last column--this can cause scroll */
/* Cancel all this when we exit. */

View file

@ -0,0 +1,93 @@
diff -Naur tetrinet-0.11/server.c tetrinet-0.11.patched/server.c
--- tetrinet-0.11/server.c 2003-09-07 12:29:29.000000000 -0400
+++ tetrinet-0.11.patched/server.c 2020-11-20 22:06:44.851665337 -0500
@@ -839,7 +839,7 @@
if (listen_sock >= 0 && FD_ISSET(listen_sock, &fds)) {
struct sockaddr_in sin;
- int len = sizeof(sin);
+ socklen_t len = sizeof(sin);
fd = accept(listen_sock, (struct sockaddr *)&sin, &len);
if (fd >= 0) {
for (i = 0; i < 6 && player_socks[i] != -1; i++)
@@ -857,7 +857,7 @@
#ifdef HAVE_IPV6
if (listen_sock6 >= 0 && FD_ISSET(listen_sock6, &fds)) {
struct sockaddr_in6 sin6;
- int len = sizeof(sin6);
+ socklen_t len = sizeof(sin6);
fd = accept(listen_sock6, (struct sockaddr *)&sin6, &len);
if (fd >= 0) {
for (i = 0; i < 6 && player_socks[i] != -1; i++)
diff -Naur tetrinet-0.11/sockets.c tetrinet-0.11.patched/sockets.c
--- tetrinet-0.11/sockets.c 2003-09-09 15:15:04.000000000 -0400
+++ tetrinet-0.11.patched/sockets.c 2020-11-20 22:06:44.852665337 -0500
@@ -66,7 +66,7 @@
if (c == 0xFF)
ptr--;
*ptr = 0;
- if (log) {
+ if (logging) {
if (!logfile)
logfile = fopen(logname, "a");
if (logfile) {
@@ -89,7 +89,7 @@
unsigned char c = 0xFF;
int n = 0;
- if (log) {
+ if (logging) {
if (!logfile)
logfile = fopen(logname, "a");
if (logfile) {
diff -Naur tetrinet-0.11/tetrinet.c tetrinet-0.11.patched/tetrinet.c
--- tetrinet-0.11/tetrinet.c 2003-09-07 12:29:29.000000000 -0400
+++ tetrinet-0.11.patched/tetrinet.c 2020-11-20 22:09:01.677652899 -0500
@@ -21,7 +21,7 @@
/*************************************************************************/
int fancy = 0; /* Fancy TTY graphics? */
-int log = 0; /* Log network traffic to file? */
+int logging = 0; /* Log network traffic to file? */
char *logname; /* Log filename */
int windows_mode = 0; /* Try to be just like the Windows version? */
int noslide = 0; /* Disallow piece sliding? */
@@ -83,7 +83,7 @@
winlist[i].team = 0;
s++;
strncpy(winlist[i].name, s, sizeof(winlist[i].name)-1);
- winlist[i].name[sizeof(winlist[i].name)] = 0;
+ winlist[i].name[sizeof(winlist[i].name)-1] = 0;
winlist[i].points = atoi(t);
if ((t = strchr(t, ';')) != NULL)
winlist[i].games = atoi(t+1);
@@ -560,7 +560,7 @@
char *nick = NULL, *server = NULL;
char buf[1024];
char nickmsg[1024];
- unsigned char ip[4];
+ char ip[4];
char iphashbuf[32];
int len;
#ifdef BUILTIN_SERVER
@@ -590,7 +590,7 @@
if (strcmp(av[i], "-fancy") == 0) {
fancy = 1;
} else if (strcmp(av[i], "-log") == 0) {
- log = 1;
+ logging = 1;
i++;
if (i >= ac) {
fprintf(stderr, "Option -log requires an argument\n");
diff -Naur tetrinet-0.11/tetrinet.h tetrinet-0.11.patched/tetrinet.h
--- tetrinet-0.11/tetrinet.h 2003-09-07 12:12:51.000000000 -0400
+++ tetrinet-0.11.patched/tetrinet.h 2020-11-20 22:06:44.852665337 -0500
@@ -74,7 +74,7 @@
/* Externs */
extern int fancy;
-extern int log;
+extern int logging;
extern char *logname;
extern int windows_mode;
extern int noslide;

View file

@ -0,0 +1,25 @@
Author: Reiner Herrmann <reiner@reiner-h.de>
Description: Fix FTBFS with GCC 10
Bug-Debian: https://bugs.debian.org/957872
--- a/tetris.c
+++ b/tetris.c
@@ -32,6 +32,7 @@
signed char specials[MAX_SPECIALS] = {-1}; /* Special block inventory */
int next_piece; /* Next piece to fall */
+PieceData piecedata[7][4];
static struct timeval timeout; /* Time of next action */
int current_piece; /* Current piece number */
int current_rotation; /* Current rotation value */
--- a/tetris.h
+++ b/tetris.h
@@ -50,7 +50,7 @@
char shape[4][4]; /* Shape data for the piece */
} PieceData;
-PieceData piecedata[7][4];
+extern PieceData piecedata[7][4];
extern int current_piece, current_rotation;

View file

@ -0,0 +1,52 @@
diff -Naur tetrinet-0.11/tetrinet.c tetrinet-0.11.patched/tetrinet.c
--- tetrinet-0.11/tetrinet.c 2003-09-07 12:29:29.000000000 -0400
+++ tetrinet-0.11.patched/tetrinet.c 2020-11-21 00:43:40.956809377 -0500
@@ -688,6 +688,18 @@
else
timeout = -1;
i = io->wait_for_input(timeout);
+
+/* 20201121 bkw: make the Tab key cycle between windows. It's 2020
+ and we *still* can't get F-keys working in all terminals. */
+ if(i == 9) {
+ if(dispmode == MODE_FIELDS)
+ i = K_F2;
+ else if(dispmode == MODE_PARTYLINE)
+ i = K_F3;
+ else
+ i = K_F1;
+ }
+
if (i == -1) {
char buf[1024];
if (sgets(buf, sizeof(buf), server_sock))
diff -Naur tetrinet-0.11/tty.c tetrinet-0.11.patched/tty.c
--- tetrinet-0.11/tty.c 2003-09-11 16:26:53.000000000 -0400
+++ tetrinet-0.11.patched/tty.c 2020-11-21 00:46:25.038794461 -0500
@@ -534,7 +534,7 @@
hline(MY_HLINE2, scrwidth);
attrset(MY_BOLD);
move(scrheight-1, 0);
- addstr("F1=Show Fields F2=Partyline F3=Winlist");
+ addstr("F1=Show Fields F2=Partyline F3=Winlist Tab=Next Window");
move(scrheight-1, scrwidth-8);
addstr("F10=Quit");
attrset(A_NORMAL);
@@ -978,7 +978,7 @@
hline(MY_HLINE2, scrwidth);
attrset(MY_BOLD);
move(scrheight-1, 0);
- addstr("F1=Show Fields F2=Partyline F3=Winlist");
+ addstr("F1=Show Fields F2=Partyline F3=Winlist Tab=Next Window");
move(scrheight-1, scrwidth-8);
addstr("F10=Quit");
attrset(A_NORMAL);
@@ -1057,7 +1057,7 @@
hline(MY_HLINE2, scrwidth);
attrset(MY_BOLD);
move(scrheight-1, 0);
- addstr("F1=Show Fields F2=Partyline F3=Winlist");
+ addstr("F1=Show Fields F2=Partyline F3=Winlist Tab=Next Window");
move(scrheight-1, scrwidth-8);
addstr("F10=Quit");
attrset(A_NORMAL);

View file

@ -0,0 +1,35 @@
diff -Naur tetrinet-0.11/tetris.c tetrinet-0.11.patched/tetris.c
--- tetrinet-0.11/tetris.c 2003-09-07 12:29:29.000000000 -0400
+++ tetrinet-0.11.patched/tetris.c 2020-11-21 00:32:56.473867963 -0500
@@ -902,6 +902,7 @@
switch (c) {
case K_UP: /* Rotate clockwise */
case 'x':
+ case 'k':
if (piece_waiting)
break;
rnew = (current_rotation+1) % 4;
@@ -942,6 +943,7 @@
break;
case K_LEFT: /* Move left */
+ case 'h':
if (piece_waiting)
break;
if (x + pd->left > 0) {
@@ -957,6 +959,7 @@
break;
case K_RIGHT: /* Move right */
+ case 'l':
if (piece_waiting)
break;
if (x + pd->right < FIELD_WIDTH-1) {
@@ -972,6 +975,7 @@
break;
case K_DOWN: /* Down one space */
+ case 'j':
if (piece_waiting)
break;
step_down();

19
games/tetrinet/slack-desc Normal file
View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
tetrinet: tetrinet (networked multiplayer deathmatch Tetris)
tetrinet:
tetrinet: Gee, Tetris? Whats that? Yeah, yeah, so it's been done 2 billion
tetrinet: times before (give or take a few bil), but this is different!
tetrinet: Yes, all you tetris addicts out there be prepared for even MORE
tetrinet: excitement.. internet tetris! Now you can play your five best buddies
tetrinet: in one of the most well known games in existence!
tetrinet:
tetrinet:
tetrinet:
tetrinet:

View file

@ -0,0 +1,122 @@
#!/bin/bash
# Slackware build script for tetrinet
# Written by B. Watson (yalhcru@gmail.com)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
# I started writing this SlackBuid in 2020 and just now remembered to
# finish it. It's the same version packaged by Debian, so it should
# interoperate with servers running Debian.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=tetrinet
VERSION=${VERSION:-0.11+cvs20070911}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM
tar xvf $CWD/${PRGNAM}_${VERSION^^}.orig.tar.gz
cd $PRGNAM
chown -R root:root .
find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
\! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
# 20230213 bkw: patch came from Debian:
# http://deb.debian.org/debian/pool/main/t/tetrinet/tetrinet_0.11+CVS20070911-2.1.debian.tar.xz
patch -p1 < $CWD/patches/gcc10.diff
# 20201120 bkw: fix compiler warnings, at least the ones that look like
# they might cause real problems.
patch -p1 < $CWD/patches/compilefix.diff
# 20201120 bkw: we're not building the server into the client, so don't
# offer it as an option in the help message.
sed -i '/^" *-server/d' $PRGNAM.c
# 20201121 bkw: since we can't seem to get all the various terminals
# and ncurses to agree on the escape sequences for F1/F2/F3, allow
# switching windows with the Tab key. Grr.
patch -p1 < $CWD/patches/tab_key.diff
# 20201121 bkw: allow vi HJKL movement along with arrow keys. Also
# make the existing letter keystrokes case-insensitive.
patch -p1 < $CWD/patches/vikeys.diff
# 20201121 bkw: actually check the terminal size and abort if too
# small. This won't help if the user resizes the terminal while the
# game is running, but it's better than starting up an unplayable
# game.
patch -p1 < $CWD/patches/check_term_size.diff
# No other way to apply our flags...
sed -i "/CFLAGS/s|-g|$SLKCFLAGS|" Makefile
# *Finally*:
make
# Do not use 'make install', no DESTDIR or PREFIX/etc support.
PKGMAN6=$PKG/usr/man/man6
PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKG/usr/games $PKGMAN6 $PKGDOC
# Man pages come from upstream post-release CVS. I've fixed some
# typos, cleaned up the formatting, and documented all the stuff the
# patches do.
for i in $PRGNAM $PRGNAM-server; do
install -s -m0755 $i $PKG/usr/games
gzip -9c < $CWD/man/$i.6 > $PKGMAN6/$i.6.gz
done
# Original upstream calls the client "tetrinet", Debian calls it
# "tetrinet-client". Use symlinks to support both names.
ln -s $PRGNAM $PKG/usr/games/$PRGNAM-client
ln -s $PRGNAM.6.gz $PKG/usr/man/man6/$PRGNAM-client.6.gz
cp -a AUTHORS Change* README TODO $PRGNAM.txt $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

View file

@ -0,0 +1,10 @@
PRGNAM="tetrinet"
VERSION="0.11+cvs20070911"
HOMEPAGE="http://tetrinet.or.cz/"
DOWNLOAD="http://deb.debian.org/debian/pool/main/t/tetrinet/tetrinet_0.11+CVS20070911.orig.tar.gz"
MD5SUM="fc42d250e99b65105e61ef34543d598b"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="B. Watson"
EMAIL="urchlay@slackware.uk"