Initial commit

This commit is contained in:
Tom Willemsen 2012-05-17 19:27:54 +02:00
commit f49fe5af67
2 changed files with 138 additions and 0 deletions

2
src/Makefile Normal file
View file

@ -0,0 +1,2 @@
baps1: main.c
$(CC) -Wall -Wextra -lm main.c -o baps1

136
src/main.c Normal file
View 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;
}