diff options
author | John Ankarstr\xf6m <john@ankarstrom.se> | 2021-05-31 20:54:54 +0200 |
---|---|---|
committer | John Ankarstr\xf6m <john@ankarstrom.se> | 2021-05-31 20:55:20 +0200 |
commit | df4c240e8eb30e520469fdaee2042e04adc854e3 (patch) | |
tree | b1fd611751a5449d7421c0df8a4de1c2c5112972 /da.c | |
parent | 8cc2b45caabc4d15d15193acdeda90246e5f3aba (diff) | |
download | safetitle-df4c240e8eb30e520469fdaee2042e04adc854e3.tar.gz |
Add 'da' utility
Diffstat (limited to 'da.c')
-rw-r--r-- | da.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -0,0 +1,43 @@ +/* + * da prints the device attributes of the current terminal + * to standard output as a string of comma-separated integers. + * + * If run inside GNU screen, it will print the device attributes + * of GNU screen itself and not those of the real terminal. + */ + +#include <err.h> +#include <fcntl.h> +#include <stdio.h> +#include <termios.h> +#include <unistd.h> + +int +main() +{ + char c; + int r, ttyfd; + struct termios term, restore; + + if((ttyfd = open("/dev/tty", O_RDWR))==-1) + err(1, "open"); + + tcgetattr(ttyfd, &restore); + tcgetattr(ttyfd, &term); + term.c_lflag &= ~(ICANON|ECHO); + tcsetattr(ttyfd, TCSANOW, &term); + + write(ttyfd, "\033[>c", 4); + while(r = read(ttyfd, &c, 1)){ + if(r==-1){ + warn("read"); + goto end; + } + if(c=='c') break; + printf("%d,", c); + } + printf("99\n"); + +end: + tcsetattr(ttyfd, TCSANOW, &restore); +} |