diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..074c4df --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +CC?=cc +CFLAGS?=-s -Wall -Wextra -pedantic -O0 +LDFLAGS?=-lncurses + +all: + $(CC) main.c -osm $(CFLAGS) $(LDFLAGS) + +clean: + rm sm diff --git a/README.md b/README.md index a6633e2..ce2393e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,9 @@ -# sm +quit - q + + +change cursor pos - w q + + +add - space + diff --git a/main.c b/main.c new file mode 100644 index 0000000..6cf091f --- /dev/null +++ b/main.c @@ -0,0 +1,98 @@ +#include +#include +#include + +typedef struct { + clock_t sec; + clock_t msec; +} TIME; +TIME *timer; +size_t timer_size; +size_t cursor; + +void die(char *msg) { + endwin(); + puts(msg); + exit(1); +} + +void add_value(clock_t sec, clock_t msec) { + timer_size += 1; + + timer = realloc(timer, (1 + timer_size) * sizeof(TIME)); + if (timer == NULL) + die("realloc returned NULL"); + + timer[timer_size].sec = sec; + timer[timer_size].msec = msec; +} + +int main(void) { + + /* Init array */ + timer = malloc(sizeof(TIME)); + if (timer == NULL) + die("malloc returned NULL"); + + initscr(); + timeout(0); + curs_set(0); + + while (1) { + + /* Microsecond */ + clock_t mcsec = clock(); + if (mcsec == -1) + die("Yes"); + + clock_t sec = mcsec / 1000000; + clock_t msec = (mcsec / 100000) % 10; + + mvprintw(1, 2, "%ld.%ld", sec, msec); + + /* Print timer array */ + if (timer_size > 0) { + + /* Start y */ + unsigned int j = 3; + + mvprintw(j, 0, ">"); + + for (size_t i = cursor; i < cursor + 10; i++) { + if (i > timer_size) + break; + + mvprintw(j++, 2, "(%ld) %ld.%ld", i, timer[i].sec, timer[i].msec); + } + } + + refresh(); + + /* Functions */ + switch (getch()) { + case ' ': + clear(); + add_value(sec, mcsec / 10000); + cursor = timer_size; + break; + + case 'w': + clear(); + if (cursor + 1 <= timer_size) + cursor++; + break; + + case 's': + clear(); + if (cursor - 1 > 0) + cursor--; + break; + + case 'q': + die("Succesfull exit"); + + default: + break; + } + } +}