Home | History | Annotate | Line # | Download | only in warp
term.h revision 1.1
      1  1.1  kamil /* $Header: /tank/opengrok/rsync2/NetBSD/src/games/warp/term.h,v 1.1 2020/11/09 23:37:05 kamil Exp $ */
      2  1.1  kamil 
      3  1.1  kamil /* $Log: term.h,v $
      4  1.1  kamil /* Revision 1.1  2020/11/09 23:37:05  kamil
      5  1.1  kamil /* Add Warp Kit, Version 7.0 by Larry Wall
      6  1.1  kamil /*
      7  1.1  kamil /* Warp is a real-time space war game that doesn't get boring very quickly.
      8  1.1  kamil /* Read warp.doc and the manual page for more information.
      9  1.1  kamil /*
     10  1.1  kamil /* games/warp originally distributed with 4.3BSD-Reno, is back to the BSD
     11  1.1  kamil /* world via NetBSD. Its remnants were still mentioned in games/Makefile.
     12  1.1  kamil /*
     13  1.1  kamil /* Larry Wall, the original author and the copyright holder, generously
     14  1.1  kamil /* donated the game and copyright to The NetBSD Foundation, Inc.
     15  1.1  kamil /*
     16  1.1  kamil /* Import the game sources as-is from 4.3BSD-Reno, with the cession
     17  1.1  kamil /* of the copyright and license to BSD-2-clause NetBSD-style.
     18  1.1  kamil /*
     19  1.1  kamil /* Signed-off-by: Larry Wall <larry (at) wall.org>
     20  1.1  kamil /* Signed-off-by: Kamil Rytarowski <kamil (at) netbsd.org>
     21  1.1  kamil /*
     22  1.1  kamil  * Revision 7.0.1.2  86/12/12  17:05:15  lwall
     23  1.1  kamil  * Baseline for net release.
     24  1.1  kamil  *
     25  1.1  kamil  * Revision 7.0.1.1  86/10/16  10:53:33  lwall
     26  1.1  kamil  * Added Damage.  Fixed random bugs.
     27  1.1  kamil  *
     28  1.1  kamil  * Revision 7.0  86/10/08  15:14:07  lwall
     29  1.1  kamil  * Split into separate files.  Added amoebas and pirates.
     30  1.1  kamil  *
     31  1.1  kamil  */
     32  1.1  kamil 
     33  1.1  kamil /* warp will still work without the following, but may get ahead at low speed */
     34  1.1  kamil #ifdef TIOCOUTQ		/* chars left in output queue */
     35  1.1  kamil #define output_pending() (ioctl(1, TIOCOUTQ, &iocount),iocount)
     36  1.1  kamil #endif
     37  1.1  kamil 
     38  1.1  kamil /* If some of the following look something like curses calls, it is because
     39  1.1  kamil  * warp used to use curses but doesn't now.  Warp was neither as efficient nor
     40  1.1  kamil  * as portable with curses, and since the program had to cheat on curses all
     41  1.1  kamil  * over the place anyway, we ripped it out.
     42  1.1  kamil  */
     43  1.1  kamil #define setimage(of,to) (mvaddch(of->posy+1,of->posx*2,of->image=(to)))
     44  1.1  kamil 
     45  1.1  kamil #define mvaddch(y,x,ch) move((y),(x),(ch))
     46  1.1  kamil /* #define addch(ch) (tmpchr=(ch), write(1,&tmpchr,1), real_x++) */
     47  1.1  kamil #define mvaddc(y,x,ch) move((y),(x),(ch))
     48  1.1  kamil #define addc(ch) (write(1,&(ch),1), real_x++)
     49  1.1  kamil #define addspace() (write(1," ",1), real_x++)
     50  1.1  kamil #define mvaddstr(y,x,s) (move((y),(x),0), tmpstr = (s), \
     51  1.1  kamil      tmplen = strlen(tmpstr), write(1, tmpstr, tmplen), real_x += tmplen)
     52  1.1  kamil 
     53  1.1  kamil EXT int tmplen;
     54  1.1  kamil EXT char *tmpstr;
     55  1.1  kamil /* EXT char tmpchr; */
     56  1.1  kamil 
     57  1.1  kamil /* The following macros are like the pseudo-curses macros above, but do
     58  1.1  kamil  * certain amount of controlled output buffering.
     59  1.1  kamil  *
     60  1.1  kamil  * NOTE: a beg_qwrite()..end_qwrite() sequence must NOT contain a cursor
     61  1.1  kamil  * movement (move), because the move() routine uses beg_qwrite()..end_qwrite()
     62  1.1  kamil  * itself.
     63  1.1  kamil  */
     64  1.1  kamil 
     65  1.1  kamil #define beg_qwrite() (maxcmstring = cmbuffer)
     66  1.1  kamil #ifdef vax
     67  1.1  kamil #define qwrite() asm("movc3 _gfillen,_filler,*_maxcmstring"); maxcmstring += gfillen
     68  1.1  kamil #else
     69  1.1  kamil #define qwrite() (movc3(gfillen,filler,maxcmstring), maxcmstring += gfillen)
     70  1.1  kamil #endif
     71  1.1  kamil #define qaddc(ch) (*maxcmstring++ = (ch), real_x++)
     72  1.1  kamil #define qaddch(ch) (*maxcmstring++ = (ch), real_x++)
     73  1.1  kamil #define qaddspace() (*maxcmstring++ = ' ', real_x++)
     74  1.1  kamil #define end_qwrite() (write(1,cmbuffer,maxcmstring-cmbuffer))
     75  1.1  kamil 
     76  1.1  kamil /* setting a ??size to infinity forces cursor addressing in that direction */
     77  1.1  kamil 
     78  1.1  kamil EXT int CMsize;
     79  1.1  kamil EXT int BCsize INIT(1);
     80  1.1  kamil EXT int DOsize INIT(1000);
     81  1.1  kamil EXT int UPsize INIT(1000);
     82  1.1  kamil EXT int NDsize INIT(1000);
     83  1.1  kamil 
     84  1.1  kamil EXT int charsperhalfsec;
     85  1.1  kamil 
     86  1.1  kamil EXT int real_y INIT(-100);
     87  1.1  kamil EXT int real_x INIT(-100);
     88  1.1  kamil 
     89  1.1  kamil #ifdef DOINIT
     90  1.1  kamil 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};
     91  1.1  kamil #else
     92  1.1  kamil EXT char filler[];
     93  1.1  kamil #endif
     94  1.1  kamil 
     95  1.1  kamil EXT char *bsptr INIT(filler+1);
     96  1.1  kamil 
     97  1.1  kamil EXT char term[12];
     98  1.1  kamil 
     99  1.1  kamil EXT char gfillen INIT(25);
    100  1.1  kamil 
    101  1.1  kamil EXT char *maxcmstring;
    102  1.1  kamil EXT char cmbuffer[512];
    103  1.1  kamil 
    104  1.1  kamil #define BREAKCH '\0'
    105  1.1  kamil 
    106  1.1  kamil EXT char INTRCH INIT('\03');
    107  1.1  kamil 
    108  1.1  kamil #ifdef PUSHBACK
    109  1.1  kamil     EXT char circlebuf[PUSHSIZE];
    110  1.1  kamil     EXT int nextin INIT(0);
    111  1.1  kamil     EXT int nextout INIT(0);
    112  1.1  kamil #   ifdef PENDING
    113  1.1  kamil #	ifdef FIONREAD
    114  1.1  kamil 	    EXT long iocount INIT(0);
    115  1.1  kamil #	    ifndef lint
    116  1.1  kamil #		define input_pending() (nextin!=nextout || \
    117  1.1  kamil (ioctl(0, FIONREAD, &iocount),(int)iocount))
    118  1.1  kamil #	    else
    119  1.1  kamil #		define input_pending() bizarre
    120  1.1  kamil #	    endif /* lint */
    121  1.1  kamil #	else /* FIONREAD */
    122  1.1  kamil 	    int circfill();
    123  1.1  kamil #	    ifdef RDCHK
    124  1.1  kamil #		ifndef lint
    125  1.1  kamil #		    define input_pending() rdchk(0)
    126  1.1  kamil #		else /* lint */
    127  1.1  kamil #		    define input_pending() bizarre
    128  1.1  kamil #		endif /* lint */
    129  1.1  kamil #	    else /* RDCHK */
    130  1.1  kamil #		ifndef O_NDELAY	/* assert O_NDELAY */
    131  1.1  kamil 		    ??? PENDING isn't defined correctly in warp.h
    132  1.1  kamil #		endif
    133  1.1  kamil 		EXT int devtty INIT(0);
    134  1.1  kamil #		ifndef lint
    135  1.1  kamil #		    define input_pending() (nextin!=nextout || circfill())
    136  1.1  kamil #		else
    137  1.1  kamil #		    define input_pending() bizarre
    138  1.1  kamil #		endif /* lint */
    139  1.1  kamil #	    endif /* RDCHK */
    140  1.1  kamil #	endif /* FIONREAD */
    141  1.1  kamil #   else /* PENDING */
    142  1.1  kamil 	??? warp won't work without PENDING
    143  1.1  kamil #	ifndef lint
    144  1.1  kamil #	    define input_pending() (nextin!=nextout)
    145  1.1  kamil #	else
    146  1.1  kamil #	    define input_pending() bizarre
    147  1.1  kamil #	endif /* lint */
    148  1.1  kamil #   endif /* PENDING */
    149  1.1  kamil #else /* PUSHBACK */
    150  1.1  kamil #   ifdef PENDING
    151  1.1  kamil #	ifdef FIONREAD /* must have FIONREAD or O_NDELAY for input_pending() */
    152  1.1  kamil #	    define read_tty(addr,size) read(0,addr,size)
    153  1.1  kamil #	    ifndef lint
    154  1.1  kamil #		define input_pending() (ioctl(0, FIONREAD, &iocount), \
    155  1.1  kamil (int)iocount)
    156  1.1  kamil #	    else
    157  1.1  kamil #		define input_pending() bizarre
    158  1.1  kamil #	    endif /* lint */
    159  1.1  kamil 	    EXT long iocount INIT(0);
    160  1.1  kamil #	else /* FIONREAD */
    161  1.1  kamil #	    ifdef RDCHK		/* actually, they can have rdchk() too */
    162  1.1  kamil #	    define read_tty(addr,size) read(0,addr,size)
    163  1.1  kamil #		ifndef lint
    164  1.1  kamil #		    define input_pending() rdchk(0)
    165  1.1  kamil #		else /* lint */
    166  1.1  kamil #		    define input_pending() bizarre
    167  1.1  kamil #		endif /* lint */
    168  1.1  kamil #	    else /* RDCHK */
    169  1.1  kamil #		ifndef O_NDELAY	/* assert O_NDELAY */
    170  1.1  kamil 		    ??? PENDING isn't defined correctly in warp.h
    171  1.1  kamil #		endif
    172  1.1  kamil 		EXT int devtty INIT(0);
    173  1.1  kamil 		EXT bool is_input INIT(FALSE);
    174  1.1  kamil 		EXT char pending_ch INIT(0);
    175  1.1  kamil #		ifndef lint
    176  1.1  kamil #		    define input_pending() (is_input || \
    177  1.1  kamil (is_input=read(devtty,&pending_ch,1)))
    178  1.1  kamil #		else
    179  1.1  kamil #		    define input_pending() bizarre
    180  1.1  kamil #		endif /* lint */
    181  1.1  kamil #	    endif /* RDCHK */
    182  1.1  kamil #	endif /* FIONREAD */
    183  1.1  kamil #   else /* PENDING */
    184  1.1  kamil 	??? warp won't work without PENDING
    185  1.1  kamil #	define read_tty(addr,size) read(0,addr,size)
    186  1.1  kamil #	define input_pending() (FALSE)
    187  1.1  kamil #   endif /* PENDING */
    188  1.1  kamil #endif /* PUSHBACK */
    189  1.1  kamil 
    190  1.1  kamil /* stuff wanted by terminal mode diddling routines */
    191  1.1  kamil 
    192  1.1  kamil #ifdef TERMIO
    193  1.1  kamil EXT struct termio _tty, _oldtty;
    194  1.1  kamil #else
    195  1.1  kamil EXT struct sgttyb _tty;
    196  1.1  kamil EXT int _res_flg INIT(0);
    197  1.1  kamil #endif
    198  1.1  kamil 
    199  1.1  kamil EXT int _tty_ch INIT(2);
    200  1.1  kamil EXT bool bizarre INIT(FALSE);			/* do we need to restore terminal? */
    201  1.1  kamil 
    202  1.1  kamil /* terminal mode diddling routines */
    203  1.1  kamil 
    204  1.1  kamil #ifdef TERMIO
    205  1.1  kamil 
    206  1.1  kamil #define raw() ((bizarre=1),_tty.c_lflag &=~ISIG,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
    207  1.1  kamil #define noraw() ((bizarre=1),_tty.c_lflag |= ISIG,_tty.c_cc[VEOF] = CEOF,ioctl(_tty_ch,TCSETAF,&_tty))
    208  1.1  kamil #define crmode() ((bizarre=1),_tty.c_lflag &=~ICANON,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
    209  1.1  kamil #define nocrmode() ((bizarre=1),_tty.c_lflag |= ICANON,_tty.c_cc[VEOF] = CEOF,ioctl(_tty_ch,TCSETAF,&_tty))
    210  1.1  kamil #define echo()	 ((bizarre=1),_tty.c_lflag |= ECHO, ioctl(_tty_ch, TCSETAW, &_tty))
    211  1.1  kamil #define noecho() ((bizarre=1),_tty.c_lflag &=~ECHO, ioctl(_tty_ch, TCSETAW, &_tty))
    212  1.1  kamil #define nl()	 ((bizarre=1),_tty.c_iflag |= ICRNL,_tty.c_oflag |= ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
    213  1.1  kamil #define nonl()	 ((bizarre=1),_tty.c_iflag &=~ICRNL,_tty.c_oflag &=~ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
    214  1.1  kamil #define	savetty() (ioctl(_tty_ch, TCGETA, &_oldtty),ioctl(_tty_ch, TCGETA, &_tty))
    215  1.1  kamil #define	resetty() ((bizarre=0),ioctl(_tty_ch, TCSETAF, &_oldtty))
    216  1.1  kamil #define unflush_output()
    217  1.1  kamil 
    218  1.1  kamil #else
    219  1.1  kamil 
    220  1.1  kamil #define raw()	 ((bizarre=1),_tty.sg_flags|=RAW, stty(_tty_ch,&_tty))
    221  1.1  kamil #define noraw()	 ((bizarre=1),_tty.sg_flags&=~RAW,stty(_tty_ch,&_tty))
    222  1.1  kamil #define crmode() ((bizarre=1),_tty.sg_flags |= CBREAK, stty(_tty_ch,&_tty))
    223  1.1  kamil #define nocrmode() ((bizarre=1),_tty.sg_flags &= ~CBREAK,stty(_tty_ch,&_tty))
    224  1.1  kamil #define echo()	 ((bizarre=1),_tty.sg_flags |= ECHO, stty(_tty_ch, &_tty))
    225  1.1  kamil #define noecho() ((bizarre=1),_tty.sg_flags &= ~ECHO, stty(_tty_ch, &_tty))
    226  1.1  kamil #define nl()	 ((bizarre=1),_tty.sg_flags |= CRMOD,stty(_tty_ch, &_tty))
    227  1.1  kamil #define nonl()	 ((bizarre=1),_tty.sg_flags &= ~CRMOD, stty(_tty_ch, &_tty))
    228  1.1  kamil #define	savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags)
    229  1.1  kamil #define	resetty() ((bizarre=0),_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty))
    230  1.1  kamil #endif /* TERMIO */
    231  1.1  kamil 
    232  1.1  kamil #ifdef TIOCSTI
    233  1.1  kamil #ifdef lint
    234  1.1  kamil #define forceme(c) ioctl(_tty_ch,TIOCSTI,Null(long*))	/* ghad! */
    235  1.1  kamil #else
    236  1.1  kamil #define forceme(c) ioctl(_tty_ch,TIOCSTI,c) /* pass character in " " */
    237  1.1  kamil #endif /* lint */
    238  1.1  kamil #else
    239  1.1  kamil #define forceme(c)
    240  1.1  kamil #endif
    241  1.1  kamil 
    242  1.1  kamil /* termcap stuff */
    243  1.1  kamil 
    244  1.1  kamil /*
    245  1.1  kamil  * NOTE: if you don't have termlib you'll have to define these strings,
    246  1.1  kamil  *    the tputs routine, and the tgoto routine.
    247  1.1  kamil  * The tgoto routine simply produces a cursor addressing string for a given
    248  1.1  kamil  * x and y.  The 1st argument is a generic string to be interpreted.
    249  1.1  kamil  * If you are hardwiring it you might just ignore the 1st argument.
    250  1.1  kamil  * The tputs routine interprets any leading number as a padding factor, possibly
    251  1.1  kamil  * scaled by the number of lines (2nd argument), puts out the string (1st arg)
    252  1.1  kamil  * and the padding using the routine specified as the 3rd argument.
    253  1.1  kamil  */
    254  1.1  kamil 
    255  1.1  kamil #ifdef HAVETERMLIB
    256  1.1  kamil EXT char *BC INIT(Nullch);		/* backspace character */
    257  1.1  kamil EXT char *UP INIT(Nullch);		/* move cursor up one line */
    258  1.1  kamil EXT char *myUP;
    259  1.1  kamil EXT char *ND INIT(Nullch);		/* non-destructive cursor right */
    260  1.1  kamil EXT char *myND;
    261  1.1  kamil EXT char *DO INIT(Nullch);		/* move cursor down one line */
    262  1.1  kamil EXT char *myDO;
    263  1.1  kamil EXT char *CR INIT(Nullch);		/* get to left margin, somehow */
    264  1.1  kamil EXT char *VB INIT(Nullch);		/* visible bell */
    265  1.1  kamil EXT char *CL INIT(Nullch);		/* home and clear screen */
    266  1.1  kamil EXT char *CE INIT(Nullch);		/* clear to end of line */
    267  1.1  kamil EXT char *CM INIT(Nullch);		/* cursor motion -- PWP */
    268  1.1  kamil EXT char *HO INIT(Nullch);		/* home cursor -- PWP */
    269  1.1  kamil EXT char *CD INIT(Nullch);		/* clear to end of display -- PWP */
    270  1.1  kamil EXT char *SO INIT(Nullch);		/* begin standout mode */
    271  1.1  kamil EXT char *SE INIT(Nullch);		/* end standout mode */
    272  1.1  kamil EXT int SG INIT(0);		/* blanks left by SO and SE */
    273  1.1  kamil EXT char *US INIT(Nullch);		/* start underline mode */
    274  1.1  kamil EXT char *UE INIT(Nullch);		/* end underline mode */
    275  1.1  kamil EXT char *UC INIT(Nullch);		/* underline a character, if that's how it's done */
    276  1.1  kamil EXT int UG INIT(0);		/* blanks left by US and UE */
    277  1.1  kamil EXT bool AM INIT(FALSE);		/* does terminal have automatic margins? */
    278  1.1  kamil EXT bool XN INIT(FALSE);		/* does it eat 1st newline after automatic wrap? */
    279  1.1  kamil EXT char PC INIT(0);		/* pad character for use by tputs() */
    280  1.1  kamil EXT short ospeed INIT(0);	/* terminal output speed, for use by tputs() */
    281  1.1  kamil EXT int LINES INIT(0), COLS INIT(0);	/* size of screen */
    282  1.1  kamil EXT int just_a_sec INIT(960);			/* 1 sec at current baud rate */
    283  1.1  kamil 					/* (number of nulls) */
    284  1.1  kamil EXT char ERASECH;		/* rubout character */
    285  1.1  kamil EXT char KILLCH;		/* line delete character */
    286  1.1  kamil 
    287  1.1  kamil /* define a few handy macros */
    288  1.1  kamil 
    289  1.1  kamil #define clear() (do_tc(CL,LINES),real_y=real_x=0)
    290  1.1  kamil #define erase_eol() do_tc(CE,1)
    291  1.1  kamil #define backspace() (do_tc(BC,0),real_x--)
    292  1.1  kamil #define clear_rest() do_tc(CD,LINES)
    293  1.1  kamil #define underline() do_tc(US,1)
    294  1.1  kamil #define un_underline() do_tc(UE,1)
    295  1.1  kamil #define underchar() do_tc(UC,0)
    296  1.1  kamil #define standout() do_tc(SO,1)
    297  1.1  kamil #define un_standout() do_tc(SE,1)
    298  1.1  kamil #define up_line() do_tc(UP,1)
    299  1.1  kamil #define carriage_return() do_tc(CR,1)
    300  1.1  kamil #define dingaling() do_tc(VB,1)
    301  1.1  kamil #else
    302  1.1  kamil   ????????		/* up to you */
    303  1.1  kamil #endif
    304  1.1  kamil 
    305  1.1  kamil void	term_init();
    306  1.1  kamil void	term_set();
    307  1.1  kamil #ifdef PUSHBACK
    308  1.1  kamil void	pushchar();
    309  1.1  kamil void	mac_init();
    310             void	mac_line();
    311             #endif
    312             void	eat_typeahead();
    313             void	settle_down();
    314             #ifndef read_tty
    315                 int		read_tty();
    316             #endif
    317             void	getcmd();
    318             
    319             int read_nd();
    320             void page();
    321             void move();
    322             void do_tc();
    323             int comp_tc();
    324             void helper();
    325             void rewrite();
    326             char cmstore();
    327             
    328