9 #define SHELL "/bin/bash"
11 #define CTRLKEY(x) ((x) - 96)
13 static struct term_state terms
[TAGS
* 2];
14 static int cterm
; /* current tag */
15 static int lterm
; /* last tag */
18 static int readchar(void)
21 if (read(STDIN_FILENO
, &b
, 1) > 0)
26 static void showterm(int n
)
28 if (lterm
% TAGS
!= cterm
% TAGS
)
30 term_save(&terms
[cterm
]);
32 term_load(&terms
[cterm
]);
35 static void directkey(void)
39 switch ((c
= readchar())) {
46 showterm((cterm
+ TAGS
) % ARRAY_SIZE(terms
));
61 static void mainloop(void)
63 struct pollfd ufds
[2];
65 struct termios oldtermios
, termios
;
66 tcgetattr(STDIN_FILENO
, &termios
);
69 tcsetattr(STDIN_FILENO
, TCSAFLUSH
, &termios
);
70 memset(ufds
, 0, sizeof(ufds
));
71 ufds
[0].fd
= STDIN_FILENO
;
72 ufds
[0].events
= POLLIN
;
73 ufds
[1].fd
= term_fd();
74 ufds
[1].events
= POLLIN
;
75 while (!exitit
&& (rv
= poll(ufds
, term_fd() ? 2 : 1, 1000)) != -1) {
76 if (ufds
[0].revents
& (POLLHUP
| POLLERR
| POLLNVAL
))
78 if (term_fd() && ufds
[1].revents
& (POLLHUP
| POLLERR
| POLLNVAL
))
80 if (term_fd() && ufds
[1].revents
& POLLIN
)
82 if (ufds
[0].revents
& POLLIN
)
84 ufds
[1].fd
= term_fd();
86 tcsetattr(STDIN_FILENO
, 0, &oldtermios
);
91 char *hide
= "\x1b[?25l";
92 char *clear
= "\x1b[2J\x1b[H";
93 char *show
= "\x1b[?25h";
94 write(STDOUT_FILENO
, hide
, strlen(hide
));
95 write(STDOUT_FILENO
, clear
, strlen(clear
));
100 write(STDOUT_FILENO
, clear
, strlen(clear
));
101 write(STDOUT_FILENO
, show
, strlen(show
));