summaryrefslogtreecommitdiffstats
path: root/warp/term.h
diff options
context:
space:
mode:
authorkamil <kamil@NetBSD.org>2020-11-09 23:37:05 +0000
committerkamil <kamil@NetBSD.org>2020-11-09 23:37:05 +0000
commita931697f3be302466855163a7e216ffee7766445 (patch)
tree0ac2ab10bd68f8317dcf403536f0d612730ef35c /warp/term.h
parent6d16c3b48f5f1f377e2be346c1189d9f8edac22d (diff)
downloadbsdgames-darwin-a931697f3be302466855163a7e216ffee7766445.tar.gz
bsdgames-darwin-a931697f3be302466855163a7e216ffee7766445.tar.zst
bsdgames-darwin-a931697f3be302466855163a7e216ffee7766445.zip
Add Warp Kit, Version 7.0 by Larry Wall
Warp is a real-time space war game that doesn't get boring very quickly. Read warp.doc and the manual page for more information. games/warp originally distributed with 4.3BSD-Reno, is back to the BSD world via NetBSD. Its remnants were still mentioned in games/Makefile. Larry Wall, the original author and the copyright holder, generously donated the game and copyright to The NetBSD Foundation, Inc. Import the game sources as-is from 4.3BSD-Reno, with the cession of the copyright and license to BSD-2-clause NetBSD-style. Signed-off-by: Larry Wall <larry@wall.org> Signed-off-by: Kamil Rytarowski <kamil@netbsd.org>
Diffstat (limited to 'warp/term.h')
-rw-r--r--warp/term.h327
1 files changed, 327 insertions, 0 deletions
diff --git a/warp/term.h b/warp/term.h
new file mode 100644
index 00000000..cd304456
--- /dev/null
+++ b/warp/term.h
@@ -0,0 +1,327 @@
+/* $Header: /cvsroot/src/games/warp/term.h,v 1.1 2020/11/09 23:37:05 kamil Exp $ */
+
+/* $Log: term.h,v $
+/* Revision 1.1 2020/11/09 23:37:05 kamil
+/* Add Warp Kit, Version 7.0 by Larry Wall
+/*
+/* Warp is a real-time space war game that doesn't get boring very quickly.
+/* Read warp.doc and the manual page for more information.
+/*
+/* games/warp originally distributed with 4.3BSD-Reno, is back to the BSD
+/* world via NetBSD. Its remnants were still mentioned in games/Makefile.
+/*
+/* Larry Wall, the original author and the copyright holder, generously
+/* donated the game and copyright to The NetBSD Foundation, Inc.
+/*
+/* Import the game sources as-is from 4.3BSD-Reno, with the cession
+/* of the copyright and license to BSD-2-clause NetBSD-style.
+/*
+/* Signed-off-by: Larry Wall <larry@wall.org>
+/* Signed-off-by: Kamil Rytarowski <kamil@netbsd.org>
+/*
+ * Revision 7.0.1.2 86/12/12 17:05:15 lwall
+ * Baseline for net release.
+ *
+ * Revision 7.0.1.1 86/10/16 10:53:33 lwall
+ * Added Damage. Fixed random bugs.
+ *
+ * Revision 7.0 86/10/08 15:14:07 lwall
+ * Split into separate files. Added amoebas and pirates.
+ *
+ */
+
+/* warp will still work without the following, but may get ahead at low speed */
+#ifdef TIOCOUTQ /* chars left in output queue */
+#define output_pending() (ioctl(1, TIOCOUTQ, &iocount),iocount)
+#endif
+
+/* If some of the following look something like curses calls, it is because
+ * warp used to use curses but doesn't now. Warp was neither as efficient nor
+ * as portable with curses, and since the program had to cheat on curses all
+ * over the place anyway, we ripped it out.
+ */
+#define setimage(of,to) (mvaddch(of->posy+1,of->posx*2,of->image=(to)))
+
+#define mvaddch(y,x,ch) move((y),(x),(ch))
+/* #define addch(ch) (tmpchr=(ch), write(1,&tmpchr,1), real_x++) */
+#define mvaddc(y,x,ch) move((y),(x),(ch))
+#define addc(ch) (write(1,&(ch),1), real_x++)
+#define addspace() (write(1," ",1), real_x++)
+#define mvaddstr(y,x,s) (move((y),(x),0), tmpstr = (s), \
+ tmplen = strlen(tmpstr), write(1, tmpstr, tmplen), real_x += tmplen)
+
+EXT int tmplen;
+EXT char *tmpstr;
+/* EXT char tmpchr; */
+
+/* The following macros are like the pseudo-curses macros above, but do
+ * certain amount of controlled output buffering.
+ *
+ * NOTE: a beg_qwrite()..end_qwrite() sequence must NOT contain a cursor
+ * movement (move), because the move() routine uses beg_qwrite()..end_qwrite()
+ * itself.
+ */
+
+#define beg_qwrite() (maxcmstring = cmbuffer)
+#ifdef vax
+#define qwrite() asm("movc3 _gfillen,_filler,*_maxcmstring"); maxcmstring += gfillen
+#else
+#define qwrite() (movc3(gfillen,filler,maxcmstring), maxcmstring += gfillen)
+#endif
+#define qaddc(ch) (*maxcmstring++ = (ch), real_x++)
+#define qaddch(ch) (*maxcmstring++ = (ch), real_x++)
+#define qaddspace() (*maxcmstring++ = ' ', real_x++)
+#define end_qwrite() (write(1,cmbuffer,maxcmstring-cmbuffer))
+
+/* setting a ??size to infinity forces cursor addressing in that direction */
+
+EXT int CMsize;
+EXT int BCsize INIT(1);
+EXT int DOsize INIT(1000);
+EXT int UPsize INIT(1000);
+EXT int NDsize INIT(1000);
+
+EXT int charsperhalfsec;
+
+EXT int real_y INIT(-100);
+EXT int real_x INIT(-100);
+
+#ifdef DOINIT
+char filler[] = {0,'\b',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+#else
+EXT char filler[];
+#endif
+
+EXT char *bsptr INIT(filler+1);
+
+EXT char term[12];
+
+EXT char gfillen INIT(25);
+
+EXT char *maxcmstring;
+EXT char cmbuffer[512];
+
+#define BREAKCH '\0'
+
+EXT char INTRCH INIT('\03');
+
+#ifdef PUSHBACK
+ EXT char circlebuf[PUSHSIZE];
+ EXT int nextin INIT(0);
+ EXT int nextout INIT(0);
+# ifdef PENDING
+# ifdef FIONREAD
+ EXT long iocount INIT(0);
+# ifndef lint
+# define input_pending() (nextin!=nextout || \
+(ioctl(0, FIONREAD, &iocount),(int)iocount))
+# else
+# define input_pending() bizarre
+# endif /* lint */
+# else /* FIONREAD */
+ int circfill();
+# ifdef RDCHK
+# ifndef lint
+# define input_pending() rdchk(0)
+# else /* lint */
+# define input_pending() bizarre
+# endif /* lint */
+# else /* RDCHK */
+# ifndef O_NDELAY /* assert O_NDELAY */
+ ??? PENDING isn't defined correctly in warp.h
+# endif
+ EXT int devtty INIT(0);
+# ifndef lint
+# define input_pending() (nextin!=nextout || circfill())
+# else
+# define input_pending() bizarre
+# endif /* lint */
+# endif /* RDCHK */
+# endif /* FIONREAD */
+# else /* PENDING */
+ ??? warp won't work without PENDING
+# ifndef lint
+# define input_pending() (nextin!=nextout)
+# else
+# define input_pending() bizarre
+# endif /* lint */
+# endif /* PENDING */
+#else /* PUSHBACK */
+# ifdef PENDING
+# ifdef FIONREAD /* must have FIONREAD or O_NDELAY for input_pending() */
+# define read_tty(addr,size) read(0,addr,size)
+# ifndef lint
+# define input_pending() (ioctl(0, FIONREAD, &iocount), \
+(int)iocount)
+# else
+# define input_pending() bizarre
+# endif /* lint */
+ EXT long iocount INIT(0);
+# else /* FIONREAD */
+# ifdef RDCHK /* actually, they can have rdchk() too */
+# define read_tty(addr,size) read(0,addr,size)
+# ifndef lint
+# define input_pending() rdchk(0)
+# else /* lint */
+# define input_pending() bizarre
+# endif /* lint */
+# else /* RDCHK */
+# ifndef O_NDELAY /* assert O_NDELAY */
+ ??? PENDING isn't defined correctly in warp.h
+# endif
+ EXT int devtty INIT(0);
+ EXT bool is_input INIT(FALSE);
+ EXT char pending_ch INIT(0);
+# ifndef lint
+# define input_pending() (is_input || \
+(is_input=read(devtty,&pending_ch,1)))
+# else
+# define input_pending() bizarre
+# endif /* lint */
+# endif /* RDCHK */
+# endif /* FIONREAD */
+# else /* PENDING */
+ ??? warp won't work without PENDING
+# define read_tty(addr,size) read(0,addr,size)
+# define input_pending() (FALSE)
+# endif /* PENDING */
+#endif /* PUSHBACK */
+
+/* stuff wanted by terminal mode diddling routines */
+
+#ifdef TERMIO
+EXT struct termio _tty, _oldtty;
+#else
+EXT struct sgttyb _tty;
+EXT int _res_flg INIT(0);
+#endif
+
+EXT int _tty_ch INIT(2);
+EXT bool bizarre INIT(FALSE); /* do we need to restore terminal? */
+
+/* terminal mode diddling routines */
+
+#ifdef TERMIO
+
+#define raw() ((bizarre=1),_tty.c_lflag &=~ISIG,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
+#define noraw() ((bizarre=1),_tty.c_lflag |= ISIG,_tty.c_cc[VEOF] = CEOF,ioctl(_tty_ch,TCSETAF,&_tty))
+#define crmode() ((bizarre=1),_tty.c_lflag &=~ICANON,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
+#define nocrmode() ((bizarre=1),_tty.c_lflag |= ICANON,_tty.c_cc[VEOF] = CEOF,ioctl(_tty_ch,TCSETAF,&_tty))
+#define echo() ((bizarre=1),_tty.c_lflag |= ECHO, ioctl(_tty_ch, TCSETAW, &_tty))
+#define noecho() ((bizarre=1),_tty.c_lflag &=~ECHO, ioctl(_tty_ch, TCSETAW, &_tty))
+#define nl() ((bizarre=1),_tty.c_iflag |= ICRNL,_tty.c_oflag |= ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
+#define nonl() ((bizarre=1),_tty.c_iflag &=~ICRNL,_tty.c_oflag &=~ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
+#define savetty() (ioctl(_tty_ch, TCGETA, &_oldtty),ioctl(_tty_ch, TCGETA, &_tty))
+#define resetty() ((bizarre=0),ioctl(_tty_ch, TCSETAF, &_oldtty))
+#define unflush_output()
+
+#else
+
+#define raw() ((bizarre=1),_tty.sg_flags|=RAW, stty(_tty_ch,&_tty))
+#define noraw() ((bizarre=1),_tty.sg_flags&=~RAW,stty(_tty_ch,&_tty))
+#define crmode() ((bizarre=1),_tty.sg_flags |= CBREAK, stty(_tty_ch,&_tty))
+#define nocrmode() ((bizarre=1),_tty.sg_flags &= ~CBREAK,stty(_tty_ch,&_tty))
+#define echo() ((bizarre=1),_tty.sg_flags |= ECHO, stty(_tty_ch, &_tty))
+#define noecho() ((bizarre=1),_tty.sg_flags &= ~ECHO, stty(_tty_ch, &_tty))
+#define nl() ((bizarre=1),_tty.sg_flags |= CRMOD,stty(_tty_ch, &_tty))
+#define nonl() ((bizarre=1),_tty.sg_flags &= ~CRMOD, stty(_tty_ch, &_tty))
+#define savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags)
+#define resetty() ((bizarre=0),_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty))
+#endif /* TERMIO */
+
+#ifdef TIOCSTI
+#ifdef lint
+#define forceme(c) ioctl(_tty_ch,TIOCSTI,Null(long*)) /* ghad! */
+#else
+#define forceme(c) ioctl(_tty_ch,TIOCSTI,c) /* pass character in " " */
+#endif /* lint */
+#else
+#define forceme(c)
+#endif
+
+/* termcap stuff */
+
+/*
+ * NOTE: if you don't have termlib you'll have to define these strings,
+ * the tputs routine, and the tgoto routine.
+ * The tgoto routine simply produces a cursor addressing string for a given
+ * x and y. The 1st argument is a generic string to be interpreted.
+ * If you are hardwiring it you might just ignore the 1st argument.
+ * The tputs routine interprets any leading number as a padding factor, possibly
+ * scaled by the number of lines (2nd argument), puts out the string (1st arg)
+ * and the padding using the routine specified as the 3rd argument.
+ */
+
+#ifdef HAVETERMLIB
+EXT char *BC INIT(Nullch); /* backspace character */
+EXT char *UP INIT(Nullch); /* move cursor up one line */
+EXT char *myUP;
+EXT char *ND INIT(Nullch); /* non-destructive cursor right */
+EXT char *myND;
+EXT char *DO INIT(Nullch); /* move cursor down one line */
+EXT char *myDO;
+EXT char *CR INIT(Nullch); /* get to left margin, somehow */
+EXT char *VB INIT(Nullch); /* visible bell */
+EXT char *CL INIT(Nullch); /* home and clear screen */
+EXT char *CE INIT(Nullch); /* clear to end of line */
+EXT char *CM INIT(Nullch); /* cursor motion -- PWP */
+EXT char *HO INIT(Nullch); /* home cursor -- PWP */
+EXT char *CD INIT(Nullch); /* clear to end of display -- PWP */
+EXT char *SO INIT(Nullch); /* begin standout mode */
+EXT char *SE INIT(Nullch); /* end standout mode */
+EXT int SG INIT(0); /* blanks left by SO and SE */
+EXT char *US INIT(Nullch); /* start underline mode */
+EXT char *UE INIT(Nullch); /* end underline mode */
+EXT char *UC INIT(Nullch); /* underline a character, if that's how it's done */
+EXT int UG INIT(0); /* blanks left by US and UE */
+EXT bool AM INIT(FALSE); /* does terminal have automatic margins? */
+EXT bool XN INIT(FALSE); /* does it eat 1st newline after automatic wrap? */
+EXT char PC INIT(0); /* pad character for use by tputs() */
+EXT short ospeed INIT(0); /* terminal output speed, for use by tputs() */
+EXT int LINES INIT(0), COLS INIT(0); /* size of screen */
+EXT int just_a_sec INIT(960); /* 1 sec at current baud rate */
+ /* (number of nulls) */
+EXT char ERASECH; /* rubout character */
+EXT char KILLCH; /* line delete character */
+
+/* define a few handy macros */
+
+#define clear() (do_tc(CL,LINES),real_y=real_x=0)
+#define erase_eol() do_tc(CE,1)
+#define backspace() (do_tc(BC,0),real_x--)
+#define clear_rest() do_tc(CD,LINES)
+#define underline() do_tc(US,1)
+#define un_underline() do_tc(UE,1)
+#define underchar() do_tc(UC,0)
+#define standout() do_tc(SO,1)
+#define un_standout() do_tc(SE,1)
+#define up_line() do_tc(UP,1)
+#define carriage_return() do_tc(CR,1)
+#define dingaling() do_tc(VB,1)
+#else
+ ???????? /* up to you */
+#endif
+
+void term_init();
+void term_set();
+#ifdef PUSHBACK
+void pushchar();
+void mac_init();
+void mac_line();
+#endif
+void eat_typeahead();
+void settle_down();
+#ifndef read_tty
+ int read_tty();
+#endif
+void getcmd();
+
+int read_nd();
+void page();
+void move();
+void do_tc();
+int comp_tc();
+void helper();
+void rewrite();
+char cmstore();
+