Introduce file_descriptors struct
This commit is contained in:
parent
58d77943f6
commit
2eeac80444
48
bt.c
48
bt.c
@ -18,29 +18,30 @@ typedef struct scrollback {
|
|||||||
char *buf;
|
char *buf;
|
||||||
} scrollback;
|
} scrollback;
|
||||||
|
|
||||||
// PTY
|
typedef struct file_descriptors {
|
||||||
int master;
|
int master;
|
||||||
int slave;
|
int child;
|
||||||
|
} file_descriptors;
|
||||||
|
|
||||||
void spawn(void) {
|
void spawn(file_descriptors *fds) {
|
||||||
openpty(&master, &slave, NULL, NULL, NULL);
|
openpty(&fds->master, &fds->child, NULL, NULL, NULL);
|
||||||
pid_t p = fork();
|
pid_t p = fork();
|
||||||
if (p == 0) {
|
if (p == 0) {
|
||||||
close(master);
|
close(fds->master);
|
||||||
|
|
||||||
setsid();
|
setsid();
|
||||||
ioctl(slave, TIOCSCTTY, NULL);
|
ioctl(fds->child, TIOCSCTTY, NULL);
|
||||||
dup2(slave, 0);
|
dup2(fds->child, 0);
|
||||||
dup2(slave, 1);
|
dup2(fds->child, 1);
|
||||||
dup2(slave, 2);
|
dup2(fds->child, 2);
|
||||||
|
|
||||||
execle("/bin/dash", "-/bin/dash", (char *)NULL, (char *[]){ "TERM=dumb", NULL });
|
execle("/bin/dash", "-/bin/dash", (char *)NULL, (char *[]){ "TERM=dumb", NULL });
|
||||||
} else {
|
} else {
|
||||||
close(slave);
|
close(fds->child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float fontsize = 12;
|
static float fontsize = 12;
|
||||||
|
|
||||||
Font *load_font() {
|
Font *load_font() {
|
||||||
unsigned int file_size = 0;
|
unsigned int file_size = 0;
|
||||||
@ -57,10 +58,10 @@ Font *load_font() {
|
|||||||
return fontDefault;
|
return fontDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_pty(scrollback *sb) {
|
int read_pty(file_descriptors *fds, scrollback *sb) {
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
char readbuf[256];
|
char readbuf[256];
|
||||||
switch (nread = read(master, readbuf, sizeof(readbuf))) {
|
switch (nread = read(fds->master, readbuf, sizeof(readbuf))) {
|
||||||
case -1:
|
case -1:
|
||||||
if (errno == EAGAIN) {
|
if (errno == EAGAIN) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -85,9 +86,10 @@ int read_pty(scrollback *sb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
spawn();
|
|
||||||
|
|
||||||
scrollback sb = { 0 };
|
scrollback sb = { 0 };
|
||||||
|
file_descriptors fds = { 0 };
|
||||||
|
|
||||||
|
spawn(&fds);
|
||||||
|
|
||||||
const int screenWidth = 800;
|
const int screenWidth = 800;
|
||||||
const int screenHeight = 550;
|
const int screenHeight = 550;
|
||||||
@ -105,12 +107,12 @@ int main(void) {
|
|||||||
char buf[128];
|
char buf[128];
|
||||||
int buf_len = 0;
|
int buf_len = 0;
|
||||||
|
|
||||||
int flags = fcntl(master, F_GETFL);
|
int flags = fcntl(fds.master, F_GETFL);
|
||||||
flags |= O_NONBLOCK;
|
flags |= O_NONBLOCK;
|
||||||
fcntl(master, F_SETFL, flags);
|
fcntl(fds.master, F_SETFL, flags);
|
||||||
fd_set rset;
|
fd_set rset;
|
||||||
FD_ZERO(&rset);
|
FD_ZERO(&rset);
|
||||||
FD_SET(master, &rset);
|
FD_SET(fds.master, &rset);
|
||||||
|
|
||||||
sb.ypos = 0;
|
sb.ypos = 0;
|
||||||
|
|
||||||
@ -152,8 +154,8 @@ int main(void) {
|
|||||||
if (IsKeyPressed(KEY_ENTER)) {
|
if (IsKeyPressed(KEY_ENTER)) {
|
||||||
sb.length -= buf_len;
|
sb.length -= buf_len;
|
||||||
sb.buf[sb.length] = '\0';
|
sb.buf[sb.length] = '\0';
|
||||||
write(master, buf, buf_len);
|
write(fds.master, buf, buf_len);
|
||||||
write(master, "\r", 1);
|
write(fds.master, "\r", 1);
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
buf_len = 0;
|
buf_len = 0;
|
||||||
new_char = true;
|
new_char = true;
|
||||||
@ -171,7 +173,7 @@ int main(void) {
|
|||||||
// Drawing
|
// Drawing
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
{
|
{
|
||||||
int nread = read_pty(&sb);
|
int nread = read_pty(&fds, &sb);
|
||||||
if (nread > 0) {
|
if (nread > 0) {
|
||||||
sb.length += nread;
|
sb.length += nread;
|
||||||
new_read = true;
|
new_read = true;
|
||||||
@ -201,6 +203,6 @@ int main(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
free(sb.buf);
|
free(sb.buf);
|
||||||
close(master);
|
close(fds.master);
|
||||||
CloseWindow();
|
CloseWindow();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user