/*
 * time — текущие секунды Unix-эпохи из RTC (getdatetime / ESTEX
 * SYSTIME $21).
 *
 * SDCC-шная z80.lib кладёт time/localtime/mktime И _RtcRead в один
 * модуль time.rel, так что _RtcRead нельзя переопределить из
 * отдельного объектника — будет "multiple definition".  Обходим это,
 * реализуя весь POSIX time API сами; тогда линкер никогда не тянет
 * SDCC-шный time.rel.
 *
 * Эпоха — Unix (1970-01-01 00:00:00).  Без таймзон и DST.
 */

#include <time.h>
#include "_time.h"

time_t time(time_t *t)
{
    datetime_t dt;
    getdatetime(&dt);
    unsigned long days = _tm_year_days(dt.year)
                       + _tm_month_days(dt.year, dt.month)
                       + (dt.day - 1);
    time_t epoch = days * 86400UL
                 + (unsigned long)dt.hour   * 3600UL
                 + (unsigned long)dt.minute * 60UL
                 + dt.second;
    if (t) *t = epoch;
    return epoch;
}
