From b97ec93748902c90f25524116d3d189f1b263474 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Wed, 8 Feb 2023 17:12:23 +0100 Subject: make ls cooler --- lib/aec/Makefile | 2 +- lib/aec/aec.c | 33 ++++++++++++++++++++++++++++++++- lib/aec/aec.h | 5 +++++ lib/tctl/tctl.c | 12 ++++++++++-- lib/tctl/tctl.h | 12 ++++++++++++ 5 files changed, 60 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/aec/Makefile b/lib/aec/Makefile index c7f78b6..e2179f8 100644 --- a/lib/aec/Makefile +++ b/lib/aec/Makefile @@ -1,3 +1,3 @@ unit_test: - gcc aec.c ../io/io.c ../cstr/cstr.c ../env/env.c ../sys/start.S -o test -static -nostdlib -fno-stack-protector -Wno-implicit-function-declaration -fno-builtin -DAEC_UNIT_TEST -g + gcc aec.c ../malloc/malloc.c ../io/io.c ../cstr/cstr.c ../env/env.c ../sys/start.S -o test -static -nostdlib -fno-stack-protector -Wno-implicit-function-declaration -fno-builtin -DAEC_UNIT_TEST -g ./test diff --git a/lib/aec/aec.c b/lib/aec/aec.c index 92a1f08..2d3d47c 100644 --- a/lib/aec/aec.c +++ b/lib/aec/aec.c @@ -2,7 +2,7 @@ #include "../io/io.h" -#define csi() wstd("\033["); +#define csi() wstd("\033[") void sgr(const char *attrs) { @@ -29,9 +29,40 @@ void background(const char *code) wstd("m"); } + +void clear_screen() +{ + csi(); + wstd("2J"); +} + + +void clear_line() +{ + csi(); + wstd("2K"); +} + + +void move_cursor(int x, int y) +{ + csi(); + wstdf("%i;%iH", y, x); +} + + +void cursor_enabled(int is_enabled) +{ + csi(); + wstd("?25"); + wstd(is_enabled ? "h" : "l"); +} + #ifdef AEC_UNIT_TEST int main() { + clear_screen(); + move_cursor(1, 1); sgr(SGR_BOLD); wstd("Hallo"); sgr(SGR_RESET); diff --git a/lib/aec/aec.h b/lib/aec/aec.h index 70c2706..b273e4a 100644 --- a/lib/aec/aec.h +++ b/lib/aec/aec.h @@ -38,4 +38,9 @@ void sgr(const char *attrs); void foreground(const char *code); void background(const char *code); +void clear_screen(); +void clear_line(); +void move_cursor(int x, int y); +void cursor_enabled(int is_enabled); + #endif diff --git a/lib/tctl/tctl.c b/lib/tctl/tctl.c index 54034f4..187d1a9 100644 --- a/lib/tctl/tctl.c +++ b/lib/tctl/tctl.c @@ -3,16 +3,24 @@ #define GET_WIN_SIZE 0x5413 #define SET_WIN_SIZE 0x5414 +#define TC_GET_ATTR 0x5401 window_size_t tctl_get_window_size() { window_size_t ws; - ioctl(0, GET_WIN_SIZE, &ws); + ioctl(1, GET_WIN_SIZE, &ws); return ws; } void tctl_set_window_size(window_size_t size) { - ioctl(0, SET_WIN_SIZE, &size); + ioctl(1, SET_WIN_SIZE, &size); +} + + +int isatty() +{ + termios_t term; + return ioctl(1, TC_GET_ATTR, &term) == 0; } diff --git a/lib/tctl/tctl.h b/lib/tctl/tctl.h index d106818..bdcdb66 100644 --- a/lib/tctl/tctl.h +++ b/lib/tctl/tctl.h @@ -8,7 +8,19 @@ typedef struct { unsigned short int ws_ypixel; } window_size_t; +typedef struct { + unsigned int c_iflag; + unsigned int c_oflag; + unsigned int c_cflag; + unsigned int c_lflag; + unsigned char c_line; + unsigned char c_cc[32]; + unsigned int c_ispeed; + unsigned int c_ospeed; +} termios_t; + window_size_t tctl_get_window_size(); void tctl_set_window_size(window_size_t size); +int isatty(); #endif -- cgit v1.2.3-70-g09d2