summaryrefslogtreecommitdiff
path: root/source/y
diff options
context:
space:
mode:
Diffstat (limited to 'source/y')
-rw-r--r--source/y/bsd-games/bsd-games-2.13.lsm21
-rwxr-xr-xsource/y/bsd-games/bsd-games.SlackBuild94
-rw-r--r--source/y/bsd-games/bsd-games.fortlen.diff11
-rw-r--r--source/y/bsd-games/bsd-games.fortunepath.diff8
-rw-r--r--source/y/bsd-games/bsd-games.getline.diff251
-rw-r--r--source/y/bsd-games/bsd-games.ospeed.diff11
-rw-r--r--source/y/bsd-games/bsd-games.phantasia_install_fix.diff17
-rw-r--r--source/y/bsd-games/bsd-games.sail.no.union_wait.diff11
-rw-r--r--source/y/bsd-games/bsd-games.strfile.8.diff22
-rw-r--r--source/y/bsd-games/bsd-games.trek-gcc4.diff27
-rw-r--r--source/y/bsd-games/fortune-fixes-sorry-no-additions-accepted-here/20120302.diff11
-rw-r--r--source/y/bsd-games/patches/0001-Replace-getline-with-get_line.patch219
-rw-r--r--source/y/bsd-games/patches/0002-robots-Refresh-screen.patch20
-rw-r--r--source/y/bsd-games/patches/0003-quiz-Update-presidents-capitals-fix-typos-in-murders.patch352
-rw-r--r--source/y/bsd-games/patches/0004-Define-__dead-for-GNU-GCC.patch20
-rw-r--r--source/y/bsd-games/patches/0005-rain-Update-default-delay.-Closes-579062.patch34
-rw-r--r--source/y/bsd-games/patches/0007-Unsorted-Debian-patches.patch552
-rw-r--r--source/y/bsd-games/patches/0008-quiz-Add-answers-to-adults-babies.-Closes-659528.patch21
-rw-r--r--source/y/bsd-games/patches/0009-hangman-Error-out-on-1000-unsuitable-words.-Closes-6.patch46
-rw-r--r--source/y/bsd-games/patches/0010-Fix-typos-spotted-by-Lintian.patch35
-rw-r--r--source/y/bsd-games/patches/0011-Fix-format-security-compiling-errors.patch297
-rw-r--r--source/y/bsd-games/patches/0012-Fix-include-stdio.h-C-incompatibility.patch43
-rw-r--r--source/y/bsd-games/patches/0013-Update-acronyms.patch2234
-rw-r--r--source/y/bsd-games/patches/0015-primes-Update-to-NetBSD-CVS-2018-02-03.patch813
-rw-r--r--source/y/bsd-games/patches/0016-Better-explanation-how-to-read-the-documentation.patch46
-rw-r--r--source/y/bsd-games/patches/0017-hack-Fix-segv-when-i-inventory-done-after-load-from-.patch67
-rw-r--r--source/y/bsd-games/patches/bsd-games.config.params.diff (renamed from source/y/bsd-games/bsd-games.config.params.diff)0
-rw-r--r--source/y/bsd-games/patches/bsd-games.factor.no.ubig.diff22
-rw-r--r--source/y/bsd-games/patches/bsd-games.fortunepath.diff11
-rw-r--r--source/y/bsd-games/patches/bsd-games.pom.diff (renamed from source/y/bsd-games/bsd-games.pom.diff)0
-rw-r--r--source/y/bsd-games/slack-desc8
31 files changed, 4889 insertions, 435 deletions
diff --git a/source/y/bsd-games/bsd-games-2.13.lsm b/source/y/bsd-games/bsd-games-2.13.lsm
deleted file mode 100644
index e7ba527f..00000000
--- a/source/y/bsd-games/bsd-games-2.13.lsm
+++ /dev/null
@@ -1,21 +0,0 @@
-Begin4
-Title: bsd-games
-Version: 2.13
-Entered-date: 2001-08-30
-Description: Port of most of the games from NetBSD-current. Games
- included: adventure arithmetic atc backgammon banner battlestar
- bcd boggle caesar canfield countmail cribbage dm factor fish fortune
- gomoku hangman hunt mille monop morse number phantasia pig pom ppt
- primes quiz rain random robots sail snake tetris trek wargames worm
- worms wtf wump.
-Keywords: games, NetBSD
-Maintained-by: jsm28@cam.ac.uk (Joseph S. Myers)
-Primary-site: ibiblio.org /pub/Linux/games
- bsd-games-2.13.tar.gz
-Alternate-site: tsx-11.mit.edu /pub/linux/sources/usr.games
-Original-site: ftp.netbsd.org /pub/NetBSD/NetBSD-current/tar_files/src
- games.tar.gz
-Platforms: Requires ncurses (curses/termcap may also work but are no
- longer tested/supported)
-Copying-policy: BSD
-End
diff --git a/source/y/bsd-games/bsd-games.SlackBuild b/source/y/bsd-games/bsd-games.SlackBuild
index 803b43f2..5a8eeed9 100755
--- a/source/y/bsd-games/bsd-games.SlackBuild
+++ b/source/y/bsd-games/bsd-games.SlackBuild
@@ -23,8 +23,8 @@
cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=bsd-games
-VERSION=${VERSION:-2.13}
-BUILD=${BUILD:-13}
+VERSION=${VERSION:-2.17}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -53,37 +53,49 @@ mkdir -p $TMP $PKG
cd $TMP
rm -rf bsd-games-$VERSION
-tar xvf $CWD/bsd-games-$VERSION.tar.bz2 || exit 1
+tar xvf $CWD/bsd-games-$VERSION.tar.?z || exit 1
cd bsd-games-$VERSION || exit 1
-zcat $CWD/bsd-games.config.params.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-./configure
-zcat $CWD/bsd-games.ospeed.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.fortunepath.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.fortlen.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.strfile.8.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.trek-gcc4.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.phantasia_install_fix.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.getline.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-zcat $CWD/bsd-games.sail.no.union_wait.diff.gz | patch -p1 --backup --suffix=.orig || exit 1
-
-# Fix typos in the quote database:
-for typofix in $CWD/fortune-fixes-sorry-no-additions-accepted-here/* ; do
- zcat $typofix | patch -p1 --verbose || exit 1
-done
+
+zcat $CWD/patches/bsd-games.config.params.diff.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0001-Replace-getline-with-get_line.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0002-robots-Refresh-screen.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0003-quiz-Update-presidents-capitals-fix-typos-in-murders.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0004-Define-__dead-for-GNU-GCC.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0005-rain-Update-default-delay.-Closes-579062.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0007-Unsorted-Debian-patches.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0008-quiz-Add-answers-to-adults-babies.-Closes-659528.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0009-hangman-Error-out-on-1000-unsuitable-words.-Closes-6.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0010-Fix-typos-spotted-by-Lintian.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0011-Fix-format-security-compiling-errors.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0012-Fix-include-stdio.h-C-incompatibility.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0013-Update-acronyms.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0015-primes-Update-to-NetBSD-CVS-2018-02-03.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0016-Better-explanation-how-to-read-the-documentation.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/0017-hack-Fix-segv-when-i-inventory-done-after-load-from-.patch.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/bsd-games.factor.no.ubig.diff.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+zcat $CWD/patches/bsd-games.fortunepath.diff.gz | patch -p1 --backup --suffix=.orig --verbose || exit 1
+
+./configure || exit 1
## Without the old default (with, of course, a command line switch), and an updated
## man page, even though PJV wrote this, it just doesn't make the cut. I hope it's
## still of use to somebody though. It increases the accuracy of pom by two orders
## of magnitude. Enjoy!
-##zcat $CWD/bsd-games.pom.diff.gz | patch -p1 --verbose || exit 1
+##zcat $CWD/patches/bsd-games.pom.diff.gz | patch -p1 --verbose || exit 1
# Now that Eric took my joke seriously... heh. It's a wonder any Work gets done here.
-zcat $CWD/bsd-games.pom.diff.gz | patch -p1 --verbose || exit 1
+zcat $CWD/patches/bsd-games.pom.diff.gz | patch -p1 --verbose || exit 1
+
+# I'm not in favor of censorship of any kind. If you are, you'll
+# have to be the one to delete these:
+for bad in fortunes-o fortunes2-o limerick-o unamerican-o ; do
+ cp fortune/datfiles/${bad}.real fortune/datfiles/${bad}.fake
+ cp fortune/datfiles/${bad}.real ${bad}
+ ( cd fortune/datfiles ; strfile ${bad} ${bad}.dat )
+done
-cp fortune/datfiles/unamerican-o.real fortune/datfiles/unamerican-o.fake
-cp fortune/datfiles/unamerican-o.real unamerican-o
-( cd fortune/datfiles ; strfile unamerican-o unamerican-o.dat )
make || exit 1
+
# Does this go to $PKG? I am perplexed.
make install || exit 1
@@ -93,10 +105,10 @@ cp -a \
TODO YEAR2000 $PKG/usr/doc/bsd-games-$VERSION
cp -a fortune/README $PKG/usr/doc/bsd-games-$VERSION/README.fortune
cp -a hunt/README $PKG/usr/doc/bsd-games-$VERSION/README.hunt
-cp -a hunt/README.linux $PKG/usr/doc/bsd-games-$VERSION/README.linux.hunt
cp -a phantasia/README $PKG/usr/doc/bsd-games-$VERSION/README.phantasia
-cp -a trek/README.linux $PKG/usr/doc/bsd-games-$VERSION/README.linux.trek
chown root.root $PKG/usr/doc/bsd-games-$VERSION/*
+mv $PKG/usr/share/doc/bsd-games/* $PKG/usr/doc/bsd-games-$VERSION
+rm -rf $PKG/usr/share/doc
chmod 644 $PKG/usr/doc/bsd-games-$VERSION/*
cd $PKG
@@ -108,11 +120,7 @@ chmod 755 etc/profile.d/bsd-games-login-fortune.*
# Add some cool Linux related quotes:
tar xvf $CWD/fortunes-linuxcookie.tar.gz || exit 1
-# I'm not in favor of censorship of any kind. If you are, you'll
-# have to be the one to delete these:
-rm -f $PKG/usr/share/games/fortunes/limerick
-rm -f $PKG/usr/share/games/fortunes/limerick.dat
-tar xvf $CWD/fortunes-o.tar.gz || exit 1
+
# Run strfile on all fortune files:
( cd $PKG/usr/share/games/fortunes
for file in *.dat ; do
@@ -123,8 +131,10 @@ tar xvf $CWD/fortunes-o.tar.gz || exit 1
$PKG/usr/bin/strfile -r -x $(basename $file .dat)
done
)
+
# Strip binaries:
strip $PKG/usr/games/* $PKG/usr/bin/* $PKG/usr/sbin/*
+
# Fix perms:
mkdir -p $PKG/usr/share/dict
zcat $CWD/hangman-words.gz > $PKG/usr/share/dict/words
@@ -150,23 +160,25 @@ config() {
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
-config var/lib/bsdgames/criblog.new
-config var/lib/bsdgames/saillog.new
-config var/lib/bsdgames/cfscores.new
config var/lib/bsdgames/atc_score.new
-config var/lib/bsdgames/phantasia/gold.new
+config var/lib/bsdgames/robots_roll.new
+config var/lib/bsdgames/hack/perm.new
+config var/lib/bsdgames/hack/record.new
+config var/lib/bsdgames/phantasia/lastdead.new
+config var/lib/bsdgames/phantasia/scoreboard.new
+config var/lib/bsdgames/phantasia/monsters.new
config var/lib/bsdgames/phantasia/mess.new
+config var/lib/bsdgames/phantasia/characs.new
config var/lib/bsdgames/phantasia/motd.new
+config var/lib/bsdgames/phantasia/gold.new
config var/lib/bsdgames/phantasia/void.new
-config var/lib/bsdgames/phantasia/monsters.new
-config var/lib/bsdgames/phantasia/lastdead.new
-config var/lib/bsdgames/phantasia/characs.new
-config var/lib/bsdgames/phantasia/scoreboard.new
-config var/lib/bsdgames/battlestar.log.new
-config var/lib/bsdgames/robots_roll.new
config var/lib/bsdgames/snakerawscores.new
+config var/lib/bsdgames/saillog.new
+config var/lib/bsdgames/battlestar.log.new
config var/lib/bsdgames/snake.log.new
-rm -f var/lib/bsdgames/criblog.new var/lib/bsdgames/saillog.new var/lib/bsdgames/cfscores.new var/lib/bsdgames/atc_score.new var/lib/bsdgames/phantasia/gold.new var/lib/bsdgames/phantasia/mess.new var/lib/bsdgames/phantasia/motd.new var/lib/bsdgames/phantasia/void.new var/lib/bsdgames/phantasia/monsters.new var/lib/bsdgames/phantasia/lastdead.new var/lib/bsdgames/phantasia/characs.new var/lib/bsdgames/phantasia/scoreboard.new var/lib/bsdgames/battlestar.log.new var/lib/bsdgames/robots_roll.new var/lib/bsdgames/snakerawscores.new var/lib/bsdgames/snake.log.new
+config var/lib/bsdgames/criblog.new
+config var/lib/bsdgames/cfscores.new
+( cd var/lib/bsdgames ; find . -name "*.new" -exec rm -f "{}" \; )
EOF
cat $CWD/slack-desc > $PKG/install/slack-desc
diff --git a/source/y/bsd-games/bsd-games.fortlen.diff b/source/y/bsd-games/bsd-games.fortlen.diff
deleted file mode 100644
index 52b40651..00000000
--- a/source/y/bsd-games/bsd-games.fortlen.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./fortune/fortune/fortune.c.orig 2001-08-29 08:11:31.000000000 -0700
-+++ ./fortune/fortune/fortune.c 2003-02-03 14:27:45.000000000 -0800
-@@ -318,7 +318,7 @@
- char line[BUFSIZ];
-
- if (!(Fortfile->tbl.str_flags & (STR_RANDOM | STR_ORDERED)))
-- nchar = (Seekpts[1] - Seekpts[0] <= SLEN);
-+ nchar = Seekpts[1] - Seekpts[0];
- else {
- open_fp(Fortfile);
- (void) fseek(Fortfile->inf, (long)Seekpts[0], SEEK_SET);
diff --git a/source/y/bsd-games/bsd-games.fortunepath.diff b/source/y/bsd-games/bsd-games.fortunepath.diff
deleted file mode 100644
index 31b96f7d..00000000
--- a/source/y/bsd-games/bsd-games.fortunepath.diff
+++ /dev/null
@@ -1,8 +0,0 @@
---- ./fortune/fortune/pathnames.h.in.orig Sat Mar 9 21:26:23 2002
-+++ ./fortune/fortune/pathnames.h.in Sat Mar 9 21:26:34 2002
-@@ -35,4 +35,4 @@
- * @(#)pathnames.h 8.1 (Berkeley) 5/31/93
- */
-
--#define FORTDIR "@sharedir@"
-+#define FORTDIR "@sharedir@/fortunes"
diff --git a/source/y/bsd-games/bsd-games.getline.diff b/source/y/bsd-games/bsd-games.getline.diff
deleted file mode 100644
index ed0cd9ca..00000000
--- a/source/y/bsd-games/bsd-games.getline.diff
+++ /dev/null
@@ -1,251 +0,0 @@
---- ./gomoku/main.c.orig 2000-05-28 09:51:46.000000000 -0500
-+++ ./gomoku/main.c 2010-05-11 16:10:10.000000000 -0500
-@@ -159,7 +159,7 @@
- if (inputfp == NULL && test == 0) {
- for (;;) {
- ask("black or white? ");
-- getline(buf, sizeof(buf));
-+ g_getline(buf, sizeof(buf));
- if (buf[0] == 'b' || buf[0] == 'B') {
- color = BLACK;
- break;
-@@ -176,7 +176,7 @@
- }
- } else {
- setbuf(stdout, 0);
-- getline(buf, sizeof(buf));
-+ g_getline(buf, sizeof(buf));
- if (strcmp(buf, "black") == 0)
- color = BLACK;
- else if (strcmp(buf, "white") == 0)
-@@ -248,7 +248,7 @@
- getinput:
- if (interactive)
- ask("move? ");
-- if (!getline(buf, sizeof(buf))) {
-+ if (!g_getline(buf, sizeof(buf))) {
- curmove = RESIGN;
- break;
- }
-@@ -260,7 +260,7 @@
- FILE *fp;
-
- ask("save file name? ");
-- (void)getline(buf, sizeof(buf));
-+ (void)g_getline(buf, sizeof(buf));
- if ((fp = fopen(buf, "w")) == NULL) {
- glog("cannot create save file");
- goto getinput;
-@@ -313,14 +313,14 @@
- if (i != RESIGN) {
- replay:
- ask("replay? ");
-- if (getline(buf, sizeof(buf)) &&
-+ if (g_getline(buf, sizeof(buf)) &&
- (buf[0] == 'y' || buf[0] == 'Y'))
- goto again;
- if (strcmp(buf, "save") == 0) {
- FILE *fp;
-
- ask("save file name? ");
-- (void)getline(buf, sizeof(buf));
-+ (void)g_getline(buf, sizeof(buf));
- if ((fp = fopen(buf, "w")) == NULL) {
- glog("cannot create save file");
- goto replay;
-@@ -371,7 +371,7 @@
- quit();
- top:
- ask("cmd? ");
-- if (!getline(fmtbuf, sizeof(fmtbuf)))
-+ if (!g_getline(fmtbuf, sizeof(fmtbuf)))
- quit();
- switch (*fmtbuf) {
- case '\0':
---- ./gomoku/gomoku.h.orig 1999-09-15 05:34:31.000000000 -0500
-+++ ./gomoku/gomoku.h 2010-05-11 16:10:10.000000000 -0500
-@@ -269,7 +269,7 @@
-
- void bdinit __P((struct spotstr *));
- void init_overlap __P((void));
--int getline __P((char *, int));
-+int g_getline __P((char *, int));
- void ask __P((const char *));
- void dislog __P((const char *));
- void bdump __P((FILE *));
---- ./gomoku/bdisp.c.orig 2001-02-07 18:18:22.000000000 -0600
-+++ ./gomoku/bdisp.c 2010-05-11 16:10:10.000000000 -0500
-@@ -245,7 +245,7 @@
- }
-
- int
--getline(buf, size)
-+g_getline(buf, size)
- char *buf;
- int size;
- {
---- ./cribbage/score.c.orig 1999-09-15 05:34:31.000000000 -0500
-+++ ./cribbage/score.c 2010-05-11 16:10:10.000000000 -0500
-@@ -122,7 +122,7 @@
- CARD h[(CINHAND + 1)];
- char buf[32];
-
-- expl[0] = '\0'; /* initialize explanation */
-+ cr_expl[0] = '\0'; /* initialize explanation */
- score = 0;
- flag = TRUE;
- k = hand[0].suit;
-@@ -132,29 +132,29 @@
- if (hand[i].suit == starter.suit) {
- score++;
- if (do_explain)
-- strcat(expl, "His Nobs");
-+ strcat(cr_expl, "His Nobs");
- }
- h[i] = hand[i];
- }
-
- if (flag && n >= CINHAND) {
-- if (do_explain && expl[0] != '\0')
-- strcat(expl, ", ");
-+ if (do_explain && cr_expl[0] != '\0')
-+ strcat(cr_expl, ", ");
- if (starter.suit == k) {
- score += 5;
- if (do_explain)
-- strcat(expl, "Five-flush");
-+ strcat(cr_expl, "Five-flush");
- } else
- if (!crb) {
- score += 4;
-- if (do_explain && expl[0] != '\0')
-- strcat(expl, ", Four-flush");
-+ if (do_explain && cr_expl[0] != '\0')
-+ strcat(cr_expl, ", Four-flush");
- else
-- strcpy(expl, "Four-flush");
-+ strcpy(cr_expl, "Four-flush");
- }
- }
-- if (do_explain && expl[0] != '\0')
-- strcat(expl, ", ");
-+ if (do_explain && cr_expl[0] != '\0')
-+ strcat(cr_expl, ", ");
- h[n] = starter;
- sorthand(h, n + 1); /* sort by rank */
- i = 2 * fifteens(h, n + 1);
-@@ -162,9 +162,9 @@
- if (do_explain) {
- if (i > 0) {
- (void) sprintf(buf, "%d points in fifteens", i);
-- strcat(expl, buf);
-+ strcat(cr_expl, buf);
- } else
-- strcat(expl, "No fifteens");
-+ strcat(cr_expl, "No fifteens");
- }
- i = pairuns(h, n + 1);
- score += i;
-@@ -172,9 +172,9 @@
- if (i > 0) {
- (void) sprintf(buf, ", %d points in pairs, %d in runs",
- pairpoints, runpoints);
-- strcat(expl, buf);
-+ strcat(cr_expl, buf);
- } else
-- strcat(expl, ", No pairs/runs");
-+ strcat(cr_expl, ", No pairs/runs");
- }
- return (score);
- }
---- ./cribbage/support.c.orig 1999-09-15 05:34:31.000000000 -0500
-+++ ./cribbage/support.c 2010-05-11 16:10:10.000000000 -0500
-@@ -152,7 +152,7 @@
- msg("You should have taken %d, not %d!", i, j);
- }
- if (explain)
-- msg("Explanation: %s", expl);
-+ msg("Explanation: %s", cr_expl);
- do_wait();
- } else
- win = chkscr(&pscore, i);
---- ./cribbage/cribbage.h.orig 2000-10-17 14:58:05.000000000 -0500
-+++ ./cribbage/cribbage.h 2010-05-11 16:10:10.000000000 -0500
-@@ -59,7 +59,7 @@
- extern BOOLEAN quiet; /* if suppress random mess */
- extern BOOLEAN playing; /* currently playing game */
-
--extern char expl[]; /* string for explanation */
-+extern char cr_expl[]; /* string for explanation */
-
- void addmsg __P((const char *, ...))
- __attribute__((__format__(__printf__, 1, 2)));
-@@ -81,7 +81,7 @@
- int fifteens __P((const CARD [], int));
- void game __P((void));
- void gamescore __P((void));
--char *getline __P((void));
-+char *cr_getline __P((void));
- int getuchar __P((void));
- int incard __P((CARD *));
- int infrom __P((const CARD [], int, const char *));
---- ./cribbage/io.c.orig 1999-10-01 15:45:34.000000000 -0500
-+++ ./cribbage/io.c 2010-05-11 16:10:10.000000000 -0500
-@@ -254,7 +254,7 @@
-
- retval = FALSE;
- rnk = sut = EMPTY;
-- if (!(line = getline()))
-+ if (!(line = cr_getline()))
- goto gotit;
- p = p1 = line;
- while (*p1 != ' ' && *p1 != '\0')
-@@ -355,7 +355,7 @@
-
- for (sum = 0;;) {
- msg(prompt);
-- if (!(p = getline()) || *p == '\0') {
-+ if (!(p = cr_getline()) || *p == '\0') {
- msg(quiet ? "Not a number" :
- "That doesn't look like a number");
- continue;
-@@ -562,7 +562,7 @@
- * compressed to one space; a space is inserted before a ','
- */
- char *
--getline()
-+cr_getline()
- {
- char *sp;
- int c, oy, ox;
---- ./cribbage/crib.c.orig 2001-02-07 18:18:22.000000000 -0600
-+++ ./cribbage/crib.c 2010-05-11 16:10:10.000000000 -0500
-@@ -225,7 +225,7 @@
- if (!rflag) { /* player cuts deck */
- msg(quiet ? "Cut for crib? " :
- "Cut to see whose crib it is -- low card wins? ");
-- getline();
-+ cr_getline();
- }
- i = (rand() >> 4) % CARDS; /* random cut */
- do { /* comp cuts deck */
-@@ -401,7 +401,7 @@
- if (!rflag) { /* random cut */
- msg(quiet ? "Cut the deck? " :
- "How many cards down do you wish to cut the deck? ");
-- getline();
-+ cr_getline();
- }
- i = (rand() >> 4) % (CARDS - pos);
- turnover = deck[i + pos];
---- ./cribbage/extern.c.orig 1999-09-26 06:37:19.000000000 -0500
-+++ ./cribbage/extern.c 2010-05-11 16:10:10.000000000 -0500
-@@ -52,7 +52,7 @@
- BOOLEAN quiet = FALSE; /* if suppress random mess */
- BOOLEAN rflag = FALSE; /* if all cuts random */
-
--char expl[128]; /* explanation */
-+char cr_expl[128]; /* explanation */
-
- int cgames = 0; /* number games comp won */
- int cscore = 0; /* comp score in this game */
diff --git a/source/y/bsd-games/bsd-games.ospeed.diff b/source/y/bsd-games/bsd-games.ospeed.diff
deleted file mode 100644
index d98c7966..00000000
--- a/source/y/bsd-games/bsd-games.ospeed.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./backgammon/backgammon/main.c.orig 2000-05-28 09:51:46.000000000 -0500
-+++ ./backgammon/backgammon/main.c 2006-09-06 21:16:55.000000000 -0500
-@@ -57,7 +57,7 @@
- extern const char *const instr[]; /* text of instructions */
- extern const char *const message[]; /* update message */
- #ifndef NCURSES_VERSION
--short ospeed; /* tty output speed */
-+speed_t ospeed; /* tty output speed */
- #endif
-
- const char *const helpm[] = { /* help message */
diff --git a/source/y/bsd-games/bsd-games.phantasia_install_fix.diff b/source/y/bsd-games/bsd-games.phantasia_install_fix.diff
deleted file mode 100644
index 098e604f..00000000
--- a/source/y/bsd-games/bsd-games.phantasia_install_fix.diff
+++ /dev/null
@@ -1,17 +0,0 @@
---- bsd-games-2.13/phantasia/Makefrag 2001-08-31 00:55:25.000000000 +0300
-+++ bsd-games-2.13/phantasia/Makefrag 2006-08-14 03:19:03.771302000 +0300
-@@ -41,11 +41,11 @@
- $(INSTALL_SCORE_GAME) phantasia/phantasia $(INSTALL_PREFIX)$(GAMESDIR)/phantasia
- $(HIDE_GAME) phantasia
- (set -e; for f in $(phantasia_VFILES1); do \
-- cp phantasia/$$f $(PHANTASIA_DIR)/$$f; \
-+ cp phantasia/$$f $(INSTALL_PREFIX)$(PHANTASIA_DIR)/$$f; \
- $(INSTALL_SCORE_FILE) $(PHANTASIA_DIR)/$$f; done)
- (set -e; for f in $(phantasia_VFILES2); do \
-- if [ ! -e $(PHANTASIA_DIR)/$$f ]; then \
-- cp phantasia/$$f $(PHANTASIA_DIR)/$$f; fi; done; \
-+ if [ ! -e $(INSTALL_PREFIX)$(PHANTASIA_DIR)/$$f ]; then \
-+ cp phantasia/$$f $(INSTALL_PREFIX)$(PHANTASIA_DIR)/$$f; fi; done; \
- $(INSTALL_SCORE_FILE) $(PHANTASIA_DIR)/scoreboard; \
- $(INSTALL_SCORE_FILE) -p $(PHANTASIA_DIR)/characs)
- $(INSTALL_MANUAL) phantasia/phantasia.6
diff --git a/source/y/bsd-games/bsd-games.sail.no.union_wait.diff b/source/y/bsd-games/bsd-games.sail.no.union_wait.diff
deleted file mode 100644
index 4ce9613e..00000000
--- a/source/y/bsd-games/bsd-games.sail.no.union_wait.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./sail/pl_1.c.orig 2001-02-07 18:18:24.000000000 -0600
-+++ ./sail/pl_1.c 2018-04-08 12:55:44.967250171 -0500
-@@ -133,7 +133,7 @@
- void
- child(int n __attribute__((__unused__)))
- {
-- union wait status;
-+ int status;
- int pid;
-
- signal(SIGCHLD, SIG_IGN);
diff --git a/source/y/bsd-games/bsd-games.strfile.8.diff b/source/y/bsd-games/bsd-games.strfile.8.diff
deleted file mode 100644
index 4965ddc1..00000000
--- a/source/y/bsd-games/bsd-games.strfile.8.diff
+++ /dev/null
@@ -1,22 +0,0 @@
---- ./fortune/strfile/strfile.8.orig 2001-02-07 16:18:22.000000000 -0800
-+++ ./fortune/strfile/strfile.8 2003-02-03 14:50:29.000000000 -0800
-@@ -61,7 +61,7 @@
- This allows random access of the strings.
- .Pp
- The output file, if not specified on the command line, is named
--.Ar source_file Ns Sy .out .
-+.Ar source_file Ns Sy .dat .
- .Pp
- The options are as follows:
- .Bl -tag -width "-c char"
-@@ -137,8 +137,8 @@
- .Xr byteorder 3 ,
- .Xr fortune 6
- .Sh FILES
--.Bl -tag -width strfile.out -compact
--.It Pa strfile.out
-+.Bl -tag -width strfile.dat -compact
-+.It Pa strfile.dat
- default output file.
- .El
- .Sh HISTORY
diff --git a/source/y/bsd-games/bsd-games.trek-gcc4.diff b/source/y/bsd-games/bsd-games.trek-gcc4.diff
deleted file mode 100644
index 25969d7a..00000000
--- a/source/y/bsd-games/bsd-games.trek-gcc4.diff
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/trek/trek.h 1999-09-26 12:37:19.000000000 +0100
-+++ b/trek/trek.h 2007-08-27 18:55:07.907206649 +0100
-@@ -35,6 +35,8 @@
- * @(#)trek.h 8.1 (Berkeley) 5/31/93
- */
-
-+#include "getpar.h"
-+
- /*
- ** Global Declarations
- **
---- a/trek/getpar.h 1999-09-15 11:34:31.000000000 +0100
-+++ b/trek/getpar.h 2007-08-27 18:55:20.011896456 +0100
-@@ -34,6 +34,8 @@
- *
- * @(#)getpar.h 8.1 (Berkeley) 5/31/93
- */
-+#ifndef _GETPAR_H
-+#define _GETPAR_H
-
- typedef void (*cmdfun) __P((int));
- struct cvntab /* used for getcodpar() paramater list */
-@@ -52,3 +54,4 @@
- int testnl __P((void));
- void skiptonl __P((int));
- int readdelim __P((int));
-+#endif
diff --git a/source/y/bsd-games/fortune-fixes-sorry-no-additions-accepted-here/20120302.diff b/source/y/bsd-games/fortune-fixes-sorry-no-additions-accepted-here/20120302.diff
deleted file mode 100644
index 94710bca..00000000
--- a/source/y/bsd-games/fortune-fixes-sorry-no-additions-accepted-here/20120302.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./fortune/datfiles/fortunes2.orig 2001-08-29 10:11:30.000000000 -0500
-+++ ./fortune/datfiles/fortunes2 2012-03-02 10:00:47.753999471 -0600
-@@ -35689,7 +35689,7 @@
- order to get power we would have to become very much like them. (Lenin's
- fatal mistake, both in theory and in practice.)
- %
--Perhaps the world's second words crime is boredom. The first is
-+Perhaps the world's second worst crime is boredom. The first is
- being a bore.
- -- Cecil Beaton
- %
diff --git a/source/y/bsd-games/patches/0001-Replace-getline-with-get_line.patch b/source/y/bsd-games/patches/0001-Replace-getline-with-get_line.patch
new file mode 100644
index 00000000..284674f0
--- /dev/null
+++ b/source/y/bsd-games/patches/0001-Replace-getline-with-get_line.patch
@@ -0,0 +1,219 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Thu, 16 Feb 2012 11:26:00 +0100
+Subject: Replace getline() with get_line()
+
+---
+ boggle/boggle/bog.c | 2 +-
+ boggle/boggle/extern.h | 2 +-
+ boggle/boggle/mach.c | 2 +-
+ cribbage/crib.c | 4 ++--
+ cribbage/cribbage.h | 2 +-
+ cribbage/io.c | 8 ++++----
+ gomoku/bdisp.c | 2 +-
+ gomoku/gomoku.h | 2 +-
+ gomoku/main.c | 14 +++++++-------
+ 9 files changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/boggle/boggle/bog.c b/boggle/boggle/bog.c
+index 276969b..0aaa086 100644
+--- a/boggle/boggle/bog.c
++++ b/boggle/boggle/bog.c
+@@ -336,7 +336,7 @@ playgame()
+ }
+
+ while (1) {
+- if (getline(buf) == NULL) {
++ if (get_line(buf) == NULL) {
+ if (feof(stdin))
+ clearerr(stdin);
+ break;
+diff --git a/boggle/boggle/extern.h b/boggle/boggle/extern.h
+index ba36561..734a4b9 100644
+--- a/boggle/boggle/extern.h
++++ b/boggle/boggle/extern.h
+@@ -43,7 +43,7 @@ void delay(int);
+ long dictseek(FILE *, long, int);
+ void findword(void);
+ void flushin(FILE *);
+-char *getline(char *);
++char *get_line(char *);
+ void getword(char *);
+ int help(void);
+ int inputch(void);
+diff --git a/boggle/boggle/mach.c b/boggle/boggle/mach.c
+index b511296..dd89578 100644
+--- a/boggle/boggle/mach.c
++++ b/boggle/boggle/mach.c
+@@ -168,7 +168,7 @@ prwidth(base, indx)
+ * - doesn't accept words longer than MAXWORDLEN or containing caps
+ */
+ char *
+-getline(q)
++get_line(q)
+ char *q;
+ {
+ int ch, done;
+diff --git a/cribbage/crib.c b/cribbage/crib.c
+index 5fc53b3..9340126 100644
+--- a/cribbage/crib.c
++++ b/cribbage/crib.c
+@@ -221,7 +221,7 @@ game()
+ if (!rflag) { /* player cuts deck */
+ msg(quiet ? "Cut for crib? " :
+ "Cut to see whose crib it is -- low card wins? ");
+- getline();
++ get_line();
+ }
+ i = (rand() >> 4) % CARDS; /* random cut */
+ do { /* comp cuts deck */
+@@ -397,7 +397,7 @@ cut(mycrib, pos)
+ if (!rflag) { /* random cut */
+ msg(quiet ? "Cut the deck? " :
+ "How many cards down do you wish to cut the deck? ");
+- getline();
++ get_line();
+ }
+ i = (rand() >> 4) % (CARDS - pos);
+ turnover = deck[i + pos];
+diff --git a/cribbage/cribbage.h b/cribbage/cribbage.h
+index ce2eecb..3187457 100644
+--- a/cribbage/cribbage.h
++++ b/cribbage/cribbage.h
+@@ -77,7 +77,7 @@ int eq(CARD, CARD);
+ int fifteens(const CARD [], int);
+ void game(void);
+ void gamescore(void);
+-char *getline(void);
++char *get_line(void);
+ int getuchar(void);
+ int incard(CARD *);
+ int infrom(const CARD [], int, const char *);
+diff --git a/cribbage/io.c b/cribbage/io.c
+index 3d69257..8100ddd 100644
+--- a/cribbage/io.c
++++ b/cribbage/io.c
+@@ -245,7 +245,7 @@ incard(crd)
+
+ retval = FALSE;
+ rnk = sut = EMPTY;
+- if (!(line = getline()))
++ if (!(line = get_line()))
+ goto gotit;
+ p = p1 = line;
+ while (*p1 != ' ' && *p1 != '\0')
+@@ -346,7 +346,7 @@ number(lo, hi, prompt)
+
+ for (sum = 0;;) {
+ msg(prompt);
+- if (!(p = getline()) || *p == '\0') {
++ if (!(p = get_line()) || *p == '\0') {
+ msg(quiet ? "Not a number" :
+ "That doesn't look like a number");
+ continue;
+@@ -528,12 +528,12 @@ over:
+ }
+
+ /*
+- * getline:
++ * get_line:
+ * Reads the next line up to '\n' or EOF. Multiple spaces are
+ * compressed to one space; a space is inserted before a ','
+ */
+ char *
+-getline()
++get_line()
+ {
+ char *sp;
+ int c, oy, ox;
+diff --git a/gomoku/bdisp.c b/gomoku/bdisp.c
+index 522d92f..d2de746 100644
+--- a/gomoku/bdisp.c
++++ b/gomoku/bdisp.c
+@@ -241,7 +241,7 @@ ask(str)
+ }
+
+ int
+-getline(buf, size)
++get_line(buf, size)
+ char *buf;
+ int size;
+ {
+diff --git a/gomoku/gomoku.h b/gomoku/gomoku.h
+index 0d9ff6e..3ebb42e 100644
+--- a/gomoku/gomoku.h
++++ b/gomoku/gomoku.h
+@@ -263,7 +263,7 @@ extern int debug;
+
+ void bdinit(struct spotstr *);
+ void init_overlap(void);
+-int getline(char *, int);
++int get_line(char *, int);
+ void ask(const char *);
+ void dislog(const char *);
+ void bdump(FILE *);
+diff --git a/gomoku/main.c b/gomoku/main.c
+index 299dee1..3ff4750 100644
+--- a/gomoku/main.c
++++ b/gomoku/main.c
+@@ -155,7 +155,7 @@ again:
+ if (inputfp == NULL && test == 0) {
+ for (;;) {
+ ask("black or white? ");
+- getline(buf, sizeof(buf));
++ get_line(buf, sizeof(buf));
+ if (buf[0] == 'b' || buf[0] == 'B') {
+ color = BLACK;
+ break;
+@@ -172,7 +172,7 @@ again:
+ }
+ } else {
+ setbuf(stdout, 0);
+- getline(buf, sizeof(buf));
++ get_line(buf, sizeof(buf));
+ if (strcmp(buf, "black") == 0)
+ color = BLACK;
+ else if (strcmp(buf, "white") == 0)
+@@ -244,7 +244,7 @@ again:
+ getinput:
+ if (interactive)
+ ask("move? ");
+- if (!getline(buf, sizeof(buf))) {
++ if (!get_line(buf, sizeof(buf))) {
+ curmove = RESIGN;
+ break;
+ }
+@@ -256,7 +256,7 @@ again:
+ FILE *fp;
+
+ ask("save file name? ");
+- (void)getline(buf, sizeof(buf));
++ (void)get_line(buf, sizeof(buf));
+ if ((fp = fopen(buf, "w")) == NULL) {
+ glog("cannot create save file");
+ goto getinput;
+@@ -309,14 +309,14 @@ again:
+ if (i != RESIGN) {
+ replay:
+ ask("replay? ");
+- if (getline(buf, sizeof(buf)) &&
++ if (get_line(buf, sizeof(buf)) &&
+ (buf[0] == 'y' || buf[0] == 'Y'))
+ goto again;
+ if (strcmp(buf, "save") == 0) {
+ FILE *fp;
+
+ ask("save file name? ");
+- (void)getline(buf, sizeof(buf));
++ (void)get_line(buf, sizeof(buf));
+ if ((fp = fopen(buf, "w")) == NULL) {
+ glog("cannot create save file");
+ goto replay;
+@@ -367,7 +367,7 @@ whatsup(signum)
+ quit();
+ top:
+ ask("cmd? ");
+- if (!getline(fmtbuf, sizeof(fmtbuf)))
++ if (!get_line(fmtbuf, sizeof(fmtbuf)))
+ quit();
+ switch (*fmtbuf) {
+ case '\0':
diff --git a/source/y/bsd-games/patches/0002-robots-Refresh-screen.patch b/source/y/bsd-games/patches/0002-robots-Refresh-screen.patch
new file mode 100644
index 00000000..ec588dd8
--- /dev/null
+++ b/source/y/bsd-games/patches/0002-robots-Refresh-screen.patch
@@ -0,0 +1,20 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Thu, 16 Feb 2012 11:26:49 +0100
+Subject: robots: Refresh screen
+
+---
+ robots/move.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/robots/move.c b/robots/move.c
+index 7edaae3..b2703c5 100644
+--- a/robots/move.c
++++ b/robots/move.c
+@@ -185,6 +185,7 @@ teleport:
+ flush_in();
+ goto ret;
+ case CTRL('L'):
++ redrawwin(curscr);
+ refresh();
+ break;
+ case EOF:
diff --git a/source/y/bsd-games/patches/0003-quiz-Update-presidents-capitals-fix-typos-in-murders.patch b/source/y/bsd-games/patches/0003-quiz-Update-presidents-capitals-fix-typos-in-murders.patch
new file mode 100644
index 00000000..77a0e87a
--- /dev/null
+++ b/source/y/bsd-games/patches/0003-quiz-Update-presidents-capitals-fix-typos-in-murders.patch
@@ -0,0 +1,352 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Thu, 16 Feb 2012 11:26:50 +0100
+Subject: quiz: Update presidents, capitals, fix typos in murders, poetry
+
+---
+ quiz/datfiles/africa | 51 ++++++++++++++++++++++++++++++++-------------------
+ quiz/datfiles/america | 45 ++++++++++++++++++++++++++++++++++++---------
+ quiz/datfiles/asia | 40 +++++++++++++++++++++++++---------------
+ quiz/datfiles/europe | 44 ++++++++++++++++++++++++++++++--------------
+ quiz/datfiles/murders | 2 +-
+ quiz/datfiles/poetry | 2 +-
+ quiz/datfiles/pres | 6 ++++--
+ 7 files changed, 129 insertions(+), 61 deletions(-)
+
+diff --git a/quiz/datfiles/africa b/quiz/datfiles/africa
+index 6e74550..a2eeeaf 100644
+--- a/quiz/datfiles/africa
++++ b/quiz/datfiles/africa
+@@ -1,43 +1,56 @@
+-Algeria:Alg[iers|er]
+-Botswana:Gaberones
++Algeria:Algiers
++Angola:Luanda
++Benin:Porto-Novo
++Botswana:Gaborone
++Burkina Faso:Ouagadougou
+ Burundi:Bujumbura
+-Cameroun:Yaound['e|e'|e]
++C[^o|o^|o]te d'Ivoire:Yamoussoukro
++Cameroon:Yaound['e|e'|e]
++Cape Verde:Praia
+ Central Africa{n Rep{ublic}}:Bangui
+-Chad:Ndjamena
+-Congo:Brazzaville
+-Dahomey:Porto Novo
++Chad:N'Djamena|Ndjamena
++Comoros:Moroni
++Djibouti:Djibouti
++Egypt:Cairo
++Equatorial Guinea:Malabo
++Eritrea:Asmara
+ Ethiopia:Addis Ababa
+ Gabon:Libreville
+ Ghana:Accra
+ Guinea-Bissau:Bissau
+ Guinea:Conakry
+-Ivory Coast:Abidjan
+ Kenya:Nairobi
+ Lesotho:Maseru
+ Liberia:Monrovia
+-Libya:Al Bayda{'}
+-Malagasy{ Rep{ublic}}|Madagascar:Tananarive
+-Malawi:Zomba
++Libya:Tripoli
++Malagasy{ Rep{ublic}}|Madagascar:Antananarivo
++Malawi:Lilongwe
+ Mali:Bamako
+ Mauritania:Nouakchott
++Mauritius:Port Louis
++Mayotte:Mamoudzou
++Mo[z|,c|c,|c]ambique:Maputo
+ Morocco:Rabat
+-Mo[z|,c|c,|c]ambique:Louren[,c|c,|c]o Marques
++Namibia:Windhoek
+ Niger:Niamey
+-Nigeria:Lagos
+-Rhodesia:Salisbury
++Nigeria:Abuja
++R['e|e'|e]union:Saint-Denis
++Rep. Congo:Brazzaville
+ Rwanda:Kigali
++S[~a|a~|a]o Tom['e|e'|e] and Pr['i|i'|i]ncipe:S[~a|a~|a]o Tom['e|e'|e]
++Saint Helena:Jamestown
+ Senegal:Dakar
++Seychelles:Victoria
+ Sierra Leone:Freetown
+-Somali{ Rep{ublic}}:Mogadis[cio|hu]
++Somalia:Mogadishu
+ Sudan:Khartoum
+ Swaziland:Mbabane
+-Tanzania:Dar es Salaam
++Tanzania:Dodoma
+ Togo:Lom['e|e'|e]
+ Tunisia:Tunis
+ Uganda:Kampala
+-United Arab Rep{ublic}|Egypt:Cairo
+-Upper Volta:Ouagadougou
+ Zambia:Lusaka
+-Za["i|i"|i]re:Kinshasha
++Zimbabwe:Harare
++{DR |Democratic Republic of the }Congo:Kinshasa
+ {Rep{ublic} of }South Africa:Pretoria
+-{The }Gambia:Bathurst
++{The }Gambia:Banjul|Bathurst
+diff --git a/quiz/datfiles/america b/quiz/datfiles/america
+index 7f8fee1..5c9e321 100644
+--- a/quiz/datfiles/america
++++ b/quiz/datfiles/america
+@@ -1,27 +1,54 @@
++Anguilla:The Valley
++Antigua and Barbuda:St. John's
+ Argentina:Buenos Aires
+-Bahamas:Nassau
++Aruba:Oranjestad
+ Barbados:Bridgetown
++Belize:Belmopan
++Bermuda:Hamilton
+ Bolivia:La Paz|Sucre
+-Bra[z|s]il:Brasilia
++Bra[z|s]il:Bras['i|i'|i]lia
++British Virgin Islands:Road Town
+ Canada:Ottawa
++Cayman Islands:George Town
+ Chile:Santiago
+ Colombia:Bogot['a|a'|a]
+-Costa Rica:San Jose
++Costa Rica:San Jos['e|e'|e]
+ Cuba:Ha[v|b]ana
++Dominica:Roseau
+ Dominican Republic:Santo Domingo
+ Ecuador:Quito
+ El Salvador:San Salvador
+-Guatemala:Guatemala
++Falkland Islands:Stanley
++French Guiana:Cayenne
++Greenland:Nuuk
++Grenada:St. George's
++Guadeloupe:Basse-Terre
++Guatemala:Guatemala City
+ Guyana:Georgetown
+-Haiti:Port au Prince
++Haiti:Port[-| ]au[-| ]Prince
+ Honduras:Tegucigalpa
+ Jamaica:Kingston
+-Mexico:Mexico
++Martinique:Fort-de-France
++Mexico:Mexico City
++Montserrat:Plymouth|Brades
++Netherlands Antilles:Willemstad
+ Nicaragua:Managua
+-Panama:Panama
++Panama:Panama City
+ Paraguay:Asunci['o|o'|o]n
+ Peru:Lima
+-Trinidad[ and Tobago|]:Port of Spain
+-United States|US{A}:Washington
++Puerto Rico:San Juan
++SGSSI|South Georgia and the South Sandwich Islands:Grytviken|King Edward Point
++Saint Barth['e|e'|e]lemy:Gustavia
++Saint Kitts and Nevis:Basseterre
++Saint Lucia:Castries
++Saint Martin:Marigot
++Saint Pierre and Miquelon:Saint-Pierre
++Saint Vincent and the Grenadines:Kingstown
++Suriname:Paramaribo
++Trinidad{ and Tobago}:Port of Spain
++Turks and Caicos Islands:Cockburn Town
++United States Virgin Islands:Charlotte Amalie
++United States|US{A}:Washington{ DC}
+ Uruguay:Montevideo
+ Venezuela:Caracas
++{The }Bahamas:Nassau
+diff --git a/quiz/datfiles/asia b/quiz/datfiles/asia
+index b9449f4..8c8ee55 100644
+--- a/quiz/datfiles/asia
++++ b/quiz/datfiles/asia
+@@ -1,12 +1,16 @@
+ Afghanistan:Kabul
++Armenia:Yerevan
+ Australia:Canberra
+-Bahrein:Manama
+-Bangladesh:Dacca
+-Bhutan:Thimbu
+-Burma:Rangoon
+-Cambodia|Khmer:P{h}nom Penh
+-China:Peking
++Azerbaijan:Baku
++Bahr[a|e]in:Manama
++Bangladesh:Dhaka
++Bhutan:Thimphu
++Burma:Naypyidaw
++Cambodia:Phnom Penh
+ Cyprus:Nicosia
++East Timor:Dili
++Egypt:Cairo
++Georgia:Tbilisi
+ India:New Delhi
+ Indonesia:Jakarta|Djakarta
+ Iran:Tehran
+@@ -14,28 +18,34 @@ Iraq:Baghdad
+ Israel:Jerusalem
+ Japan:Tokyo
+ Jordan:Amman
+-Kuwait:Al-kuwait
++Kazakhstan:Astana
++Kuwait:Kuwait City
++Kyrgyzstan:Bishkek
+ Laos:Vientiane
+ Lebanon:Beirut
+ Malaysia:Kuala Lumpur
+-Maldive Islands:Male
++Maldives:Mal['e|e'|e]
+ Mongolia:Ulan Bator
+-Nepal:Katmandu
++Nepal:Kathmandu
+ North Korea:P{'}yongyang
+-North Yemen:San{'}a
+ Oman:Muscat
+ Pakistan:Islamabad
+-Papua[-| ]New Guinea:Port Moresby
++Papua New Guinea:Port Moresby
+ Philippines:Manila
+ Qatar:Doha
+-Saudi Arabia:Riyadh|J{ei}ddah
++Russia:Moscow
++Saudi Arabia:Riyadh
+ Singapore:Singapore
+ South Korea:Seoul
+-South Yemen:Aden
+-Sri Lanka:Colombo
++Sri Lanka:Kotte
+ Syria:Damascus
+ Taiwan:Taipei
++Tajikistan:Dushanbe
+ Thailand:Bangkok
+ Turkey:Ankara
+-United Arab Emirates:Abu Dhabi
++Turkmenistan:Ashgabat
++United Arab Emirates|UAE:Abu Dhabi
++Uzbekistan:Tashkent
+ Vietnam:Hanoi
++{Republic of }Yemen:Sana'a
++{{People's }Republic of }China:Beijing|Peking
+diff --git a/quiz/datfiles/europe b/quiz/datfiles/europe
+index 91176e5..d089f41 100644
+--- a/quiz/datfiles/europe
++++ b/quiz/datfiles/europe
+@@ -1,44 +1,60 @@
+-Albania:Tirana|Tirane"
++Abkhazia:Sukhumi
++Albania:Tirana
+ Andorra:Andorra la V[ell|iej]a
++Armenia:Yerevan
+ Austria:Vienna|Wien
+-Belarus|Byelorussia:M[i|e]nsk
+-Belgium:Brussel[s|]|Bruxelles
+-Bosnia[-Herzegovina|]:Sarajevo
+-Bulgaria:Sofi[a|ya]
++Azerbaijan:Baku
++Belarus:Minsk
++Belgium:Brussel{s}|Bruxelles
++Bosnia and Herzegovina:Sarajevo
++Bulgaria:Sofia
+ Croatia:Zagreb
++Cyprus:Nicosia
+ Czech Republic:Prague|Praha
+-Denmark:Copenhagen|K[o|o/]benhavn
+-United Kingdom|England|Great Britain|UK:London
++Denmark:Copenhagen|K[o|o/|/o]benhavn
+ Estonia:Tallinn
++Faroe Islands:T['o|o'|o]rshavn
+ Finland:Helsinki
+ France:Paris
+ Georgia:Tbilisi
+ Germany:Berlin
++Gibraltar:Gibraltar
+ Greece:Athens
++Guernsey:Saint Peter Port
+ Hungary:Budapest
+-Iceland:Reykjavik
++Iceland:Reykjav['i|i'|i]k
+ Ireland|Eire:Dublin
++Isle of Man:Douglas
+ Italy:Rom[e|a]
++Jersey:Saint Helier
++Kazakhstan:Astana
++Kosovo:Pristina
+ Latvia:Riga
+ Liechtenstein:Vaduz
+ Lithuania:Vilnius
+ Luxembourg:Luxembourg
+-[|Former Yugoslav Republic Of ]Macedonia:Skop[|l]je
++Macedonia:Skopje
+ Malta:Valletta
+-Moldova:Chisinau|Kishinev
++Moldova:Chi[,s|s,|s]inau|Kishinev
+ Monaco:Monaco
+-Netherlands|Holland:Amsterdam
++Montenegro:Podgorica
++Netherlands:Amsterdam
+ Norway:Oslo
+ Poland:Wars[aw|zawa]
+ Portugal:Lisbo[n|a]
+-R[u|o]mania:Bucharest|Bucuresti
++Romania:Bucharest
+ Russia:Mos[cow|kva]
+ San Marino:San Marino
+-Serbia and Montenegro:Belgrade|Beograd
+-Slovakia|Slovak Republic:Bratislava
++Serbia:Belgrade
++Slovakia:Bratislava
+ Slovenia:Ljubljana
++South Ossetia:Tskhinvali
+ Spain:Madrid
++Svalbard:Longyearbyen
+ Sweden:Stockholm
+ Switzerland:Bern{e}
+ Turkey:Ankara
+ Ukraine:Kiev|Kyiv
++United Kingdom|England|Great Britain|UK:London
++Vatican City:Vatican City
++[°A|A°|A]land Islands:Mariehamn
+diff --git a/quiz/datfiles/murders b/quiz/datfiles/murders
+index 30cf324..b1070ce 100644
+--- a/quiz/datfiles/murders
++++ b/quiz/datfiles/murders
+@@ -19,7 +19,7 @@ Pompeii:Vesuvius
+ {Yukio }Mishima:{Yukio }Mishima
+ {Alexander }Hamilton:{Aaron }Burr
+ Cleopatra:{the |an }asp
+-[Ann Boleyn|Catharine Howard]:Henry{ VIII}
++[Anne Boleyn|Catharine Howard]:Henry{ VIII}
+ vaudeville:{the }movies|film
+ {the }movies|film:TV|television
+ {the }VA patients:{the }nurses
+diff --git a/quiz/datfiles/poetry b/quiz/datfiles/poetry
+index f4c07d6..78d117a 100644
+--- a/quiz/datfiles/poetry
++++ b/quiz/datfiles/poetry
+@@ -64,7 +64,7 @@ Drink deep{,} or taste not the Pierian spring{.}:\
+ {Alexander }Pope
+ The curfew tolls the knell of parting day{,}:\
+ The lowing herd wind slowly o'er the lea:\
+-Elegy{ Written in a Country Church{-| }Yard:\
++Elegy{ Written in a Country Church{-| }Yard}:\
+ {Thomas }Gray
+ The best laid schemes o' mice an' men gang aft a-gley{,}:\
+ An{'|d} lea{'|v}e us nought but grief an{'|d} pain for promised joy{.}:\
+diff --git a/quiz/datfiles/pres b/quiz/datfiles/pres
+index 6f81228..4ce5862 100644
+--- a/quiz/datfiles/pres
++++ b/quiz/datfiles/pres
+@@ -79,5 +79,7 @@
+ {J{ames} }{D{anforth|an} }Quayle:{W{illiam|m} }{J{efferson} }Clinton
+ {W{illiam|m} }{J{efferson} }Clinton:1993-2001:\
+ {A{lbert} }{A{rnold} }Gore{{,} J{unio}r}:{G{eorge} }{W{alker} }Bush{{,} J{unio}r}
+-{G{eorge} }{W{alker} }Bush{{,} J{unio}r}:2001-:\
+-{R{ichard} }{B{ruce} }Cheney:
++{G{eorge} }{W{alker} }Bush{{,} J{unio}r}:2001-{{20}0}9:\
++{R{ichard} }{B{ruce} }Cheney:{B{arack} }{H{ussein} }Obama{ II}
++{B{arack} }{H{ussein} }Obama{ II}:2009-:\
++{J{oe{seph}} }{R{obinette} }{Biden}{{,} J{unio}r}:
diff --git a/source/y/bsd-games/patches/0004-Define-__dead-for-GNU-GCC.patch b/source/y/bsd-games/patches/0004-Define-__dead-for-GNU-GCC.patch
new file mode 100644
index 00000000..c2ef73de
--- /dev/null
+++ b/source/y/bsd-games/patches/0004-Define-__dead-for-GNU-GCC.patch
@@ -0,0 +1,20 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Thu, 16 Feb 2012 11:26:51 +0100
+Subject: Define __dead for GNU GCC
+
+---
+ include/sys/cdefs.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
+index 138eaa8..f6e87c2 100644
+--- a/include/sys/cdefs.h
++++ b/include/sys/cdefs.h
+@@ -40,3 +40,7 @@
+ #ifndef __COPYRIGHT
+ #define __COPYRIGHT(arg) static const char copyright[] __attribute__((__unused__)) = arg
+ #endif
++
++#ifndef __dead
++#define __dead __attribute__((__noreturn__))
++#endif
diff --git a/source/y/bsd-games/patches/0005-rain-Update-default-delay.-Closes-579062.patch b/source/y/bsd-games/patches/0005-rain-Update-default-delay.-Closes-579062.patch
new file mode 100644
index 00000000..d38da764
--- /dev/null
+++ b/source/y/bsd-games/patches/0005-rain-Update-default-delay.-Closes-579062.patch
@@ -0,0 +1,34 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Thu, 16 Feb 2012 11:26:53 +0100
+Subject: rain: Update default delay. Closes: #579062
+
+---
+ rain/rain.6 | 2 +-
+ rain/rain.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/rain/rain.6 b/rain/rain.6
+index 9fb0f0e..c6515e9 100644
+--- a/rain/rain.6
++++ b/rain/rain.6
+@@ -49,6 +49,6 @@ baud or the
+ .Fl d
+ option must be used to specify a delay, in milliseconds, between each
+ update.
+-A reasonable delay is 120; the default is 0.
++The default delay is 120.
+ .Sh AUTHOR
+ .An Eric P. Scott
+diff --git a/rain/rain.c b/rain/rain.c
+index e388f46..63e6276 100644
+--- a/rain/rain.c
++++ b/rain/rain.c
+@@ -70,7 +70,7 @@ main(int argc, char **argv)
+ {
+ int x, y, j;
+ long cols, lines;
+- unsigned int delay = 0;
++ unsigned int delay = 120;
+ unsigned long val = 0;
+ int ch;
+ char *ep;
diff --git a/source/y/bsd-games/patches/0007-Unsorted-Debian-patches.patch b/source/y/bsd-games/patches/0007-Unsorted-Debian-patches.patch
new file mode 100644
index 00000000..a31120a9
--- /dev/null
+++ b/source/y/bsd-games/patches/0007-Unsorted-Debian-patches.patch
@@ -0,0 +1,552 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Mon, 26 Mar 2012 10:07:17 +0200
+Subject: Unsorted Debian patches
+
+---
+ adventure/crc.c | 4 +++-
+ arithmetic/arithmetic.6 | 2 +-
+ backgammon/backgammon/move.c | 3 +++
+ backgammon/common_source/allow.c | 4 +++-
+ backgammon/teachgammon/ttext1.c | 2 +-
+ backgammon/teachgammon/ttext2.c | 2 +-
+ dab/gamescreen.h | 6 ++---
+ dm/dm.c | 6 ++---
+ fish/Makefrag | 8 ++++---
+ fish/fish.6 | 4 ++--
+ gomoku/gomoku.6 | 2 +-
+ hack/Makefrag | 3 ++-
+ hack/config.h | 15 ++++++++-----
+ hunt/hunt/hunt.6.in | 2 +-
+ hunt/hunt/hunt.c | 6 +++--
+ hunt/hunt/playit.c | 4 ++--
+ number/number.c | 47 ++++++++++++++++++++++++++--------------
+ sail/pl_main.c | 2 +-
+ tests/number.-0.1 | 2 +-
+ tetris/scores.c | 17 +++++++++------
+ trek/setup.c | 5 ++++-
+ 21 files changed, 92 insertions(+), 54 deletions(-)
+
+diff --git a/adventure/crc.c b/adventure/crc.c
+index 66504f1..c6ee5f1 100644
+--- a/adventure/crc.c
++++ b/adventure/crc.c
+@@ -42,6 +42,8 @@ __RCSID("$NetBSD: crc.c,v 1.8 2003/08/07 09:36:50 agc Exp $");
+ #endif
+ #endif /* not lint */
+
++#include <limits.h>
++
+ #include "extern.h"
+
+ const unsigned long crctab[] = {
+@@ -125,7 +127,7 @@ crc(ptr, nr) /* Process nr bytes at a time; ptr points to them */
+
+ while (nr > 0)
+ for (p = ptr; nr--; ++p) {
+- if (!(i = crcval >> 24 ^ *p)) {
++ if (!(i = crcval >> (sizeof(crcval) * CHAR_BIT - 8) ^ *p)) {
+ i = step++;
+ if (step >= sizeof(crctab) / sizeof(crctab[0]))
+ step = 0;
+diff --git a/arithmetic/arithmetic.6 b/arithmetic/arithmetic.6
+index b8d4d8f..bc41bca 100644
+--- a/arithmetic/arithmetic.6
++++ b/arithmetic/arithmetic.6
+@@ -79,7 +79,7 @@ divide by or subtract will be between 0 and
+ .Nm
+ will not ask you to divide by 0.)
+ The default
+-.I range
++.It range
+ is 10.
+ .El
+ .Pp
+diff --git a/backgammon/backgammon/move.c b/backgammon/backgammon/move.c
+index 9fd81f1..027cab5 100644
+--- a/backgammon/backgammon/move.c
++++ b/backgammon/backgammon/move.c
+@@ -152,6 +152,9 @@ move(okay)
+ trymove(0, 0);
+ pickmove();
+
++ if (d0)
++ swap;
++
+ /* print move */
+ writel(" and moves ");
+ for (i = 0; i < mvlim; i++) {
+diff --git a/backgammon/common_source/allow.c b/backgammon/common_source/allow.c
+index f6bae78..8189f07 100644
+--- a/backgammon/common_source/allow.c
++++ b/backgammon/common_source/allow.c
+@@ -83,8 +83,10 @@ movallow()
+ p[i--] = bar;
+ if (p[i] != bar)
+ continue;
+- else
++ else if (d0)
+ break;
++ swap;
++ continue;
+ }
+ if (d0 || m == 4)
+ break;
+diff --git a/backgammon/teachgammon/ttext1.c b/backgammon/teachgammon/ttext1.c
+index 82db223..73ea6ee 100644
+--- a/backgammon/teachgammon/ttext1.c
++++ b/backgammon/teachgammon/ttext1.c
+@@ -94,7 +94,7 @@ const char *const intro2[] = {
+ "\n Although not indicated on the board, the players' homes are",
+ "located just to the right of the board. A player's men are placed",
+ "there when they are removed from the board. The board you just",
+- "saw was in it's initial position. All games start with the board",
++ "saw was in its initial position. All games start with the board",
+ "looking like this. Notice that red's pieces are represented by the",
+ "letter 'r' and white's pieces are represented by the letter 'w'.",
+ "Also, a position may have zero or more pieces on it, e.g. posi-",
+diff --git a/backgammon/teachgammon/ttext2.c b/backgammon/teachgammon/ttext2.c
+index 5e827d7..eb9a083 100644
+--- a/backgammon/teachgammon/ttext2.c
++++ b/backgammon/teachgammon/ttext2.c
+@@ -65,7 +65,7 @@ const char *const stragy[] = {
+ "points in a row) are difficult to form, many points nestled close-",
+ "ly together produce a formidable barrier. Also, while it is good",
+ "to move back men forward, doing so lessens the opportunity for you",
+- "to hit men. Finally, remember that once the two player's have",
++ "to hit men. Finally, remember that once the two players have",
+ "passed each other on the board, there is no chance of either team",
+ "being hit, so the game reduces to a race off the board. Addi-",
+ "tional hints on strategy are presented in the practice game.",
+diff --git a/dab/gamescreen.h b/dab/gamescreen.h
+index ca90cb3..b3db2ea 100644
+--- a/dab/gamescreen.h
++++ b/dab/gamescreen.h
+@@ -70,9 +70,9 @@ class GAMESCREEN {
+ virtual void redraw(void) = 0; // Refresh
+ virtual int getinput(void) = 0; // Get user input
+ virtual void bell(void) = 0; // Beep
+- virtual void score(size_t p, const PLAYER& p) = 0; // Post current score
+- virtual void games(size_t p, const PLAYER& p) = 0; // Post games won
+- virtual void total(size_t p, const PLAYER& p) = 0; // Post total score
++ virtual void score(size_t s, const PLAYER& p) = 0; // Post current score
++ virtual void games(size_t s, const PLAYER& p) = 0; // Post games won
++ virtual void total(size_t s, const PLAYER& p) = 0; // Post total score
+ virtual void ties(const PLAYER& p) = 0; // Post tie games
+ };
+
+diff --git a/dm/dm.c b/dm/dm.c
+index c131904..16129d8 100644
+--- a/dm/dm.c
++++ b/dm/dm.c
+@@ -134,19 +134,19 @@ read_config()
+ while (fgets(lbuf, sizeof(lbuf), cfp))
+ switch (*lbuf) {
+ case 'b': /* badtty */
+- if (sscanf(lbuf, "%s%s", f1, f2) != 2 ||
++ if (sscanf(lbuf, "%39s%39s", f1, f2) != 2 ||
+ strcasecmp(f1, "badtty"))
+ break;
+ c_tty(f2);
+ break;
+ case 'g': /* game */
+- if (sscanf(lbuf, "%s%s%s%s%s",
++ if (sscanf(lbuf, "%39s%39s%39s%39s%39s",
+ f1, f2, f3, f4, f5) != 5 || strcasecmp(f1, "game"))
+ break;
+ c_game(f2, f3, f4, f5);
+ break;
+ case 't': /* time */
+- if (sscanf(lbuf, "%s%s%s%s", f1, f2, f3, f4) != 4 ||
++ if (sscanf(lbuf, "%39s%39s%39s%39s", f1, f2, f3, f4) != 4 ||
+ strcasecmp(f1, "time"))
+ break;
+ c_day(f2, f3, f4);
+diff --git a/fish/Makefrag b/fish/Makefrag
+index 1039af5..1fec493 100644
+--- a/fish/Makefrag
++++ b/fish/Makefrag
+@@ -31,7 +31,9 @@ fish_DIRS := $(GAMESDIR) $(MAN6DIR) $(shell dirname $(FISH_INSTRFILE))
+ fish_all: fish/fish fish/fish.instr fish/fish.6
+
+ fish_install: fish_all
+- $(INSTALL_BINARY) fish/fish $(INSTALL_PREFIX)$(GAMESDIR)/fish
+- $(HIDE_GAME) fish
++ $(INSTALL_BINARY) fish/fish $(INSTALL_PREFIX)$(GAMESDIR)/go-fish
++ $(HIDE_GAME) go-fish
+ $(INSTALL_DATA) fish/fish.instr $(INSTALL_PREFIX)$(FISH_INSTRFILE)
+- $(INSTALL_MANUAL) fish/fish.6
++ ln -sf fish.6 fish/go-fish.6 # hack for rename
++ $(INSTALL_MANUAL) fish/go-fish.6
++ rm -f fish/go-fish.6
+diff --git a/fish/fish.6 b/fish/fish.6
+index 398c55f..46eef2b 100644
+--- a/fish/fish.6
++++ b/fish/fish.6
+@@ -30,10 +30,10 @@
+ .\" @(#)fish.6 8.1 (Berkeley) 5/31/93
+ .\"
+ .Dd May 31, 1993
+-.Dt FISH 6
++.Dt GO-FISH 6
+ .Os
+ .Sh NAME
+-.Nm fish
++.Nm go-fish
+ .Nd play
+ .Dq Go Fish
+ .Sh SYNOPSIS
+diff --git a/gomoku/gomoku.6 b/gomoku/gomoku.6
+index f78eb0e..024da85 100644
+--- a/gomoku/gomoku.6
++++ b/gomoku/gomoku.6
+@@ -45,7 +45,7 @@
+ .Op Ar inputfile
+ .Sh DESCRIPTION
+ .Nm
+-is a two player game were the object is to get 5 in a row horizontally,
++is a two player game where the object is to get 5 in a row horizontally,
+ vertically or diagonally on a 19 by 19 grid.
+ By convention, black always moves first.
+ With no arguments,
+diff --git a/hack/Makefrag b/hack/Makefrag
+index eabbd2a..5807ef0 100644
+--- a/hack/Makefrag
++++ b/hack/Makefrag
+@@ -56,7 +56,8 @@ hack_install: hack_all
+ $(INSTALL_SCORE_GAME) hack/hack $(INSTALL_PREFIX)$(GAMESDIR)/hack
+ $(HIDE_GAME) hack
+ $(INSTALL_HACK_DIR) $(INSTALL_PREFIX)$(HACK_DIR)
+- set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)$(HACK_DIR)/$$f; done
++ install -d $(INSTALL_PREFIX)/usr/share/games/bsdgames/hack
++ set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)/usr/share/games/bsdgames/hack/$$f; done
+ $(INSTALL_SCORE_FILE) $(HACK_DIR)/perm
+ $(INSTALL_SCORE_FILE) $(HACK_DIR)/record
+ $(INSTALL_MANUAL) hack/hack.6
+diff --git a/hack/config.h b/hack/config.h
+index ad3bbcf..03a8b02 100644
+--- a/hack/config.h
++++ b/hack/config.h
+@@ -88,13 +88,18 @@
+ /* #define PYRAMID_BUG */ /* avoid a bug on the Pyramid */
+ /* #define NOWAITINCLUDE */ /* neither <wait.h> nor <sys/wait.h> exists */
+
+-#define WIZARD "bruno" /* the person allowed to use the -D option */
++/*
++ * Debian mods: use root for WIZARD, and move files that are static to
++ * /usr/share/ -- JEH
++ */
++#define WIZARD "root" /* the person allowed to use the -D option */
++#define SHAREDIR "/usr/share/games/bsdgames/hack/"
+ #define RECORD "record"/* the file containing the list of topscorers */
+ #define NEWS "news" /* the file containing the latest hack news */
+-#define HELP "help" /* the file containing a description of the commands */
+-#define SHELP "hh" /* abbreviated form of the same */
+-#define RUMORFILE "rumors" /* a file with fortune cookies */
+-#define DATAFILE "data" /* a file giving the meaning of symbols used */
++#define HELP SHAREDIR "help" /* the file containing a description of the commands */
++#define SHELP SHAREDIR "hh" /* abbreviated form of the same */
++#define RUMORFILE SHAREDIR "rumors" /* a file with fortune cookies */
++#define DATAFILE SHAREDIR "data" /* a file giving the meaning of symbols used */
+ #define FMASK 0660 /* file creation mask */
+ #define HLOCK "perm" /* an empty file used for locking purposes */
+ #define LLOCK "safelock" /* link to previous */
+diff --git a/hunt/hunt/hunt.6.in b/hunt/hunt/hunt.6.in
+index 406296e..22e45ec 100644
+--- a/hunt/hunt/hunt.6.in
++++ b/hunt/hunt/hunt.6.in
+@@ -387,7 +387,7 @@ how many of player's shots were ducked
+ how many slime kills player had
+ .It enemy
+ how many enemies were killed
+-.tI friend
++.It friend
+ how many friends were killed (self and same team)
+ .It deaths
+ how many times player died
+diff --git a/hunt/hunt/hunt.c b/hunt/hunt/hunt.c
+index 11f4c44..28321bc 100644
+--- a/hunt/hunt/hunt.c
++++ b/hunt/hunt/hunt.c
+@@ -394,7 +394,8 @@ broadcast_vec(s, vector)
+
+ vec_cnt = 0;
+ for (ip = ifp; ip; ip = ip->ifa_next)
+- if ((ip->ifa_addr->sa_family == AF_INET) &&
++ if (ip->ifa_addr &&
++ (ip->ifa_addr->sa_family == AF_INET) &&
+ (ip->ifa_flags & IFF_BROADCAST))
+ vec_cnt++;
+
+@@ -405,7 +406,8 @@ broadcast_vec(s, vector)
+
+ vec_cnt = 0;
+ for (ip = ifp; ip; ip = ip->ifa_next)
+- if ((ip->ifa_addr->sa_family == AF_INET) &&
++ if (ip->ifa_addr &&
++ (ip->ifa_addr->sa_family == AF_INET) &&
+ (ip->ifa_flags & IFF_BROADCAST))
+ memcpy(&(*vector)[vec_cnt++], ip->ifa_broadaddr,
+ sizeof(struct sockaddr_in));
+diff --git a/hunt/hunt/playit.c b/hunt/hunt/playit.c
+index 9acf86e..881a4e7 100644
+--- a/hunt/hunt/playit.c
++++ b/hunt/hunt/playit.c
+@@ -114,7 +114,7 @@ playit()
+ bad_con();
+ /* NOTREACHED */
+ }
+- if (ntohl(version) != (unsigned long)HUNT_VERSION) {
++ if (ntohl(version) != (uint32_t)HUNT_VERSION) {
+ bad_ver();
+ /* NOTREACHED */
+ }
+@@ -649,7 +649,7 @@ do_message()
+ bad_con();
+ /* NOTREACHED */
+ }
+- if (ntohl(version) != (unsigned long)HUNT_VERSION) {
++ if (ntohl(version) != (uint32_t)HUNT_VERSION) {
+ bad_ver();
+ /* NOTREACHED */
+ }
+diff --git a/number/number.c b/number/number.c
+index c7559e1..3086a86 100644
+--- a/number/number.c
++++ b/number/number.c
+@@ -78,9 +78,9 @@ static const char *const name1[] = {
+
+ void convert(char *);
+ int main(int, char *[]);
+-int number(const char *, int);
+-void pfract(int);
+-int unit(int, const char *);
++int number(const char *, int, int *);
++void pfract(int, int);
++int unit(int, const char *, int *);
+ void usage(void) __attribute__((__noreturn__));
+
+ int lflag;
+@@ -131,7 +131,7 @@ void
+ convert(line)
+ char *line;
+ {
+- int flen, len, rval;
++ int flen, len, rval, singular;
+ char *p, *fraction;
+
+ flen = 0;
+@@ -174,7 +174,7 @@ badnum: errx(1, "illegal number: %s", line);
+ --len;
+ }
+
+- rval = len > 0 ? unit(len, line) : 0;
++ rval = len > 0 ? unit(len, line, &singular) : 0;
+ if (fraction != NULL && flen != 0)
+ for (p = fraction; *p != '\0'; ++p)
+ if (*p != '0') {
+@@ -182,10 +182,10 @@ badnum: errx(1, "illegal number: %s", line);
+ (void)printf("%sand%s",
+ lflag ? " " : "",
+ lflag ? " " : "\n");
+- if (unit(flen, fraction)) {
++ if (unit(flen, fraction, &singular)) {
+ if (lflag)
+ (void)printf(" ");
+- pfract(flen);
++ pfract(flen, singular);
+ rval = 1;
+ }
+ break;
+@@ -197,9 +197,10 @@ badnum: errx(1, "illegal number: %s", line);
+ }
+
+ int
+-unit(len, p)
++unit(len, p, singular)
+ int len;
+ const char *p;
++ int *singular;
+ {
+ int off, rval;
+
+@@ -208,7 +209,7 @@ unit(len, p)
+ if (len % 3) {
+ off = len % 3;
+ len -= off;
+- if (number(p, off)) {
++ if (number(p, off, singular)) {
+ rval = 1;
+ (void)printf(" %s%s",
+ name3[len / 3], lflag ? " " : ".\n");
+@@ -217,14 +218,16 @@ unit(len, p)
+ }
+ for (; len > 3; p += 3) {
+ len -= 3;
+- if (number(p, 3)) {
++ if (number(p, 3, singular)) {
+ rval = 1;
+ (void)printf(" %s%s",
+ name3[len / 3], lflag ? " " : ".\n");
+ }
+ }
+ }
+- if (number(p, len)) {
++ if (number(p, len, singular)) {
++ if (rval)
++ *singular = 0;
+ if (!lflag)
+ (void)printf(".\n");
+ rval = 1;
+@@ -233,17 +236,20 @@ unit(len, p)
+ }
+
+ int
+-number(p, len)
++number(p, len, singular)
+ const char *p;
+ int len;
++ int *singular;
+ {
+ int val, rval;
+
+ rval = 0;
++ *singular = 1;
+ switch (len) {
+ case 3:
+ if (*p != '0') {
+ rval = 1;
++ *singular = 0;
+ (void)printf("%s hundred", name1[*p - '0']);
+ }
+ ++p;
+@@ -262,33 +268,42 @@ number(p, len)
+ }
+ rval = 1;
+ }
++ if (val != 1)
++ *singular = 0;
+ break;
+ case 1:
+ if (*p != '0') {
+ rval = 1;
+ (void)printf("%s", name1[*p - '0']);
+ }
++ if (*p != '1')
++ *singular = 0;
+ }
+ return (rval);
+ }
+
+ void
+-pfract(len)
++pfract(len, singular)
+ int len;
++ int singular;
+ {
+ static const char *const pref[] = { "", "ten-", "hundred-" };
+
+ switch(len) {
+ case 1:
+- (void)printf("tenths.\n");
++ (void)printf("tenth");
+ break;
+ case 2:
+- (void)printf("hundredths.\n");
++ (void)printf("hundredth");
+ break;
+ default:
+- (void)printf("%s%sths.\n", pref[len % 3], name3[len / 3]);
++ (void)printf("%s%sth", pref[len % 3], name3[len / 3]);
+ break;
+ }
++ if (!singular) {
++ printf("s");
++ }
++ printf(".\n");
+ }
+
+ void
+diff --git a/sail/pl_main.c b/sail/pl_main.c
+index 6183420..b8b26b1 100644
+--- a/sail/pl_main.c
++++ b/sail/pl_main.c
+@@ -219,7 +219,7 @@ reprint:
+ printf("\nInitial broadside %s (grape, chain, round, double): ",
+ n ? "right" : "left");
+ fflush(stdout);
+- scanf("%s", buf);
++ scanf("%9s", buf);
+ switch (*buf) {
+ case 'g':
+ load = L_GRAPE;
+diff --git a/tests/number.-0.1 b/tests/number.-0.1
+index fea1e89..69c365b 100644
+--- a/tests/number.-0.1
++++ b/tests/number.-0.1
+@@ -1,3 +1,3 @@
+ minus
+ one.
+-tenths.
++tenth.
+diff --git a/tetris/scores.c b/tetris/scores.c
+index d731e25..c2d36c9 100644
+--- a/tetris/scores.c
++++ b/tetris/scores.c
+@@ -335,7 +335,8 @@ checkscores(hs, num)
+ continue;
+ }
+ }
+- levelfound[sp->hs_level] = 1;
++ if (sp->hs_level < NLEVELS && sp->hs_level >= 0)
++ levelfound[sp->hs_level] = 1;
+ i++, sp++;
+ }
+ return (num > MAXHISCORES ? MAXHISCORES : num);
+@@ -374,11 +375,13 @@ showscores(level)
+ for (i = MINLEVEL; i < NLEVELS; i++)
+ levelfound[i] = 0;
+ for (i = 0, sp = scores; i < nscores; i++, sp++) {
+- if (levelfound[sp->hs_level])
+- sp->hs_time = 0;
+- else {
+- sp->hs_time = 1;
+- levelfound[sp->hs_level] = 1;
++ if (sp->hs_level < NLEVELS && sp->hs_level >= 0) {
++ if (levelfound[sp->hs_level])
++ sp->hs_time = 0;
++ else {
++ sp->hs_time = 1;
++ levelfound[sp->hs_level] = 1;
++ }
+ }
+ }
+
+@@ -433,7 +436,7 @@ printem(level, offset, hs, n, me)
+ continue;
+ }
+ sp = &hs[item];
+- (void)sprintf(buf,
++ (void)snprintf(buf, sizeof(buf),
+ "%3d%c %6d %-11s (%6d on %d)",
+ item + offset, sp->hs_time ? '*' : ' ',
+ sp->hs_score * sp->hs_level,
+diff --git a/trek/setup.c b/trek/setup.c
+index 1f14f27..fab5136 100644
+--- a/trek/setup.c
++++ b/trek/setup.c
+@@ -234,11 +234,14 @@ setup()
+ for (i = 0; i < NQUADS; i++)
+ for (j = 0; j < NQUADS; j++)
+ {
++ signed char tmp;
+ q = &Quad[i][j];
+ q->klings = q->bases = 0;
+ q->scanned = -1;
+ q->stars = ranf(9) + 1;
+- q->holes = ranf(3) - q->stars / 5;
++ tmp = ranf(3) - q->stars / 5;
++ tmp = tmp < 0 ? 0 : tmp;
++ q->holes = tmp;
+ q->qsystemname = 0;
+ }
+
diff --git a/source/y/bsd-games/patches/0008-quiz-Add-answers-to-adults-babies.-Closes-659528.patch b/source/y/bsd-games/patches/0008-quiz-Add-answers-to-adults-babies.-Closes-659528.patch
new file mode 100644
index 00000000..b08ecd08
--- /dev/null
+++ b/source/y/bsd-games/patches/0008-quiz-Add-answers-to-adults-babies.-Closes-659528.patch
@@ -0,0 +1,21 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Thu, 16 Feb 2012 12:53:51 +0100
+Subject: quiz: Add answers to adults/babies. Closes: #659528
+
+---
+ quiz/datfiles/babies | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/quiz/datfiles/babies b/quiz/datfiles/babies
+index 5305c0c..45c4bb3 100644
+--- a/quiz/datfiles/babies
++++ b/quiz/datfiles/babies
+@@ -3,7 +3,7 @@ kitten:cat|fox|skunk|rabbit|bobcat|panther
+ gosling:goose
+ colt|foal:horse|donkey|zebra
+ puppy:dog
+-pup:seal|fox|beaver
++pup:seal|fox|beaver|dog|shark|rat
+ duckling:duck
+ fawn:deer
+ piglet|shoat:pig
diff --git a/source/y/bsd-games/patches/0009-hangman-Error-out-on-1000-unsuitable-words.-Closes-6.patch b/source/y/bsd-games/patches/0009-hangman-Error-out-on-1000-unsuitable-words.-Closes-6.patch
new file mode 100644
index 00000000..b55d7132
--- /dev/null
+++ b/source/y/bsd-games/patches/0009-hangman-Error-out-on-1000-unsuitable-words.-Closes-6.patch
@@ -0,0 +1,46 @@
+From: Peter Pentchev <roam@ringlet.net>
+Date: Thu, 16 Feb 2012 22:37:50 +0100
+Subject: hangman: Error out on 1000 unsuitable words. Closes: #610270
+
+---
+ hangman/getword.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/hangman/getword.c b/hangman/getword.c
+index 1b5396a..dc42a53 100644
+--- a/hangman/getword.c
++++ b/hangman/getword.c
+@@ -50,8 +50,10 @@ getword()
+ FILE *inf;
+ char *wp, *gp;
+ long pos;
++ int tries;
+
+ inf = Dict;
++ tries = 0;
+ for (;;) {
+ pos = (double) rand() / (RAND_MAX + 1.0) * (double) Dict_size;
+ fseek(inf, pos, SEEK_SET);
+@@ -66,7 +68,21 @@ getword()
+ if (!islower((unsigned char)*wp))
+ goto cont;
+ break;
+-cont: ;
++cont:
++ if (++tries >= 1000) {
++ move(MESGY, MESGX);
++ deleteln();
++ deleteln();
++ deleteln();
++ move(MESGY, MESGX);
++ printw("No suitable word found, try using "
++ "another dictionary!");
++ leaveok(stdscr, FALSE);
++ refresh();
++ readch();
++ leaveok(stdscr, TRUE);
++ die(0);
++ }
+ }
+ gp = Known;
+ wp = Word;
diff --git a/source/y/bsd-games/patches/0010-Fix-typos-spotted-by-Lintian.patch b/source/y/bsd-games/patches/0010-Fix-typos-spotted-by-Lintian.patch
new file mode 100644
index 00000000..8556d62d
--- /dev/null
+++ b/source/y/bsd-games/patches/0010-Fix-typos-spotted-by-Lintian.patch
@@ -0,0 +1,35 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Fri, 24 Feb 2012 14:29:11 +0100
+Subject: Fix typos spotted by Lintian
+
+---
+ atc/update.c | 2 +-
+ hack/hack.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/atc/update.c b/atc/update.c
+index 3a145e5..39bbf2a 100644
+--- a/atc/update.c
++++ b/atc/update.c
+@@ -153,7 +153,7 @@ update(dummy)
+ }
+ if (pp->altitude > 9)
+ /* "this is impossible" */
+- loser(pp, "exceded flight ceiling.");
++ loser(pp, "exceeded flight ceiling.");
+ if (pp->altitude <= 0) {
+ for (i = 0; i < sp->num_airports; i++)
+ if (pp->xpos == sp->airport[i].x &&
+diff --git a/hack/hack.c b/hack/hack.c
+index 05141af..6e5028e 100644
+--- a/hack/hack.c
++++ b/hack/hack.c
+@@ -527,7 +527,7 @@ pickup(int all)
+ }
+ lift_some:
+ if (inv_cnt() >= 52) {
+- pline("Your knapsack cannot accomodate anymore items.");
++ pline("Your knapsack cannot accommodate anymore items.");
+ break;
+ }
+ if (wt > -5)
diff --git a/source/y/bsd-games/patches/0011-Fix-format-security-compiling-errors.patch b/source/y/bsd-games/patches/0011-Fix-format-security-compiling-errors.patch
new file mode 100644
index 00000000..e8f26c74
--- /dev/null
+++ b/source/y/bsd-games/patches/0011-Fix-format-security-compiling-errors.patch
@@ -0,0 +1,297 @@
+From: Tobias Quathamer <toddy@debian.org>
+Date: Mon, 26 Mar 2012 10:51:46 +0200
+Subject: Fix format-security compiling errors
+
+---
+ battlestar/room.c | 2 +-
+ cribbage/io.c | 10 +++++-----
+ hack/hack.apply.c | 2 +-
+ hack/hack.eat.c | 2 +-
+ hack/hack.end.c | 4 ++--
+ hack/hack.invent.c | 4 ++--
+ hack/hack.main.c | 2 +-
+ hack/hack.options.c | 2 +-
+ hack/hack.pager.c | 4 ++--
+ hack/hack.potion.c | 2 +-
+ hack/hack.rumors.c | 2 +-
+ hack/hack.timeout.c | 2 +-
+ hunt/hunt/hunt.c | 4 ++--
+ monop/misc.c | 2 +-
+ sail/assorted.c | 6 +++---
+ 15 files changed, 25 insertions(+), 25 deletions(-)
+
+diff --git a/battlestar/room.c b/battlestar/room.c
+index 5cbaf85..f99d5de 100644
+--- a/battlestar/room.c
++++ b/battlestar/room.c
+@@ -58,7 +58,7 @@ writedes()
+ putchar(c);
+ } else {
+ if (c != '*')
+- printf(truedirec(compass, c));
++ printf("%s", truedirec(compass, c));
+ compass++;
+ }
+ }
+diff --git a/cribbage/io.c b/cribbage/io.c
+index 8100ddd..17853b2 100644
+--- a/cribbage/io.c
++++ b/cribbage/io.c
+@@ -103,13 +103,13 @@ msgcrd(c, brfrank, mid, brfsuit)
+ if (brfrank)
+ addmsg("%1.1s", rankchar[c.rank]);
+ else
+- addmsg(rankname[c.rank]);
++ addmsg("%s", rankname[c.rank]);
+ if (mid != NULL)
+- addmsg(mid);
++ addmsg("%s", mid);
+ if (brfsuit)
+ addmsg("%1.1s", suitchar[c.suit]);
+ else
+- addmsg(suitname[c.suit]);
++ addmsg("%s", suitname[c.suit]);
+ return (TRUE);
+ }
+
+@@ -192,7 +192,7 @@ infrom(hand, n, prompt)
+ exit(74);
+ }
+ for (;;) {
+- msg(prompt);
++ msg("%s", prompt);
+ if (incard(&crd)) { /* if card is full card */
+ if (!is_one(crd, hand, n))
+ msg("That's not in your hand");
+@@ -345,7 +345,7 @@ number(lo, hi, prompt)
+ int sum;
+
+ for (sum = 0;;) {
+- msg(prompt);
++ msg("%s", prompt);
+ if (!(p = get_line()) || *p == '\0') {
+ msg(quiet ? "Not a number" :
+ "That doesn't look like a number");
+diff --git a/hack/hack.apply.c b/hack/hack.apply.c
+index 391cbf4..fa91c88 100644
+--- a/hack/hack.apply.c
++++ b/hack/hack.apply.c
+@@ -392,7 +392,7 @@ dig()
+ digtxt = "Now what exactly was it that you were digging in?";
+ mnewsym(dpx, dpy);
+ prl(dpx, dpy);
+- pline(digtxt); /* after mnewsym & prl */
++ pline("%s", digtxt); /* after mnewsym & prl */
+ return (0);
+ } else {
+ if (IS_WALL(levl[dpx][dpy].typ)) {
+diff --git a/hack/hack.eat.c b/hack/hack.eat.c
+index e533ca5..4093f96 100644
+--- a/hack/hack.eat.c
++++ b/hack/hack.eat.c
+@@ -132,7 +132,7 @@ opentin()
+ useup(tin.tin);
+ r = rn2(2 * TTSZ);
+ if (r < TTSZ) {
+- pline(tintxts[r].txt);
++ pline("%s", tintxts[r].txt);
+ lesshungry(tintxts[r].nut);
+ if (r == 1) { /* SALMON */
+ Glib = rnd(15);
+diff --git a/hack/hack.end.c b/hack/hack.end.c
+index 2ffa5cf..3145fd7 100644
+--- a/hack/hack.end.c
++++ b/hack/hack.end.c
+@@ -535,7 +535,7 @@ outentry(int rank, struct toptenentry *t1, int so)
+ if (t1->maxlvl != t1->level)
+ Sprintf(eos(linebuf), " [max %d]", t1->maxlvl);
+ if (quit && t1->death[4])
+- Sprintf(eos(linebuf), t1->death + 4);
++ Sprintf(eos(linebuf), "%s", t1->death + 4);
+ }
+ if (killed)
+ Sprintf(eos(linebuf), " by %s%s",
+@@ -548,7 +548,7 @@ outentry(int rank, struct toptenentry *t1, int so)
+ char *bp = eos(linebuf);
+ char hpbuf[10];
+ int hppos;
+- Sprintf(hpbuf, (t1->hp > 0) ? itoa(t1->hp) : "-");
++ Sprintf(hpbuf, "%s", (t1->hp > 0) ? itoa(t1->hp) : "-");
+ hppos = COLNO - 7 - strlen(hpbuf);
+ if (bp <= linebuf + hppos) {
+ while (bp < linebuf + hppos)
+diff --git a/hack/hack.invent.c b/hack/hack.invent.c
+index c33d502..2c8ed6e 100644
+--- a/hack/hack.invent.c
++++ b/hack/hack.invent.c
+@@ -671,7 +671,7 @@ askchain(objchn, olets, allflag, fn, ckfn, max)
+ if (ckfn && !(*ckfn) (otmp))
+ continue;
+ if (!allflag) {
+- pline(xprname(otmp, ilet));
++ pline("%s", xprname(otmp, ilet));
+ addtopl(" [nyaq]? ");
+ sym = readchar();
+ } else
+@@ -717,7 +717,7 @@ void
+ prinv(obj)
+ struct obj *obj;
+ {
+- pline(xprname(obj, obj_to_let(obj)));
++ pline("%s", xprname(obj, obj_to_let(obj)));
+ }
+
+ static char *
+diff --git a/hack/hack.main.c b/hack/hack.main.c
+index ce4715c..88402f3 100644
+--- a/hack/hack.main.c
++++ b/hack/hack.main.c
+@@ -418,7 +418,7 @@ not_recovered:
+ }
+ if (multi < 0) {
+ if (!++multi) {
+- pline(nomovemsg ? nomovemsg :
++ pline("%s", nomovemsg ? nomovemsg :
+ "You can move again.");
+ nomovemsg = 0;
+ if (afternmv)
+diff --git a/hack/hack.options.c b/hack/hack.options.c
+index ea55cb8..ef7012e 100644
+--- a/hack/hack.options.c
++++ b/hack/hack.options.c
+@@ -268,7 +268,7 @@ doset()
+ if (*--eop == ',')
+ *eop = 0;
+ }
+- pline(buf);
++ pline("%s", buf);
+ } else
+ parseoptions(buf, FALSE);
+
+diff --git a/hack/hack.pager.c b/hack/hack.pager.c
+index d72d800..03c0847 100644
+--- a/hack/hack.pager.c
++++ b/hack/hack.pager.c
+@@ -104,7 +104,7 @@ dowhatis()
+ buf[0] = q;
+ (void) strncpy(buf + 1, " ", 7);
+ }
+- pline(buf);
++ pline("%s", buf);
+ if (ep[-1] == ';') {
+ pline("More info? ");
+ if (readchar() == 'y') {
+@@ -298,7 +298,7 @@ cornline(mode, text)
+ }
+ /* --- now we really do it --- */
+ if (mode == 2 && linect == 1) /* topline only */
+- pline(texthead->line_text);
++ pline("%s", texthead->line_text);
+ else if (mode == 2) {
+ int curline, lth;
+
+diff --git a/hack/hack.potion.c b/hack/hack.potion.c
+index 9d210d4..a906cb3 100644
+--- a/hack/hack.potion.c
++++ b/hack/hack.potion.c
+@@ -286,7 +286,7 @@ strange_feeling(obj, txt)
+ if (flags.beginner)
+ pline("You have a strange feeling for a moment, then it passes.");
+ else
+- pline(txt);
++ pline("%s", txt);
+ if (!objects[obj->otyp].oc_name_known && !objects[obj->otyp].oc_uname)
+ docall(obj);
+ useup(obj);
+diff --git a/hack/hack.rumors.c b/hack/hack.rumors.c
+index 383bba9..513d395 100644
+--- a/hack/hack.rumors.c
++++ b/hack/hack.rumors.c
+@@ -112,7 +112,7 @@ outline(rumf)
+ if ((ep = strchr(line, '\n')) != 0)
+ *ep = 0;
+ pline("This cookie has a scrap of paper inside! It reads: ");
+- pline(line);
++ pline("%s", line);
+ }
+
+ void
+diff --git a/hack/hack.timeout.c b/hack/hack.timeout.c
+index ef239e4..2a8ee54 100644
+--- a/hack/hack.timeout.c
++++ b/hack/hack.timeout.c
+@@ -126,7 +126,7 @@ stoned_dialogue()
+ long i = (Stoned & TIMEOUT);
+
+ if (i > 0 && i <= SIZE(stoned_texts))
+- pline(stoned_texts[SIZE(stoned_texts) - i]);
++ pline("%s", stoned_texts[SIZE(stoned_texts) - i]);
+ if (i == 5)
+ Fast = 0;
+ if (i == 3)
+diff --git a/hunt/hunt/hunt.c b/hunt/hunt/hunt.c
+index 28321bc..58d112d 100644
+--- a/hunt/hunt/hunt.c
++++ b/hunt/hunt/hunt.c
+@@ -910,7 +910,7 @@ leave(eval, mesg)
+ int serrno = errno;
+ fincurs();
+ errno = serrno;
+- err(eval, mesg ? mesg : "");
++ err(eval, "%s", mesg ? mesg : "");
+ }
+
+ /*
+@@ -924,7 +924,7 @@ leavex(eval, mesg)
+ const char *mesg;
+ {
+ fincurs();
+- errx(eval, mesg ? mesg : "");
++ errx(eval, "%s", mesg ? mesg : "");
+ }
+
+ #if !defined(USE_CURSES) && defined(SIGTSTP)
+diff --git a/monop/misc.c b/monop/misc.c
+index 1d3a566..c363ca2 100644
+--- a/monop/misc.c
++++ b/monop/misc.c
+@@ -101,7 +101,7 @@ get_int(prompt)
+
+ for (;;) {
+ inter:
+- printf(prompt);
++ printf("%s", prompt);
+ num = 0;
+ for (sp = buf; (c=getchar()) != '\n'; *sp++ = c)
+ if (c == -1) /* check for interrupted system call */
+diff --git a/sail/assorted.c b/sail/assorted.c
+index cfc7d2a..ecb8406 100644
+--- a/sail/assorted.c
++++ b/sail/assorted.c
+@@ -163,7 +163,7 @@ table(struct ship *from, struct ship *on, int rig, int shot, int hittable, int r
+ errx(1, "Unknown shot type %d", shot);
+
+ }
+- makesignal(from, message, on);
++ makesignal(from, "%s shot on $$", on, message);
+ if (roll == 6 && rig) {
+ switch(Rhit) {
+ case 0:
+@@ -190,7 +190,7 @@ table(struct ship *from, struct ship *on, int rig, int shot, int hittable, int r
+ default:
+ errx(1, "Bad Rhit = %d", Rhit);
+ }
+- makemsg(on, message);
++ makemsg(on, "%s", message);
+ } else if (roll == 6) {
+ switch (Hhit) {
+ case 0:
+@@ -218,7 +218,7 @@ table(struct ship *from, struct ship *on, int rig, int shot, int hittable, int r
+ default:
+ errx(1, "Bad Hhit = %d", Hhit);
+ }
+- makemsg(on, message);
++ makemsg(on, "%s", message);
+ }
+ /*
+ if (Chit > 1 && on->file->readyL&R_INITIAL && on->file->readyR&R_INITIAL) {
diff --git a/source/y/bsd-games/patches/0012-Fix-include-stdio.h-C-incompatibility.patch b/source/y/bsd-games/patches/0012-Fix-include-stdio.h-C-incompatibility.patch
new file mode 100644
index 00000000..9edb1b39
--- /dev/null
+++ b/source/y/bsd-games/patches/0012-Fix-include-stdio.h-C-incompatibility.patch
@@ -0,0 +1,43 @@
+From: Sven Joachim <svenjoac@gmx.de>
+Date: Wed, 1 Nov 2017 09:03:28 +0100
+Subject: Fix include/stdio.h C++ incompatibility
+
+I have seen the following error when building bsdgames with
+libncurses6:
+
+In file included from /usr/include/wchar.h:36:0,
+ from /usr/include/curses.h:400,
+ from dab/box.cc:48:
+include/stdio.h:38:14: error: conflicting declaration of 'char* fgetln(FILE*, size_t*)' with 'C' linkage
+ extern char *fgetln(FILE *stream, size_t *len);
+ ^~~~~~
+In file included from /usr/include/curses.h:183:0,
+ from dab/box.cc:48:
+include/stdio.h:38:14: note: previous declaration with 'C++' linkage
+ extern char *fgetln(FILE *stream, size_t *len);
+ ^~~~~~
+GNUmakefile:298: recipe for target 'dab/box.o' failed
+
+Declaring fgetln as extern "C" fixes this. The patch has been taken
+from the Fedora bsd-games package, see
+https://src.fedoraproject.org/rpms/bsd-games/blob/ac743bec7031199ec6fc09b6eb3760ffcfcfd277/f/bsd-games-2.17-stdio-c++.patch.
+---
+ include/stdio.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/include/stdio.h b/include/stdio.h
+index 32a4b71..b1ac049 100644
+--- a/include/stdio.h
++++ b/include/stdio.h
+@@ -35,5 +35,11 @@
+ #include_next <stdio.h>
+
+ #ifndef HAVE_fgetln
++#ifdef __cplusplus
++extern "C" {
++#endif
+ extern char *fgetln(FILE *stream, size_t *len);
++#ifdef __cplusplus
++}
++#endif
+ #endif
diff --git a/source/y/bsd-games/patches/0013-Update-acronyms.patch b/source/y/bsd-games/patches/0013-Update-acronyms.patch
new file mode 100644
index 00000000..50ae94da
--- /dev/null
+++ b/source/y/bsd-games/patches/0013-Update-acronyms.patch
@@ -0,0 +1,2234 @@
+From: "Dr. Tobias Quathamer" <toddy@debian.org>
+Date: Thu, 26 Apr 2018 14:52:22 +0200
+Subject: Update acronyms.
+
+Source: http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/
+---
+ wtf/acronyms | 448 +++++++++++++++---
+ wtf/acronyms.comp | 1345 +++++++++++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 1643 insertions(+), 150 deletions(-)
+
+diff --git a/wtf/acronyms b/wtf/acronyms
+index 5baeef2..07598d1 100644
+--- a/wtf/acronyms
++++ b/wtf/acronyms
+@@ -1,252 +1,590 @@
+-$NetBSD: acronyms,v 1.145 2005/02/18 01:40:49 jsm Exp $
+-
++$NetBSD: acronyms,v 1.265 2018/01/13 03:35:40 pgoyette Exp $
++10Q thank you
++10X thanks
++1337 elite ("leet")
++224 today, tomorrow, forever
++31337 elite ("eleet")
++4TW for the win
++A/S/L age/sex/location
++AAMOF as a matter of fact
++ABD all but dissertation
++AC audible chuckle
++ADD attention deficit disorder
++ADHD attention deficit (and) hyperactivity disorder
++ADN any day now
++ADOS attention deficit ... oh, shiny!
++AEAP as early as possible
++AFAIAC as far as I am concerned
+ AFAIC as far as I'm concerned
+-AFAICR as far as I can recall
++AFAICR as far as I can {recall,remember}
++AFAICS as far as I can see
+ AFAICT as far as I can tell
+ AFAIK as far as I know
+-AFAIR as far as I recall
++AFAIR as far as I {recall,remember}
+ AFAIU as far as I understand
+ AFD away from desktop
+ AFK away from keyboard
+-AFU all fucked up
+ AFW away from window
++AGM annual general meeting
++AINEC and it's not even close
++AISE as I see it
+ AIU as I understand
+ AIUI as I understand it
+ AKA also known as
++AM ante meridiem
++AMA ask me anything
++AMOL a mountain of love
+ ASAIC as soon as I can
+ ASAP as soon as possible
++ASL age/sex/location
++ATEOTD at the end of the day
+ ATM at the moment
++ATM {automated,automatic} teller machine
++ATW around the world
++AWK Aho, Weinberger, [and] Kernighan
+ AWOL absent without official leave
+ AYBABTU all your base are belong to us
++AYF all your fault
++AYOR at your own risk
+ AYT are you there
++B& banned
+ B/C because
+-B/S bullshit
++B/W bandwidth
+ B/W between
++BAI goodbye
++BAK back at keyboard
+ BBIAB be back in a bit
+ BBL [I'll] be back later
++BBR burnt beyond repair
+ BBS be back soon
+ BBT be back tomorrow
+-BFD big fucking deal
++BCNU be seeing you
++BCNUL8R be seeing you later
++BCP best current practice
++BF best friend
++BF boyfriend
++BFF best {friend,friends} forever
+ BIAB back in a bit
+ BIAF back in a few
+ BIALW back in a little while
+ BIAS back in a second
+ BIAW back in a while
+-BOATILAS bend over and take it like a slut
++BIDI boy, I did it
++BNYA burned now you are
++BOC but of course
+ BOFH bastard operator from hell
+-BOGAHICA bend over, grab ankles, here it comes again
+-BOHICA bend over here it comes again
++BOT back on topic
++BPM beam propagation method
++BPM beats per minute
+ BRB [I'll] be right back
+-BS bullshit
++BSD booze, sex, drugs
+ BTDT been there, done that
++BTFT been there, fixed that
+ BTTH boot to the head
+ BTW by the way
++BYOB bring your own {beer,booze}
++CC credit card
++CEO chief executive officer
++CFV call for votes
++CFY calling for you
++CG center of gravity
++CHANOPS channel operator status
+ CMIIW correct me if I'm wrong
+ CNP continued [in my] next post
+ COB close of business [day]
+ COTS commercial off-the-shelf
++CPC cost per click
++CPE customer premises equipment
++CRM customer relationship management
++CTN can't talk now
++CU see you
++CUL see you later
++CYA see ya
+ CYA see you around
++CYE check your email
++D/B/A doing business as
+ D/L download
++DBA doing business as
++DBEYR don't believe everything you read
++DIAFYO did I ask for your opinion?
+ DIY do it yourself
+ DKDC don't know, don't care
++DM direct message
++DM dungeon master
++DME durable medical equipment
++DMEPOS durable medical equipment, prosthetics, orthotics and supplies
++DMZ demilitarized zone
++DND do not disturb
++DNF did not finish
++DNFT do not feed troll
++DOA dead on arrival
++DRY don't repeat yourself
+ DSTM don't shoot the messenger
+ DTRT do the right thing
+ DTWT do the wrong thing
+ DWIM do what I mean
++DYK do you know?
++EA early adopter
++ECR electronic cash register
++EDS eternal downward spiral
++EFT electronic funds transfer
+ EG evil grin
++EIE enough is enough
+ EMSG email message
+ EOB end of business [day]
+-EOD end of discussion
++EOD end of {day,discussion}
+ EOL end of life
++EOM end of message
++EOS end of story
++ETA edited to add
++ETA estimated time of arrival
+ ETLA extended three letter acronym
++ETR early to rise
+ EWAG experienced wild-ass guess
++EZ easy
++EZPZ easy-peasy
++F9 fine
+ FAQ frequently asked question
+-FCFS first come first served
+-FIGJAM fuck I'm good, just ask me
+-FIIK fuck[ed] if I know
+-FIIR fuck[ed] if I remember
+-FM fucking magic
+-FOAD fall over and die
++FBOW for better or worse
++FCFS first come, first served
++FCOL for crying out loud
++FFS free for shipping
++FITB fill in the blank
++FNO for nerds only
++FNO from now on
++FOC free of charge
++FPS first person shooter
++FPS frames per second
+ FSDO for some definition of
+ FSVO for some value of
+-FTFM fuck the fuckin' manual!
+-FUBAR fucked up beyond all recognition
+-FUD fear, uncertainty and doubt
++FTBFS fails to build from source
++FTFY fixed that for you
++FTHOI for the {heck,hell} of it
++FTL faster than light
++FTL for the loss
++FTR for the record
++FTTT from time to time
++FTW for the win
++FUD fear, uncertainty, [and] doubt
+ FWIW for what it's worth
++FYEO for your eyes only
+ FYI for your information
+ G grin
+ G/C garbage collect
++G2G got to go
++G2K good to know
++GA go ahead
+ GAC get a clue
+ GAL get a life
++GBTW get back to work
++GF girlfriend
++GFU good for you
++GFY good for you
++GG good game
++GGA good game all
++GGP good game partner
++GGWP good game, well played
+ GIGO garbage in, garbage out
++GIYF Google is your friend
++GJ good job
++GL good luck
++GLHF good luck, have fun
++GLINE global kill line
++GLWT good luck with that
++GM game master
++GMT Greenwich mean time
+ GMTA great minds think alike
+-GTFO get the fuck out
++GOK God only knows
++GOP Grand Old Party
++GOWI get on with it
++GPS global positioning system
++GR8 great
+ GTG got to go
++GTH go to hell
++GTSY {glad,good} to see you
++GWS get well soon
++H8 hate
+ HAND have a nice day
++HE how embarrasing
++HF have fun
+ HHIS hanging head in shame
++HHOS ha ha, only serious
+ HICA here it comes again
++HME home medical equipment
++HNY happy new year
++HOAS hold on a second
++HOPS half-operator status
+ HTH hope this helps
+ IAC in any case
++IAE in any event
+ IANAL I am not a lawyer
++IAW in another window
++IAWTC I agree with this comment
++IAWTP I agree with this post
++IAY I adore you
++IB I'm back
+ IC I see
+-ICBW I could be wrong
++ICBW I could be {worse,wrong}
+ ICCL I couldn't care less
+-IHAFC I haven't a fucking clue
++ICUR I see you are
++ICYMI in case you missed it
++IDC I don't care
++IDGI I don't get it
++IDGW in a good way
++IDI I doubt it
++IDIFTL I did it for the lulz
++IDK I don't know
++IDRC I don't really care
++IDTS I don't think so
++IDTT I drink to that
++IFF if and only if
++IFTTT if this then that
+ IHBW I have been wrong
+-IHNFC I have no fucking clue
+ IIANM if I am not mistaken
+-IIRC if I recall correctly
++IIRC if I {recall,remember} correctly
+ IIUC if I understand correctly
++IKR I know, right?
++IKWYM I know what you mean
++ILU I love you
++ILY I love you
+ IMAO in my arrogant opinion
++IMBO in my biased opinion
+ IMCO in my considered opinion
++IME in my experience
+ IMHO in my humble opinion
+ IMNSHO in my not so humble opinion
+ IMO in my opinion
++INB4 in before
++INPO in no particular order
+ IOW in other words
++IPML I pissed myself laughing
++IQ intelligence quotient
++IRCOP Internet relay chat {operator,operators}
++IRCOPS Internet relay chat operator status
+ IRL in real life
++IRT in real time
++IRT in regards to
+ ISAGN I see a great need
++ISBN International Standard Book Number
+ ISTM it seems to me
+-ISTR I seem to recall
++ISTR I seem to {recall,remember}
++ITC in this {channel,chat}
++ITT in this thread
+ ITYM I think you mean
++IUD insert usual disclaimers
++IUSS if you say so
++IW it's worse
+ IWBNI it would be nice if
++IYD in your dreams
++IYKWIM if you know what I mean
+ IYSS if you say so
++IYSWIM if you see what I mean
+ J/K just kidding
+-JHD just hit ``delete''
++JAM just a minute
++JAS just a second
++JFK John Fitzgerald Kennedy
++JFTR just for the record
++JFYI just for your information
++JGI just Google it
++JGI just got it
++JHD just hit delete
+ JIC just in case
++JJA just joking around
+ JK just kidding
+ JMO just my opinion
++JSYK just so you know
+ JTLYK just to let you know
++JW just wondering
+ KISS keep it simple, stupid
+ KITA kick in the ass
++KK okay, okay
++KLINE kill line
++KMA keep me advised
++KMA keep moving ahead
++KMA kill me already
+ KNF kernel normal form
++KOS kill on sight
++KTHX okay, thanks
++KTHXBAI okay, thanks. Goodbye.
++KWIM know what I mean?
++L8 late
+ L8R later
+-LART luser attitude readjustment tool (ie, hammer)
++LART luser attitude readjustment tool
+ LBNL last but not least
++LGTM looks good to me
+ LJBF let's just be friends
+ LMAO laughing my ass off
++LMC let me check
++LMGTFY let me google that for you
++LMHO laughing my head off
++LMK let me know
++LMNO laughing my nuts off
+ LMSO laughing my socks off
++LOIC low orbit ion cannon
+ LOL laughing out loud
++LP long playing [record]
+ LTNS long time no see
++LWYL laugh with you later
++M8 mate
++MAD mutually assured destruction
++MBA master of business administration
++MFW my face when
+ MIA missing in action
++MMB message me back
++MO modus operandi
+ MOTAS member of the appropriate sex
+ MOTOS member of the opposite sex
+ MOTSS member of the same sex
+ MTF more to follow
++MVP minimum viable product
++MVP most valuable player
+ MYOB mind your own business
++N/A not {applicable,available}
+ N/M never mind
++NAFAIK not as far as I know
++NB nota bene
+ NBD no big deal
+-NFC no fucking clue
+-NFI no fucking idea
+-NFW no fucking way
++NE1 anyone
++NEDM not even Doom music
++NFA no flaming allowed
++NFC no functional change
++NIFOC naked in front of computer
+ NIH not invented here
++NIMBY not in my backyard
++NM never mind
+ NMF not my fault
+ NMP not my problem
++NMU not much, you?
++NOM no offence meant
++NOOB newbie
++NORP normal ordinary {respectable,responsible} person
+ NOYB none of your business
+-NOYFB none of your fucking business
+ NP no problem
++NPC non-player character
+ NRFPT not ready for prime time
+ NRN no reply necessary
++NRN not right now
++NSFW not suitable for work
++NTN no thanks needed
++NUNP no users, no problems
++NVM never mind
++NW no way
++NXT next
++NYPA not your personal army
++O2W off to work
++OAO over and out
++OBV obviously
++OBVS obviously
++ODTW others do the work (cf. "otdw source")
++OFC of course
++OH other half
+ OIC oh, I see
+-OMG oh, my god
++OMG oh my God
++OMW on my way
++ONNA oh no, not again
++ONNTA oh no, not this again
++OOB out of bounds
++OOC out of curiosity
++OOI out of interest
++OOSOOM out of sight, out of mind
++OPS operator status
++OPS operators
++ORITE oh, right
+ OT off topic
+ OTL out to lunch
+ OTOH on the other hand
++OTP one true pairing
++OTS off the shelf
+ OTT over the top
+ OTTOMH off the top of my head
++OWTTE or words to that effect
++PC player character
++PC politically correct
++PCB polychlorinated biphenyl(s)
++PD police department
++PDA public display of affection
++PDQ pretty darn quick
++PDS please don't shout
++PEBCAK problem exists between chair and keyboard
+ PEBKAC problem exists between keyboard and chair
+-PFO please fuck off
++PFI pay for inclusion
+ PFY pimply faced youth
++PHB pointy haired boss
++PIN personal identification number
+ PITA pain in the ass
++PITR {parent,parents} in the room
+ PKSP pound keys and spew profanity
++PM post meridiem
++PMFI problem magically fixed itself
++PMFJI pardon me for jumping in
++PMSL pissing myself laughing
+ PNG persona non grata
+ PNP plug and pray
+ POC point of contact
++POC proof of concept
+ POLA principle of least astonishment
+ POLS principle of least surprise
+-POS piece of shit
++POS point of sale
++POV point of view
++PPL people
+ PPL pretty please
++PPP petty pet peeve
++PPS pulse per second (signal)
++PR public relations
++PSA prostate-specific antigen
++PSA public service announcement
++PTA parent-teacher association
++PTO {paid,personal} time off
++PTO parent-teacher organization
++PTO please turn over
++PTO power takeoff
+ PTV parental tunnel vision
+ QED quod erat demonstrandum
++QFT quoted for truth
++RA residential advisor
+ RFC request for comments
++RFD request for discussion
++RFE request for enhancements
+ RIP rest in peace
+ RL real life
+ RLC rod length check
++RMS Richard Matthew Stallman
+ ROFL rolling on floor laughing
+ ROFLMAO rolling on floor laughing my ass off
++ROI return on investment
+ ROTFL rolling on the floor laughing
+ RP responsible person
++RR railroad
++RSI repetitive strain injury
+ RSN real soon now
+-RTFB read the fine/fucking book
+-RTFC read the fine/fucking code
+-RTFD read the fine/fucking documentation
+-RTFM read the fine/fucking manual
+-RTFMP read the fine/fucking man page
+-RTFS read the fine/fucking source
++RSVP respondez s'il vous plait ("reply please")
++S/T self titled
++SAR search and rescue
++SAR some assembly required
+ SCNR sorry, could not resist
+ SEP someone else's problem
+-SFA sweet fuck all
++SERP search engine results page
++SFAICT so far as I can tell
+ SHID slaps head in disgust
+ SIMCA sitting in my chair amused
++SITD still in the dark
++SMAP Soil Moisture Active Passive
++SMH shaking my head
+ SMLSFB so many losers, so few bullets
+ SMOP simple matter of programming
+-SNAFU situation normal, all fucked up
+ SNERT snot-nosed egotistical rude teenager
+ SNMP sorry, not my problem
+-SNR signal to noise ratio
+ SO significant other
+ SOB son of [a] bitch
+-SOL shit out [of] luck
+ SOP standard operating procedure
++SRS serious
++SRSLY seriously
+ SSIA subject says it all
+-STFA search the fucking archives
+-STFU shut the fuck up
+-STFW search the fucking web
++SSTO single stage to orbit
++STW search the web
+ SUS stupid user syndrome
++SUX sucks
++SUX2BU sucks to be you
+ SWAG silly, wild-assed guess
+ SWAHBI silly, wild-assed hare-brained idea
+ SWMBO she who must be obeyed
++SYS see you soon
++TA teaching assistant
+ TANSTAAFL there ain't no such thing as a free lunch
++TBA to be announced
+ TBC to be continued
+ TBD to be {decided,determined,done}
++TBH to be honest
+ TBOMK the best of my knowledge
++TCB taking care of business
++TCO taken care of
++TCO total cost of ownership
++TFOA things falling off aircraft
++TFW that feeling when
++TGIF thank goodness it's Friday
+ THNX thanks
+ THX thanks
+ TIA thanks in advance
++TIAVP this is a volunteer project
++TIC tonque in cheek
++TIL today I learned
+ TINC there is no cabal
++TINLA this is not legal advice
++TINWIS this is not what I said
++TJM that's just me
+ TLA three letter acronym
+-TLB translation lookaside buffer
++TLA true love always
++TLC tender loving care
++TLDR too long, didn't read
++TM trademark
++TM trust me
+ TMA too many abbreviations
++TMG too much government
+ TMI too much information
++TMJ temporomandibular joint
++TMK to my knowledge
++TMTOWTDI there's more than one way to do it
+ TNF The NetBSD Foundation
++TOC table of contents
++TOCTOU time of check to time of use
+ TOEFL test of english as a foreign language
++TOH to other half
++TP toilet paper
+ TPTB the powers that be
+ TRT the right thing
+ TTBOMK to the best of my knowledge
+ TTFN ta ta for now
++TTM to the moderator
++TTT thought that too
+ TTYL talk to you later
++TTYS talk to you soon
++TWAIN thing without an interesting name
++TWDT the whole damn thing
+ TWIAVBP the world is a very big place
+ TY thank you
+ TYVM thank you very much
+ U/L upload
++UGT universal greeting time
++UR your
++UR {you're, you are}
+ UTSL use the source, Luke
++VCR video cassette recorder
+ VEG very evil grin
++VIP very important person
+ W/ with
++W/E whatever
+ W/O without
++W8 wait
++WAFWOT what a foolish waste of time
+ WAG wild-ass guess
+ WB welcome back
++WCPGW what could possibly go wrong
++WDYMBT what do you mean by that
++WELC working effectively with legacy code
++WFH working from home
+ WFM works for me
+ WIBNI wouldn't it be nice if
+ WIP work in progress
+-WOFTAM waste of fucking time and money
++WMNC watch me not care
+ WOMBAT waste of money, brain, and time
+ WRT with respect to
+-WTF {what,where,who,why} the fuck
+-WTH {what,where,who,why} the hell
+-WYSIWYG what you see is what you get
++WTB {waiting,want,willing} to buy
++WTF where's the food
++WTG way to go
++WTH {what,when,where,who,why} the hell
++WTS {waiting,want,willing} to sell
++WTT {waiting,want,willing} to trade
++WWJD what would Jesus do?
++YAGNI you ain't gonna need it
+ YALIMO you are lame, in my opinion
++YAOTM yet another off-topic message
++YCTAT you can't troll a troll
++YGM you got mail
+ YHBT you have been trolled
+ YHL you have lost
+ YKWIM you know what I mean
+-YMA yo momma's ass
+ YMMV your mileage may vary
++YOLO you only live once
+ YW you're welcome
++YWSYLS you win some, you lose some
++ZIP zoning improvement plan
+diff --git a/wtf/acronyms.comp b/wtf/acronyms.comp
+index 6f2b66f..e27697c 100644
+--- a/wtf/acronyms.comp
++++ b/wtf/acronyms.comp
+@@ -1,319 +1,1474 @@
+-$NetBSD: acronyms.comp,v 1.58 2005/02/16 00:04:23 kleink Exp $
+-
++$NetBSD: acronyms.comp,v 1.193 2018/03/01 19:09:33 ginsbach Exp $
+ 3WHS three-way handshake
++8VSB 8-state vestigial side band modulation
++AA anti-aliasing
++AAA authentication, authorization, [and] accounting
++AAT average access time
+ ABI application binary interface
++ABR available bit rate
++AC alternating current
++ACI adjacent channel interferer
++ACID atomicity, consistency, isolation, durability
++ACK Amsterdam compiler kit
++ACK acknowledgement
+ ACL access control list
++ACL active current loop
++ACP auxillary control {process,program}
+ ACPI advanced configuration and power interface
++ACS access control set
++ACU automatic calling unit
++ADB Apple desktop bus
+ ADC analog [to] digital converter
++ADD acronym driven development
++ADO active data objects
++ADP automatic data processing
+ ADPCM adaptive differential pulse code modulation
++ADS alternate data stream
+ ADSL asymmetric digital subscriber line
++ADT abstract data type
++AES Advanced Encryption Standard
++AFS Andrew File System
++AGC automatic gain control
+ AGP accelerated graphics port
++AI analog input
++AI artificial intelligence
++AL access list
++AL active link
++ALE address latch enable
++ALS ambient light sensor
++ALU arithmetic and logical unit
++ALUA asymmetric logical unit access
++AM access method
++AM alignment mask
+ AM amplitude modulation
+ AMI alternate mark inversion
+-ANSI american national standards institute
++AMP asymmetric multiprocessing
++AMQP advanced message queuing protocol
++AMT active management technology
++AN Arabic number
++ANR application not responding
++ANSI American National Standards Institute
++AO analog output
++AOL Alert-on-LAN
++AOS add or subtract
+ AP access point
++AP application processor
+ API application programming interface
+ APIC advanced programmable interrupt controller
+-ARP address resolution protocol
++APIPA automatic private IP addressing
++APT advanced persistent threat
++AQM active queue management
++ARAT always running APIC timer
++ARC adaptive replacement cache
++ARC automatic reference counting
++ARM Advanced RISC Machines
++ARP Address Resolution Protocol
++ARPA Advanced Research Projects Agency
+ ARQ automatic repeat request
++ARR address range register
++ARU audio response unit
+ AS autonomous system
++ASC advanced smart cache
++ASCII American Standard Code for Information Interchange
++ASD agile software development
++ASE advanced software environment
++ASIC application-specific integrated circuit
++ASK amplitude shif keying
++ASLR address space layout randomization
+ ASN autonomous system number
+-ASCII american standard code for information interchange
++ASPM active state power management
++ASQ automated software quality
++ASR address space register
++AST abstract syntax tree
++AST asynchronous trap
++AT access time
+ AT advanced technology
+ ATA advanced technology attachment
+ ATAPI advanced technology attachment packet interface
++ATC address translation cache
+ ATM asynchronous transfer mode
+ ATX advanced technology extended
++AV anti virus
++AVL Adelson-Velsky-Landis
++AVX advanced vector extensions
++BA byte align
++BAL basic assembly language
++BAR base address register
++BBS bulletin board system
++BCC blind carbon copy
++BCD binary coded decimal
++BCR byte count register
++BCS base configuration space
++BD baud
++BDD binary decision diagram
++BDI bit deinterleave
++BDUF big design up front
+ BEDO burst extended data output
+ BER basic encoding rules
+-BER bit error rate
+-BGP border gateway protocol
+-BIOS basic input/output system
++BER bit error {rate,ratio}
++BFD binary {file,format} descriptor
++BFKL big fscking kernel lock
++BFS breadth-first search
++BFT binary file transfer
++BGA ball grid array
++BGP Border Gateway Protocol
++BGPSEC BGP Security
++BIND Berkeley Internet Name Daemon
++BIOS Basic Input/Output System
++BIOS built-in operating system
++BIST built-in self-test
++BIU bus interface unit
++BKDG BIOS and kernel developer's guide
++BLAS basic linear algebra subprograms
++BLC back light control
+ BLOB binary large object
++BM bus master
++BMC baseboard management controller
++BMIC bus master interface controller
++BN boundary neutral
++BNF Backus-Naur form
++BO binary output
++BOF beginning of file
++BOM beginning of message
++BOM byte order mark
++BP base pointer
++BP boot processor
++BPB BIOS parameter block
++BPDU bridge protocol data unit
++BPF Berkeley Packet Filter
++BPI bits per inch
++BPM business process modelling
+ BPS bits per second
+-BSD berkeley software distribution
++BPSK binary phase shift keying
++BQS Berkeley quality software
++BRE basic regular expression
++BS backspace
++BS binary sequence
++BSA basic service area
++BSD Berkeley Software Distribution
++BSF bit scan forward
++BSOD blue screen of death
++BSP binary space partition
++BSP board support package
++BSP bootstrap processor
++BSR bit scan reverse
++BSS basic service set
++BSS block started by symbol
++BSSID basic service set identifier
++BT BitTorrent
++BT Bluetooth
++BT bit test
++BTC bit test [and] complement
++BTR bit test [and] reset
++BTS bit test [and] set
++BTS bug tracking system
++BW bandwidth
++BWM block-write mode
++CA certificate authority
+ CAD computer-aided design
+-CAV constant angular velocity (as opposed to CLV)
++CAM computer assisted manufacturing
++CAM conditional access module
++CAM content addressable memory
++CARP Common Address Redundancy Protocol
++CAS column address strobe
++CAS compare and swap
++CAS computer algebra system
++CASE computer aided software engineering
++CAU control access unit
++CAV constant angular velocity
++CBC cipher block chaining
++CBR constant bit rate
++CC carbon coby
+ CCD charge coupled device
++CCI co-channel interferer
++CCNUMA cache-coherent non-uniform memory access
++CD cache disable
+ CD compact disc
+ CDDA compact disc digital audio
++CDMA code division multiple access
++CDP Cisco Discovery Protocol
+ CDRAM cache dynamic random access memory
+ CER canonical encoding rules
+-CGA color graphics array
++CF compact flash
++CFB cipher feedback
++CFG context-free grammar
++CFG control-flow graph
++CG control gate
++CGA Color Graphics Adapter
+ CGI common gateway interface
++CGN Carrier-Grade NAT
++CHAP Challenge-Handshake Authentication Protocol
+ CHS cylinder/head/sector
+-CIDR classless inter-domain routing
++CI continuous integration
++CI {common,component} interface
++CIDR Classless Inter-Domain Routing
++CIFS Common Internet File System
++CIL common intermediate language
++CIR carrier-to-interference ratio
+ CIS contact image sensor
++CISC complex instruction set {computer,computing}
++CJK Chinese, Japanese, [and] Korean
++CLF common log format
+ CLI command line interface
+-CLV constant linear velocity (as opposed to CAV)
++CLR common language runtime
++CLTT closed loop thermal throttling
++CLUT color look-up table
++CLV constant linear velocity
++CM configuration management
++CMA concert multithread architecture
++CMS {configuration,content,course} management system
++CMI control {management,method} interface
++CMOS complementary metal-oxide-semiconductor
++CMP chip multi-processing
++CMS content management system
+ CMYK cyan magenta yellow black
++CN {common,canonical} name
++CNC computer numerical control
++CNR carrier-to-noise ratio
++COF current operating frequency
++COFDM coded orthogonal frequency division multiplexing
+ COFF common object file format
++COM component object model
++COMA cache-only memory architecture
++CORBA common object request broker architecture
+ COW copy-on-write
++CP continuous pilot
++CPB core performance boost
++CPE common phase error
++CPG clock pulse generator
++CPL current privilege level
++CPLD complex programmable logic device
++CPP C preprocessor
++CPS characters per second
++CPT command pass through
+ CPU central processing unit
++CR carriage return
++CRC cyclic redundancy check
++CRL carrier recovery loop
+ CRLF carriage return line feed
+ CRT cathode ray tube
++CS cable select
++CS chip select
++CS code segment
++CS computer science
++CSDL {common,conceptual} schema definition language
++CSI channel state information
++CSI common system interface
+ CSMA carrier sense multiple access
+ CSMA/CA carrier sense multiple access with collision avoidance
+ CSMA/CD carrier sense multiple access with collision detection
++CSR control [and] status registers
++CSRG Computer Systems Research Group
+ CSS cascading style sheets
++CSV comma-separated values
++CTM close to metal
++CTR counter [mode]
+ CTS clear to send
+-CVS concurrent versions system
++CUA common user access
++CUT coordinated universal time
++CV control voltage
++CVE common vulnerabilities and exposures
++CVS Concurrent Versions System
++DA destination address
++DAA distributed application architecture
++DAB digital audio broadcasting
+ DAC digital [to] analog converter
++DAC discretionary access control
++DAD duplicate address detection
++DANE DNS-based Authentication of Named Entities
++DAO disk at once
++DAP Directory Access Protocol
++DAT digital audio tape
++DAT dynamic acceleration technology
++DB database
++DBA database administrator
++DBA dynamic bandwidth allocation
++DBB data bus buffer
++DBC design by contract
++DBL dynamic buffer limiting
++DBMS database management system
++DBS database server
++DC direct current
++DCC Direct Client-to-Client
++DCC direct cable connect
++DCD data carrier detect
+ DCE data control equipment
+ DCE distributed computing environment
++DCOM distributed component object model
++DCOP Desktop COmmunication Protocol
++DCS data collection systems
+ DCT discrete cosine transform
++DCU data cache unit
+ DDC display data channel
++DDE dynamic data exchange
++DDK device driver kit
++DDL data description language
+ DDR double data rate
+-DDWG digital display working group
++DDS direct digital sound
++DDWG Digital Display Working Group
++DE debugging extensions
++DE desktop environment
++DEA data encryption algorithm
++DEK data encryption key
++DEP data execution prevention
+ DER distinguished encoding rules
+-DFT discrete fourier transform
+-DHCP dynamic host configuration protocol
++DES Data Encryption Standard
++DF don't fragment
++DFA deterministic finite automaton
++DFC data flow control
++DFS depth first search
++DFS distributed file system
++DFT diagnostic function test
++DFT discrete Fourier transform
++DGL data generation language
++DH Diffie-Hellman
++DHCP Dynamic Host Configuration Protocol
+ DIFS distributed inter-frame space
++DIMM dual inline memory module
++DIRT design in real time
++DL diode logic
++DL discrete logarithm
++DL download
+ DLE data link escape
++DLL dynamic link library
++DLP discrete logarithm problem
+ DMA direct memory access
+-DNS domain name system
++DMI desktop management interface
++DMS document management system
++DMT discrete multitone modulation
++DNARD Digital network appliance reference design
++DND drag and drop
++DNS Domain Name System
++DNSSEC DNS Security Extensions
++DOE distributed object environment
++DOF data over fibre
++DOM document object model
+ DOS denial of service
++DOS disk operating system
++DP DisplayPort
++DPC deferred procedure call
+ DPCM differential pulse code modulation
++DPD dead peer detection
++DPI deep packet inspection
+ DPI dots per inch
++DPL descriptor privilege level
++DPS Display PostScript
++DPST display power savings technology
++DRAAS disaster recovery as a service
+ DRAM dynamic random access memory
++DRBG deterministic random bit generator
++DRI direct rendering infrastructure
++DRM digital rights management
++DRRS display refresh rate switching
++DS debug store
++DSA digital signature algorithm
++DSAP destination service access point
++DSB double-sideband modulation
++DSDT differentiated system descriptor table
+ DSL digital subscriber line
++DSL domain specific language
++DSLAM digital subscriber line access multiplexer
++DSN delivery status notification
++DSO dynamic shared object
++DSP digital signal processor
+ DSSS direct sequence spread spectrum
+ DTD document type definition
+ DTE data terminal equipment
+ DTE dumb terminal emulator
++DTL diode-transistor logic
++DTLS datagram transport layer security
++DTS digital thermal sensor
++DUT device under test
++DVB digital video broadcasting
++DVCS distributed version control system
+ DVD digital versatile disc
+-DVI digital visual interface
++DVFS dynamic voltage and frequency scaling
++DVI device independent
++DVI Digital Visual Interface
++DVR digital video recorder
++E-XER extended XML encoding rules
++EABI embedded-application binary interface
++EAI Email Address Internationalization
++EAI Enterprise Application Integration
++EAP Extensible Authentication Protocol
++EAPOL EAP over Lan
++EBCDIC Extended Binary Coded Decimal Interchange Code
++EBR extended boot record
++EC elliptic curve
++ECC elliptic curve cryptography
++ECC error correction code
++ECDH elliptic curve Diffie-Hellman
++ECDL elliptic curve discrete logarithm
++ECDLP elliptic curve discrete logarithm problem
++ECDSA elliptic curve digital signature algorithm
++ECL emitter-coupled logic
++ECN explicit congestion notification
+ ECP enhanced capability port
++ECS enhanced chip set
++ECS extended configuration space
++EDAT enhanced dynamic acceleration technology
++EdDSA Edwards curve digital signature algorithm
++EDGE explicit data graph execution
+ EDID extended display identification data
+ EDO extended data out
++EDS electronical data sheet
++EEE energy efficient ethernet
+ EEPROM electrically erasable programmable read only memory
++EFI extensible firmware interface
++EFL emitter follower logic
+ EFM eight to fourteen modulation
+-EGA enhanced graphics array
++EGA Enhanced Graphics Adapter
+ EGP exterior gateway protocol
++EH extension header
++EIDE enhanced IDE
+ EISA extended industry standard architecture
+ ELF executable and linking format
++ELS entry level system
++EMI electro-magnetic interference
++EMP electro-magnetic pulse
++EMR electro-magnetic radiation
++EOF end of file
++EOI end of interrupt
++EOL end of line
++EOT end of transmission
++EPIC explicitly parallel instruction computing
+ EPP enhanced parallel port
+ EPRML extended partial response, maximum likelihood
+ EPROM erasable programmable read only memory
++ERD emergency recovery disk
++ERD entity relationship diagram
++ERE extended regular expression
+ ESDRAM enhanced synchronous dynamic random access memory
+-E-XER extended XML encoding rules
++ESS electronic switching system
++ESS extended service set
++ESSID extended service set identifier
++EST enhanced speedstep
++ETL extract, transform, load
++EU execution unit
++EULA end user license agreement
+ FAT file allocation table
+ FBRAM frame buffer random access memory
++FCL fiber channel loop
+ FCS frame check sequence
++FDC floppy disk controller
++FDD floppy disk drive
+ FDDI fiber distributed data interface
+-FFS fast file system
++FDE full disk encryption
++FEA finite element analysis
++FEC forward error correction
++FET field-effect transistor
++FF finite field
++FF form feed
++FFDH finite-field Diffie-Hellman
++FFH functional fixed hardware
++FFI foreign function interface
++FFM focus follows mouse
++FFS Fast File System
++FFS find first set
++FFT fast Fourier transform
++FG floating gate
+ FHSS frequency hop spread spectrum
++FID frequency identifier
++FIFO first in, first out
++FILO first in, last out
++FIPS Federal Information Processing Standards
+ FIR fast infrared
+ FLOPS floating [point] operations per second
++FLOSS free/libre/open source software
+ FM frequency modulation
++FMR false match rate
++FOSS free/open source software
++FPGA field programmable gate array
+ FPM fast page mode
++FPR floating point register
++FPU floating point unit
+ FQDN fully qualified domain name
+-FTP file transfer protocol
++FRR false rejection rate
++FRU field replaceable unit
++FS file system
++FSB front side bus
++FSCK file system check
++FSF Free Software Foundation
++FSK frequency shift keying
++FSM finite-state machine
++FTA fault tree analysis
++FTL flash translation layer
++FTP File Transfer Protocol
++FTPS File Transfer Protocol Secure
++FUS fast user switching
++FWH firmware hub
++FWS folding white space
++GAL generic array logic
++GAS generic address structure
+ GC garbage collector
++GCM Galois counter mode
+ GCR group-coded recording
++GDT global descriptor table
++GEM graphics environment manager
++GEM graphics execution manager
++GENA general event notification architecture
++GHC Glasgow Haskell compiler
++GID group identifier
+ GIF graphics interchange format
+-GNU gnu's not unix
+-GPL gnu/general public license
++GMCH graphics and memory controller hub
++GNU GNU's Not Unix
++GOP graphics output protocol
++GOT global offset table
++GPE general purpose event
++GPF general protection fault
++GPG GNU Privacy Guard
++GPL [GNU] General Public License
++GPR general purpose register
++GPS generalized processor sharing
++GPT GUID partition table
+ GPU graphics processing unit
++GR golden ratio
+ GRE generic routing encapsulation
+-GUI graphics user interface
+-HDCP high-bandwidth digital content protection
+-HTML hyper-text markup language
+-HTTP hyper-text transfer protocol
++GSI global system interrupt
++GUI graphical user interface
++GUID globally unique identifier
++GVFS git virtual file system
++HA high availability
++HAL hardware abstraction layer
++HAT hashed array tree
++HBA host bus adapter
++HCF halt and catch fire
++HCI host controller interface
++HCI human-computer interaction
++HCL hardware compatibility list
++HDCP High-bandwidth Digital Content Protection
++HDD hard disk drive
++HDL hardware description language
++HDMI High-Definition Multimedia Interface
++HDTV high-definition television
++HF high frequency
++HFM highest frequency mode
++HID human interface device
++HLL high-level language
++HMA high memory area
++HMI human-machine interface
++HOOD hierarchical object oriented design
++HP Hewlett-Packard
++HPC high performance computing
++HPET high precision event timer
++HSM hardware security module
++HSM hierarchical storage management
++HT hyper-threading
++HTC hardware thermal control
++HTCC high temperature co-fired ceramic
++HTML HyperText Markup Language
++HTT hyper-threading technology
++HTTP Hypertext Transfer Protocol
++HTTPS Hypertext Transfer Protocol Secure
++HVM hardware virtual machine
++HZ Hertz
+ I2O intelligent input/output
+-IANA internet assigned number authority
++IA information assurance
++IAAS infrastructure as a service
++IANA Internet Assigned Numbers Authority
++IBC iterated block cipher
++IBM International Business Machines
++IBS instruction based sampling
++IBSS independent basic service set
+ IC integrated circuit
+-ICB internet citizen's band
+-ICMP internet control message protocol
++ICA independent computer architecture
++ICB Internet Citizen's Band
++ICE in-circuit emulator
++ICE internal compiler error
++ICH I/O controller hub
++ICMP Internet Control Message Protocol
++ICT information and communications technology
++ICW initialization command word
++IDA Intel dynamic acceleration
++IDCMP Intuition direct communication message port
++IDE integrated development environment
+ IDE integrated drive electronics
++IDPS intrusion detection [and] prevention system
+ IDRP inter-domain routing protocol
+-IEC international electrotechnical commission
+-IEEE institute [of] electrical [and] electronics engineers
+-IESG internet engineering steering group
+-IETF internet engineering task force
++IDS intrusion detection system
++IDT interrupt descriptor table
++IE Internet Explorer
++IEC International Electrotechnical Commission
++IEEE Institute of Electrical and Electronics Engineers
++IESG Internet Engineering Steering Group
++IETF Internet Engineering Task Force
++IF intermediate frequency
++IFCM isochronous flow control mode
++IFF Interchange File Format
++IGD Internet gateway device
++IGMP Internet Group Management Protocol
+ IGP interior gateway protocol
+-IKE internet key exchange
+-IMAP internet mail access protocol
+-INCITS international committee on information technology standards
+-IPC interprocess communication
++IHV independent hardware vendor
++IKE Internet key exchange
++ILM internal loopback mode
++ILOM integrated lights-out management
++ILP instruction level parallelism
++IM instant messaging
++IMAP Internet Message Access Protocol
++IMC integrated memory controller
++IMCR interrupt mode configuration register
++IMR interrupt mask register
++IMS information management system
++INCITS InterNational Committee for Information Technology Standards
+ IO input/output
+ IOCTL input/output control
+-IP internet protocol
+-IPNG internet protocol, next generation
+-IPSEC internet protocol security
+-IRC internet relay chat
++IOMMU input/output memory management unit
++IOT Internet of Things
++IP Internet Protocol
++IP intellectual property
++IPC interprocess communication
++IPE integrated programming environment
++IPI interprocessor interrupt
++IPNG Internet Protocol, Next Generation
++IPS in-plane switching
++IPS intrusion prevention system
++IPSEC Internet Protocol Security
++IRC Internet Relay Chat
++IRDA infrared data association
+ IRQ interrupt request
+-IRTF internet research task force
++IRQL interrupt request level
++IRR interrupt request register
++IRTF Internet Research Task Force
++IS information system
+ ISA industry standard architecture
++ISA instruction set architecture
+ ISDN integrated services digital network
+ ISI inter-symbol interference
+-ISM industrial, scientific and medical
++ISM industrial, scientific, [and] medical
+ ISN initial serial number
+-ISO international standards organization
+-ISOC internet society
+-ISP internet service provider
+-JPEG joint photographic experts group
++ISO International Standards Organization
++ISOC Internet Society
++ISP Internet service provider
++ISR in-service register
++ISR interrupt service routine
++IST interrupt stack table
++ISV independent software vendor
++IT information technology
++ITB Intel Turbo Boost
++ITIL information technology infrastructure library
++ITSM IT service management
++IV initialization vector
++IVT interrupt vector table
++JBOD just a bunch of disks
++JFET junction [gate] field-effect transistor
++JIT just in time
++JPEG Joint Photographic Experts Group
++JRE Java Runtime Environment
++JTAG joint test action group
++KASLR kernel address space layout randomization
++KB keyboard
++KB kilobyte
++KBD keyboard
++KBD kilobaud
++KLOC thousand lines of code
++KMS kernel-mode setting
++KPI kernel programming interface
+ KVA kernel virtual address
++KVM kernel virtual machine
++KVM kernel virtual memory
++KVM keyboard, video, [and] mouse
++LAMP Linux Apache MySQL {Perl,PHP,Python}
+ LAN local area network
++LAPIC local advanced programmable interrupt controller
++LAR load access rights
+ LBA logical block addressing
++LBS location-based service
+ LCD liquid crystal display
+ LCP link control protocol
+-LDAP lightweight directory access protocol
++LDA local delivery agent
++LDAP Lightweight Directory Access Protocol
++LDR light-dependent resistor
++LDT local descriptor table
++LE logical extent
+ LED light emitting diode
+-LIR local internet registry
++LER label edge router
++LF line feed
++LF low frequency
++LFM lowest frequency mode
++LFN long file names
++LFO low-frequency oscillation
++LFS log-structured file system
++LFU least frequently used
++LHP loop heat pipe
++LIFO last in, first out
++LILO LInux LOader
++LILO last in, last out
++LINT local interrupt
++LIR local Internet registry
++LKM {Linux,loadable} kernel module
++LKML Linux kernel mailing list
++LL load linked
++LL/SC load linked/store conditional
+ LLC logical link control
++LLDP link layer discovery protocol
++LLF low level format
++LLMNR link-local multicast name resolution
++LLVM Low Level Virtual Machine
++LM long mode
++LMM link management mode
++LNO loop nest optimization
++LOC lines of code
++LOM lights-out management
++LPC low pin count
++LPS local positioning system
+ LRC longitudinal redundancy check
+-LSB least significant bit [or: byte]
++LRM left-to-right mark
++LRO left-to-right override
++LRU least recently used
++LSB Linux standards base
++LSB least significant {bit,byte}
++LSI large scale integration
++LSL load segment limit
++LSN Large Scale NAT
++LSN log sequence number
++LSR label switch router
++LTCC low temperature co-fired ceramic
++LTO linear tape-open
++LTO link time optimization
++LTR left to right
++LTR load task register
++LTR letter(-sized paper)
++LTS long term support
++LUA Lua Uppercase Accident
+ LUN logical unit number
++LV logical volume
++LVM logical volume management
++LVT local vector table
++LWP light-weight process
+ LZW Lempel Ziv Welch
+-MAC medium access control
++MAC mandatory access control
++MAC {media,medium} access control
++MAC message authentication {check,code}
++MADT multiple APIC descriptor table
++MB megabyte
++MBA multi-boot agent
+ MBR master boot record
++MBS megabits per second
++MC memory controller
++MCA machine check architecture
++MCA MicroChannel architecture
++MCC multiversion concurrency control
++MCE machine check exception
++MCGA Multi-Color Graphics Array
++MCH memory controller hub
++MCM multi-chip module
++MCQ memory controlled queue
++MD machine-dependent
++MDA mail delivery agent
++MDA Monochrome Display Adapter
+ MDRAM multibank dynamic random access memory
++MESI modified, exclusive, shared, invalid
++MFC merge from current
++MFC Microsoft Foundation Classes
+ MFM modified frequency modulation
++MI machine-independent
++MIB management information base
++MIC message integrity {check,code}
++MID mobile Internet device
+ MIDI musical instrument digital interface
+-MIME multipurpose internet mail extensions
++MIF management information format
++MII media independent interface
++MIM man in the middle
++MIMD multiple instruction, multiple data
++MIME Multipurpose Internet Mail Extensions
++MIMO multiple input multiple output
+ MIPS million instructions per second
++MISD multiple instruction, single data
++MIT Massachusetts Institute of Technology
++MITM man in the middle
++ML machine language
++ML machine learning
++ML mailing list
++ML markup language
++ML maximum likelihood
++MLC multi-level cell
++MLD multicast listener discovery
++MLHP micro loop heat pipe
++MMF multi-mode fiber
++MMIC monolithic microwave integrated circuit
++MMIO memory mapped input/output
++MMORPG massive multiplayer online role playing game
+ MMU memory management unit
++MMX matrix math extension
++MMX multimedia extension
++MMX multiple math extension
++MO magneto-optical
++MOESI modified, owned, exclusive, shared, invalid
++MOF maximum operating frequency
++MOSFET metal-oxide-semiconductor field-effect transistor
++MOSI modified, owned, shared, invalid
++MP multi-platform
++MP multiplayer
++MP {multiprocessing,multiprocessor}
+ MPEG moving picture experts group
+-MSB most significant bit [or: byte]
++MPI message passing interface
++MPLS Multiprotocol Label Switching
++MPP massively parallel processor
++MPS memory pool system
++MPS multiprocessor specification
++MR modem ready
++MRU most recently used
++MS Microsoft
++MSB most significant {bit,byte}
++MSE mean square error
+ MSF minutes seconds frames
++MSI message signaled interrupt
++MSI modified, shared, invalid
++MSR machine state register
+ MSS maximum segment size
++MSTP Multiple Spanning Tree Protocol
++MT machine translation
+ MTA mail transfer agent
++MTBF mean time between failures
++MTP media transfer protocol
++MTRR memory type range register
++MTTF mean time to failure
+ MTU maximum transmission unit
+ MUA mail user agent
++MUD multi-user domain
++MVCC multiversion concurrency control
+ MWE module width encoding
++MX mail exchange
++NACK negative acknowledgement
++NAN not a number
++NAPT Network Address Port Translation
++NAS network attached storage
+ NAT network address translation
+ NAV network allocation vector
+-NCP network control protocol
++NC numerical control
++NCO numerically-controlled oscillator
++NCP Network Control Protocol
++NCQ native command queuing
++ND neighbor discovery
++NDFA nondeterministic finite automaton
++NE numeric error
++NFA nondeterministic finite automaton
++NFC near-field communication
++NFCI no functional change intended
+ NFS network file system
++NFV network function virtualization
++NIA next instruction address
++NIC network information center
+ NIC network interface card
++NIDS network intrusion detection system
++NIP network interface protocol
++NIPS network intrusion prevention system
+ NIS network information service
++NIST National Institute of Standards and Technology
++NLS native language support
++NMI non-maskable interrupt
++NNTP Network News Transfer Protocol
++NOC network operations center
++NOP no operation
++NOS network operating system
++NP nondeterministic polynomial time
+ NRZ non-return to zero
+-NUMA non uniform memory access
++NSA nation-state adversary
++NSA no such agency
++NSA National Security Agency
++NTM non-deterministic Turing machine
++NTP Network Time Protocol
++NUMA non-uniform memory access
++NVRAM non-volatile random access memory
++NW not write-through
++NX no execute
++OAEP optimal asymmetric encryption padding
++OBO off by one
++OBOE off by one error
+ OCL object constraint language
+ OCR optical character recognition
++ODCM on-demand clock modulation
++ODT on-die termination
+ OEM original equipment manufacturer
++OFB output feedback
+ OFDM orthogonal frequency division multiplexing
++OFET organic field-effect transistor
++OLAP online analytical processing
++OLE object linking and embedding
++OLTP online transaction processing
++ONFI open nand flash interface
++OO OpenOffice
++OO object oriented
++OOB out of band
++OOE out of order execution
++OOM out of memory
++OOO OpenOffice.org
++OOP object oriented programming
++OOPS object oriented programming systems
++OOSE object oriented software engineering
++OPM operations per minute
++OPS operations per second
++OQL Object Query Language
++ORB object request broker
++ORM object-relational mapping
++OS operating system
++OSD open source definition
+ OSF open software foundation
++OSI Open Source Initiative
+ OSI open systems interconnection
++OSPF open shortest path first
++OSPM OS power management
++OSS open sound system
++OSS open source software
++OSVW operating system visible workarounds
+ OTP one time password
++OTP open telecom platform
++OU organizational unit
++OUI organizationally unique identifier
++OWL Web Ontology Language
++P2P PCI to PCI
++P2P peer to peer
++PA phase accumulator
++PA physical address
++PAAS platform as a service
++PAC phase-amplitude converter
++PAE physical address extension
++PAL phase alternating line
++PAL programmable array logic
+ PAM pluggable authentication modules
+ PAM pulse amplitude modulation
++PAP password authentication protocol
++PAT page attribute table
+ PAT port address translation
++PATA parallel ATA
+ PAX portable archive exchange
++PBE pending break encoding
++PBE programming by example
+ PC personal computer
++PC program counter
++PCB printed circuit board
++PCB process control block
++PCC Portable C Compiler
++PCD page-level cache disable
++PCE performance-monitor counter enable
+ PCI peripheral component interconnect
++PCM phase change memory
+ PCM pulse code modulation
+-PCMCIA personal computer memory card international association
++PCMCIA Personal Computer Memory Card International Association
++PCP Port Control Protocol
++PD public domain
++PDA personal digital assistant
++PDA pushdown automaton
++PDAG propositional directed acyclic graph
++PDB power distribution board
++PDF portable document format
++PDM pulse-duration modulation
++PDN pull-down network
++PDP page {descriptor,directory} page
++PDS product data sheet
+ PDU protocol data unit
+-PDP page descriptor page
++PE protection enable
++PEAP Protected EAP
++PECI platform environment control interface
++PEP protocol extension protocol
+ PER packed encoding rules
+-PERL practical extraction [and] report language
+-PGP pretty good privacy
++PFS perfect forward secrecy
++PGAS partitioned global address space
++PGE page global enable
++PGP Pretty Good Privacy
++PHB PCI host bridge
++PHP PHP: Hypertext Preprocessor
++PIC position independent code
+ PIC programmable interrupt controller
++PICNIC problem in chair, not in computer
+ PID process id
+-PIN personal identification number
++PIE position independent executable
++PIL Priority Interrupt Level
++PIM personal information manager
++PIM platform-independent model
+ PIO programmed input/output
++PIPT physically indexed, physically tagged
++PIQ prefetch input queue
++PIT programmable interrupt timer
++PIV personal identity verification
++PKCS public-key cryptography standards
++PKI public key infrastructure
++PLC programmable logic controller
++PLD programmable logic device
+ PLL phase locked loop
++PLRU pseudo LRU
++PLTM package level thermal management
++PM power management
++PM {phase,pulse} modulation
++PME power management event
++PMI platform management interrupt
++PMIO port-mapped input/output
+ PMT photo-multiplier tube
++PMU power management unit
+ PNG portable network graphics
+-POP post office protocol
+-POSIX portable operating system interface [for] unix
++PNP plug and play
++POE power over ethernet
++POF probability of failure
++POP Post Office Protocol
++POP power on password
++POSIX Portable Operating System Interface [for Unix]
+ POST power on self test
+ POTS plain old telephone system
+-PPP point-to-point protocol
+-PPPOA point-to-point protocol over ATM
+-PPPOE point-to-point protocol over ethernet
++PP pair programming
++PPB PCI [to] PCI bridge
++PPC PowerPC
++PPI pixels per inch
++PPM pages per minute
++PPP Point-to-Point Protocol
++PPPOA Point-to-Point Protocol over ATM
++PPPOE Point-to-Point Protocol over Ethernet
++PPU physics processing unit
++PRBS pseudorandom bit sequence
++PRG pseudorandom generator
++PRF pseudorandom function [family]
+ PRML partial response, maximum likelihood
++PRN pseudorandom {noise,number}
++PRNG pseudorandom number generator
+ PROM programmable read only memory
++PRP pseudorandom permutation
++PSD power spectral density
++PSE page size extensions
++PSK phase shift keying
++PSK pre-shared key
++PSTN public switched telephone network
++PSW program status word
+ PTE page table entry
+ PTLA pseudo top level aggregator
+ PTP page table page
+-PSTN public switched telephone network
++PTV perceived target value
++PU processing unit
++PUN physical unit number
++PV physical volume
++PVG physical volume group
++PVI protected-mode virtual interrupt
++PVST Per-VLAN Spanning Tree
+ PWM pulse width modulation
++PXE preboot execution environment
++QA quality assurance
++QAM quadrature amplitude modulation
++QAM quality assurance management
++QBE query by example
++QC quality control
++QDI quasi delay insensitive
+ QOS quality of service
+-RAID redundant array of inexpensive disks
++QVL qualified vendor list
++R/O read only
++R/W read/write
++RA receiver address
++RA remote assistance
++RA resource affinity
++RA router advertisement
++RAD rapid application development
++RAID redundant array of {independent,inexpensive} disks
+ RAM random access memory
++RAS reliability, availability and serviceability
++RAS remote access service
++RAS restartable atomic sequence
++RAS row address strobe
++RBF radial basis function
++RBT red-black tree
++RC release candidate
++RC remote control
++RCS Revision Control System
+ RCS revision control system
+-RFC request for comments
++RCU read, copy, update
++RDB Rigid Disk Block
++RDBMS relational database management system
++RDF Resource Description Framework
++RDM relational data model
++RDMA remote direct memory access
++RE regular expression
++REST representational state transfer
++RF radio frequency
++RFI radio frequency interference
++RFO request for ownership
+ RGB red green blue
+-RIP routing information protocol
+-RIR regional internet registry
+-RISC reduced instruction set computing
++RGBA red green blue alpha
++RGMII reduced gigabit media independent interface
++RH read hit
++RHEL Red Hat Enterprise Linux
++RHL Red Hat Linux
++RIB routing information base
++RIFF Resource Interchange File Format
++RIP Routing Information Protocol
++RIR regional Internet registry
++RISC reduced instruction set {computer,computing}
++RKM ROM Kernel Manual
+ RLE run length encoding
+ RLL run length limited
++RLO right-to-left override
++RM read miss
++RMI remote method invocation
++RMO Relaxed Memory Ordering
++RMPM rapid memory power management
++RMS root mean square
++RMW read, modify, write
++RNG random number generator
+ ROM read only memory
++RPC remote procedure call
++RPKI resource PKI
++RPL requested privilege level
+ RPM revolutions per minute
++RPN reverse Polish notation
++RPVST Rapid Per-VLAN Spanning Tree
++RR random replacement
++RR round robin
++RS relay station
++RSA Rivest, Shamir, [and] Adleman
++RSIP Realm Specific IP
++RSN Robust Secure Network
++RSS really simple syndication
++RSS residual sum of squares
++RSTP Rapid Spanning Tree Protocol
++RT real time
++RTC real time clock
++RTC real time computing
+ RTF rich text format
++RTL register transfer language
++RTL resistor-transistor logic
++RTL right to left
++RTOS real time operating system
+ RTS request to send
+-RTT round time trip
+-S/PDIF sony/phillips digital interface
++RTT round trip time
++RUP rational unified process
++RW Rabin-Williams
++RWM read-write memory
++RX {receive,receiver}
++S/PDIF Sony/Philips Digital Interface Format
++SA security advisory
++SA security association
++SA source address
++SA structured analysis
++SAAS software as a service
+ SACD super audio compact disc
++SAD security association database
++SAL system abstraction layer
+ SAM serial access memory
+-SASI shugart associates system interface (predecessor to SCSI)
++SAM sum addressed memory
++SAN storage area network
++SAP service access point
++SAPIC streamlined advanced programmable interrupt controller
++SASD structured analysis, structured design
++SASI Shugart Associates System Interface
++SASL simple authentication [and] security layer
+ SATA serial advanced technology attachment
+-SCSI small computer system interface
++SB sound blaster
++SBU standard build unit
++SC store conditional
++SCA source code analyzer
++SCADA supervisory control and data acquisition
++SCC single chip cloud
++SCC source code control
++SCCS Source Code Control System
++SCI scalable coherent interface
++SCI system control interrupt
++SCM software configuration management
++SCM source code management
++SCM storage-class memory
++SCP secure copy
++SCSI Small Computer System Interface
++SCTP Stream Control Transmission Protocol
++SDI symbol deinterleave
++SDK software development kit
++SDL Simple Declarative Language
++SDL Simple Direct-media Layer
++SDLC {software,system,systems} development life cycle
++SDN software defined networking
+ SDRAM synchronous dynamic random access memory
++SDS software defined storage
++SDT syntax-directed translation
++SEGV segmentation violation
++SEO search engine optimization
++SFC sequential function chart
++SFI simple firmware interface
++SFI software fault isolation
++SFTP SSH File Transfer Protocol
++SFTP Serial File Transfer Protocol
++SFTP Simple File Transfer Protocol
++SGMII serial gigabit media independent interface
+ SGRAM synchronous graphics random access memory
++SHA secure hash algorithm
++SIDH supersingular isogeny Diffie-Hellman
++SIEM security information and event management
+ SIFS short inter-frame space
+-SIP session initiation protocol
++SIMD single instruction, multiple data
++SIMM single inline memory module
++SIP Session Initiation Protocol
++SIR signal-to-interference ratio
+ SIR slow infrared
++SISD single instruction, single data
++SLC single-level cell
+ SLDRAM synchronous-link dynamic random access memory
++SLED single large expensive disk
++SLI scalable link interface
++SLI scan-line interleave
++SLOC source lines of code
++SLRU segmented LRU
++SMA smart memory access
++SMAF system management action field
++SMAP Simple Mail Access Protocol
++SMAP supervisor mode access prevention
+ SMART self-monitoring analysis and reporting technology
++SMBIOS System Management BIOS
++SMC system management controller
++SMEP supervisor mode execution protection
++SMF single mode fiber
++SMI structure of management information
++SMI system management interrupt
++SMM system management mode
+ SMP symmetric multiprocessing
+-SMTP simple mail transfer protocol
+-SNMP simple network management protocol
++SMT simultaneous multithreading
++SMTP Simple Mail Transfer Protocol
++SMU system management unit
++SNAP Sub-Network Access Protocol
++SNMP Simple Network Management Protocol
++SNR signal-to-noise ratio
++SOA service oriented architecture
++SOAP Simple Object Access Protocol
++SOC system on chip
++SOF start of frame
++SOH start of header
++SOHO small office/home office
++SOL serial over LAN
++SP service pack
++SP stack pointer
++SPARC scalable processor architecture
++SPARQL SPARQL Protocol and RDF Query Language
++SPD security policy database
+ SPD serial presence detect
++SPDIF Sony/Philips digital interface format
++SPI serial peripheral interface
++SPI stateful packet inspection
++SPL system interrupt priority level
++SPL spinlock
++SPMD single process, multiple data
++SPR special purpose register
++SPT sectors per track
++SQA software quality assurance
++SQL Structured Query Language
+ SRAM static random access memory
++SRC sample rate conversion
++SS self-snoop
++SS stack segment
++SSA static single assignment
++SSAP source service access point
++SSB single-sideband modulation
++SSD solid state drive
++SSE streaming SIMD extensions
+ SSFDC solid state floppy disc card
+ SSH secure shell
++SSI server side includes
++SSID service set identifier
+ SSL secure sockets layer
++SSP stack smashing protection
++STC software thermal control
++STD state transition diagram
++STP Spanning Tree Protocol
+ STP shielded twisted pair
+-SVGA super video graphics array
++SUS Single Unix Specification
++SUT system under test
++SVG scalable vector graphics
++SVGA Super Video Graphics Array
++SVM secure virtual machine
++SVM support vector machine
++SVR System V Release
++SVS Separate Virtual Space
++SWF Shockwave Flash
++SWIG simplified wrapper [and] interface generator
++SYR symbol timing recovery
++TA test assertion
++TA transmitter address
++TAI international atomic time
++TAO track at once
++TAOCP The Art of Computer Programming
++TAP Test Anything Protocol
++TAS test and set
++TB terabyte
++TCB trace capture buffer
++TCB trusted computing base
++TCC thermal control circuit
+ TCL tool command language
+-TCP transmission control protocol
++TCP Transmission Control Protocol
++TCQ tagged command queueing
++TDC time [to] digital converter
+ TDD test driven development
++TDD time division duplex
++TDM time division multiplexing
++TDMA time division multiple access
++TDOA time difference of arrival
++TDP thermal design {point,power}
++TECO Text Editor and Corrector
+ TFT thin film transistor
++TFTP Trivial File Transfer Protocol
++TIAS try it and see
+ TIFF tagged image file format
++TITS try it to see
++TK temporal key
++TKIP Temporal Key Integrity Protocol
+ TLA top level aggregator
+-TLB transition lookaside buffer
++TLB translation lookaside buffer
+ TLD top level domain
++TLS thread local storage
++TLS transport layer security
++TM Turing machine
++TM thermal monitor
+ TMDS transition minimized differential signaling
++TMO timeout
++TOD time of day
++TOS terms of service
++TOS trusted operating system
++TOS type of service
++TP transaction processing
++TPI tracks per inch
++TPM transactions per minute
++TPM trusted platform module
++TPR task priority register
++TPS transactions per second
++TPS transmission parameters signaling
++TR task register
+ TR token ring
++TRL timing recovery loop
++TRNG true random number generator
++TS terminal services
++TS time series
++TS time stamp
++TS transport stream
++TSC time stamp counter
++TSD time stamp disable
++TSL test, set, lock
++TSO time sharing option
++TSO Total Store Ordering
++TSP Time-Stamp Protocol
++TSP Tunnel Setup Protocol
++TSP time synchronization protocol
++TSP traveling salesman problem
++TSS task state segment
+ TTL time to live
++TTL transistor-transistor logic
++TTM translation table maps
+ TTY teletype
++TUI {terminal,text-based,textual} user interface
++TX {transmit out,transmitter}
+ TZ time zone
++UAC user {access,account} control
++UAF use-after-free
+ UART universal asynchronous receiver/transmitter
++UAT user acceptance testing
++UB undefined behavior
+ UC uncacheable
+-UDO ultra density optical (storage)
+-UDP user datagram protocol
+-UFS unix file system
++UCS uniform-cost search
++UDMA ultra DMA
++UDO ultra density optical
++UDP User Datagram Protocol
++UEFI unified extensible firmware interface
++UFS Unix File System
++UGA universal graphics adapter
++UI unit interval
++UI user interface
++UID unique identifier
++UID user identifier
++UL upload
++UMA uniform memory access
++UMA upper memory area
++UMB upper memory block
+ UML unified modeling language
++UMPC ultra-mobile PC
++UPNP universal plug and play
+ UPS uninterruptible power supply
+ URI uniform resource identifier
+ URL uniform resource locator
++URN uniform resource name
+ USART universal synchronous/asynchronous receiver/transmitter
+ USB universal serial bus
+ USWC uncacheable speculative write combining
++UT unit test
++UTC coordinated universal time
+ UTP unshielded twisted pair
+-UUCP unix-to-unix copy protocol
++UUCP Unix-to-Unix Copy Protocol
++UUID universally unique identifier
++UUOC useless use of cat
++UUT unit under test
++UX user experience
++VA vertical alignment
++VA virtual address
++VA volt-ampere
+ VAX virtual address extension
++VB Visual Basic
++VCA variable-gain amplifier
++VCC common collector voltage
++VCF voltage-controlled filter
+ VCM virtual channel memory
+-VESA video electronics standards association
+-VGA video graphics array
++VCO voltage-controlled oscillator
++VCS version control system
++VESA Video Electronics Standards Association
++VFO variable-frequency oscillator
++VG volume group
++VGA Video Graphics Array
++VHDCI very high density cable interconnect
++VID voltage level identifier
++VIPT virtually indexed, physically tagged
++VIVT virtually indexed, virtually tagged
+ VLAN virtual local area network
+-VLSM variable length subnetting mask
+-VM virtual memory
++VLIW very long instruction word
++VLSI very large scale integration
++VLSM variable length subnet mask
++VM virtual {machine,memory}
++VME virtual mode extension
++VMX vector multimedia extensions
++VMX virtual machine extensions
++VOD video on demand
+ VPN virtual private network
++VR virtual reality
+ VRAM video random access memory
++VRF virtual routing and forwarding
++VRM voltage regulator module
++VRRP Virtual Router Redundancy Protocol
++VSTP VLAN Spanning Tree Protocol
++VTP VLAN Trunking Protocol
++W watt
++W3C World Wide Web Consortium
+ WAN wide area network
+-WAP wireless application protocol
++WAP Wireless Application Protocol
++WAP wireless access point
++WDT watchdog timer
++WEP Wired Equivalent Privacy
++WFI wait for interrupt
++WFQ weighted fair queuing
++WH write hit
++WIFI wireless fidelity
+ WLAN wireless local area network
++WM write miss
++WMI Windows Management Instrumentation
++WOL Wake-on-LAN
++WOM Wake-on-Modem
++WOR Wake-on-Ring
++WORM write once read many
++WP WordPerfect
++WP word processor
++WP write protect
++WPA Wi-Fi Protected Access
++WPA2 Wi-Fi Protected Access II
++WPS Wi-Fi Protected Setup
+ WRAM window random access memory
++WS web services
++WTC write through caching
++WWAN wireless wide area network
+ WWW world wide web
++WYSIWYG what you see is what you get
++XBAR crossbar
++XDMCP X Display Manager control protocol
+ XER XML encoding rules
+-XGA extended graphics array
+-XML extensible markup language
++XGA Extended Graphics Array
++XIP execute in place
++XML Extensible Markup Language
++XOR exclusive or
++XP extreme programming
++XSI X/Open System Interface
+ XSL extensible stylesheet language
++XSS cross site scripting
+ XT extended technology
++XUL XML user interface language
++YACC yet another compiler compiler
++YAWPFAPR you are welcome; please file a problem report
++YP Yellow Pages
++YTD year to date
++ZBR zone bit recording
+ ZFOD zero-filled on demand
++ZIF zero insertion force
++ZIFS zero insertion force socket
++ZMA zone multicast address
diff --git a/source/y/bsd-games/patches/0015-primes-Update-to-NetBSD-CVS-2018-02-03.patch b/source/y/bsd-games/patches/0015-primes-Update-to-NetBSD-CVS-2018-02-03.patch
new file mode 100644
index 00000000..a21e51f0
--- /dev/null
+++ b/source/y/bsd-games/patches/0015-primes-Update-to-NetBSD-CVS-2018-02-03.patch
@@ -0,0 +1,813 @@
+From: "Dr. Tobias Quathamer" <toddy@debian.org>
+Date: Thu, 26 Apr 2018 15:42:07 +0200
+Subject: primes: Update to NetBSD CVS, 2018-02-03
+
+---
+ exec.objs | 2 +-
+ primes/Makefile.bsd | 4 +-
+ primes/pattern.c | 13 ++--
+ primes/pr_tbl.c | 16 ++--
+ primes/primes.6 | 41 +++++++---
+ primes/primes.c | 148 ++++++++++++++++++------------------
+ primes/primes.h | 33 ++++++--
+ primes/spsp.c | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 8 files changed, 362 insertions(+), 110 deletions(-)
+ create mode 100644 primes/spsp.c
+
+diff --git a/exec.objs b/exec.objs
+index f081d60..3c184cc 100644
+--- a/exec.objs
++++ b/exec.objs
+@@ -100,7 +100,7 @@ phantasia/setup phantglobs.o setup.o
+ pig pig.o
+ pom pom.o
+ ppt ppt.o
+-primes pattern.o pr_tbl.o primes.o
++primes pattern.o pr_tbl.o primes.o spsp.o
+ quiz quiz.o rxp.o lib/fgetln.o
+ rain rain.o lib/getprogname.o
+ random random.o
+diff --git a/primes/Makefile.bsd b/primes/Makefile.bsd
+index 4235041..8ed845c 100644
+--- a/primes/Makefile.bsd
++++ b/primes/Makefile.bsd
+@@ -1,8 +1,8 @@
+-# $NetBSD: Makefile,v 1.7 2004/02/08 13:16:25 jsm Exp $
++# $NetBSD: Makefile,v 1.8 2014/10/02 21:36:37 ast Exp $
+ # @(#)Makefile 8.1 (Berkeley) 5/31/93
+
+ PROG= primes
+-SRCS= pattern.c pr_tbl.c primes.c
++SRCS= pattern.c pr_tbl.c primes.c spsp.c
+ MAN= primes.6
+ DPADD= ${LIBM}
+ LDADD= -lm
+diff --git a/primes/pattern.c b/primes/pattern.c
+index 1196056..52784a5 100644
+--- a/primes/pattern.c
++++ b/primes/pattern.c
+@@ -1,4 +1,4 @@
+-/* $NetBSD: pattern.c,v 1.6 2003/08/07 09:37:33 agc Exp $ */
++/* $NetBSD: pattern.c,v 1.7 2014/10/02 21:36:37 ast Exp $ */
+
+ /*
+ * Copyright (c) 1989, 1993
+@@ -32,21 +32,20 @@
+ * SUCH DAMAGE.
+ */
+
+-#include <sys/cdefs.h>
++#include <sys/types.h>
++
+ #ifndef lint
+ #if 0
+ static char sccsid[] = "@(#)pattern.c 8.1 (Berkeley) 5/31/93";
+ #else
+-__RCSID("$NetBSD: pattern.c,v 1.6 2003/08/07 09:37:33 agc Exp $");
++__RCSID("$NetBSD: pattern.c,v 1.7 2014/10/02 21:36:37 ast Exp $");
+ #endif
+ #endif /* not lint */
+
+ /*
+ * pattern - the Eratosthenes sieve on odd numbers for 3,5,7,11 and 13
+ *
+- * By: Landon Curt Noll chongo@toad.com
+- *
+- * chongo <for a good prime call: 391581 * 2^216193 - 1> /\oo/\
++ * By Landon Curt Noll, http://www.isthe.com/chongo/index.html /\oo/\
+ *
+ * To avoid excessive sieves for small factors, we use the table below to
+ * setup our sieve blocks. Each element represents a odd number starting
+@@ -440,4 +439,4 @@ const char pattern[] = {
+ 0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,
+ 0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,1
+ };
+-const int pattern_size = (sizeof(pattern)/sizeof(pattern[0]));
++const size_t pattern_size = (sizeof(pattern)/sizeof(pattern[0]));
+diff --git a/primes/pr_tbl.c b/primes/pr_tbl.c
+index d45204a..5e2f813 100644
+--- a/primes/pr_tbl.c
++++ b/primes/pr_tbl.c
+@@ -1,4 +1,4 @@
+-/* $NetBSD: pr_tbl.c,v 1.7 2003/08/07 09:37:33 agc Exp $ */
++/* $NetBSD: pr_tbl.c,v 1.8 2014/10/02 21:36:37 ast Exp $ */
+
+ /*
+ * Copyright (c) 1989, 1993
+@@ -37,24 +37,24 @@
+ #if 0
+ static char sccsid[] = "@(#)pr_tbl.c 8.1 (Berkeley) 5/31/93";
+ #else
+-__RCSID("$NetBSD: pr_tbl.c,v 1.7 2003/08/07 09:37:33 agc Exp $");
++__RCSID("$NetBSD: pr_tbl.c,v 1.8 2014/10/02 21:36:37 ast Exp $");
+ #endif
+ #endif /* not lint */
+
+ /*
+ * prime - prime table
+ *
+- * By: Landon Curt Noll chongo@toad.com, ...!{sun,tolsoft}!hoptoad!chongo
++ * By Landon Curt Noll, http://www.isthe.com/chongo/index.html /\oo/\
+ *
+- * chongo <for a good prime call: 391581 * 2^216193 - 1> /\oo/\
+- *
+- * We are able to sieve 2^32-1 because this table has primes up to 65537
++ * We are able to sieve 2^32-1 because this table has primes up to 65537
+ * and 65537^2 > 2^32-1.
+ */
+
++#include <stddef.h>
++
+ #include "primes.h"
+
+-const ubig prime[] = {
++const uint64_t prime[] = {
+ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,
+ 107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,
+ 211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,
+@@ -546,4 +546,4 @@ const ubig prime[] = {
+ };
+
+ /* pr_limit - largest prime in the prime table */
+-const ubig *pr_limit = &prime[(sizeof(prime)/sizeof(prime[0]))-1];
++const uint64_t *const pr_limit = &prime[(sizeof(prime)/sizeof(prime[0]))-1];
+diff --git a/primes/primes.6 b/primes/primes.6
+index 14d5101..aa000ef 100644
+--- a/primes/primes.6
++++ b/primes/primes.6
+@@ -1,4 +1,4 @@
+-.\" $NetBSD: primes.6,v 1.2 2004/02/09 23:25:47 wiz Exp $
++.\" $NetBSD: primes.6,v 1.6 2018/02/03 15:40:29 christos Exp $
+ .\"
+ .\" Copyright (c) 1989, 1993
+ .\" The Regents of the University of California. All rights reserved.
+@@ -33,11 +33,9 @@
+ .\" @(#)factor.6 8.1 (Berkeley) 5/31/93
+ .\"
+ .\"
+-.\" By: Landon Curt Noll chongo@toad.com, ...!{sun,tolsoft}!hoptoad!chongo
++.\" By Landon Curt Noll, http://www.isthe.com/chongo/index.html /\oo/\
+ .\"
+-.\" chongo <for a good prime call: 391581 * 2^216193 - 1> /\oo/\
+-.\"
+-.Dd February 8, 2004
++.Dd February 2, 2018
+ .Dt PRIMES 6
+ .Os
+ .Sh NAME
+@@ -45,6 +43,7 @@
+ .Nd generate primes
+ .Sh SYNOPSIS
+ .Nm primes
++.Op Fl dh
+ .Op Ar start Op Ar stop
+ .Sh DESCRIPTION
+ The
+@@ -60,18 +59,18 @@ value must be at least 0 and not greater than
+ .Ar stop .
+ The
+ .Ar stop
+-value must not be greater than 4294967295.
++value must not be greater than 3825123056546413050.
+ The default value of
+ .Ar stop
+-is 4294967295.
++is 3825123056546413050.
+ .Pp
+ When the
+ .Nm
+ utility is invoked with no arguments,
+ .Ar start
+-is read from standard input.
++is read from standard input and
+ .Ar stop
+-is taken to be 4294967295.
++is taken to be 3825123056546413050.
+ The
+ .Ar start
+ value may be preceded by a single
+@@ -80,10 +79,28 @@ The
+ .Ar start
+ value is terminated by a non-digit character (such as a newline).
+ The input line must not be longer than 255 characters.
++.Pp
++When given the
++.Fl d
++argument,
++.Nm
++prints the difference between the current and the previous prime.
++.Pp
++When given the
++.Fl h
++argument,
++.Nm
++prints the prime numbers in hexadecimal.
+ .Sh DIAGNOSTICS
+ Out of range or invalid input results in
+-an appropriate error message
+-being written to standard error.
++an appropriate error message to standard error.
++.Sh AUTHORS
++.An -nosplit
++Originally by
++.An Landon Curt Noll ,
++extended to some 64-bit primes by
++.An Colin Percival .
+ .Sh BUGS
++This
+ .Nm
+-won't get you a world record.
++program won't get you a world record.
+diff --git a/primes/primes.c b/primes/primes.c
+index 2d93594..a022aa9 100644
+--- a/primes/primes.c
++++ b/primes/primes.c
+@@ -1,4 +1,4 @@
+-/* $NetBSD: primes.c,v 1.12 2004/01/27 20:30:30 jsm Exp $ */
++/* $NetBSD: primes.c,v 1.22 2018/02/03 15:40:29 christos Exp $ */
+
+ /*
+ * Copyright (c) 1989, 1993
+@@ -34,31 +34,31 @@
+
+ #include <sys/cdefs.h>
+ #ifndef lint
+-__COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
+- The Regents of the University of California. All rights reserved.\n");
++__COPYRIGHT("@(#) Copyright (c) 1989, 1993\
++ The Regents of the University of California. All rights reserved.");
+ #endif /* not lint */
+
+ #ifndef lint
+ #if 0
+ static char sccsid[] = "@(#)primes.c 8.5 (Berkeley) 5/10/95";
+ #else
+-__RCSID("$NetBSD: primes.c,v 1.12 2004/01/27 20:30:30 jsm Exp $");
++__RCSID("$NetBSD: primes.c,v 1.22 2018/02/03 15:40:29 christos Exp $");
+ #endif
+ #endif /* not lint */
+
+ /*
+ * primes - generate a table of primes between two values
+ *
+- * By: Landon Curt Noll chongo@toad.com, ...!{sun,tolsoft}!hoptoad!chongo
+- *
+- * chongo <for a good prime call: 391581 * 2^216193 - 1> /\oo/\
++ * By Landon Curt Noll, http://www.isthe.com/chongo/index.html /\oo/\
+ *
+ * usage:
+- * primes [start [stop]]
++ * primes [-dh] [start [stop]]
+ *
+ * Print primes >= start and < stop. If stop is omitted,
+- * the value 4294967295 (2^32-1) is assumed. If start is
++ * the value SPSPMAX is assumed. If start is
+ * omitted, start is read from standard input.
++ * -d: print difference to previous prime, e.g. 3 (1)
++ * -h: print primes in hexadecimal
+ *
+ * validation check: there are 664579 primes between 0 and 10^7
+ */
+@@ -66,11 +66,12 @@ __RCSID("$NetBSD: primes.c,v 1.12 2004/01/27 20:30:30 jsm Exp $");
+ #include <ctype.h>
+ #include <err.h>
+ #include <errno.h>
++#include <inttypes.h>
+ #include <limits.h>
+ #include <math.h>
+-#include <memory.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ #include <unistd.h>
+
+ #include "primes.h"
+@@ -80,49 +81,35 @@ __RCSID("$NetBSD: primes.c,v 1.12 2004/01/27 20:30:30 jsm Exp $");
+ *
+ * We only sieve the odd numbers. The base of our sieve windows are always
+ * odd. If the base of table is 1, table[i] represents 2*i-1. After the
+- * sieve, table[i] == 1 if and only iff 2*i-1 is prime.
++ * sieve, table[i] == 1 if and only if 2*i-1 is prime.
+ *
+ * We make TABSIZE large to reduce the overhead of inner loop setup.
+ */
+-char table[TABSIZE]; /* Eratosthenes sieve of odd numbers */
++static char table[TABSIZE]; /* Eratosthenes sieve of odd numbers */
+
+-/*
+- * prime[i] is the (i-1)th prime.
+- *
+- * We are able to sieve 2^32-1 because this byte table yields all primes
+- * up to 65537 and 65537^2 > 2^32-1.
+- */
+-extern const ubig prime[];
+-extern const ubig *pr_limit; /* largest prime in the prime array */
++static int dflag, hflag;
+
+-/*
+- * To avoid excessive sieves for small factors, we use the table below to
+- * setup our sieve blocks. Each element represents a odd number starting
+- * with 1. All non-zero elements are factors of 3, 5, 7, 11 and 13.
+- */
+-extern const char pattern[];
+-extern const int pattern_size; /* length of pattern array */
++static void primes(uint64_t, uint64_t);
++static uint64_t read_num_buf(void);
++static void usage(void) __dead;
+
+-int main(int, char *[]);
+-void primes(ubig, ubig);
+-ubig read_num_buf(void);
+-void usage(void) __attribute__((__noreturn__));
+
+ int
+-main(argc, argv)
+- int argc;
+- char *argv[];
++main(int argc, char *argv[])
+ {
+- ubig start; /* where to start generating */
+- ubig stop; /* don't generate at or above this value */
++ uint64_t start; /* where to start generating */
++ uint64_t stop; /* don't generate at or above this value */
+ int ch;
+ char *p;
+
+- /* Revoke setgid privileges */
+- setregid(getgid(), getgid());
+-
+- while ((ch = getopt(argc, argv, "")) != -1)
++ while ((ch = getopt(argc, argv, "dh")) != -1)
+ switch (ch) {
++ case 'd':
++ dflag++;
++ break;
++ case 'h':
++ hflag++;
++ break;
+ case '?':
+ default:
+ usage();
+@@ -131,10 +118,10 @@ main(argc, argv)
+ argv += optind;
+
+ start = 0;
+- stop = BIG;
++ stop = (uint64_t)(-1);
+
+ /*
+- * Convert low and high args. Strtoul(3) sets errno to
++ * Convert low and high args. Strtoumax(3) sets errno to
+ * ERANGE if the number is too large, but, if there's
+ * a leading minus sign it returns the negation of the
+ * result of the conversion, which we'd rather disallow.
+@@ -146,14 +133,14 @@ main(argc, argv)
+ errx(1, "negative numbers aren't permitted.");
+
+ errno = 0;
+- start = strtoul(argv[0], &p, 10);
++ start = strtoumax(argv[0], &p, 0);
+ if (errno)
+ err(1, "%s", argv[0]);
+ if (*p != '\0')
+ errx(1, "%s: illegal numeric format.", argv[0]);
+
+ errno = 0;
+- stop = strtoul(argv[1], &p, 10);
++ stop = strtoumax(argv[1], &p, 0);
+ if (errno)
+ err(1, "%s", argv[1]);
+ if (*p != '\0')
+@@ -165,7 +152,7 @@ main(argc, argv)
+ errx(1, "negative numbers aren't permitted.");
+
+ errno = 0;
+- start = strtoul(argv[0], &p, 10);
++ start = strtoumax(argv[0], &p, 0);
+ if (errno)
+ err(1, "%s", argv[0]);
+ if (*p != '\0')
+@@ -181,18 +168,18 @@ main(argc, argv)
+ if (start > stop)
+ errx(1, "start value must be less than stop value.");
+ primes(start, stop);
+- exit(0);
++ return (0);
+ }
+
+ /*
+ * read_num_buf --
+- * This routine returns a number n, where 0 <= n && n <= BIG.
++ * This routine returns a number n, where 0 <= n && n <= ULONG_MAX.
+ */
+-ubig
+-read_num_buf()
++static uint64_t
++read_num_buf(void)
+ {
+- ubig val;
+- char *p, buf[100]; /* > max number of digits. */
++ uint64_t val;
++ char *p, buf[LINE_MAX]; /* > max number of digits. */
+
+ for (;;) {
+ if (fgets(buf, sizeof(buf), stdin) == NULL) {
+@@ -200,13 +187,13 @@ read_num_buf()
+ err(1, "stdin");
+ exit(0);
+ }
+- for (p = buf; isblank(*p); ++p);
++ for (p = buf; isblank((unsigned char)*p); ++p);
+ if (*p == '\n' || *p == '\0')
+ continue;
+ if (*p == '-')
+ errx(1, "negative numbers aren't permitted.");
+ errno = 0;
+- val = strtoul(buf, &p, 10);
++ val = strtoumax(buf, &p, 0);
+ if (errno)
+ err(1, "%s", buf);
+ if (*p != '\n')
+@@ -218,28 +205,27 @@ read_num_buf()
+ /*
+ * primes - sieve and print primes from start up to and but not including stop
+ */
+-void
+-primes(start, stop)
+- ubig start; /* where to start generating */
+- ubig stop; /* don't generate at or above this value */
++static void
++primes(uint64_t start, uint64_t stop)
+ {
+ char *q; /* sieve spot */
+- ubig factor; /* index and factor */
++ uint64_t factor; /* index and factor */
+ char *tab_lim; /* the limit to sieve on the table */
+- const ubig *p; /* prime table pointer */
+- ubig fact_lim; /* highest prime for current block */
+- ubig mod; /* temp storage for mod */
++ const uint64_t *p; /* prime table pointer */
++ uint64_t fact_lim; /* highest prime for current block */
++ uint64_t mod; /* temp storage for mod */
++ uint64_t prev = 0;
+
+ /*
+ * A number of systems can not convert double values into unsigned
+ * longs when the values are larger than the largest signed value.
+- * We don't have this problem, so we can go all the way to BIG.
++ * We don't have this problem, so we can go all the way to ULONG_MAX.
+ */
+ if (start < 3) {
+- start = (ubig)2;
++ start = 2;
+ }
+ if (stop < 3) {
+- stop = (ubig)2;
++ stop = 2;
+ }
+ if (stop <= start) {
+ return;
+@@ -263,8 +249,13 @@ primes(start, stop)
+ for (p = &prime[0], factor = prime[0];
+ factor < stop && p <= pr_limit; factor = *(++p)) {
+ if (factor >= start) {
+- printf("%lu\n", (unsigned long) factor);
++ printf(hflag ? "%" PRIx64 : "%" PRIu64, factor);
++ if (dflag) {
++ printf(" (%" PRIu64 ")", factor - prev);
++ }
++ putchar('\n');
+ }
++ prev = factor;
+ }
+ /* return early if we are done */
+ if (p <= pr_limit) {
+@@ -298,11 +289,10 @@ primes(start, stop)
+ /* note highest useful factor and sieve spot */
+ if (stop-start > TABSIZE+TABSIZE) {
+ tab_lim = &table[TABSIZE]; /* sieve it all */
+- fact_lim = (int)sqrt(
+- (double)(start)+TABSIZE+TABSIZE+1.0);
++ fact_lim = sqrt(start+1.0+TABSIZE+TABSIZE);
+ } else {
+ tab_lim = &table[(stop-start)/2]; /* partial sieve */
+- fact_lim = (int)sqrt((double)(stop)+1.0);
++ fact_lim = sqrt(stop+1.0);
+ }
+ /* sieve for factors >= 17 */
+ factor = 17; /* 17 is first prime to use */
+@@ -315,26 +305,36 @@ primes(start, stop)
+ } else {
+ q = &table[mod ? factor-(mod/2) : 0];
+ }
+- /* sive for our current factor */
++ /* sieve for our current factor */
+ for ( ; q < tab_lim; q += factor) {
+ *q = '\0'; /* sieve out a spot */
+ }
+- } while ((factor=(ubig)(*(p++))) <= fact_lim);
++ factor = *p++;
++ } while (factor <= fact_lim);
+
+ /*
+ * print generated primes
+ */
+ for (q = table; q < tab_lim; ++q, start+=2) {
+ if (*q) {
+- printf("%lu\n", (unsigned long) start);
++ if (start > SIEVEMAX) {
++ if (!isprime(start))
++ continue;
++ }
++ printf(hflag ? "%" PRIx64 : "%" PRIu64, start);
++ if (dflag && (prev || (start <= *pr_limit))) {
++ printf(" (%" PRIu64 ")", start - prev);
++ }
++ putchar('\n');
++ prev = start;
+ }
+ }
+ }
+ }
+
+-void
+-usage()
++static void
++usage(void)
+ {
+- (void)fprintf(stderr, "usage: primes [start [stop]]\n");
++ (void)fprintf(stderr, "usage: primes [-dh] [start [stop]]\n");
+ exit(1);
+ }
+diff --git a/primes/primes.h b/primes/primes.h
+index a032c9b..2c00446 100644
+--- a/primes/primes.h
++++ b/primes/primes.h
+@@ -1,4 +1,4 @@
+-/* $NetBSD: primes.h,v 1.5 2003/08/07 09:37:34 agc Exp $ */
++/* $NetBSD: primes.h,v 1.7 2018/02/03 15:40:29 christos Exp $ */
+
+ /*
+ * Copyright (c) 1989, 1993
+@@ -37,14 +37,35 @@
+ /*
+ * primes - generate a table of primes between two values
+ *
+- * By: Landon Curt Noll chongo@toad.com, ...!{sun,tolsoft}!hoptoad!chongo
++ * By Landon Curt Noll, http://www.isthe.com/chongo/index.html /\oo/\
+ *
+- * chongo <for a good prime call: 391581 * 2^216193 - 1> /\oo/\
+ */
+
+-/* ubig is the type that holds a large unsigned value */
+-typedef unsigned long ubig; /* must be >=32 bit unsigned value */
+-#define BIG ULONG_MAX /* largest value will sieve */
++#include <stdint.h>
+
+ /* bytes in sieve table (must be > 3*5*7*11) */
+ #define TABSIZE 256*1024
++
++/*
++ * prime[i] is the (i-1)th prime.
++ *
++ * We are able to sieve 2^32-1 because this byte table yields all primes
++ * up to 65537 and 65537^2 > 2^32-1.
++ */
++
++extern const uint64_t prime[]; /* must be >=32 bit unsigned values */
++extern const uint64_t *const pr_limit; /* largest prime in the prime array */
++
++/* Maximum size sieving alone can handle. */
++#define SIEVEMAX 4295098368ULL
++
++/*
++ * To avoid excessive sieves for small factors, we use the table below to
++ * setup our sieve blocks. Each element represents an odd number starting
++ * with 1. All non-zero elements are factors of 3, 5, 7, 11 and 13.
++ */
++extern const char pattern[];
++extern const size_t pattern_size; /* length of pattern array */
++
++/* Test for primality using strong pseudoprime tests. */
++int isprime(uint64_t);
+diff --git a/primes/spsp.c b/primes/spsp.c
+new file mode 100644
+index 0000000..998751c
+--- /dev/null
++++ b/primes/spsp.c
+@@ -0,0 +1,215 @@
++/* $NetBSD: spsp.c,v 1.2 2018/02/03 15:40:29 christos Exp $ */
++
++/*-
++ * Copyright (c) 2014 Colin Percival
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++#include <sys/cdefs.h>
++#ifndef lint
++__COPYRIGHT("@(#) Copyright (c) 1989, 1993\
++ The Regents of the University of California. All rights reserved.");
++#endif /* not lint */
++
++#ifndef lint
++#if 0
++static char sccsid[] = "@(#)primes.c 8.5 (Berkeley) 5/10/95";
++#else
++__RCSID("$NetBSD: spsp.c,v 1.2 2018/02/03 15:40:29 christos Exp $");
++#endif
++#endif /* not lint */
++
++#include <assert.h>
++#include <stddef.h>
++#include <stdint.h>
++
++#include "primes.h"
++
++/* Return a * b % n, where 0 <= n. */
++static uint64_t
++mulmod(uint64_t a, uint64_t b, uint64_t n)
++{
++ uint64_t x = 0;
++ uint64_t an = a % n;
++
++ while (b != 0) {
++ if (b & 1) {
++ x += an;
++ if ((x < an) || (x >= n))
++ x -= n;
++ }
++ if (an + an < an)
++ an = an + an - n;
++ else if (an + an >= n)
++ an = an + an - n;
++ else
++ an = an + an;
++
++ b >>= 1;
++ }
++
++ return (x);
++}
++
++/* Return a^r % n, where 0 < n. */
++static uint64_t
++powmod(uint64_t a, uint64_t r, uint64_t n)
++{
++ uint64_t x = 1;
++
++ while (r != 0) {
++ if (r & 1)
++ x = mulmod(a, x, n);
++ a = mulmod(a, a, n);
++ r >>= 1;
++ }
++
++ return (x);
++}
++
++/* Return non-zero if n is a strong pseudoprime to base p. */
++static int
++spsp(uint64_t n, uint64_t p)
++{
++ uint64_t x;
++ uint64_t r = n - 1;
++ int k = 0;
++
++ /* Compute n - 1 = 2^k * r. */
++ while ((r & 1) == 0) {
++ k++;
++ r >>= 1;
++ }
++
++ /* Compute x = p^r mod n. If x = 1, n is a p-spsp. */
++ x = powmod(p, r, n);
++ if (x == 1)
++ return (1);
++
++ /* Compute x^(2^i) for 0 <= i < n. If any are -1, n is a p-spsp. */
++ while (k > 0) {
++ if (x == n - 1)
++ return (1);
++ x = powmod(x, 2, n);
++ k--;
++ }
++
++ /* Not a p-spsp. */
++ return (0);
++}
++
++/* Test for primality using strong pseudoprime tests. */
++int
++isprime(uint64_t _n)
++{
++ uint64_t n = _n;
++
++ /*
++ * Values from:
++ * C. Pomerance, J.L. Selfridge, and S.S. Wagstaff, Jr.,
++ * The pseudoprimes to 25 * 10^9, Math. Comp. 35(151):1003-1026, 1980.
++ */
++
++ /* No SPSPs to base 2 less than 2047. */
++ if (!spsp(n, 2))
++ return (0);
++ if (n < 2047ULL)
++ return (1);
++
++ /* No SPSPs to bases 2,3 less than 1373653. */
++ if (!spsp(n, 3))
++ return (0);
++ if (n < 1373653ULL)
++ return (1);
++
++ /* No SPSPs to bases 2,3,5 less than 25326001. */
++ if (!spsp(n, 5))
++ return (0);
++ if (n < 25326001ULL)
++ return (1);
++
++ /* No SPSPs to bases 2,3,5,7 less than 3215031751. */
++ if (!spsp(n, 7))
++ return (0);
++ if (n < 3215031751ULL)
++ return (1);
++
++ /*
++ * Values from:
++ * G. Jaeschke, On strong pseudoprimes to several bases,
++ * Math. Comp. 61(204):915-926, 1993.
++ */
++
++ /* No SPSPs to bases 2,3,5,7,11 less than 2152302898747. */
++ if (!spsp(n, 11))
++ return (0);
++ if (n < 2152302898747ULL)
++ return (1);
++
++ /* No SPSPs to bases 2,3,5,7,11,13 less than 3474749660383. */
++ if (!spsp(n, 13))
++ return (0);
++ if (n < 3474749660383ULL)
++ return (1);
++
++ /* No SPSPs to bases 2,3,5,7,11,13,17 less than 341550071728321. */
++ if (!spsp(n, 17))
++ return (0);
++ if (n < 341550071728321ULL)
++ return (1);
++
++ /* No SPSPs to bases 2,3,5,7,11,13,17,19 less than 341550071728321. */
++ if (!spsp(n, 19))
++ return (0);
++ if (n < 341550071728321ULL)
++ return (1);
++
++ /*
++ * Value from:
++ * Y. Jiang and Y. Deng, Strong pseudoprimes to the first eight prime
++ * bases, Math. Comp. 83(290):2915-2924, 2014.
++ */
++
++ /* No SPSPs to bases 2..23 less than 3825123056546413051. */
++ if (!spsp(n, 23))
++ return (0);
++ if (n < 3825123056546413051)
++ return (1);
++ /*
++ * Value from:
++ * J. Sorenson and J. Webster, Strong pseudoprimes to twelve prime
++ * bases, Math. Comp. 86(304):985-1003, 2017.
++ */
++
++ /* No SPSPs to bases 2..37 less than 318665857834031151167461. */
++ if (!spsp(n, 29))
++ return (0);
++ if (!spsp(n, 31))
++ return (0);
++ if (!spsp(n, 37))
++ return (0);
++
++ /* All 64-bit values are less than 318665857834031151167461. */
++ return (1);
++}
diff --git a/source/y/bsd-games/patches/0016-Better-explanation-how-to-read-the-documentation.patch b/source/y/bsd-games/patches/0016-Better-explanation-how-to-read-the-documentation.patch
new file mode 100644
index 00000000..0ab32b12
--- /dev/null
+++ b/source/y/bsd-games/patches/0016-Better-explanation-how-to-read-the-documentation.patch
@@ -0,0 +1,46 @@
+From: "Dr. Tobias Quathamer" <toddy@debian.org>
+Date: Fri, 27 Apr 2018 10:01:22 +0200
+Subject: Better explanation how to read the documentation.
+
+This patch is based on a suggestion from Ben Wong.
+
+Thanks: Ben Wong <galadriel@wongs.net>
+Closes: #874680
+---
+ trek/trek.6.in | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/trek/trek.6.in b/trek/trek.6.in
+index e3cc135..9d4b0a1 100644
+--- a/trek/trek.6.in
++++ b/trek/trek.6.in
+@@ -75,10 +75,6 @@ You should normally start out with a novice and work up.
+ .Pp
+ In general, throughout the game, if you forget what is appropriate
+ the game will tell you what it expects if you just type in a question mark.
+-.Sh AUTHOR
+-.An Eric Allman
+-.Sh SEE ALSO
+-.Pa @docdir@/trek.me
+ .Sh COMMAND SUMMARY
+ .Bl -item -compact
+ .It
+@@ -137,3 +133,18 @@ amt1 course1 spread1 ...
+ .It
+ .Ic w Ns arp warp_factor
+ .El
++.Sh AUTHOR
++.An Eric Allman
++.Sh SEE ALSO
++.Pp
++The complete documentation,
++.Em Trek
++by Eric Allman, is in
++.Pa @docdir@/trek.me.gz
++which can be viewed using
++.Dl cd @docdir@
++.Dl zcat trek.me.gz | tbl | nroff -me | less -r
++.Pp
++Or you can view a PDF version of the documentation,
++available here:
++.Dl @docdir@/trek.pdf
diff --git a/source/y/bsd-games/patches/0017-hack-Fix-segv-when-i-inventory-done-after-load-from-.patch b/source/y/bsd-games/patches/0017-hack-Fix-segv-when-i-inventory-done-after-load-from-.patch
new file mode 100644
index 00000000..51116aee
--- /dev/null
+++ b/source/y/bsd-games/patches/0017-hack-Fix-segv-when-i-inventory-done-after-load-from-.patch
@@ -0,0 +1,67 @@
+From: "Dr. Tobias Quathamer" <toddy@debian.org>
+Date: Sat, 28 Apr 2018 15:09:16 +0200
+Subject: hack: Fix segv when 'i' (inventory) done after load from saved game.
+
+Not all name information was saved or recovered leaving pointers to
+nothing.
+
+Thanks: Richard Henschel <rhenschel@accesscomm.ca>
+---
+ hack/hack.o_init.c | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/hack/hack.o_init.c b/hack/hack.o_init.c
+index dc5bf93..fdab26e 100644
+--- a/hack/hack.o_init.c
++++ b/hack/hack.o_init.c
+@@ -184,8 +184,7 @@ savenames(fd)
+ bwrite(fd, (char *) bases, sizeof bases);
+ bwrite(fd, (char *) objects, sizeof objects);
+ /*
+- * as long as we use only one version of Hack/Quest we need not save
+- * oc_name and oc_descr, but we must save oc_uname for all objects
++ * Save oc_name, oc_descr, as well as oc_uname for all objects
+ */
+ for (i = 0; i < SIZE(objects); i++) {
+ if (objects[i].oc_uname) {
+@@ -193,6 +192,16 @@ savenames(fd)
+ bwrite(fd, (char *) &len, sizeof len);
+ bwrite(fd, objects[i].oc_uname, len);
+ }
++ if (objects[i].oc_name) {
++ len = strlen(objects[i].oc_name) + 1;
++ bwrite(fd, (char *) &len, sizeof len);
++ bwrite(fd, objects[i].oc_name, len);
++ }
++ if (objects[i].oc_descr) {
++ len = strlen(objects[i].oc_descr) + 1;
++ bwrite(fd, (char *) &len, sizeof len);
++ bwrite(fd, objects[i].oc_descr, len);
++ }
+ }
+ }
+
+@@ -205,11 +214,23 @@ restnames(fd)
+ mread(fd, (char *) bases, sizeof bases);
+ mread(fd, (char *) objects, sizeof objects);
+ for (i = 0; i < SIZE(objects); i++)
++ {
+ if (objects[i].oc_uname) {
+ mread(fd, (char *) &len, sizeof len);
+ objects[i].oc_uname = (char *) alloc(len);
+ mread(fd, objects[i].oc_uname, len);
+ }
++ if (objects[i].oc_name) {
++ mread(fd, (char *) &len, sizeof len);
++ objects[i].oc_name = (char *) alloc(len);
++ mread(fd, objects[i].oc_name, len);
++ }
++ if (objects[i].oc_descr) {
++ mread(fd, (char *) &len, sizeof len);
++ objects[i].oc_descr = (char *) alloc(len);
++ mread(fd, objects[i].oc_descr, len);
++ }
++ }
+ }
+
+ int
diff --git a/source/y/bsd-games/bsd-games.config.params.diff b/source/y/bsd-games/patches/bsd-games.config.params.diff
index b250ed04..b250ed04 100644
--- a/source/y/bsd-games/bsd-games.config.params.diff
+++ b/source/y/bsd-games/patches/bsd-games.config.params.diff
diff --git a/source/y/bsd-games/patches/bsd-games.factor.no.ubig.diff b/source/y/bsd-games/patches/bsd-games.factor.no.ubig.diff
new file mode 100644
index 00000000..21fbcf1b
--- /dev/null
+++ b/source/y/bsd-games/patches/bsd-games.factor.no.ubig.diff
@@ -0,0 +1,22 @@
+--- ./factor/factor.c.orig 2004-02-08 07:20:03.000000000 -0600
++++ ./factor/factor.c 2019-02-17 15:38:29.289767009 -0600
+@@ -96,8 +96,8 @@
+ * We are able to sieve 2^32-1 because this byte table yields all primes
+ * up to 65537 and 65537^2 > 2^32-1.
+ */
+-extern const ubig prime[];
+-extern const ubig *pr_limit; /* largest prime in the prime array */
++extern const uint64_t prime[];
++extern const uint64_t *const pr_limit; /* largest prime in the prime array */
+
+ #define PRIME_CHECKS 5
+
+@@ -202,7 +202,7 @@
+ void
+ pr_fact(BIGNUM *val)
+ {
+- const ubig *fact; /* The factor found. */
++ const uint64_t *fact; /* The factor found. */
+
+ /* Firewall - catch 0 and 1. */
+ if (BN_is_zero(val)) /* Historical practice; 0 just exits. */
diff --git a/source/y/bsd-games/patches/bsd-games.fortunepath.diff b/source/y/bsd-games/patches/bsd-games.fortunepath.diff
new file mode 100644
index 00000000..0ce0ddf8
--- /dev/null
+++ b/source/y/bsd-games/patches/bsd-games.fortunepath.diff
@@ -0,0 +1,11 @@
+--- ./configure.orig 2004-02-08 19:37:31.000000000 -0600
++++ ./configure 2019-02-17 16:07:03.818785361 -0600
+@@ -521,7 +521,7 @@
+ game_ask dm "File to disable games playing" dm_nogamesfile /etc/nogames
+ game_ask dm "Log file for dm" dm_logfile "$varlibdir/games.log"
+ game_ask fish "File for fish instructions" fish_instrfile "$sharedir/fish.instr"
+-game_ask fortune "Directory for fortune files" fortune_dir "$sharedir/fortune"
++game_ask fortune "Directory for fortune files" fortune_dir "$sharedir/fortunes"
+ game_ask hack "Directory for hack variable data" hack_dir "$varlibdir/hack"
+
+ if building_in hack; then
diff --git a/source/y/bsd-games/bsd-games.pom.diff b/source/y/bsd-games/patches/bsd-games.pom.diff
index 80bbd9ab..80bbd9ab 100644
--- a/source/y/bsd-games/bsd-games.pom.diff
+++ b/source/y/bsd-games/patches/bsd-games.pom.diff
diff --git a/source/y/bsd-games/slack-desc b/source/y/bsd-games/slack-desc
index 75ad2589..25a88953 100644
--- a/source/y/bsd-games/slack-desc
+++ b/source/y/bsd-games/slack-desc
@@ -10,10 +10,10 @@ bsd-games: bsd-games (Classic BSD text games collection)
bsd-games:
bsd-games: Games that go in /usr/games: adventure arithmetic atc backgammon
bsd-games: banner battlestar bcd caesar canfield cfscores countmail cribbage
-bsd-games: factor fish fortune gomoku hangman hunt mille monop morse number
-bsd-games: phantasia pig pom ppt primes quiz rain random robots rot13 sail
-bsd-games: snake snscore teachgammon trek wargames worm worms wump
+bsd-games: dab factor fortune go-fish gomoku hack hangman hunt mille monop
+bsd-games: morse number phantasia pig pom ppt primes quiz rain random robots
+bsd-games: rot13 sail snake snscore teachgammon trek wargames worm worms wtf
+bsd-games: wump
bsd-games:
bsd-games: Adds a call to 'fortune' to /etc/profile.d/ so that users will get a
bsd-games: fortune message when they log in.
-bsd-games: