Home | History | Annotate | Line # | Download | only in huntd
terminal.c revision 1.1
      1  1.1  mrg /*
      2  1.1  mrg  *  Hunt
      3  1.1  mrg  *  Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
      4  1.1  mrg  *  San Francisco, California
      5  1.1  mrg  */
      6  1.1  mrg 
      7  1.1  mrg # include	"hunt.h"
      8  1.1  mrg # define	TERM_WIDTH	80	/* Assume terminals are 80-char wide */
      9  1.1  mrg 
     10  1.1  mrg /*
     11  1.1  mrg  * cgoto:
     12  1.1  mrg  *	Move the cursor to the given position on the given player's
     13  1.1  mrg  *	terminal.
     14  1.1  mrg  */
     15  1.1  mrg cgoto(pp, y, x)
     16  1.1  mrg register PLAYER	*pp;
     17  1.1  mrg register int	y, x;
     18  1.1  mrg {
     19  1.1  mrg 	if (x == pp->p_curx && y == pp->p_cury)
     20  1.1  mrg 		return;
     21  1.1  mrg 	sendcom(pp, MOVE, y, x);
     22  1.1  mrg 	pp->p_cury = y;
     23  1.1  mrg 	pp->p_curx = x;
     24  1.1  mrg }
     25  1.1  mrg 
     26  1.1  mrg /*
     27  1.1  mrg  * outch:
     28  1.1  mrg  *	Put out a single character.
     29  1.1  mrg  */
     30  1.1  mrg outch(pp, ch)
     31  1.1  mrg register PLAYER	*pp;
     32  1.1  mrg char		ch;
     33  1.1  mrg {
     34  1.1  mrg 	if (++pp->p_curx >= TERM_WIDTH) {
     35  1.1  mrg 		pp->p_curx = 0;
     36  1.1  mrg 		pp->p_cury++;
     37  1.1  mrg 	}
     38  1.1  mrg 	(void) putc(ch, pp->p_output);
     39  1.1  mrg }
     40  1.1  mrg 
     41  1.1  mrg /*
     42  1.1  mrg  * outstr:
     43  1.1  mrg  *	Put out a string of the given length.
     44  1.1  mrg  */
     45  1.1  mrg outstr(pp, str, len)
     46  1.1  mrg register PLAYER	*pp;
     47  1.1  mrg register char	*str;
     48  1.1  mrg register int	len;
     49  1.1  mrg {
     50  1.1  mrg 	pp->p_curx += len;
     51  1.1  mrg 	pp->p_cury += (pp->p_curx / TERM_WIDTH);
     52  1.1  mrg 	pp->p_curx %= TERM_WIDTH;
     53  1.1  mrg 	while (len--)
     54  1.1  mrg 		(void) putc(*str++, pp->p_output);
     55  1.1  mrg }
     56  1.1  mrg 
     57  1.1  mrg /*
     58  1.1  mrg  * clrscr:
     59  1.1  mrg  *	Clear the screen, and reset the current position on the screen.
     60  1.1  mrg  */
     61  1.1  mrg clrscr(pp)
     62  1.1  mrg register PLAYER	*pp;
     63  1.1  mrg {
     64  1.1  mrg 	sendcom(pp, CLEAR);
     65  1.1  mrg 	pp->p_cury = 0;
     66  1.1  mrg 	pp->p_curx = 0;
     67  1.1  mrg }
     68  1.1  mrg 
     69  1.1  mrg /*
     70  1.1  mrg  * ce:
     71  1.1  mrg  *	Clear to the end of the line
     72  1.1  mrg  */
     73  1.1  mrg ce(pp)
     74  1.1  mrg PLAYER	*pp;
     75  1.1  mrg {
     76  1.1  mrg 	sendcom(pp, CLRTOEOL);
     77  1.1  mrg }
     78  1.1  mrg 
     79  1.1  mrg /*
     80  1.1  mrg  * ref;
     81  1.1  mrg  *	Refresh the screen
     82  1.1  mrg  */
     83  1.1  mrg ref(pp)
     84  1.1  mrg register PLAYER	*pp;
     85  1.1  mrg {
     86  1.1  mrg 	sendcom(pp, REFRESH);
     87  1.1  mrg }
     88  1.1  mrg 
     89  1.1  mrg /*
     90  1.1  mrg  * sendcom:
     91  1.1  mrg  *	Send a command to the given user
     92  1.1  mrg  */
     93  1.1  mrg /* VARARGS2 */
     94  1.1  mrg sendcom(pp, command, arg1, arg2)
     95  1.1  mrg register PLAYER		*pp;
     96  1.1  mrg register int	command;
     97  1.1  mrg int			arg1, arg2;
     98  1.1  mrg {
     99  1.1  mrg 	(void) putc(command, pp->p_output);
    100  1.1  mrg 	switch (command & 0377) {
    101  1.1  mrg 	  case MOVE:
    102  1.1  mrg 		(void) putc(arg1, pp->p_output);
    103  1.1  mrg 		(void) putc(arg2, pp->p_output);
    104  1.1  mrg 		break;
    105  1.1  mrg 	  case ADDCH:
    106  1.1  mrg 	  case READY:
    107  1.1  mrg 		(void) putc(arg1, pp->p_output);
    108  1.1  mrg 		break;
    109  1.1  mrg 	}
    110  1.1  mrg }
    111