-
Notifications
You must be signed in to change notification settings - Fork 0
/
ncurses.c
89 lines (81 loc) · 1.76 KB
/
ncurses.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "config.h"
#include <stdlib.h>
#include <ncurses.h>
#include <sys/time.h>
#include "chrono.h"
#include <ncurses.h>
#include <pthread.h>
void ncursesInit(void) {
if (!use_x11) {
initscr();
noecho();
pthread_t thr;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&thr, &attr, ncursesKeysThreadFunc, NULL);
pthread_detach(thr);
pthread_attr_destroy(&attr);
}
if (window_title) {
char *cmdstr = (char *)malloc(1024);
sprintf(cmdstr, "echo -en \"\033]0;%s\007\"", window_title);
system(cmdstr);
free(cmdstr);
}
}
void *ncursesKeysThreadFunc(void *ptr) {
int c;
while (!endmainloop) {
c = getch();
switch (c) {
case 'D':
debug = !debug;
break;
case 'p':
case ' ':
paused = !paused;
if (paused)
gettimeofday(&tv_paused_start, NULL);
else {
gettimeofday(&tv_paused_current, NULL);
timersub(&tv_paused_current, &tv_paused_start, &tv_diff);
timeradd(&tv_paused, &tv_diff, &tv_paused);
}
TimeUpdate();
ncursesTimeStringUpdate();
break;
case 'q':
endmainloop = 1;
break;
case 'r':
TimeReset();
break;
case 's':
seconds_only = !seconds_only;
break;
}
}
return NULL;
}
void ncursesTimeStringUpdate(void) {
clear();
if (years)
printw(" %dy", years);
if (months)
printw(" %dm", months);
if (days)
printw(" %dd", days);
if (seconds_only)
printw(" %02ld:%02ld:%02ld\t\t\r",
tm0->tm_hour, tm0->tm_min, tm0->tm_sec);
else {
if (countdown)
printw(" %02ld:%02ld:%02ld.%03lu\t\t\r",
tm0->tm_hour, tm0->tm_min, tm0->tm_sec, tv_countdown.tv_usec/1000);
else
printw(" %02ld:%02ld:%02ld.%03lu\t\t\r",
tm0->tm_hour, tm0->tm_min, tm0->tm_sec, tv_current.tv_usec/1000);
}
refresh();
}