chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / testtty.c
1 /*
2  * testtty.c:
3  *
4  * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
5  * All rights reserved.
6  *
7  */
8
9 static char rcsid[] = "$Id$";
10
11 /*
12  * $Log$
13  * Revision 1.3  2008/02/06 17:53:28  james
14  * *** empty log message ***
15  *
16  * Revision 1.2  2008/02/04 02:05:06  james
17  * *** empty log message ***
18  *
19  * Revision 1.1  2008/02/04 01:32:39  james
20  * *** empty log message ***
21  *
22  */
23
24 #include "project.h"
25
26 static void
27 default_termios (struct termios *termios)
28 {
29
30   memset (termios, 0, sizeof (termios));
31
32   termios->c_iflag = ICRNL | IXON;
33   termios->c_oflag = OPOST | ONLCR | NL0 | CR0 | TAB0 | BS0 | VT0 | FF0;
34   termios->c_lflag =
35     ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE;
36
37   termios->c_cc[VINTR] = 003;
38   termios->c_cc[VQUIT] = 034;
39   termios->c_cc[VERASE] = 0177;
40   termios->c_cc[VKILL] = 025;
41   termios->c_cc[VEOF] = 004;
42   termios->c_cc[VEOL] = 0;
43   termios->c_cc[VEOL2] = 0;
44   termios->c_cc[VSTART] = 021;
45   termios->c_cc[VSTOP] = 023;
46   termios->c_cc[VSUSP] = 032;
47   termios->c_cc[VLNEXT] = 026;
48   termios->c_cc[VWERASE] = 027;
49   termios->c_cc[VREPRINT] = 022;
50   termios->c_cc[VDISCARD] = 017;
51
52   termios->c_cflag = CS8 | CREAD | CLOCAL;
53
54   cfsetispeed (termios, B9600);
55   cfsetospeed (termios, B9600);
56 }
57
58
59 int
60 open_fd_to_bash (void)          /*thump */
61 {
62   pid_t child;
63   int fd;
64   struct winsize winsize = { 0 };
65   struct termios termios;
66
67   default_termios (&termios);
68
69   winsize.ws_row = VT102_ROWS;
70   winsize.ws_col = VT102_COLS;
71
72   child = forkpty (&fd, NULL, &termios, &winsize);
73
74   switch (child)
75     {
76     case -1:                   /*boo hiss */
77       return -1;
78     case 0:                    /*waaah */
79       setenv ("TERM", "vt102", 1);
80       execl ("/bin/sh", "-", (char *) 0);
81       _exit (-1);
82     }
83
84   return fd;
85 }