fix term.c
This commit is contained in:
parent
5f1e9f561e
commit
926d13ce55
33
term.c
33
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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue