1 /* $NetBSD: terminal.c,v 1.6 2009/07/04 02:37:20 dholland Exp $ */
3 * Copyright (c) 1983-2003, Regents of the University of California.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
10 * + Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * + Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * + Neither the name of the University of California, San Francisco nor
16 * the names of its contributors may be used to endorse or promote
17 * products derived from this software without specific prior written
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #include <sys/cdefs.h>
35 __RCSID("$NetBSD: terminal.c,v 1.6 2009/07/04 02:37:20 dholland Exp $");
40 #define TERM_WIDTH 80 /* Assume terminals are 80-char wide */
44 * Move the cursor to the given position on the given player's
48 cgoto(PLAYER
*pp
, int y
, int x
)
50 if (x
== pp
->p_curx
&& y
== pp
->p_cury
)
52 sendcom(pp
, MOVE
, y
, x
);
59 * Put out a single character.
62 outch(PLAYER
*pp
, int ch
)
64 if (++pp
->p_curx
>= TERM_WIDTH
) {
68 (void) putc(ch
, pp
->p_output
);
73 * Put out a string of the given length.
76 outstr(PLAYER
*pp
, const char *str
, int len
)
79 pp
->p_cury
+= (pp
->p_curx
/ TERM_WIDTH
);
80 pp
->p_curx
%= TERM_WIDTH
;
82 (void) putc(*str
++, pp
->p_output
);
87 * Clear the screen, and reset the current position on the screen.
99 * Clear to the end of the line
104 sendcom(pp
, CLRTOEOL
);
107 #if 0 /* XXX lukem */
115 sendcom(pp
, REFRESH
);
121 * Send a command to the given user
124 sendcom(PLAYER
*pp
, int command
, ...)
129 va_start(ap
, command
);
130 (void) putc(command
, pp
->p_output
);
131 switch (command
& 0377) {
133 arg1
= va_arg(ap
, int);
134 arg2
= va_arg(ap
, int);
135 (void) putc(arg1
, pp
->p_output
);
136 (void) putc(arg2
, pp
->p_output
);
140 arg1
= va_arg(ap
, int);
141 (void) putc(arg1
, pp
->p_output
);
145 va_end(ap
); /* No return needed for void functions. */