mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-24 14:22:28 +00:00
Fix the build and introduce some APIs
The tcgetwinsize() and tcsetwinsize() APIs are now available. The printargs.com example also now displays the baud rate.
This commit is contained in:
parent
cac86197cb
commit
1473eafd1a
6 changed files with 120 additions and 2 deletions
28
libc/calls/tcgetwinsize.c
Normal file
28
libc/calls/tcgetwinsize.c
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2023 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/calls/calls.h"
|
||||||
|
#include "libc/calls/ioctl.h"
|
||||||
|
#include "libc/calls/struct/winsize.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets terminal window size.
|
||||||
|
*/
|
||||||
|
int tcgetwinsize(int fd, struct winsize *ws) {
|
||||||
|
return ioctl_tiocgwinsz(fd, ws);
|
||||||
|
}
|
28
libc/calls/tcsetwinsize.c
Normal file
28
libc/calls/tcsetwinsize.c
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2023 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/calls/calls.h"
|
||||||
|
#include "libc/calls/ioctl.h"
|
||||||
|
#include "libc/calls/struct/winsize.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets terminal window size attributes.
|
||||||
|
*/
|
||||||
|
int tcsetwinsize(int fd, const struct winsize *ws) {
|
||||||
|
return ioctl_tiocswinsz(fd, ws);
|
||||||
|
}
|
|
@ -35,6 +35,8 @@ int cfsetospeed(struct termios *, unsigned);
|
||||||
int cfsetispeed(struct termios *, unsigned);
|
int cfsetispeed(struct termios *, unsigned);
|
||||||
uint32_t cfgetospeed(const struct termios *);
|
uint32_t cfgetospeed(const struct termios *);
|
||||||
uint32_t cfgetispeed(const struct termios *);
|
uint32_t cfgetispeed(const struct termios *);
|
||||||
|
int tcsetwinsize(int, const struct winsize *);
|
||||||
|
int tcgetwinsize(int, struct winsize *);
|
||||||
|
|
||||||
/*───────────────────────────────────────────────────────────────────────────│─╗
|
/*───────────────────────────────────────────────────────────────────────────│─╗
|
||||||
│ cosmopolitan § teletypewriter » undiamonding ─╬─│┼
|
│ cosmopolitan § teletypewriter » undiamonding ─╬─│┼
|
||||||
|
|
|
@ -511,6 +511,65 @@ textstartup void __printargs(const char *prologue) {
|
||||||
} else if ((termios.c_cflag & CSIZE) == CS8) {
|
} else if ((termios.c_cflag & CSIZE) == CS8) {
|
||||||
kprintf(" CS8");
|
kprintf(" CS8");
|
||||||
}
|
}
|
||||||
|
if ((termios.c_cflag & CBAUD) == B0) {
|
||||||
|
kprintf(" B0");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B50) {
|
||||||
|
kprintf(" B50");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B75) {
|
||||||
|
kprintf(" B75");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B110) {
|
||||||
|
kprintf(" B110");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B134) {
|
||||||
|
kprintf(" B134");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B150) {
|
||||||
|
kprintf(" B150");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B200) {
|
||||||
|
kprintf(" B200");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B300) {
|
||||||
|
kprintf(" B300");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B600) {
|
||||||
|
kprintf(" B600");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B1200) {
|
||||||
|
kprintf(" B1200");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B1800) {
|
||||||
|
kprintf(" B1800");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B2400) {
|
||||||
|
kprintf(" B2400");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B4800) {
|
||||||
|
kprintf(" B4800");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B9600) {
|
||||||
|
kprintf(" B9600");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B19200) {
|
||||||
|
kprintf(" B19200");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B38400) {
|
||||||
|
kprintf(" B38400");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B57600) {
|
||||||
|
kprintf(" B57600");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B115200) {
|
||||||
|
kprintf(" B115200");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B230400) {
|
||||||
|
kprintf(" B230400");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B500000) {
|
||||||
|
kprintf(" B500000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B576000) {
|
||||||
|
kprintf(" B576000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B1000000) {
|
||||||
|
kprintf(" B1000000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B1152000) {
|
||||||
|
kprintf(" B1152000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B1500000) {
|
||||||
|
kprintf(" B1500000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B2000000) {
|
||||||
|
kprintf(" B2000000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B2500000) {
|
||||||
|
kprintf(" B2500000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B3000000) {
|
||||||
|
kprintf(" B3000000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B3500000) {
|
||||||
|
kprintf(" B3500000");
|
||||||
|
} else if ((termios.c_cflag & CBAUD) == B4000000) {
|
||||||
|
kprintf(" B4000000");
|
||||||
|
}
|
||||||
kprintf("\n");
|
kprintf("\n");
|
||||||
kprintf(prologue);
|
kprintf(prologue);
|
||||||
kprintf(" c_lflag =");
|
kprintf(" c_lflag =");
|
||||||
|
@ -530,8 +589,8 @@ textstartup void __printargs(const char *prologue) {
|
||||||
if (termios.c_lflag & PENDIN) kprintf(" PENDIN");
|
if (termios.c_lflag & PENDIN) kprintf(" PENDIN");
|
||||||
if (termios.c_lflag & XCASE) kprintf(" XCASE");
|
if (termios.c_lflag & XCASE) kprintf(" XCASE");
|
||||||
kprintf("\n");
|
kprintf("\n");
|
||||||
PRINT(" c_ispeed = %u", termios.c_ispeed);
|
PRINT(" c_ispeed = %u", cfgetispeed(&termios));
|
||||||
PRINT(" c_ospeed = %u", termios.c_ospeed);
|
PRINT(" c_ospeed = %u", cfgetospeed(&termios));
|
||||||
PRINT(" c_cc[VMIN] = %d", termios.c_cc[VMIN]);
|
PRINT(" c_cc[VMIN] = %d", termios.c_cc[VMIN]);
|
||||||
PRINT(" c_cc[VTIME] = %d", termios.c_cc[VTIME]);
|
PRINT(" c_cc[VTIME] = %d", termios.c_cc[VTIME]);
|
||||||
PRINT(" c_cc[VINTR] = CTRL-%c", CTRL(termios.c_cc[VINTR]));
|
PRINT(" c_cc[VINTR] = CTRL-%c", CTRL(termios.c_cc[VINTR]));
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"__GNUC_PATCHLEVEL__"
|
"__GNUC_PATCHLEVEL__"
|
||||||
"__GNUC__"
|
"__GNUC__"
|
||||||
"__APPLE__"
|
"__APPLE__"
|
||||||
|
"__HAIKU__"
|
||||||
"__CYGWIN__"
|
"__CYGWIN__"
|
||||||
"__EMSCRIPTEN__"
|
"__EMSCRIPTEN__"
|
||||||
"__ANDROID__"
|
"__ANDROID__"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue