mirror of
https://github.com/openbsd/src.git
synced 2025-01-10 06:47:55 -08:00
We don't need no stinkin' non-new-curses code. Also eliminates a
double #include. ok deraadt@ tedu@
This commit is contained in:
parent
4b25b4d4c4
commit
fafc9fefb3
@ -1,274 +1,21 @@
|
||||
/* $OpenBSD: display.c,v 1.5 2012/12/05 23:19:50 deraadt Exp $ */
|
||||
/* $OpenBSD: display.c,v 1.6 2014/11/19 18:55:09 krw Exp $ */
|
||||
|
||||
/*
|
||||
* Display abstraction.
|
||||
* David Leonard <d@openbsd.org>, 1999. Public domain.
|
||||
*/
|
||||
|
||||
#if defined(__OpenBSD__) && !defined(USE_CURSES)
|
||||
#define USE_CURSES
|
||||
#endif
|
||||
#include <curses.h>
|
||||
|
||||
#include "display.h"
|
||||
|
||||
#if !defined(USE_CURSES)
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <termios.h>
|
||||
#define _USE_OLD_CURSES_
|
||||
#include <curses.h>
|
||||
#include <err.h>
|
||||
#include "hunt.h"
|
||||
|
||||
static struct termios saved_tty;
|
||||
|
||||
char screen[SCREEN_HEIGHT][SCREEN_WIDTH2];
|
||||
char blanks[SCREEN_WIDTH];
|
||||
int cur_row, cur_col;
|
||||
|
||||
/*
|
||||
* tstp:
|
||||
* Handle stop and start signals
|
||||
*/
|
||||
static void
|
||||
tstp(dummy)
|
||||
int dummy;
|
||||
{
|
||||
int y, x;
|
||||
|
||||
y = cur_row;
|
||||
x = cur_col;
|
||||
mvcur(cur_row, cur_col, HEIGHT, 0);
|
||||
cur_row = HEIGHT;
|
||||
cur_col = 0;
|
||||
_puts(VE);
|
||||
_puts(TE);
|
||||
(void) fflush(stdout);
|
||||
tcsetattr(0, TCSADRAIN, &__orig_termios);
|
||||
(void) kill(getpid(), SIGSTOP);
|
||||
(void) signal(SIGTSTP, tstp);
|
||||
tcsetattr(0, TCSADRAIN, &saved_tty);
|
||||
_puts(TI);
|
||||
_puts(VS);
|
||||
cur_row = y;
|
||||
cur_col = x;
|
||||
_puts(tgoto(CM, cur_row, cur_col));
|
||||
display_redraw_screen();
|
||||
(void) fflush(stdout);
|
||||
}
|
||||
|
||||
/*
|
||||
* display_open:
|
||||
* open the display
|
||||
*/
|
||||
void
|
||||
display_open()
|
||||
{
|
||||
char *term;
|
||||
|
||||
if (!isatty(0) || (term = getenv("TERM")) == NULL)
|
||||
errx(1, "no terminal type");
|
||||
|
||||
gettmode();
|
||||
(void) setterm(term);
|
||||
(void) noecho();
|
||||
(void) cbreak();
|
||||
tcgetattr(0, &saved_tty);
|
||||
_puts(TI);
|
||||
_puts(VS);
|
||||
#ifdef SIGTSTP
|
||||
(void) signal(SIGTSTP, tstp);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* display_beep:
|
||||
* beep
|
||||
*/
|
||||
void
|
||||
display_beep()
|
||||
{
|
||||
(void) putchar('\a');
|
||||
}
|
||||
|
||||
/*
|
||||
* display_refresh:
|
||||
* sync the display
|
||||
*/
|
||||
void
|
||||
display_refresh()
|
||||
{
|
||||
(void) fflush(stdout);
|
||||
}
|
||||
|
||||
/*
|
||||
* display_clear_eol:
|
||||
* clear to end of line, without moving cursor
|
||||
*/
|
||||
void
|
||||
display_clear_eol()
|
||||
{
|
||||
if (CE != NULL)
|
||||
tputs(CE, 1, __cputchar);
|
||||
else {
|
||||
fwrite(blanks, sizeof (char), SCREEN_WIDTH - cur_col, stdout);
|
||||
if (COLS != SCREEN_WIDTH)
|
||||
mvcur(cur_row, SCREEN_WIDTH, cur_row, cur_col);
|
||||
else if (AM)
|
||||
mvcur(cur_row + 1, 0, cur_row, cur_col);
|
||||
else
|
||||
mvcur(cur_row, SCREEN_WIDTH - 1, cur_row, cur_col);
|
||||
}
|
||||
memcpy(&screen[cur_row][cur_col], blanks, SCREEN_WIDTH - cur_col);
|
||||
}
|
||||
|
||||
/*
|
||||
* display_putchar:
|
||||
* put one character on the screen, move the cursor right one,
|
||||
* with wraparound
|
||||
*/
|
||||
void
|
||||
display_put_ch(ch)
|
||||
char ch;
|
||||
{
|
||||
if (!isprint(ch)) {
|
||||
fprintf(stderr, "r,c,ch: %d,%d,%d", cur_row, cur_col, ch);
|
||||
return;
|
||||
}
|
||||
screen[cur_row][cur_col] = ch;
|
||||
putchar(ch);
|
||||
if (++cur_col >= COLS) {
|
||||
if (!AM || XN)
|
||||
putchar('\n');
|
||||
cur_col = 0;
|
||||
if (++cur_row >= LINES)
|
||||
cur_row = LINES;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* display_put_str:
|
||||
* put a string of characters on the screen
|
||||
*/
|
||||
void
|
||||
display_put_str(s)
|
||||
char *s;
|
||||
{
|
||||
for( ; *s; s++)
|
||||
display_put_ch(*s);
|
||||
}
|
||||
|
||||
/*
|
||||
* display_clear_the_screen:
|
||||
* clear the screen; move cursor to top left
|
||||
*/
|
||||
void
|
||||
display_clear_the_screen()
|
||||
{
|
||||
int i;
|
||||
|
||||
if (blanks[0] == '\0')
|
||||
for (i = 0; i < SCREEN_WIDTH; i++)
|
||||
blanks[i] = ' ';
|
||||
|
||||
if (CL != NULL) {
|
||||
tputs(CL, LINES, __cputchar);
|
||||
for (i = 0; i < SCREEN_HEIGHT; i++)
|
||||
memcpy(screen[i], blanks, SCREEN_WIDTH);
|
||||
} else {
|
||||
for (i = 0; i < SCREEN_HEIGHT; i++) {
|
||||
mvcur(cur_row, cur_col, i, 0);
|
||||
cur_row = i;
|
||||
cur_col = 0;
|
||||
display_clear_eol();
|
||||
}
|
||||
mvcur(cur_row, cur_col, 0, 0);
|
||||
}
|
||||
cur_row = cur_col = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* display_move:
|
||||
* move the cursor
|
||||
*/
|
||||
void
|
||||
display_move(y, x)
|
||||
int y, x;
|
||||
{
|
||||
mvcur(cur_row, cur_col, y, x);
|
||||
cur_row = y;
|
||||
cur_col = x;
|
||||
}
|
||||
|
||||
/*
|
||||
* display_getyx:
|
||||
* locate the cursor
|
||||
*/
|
||||
void
|
||||
display_getyx(yp, xp)
|
||||
int *yp, *xp;
|
||||
{
|
||||
*xp = cur_col;
|
||||
*yp = cur_row;
|
||||
}
|
||||
|
||||
/*
|
||||
* display_end:
|
||||
* close the display
|
||||
*/
|
||||
void
|
||||
display_end()
|
||||
{
|
||||
tcsetattr(0, TCSADRAIN, &__orig_termios);
|
||||
_puts(VE);
|
||||
_puts(TE);
|
||||
}
|
||||
|
||||
/*
|
||||
* display_atyx:
|
||||
* return a character from the screen
|
||||
*/
|
||||
char
|
||||
display_atyx(y, x)
|
||||
int y, x;
|
||||
{
|
||||
return screen[y][x];
|
||||
}
|
||||
|
||||
/*
|
||||
* display_redraw_screen:
|
||||
* redraw the screen
|
||||
*/
|
||||
void
|
||||
display_redraw_screen()
|
||||
{
|
||||
int i;
|
||||
|
||||
mvcur(cur_row, cur_col, 0, 0);
|
||||
for (i = 0; i < SCREEN_HEIGHT - 1; i++) {
|
||||
fwrite(screen[i], sizeof (char), SCREEN_WIDTH, stdout);
|
||||
if (COLS > SCREEN_WIDTH || (COLS == SCREEN_WIDTH && !AM))
|
||||
putchar('\n');
|
||||
}
|
||||
fwrite(screen[SCREEN_HEIGHT - 1], sizeof (char), SCREEN_WIDTH - 1,
|
||||
stdout);
|
||||
mvcur(SCREEN_HEIGHT - 1, SCREEN_WIDTH - 1, cur_row, cur_col);
|
||||
}
|
||||
|
||||
#else /* CURSES */ /* --------------------------------------------------- */
|
||||
|
||||
#include <curses.h>
|
||||
#include "hunt.h"
|
||||
|
||||
void
|
||||
display_open()
|
||||
{
|
||||
initscr();
|
||||
(void) noecho();
|
||||
(void) cbreak();
|
||||
(void) noecho();
|
||||
(void) cbreak();
|
||||
}
|
||||
|
||||
void
|
||||
@ -364,5 +111,3 @@ display_iskillchar(ch)
|
||||
{
|
||||
return ch == killchar();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user