From 926d13ce558b93eaaa080f2699234a9133654ef2 Mon Sep 17 00:00:00 2001 From: d6 Date: Sat, 4 Feb 2023 16:32:59 -0500 Subject: [PATCH] fix term.c --- term.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/term.c b/term.c index ba44732..18dffb0 100644 --- a/term.c +++ b/term.c @@ -8,26 +8,23 @@ int main(int argc, char **argv) { printf("usage: %s ROM\n", argv[0]); return 1; } - char *rom = argv[1]; - int fdm = -1; - setenv("TERM", "ansi", 1); - pid_t pid = forkpty(&fdm, NULL, NULL, NULL); + char *rom = argv[1]; // find term.rom + int fdm = -1; // allocate file descriptor - if (pid < 0) { - // failure + // allocate a pty, fork, inititialize file descriptor + pid_t pid = forkpty(&fdm, NULL, NULL, NULL); + + if (pid < 0) { // failure printf("fork failed"); return 1; - } else if (pid == 0) { - // child - setsid(); - execlp("bash", "bash"); - } else { - // parent - // rows, cols, xpixels, ypixels (little endian) - char argp[] = {23, 0, 80, 0, 8, 0, 12, 0}; - ioctl(fdm, TIOCSWINSZ, argp); - dup2(fdm, 0); - dup2(fdm, 1); - execlp("uxnemu", "uxnemu", rom); + } else if (pid == 0) { // child + setenv("TERM", "ansi", 1); + execlp("bash", "bash", NULL); // exec bash + } else { // parent + struct winsize ws = {23, 80, 8, 12}; // rows, cols, xps, ypx + ioctl(fdm, TIOCSWINSZ, &ws); // set term window size + dup2(fdm, 0); // use fdm for stdin + dup2(fdm, 1); // use fdm for stdout + execlp("uxnemu", "uxnemu", rom, NULL); // exec uxnemu } }