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