11 #define SHELL "/bin/bash"
20 static void execshell(void)
22 if ((pid
= forkpty(&fd
, NULL
, NULL
, NULL
)) == -1)
23 xerror("failed to create a pty");
25 setenv("TERM", "linux", 1);
26 execl(SHELL
, SHELL
, NULL
);
31 static void setsize(void)
34 size
.ws_col
= pad_cols();
35 size
.ws_row
= pad_rows();
38 ioctl(fd
, TIOCSWINSZ
, &size
);
41 static int readpty(void)
44 if (read(fd
, &b
, 1) > 0)
49 static int readchar(void)
52 if (read(STDIN_FILENO
, &b
, 1) > 0)
57 static void writechar(int c
)
59 unsigned char b
= (unsigned char) c
;
63 static void writepty(int c
)
68 static void setmode(int m
)
74 if (m
>= 30 && m
<= 37)
76 if (m
>= 40 && m
<= 47)
80 static void kill_line(void)
83 for (i
= pad_col(); i
< pad_cols(); i
++)
84 pad_put('\0', pad_row(), i
);
85 pad_move(pad_row(), pad_col());
88 static void escape_bracket(void)
90 int args
[MAXESCARGS
] = {0};
94 for (i
= 0; i
< ARRAY_SIZE(args
) && !isalpha(c
); i
++) {
96 while (isdigit((c
= readpty())))
97 arg
= arg
* 10 + (c
- '0');
103 pad_move(MAX(0, args
[0] - 1), MAX(0, args
[1] - 1));
110 pad_move(pad_row() - MAX(1, args
[0]), pad_col());
113 pad_move(pad_row() + MAX(1, args
[0]), pad_col());
116 pad_move(pad_row(), pad_col() + MAX(1, args
[0]));
119 pad_move(pad_row(), pad_col() - MAX(1, args
[0]));
125 for (i
= 0; i
< n
; i
++)
131 printf("unknown escape bracket char <%c>\n", c
);
135 static void escape(void)
141 printf("unknown escape char <%c>\n", c
);
148 static void shcmds(void)
157 static void directkey(void)
163 static void mainloop(void)
165 struct pollfd ufds
[2];
167 struct termios oldtermios
, termios
;
168 tcgetattr(STDIN_FILENO
, &termios
);
169 oldtermios
= termios
;
171 tcsetattr(STDIN_FILENO
, TCSAFLUSH
, &termios
);
172 ufds
[0].fd
= STDIN_FILENO
;
173 ufds
[0].events
= POLLIN
;
175 ufds
[1].events
= POLLIN
;
176 while ((rv
= poll(ufds
, 2, 1000)) != -1) {
177 if ((ufds
[0].revents
| ufds
[1].revents
) &
178 (POLLHUP
| POLLERR
| POLLNVAL
))
180 if (ufds
[0].revents
& POLLIN
)
182 if (ufds
[1].revents
& POLLIN
)
185 tcsetattr(STDIN_FILENO
, 0, &oldtermios
);