4 * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
9 static char rcsid[] = "$Id: raw.c,v 1.10 2011/02/28 18:10:43 james Exp $";
13 * Revision 1.10 2011/02/28 18:10:43 james
14 * *** empty log message ***
16 * Revision 1.9 2011/02/06 16:51:22 james
17 * *** empty log message ***
19 * Revision 1.8 2008/03/10 11:49:33 james
20 * *** empty log message ***
22 * Revision 1.7 2008/03/07 13:16:02 james
23 * *** empty log message ***
25 * Revision 1.6 2008/03/07 12:37:04 james
26 * *** empty log message ***
28 * Revision 1.5 2008/03/06 21:34:09 james
29 * *** empty log message ***
31 * Revision 1.4 2008/03/06 21:33:02 james
32 * *** empty log message ***
34 * Revision 1.3 2008/03/06 17:21:41 james
35 * *** empty log message ***
37 * Revision 1.2 2008/03/06 16:49:39 james
38 * *** empty log message ***
40 * Revision 1.1 2008/03/06 16:49:05 james
41 * *** empty log message ***
60 rx_raw_rx (RX * _r, int ch)
62 RX_Raw *r = (RX_Raw *) _r;
65 set_blocking (r->wfd);
66 ret = (write (r->wfd, &c, 1) == 1) ? 0 : -1;
76 rx_new_raw (int rfd, int wfd)
80 ret = xmalloc (sizeof (RX_Raw));
81 memset (ret, 0, sizeof (RX_Raw));
84 ret->close = rx_raw_close;
92 static int my_wrap_read (int fd, void *buf, int len)
96 red = read (fd, buf, len);
102 if ((red < 0) && (errno == EAGAIN))
111 raw_terminal_read (TTY * _t, void *buf, int len)
113 RAW_TERMINAL *t = (RAW_TERMINAL *) _t;
116 set_nonblocking (t->rfd);
120 red = my_wrap_read (t->rfd, buf, len);
122 return done ? done:-1;
138 raw_terminal_write (TTY * _t, void *buf, int len)
141 RAW_TERMINAL *t = (RAW_TERMINAL *) _t;
143 set_blocking (t->wfd);
147 writ = wrap_write (t->wfd, buf, len);
167 raw_terminal_close (TTY * _t)
169 RAW_TERMINAL *t = (RAW_TERMINAL *) _t;
170 set_blocking (t->rfd);
171 set_blocking (t->wfd);
178 terminal_new_raw (int rfd, int wfd)
182 t = (RAW_TERMINAL *) malloc (sizeof (RAW_TERMINAL));
183 memset (t, 0, sizeof (t));
185 strcpy (t->name, "raw");
189 set_nonblocking (rfd);
190 set_nonblocking (wfd);
192 t->recv = raw_terminal_read;
193 // t->xmit = raw_terminal_write;
194 t->close = raw_terminal_close;
201 ansi_raw_one_shot (ANSI * a, CRT * c)
206 ansi_raw_key (ANSI * a, Context * c, int key)
208 return c->k->key (c->k, c, key);
212 ansi_raw_parse (ANSI * a, Context * c, uint8_t * buf, int red)
215 ansi_raw_key (a, c, *(buf++));
219 ansi_raw_dispatch (ANSI * a, Context * c)
227 red = a->terminal->recv (a->terminal, buf, sizeof (buf));
231 ansi_raw_parse (a, c, buf, red);
236 ansi_raw_free (ANSI * a)
242 ansi_new_raw (int rfd, int wfd)
246 ret = malloc (sizeof (ANSI));
247 memset (ret, 0, sizeof (ANSI));
249 ret->terminal = terminal_new_raw (rfd, wfd);
250 ret->dispatch = ansi_raw_dispatch;
251 ret->close = ansi_raw_free;