2 * Copyright (C) 2008 Diego Hernan Borghetti.
18 static struct termios otermios
; /* original terminal characteristics */
19 static struct termios ntermios
; /* characteristics to use inside */
21 E_Term
*e_term_open(void)
27 tr
= (E_Term
*)malloc(sizeof(E_Term
));
33 tr
->name
= getenv("TERM");
35 printf("Shell variable TERM not defined!");
39 if (strcmp(tr
->name
, "vt100") && strcmp(tr
->name
, "linux") &&
40 strcmp (tr
->name
, "xterm") && strcmp(tr
->name
, "ansi") &&
41 strcmp (tr
->name
, "xterm-256color")) {
42 printf("Invalid terminal type: [%s]", tr
->name
);
47 tcgetattr(0, &otermios
);
50 ntermios
.c_iflag
&= ~(IGNBRK
| BRKINT
| IGNPAR
| PARMRK
51 | INPCK
| INLCR
| IGNCR
| ICRNL
| IXON
);
53 ntermios
.c_oflag
&= ~(OPOST
| ONLCR
| OLCUC
| OCRNL
| ONOCR
| ONLRET
);
55 ntermios
.c_lflag
&= ~(ISIG
| ICANON
| XCASE
| ECHO
| ECHOE
| ECHOK
56 | ECHONL
| NOFLSH
| TOSTOP
| ECHOCTL
|
57 ECHOPRT
| ECHOKE
| FLUSHO
| PENDIN
| IEXTEN
);
59 ntermios
.c_cc
[VMIN
] = 1;
60 ntermios
.c_cc
[VTIME
] = 0;
61 tcsetattr(0, TCSADRAIN
, &ntermios
);
63 /* init default entrys. */
66 tr
->fgcolor
= E_TR_WHITE
;
67 tr
->bgcolor
= E_TR_BLACK
;
69 if (ioctl(0, TIOCGWINSZ
, &ws
)) {
85 tr
->nrow
= ws
.ws_row
-1;
92 void e_term_close(E_Term
*tr
)
94 e_term_fgcol(tr
, E_TR_WHITE
);
95 e_term_bgcol(tr
, E_TR_BLACK
);
97 tcsetattr(0, TCSADRAIN
, &otermios
);
100 void e_term_putc(int c
)
105 void e_term_flush(void)
109 status
= fflush(stdout
);
110 while (status
< 0 && errno
== EAGAIN
) {
112 status
= fflush(stdout
);
118 int e_term_getc(void)
120 return(255 & fgetc(stdin
));
123 void e_term_parm(int n
)
131 e_term_putc((r
% 10) + '0');
133 e_term_putc((q
% 10) + '0');
135 e_term_putc((n
% 10) + '0');
138 void e_term_fgcol(E_Term
*tr
, int color
)
140 if (color
!= tr
->fgcolor
) {
141 e_term_putc(E_TR_ESC
);
143 e_term_parm(color
+ 30);
149 void e_term_bgcol(E_Term
*tr
, int color
)
151 if (color
!= tr
->bgcolor
) {
152 e_term_putc(E_TR_ESC
);
154 e_term_parm(color
+ 40);
160 void e_term_move(int row
, int col
)
162 e_term_putc(E_TR_ESC
);
164 e_term_parm(row
+ 1);
166 e_term_parm(col
+ 1);
170 void e_term_eeol(void)
172 e_term_putc(E_TR_ESC
);
177 void e_term_eeop(E_Term
*tr
)
179 e_term_fgcol(tr
, tr
->fgcolor
);
180 e_term_bgcol(tr
, tr
->bgcolor
);
181 e_term_putc(E_TR_ESC
);
186 void e_term_rev(E_Term
*tr
, int state
)
190 e_term_putc(E_TR_ESC
);
192 e_term_putc(state
? '7' : '0');
200 e_term_fgcol(tr
, ftmp
);
201 e_term_bgcol(tr
, btmp
);
205 void e_term_beep ( void )
207 e_term_putc(E_TR_BEL
);