/*
 * dos.h — DOS-подобный слой Solid-C поверх ESTEX/BIOS: диски,
 * дата/время в Turbo-C-структурах, абсолютное чтение/запись секторов.
 *
 * Структуры совместимы с Solid-C DOS.H (и Turbo C):
 *   struct time { ti_min, ti_hour, ti_hund, ti_sec }
 *   struct date { da_year, da_day, da_mon (1 = январь) }
 * ti_hund (сотые секунды) не поддержан RTC Sprinter — всегда 0.
 */

#ifndef DOS_H
#define DOS_H

#include <stdint.h>

struct time {
    unsigned char ti_min;      /* минуты */
    unsigned char ti_hour;     /* часы */
    unsigned char ti_hund;     /* сотые доли секунды (не используются) */
    unsigned char ti_sec;      /* секунды */
};

struct date {
    int  da_year;              /* год (полный, напр. 2026) */
    char da_day;               /* день месяца */
    char da_mon;               /* месяц (1 = январь) */
};

/* Чтение/установка даты и времени (обёртки над getdatetime/
 * setdatetime — set* делает read-modify-write полного datetime_t). */
void getdate(struct date *d);
int  setdate(const struct date *d);
void gettime(struct time *t);
int  settime(const struct time *t);

/* Текущий диск: 0=A, 1=B, ...  setdisk возвращает число дисков или
 * -1 + errno. */
uint8_t getdisk(void);
int     setdisk(uint8_t drive);

/* Абсолютное чтение/запись секторов ЛОГИЧЕСКОГО диска (BIOS $55/$56,
 * rst 8; сектор 0 = boot-сектор, с 1 — первая FAT и т.д.).
 * Возврат 0 или -1 + errno (EREAD/EWRITE, как у Solid-C).
 * Буфер должен лежать в #4000-#BFFF (требование BIOS). */
int absread (uint8_t disk, uint16_t nsect, uint8_t count, void *buffer);
int abswrite(uint8_t disk, uint16_t nsect, uint8_t count,
             const void *buffer);

#endif
