#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
struct betinfo {
long hand;
long inspection;
long game;
long runs;
long information;
long thinktime;
long wins;
long worth;
};
int dbfd;
char scorepath[PATH_MAX];
void printuser(void);
int
main(int argc, char *argv[])
{
const char *home;
int ret;
if (pledge("stdio rpath", NULL) == -1)
err(1, "pledge");
home = getenv("HOME");
if (home == NULL || *home == '\0')
err(1, "getenv");
ret = snprintf(scorepath, sizeof(scorepath), "%s/%s", home,
".cfscores");
if (ret < 0 || ret >= PATH_MAX)
errc(1, ENAMETOOLONG, "%s/%s", home, ".cfscores");
dbfd = open(scorepath, O_RDONLY);
if (dbfd < 0)
err(2, "%s", scorepath);
printuser();
return 0;
}
void
printuser(void)
{
struct betinfo total;
const char *name;
int i;
name = getlogin();
if (name == NULL || *name == '\0')
name = " ??? ";
i = read(dbfd, (char *)&total, sizeof(total));
if (i < 0) {
warn("lseek %s", scorepath);
return;
}
if (i == 0 || total.hand == 0) {
printf("%s has never played canfield.\n", name);
return;
}
i = strlen(name);
printf("*----------------------*\n");
if (total.worth >= 0) {
if (i <= 8)
printf("* Winnings for %-8s*\n", name);
else {
printf("* Winnings for *\n");
if (i <= 20)
printf("* %20s *\n", name);
else
printf("%s\n", name);
}
} else {
if (i <= 10)
printf("* Losses for %-10s*\n", name);
else {
printf("* Losses for *\n");
if (i <= 20)
printf("* %20s *\n", name);
else
printf("%s\n", name);
}
}
printf("*======================*\n");
printf("|Costs Total |\n");
printf("| Hands %8ld |\n", total.hand);
printf("| Inspections %8ld |\n", total.inspection);
printf("| Games %8ld |\n", total.game);
printf("| Runs %8ld |\n", total.runs);
printf("| Information %8ld |\n", total.information);
printf("| Think time %8ld |\n", total.thinktime);
printf("|Total Costs %8ld |\n", total.wins - total.worth);
printf("|Winnings %8ld |\n", total.wins);
printf("|Net Worth %8ld |\n", total.worth);
printf("*----------------------*\n\n");
}