summaryrefslogtreecommitdiff
path: root/games
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2012-02-08 05:35:19 +0000
committerCy Schubert <cy@FreeBSD.org>2012-02-08 05:35:19 +0000
commit7e3d00634a45b6dec3404704ca958439a2d8d840 (patch)
treef67263bd94ea794c98a4273c60e3915d90cc4911 /games
parent- Update to 3.1.19 (diff)
Resurrect the old-school BSD games.
Notes
Notes: svn path=/head/; revision=290696
Diffstat (limited to 'games')
-rw-r--r--games/freebsd-games/Makefile79
-rw-r--r--games/freebsd-games/distinfo3
-rw-r--r--games/freebsd-games/files/patch-adventure_crc.c11
-rw-r--r--games/freebsd-games/files/patch-adventure_hdr.h11
-rw-r--r--games/freebsd-games/files/patch-atc_Makefile10
-rw-r--r--games/freebsd-games/files/patch-atc_include.h35
-rw-r--r--games/freebsd-games/files/patch-atc_input.c23
-rw-r--r--games/freebsd-games/files/patch-atc_main.c47
-rw-r--r--games/freebsd-games/files/patch-backgammon_backgammon_main.c29
-rw-r--r--games/freebsd-games/files/patch-backgammon_common__source_back.h25
-rw-r--r--games/freebsd-games/files/patch-backgammon_common__source_subs.c10
-rw-r--r--games/freebsd-games/files/patch-backgammon_teachgammon_teach.c25
-rw-r--r--games/freebsd-games/files/patch-battlestar_init.c11
-rw-r--r--games/freebsd-games/files/patch-hack_Makefile12
-rw-r--r--games/freebsd-games/files/patch-hack_config.h9
-rw-r--r--games/freebsd-games/files/patch-hack_hack.ioctl.c29
-rw-r--r--games/freebsd-games/files/patch-hack_hack.pager.c10
-rw-r--r--games/freebsd-games/files/patch-hack_hack.shk.c46
-rw-r--r--games/freebsd-games/files/patch-hack_hack.termcap.c26
-rw-r--r--games/freebsd-games/files/patch-hack_hack.tty.c42
-rw-r--r--games/freebsd-games/files/patch-hack_hack.unix.c13
-rw-r--r--games/freebsd-games/files/patch-larn_Makefile10
-rw-r--r--games/freebsd-games/files/patch-larn_diag.c31
-rw-r--r--games/freebsd-games/files/patch-larn_header.h18
-rw-r--r--games/freebsd-games/files/patch-larn_io.c46
-rw-r--r--games/freebsd-games/files/patch-quiz175
-rw-r--r--games/freebsd-games/files/patch-rogue_Makefile11
-rw-r--r--games/freebsd-games/files/patch-snake_snake_move.c24
-rw-r--r--games/freebsd-games/files/patch-snake_snake_snake.c10
-rw-r--r--games/freebsd-games/files/patch-snake_snake_snake.h25
-rw-r--r--games/freebsd-games/files/patch-trek_main.c33
-rw-r--r--games/freebsd-games/pkg-descr6
-rw-r--r--games/freebsd-games/pkg-plist108
33 files changed, 1003 insertions, 0 deletions
diff --git a/games/freebsd-games/Makefile b/games/freebsd-games/Makefile
new file mode 100644
index 000000000000..ea486d90bad4
--- /dev/null
+++ b/games/freebsd-games/Makefile
@@ -0,0 +1,79 @@
+# Ports collection makefile for: games
+# Date created: 20 Nov 2002
+# Whom: Mark Murray <markm@FreeBSD.org>
+#
+# $FreeBSD$
+#
+
+PORTNAME= freebsd-games
+PORTVERSION= 5.1.1
+PORTREVISION= 7
+CATEGORIES= games
+MASTER_SITES= ${MASTER_SITE_LOCAL}
+MASTER_SITE_SUBDIR=cy
+
+MAINTAINER= cy@FreeBSD.org
+COMMENT= FreeBSD-modified "Standard" BSD games
+
+USE_BZIP2= yes
+
+MAN6= \
+ adventure.6 \
+ arithmetic.6 \
+ atc.6 \
+ backgammon.6 \
+ battlestar.6 \
+ bs.6 \
+ canfield.6 \
+ cfscores.6 \
+ cribbage.6 \
+ fish.6 \
+ hack.6 \
+ hangman.6 \
+ larn.6 \
+ mille.6 \
+ phantasia.6 \
+ piano.6 \
+ pig.6 \
+ quiz.6 \
+ robots.6 \
+ rogue.6 \
+ sail.6 \
+ snake.6 \
+ snscore.6 \
+ trek.6 \
+ worm.6 \
+ wump.6
+
+MANCOMPRESSED= maybe
+
+PATHNAME_FILES= atc/atc.6 \
+ atc/pathnames.h \
+ cribbage/pathnames.h \
+ fish/pathnames.h \
+ larn/pathnames.h \
+ quiz/datfiles/index \
+ quiz/pathnames.h \
+ quiz/quiz.6 \
+ wump/pathnames.h
+
+.include <bsd.port.pre.mk>
+
+post-extract:
+ @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} \
+ ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} extract)
+
+post-patch:
+ @${FIND} ${WRKSRC} -name '*.c' -or -name '*.h' -or -name '*.6' -or \
+ -name 'index' | ${XARGS} ${REINPLACE_CMD} -e \
+ 's|share/games|local/share/games|g'
+ @${FIND} ${WRKSRC} -name 'Makefile' | \
+ ${XARGS} ${REINPLACE_CMD} 's|$${LIBCOMPAT}||g;;s|-lcompat||g'
+ @for f in ${PATHNAME_FILES}; do \
+ ${REINPLACE_CMD} -e 's|/usr/local/local/local|${PREFIX}|g' \
+ ${WRKSRC}/$${f}; \
+ done
+ @${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|' \
+ "${WRKSRC}/hack/hack.unix.c"
+
+.include <bsd.port.post.mk>
diff --git a/games/freebsd-games/distinfo b/games/freebsd-games/distinfo
new file mode 100644
index 000000000000..0e72990e3eb4
--- /dev/null
+++ b/games/freebsd-games/distinfo
@@ -0,0 +1,3 @@
+MD5 (freebsd-games-5.1.1.tar.bz2) = 31c098a1ef0d198a6456e26b6d65be72
+SHA256 (freebsd-games-5.1.1.tar.bz2) = 2ef700e090c975c7d6807a556ca29acc11215ba43f3ad26ad555a63cb3f72f71
+SIZE (freebsd-games-5.1.1.tar.bz2) = 2434501
diff --git a/games/freebsd-games/files/patch-adventure_crc.c b/games/freebsd-games/files/patch-adventure_crc.c
new file mode 100644
index 000000000000..dfca63e6ab53
--- /dev/null
+++ b/games/freebsd-games/files/patch-adventure_crc.c
@@ -0,0 +1,11 @@
+--- adventure/crc.c.bak Sat Feb 23 01:59:45 2002
++++ adventure/crc.c Wed Sep 29 03:29:37 2004
+@@ -120,7 +120,7 @@
+
+ /* Process nr bytes at a time; ptr points to them */
+ u_long
+-crc(const char *ptr, size_t nr)
++crc(const char *ptr, ssize_t nr)
+ {
+ int i;
+ const char *p;
diff --git a/games/freebsd-games/files/patch-adventure_hdr.h b/games/freebsd-games/files/patch-adventure_hdr.h
new file mode 100644
index 000000000000..02344c9191b4
--- /dev/null
+++ b/games/freebsd-games/files/patch-adventure_hdr.h
@@ -0,0 +1,11 @@
+--- adventure/hdr.h.bak Mon Nov 10 15:46:52 2003
++++ adventure/hdr.h Wed Sep 29 03:30:55 2004
+@@ -167,7 +167,7 @@
+ void checkhints (void);
+ void ciao (void);
+ extern gid_t egid;
+-u_long crc (const char *ptr, size_t nr);
++u_long crc (const char *ptr, ssize_t nr);
+ void crc_start (void);
+ int dark (void);
+ void datime (int *d, int *t);
diff --git a/games/freebsd-games/files/patch-atc_Makefile b/games/freebsd-games/files/patch-atc_Makefile
new file mode 100644
index 000000000000..b225c610b586
--- /dev/null
+++ b/games/freebsd-games/files/patch-atc_Makefile
@@ -0,0 +1,10 @@
+Index: atc/Makefile
+@@ -2,7 +2,7 @@
+ # $FreeBSD$
+
+ PROG= atc
+-CFLAGS+=-DBSD -I${.CURDIR} -I.
++CFLAGS+=-DPOSIX -I${.CURDIR} -I.
+ SRCS= extern.c grammar.y graphics.c input.c lex.l list.c log.c \
+ main.c tunable.c update.c y.tab.h
+ MAN= atc.6
diff --git a/games/freebsd-games/files/patch-atc_include.h b/games/freebsd-games/files/patch-atc_include.h
new file mode 100644
index 000000000000..e35e06466e45
--- /dev/null
+++ b/games/freebsd-games/files/patch-atc_include.h
@@ -0,0 +1,35 @@
+Index: atc/include.h
+@@ -63,6 +63,14 @@
+ #include <sys/utsname.h>
+ #endif
+
++#ifdef POSIX
++#include <termios.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <string.h>
++#include <sys/utsname.h>
++#endif
++
+ #include <signal.h>
+ #include <math.h>
+
+@@ -76,6 +84,18 @@
+ #define srandom srand
+ #define random rand
+ #define sgttyb termio
++#define sg_erase c_cc[VERASE]
++#define sg_kill c_cc[VKILL]
++#endif
++
++#ifdef POSIX
++#define index strchr
++#define rindex strrchr
++#define bcopy(a,b,c) memcpy((b), (a), (c))
++#define bzero(a,b) memset((a), '\0', (b))
++#define srandom srand
++#define random rand
++#define sgttyb termios
+ #define sg_erase c_cc[2]
+ #define sg_kill c_cc[3]
+ #endif
diff --git a/games/freebsd-games/files/patch-atc_input.c b/games/freebsd-games/files/patch-atc_input.c
new file mode 100644
index 000000000000..7cafb6d74459
--- /dev/null
+++ b/games/freebsd-games/files/patch-atc_input.c
@@ -0,0 +1,23 @@
+Index: atc/input.c
+@@ -323,6 +323,10 @@
+ int aval;
+ aval = alarm(0);
+ #endif
++#ifdef POSIX
++ int aval;
++ aval = alarm(0);
++#endif
+ if (fork() == 0) /* child */
+ {
+ char *shell, *base;
+@@ -358,6 +362,10 @@
+ #endif
+ #ifdef SYSV
+ ioctl(fileno(stdin), TCSETAW, &tty_new);
++ alarm(aval);
++#endif
++#ifdef POSIX
++ tcsetattr(fileno(stdin), TCSANOW, &tty_new);
+ alarm(aval);
+ #endif
+ }
diff --git a/games/freebsd-games/files/patch-atc_main.c b/games/freebsd-games/files/patch-atc_main.c
new file mode 100644
index 000000000000..3592011afea8
--- /dev/null
+++ b/games/freebsd-games/files/patch-atc_main.c
@@ -0,0 +1,47 @@
+Index: atc/main.c
+@@ -173,6 +173,15 @@
+ ioctl(fileno(stdin), TCSETAW, &tty_new);
+ #endif
+
++#ifdef POSIX
++ tcgetattr(fileno(stdin), &tty_start);
++ bcopy(&tty_start, &tty_new, sizeof(tty_new));
++ tty_new.c_lflag &= ~ICANON;
++ tty_new.c_lflag &= ~ECHO;
++ tty_new.c_cc[VMIN] = 1;
++ tty_new.c_cc[VTIME] = 0;
++ tcsetattr(fileno(stdin), TCSANOW, &tty_new);
++#endif
+ signal(SIGALRM, update);
+
+ #ifdef BSD
+@@ -185,6 +194,9 @@
+ #ifdef SYSV
+ alarm(sp->update_secs);
+ #endif
++#ifdef POSIX
++ alarm(sp->update_secs);
++#endif
+
+ for (;;) {
+ if (getcommand() != 1)
+@@ -198,6 +210,9 @@
+ #ifdef SYSV
+ alarm(0);
+ #endif
++#ifdef POSIX
++ alarm(0);
++#endif
+
+ update();
+
+@@ -209,6 +224,9 @@
+ setitimer(ITIMER_REAL, &itv, NULL);
+ #endif
+ #ifdef SYSV
++ alarm(sp->update_secs);
++#endif
++#ifdef POSIX
+ alarm(sp->update_secs);
+ #endif
+ }
diff --git a/games/freebsd-games/files/patch-backgammon_backgammon_main.c b/games/freebsd-games/files/patch-backgammon_backgammon_main.c
new file mode 100644
index 000000000000..840d4ba48057
--- /dev/null
+++ b/games/freebsd-games/files/patch-backgammon_backgammon_main.c
@@ -0,0 +1,29 @@
+Index: backgammon/backgammon/main.c
+@@ -113,13 +111,13 @@
+ signal (SIGINT,getout); /* trap interrupts */
+ if (gtty (0,&tty) == -1) /* get old tty mode */
+ errexit ("backgammon(gtty)");
+- old = tty.sg_flags;
++ old = tty.c_lflag;
+ #ifdef V7
+- raw = ((noech = old & ~ECHO) | CBREAK); /* set up modes */
++ raw = ((noech = old & ~ECHO) & ~ICANON); /* set up modes */
+ #else
+ raw = ((noech = old & ~ECHO) | RAW); /* set up modes */
+ #endif
+- ospeed = tty.sg_ospeed; /* for termlib */
++ ospeed = cfgetospeed(&tty); /* for termlib */
+
+ /* get terminal
+ * capabilities, and
+@@ -135,8 +133,8 @@
+ getarg (argc, argv);
+ args[acnt] = NULL;
+ if (tflag) { /* clear screen */
+- noech &= ~(CRMOD|XTABS);
+- raw &= ~(CRMOD|XTABS);
++ noech &= ~(ICRNL|OXTABS);
++ raw &= ~(ICRNL|OXTABS);
+ clear();
+ }
+ fixtty (raw); /* go into raw mode */
diff --git a/games/freebsd-games/files/patch-backgammon_common__source_back.h b/games/freebsd-games/files/patch-backgammon_common__source_back.h
new file mode 100644
index 000000000000..2542f462c63e
--- /dev/null
+++ b/games/freebsd-games/files/patch-backgammon_common__source_back.h
@@ -0,0 +1,25 @@
+Index: backgammon/common_source/back.h
+@@ -33,7 +33,13 @@
+ * @(#)back.h 8.1 (Berkeley) 5/31/93
+ */
+
+-#include <sgtty.h>
++#include <termios.h>
++
++#define sg_erase c_cc[2]
++#define sg_kill c_cc[3]
++
++#define gtty(_a,_b) tcgetattr(_a,_b)
++#define stty(_a,_b) tcsetattr(_a,TCSANOW,_b)
+
+ #define rnum(r) (random()%r)
+ #define D0 dice[0]
+@@ -114,7 +120,7 @@
+ extern const char *const *Colorptr; /* color of current player, capitalized */
+ extern int colen; /* length of color of current player */
+
+-extern struct sgttyb tty; /* tty information buffer */
++extern struct termios tty; /* tty information buffer */
+ extern int old; /* original tty status */
+ extern int noech; /* original tty status without echo */
+ extern int raw; /* raw tty status, no echo */
diff --git a/games/freebsd-games/files/patch-backgammon_common__source_subs.c b/games/freebsd-games/files/patch-backgammon_common__source_subs.c
new file mode 100644
index 000000000000..646faa72d625
--- /dev/null
+++ b/games/freebsd-games/files/patch-backgammon_common__source_subs.c
@@ -0,0 +1,10 @@
+Index: backgammon/common_source/subs.c
+@@ -420,7 +418,7 @@
+ if (tflag)
+ newpos();
+ buflush();
+- tty.sg_flags = mode;
++ tty.c_lflag = mode;
+ if (stty (0,&tty) < 0)
+ errexit("fixtty");
+ }
diff --git a/games/freebsd-games/files/patch-backgammon_teachgammon_teach.c b/games/freebsd-games/files/patch-backgammon_teachgammon_teach.c
new file mode 100644
index 000000000000..8b1ae587e9e8
--- /dev/null
+++ b/games/freebsd-games/files/patch-backgammon_teachgammon_teach.c
@@ -0,0 +1,25 @@
+Index: backgammon/teachgammon/teach.c
+@@ -94,18 +92,18 @@
+ signal (SIGINT,getout);
+ if (gtty (0,&tty) == -1) /* get old tty mode */
+ errexit ("teachgammon(gtty)");
+- old = tty.sg_flags;
++ old = tty.c_lflag;
+ #ifdef V7
+- raw = ((noech = old & ~ECHO) | CBREAK); /* set up modes */
++ raw = ((noech = old & ~ECHO) & ~ICANON); /* set up modes */
+ #else
+ raw = ((noech = old & ~ECHO) | RAW); /* set up modes */
+ #endif
+- ospeed = tty.sg_ospeed; /* for termlib */
++ ospeed = cfgetospeed(&tty); /* for termlib */
+ tflag = getcaps (getenv ("TERM"));
+ getarg (argc, argv);
+ if (tflag) {
+- noech &= ~(CRMOD|XTABS);
+- raw &= ~(CRMOD|XTABS);
++ noech &= ~(ICRNL|OXTABS);
++ raw &= ~(ICRNL|OXTABS);
+ clear();
+ }
+ text (hello);
diff --git a/games/freebsd-games/files/patch-battlestar_init.c b/games/freebsd-games/files/patch-battlestar_init.c
new file mode 100644
index 000000000000..077107c3e5aa
--- /dev/null
+++ b/games/freebsd-games/files/patch-battlestar_init.c
@@ -0,0 +1,11 @@
+--- battlestar/init.c.old Mon Dec 15 17:48:41 2003
++++ battlestar/init.c Mon Dec 15 17:48:54 2003
+@@ -62,7 +62,7 @@
+ puts("Admiral D.W. Riggle\n");
+ srandomdev();
+ getutmp(uname);
+- if (startup)
++ if (startup == NULL)
+ location = dayfile;
+ wiz = wizard(uname);
+ wordinit();
diff --git a/games/freebsd-games/files/patch-hack_Makefile b/games/freebsd-games/files/patch-hack_Makefile
new file mode 100644
index 000000000000..384893572eb5
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_Makefile
@@ -0,0 +1,12 @@
+Index: hack/Makefile
+@@ -17,7 +17,9 @@
+ MAN= hack.6
+ DPADD= ${LIBTERMCAP} ${LIBCOMPAT}
+ LDADD= -ltermcap -lcompat
+-CFLAGS+= -fwritable-strings -I${.CURDIR} -I.
++CFLAGS+= -DPOSIX -I${.CURDIR} -I.
++BINGRP=games
++BINMODE=2555
+ FILES= rumors help hh data
+ FILESMODE_rumors= 440
+ FILESGRP= ${BINGRP}
diff --git a/games/freebsd-games/files/patch-hack_config.h b/games/freebsd-games/files/patch-hack_config.h
new file mode 100644
index 000000000000..cc7fd6cf95b2
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_config.h
@@ -0,0 +1,9 @@
+Index: hack/config.h
+@@ -22,7 +22,6 @@
+ * Also, the code for suspend and various ioctls is only given for BSD4.2
+ * (I do not have access to a SYSV system.)
+ */
+-#define BSD /* delete this line on System V */
+
+ /* #define STUPID */ /* avoid some complicated expressions if
+ your C compiler chokes on them */
diff --git a/games/freebsd-games/files/patch-hack_hack.ioctl.c b/games/freebsd-games/files/patch-hack_hack.ioctl.c
new file mode 100644
index 000000000000..cd899364bed0
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_hack.ioctl.c
@@ -0,0 +1,29 @@
+Index: hack/hack.ioctl.c
+@@ -13,6 +13,9 @@
+ #ifdef BSD
+ #include <sgtty.h>
+ struct ltchars ltchars, ltchars0;
++#elif POSIX
++#include <termios.h>
++struct termios termio;
+ #else
+ #include <termio.h> /* also includes part of <sgtty.h> */
+ struct termio termio;
+@@ -22,6 +25,8 @@
+ #ifdef BSD
+ (void) ioctl(fileno(stdin), (int) TIOCGLTC, (char *) &ltchars);
+ (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) &ltchars0);
++#elif POSIX
++ tcgetattr(fileno(stdin), &termio);
+ #else
+ (void) ioctl(fileno(stdin), (int) TCGETA, &termio);
+ #endif /* BSD */
+@@ -30,6 +35,8 @@
+ setioctls() {
+ #ifdef BSD
+ (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) &ltchars);
++#elif POSIX
++ tcsetattr(fileno(stdin), TCSANOW, &termio);
+ #else
+ (void) ioctl(fileno(stdin), (int) TCSETA, &termio);
+ #endif /* BSD */
diff --git a/games/freebsd-games/files/patch-hack_hack.pager.c b/games/freebsd-games/files/patch-hack_hack.pager.c
new file mode 100644
index 000000000000..3a9df40b839e
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_hack.pager.c
@@ -0,0 +1,10 @@
+Index: hack/hack.pager.c
+@@ -367,6 +367,8 @@
+ #else
+
+ #ifdef BSD
++#include <sys/wait.h>
++#elif POSIX
+ #include <sys/wait.h>
+ #else
+ #include <wait.h>
diff --git a/games/freebsd-games/files/patch-hack_hack.shk.c b/games/freebsd-games/files/patch-hack_hack.shk.c
new file mode 100644
index 000000000000..3c936b353a23
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_hack.shk.c
@@ -0,0 +1,46 @@
+--- hack/hack.shk.c.orig Sun May 27 21:36:53 2007
++++ hack/hack.shk.c Sun May 27 21:38:28 2007
+@@ -131,11 +131,11 @@ struct bill_x *bp = bill;
+ }
+ }
+
++static void findshk();
++
+ inshop(){
+ int roomno = inroom(u.ux,u.uy);
+
+- static void findshk();
+-
+ /* Did we just leave a shop? */
+ if(u.uinshop &&
+ (u.uinshop != roomno + 1 || shlevel != dlevel || !shopkeeper)) {
+@@ -308,14 +308,14 @@ struct monst *shkp;
+ }
+ }
+
++static int dopayobj();
++
+ dopay(){
+ long ltmp;
+ struct bill_x *bp;
+ struct monst *shkp;
+ int pass, tmp;
+
+- static int dopayobj();
+-
+ multi = 0;
+ (void) inshop();
+ for(shkp = fmon; shkp; shkp = shkp->nmon)
+@@ -692,10 +692,11 @@ quit:
+ return(0);
+ }
+
++static int realhunger();
++
+ static
+ getprice(obj) struct obj *obj; {
+ int tmp, ac;
+- static int realhunger();
+
+ switch(obj->olet){
+ case AMULET_SYM:
diff --git a/games/freebsd-games/files/patch-hack_hack.termcap.c b/games/freebsd-games/files/patch-hack_hack.termcap.c
new file mode 100644
index 000000000000..eefbf4a52eea
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_hack.termcap.c
@@ -0,0 +1,26 @@
+--- hack/hack.termcap.c.orig Tue Nov 16 11:26:38 1999
++++ hack/hack.termcap.c Sun May 27 21:39:48 2007
+@@ -11,10 +11,11 @@
+ extern long *alloc();
+
+ static char tbuf[512];
+-static char *HO, *CL, *CE, *UP, *CM, *ND, *XD, *BC, *SO, *SE, *TI, *TE;
++static char *HO, *CL, *CE, *CM, *ND, *XD, *SO, *SE, *TI, *TE;
++char *UP, *BC;
+ static char *VS, *VE;
+ static int SG;
+-static char PC = '\0';
++char PC = '\0';
+ char *CD; /* tested in pri.c: docorner() */
+ int CO, LI; /* used in pri.c and whatis.c */
+
+@@ -35,7 +36,8 @@ startup()
+ flags.nonull = 1;
+ if(pc = tgetstr("pc", &tbufptr))
+ PC = *pc;
+- if(!(BC = tgetstr("bc", &tbufptr))) {
++ if(!(BC = tgetstr("bc", &tbufptr))
++ &&!(BC = tgetstr("le", &tbufptr))) {
+ if(!tgetflag("bs"))
+ error("Terminal must backspace.");
+ BC = tbufptr;
diff --git a/games/freebsd-games/files/patch-hack_hack.tty.c b/games/freebsd-games/files/patch-hack_hack.tty.c
new file mode 100644
index 000000000000..07a126779f6a
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_hack.tty.c
@@ -0,0 +1,42 @@
+Index: hack/hack.tty.c
+@@ -53,6 +53,7 @@
+ */
+ #ifdef BSD
+ #define V7
++#elif POSIX
+ #else
+ #define USG
+ #endif /* BSD */
+@@ -82,6 +83,21 @@
+ #define GTTY(x) (ioctl(0, TCGETA, x))
+ #define STTY(x) (ioctl(0, TCSETA, x)) /* TCSETAF? TCSETAW? */
+
++#elif POSIX
++#include <termios.h>
++#define termstruct termios
++#define kill_sym c_cc[VKILL]
++#define erase_sym c_cc[VERASE]
++#define EXTABS OXTABS
++#define tabflgs c_oflag
++#define echoflgs c_lflag
++#define cbrkflgs c_lflag
++#define CBRKMASK ICANON
++#define CBRKON ! /* reverse condition */
++#define OSPEED(x) cfgetospeed(x)
++#define GTTY(x) tcgetattr(fileno(stdin),x)
++#define STTY(x) tcsetattr(fileno(stdin),TCSANOW,x) /* TCSETAF? TCSETAW? */
++
+ #else /* V7 */
+
+ #include <sgtty.h>
+@@ -169,6 +185,10 @@
+ /* be satisfied with one character; no timeout */
+ curttyb.c_cc[VMIN] = 1; /* was VEOF */
+ curttyb.c_cc[VTIME] = 0; /* was VEOL */
++#elif POSIX
++ /* be satisfied with one character; no timeout */
++ curttyb.c_cc[VMIN] = 1; /* was VEOF */
++ curttyb.c_cc[VTIME] = 0; /* was VEOL */
+ #endif /* USG */
+ change++;
+ }
diff --git a/games/freebsd-games/files/patch-hack_hack.unix.c b/games/freebsd-games/files/patch-hack_hack.unix.c
new file mode 100644
index 000000000000..101204838c32
--- /dev/null
+++ b/games/freebsd-games/files/patch-hack_hack.unix.c
@@ -0,0 +1,13 @@
+$FreeBSD: /tmp/pcvs/ports/games/freebsd-games/files/Attic/patch-hack_hack.unix.c,v 1.3 2012-02-08 05:35:19 cy Exp $
+
+--- hack/hack.unix.c.orig Thu Nov 20 10:17:36 2003
++++ hack/hack.unix.c Thu Nov 20 10:18:09 2003
+@@ -86,7 +86,7 @@
+ /* old version - for people short of space */
+ char *np;
+
+- name = "/usr/games/hide/hack";
++ name = "%%PREFIX%%/bin/hack";
+ if(stat(name, &hbuf))
+ error("Cannot get status of %s.",
+ (np = rindex(name, '/')) ? np+1 : name);
diff --git a/games/freebsd-games/files/patch-larn_Makefile b/games/freebsd-games/files/patch-larn_Makefile
new file mode 100644
index 000000000000..3671991924cb
--- /dev/null
+++ b/games/freebsd-games/files/patch-larn_Makefile
@@ -0,0 +1,10 @@
+Index: larn/Makefile
+@@ -54,7 +54,7 @@
+
+ PROG= larn
+ MAN= larn.6
+-CFLAGS+=-DBSD -DVER=12 -DSUBVER=0 -DNONAP -DUIDSCORE -fwritable-strings -DNOVARARGS
++CFLAGS+=-DPOSIX -DVER=12 -DSUBVER=0 -DNONAP -DUIDSCORE -DNOVARARGS
+ SRCS= main.c object.c create.c tok.c display.c global.c data.c io.c \
+ monster.c store.c diag.c help.c config.c nap.c bill.c scores.c \
+ signal.c moreobj.c movem.c regen.c fortune.c savelev.c
diff --git a/games/freebsd-games/files/patch-larn_diag.c b/games/freebsd-games/files/patch-larn_diag.c
new file mode 100644
index 000000000000..3a5946b05d75
--- /dev/null
+++ b/games/freebsd-games/files/patch-larn_diag.c
@@ -0,0 +1,31 @@
+$FreeBSD: /tmp/pcvs/ports/games/freebsd-games/files/Attic/patch-larn_diag.c,v 1.3 2012-02-08 05:35:19 cy Exp $
+
+--- larn/diag.c 17 Jun 2003 04:25:24 -0000 1.2
++++ larn/diag.c 21 Jun 2004 02:28:34 -0000 1.3
+@@ -210,7 +210,7 @@
+ if (beenhere[k])
+ lrfill((char*)&cell[k*MAXX*MAXY],sizeof(struct cel)*MAXY*MAXX);
+
+- lrfill((char*)&c[0],100*sizeof(long)); gtime = lrint();
++ lrfill((char*)&c[0],100*sizeof(long)); gtime = lrint_x();
+ level = c[CAVELEVEL] = lgetc();
+ playerx = lgetc(); playery = lgetc();
+ lrfill((char*)iven,26); lrfill((char*)ivenarg,26*sizeof(short));
+@@ -241,7 +241,7 @@
+ }
+
+ time(&zzz);
+- initialtime = zzz-lrint();
++ initialtime = zzz-lrint_x();
+ fstat(fd,&filetimes); /* get the creation and modification time of file */
+ lrfill((char*)&zzz,sizeof(long)); zzz += 6;
+ if (filetimes.st_ctime > zzz) fsorry(); /* file create time */
+@@ -249,7 +249,7 @@
+ if (c[HP]<0) { died(284); return; } /* died a post mortem death */
+
+ oldx = oldy = 0;
+- i = lrint(); /* inode # */
++ i = lrint_x(); /* inode # */
+ if (i && (filetimes.st_ino!=i)) fsorry();
+ lrclose();
+ if (strcmp(fname,ckpfile) == 0)
diff --git a/games/freebsd-games/files/patch-larn_header.h b/games/freebsd-games/files/patch-larn_header.h
new file mode 100644
index 000000000000..96f43651a9c7
--- /dev/null
+++ b/games/freebsd-games/files/patch-larn_header.h
@@ -0,0 +1,18 @@
+Index: larn/header.h
+@@ -326,7 +326,6 @@
+ #define DEMONLORD 57
+ #define DEMONPRINCE 64
+
+-#define NULL 0
+ #define BUFBIG 4096 /* size of the output buffer */
+ #define MAXIBUF 4096 /* size of the input buffer */
+ #define LOGNAMESIZE 40 /* max size of the players name */
+@@ -359,7 +359,7 @@
+
+ char *fortune(),*lgetw(),*lgetl();
+ char *tmcapcnv();
+-long paytaxes(),lgetc(),lrint();
++long paytaxes(),lgetc(),lrint_x();
+ unsigned long readnum();
+
+ /* macro to create scroll #'s with probability of occurrence */
diff --git a/games/freebsd-games/files/patch-larn_io.c b/games/freebsd-games/files/patch-larn_io.c
new file mode 100644
index 000000000000..bbbb35860082
--- /dev/null
+++ b/games/freebsd-games/files/patch-larn_io.c
@@ -0,0 +1,46 @@
+Index: larn/io.c
+@@ -24,7 +24,7 @@
+ * FILE INPUT ROUTINES
+ *
+ * long lgetc() read one character from input buffer
+- * long lrint() read one integer from input buffer
++ * long lrint_x() read one integer from input buffer
+ * lrfill(address,number) put input bytes into a buffer
+ * char *lgetw() get a whitespace ended word from input
+ * char *lgetl() get a \n or EOF ended line from input
+@@ -69,6 +69,17 @@
+ _a.c_cc[VMIN]=1;_a.c_cc[VTIME]=1;_a.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL)
+ #define unraw(_a) _a.c_cc[VMIN]=saveeof;_a.c_cc[VTIME]=saveeol;_a.c_lflag |= ICANON|ECHO|ECHOE|ECHOK|ECHONL
+
++#elif POSIX
++#include <termios.h>
++#define sgttyb termios
++#define gtty(_a,_b) tcgetattr(_a,_b)
++#define stty(_a,_b) tcsetattr(_a,TCSANOW,_b)
++static int rawflg = 0;
++static char saveeof,saveeol;
++#define doraw(_a) if(!rawflg){++rawflg;saveeof=_a.c_cc[VMIN];saveeol=_a.c_cc[VTIME];}\
++ _a.c_cc[VMIN]=1;_a.c_cc[VTIME]=1;_a.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL)
++#define unraw(_a) _a.c_cc[VMIN]=saveeof;_a.c_cc[VTIME]=saveeol;_a.c_lflag |= ICANON|ECHO|ECHOE|ECHOK|ECHONL
++
+ #else /* not SYSV */
+
+ #ifndef BSD
+@@ -345,7 +356,7 @@
+ }
+
+ /*
+- * long lrint() Read one integer from input buffer
++ * long lrint_x() Read one integer from input buffer
+ *
+ * +---------+---------+---------+---------+
+ * | high | | | low |
+@@ -357,7 +368,7 @@
+ * The save order is low order first, to high order (4 bytes total)
+ * Returns the int read
+ */
+-long lrint()
++long lrint_x()
+ {
+ unsigned long i;
+ i = 255 & lgetc(); i |= (255 & lgetc()) << 8;
diff --git a/games/freebsd-games/files/patch-quiz b/games/freebsd-games/files/patch-quiz
new file mode 100644
index 000000000000..9f4832ba2ae0
--- /dev/null
+++ b/games/freebsd-games/files/patch-quiz
@@ -0,0 +1,175 @@
+Index: index
+===================================================================
+RCS file: /ncvs/src/games/quiz/datfiles/index,v
+retrieving revision 1.1.1.1
+diff -u -r1.1.1.1 index
+--- quiz/datfiles/index 4 Sep 1994 04:03:09 -0000 1.1.1.1
++++ quiz/datfiles/index 20 Sep 2002 23:49:50 -0000
+@@ -21,7 +21,7 @@
+ /usr/local/local/share/games/quiz.db/murders:victim:killer
+ /usr/local/local/share/games/quiz.db/poetry:poem{-}line:next:poem:author
+ /usr/local/local/share/games/quiz.db/posneg:pos{itive}:neg{ative}
+-/usr/local/local/share/games/quiz.db/pres:pres{ident}:term:succ{essor}
++/usr/local/local/share/games/quiz.db/pres:pres{ident}:term:vice:succ{essor}
+ /usr/local/local/share/games/quiz.db/province:province:cap{ital}
+ /usr/local/local/share/games/quiz.db/seq-easy:easy{-}{seq{uence}}:next:name
+ /usr/local/local/share/games/quiz.db/seq-hard:hard{-}{seq{uence}}:next:name
+Index: pres
+===================================================================
+RCS file: /ncvs/src/games/quiz/datfiles/pres,v
+retrieving revision 1.1.1.1
+diff -u -r1.1.1.1 pres
+--- quiz/datfiles/pres 4 Sep 1994 04:03:10 -0000 1.1.1.1
++++ quiz/datfiles/pres 20 Sep 2002 23:38:18 -0000
+@@ -1,38 +1,83 @@
+-{G{eorge} }Washington:1789-{17}97:{J{ohn} }Adams
+-{J{ohn} }Adams:1797-1801:{T{homas} }Jefferson
+-{T{homas} }Jefferson:1801-{{18}0}9:{J{ames} }Madison
+-{J{ames} }Madison:1809-{18}17:{J{ames} }Monroe
+-{J{ames} }Monroe:1817-1825:{J{ohn} }{Q{uincy} }Adams
+-{J{ohn} }{Q{uincy} }Adams:1825-{{18}2}9:{A{ndrew} }Jackson
+-{A{ndrew} }Jackson:1829-{18}37:{M{artin} }Van Buren
+-{M{artin} }Van Buren:1837-{18}41:{W{illiam|m} }{H{enry} }Harrison
+-{W{illiam|m} }{H{enry} }Harrison:1841:{J{ohn} }Tyler
+-{J{ohn} }Tyler:1841-{{18}4}5:{J{ames} }{K{nox} }Polk
+-{J{ames} }{K{nox} }Polk:1845-{{18}4}9:{Z{achary} }Taylor
+-{Z{achary} }Taylor:1849-{18}50:{M{illard} }Fillmore
+-{M{illard} }Fillmore:1850-{{18}5}3:{F{ranklin} }Pierce
+-{F{ranklin} }Pierce:1853-{{18}5}7:{J{ames} }Buchanan
+-{J{ames} }Buchanan:1857-{18}61:{A{braham|be} }Lincoln
+-{A{braham|be} }Lincoln:1861-{{18}6}5:{A{ndrew} }Johnson
+-{A{ndrew} }Johnson:1865-{{18}6}9:{U{lysses} }{S{impson} }Grant
+-{U{lysses} }{S{impson} }Grant:1869-{18}77:{R{utherford} }{B{irchard} }Hayes
+-{R{utherford} }{B{irchard} }Hayes:1877-{18}81:{J{ames} }{A{bram} }Garfield
+-{J{ames} }{A{bram} }Garfield:1881:{C{hester} }{A{lan} }Arthur
+-{C{hester} }{A{lan} }Arthur:1881-{{18}8}5:{G{rover} }Cleveland{ (1st term)}
+-{G{rover} }Cleveland{ (1st term)}:1885-{{18}8}9:{B{enjamin} }Harrison
+-{B{enjamin} }Harrison:1889-{18}93:{G{rover} }Cleveland{ (2nd term)}
+-{G{rover} }Cleveland{ (2nd term)}:1893-{18}97:{W{illiam|m} }McKinley
+-{W{illiam|m} }McKinley:1897-1901:{T{heodore|eddy} }Roosevelt|TR
+-{T{heodore|eddy} }Roosevelt|TR:1901-{{19}0}9:{W{illiam|m} }{H{oward} }Taft
+-{W{illiam|m} }{H{oward} }Taft:1909-{19}13:{W{oodrow} }Wilson
+-{W{oodrow} }Wilson:1913-{19}21:{W{arren} }{G{amaliel} }Harding
+-{W{arren} }{G{amaliel} }Harding:1921-{{19}2}3:{C{alvin} }Coolidge
+-{C{alvin} }Coolidge:1923-{{19}2}9:{H{erbert} }Hoover
+-{H{erbert} }Hoover:1929-{19}33:{F{ranklin} }{D{elano} }Roosevelt|FDR
+-{F{ranklin} }{D{elano} }Roosevelt|FDR:1933-{19}45:{H{arry} }{S }Truman
+-{H{arry} }{S }Truman:1945-{19}53:{D{wight} }{D{avid} }Eisenhower
+-{D{wight} }{D{avid} }Eisenhower:1953-{19}61:{J{ohn} }{F{itzgerald} }Kennedy|JFK
+-{J{ohn} }{F{itzgerald} }Kennedy|JFK:1961-{{19}6}3:{L{yndon} }{B{aines} }Johnson|LBJ
+-{L{yndon} }{B{aines} }Johnson|LBJ:1963-{{19}6}9:{R{ichard} }{M{ilhouse} }Nixon
+-{R{ichard} }{M{ilhouse} }Nixon:1969-{19}74:{G{erald} }{R{obert} }Ford
+-{G{erald} }{R{obert} }Ford:1974-:
++{G{eorge} }Washington:1789-{17}97:{J{ohn} }Adams:{J{ohn} }Adams
++{J{ohn} }Adams:1797-1801:{T{homas} }Jefferson:{T{homas} }Jefferson
++{T{homas} }Jefferson:1801-{{18}0}9:{A{aron} }Burr|{G{eorge} }Clinton:\
++{J{ames} }Madison
++{J{ames} }Madison:1809-{18}17:{G{eorge} }Clinton|{E{lbridge} }Gerry:\
++{J{ames} }Monroe
++{J{ames} }Monroe:1817-1825:\
++{D{aniel} }{D{.} }Tompkins:{J{ohn} }{Q{uincy} }Adams
++{J{ohn} }{Q{uincy} }Adams:1825-{{18}2}9:{J{ohn} }{C{aldwell} }Calhoun:\
++{A{ndrew} }Jackson
++{A{ndrew} }Jackson:1829-{18}37:\
++{J{ohn} }{C{aldwell} }Calhoun|{M{artin} }Van Buren:{M{artin} }Van Buren
++{M{artin} }Van Buren:1837-{18}41:\
++{R{ichard} }{M{entor} }Johnson:{W{illiam|m} }{H{enry} }Harrison
++{W{illiam|m} }{H{enry} }Harrison:1841:{J{ohn} }Tyler:{J{ohn} }Tyler
++{J{ohn} }Tyler:1841-{{18}4}5:[N|n]one{ (1841-5)}:{J{ames} }{K{nox} }Polk
++{J{ames} }{K{nox} }Polk:1845-{{18}4}9:\
++{G{eorge} }{M{ifflin} }Dallas:{Z{achary} }Taylor
++{Z{achary} }Taylor:1849-{18}50:{M{illard} }Fillmore:{M{illard} }Fillmore
++{M{illard} }Fillmore:1850-{{18}5}3:[N|n]one{ (1850-3)}:{F{ranklin} }Pierce
++{F{ranklin} }Pierce:1853-{{18}5}7:\
++{W{illiam|m} }{R{ufus} }{de Vane }King:{J{ames} }Buchanan
++{J{ames} }Buchanan:1857-{18}61:\
++{J{ohn} }{C{abell} }Breckinridge:{A{braham|be} }Lincoln
++{A{braham|be} }Lincoln:1861-{{18}6}5:\
++{H{annibal} }Hamlin|{A{ndrew} }Johnson:{A{ndrew} }Johnson
++{A{ndrew} }Johnson:1865-{{18}6}9:[N|n]one{ (1865-9)}:\
++{U{lysses} }{S{impson} }Grant
++{U{lysses} }{S{impson} }Grant:1869-{18}77:\
++{S{chuyler} }Colfax|{H{enry} }Wilson:{R{utherford} }{B{irchard} }Hayes
++{R{utherford} }{B{irchard} }Hayes:1877-{18}81:\
++{W{illiam|m} }{A{lmon} }Wheeler:{J{ames} }{A{bram} }Garfield
++{J{ames} }{A{bram} }Garfield:1881:\
++{C{hester} }{A{lan} }Arthur:{C{hester} }{A{lan} }Arthur
++{C{hester} }{A{lan} }Arthur:1881-{{18}8}5:[N|n]one{ (1881-5)}:\
++{G{rover} }Cleveland{ (1st term)}
++{G{rover} }Cleveland{ (1st term)}:1885-{{18}8}9:\
++{T{homas} }{A{ndrews} }Hendricks:{B{enjamin} }Harrison
++{B{enjamin} }Harrison:1889-{18}93:\
++{L{evi} }{P{arsons} }Morton:{G{rover} }Cleveland{ (2nd term)}
++{G{rover} }Cleveland{ (2nd term)}:1893-{18}97:\
++{A{dlai} }{E{wing} }Stevenson:{W{illiam|m} }McKinley
++{W{illiam|m} }McKinley:1897-1901:\
++{G{arret} }{A{ugustus} }Hobart|{T{heodore|eddy} }Roosevelt|TR:\
++{T{heodore|eddy} }Roosevelt|TR
++{T{heodore|eddy} }Roosevelt|TR:1901-{{19}0}9:\
++{C{harles} }{W{arren} }Fairbanks:{W{illiam|m} }{H{oward} }Taft
++{W{illiam|m} }{H{oward} }Taft:1909-{19}13:\
++{J{ames} }{S{choolcraft} }Sherman:{W{oodrow} }Wilson
++{W{oodrow} }Wilson:1913-{19}21:\
++{T{homas} }{R{iley} }Marshall:{W{arren} }{G{amaliel} }Harding
++{W{arren} }{G{amaliel} }Harding:1921-{{19}2}3:{C{alvin} }Coolidge:\
++{C{alvin} }Coolidge
++{C{alvin} }Coolidge:1923-{{19}2}9:\
++{C{harles} }{G{ates} }Dawes:{H{erbert} }{C{lark} }Hoover
++{H{erbert} }{C{lark} }Hoover:1929-{19}33:\
++{C{harles} }Curtis:{F{ranklin} }{D{elano} }Roosevelt|FDR
++{F{ranklin} }{D{elano} }Roosevelt|FDR:1933-{19}45:\
++{J{ohn} }{N{ance} }Garner|{H{enry} }{A{gard} }Wallace|{H{arry} }{S }Truman:\
++{H{arry} }{S }Truman
++{H{arry} }{S }Truman:1945-{19}53:\
++{A{lben} }{W{illiam} }Barkley:{D{wight} }{D{avid} }Eisenhower
++{D{wight} }{D{avid} }Eisenhower:1953-{19}61:\
++{R{ichard} }{M{ilhous} }Nixon:{J{ohn} }{F{itzgerald} }Kennedy|JFK
++{J{ohn} }{F{itzgerald} }Kennedy|JFK:1961-{{19}6}3:\
++{L{yndon} }{B{aines} }Johnson|LBJ:{L{yndon} }{B{aines} }Johnson|LBJ
++{L{yndon} }{B{aines} }Johnson|LBJ:1963-{{19}6}9:\
++{H{ubert} }{H{oratio} }Humphrey:{R{ichard} }{M{ilhous} }Nixon
++{R{ichard} }{M{ilhous} }Nixon:1969-{19}74:\
++{S{piro} }{T{heodore} }Agnew|{G{erald} }{R{udolph} }Ford:\
++{G{erald} }{R{udolph} }Ford
++{G{erald} }{R{udolph} }Ford:1974-{{19}7}7:\
++{N{elson} }{A{ldrich} }Rockefeller:{J{ames} }{E{arl} }Carter{{,} J{unio}r}
++{J{ames} }{E{arl} }Carter{{,} J{unio}r}:1977-{19}81:\
++{W{alter} }{F{rederick} }Mondale:{R{onald} }{W{ilson} }Reagan
++{R{onald} }{W{ilson} }Reagan:1981-{{19}8}9:\
++{G{eorge} }{H{erbert} }{W{alker} }Bush:{G{eorge} }{H{erbert} }{W{alker} }Bush
++{G{eorge} }{H{erbert} }{W{alker} }Bush:1989-{19}93:\
++{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:
+
+
+
+
+--- quiz/datfiles/pres Sat Sep 21 01:38:18 2002
++++ quiz/datfiles/pres.new Sat Sep 21 20:55:47 2002
+@@ -70,14 +70,17 @@
+ {S{piro} }{T{heodore} }Agnew|{G{erald} }{R{udolph} }Ford:\
+ {G{erald} }{R{udolph} }Ford
+ {G{erald} }{R{udolph} }Ford:1974-{{19}7}7:\
+-{N{elson} }{A{ldrich} }Rockefeller:{J{ames} }{E{arl} }Carter{{,} J{unio}r}
+-{J{ames} }{E{arl} }Carter{{,} J{unio}r}:1977-{19}81:\
++{N{elson} }{A{ldrich} }Rockefeller:\
++{J{ames} }{E{arl} }{(Jimmy) }Carter{{,} J{unio}r}|Jimmy Carter
++{J{ames} }{E{arl} }{(Jimmy) }Carter{{,} J{unio}r}|Jimmy Carter:1977-{19}81:\
+ {W{alter} }{F{rederick} }Mondale:{R{onald} }{W{ilson} }Reagan
+ {R{onald} }{W{ilson} }Reagan:1981-{{19}8}9:\
+ {G{eorge} }{H{erbert} }{W{alker} }Bush:{G{eorge} }{H{erbert} }{W{alker} }Bush
+ {G{eorge} }{H{erbert} }{W{alker} }Bush:1989-{19}93:\
+-{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}
++{J{ames} }{D{anforth|an} }Quayle:\
++{W{illiam|m} }{J{efferson} }{(Bill) }Clinton|Bill Clinton
++{W{illiam|m} }{J{efferson} }{(Bill) }Clinton|Bill Clinton:1993-2001:\
++{A{l{bert}} }{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:
++{R{ichard} }{B{ruce} }{(Dick) }Cheney|Dick Cheney:
diff --git a/games/freebsd-games/files/patch-rogue_Makefile b/games/freebsd-games/files/patch-rogue_Makefile
new file mode 100644
index 000000000000..3a819d26158f
--- /dev/null
+++ b/games/freebsd-games/files/patch-rogue_Makefile
@@ -0,0 +1,11 @@
+--- rogue/Makefile.orig Sun May 27 21:36:53 2007
++++ rogue/Makefile Sun May 27 21:40:48 2007
+@@ -2,7 +2,7 @@
+ # $FreeBSD$
+
+ PROG= rogue
+-CFLAGS+=-DUNIX -fwritable-strings
++CFLAGS+=-DUNIX
+ SRCS= hit.c init.c inventory.c level.c machdep.c main.c \
+ message.c monster.c move.c object.c pack.c play.c random.c ring.c \
+ room.c save.c score.c spec_hit.c throw.c trap.c use.c zap.c
diff --git a/games/freebsd-games/files/patch-snake_snake_move.c b/games/freebsd-games/files/patch-snake_snake_move.c
new file mode 100644
index 000000000000..03f96cdc9885
--- /dev/null
+++ b/games/freebsd-games/files/patch-snake_snake_move.c
@@ -0,0 +1,24 @@
+Index: snake/snake/move.c
+@@ -677,10 +674,10 @@
+
+ gtty(0, &orig);
+ new=orig;
+- new.sg_flags &= ~(ECHO|CRMOD|ALLDELAY|XTABS);
+- new.sg_flags |= CBREAK;
++ new.c_lflag &= ~(ECHO|ICRNL|OXTABS);
++ new.c_lflag &= ~ICANON;
+ signal(SIGINT,stop);
+- ospeed = orig.sg_ospeed;
++ ospeed = cfgetospeed(&orig);
+ #ifdef TIOCGLTC
+ ioctl(0, TIOCGLTC, &olttyc);
+ nlttyc = olttyc;
+@@ -689,7 +686,7 @@
+ #endif
+ raw();
+
+- if ((orig.sg_flags & XTABS) == XTABS) TA=0;
++ if ((orig.c_lflag & OXTABS) == OXTABS) TA=0;
+ putpad(KS);
+ putpad(TI);
+ point(&cursor,0,LINES-1);
diff --git a/games/freebsd-games/files/patch-snake_snake_snake.c b/games/freebsd-games/files/patch-snake_snake_snake.c
new file mode 100644
index 000000000000..11c001d38bf6
--- /dev/null
+++ b/games/freebsd-games/files/patch-snake_snake_snake.c
@@ -0,0 +1,10 @@
+Index: snake/snake/snake.c
+@@ -183,7 +181,7 @@
+ snrand(&money);
+ snrand(&snake[0]);
+
+- if ((orig.sg_ospeed < B9600) ||
++ if ((cfgetospeed(&orig) < B9600) ||
+ ((! CM) && (! TA))) fast=0;
+ for(i=1;i<6;i++)
+ chase (&snake[i], &snake[i-1]);
diff --git a/games/freebsd-games/files/patch-snake_snake_snake.h b/games/freebsd-games/files/patch-snake_snake_snake.h
new file mode 100644
index 000000000000..a89166ac21f3
--- /dev/null
+++ b/games/freebsd-games/files/patch-snake_snake_snake.h
@@ -0,0 +1,25 @@
+Index: snake/snake/snake.h
+@@ -38,10 +38,13 @@
+ # include <stdio.h>
+ # include <assert.h>
+ # include <sys/types.h>
+-# include <sgtty.h>
++# include <termios.h>
+ # include <signal.h>
+ # include <math.h>
+
++#define gtty(_a,_b) tcgetattr(_a,_b)
++#define stty(_a,_b) tcsetattr(_a,TCSANOW,_b)
++
+ #define ESC '\033'
+
+ struct tbuffer {
+@@ -72,7 +75,7 @@
+ int col, line;
+ };
+ struct point cursor;
+-struct sgttyb orig, new;
++struct termios orig, new;
+ #ifdef TIOCLGET
+ struct ltchars olttyc, nlttyc;
+ #endif
diff --git a/games/freebsd-games/files/patch-trek_main.c b/games/freebsd-games/files/patch-trek_main.c
new file mode 100644
index 000000000000..c6880a8a5893
--- /dev/null
+++ b/games/freebsd-games/files/patch-trek_main.c
@@ -0,0 +1,33 @@
+Index: trek/main.c
+@@ -47,10 +47,12 @@
+
+ # include "trek.h"
+ # include <stdio.h>
+-# include <sgtty.h>
++# include <termios.h>
+ # include <setjmp.h>
+ # include <stdlib.h>
+
++# define gtty(_a,_b) tcgetattr(_a,_b)
++
+ # define PRIO 00 /* default priority */
+
+ int Mother = 51 + (51 << 8);
+@@ -163,7 +165,7 @@
+ int prio;
+ int ac;
+ char **av;
+- struct sgttyb argp;
++ struct termios argp;
+
+ /* revoke */
+ setgid(getgid());
+@@ -176,7 +178,7 @@
+ prio = PRIO;
+ if (gtty(1, &argp) == 0)
+ {
+- if ((argp.sg_ispeed ) < B1200)
++ if ((cfgetispeed(&argp)) < B1200)
+ Etc.fast++;
+ }
+ while (ac > 1 && av[0][0] == '-')
diff --git a/games/freebsd-games/pkg-descr b/games/freebsd-games/pkg-descr
new file mode 100644
index 000000000000..4f0e98eb0b0c
--- /dev/null
+++ b/games/freebsd-games/pkg-descr
@@ -0,0 +1,6 @@
+This is a port of the FreeBSD "standard" games as they were just
+before they were removed from the base system.
+
+This source was formerly a part of the FreeBSD base system, and this
+package is based on the final version of that source code, so it
+includes all previous FreeBSD customizations.
diff --git a/games/freebsd-games/pkg-plist b/games/freebsd-games/pkg-plist
new file mode 100644
index 000000000000..4c0ebf9239e3
--- /dev/null
+++ b/games/freebsd-games/pkg-plist
@@ -0,0 +1,108 @@
+@comment $FreeBSD$
+bin/adventure
+bin/arithmetic
+bin/atc
+bin/backgammon
+bin/teachgammon
+bin/battlestar
+bin/bs
+bin/canfield
+bin/cfscores
+bin/cribbage
+bin/fish
+bin/hack
+bin/hangman
+bin/larn
+bin/mille
+bin/phantasia
+bin/piano
+bin/pig
+bin/quiz
+bin/robots
+bin/rogue
+bin/sail
+bin/snake
+bin/snscore
+bin/trek
+bin/worm
+bin/wump
+share/games/atc/Game_List
+share/games/atc/Killer
+share/games/atc/crossover
+share/games/atc/default
+share/games/atc/easy
+share/games/atc/game_2
+@dirrm share/games/atc
+share/games/larn/larnmaze
+share/games/larn/larnopts
+share/games/larn/larn.help
+@dirrm share/games/larn
+share/games/quiz.db/africa
+share/games/quiz.db/america
+share/games/quiz.db/areas
+share/games/quiz.db/arith
+share/games/quiz.db/asia
+share/games/quiz.db/babies
+share/games/quiz.db/bard
+share/games/quiz.db/chinese
+share/games/quiz.db/collectives
+share/games/quiz.db/ed
+share/games/quiz.db/elements
+share/games/quiz.db/europe
+share/games/quiz.db/flowers
+share/games/quiz.db/greek
+share/games/quiz.db/inca
+share/games/quiz.db/index
+share/games/quiz.db/latin
+share/games/quiz.db/locomotive
+share/games/quiz.db/midearth
+share/games/quiz.db/morse
+share/games/quiz.db/murders
+share/games/quiz.db/poetry
+share/games/quiz.db/posneg
+share/games/quiz.db/pres
+share/games/quiz.db/province
+share/games/quiz.db/seq-easy
+share/games/quiz.db/seq-hard
+share/games/quiz.db/sexes
+share/games/quiz.db/sov
+share/games/quiz.db/spell
+share/games/quiz.db/state
+share/games/quiz.db/trek
+share/games/quiz.db/ucc
+@dirrm share/games/quiz.db
+share/games/cribbage.instr
+share/games/fish.instr
+share/games/wump.info
+@dirrm share/games
+@cwd /var/games
+@dirrm atc
+@dirrm battlestar
+hackdir/perm
+hackdir/record
+hackdir/rumors
+hackdir/help
+hackdir/hh
+hackdir/data
+@dirrm hackdir/save
+@dirrm hackdir
+larn/lscore12.0
+larn/llog12.0
+@dirrm larn
+phantasia/characs
+phantasia/gold
+phantasia/lastdead
+phantasia/mess
+phantasia/monsters
+phantasia/motd
+phantasia/scoreboard
+phantasia/void
+@dirrm phantasia
+battlestar.log
+cfscores
+criblog
+robots_roll
+rogue.scores
+saillog
+snakerawscores
+snake.log