ocarina/core/date.c
Anna Schumaker e1f13a7ef4 core/file: Create new functions for reading data from files
The readd(), readu(), and readhu() functions are all used to read
various forms of integers.  The readl() and readw() are for reading
either lines or individual whitespace-delimited words

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2018-02-21 16:01:15 -05:00

69 lines
1.4 KiB
C

/*
* Copyright 2015 (c) Anna Schumaker.
*/
#include <core/date.h>
#include <core/string.h>
#include <endian.h>
#include <time.h>
void date_set(struct date *date, unsigned int year,
unsigned int month, unsigned int day)
{
if (date) {
date->d_year = year;
date->d_month = month;
date->d_day = day;
}
}
void date_today(struct date *date)
{
time_t rawtime = time(NULL);
struct tm *now = localtime(&rawtime);
date_set(date, now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
}
void date_read(struct file *f, struct date *date)
{
date->d_year = file_readu(f);
date->d_month = file_readu(f);
date->d_day = file_readu(f);
}
void date_read_stamp(struct file *f, struct date *date)
{
date->d_stamp = be32toh(file_readu(f));
}
void date_write(struct file *f, struct date *date)
{
file_writef(f, "%u %u %u", date->d_year, date->d_month, date->d_day);
}
void date_write_stamp(struct file *f, struct date *date)
{
file_writef(f, "%u", htobe32(date->d_stamp));
}
gchar *date_string(const struct date *date)
{
struct tm tm = {
.tm_year = date->d_year - 1900,
.tm_mon = date->d_month - 1,
.tm_mday = date->d_day,
};
return string_tm2str(&tm);
}
int date_compare(const struct date *lhs, const struct date *rhs)
{
int ret = lhs->d_year - rhs->d_year;
if (ret != 0)
return ret;
ret = lhs->d_month - rhs->d_month;
if (ret != 0)
return ret;
return lhs->d_day - rhs->d_day;
}