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