diff options
author | roy <roy@NetBSD.org> | 2010-02-03 15:34:37 +0000 |
---|---|---|
committer | roy <roy@NetBSD.org> | 2010-02-03 15:34:37 +0000 |
commit | 164f814056645ef1910d5bf4c9147929e07c3a7c (patch) | |
tree | 69388c3d125835723e2b47ab72df148e22abe10b /hack | |
parent | bd6c81dd776fddd0e7853f2cfb907dc91723f8c3 (diff) | |
download | bsdgames-darwin-164f814056645ef1910d5bf4c9147929e07c3a7c.tar.gz bsdgames-darwin-164f814056645ef1910d5bf4c9147929e07c3a7c.tar.zst bsdgames-darwin-164f814056645ef1910d5bf4c9147929e07c3a7c.zip |
Userland now builds and uses terminfo instead of termcap.
OK: core@, jdc@
Diffstat (limited to 'hack')
-rw-r--r-- | hack/Makefile | 8 | ||||
-rw-r--r-- | hack/extern.h | 12 | ||||
-rw-r--r-- | hack/hack.c | 6 | ||||
-rw-r--r-- | hack/hack.cmd.c | 6 | ||||
-rw-r--r-- | hack/hack.end.c | 6 | ||||
-rw-r--r-- | hack/hack.main.c | 6 | ||||
-rw-r--r-- | hack/hack.pager.c | 6 | ||||
-rw-r--r-- | hack/hack.pri.c | 6 | ||||
-rw-r--r-- | hack/hack.save.c | 6 | ||||
-rw-r--r-- | hack/hack.terminfo.c (renamed from hack/hack.termcap.c) | 228 | ||||
-rw-r--r-- | hack/hack.tty.c | 16 | ||||
-rw-r--r-- | hack/hack.u_init.c | 8 |
12 files changed, 138 insertions, 176 deletions
diff --git a/hack/Makefile b/hack/Makefile index fe787747..be6c78a1 100644 --- a/hack/Makefile +++ b/hack/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.41 2008/08/29 00:02:22 gmcgarry Exp $ +# $NetBSD: Makefile,v 1.42 2010/02/03 15:34:38 roy Exp $ # @(#)Makefile 8.2 (Berkeley) 4/27/95 .include <bsd.own.mk> @@ -13,13 +13,13 @@ SRCS+= alloc.c hack.Decl.c hack.apply.c hack.bones.c hack.c hack.cmd.c \ hack.mkmaze.c hack.mkobj.c hack.mkshop.c hack.mon.c hack.monst.c \ hack.o_init.c hack.objnam.c hack.options.c hack.pager.c hack.potion.c \ hack.pri.c hack.read.c hack.rip.c hack.rumors.c hack.save.c \ - hack.search.c hack.shk.c hack.shknam.c hack.steal.c hack.termcap.c \ + hack.search.c hack.shk.c hack.shknam.c hack.steal.c hack.terminfo.c \ hack.timeout.c hack.topl.c hack.track.c hack.trap.c hack.tty.c \ hack.u_init.c hack.unix.c hack.vault.c hack.version.c hack.wield.c \ hack.wizard.c hack.worm.c hack.worn.c hack.zap.c rnd.c MAN= hack.6 -DPADD+= ${LIBTERMCAP} -LDADD+= -ltermcap +DPADD+= ${LIBTERMINFO} +LDADD+= -lterminfo HIDEGAME=hidegame SETGIDGAME=yes CLEANFILES+=makedefs makedefs.lo diff --git a/hack/extern.h b/hack/extern.h index e2b67441..fe8bdfc5 100644 --- a/hack/extern.h +++ b/hack/extern.h @@ -1,4 +1,4 @@ -/* $NetBSD: extern.h,v 1.12 2009/08/12 07:28:40 dholland Exp $ */ +/* $NetBSD: extern.h,v 1.13 2010/02/03 15:34:38 roy Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -137,7 +137,7 @@ void done1(int); void done_in_by(struct monst *); void done(const char *); void clearlocks(void); -void hangup(int) __attribute__((__noreturn__)); +void hang_up(int) __attribute__((__noreturn__)); char *eos(char *); void charcat(char *, int); void prscore(int, char **); @@ -400,16 +400,16 @@ void relobj(struct monst *, int); /* hack.termcap.c */ void startup(void); -void start_screen(void); -void end_screen(void); +void startscreen(void); +void endscreen(void); void curs(int, int); void cl_end(void); -void clear_screen(void); +void clearscreen(void); void home(void); void standoutbeg(void); void standoutend(void); void backsp(void); -void bell(void); +void sound_bell(void); void delay_output(void); void cl_eos(void); diff --git a/hack/hack.c b/hack/hack.c index 8da2c771..8b1731a2 100644 --- a/hack/hack.c +++ b/hack/hack.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.c,v 1.9 2009/08/12 07:28:40 dholland Exp $ */ +/* $NetBSD: hack.c,v 1.10 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.c,v 1.9 2009/08/12 07:28:40 dholland Exp $"); +__RCSID("$NetBSD: hack.c,v 1.10 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include "hack.h" @@ -459,7 +459,7 @@ pickup(int all) pline("Pick up %s ? [ynaq]", doname(obj)); while (!strchr("ynaq ", (c = readchar()))) - bell(); + sound_bell(); if (c == 'q') return; if (c == 'n') diff --git a/hack/hack.cmd.c b/hack/hack.cmd.c index a9e7fc08..e2e931f9 100644 --- a/hack/hack.cmd.c +++ b/hack/hack.cmd.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.cmd.c,v 1.10 2009/08/12 07:28:40 dholland Exp $ */ +/* $NetBSD: hack.cmd.c,v 1.11 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.cmd.c,v 1.10 2009/08/12 07:28:40 dholland Exp $"); +__RCSID("$NetBSD: hack.cmd.c,v 1.11 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include "hack.h" @@ -159,7 +159,7 @@ rhack(const char *cmd) } if (!*cmd || (*cmd & 0377) == 0377 || (flags.no_rest_on_space && *cmd == ' ')) { - bell(); + sound_bell(); flags.move = 0; return; /* probably we just had an interrupt */ } diff --git a/hack/hack.end.c b/hack/hack.end.c index eef8effb..6d972497 100644 --- a/hack/hack.end.c +++ b/hack/hack.end.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.end.c,v 1.13 2009/08/12 07:28:40 dholland Exp $ */ +/* $NetBSD: hack.end.c,v 1.14 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.end.c,v 1.13 2009/08/12 07:28:40 dholland Exp $"); +__RCSID("$NetBSD: hack.end.c,v 1.14 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include <signal.h> @@ -648,7 +648,7 @@ clearlocks(void) #ifdef NOSAVEONHANGUP /*ARGSUSED*/ void -hangup(int n __unused) +hang_up(int n __unused) { (void) signal(SIGINT, SIG_IGN); clearlocks(); diff --git a/hack/hack.main.c b/hack/hack.main.c index 623752c7..cfa379b9 100644 --- a/hack/hack.main.c +++ b/hack/hack.main.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.main.c,v 1.14 2009/08/12 07:28:40 dholland Exp $ */ +/* $NetBSD: hack.main.c,v 1.15 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.main.c,v 1.14 2009/08/12 07:28:40 dholland Exp $"); +__RCSID("$NetBSD: hack.main.c,v 1.15 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include <signal.h> @@ -184,7 +184,7 @@ main(int argc, char *argv[]) cls(); u.uhp = 1; /* prevent RIP on early quits */ u.ux = FAR; /* prevent nscr() */ - (void) signal(SIGHUP, hangup); + (void) signal(SIGHUP, hang_up); /* * Find the creation date of this game, diff --git a/hack/hack.pager.c b/hack/hack.pager.c index b72cb99e..eb6484be 100644 --- a/hack/hack.pager.c +++ b/hack/hack.pager.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.pager.c,v 1.13 2009/08/12 07:28:41 dholland Exp $ */ +/* $NetBSD: hack.pager.c,v 1.14 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.pager.c,v 1.13 2009/08/12 07:28:41 dholland Exp $"); +__RCSID("$NetBSD: hack.pager.c,v 1.14 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ /* This file contains the command routine dowhatis() and a pager. */ @@ -359,7 +359,7 @@ dohelp(void) pline("Long or short help? "); while (((c = readchar()) != 'l') && (c != 's') && !strchr(quitchars, c)) - bell(); + sound_bell(); if (!strchr(quitchars, c)) (void) page_file((c == 'l') ? HELP : SHELP, FALSE); return (0); diff --git a/hack/hack.pri.c b/hack/hack.pri.c index 0db65d56..ad09bab6 100644 --- a/hack/hack.pri.c +++ b/hack/hack.pri.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.pri.c,v 1.12 2009/08/12 07:28:41 dholland Exp $ */ +/* $NetBSD: hack.pri.c,v 1.13 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.pri.c,v 1.12 2009/08/12 07:28:41 dholland Exp $"); +__RCSID("$NetBSD: hack.pri.c,v 1.13 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include "hack.h" @@ -796,7 +796,7 @@ cls(void) more(); flags.toplin = 0; - clear_screen(); + clearscreen(); flags.botlx = 1; } diff --git a/hack/hack.save.c b/hack/hack.save.c index 72722a02..65ce5012 100644 --- a/hack/hack.save.c +++ b/hack/hack.save.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.save.c,v 1.13 2009/08/12 07:28:41 dholland Exp $ */ +/* $NetBSD: hack.save.c,v 1.14 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.save.c,v 1.13 2009/08/12 07:28:41 dholland Exp $"); +__RCSID("$NetBSD: hack.save.c,v 1.14 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include <signal.h> @@ -87,7 +87,7 @@ dosave(void) #ifndef NOSAVEONHANGUP void -hangup(int n __unused) +hang_up(int n __unused) { (void) dosave0(1); exit(1); diff --git a/hack/hack.termcap.c b/hack/hack.terminfo.c index 6e7e9662..8ded6387 100644 --- a/hack/hack.termcap.c +++ b/hack/hack.terminfo.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.termcap.c,v 1.18 2009/08/12 07:28:41 dholland Exp $ */ +/* $NetBSD: hack.terminfo.c,v 1.1 2010/02/03 15:34:38 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,147 +63,102 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.termcap.c,v 1.18 2009/08/12 07:28:41 dholland Exp $"); +__RCSID("$NetBSD: hack.terminfo.c,v 1.1 2010/02/03 15:34:38 roy Exp $"); #endif /* not lint */ #include <string.h> #include <termios.h> -#include <termcap.h> +#include <term.h> #include <stdlib.h> #include <unistd.h> #include "hack.h" #include "extern.h" #include "def.flag.h" /* for flags.nonull */ -static struct tinfo *info; -static const char *HO, *CL, *CE, *CM, *ND, *XD, *BC_BS, *SO, *SE, *TI, *TE; -static const char *VS, *VE; -static int SG; char *CD; /* tested in pri.c: docorner() */ int CO, LI; /* used in pri.c and whatis.c */ -static void nocmov(int, int); -static void cmov(int, int); -static int xputc(int); -static void xputs(const char *); - void startup(void) { - char *term; - - /* UP, BC, PC already set */ - if (!(term = getenv("TERM"))) - error("Can't get TERM."); - if (!strncmp(term, "5620", 4)) - flags.nonull = 1; /* this should be a termcap flag */ - if (t_getent(&info, term) < 1) - error("Unknown terminal type: %s.", term); - BC_BS = t_agetstr(info, "bc"); - if (!BC_BS) { - if (!t_getflag(info, "bs")) - error("Terminal must backspace."); - BC_BS = "\b"; - } - HO = t_agetstr(info, "ho"); - CO = t_getnum(info, "co"); - LI = t_getnum(info, "li"); + + /* Will exit if no suitable term found */ + setupterm(NULL, 0, NULL); + CO = columns; + LI = lines; if (CO < COLNO || LI < ROWNO + 2) setclipped(); - if (!(CL = t_agetstr(info, "cl"))) - error("Hack needs CL."); - ND = t_agetstr(info, "nd"); - if (t_getflag(info, "os")) - error("Hack can't have OS."); - CE = t_agetstr(info, "ce"); - /* - * It seems that xd is no longer supported, and we should use a - * linefeed instead; unfortunately this requires resetting CRMOD, and - * many output routines will have to be modified slightly. Let's - * leave that till the next release. - */ - XD = t_agetstr(info, "xd"); - /* not: XD = t_agetstr(info, "do"); */ - if (!(CM = t_agetstr(info, "cm"))) { - if (!UP && !HO) - error("Hack needs CM or UP or HO."); - printf("Playing hack on terminals without cm is suspect...\n"); + if (clear_screen == NULL) + error("Hack needs clear_screen."); + if (over_strike) + error("Hack can't have over_strike."); + if (cursor_address == NULL) { + printf("Playing hack without cursor_address is suspect..."); getret(); } - SO = t_agetstr(info, "so"); - SE = t_agetstr(info, "se"); - SG = t_getnum(info, "sg"); /* -1: not fnd; else # of spaces left by so */ - if (!SO || !SE || (SG > 0)) - SO = SE = 0; - CD = t_agetstr(info, "cd"); - set_whole_screen(); /* uses LI and CD */ + set_whole_screen(); } void -start_screen(void) +startscreen(void) { - xputs(TI); - xputs(VS); } void -end_screen(void) +endscreen(void) { - xputs(VE); - xputs(TE); } -/* - * Cursor movements - * - * x,y not xchar: perhaps xchar is unsigned and - * curx-x would be unsigned as well - */ -void -curs(int x, int y) +static int +xputc(int c) { + return (fputc(c, stdout)); +} - if (y == cury && x == curx) - return; - if (!ND && (curx != x || x <= 3)) { /* Extremely primitive */ - cmov(x, y); /* bunker!wtm */ - return; +static void +xputs(const char *s) +{ + tputs(s, 1, xputc); +} + +static void +cmov(int x, int y) +{ + char *p; + + p = vtparm(cursor_address, y - 1, x - 1); + if (p) { + xputs(p); + cury = y; + curx = x; } - if (abs(cury - y) <= 3 && abs(curx - x) <= 3) - nocmov(x, y); - else if ((x <= 3 && abs(cury - y) <= 3) || (!CM && x < abs(curx - x))) { - (void) putchar('\r'); - curx = 1; - nocmov(x, y); - } else if (!CM) { - nocmov(x, y); - } else - cmov(x, y); } static void nocmov(int x, int y) { if (cury > y) { - if (UP) { + if (cursor_up) { while (cury > y) { /* Go up. */ - xputs(UP); + xputs(cursor_up); cury--; } - } else if (CM) { + } else if (cursor_address) { cmov(x, y); - } else if (HO) { + } else if (cursor_home) { home(); curs(x, y); } /* else impossible("..."); */ } else if (cury < y) { - if (XD) { + if (cursor_address) { + cmov(x, y); +#if 0 + } else if (XD) { while (cury < y) { xputs(XD); cury++; } - } else if (CM) { - cmov(x, y); +#endif } else { while (cury < y) { xputc('\n'); @@ -213,51 +168,55 @@ nocmov(int x, int y) } } if (curx < x) { /* Go to the right. */ - if (!ND) + if (!cursor_right) cmov(x, y); else /* bah */ /* should instead print what is there already */ while (curx < x) { - xputs(ND); + xputs(cursor_right); curx++; } } else if (curx > x) { - while (curx > x) { /* Go to the left. */ - xputs(BC_BS); - curx--; - } + while (curx > x) + backsp(); } } -static void -cmov(int x, int y) +/* + * Cursor movements + * + * x,y not xchar: perhaps xchar is unsigned and + * curx-x would be unsigned as well + */ +void +curs(int x, int y) { - char buf[256]; - if (t_goto(info, CM, x - 1, y - 1, buf, 255) >= 0) { - xputs(buf); - cury = y; - curx = x; + if (y == cury && x == curx) + return; + if (!cursor_right && (curx != x || x <= 3)) { /* Extremely primitive */ + cmov(x, y); /* bunker!wtm */ + return; } -} - -static int -xputc(int c) -{ - return (fputc(c, stdout)); -} - -static void -xputs(const char *s) -{ - tputs(s, 1, xputc); + if (abs(cury - y) <= 3 && abs(curx - x) <= 3) + nocmov(x, y); + else if ((x <= 3 && abs(cury - y) <= 3) || + (!cursor_address && x < abs(curx - x))) + { + (void) putchar('\r'); + curx = 1; + nocmov(x, y); + } else if (!cursor_address) { + nocmov(x, y); + } else + cmov(x, y); } void cl_end(void) { - if (CE) - xputs(CE); + if (clr_eol) + xputs(clr_eol); else { /* no-CE fix - free after Harold Rynes */ /* * this looks terrible, especially on a slow terminal but is @@ -274,21 +233,21 @@ cl_end(void) } void -clear_screen(void) +clearscreen(void) { - xputs(CL); + xputs(clear_screen); curx = cury = 1; } void home(void) { - char buf[256]; + char *out; - if (HO) - xputs(HO); - else if ((CM) && (t_goto(info, CM, 0, 0, buf, 255) >= 0)) - xputs(buf); + if (cursor_home) + xputs(cursor_home); + else if ((cursor_address) && (out = vtparm(cursor_address, 0, 0))) + xputs(out); else curs(1, 1); /* using UP ... */ curx = cury = 1; @@ -297,26 +256,29 @@ home(void) void standoutbeg(void) { - if (SO) - xputs(SO); + if (enter_standout_mode && exit_standout_mode && !magic_cookie_glitch) + xputs(enter_standout_mode); } void standoutend(void) { - if (SE) - xputs(SE); + if (exit_standout_mode && enter_standout_mode && !magic_cookie_glitch) + xputs(exit_standout_mode); } void backsp(void) { - xputs(BC_BS); + if (cursor_left) + xputs(cursor_left); + else + (void) putchar('\b'); curx--; } void -bell(void) +sound_bell(void) { (void) putchar('\007'); /* curx does not change */ (void) fflush(stdout); @@ -336,8 +298,8 @@ cl_eos(void) { /* free after Robert Viduya *//* must only be * called with curx = 1 */ - if (CD) - xputs(CD); + if (clr_eos) + xputs(clr_eos); else { int cx = curx, cy = cury; while (cury <= LI - 2) { diff --git a/hack/hack.tty.c b/hack/hack.tty.c index 8d0802b7..474afab5 100644 --- a/hack/hack.tty.c +++ b/hack/hack.tty.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.tty.c,v 1.14 2009/08/12 07:28:41 dholland Exp $ */ +/* $NetBSD: hack.tty.c,v 1.15 2010/02/03 15:34:39 roy Exp $ */ /*- * Copyright (c) 1988, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)hack.tty.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: hack.tty.c,v 1.14 2009/08/12 07:28:41 dholland Exp $"); +__RCSID("$NetBSD: hack.tty.c,v 1.15 2010/02/03 15:34:39 roy Exp $"); #endif #endif /* not lint */ @@ -152,8 +152,8 @@ gettty(void) void settty(const char *s) { - clear_screen(); - end_screen(); + clearscreen(); + endscreen(); if (s) printf("%s", s); (void) fflush(stdout); @@ -193,7 +193,7 @@ setftty(void) if (change) { setctty(); } - start_screen(); + startscreen(); } @@ -242,7 +242,7 @@ getlin(char *bufp) bufp--; putstr("\b \b"); /* putsym converts \b */ } else - bell(); + sound_bell(); } else if (c == '\n') { *bufp = 0; return; @@ -263,7 +263,7 @@ getlin(char *bufp) putstr("\b \b"); } } else - bell(); + sound_bell(); } } @@ -305,7 +305,7 @@ xwaitforspace(const char *s) morc = c; break; } - bell(); + sound_bell(); } } } diff --git a/hack/hack.u_init.c b/hack/hack.u_init.c index 5bed1e5e..b20bf1de 100644 --- a/hack/hack.u_init.c +++ b/hack/hack.u_init.c @@ -1,4 +1,4 @@ -/* $NetBSD: hack.u_init.c,v 1.11 2009/08/12 07:28:41 dholland Exp $ */ +/* $NetBSD: hack.u_init.c,v 1.12 2010/02/03 15:34:39 roy Exp $ */ /* * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, @@ -63,7 +63,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hack.u_init.c,v 1.11 2009/08/12 07:28:41 dholland Exp $"); +__RCSID("$NetBSD: hack.u_init.c,v 1.12 2010/02/03 15:34:39 roy Exp $"); #endif /* not lint */ #include <ctype.h> @@ -184,7 +184,7 @@ u_init(void) printf("\nAre you an experienced player? [ny] "); while (!strchr("ynYN \n\004", (exper = readchar()))) - bell(); + sound_bell(); if (exper == '\004') /* Give him an opportunity to get out */ end_of_input(); printf("%c\n", exper); /* echo */ @@ -218,7 +218,7 @@ u_init(void) if (pc == '\004') /* Give him the opportunity to get * out */ end_of_input(); - bell(); + sound_bell(); } if (pc == '\n') pc = 0; |