Initial commit
This commit is contained in:
commit
f49fe5af67
2 changed files with 138 additions and 0 deletions
2
src/Makefile
Normal file
2
src/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
baps1: main.c
|
||||
$(CC) -Wall -Wextra -lm main.c -o baps1
|
136
src/main.c
Normal file
136
src/main.c
Normal file
|
@ -0,0 +1,136 @@
|
|||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static char *
|
||||
get_tty_name(void)
|
||||
{
|
||||
return ttyname(STDIN_FILENO);
|
||||
}
|
||||
|
||||
static char *
|
||||
get_filename(void)
|
||||
{
|
||||
char *filename = malloc(sizeof(char) * 255);
|
||||
char *tty = get_tty_name();
|
||||
char *pch;
|
||||
|
||||
while ((pch = strchr(tty, '/')))
|
||||
*pch = '_';
|
||||
|
||||
sprintf(filename, "/tmp/baps1_%u_%s", getuid(), tty);
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
static time_t
|
||||
load_previous_time(char *filename)
|
||||
{
|
||||
FILE *timefile = fopen(filename, "r");
|
||||
time_t prev;
|
||||
|
||||
fscanf(timefile, "%ld", &prev);
|
||||
fclose(timefile);
|
||||
|
||||
return prev;
|
||||
}
|
||||
|
||||
static time_t
|
||||
get_previous_time(char *filename)
|
||||
{
|
||||
time_t prev;
|
||||
|
||||
if (access(filename, R_OK) == 0) {
|
||||
prev = load_previous_time(filename);
|
||||
}
|
||||
else {
|
||||
prev = 0;
|
||||
}
|
||||
|
||||
return prev;
|
||||
}
|
||||
|
||||
static int
|
||||
get_tty_number(void)
|
||||
{
|
||||
char *tty = get_tty_name();
|
||||
char *num = strrchr(tty, '/') + 1;
|
||||
|
||||
return atoi(num);
|
||||
}
|
||||
|
||||
static char
|
||||
get_tty_type(void)
|
||||
{
|
||||
char *tty = get_tty_name();
|
||||
|
||||
strtok(tty, "/"); /* dev */
|
||||
|
||||
return strtok(NULL, "/")[0];
|
||||
}
|
||||
|
||||
static int
|
||||
save_current_time(char *filename)
|
||||
{
|
||||
FILE *timefile = fopen(filename, "w");
|
||||
time_t now;
|
||||
|
||||
if (!timefile)
|
||||
return 0;
|
||||
|
||||
time(&now);
|
||||
fprintf(timefile, "%ld", now);
|
||||
fclose(timefile);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
print_time_since(time_t lasttime)
|
||||
{
|
||||
double h, m, s;
|
||||
time_t now;
|
||||
|
||||
time(&now);
|
||||
s = difftime(now, lasttime);
|
||||
|
||||
if (s >= 60.0) {
|
||||
m = floor(s / 60.0);
|
||||
s -= m * 60;
|
||||
|
||||
if (m >= 60.0) {
|
||||
h = floor(m / 60.0);
|
||||
m -= h * 60;
|
||||
|
||||
printf("%.0lfh", h);
|
||||
}
|
||||
|
||||
printf("%.0lfm", m);
|
||||
}
|
||||
|
||||
printf("%.0lfs", s);
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
char *filename = get_filename();
|
||||
time_t lasttime = get_previous_time(filename);
|
||||
|
||||
printf("%c%d:", get_tty_type(), get_tty_number());
|
||||
|
||||
if (lasttime > 0) {
|
||||
print_time_since(lasttime);
|
||||
}
|
||||
else {
|
||||
puts("new");
|
||||
}
|
||||
|
||||
save_current_time(filename);
|
||||
free(filename);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
Loading…
Reference in a new issue