Blame


1 be22ae2d 2004-03-26 devnull #include <u.h>
2 8ad51794 2004-03-25 devnull #include <termios.h>
3 4dcd9af2 2004-04-15 devnull #include <stropts.h>
4 268d64df 2005-03-15 devnull #include <signal.h>
5 be22ae2d 2004-03-26 devnull #include <libc.h>
6 be22ae2d 2004-03-26 devnull #include "term.h"
7 e642beb5 2003-11-25 devnull
8 a2705f20 2004-04-16 devnull #define debug 0
9 a2705f20 2004-04-16 devnull
10 e642beb5 2003-11-25 devnull int
11 e642beb5 2003-11-25 devnull getpts(int fd[], char *slave)
12 e642beb5 2003-11-25 devnull {
13 dc305d03 2005-02-08 devnull void (*f)(int);
14 dc305d03 2005-02-08 devnull int r;
15 dc305d03 2005-02-08 devnull
16 e642beb5 2003-11-25 devnull fd[1] = open("/dev/ptmx", ORDWR);
17 dc305d03 2005-02-08 devnull f = signal(SIGCLD, SIG_DFL);
18 dc305d03 2005-02-08 devnull r = grantpt(fd[1]);
19 dc305d03 2005-02-08 devnull signal(SIGCLD, f);
20 dc305d03 2005-02-08 devnull if(r < 0 || unlockpt(fd[1]) < 0)
21 e642beb5 2003-11-25 devnull return -1;
22 e642beb5 2003-11-25 devnull fchmod(fd[1], 0622);
23 4dcd9af2 2004-04-15 devnull
24 e642beb5 2003-11-25 devnull strcpy(slave, ptsname(fd[1]));
25 4dcd9af2 2004-04-15 devnull
26 4dcd9af2 2004-04-15 devnull fd[0] = open(slave, ORDWR);
27 4dcd9af2 2004-04-15 devnull if(fd[0] < 0)
28 4dcd9af2 2004-04-15 devnull sysfatal("open %s: %r\n", slave);
29 4dcd9af2 2004-04-15 devnull
30 4dcd9af2 2004-04-15 devnull /* set up the right streams modules for a tty */
31 4dcd9af2 2004-04-15 devnull ioctl(fd[0], I_PUSH, "ptem"); /* push ptem */
32 4dcd9af2 2004-04-15 devnull ioctl(fd[0], I_PUSH, "ldterm"); /* push ldterm */
33 4dcd9af2 2004-04-15 devnull
34 e642beb5 2003-11-25 devnull return 0;
35 e642beb5 2003-11-25 devnull }
36 8ad51794 2004-03-25 devnull
37 be22ae2d 2004-03-26 devnull int
38 be22ae2d 2004-03-26 devnull childpty(int fd[], char *slave)
39 be22ae2d 2004-03-26 devnull {
40 be22ae2d 2004-03-26 devnull int sfd;
41 be22ae2d 2004-03-26 devnull
42 be22ae2d 2004-03-26 devnull close(fd[1]);
43 be22ae2d 2004-03-26 devnull setsid();
44 be22ae2d 2004-03-26 devnull sfd = open(slave, ORDWR);
45 be22ae2d 2004-03-26 devnull if(sfd < 0)
46 be22ae2d 2004-03-26 devnull sysfatal("open %s: %r\n", slave);
47 be22ae2d 2004-03-26 devnull return sfd;
48 be22ae2d 2004-03-26 devnull }
49 be22ae2d 2004-03-26 devnull
50 8ad51794 2004-03-25 devnull struct winsize ows;
51 8ad51794 2004-03-25 devnull
52 8ad51794 2004-03-25 devnull void
53 8ad51794 2004-03-25 devnull updatewinsize(int row, int col, int dx, int dy)
54 8ad51794 2004-03-25 devnull {
55 8ad51794 2004-03-25 devnull struct winsize ws;
56 8ad51794 2004-03-25 devnull
57 8ad51794 2004-03-25 devnull ws.ws_row = row;
58 8ad51794 2004-03-25 devnull ws.ws_col = col;
59 8ad51794 2004-03-25 devnull ws.ws_xpixel = dx;
60 8ad51794 2004-03-25 devnull ws.ws_ypixel = dy;
61 8ad51794 2004-03-25 devnull if(ws.ws_row != ows.ws_row || ws.ws_col != ows.ws_col)
62 be22ae2d 2004-03-26 devnull if(ioctl(rcfd, TIOCSWINSZ, &ws) < 0)
63 4dcd9af2 2004-04-15 devnull fprint(2, "ioctl TIOCSWINSZ: %r\n");
64 8ad51794 2004-03-25 devnull ows = ws;
65 8ad51794 2004-03-25 devnull }
66 8ad51794 2004-03-25 devnull
67 4dcd9af2 2004-04-15 devnull static struct termios ttmode;
68 4dcd9af2 2004-04-15 devnull
69 4dcd9af2 2004-04-15 devnull int
70 a0f1e21f 2004-04-20 devnull isecho(int fd)
71 4dcd9af2 2004-04-15 devnull {
72 a2705f20 2004-04-16 devnull if(tcgetattr(fd, &ttmode) < 0)
73 a2705f20 2004-04-16 devnull fprint(2, "tcgetattr: %r\n");
74 a2705f20 2004-04-16 devnull if(debug) fprint(2, "israw %c%c\n",
75 a2705f20 2004-04-16 devnull ttmode.c_lflag&ICANON ? 'c' : '-',
76 a2705f20 2004-04-16 devnull ttmode.c_lflag&ECHO ? 'e' : '-');
77 30968c3f 2005-01-04 devnull return (ttmode.c_lflag&ICANON && ttmode.c_lflag&ECHO);
78 4dcd9af2 2004-04-15 devnull }
79 4dcd9af2 2004-04-15 devnull
80 4dcd9af2 2004-04-15 devnull int
81 38897b20 2005-08-11 devnull getintr(int fd)
82 38897b20 2005-08-11 devnull {
83 92c5d29e 2005-09-21 devnull if(tcgetattr(fd, &ttmode) < 0)
84 38897b20 2005-08-11 devnull return 0x7F;
85 38897b20 2005-08-11 devnull return ttmode.c_cc[VINTR];
86 38897b20 2005-08-11 devnull }