home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 January
/
usenetsourcesnewsgroupsinfomagicjanuary1994.iso
/
sources
/
games
/
volume14
/
mine
/
part01
/
screen.c
< prev
Wrap
C/C++ Source or Header
|
1992-08-31
|
4KB
|
241 lines
#include <curses.h>
#include <term.h>
static char *st_smkx;
static char *st_rmkx;
extern int l_up;
extern char *k_up;
extern int l_dwn;
extern char *k_dwn;
extern int l_lft;
extern char *k_lft;
extern int l_rgt;
extern char *k_rgt;
static char *st_cup;
static char *st_clear;
static char *st_enacs;
static char *st_smacs;
static char *st_rmacs;
static char *st_acsc;
static int l_acsc;
static char *st_bold;
static char *st_rmso;
static int l_bold;
static int l_rmso;
static char *st_civis;
static char *st_cnorm;
static int l_cnorm;
static int l_civis;
char A_UL = '+';
char A_LL = '+';
char A_UR = '+';
char A_LR = '+';
char A_VL = '|';
char A_HL = '-';
int pc();
#define TPUTS(x, y, z) (tputs(y, z, pc), pc(0), pc(0), pc(0))
s_init()
{
int result;
char *t;
int i;
if(setupterm((char *)0, 1, &result) == ERR) {
switch(result) {
case 0:
fprintf(stderr, "Can't find terminal %s\n\r", getenv("TERM"));
myexit(1);
case -1:
fprintf(stderr, "Can't find termininfo database\n\r");
myexit(1);
default:
fprintf(stderr, "Bad terminfo error %d\n\r", result);
myexit(1);
}
}
st_cup = tigetstr("cup");
if(!st_cup) {
fprintf(stderr, "cup not found\n\r");
myexit(1);
}
st_clear = tigetstr("clear");
if(!st_clear) {
fprintf(stderr, "clear not found\n\r");
myexit(1);
}
st_smkx = tigetstr("smkx");
st_rmkx = tigetstr("rmkx");
if(st_smkx)
TPUTS(1, st_smkx, strlen(st_smkx));
st_bold = tigetstr("bold");
if(st_bold) {
l_bold = strlen(st_bold);
st_rmso = tigetstr("rmso");
if(st_rmso) {
l_rmso = strlen(st_rmso);
} else st_bold = 0;
}
st_civis = tigetstr("civis");
if(st_civis) {
l_civis = strlen(st_civis);
st_cnorm = tigetstr("cnorm");
if(st_cnorm) {
l_cnorm = strlen(st_cnorm);
} else st_civis = 0;
}
st_enacs = tigetstr("enacs");
st_rmacs = tigetstr("rmacs");
st_smacs = tigetstr("smacs");
if (t = tigetstr("kcuu1")) {
k_up = t;
l_up = strlen(t);
}
if (t = tigetstr("kcud1")) {
k_dwn = t;
l_dwn = strlen(t);
}
if (t = tigetstr("kcub1")) {
k_lft = t;
l_lft = strlen(t);
}
if (t = tigetstr("kcuf1")) {
k_rgt = t;
l_rgt = strlen(t);
}
if(st_smacs) {
if(st_enacs)
TPUTS(1, st_enacs, strlen(st_enacs));
st_acsc = tigetstr("acsc");
if(st_acsc) {
l_acsc = strlen(st_acsc);
for(i = 0; i < l_acsc; i+= 2) {
switch(st_acsc[i]) {
case 'l':
A_UL = st_acsc[i+1];
break;
case 'm':
A_LL = st_acsc[i+1];
break;
case 'k':
A_UR = st_acsc[i+1];
break;
case 'j':
A_LR = st_acsc[i+1];
break;
case 'q':
A_HL = st_acsc[i+1];
break;
case 'x':
A_VL = st_acsc[i+1];
break;
}
}
}
}
fl();
}
s_term()
{
if(st_rmkx)
TPUTS(1, st_rmkx, strlen(st_rmkx));
fl();
}
static unsigned char buf[1024];
int pbuf;
static pc(c)
char c;
{
buf[pbuf++] = c;
}
static fl()
{
write(1, buf, pbuf);
pbuf = 0;
}
s_pr(x, y, s, v1, v2)
int x;
int y;
char *s;
int v1;
int v2;
{
char *p = tgoto(st_cup, x, y);
TPUTS(1, p, strlen(p));
pbuf += sprintf(buf+pbuf, s, v1, v2);
fl();
}
s_pc(x, y, c)
int x;
int y;
char c;
{
char *p = tgoto(st_cup, x, y);
TPUTS(1, p, strlen(p));
if(c != 0)
pc(c);
fl();
}
s_clear()
{
TPUTS(1, st_clear, strlen(st_clear));
fl();
}
s_box(x, y, l, h)
int x,y;
int l,h;
{
int i;
if(st_smacs)
TPUTS(1, st_smacs, strlen(st_smacs));
s_pc(x, y, A_UL);
s_pc(x + l, y, A_UR);
s_pc(x, y + h, A_LL);
s_pc(x + l, y + h, A_LR);
for(i = 1; i < l; i++) {
s_pc(x+i, y, A_HL);
s_pc(x+i, y+h, A_HL);
}
for(i = 1; i < h; i++) {
s_pc(x, y+i, A_VL);
s_pc(x+l, y+i, A_VL);
}
if(st_rmacs)
TPUTS(1, st_rmacs, strlen(st_rmacs));
}
s_bold()
{
if(st_bold)
TPUTS(1, st_bold, l_bold);
}
s_rmso()
{
if(st_rmso)
TPUTS(1, st_rmso, l_rmso);
}
s_civis()
{
if(st_civis)
TPUTS(1, st_civis, l_civis);
}
s_cnorm()
{
if(st_cnorm)
TPUTS(1, st_cnorm, l_cnorm);
}