aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorjames <>2008-02-14 10:34:30 +0000
committerjames <>2008-02-14 10:34:30 +0000
commit77c86f1e81b90ad59726ee3704a479f07c34786b (patch)
tree7b4331a93ae2a0f7188c8086eea7d32a58a2960a /src
parentbc6a29d06c22bdcada4cb18d8401e5d37f46fd36 (diff)
downloadsympathy-77c86f1e81b90ad59726ee3704a479f07c34786b.tar.gz
sympathy-77c86f1e81b90ad59726ee3704a479f07c34786b.tar.bz2
sympathy-77c86f1e81b90ad59726ee3704a479f07c34786b.zip
*** empty log message ***
Diffstat (limited to 'src')
-rw-r--r--src/prototypes.h2
-rw-r--r--src/tty.c189
-rw-r--r--src/tty.h9
3 files changed, 200 insertions, 0 deletions
diff --git a/src/prototypes.h b/src/prototypes.h
index 28cffac..3fca7af 100644
--- a/src/prototypes.h
+++ b/src/prototypes.h
@@ -73,6 +73,7 @@ extern VT102 *vt102_new(void);
extern void vt102_free(VT102 *v);
/* tty.c */
extern void tty_pre_select(TTY *t, fd_set *rfds, fd_set *wfds);
+extern int tty_get_status(TTY *t, TTY_Status *s);
/* keydis.c */
extern KeyDis *keydis_vt102_new(Context *c);
extern KeyDis *keydis_ipc_new(Socket *s);
@@ -113,6 +114,7 @@ extern int ipc_msg_send_history(Socket *s, History_ent *l);
extern int ipc_msg_send_vt102(Socket *s, VT102 *v);
extern int ipc_msg_send_key(Socket *s, int key);
extern int ipc_msg_send_term(Socket *s, void *buf, int len);
+extern int ipc_msg_send_status(Socket *s, char *buf);
/* slide.c */
extern void slide_free(Slide *s);
extern void slide_consume(Slide *s, int n);
diff --git a/src/tty.c b/src/tty.c
index ca4936b..fb60246 100644
--- a/src/tty.c
+++ b/src/tty.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.7 2008/02/14 10:34:30 james
+ * *** empty log message ***
+ *
* Revision 1.6 2008/02/13 16:59:34 james
* *** empty log message ***
*
@@ -27,12 +30,198 @@ static char rcsid[] = "$Id$";
#include "project.h"
+static int
+speed_t_to_baud (speed_t s)
+{
+ switch (s)
+ {
+#ifdef B0
+ case B0:
+ return 0;
+#endif
+#ifdef B50
+ case B50:
+ return 50;
+#endif
+#ifdef B75
+ case B75:
+ return 75;
+#endif
+#ifdef B110
+ case B110:
+ return 110;
+#endif
+#ifdef B134
+ case B134:
+ return 134;
+#endif
+#ifdef B150
+ case B150:
+ return 150;
+#endif
+#ifdef B200
+ case B200:
+ return 200;
+#endif
+#ifdef B300
+ case B300:
+ return 300;
+#endif
+#ifdef B600
+ case B600:
+ return 600;
+#endif
+#ifdef B1200
+ case B1200:
+ return 1200;
+#endif
+#ifdef B1800
+ case B1800:
+ return 1800;
+#endif
+#ifdef B2400
+ case B2400:
+ return 2400;
+#endif
+#ifdef B4800
+ case B4800:
+ return 4800;
+#endif
+#ifdef B9600
+ case B9600:
+ return 9600;
+#endif
+#ifdef B19200
+ case B19200:
+ return 19200;
+#endif
+#ifdef B38400
+ case B38400:
+ return 38400;
+#endif
+#ifdef B57600
+ case B57600:
+ return 57600;
+#endif
+#ifdef B115200
+ case B115200:
+ return 115200;
+#endif
+#ifdef B230400
+ case B230400:
+ return 230400;
+#endif
+ }
+
+ return -1;
+}
+
+static speed_t
+baud_to_speed_t (int baud)
+{
+ switch (baud)
+ {
+#ifdef B0
+ case 0:
+ return B0;
+#endif
+#ifdef B50
+ case 50:
+ return B50;
+#endif
+#ifdef B75
+ case 75:
+ return B75;
+#endif
+#ifdef B110
+ case 110:
+ return B110;
+#endif
+#ifdef B134
+ case 134:
+ return B134;
+#endif
+#ifdef B150
+ case 150:
+ return B150;
+#endif
+#ifdef B200
+ case 200:
+ return B200;
+#endif
+#ifdef B300
+ case 300:
+ return B300;
+#endif
+#ifdef B600
+ case 600:
+ return B600;
+#endif
+#ifdef B1200
+ case 1200:
+ return B1200;
+#endif
+#ifdef B1800
+ case 1800:
+ return B1800;
+#endif
+#ifdef B2400
+ case 2400:
+ return B2400;
+#endif
+#ifdef B4800
+ case 4800:
+ return B4800;
+#endif
+#ifdef B9600
+ case 9600:
+ return B9600;
+#endif
+#ifdef B19200
+ case 19200:
+ return B19200;
+#endif
+#ifdef B38400
+ case 38400:
+ return B38400;
+#endif
+#ifdef B57600
+ case 57600:
+ return B57600;
+#endif
+#ifdef B115200
+ case 115200:
+ return B115200;
+#endif
+#ifdef B230400
+ case 230400:
+ return B230400;
+#endif
+ }
+ return -1;
+}
+
void
tty_pre_select (TTY * t, fd_set * rfds, fd_set * wfds)
{
FD_SET (t->rfd, rfds);
}
+int
+tty_get_status (TTY * t, TTY_Status * s)
+{
+
+ s->lines=0;
+ ioctl (t->rfd, TIOCMGET, &s->lines);
+
+ if (tcgetattr (t->rfd, &s->termios))
+ return -1;
+
+ s->baud=speed_t_to_baud(cfgetispeed(&s->termios));
+
+ return 0;
+}
+
#if 0
int
tty_post_select (Context * c, fd_set * rfds, fd_set * wfds)
diff --git a/src/tty.h b/src/tty.h
index 91b14c6..5286c28 100644
--- a/src/tty.h
+++ b/src/tty.h
@@ -12,6 +12,9 @@
/*
* $Log$
+ * Revision 1.6 2008/02/14 10:34:30 james
+ * *** empty log message ***
+ *
* Revision 1.5 2008/02/13 09:12:21 james
* *** empty log message ***
*
@@ -46,4 +49,10 @@ typedef struct TTY_struct
TTY_SIGNATURE;
} TTY;
+typedef struct {
+ int lines;
+ struct termios termios;
+ int baud;
+} TTY_Status;
+
#endif /* __TTY_H__ */