/*
 * gfx_pal_fload — загрузить палитру pal_num (0..3) из файла формата
 * gfx_pal_fsave (записи по 4 байта: B, G, R, 0).  Файл может быть
 * УСЕЧЁН: грузится столько полных записей, сколько есть (палитра
 * 16-цветной картинки — файл 64 байта), остальные слоты не трогаются.
 * Возврат: число загруженных записей (0..256) или -1 + errno.
 *
 * NB: заливает только палитру pal_num — для дабл-буфера после загрузки
 * в 0 звать gfx_pal_sync().
 */
#include <fcntl.h>
#include <unistd.h>
#include "../_bgi.h"

int gfx_pal_fload(uint8_t pal_num, const char *path)
{
    int fd, n, total = 0;
    uint8_t start = 0;

    fd = open(path, O_RDONLY);
    if (fd < 0)
        return -1;

    while (total < 256) {
        uint8_t entries;

        n = read(fd, _gfx_pal_buf, _GFX_PAL_CHUNK * 4);
        if (n < 0) { close(fd); return -1; }
        entries = (uint8_t)(n / 4);
        if (!entries)
            break;
        gfx_pal_load(pal_num, start, entries, _gfx_pal_buf);
        start += entries;
        total += entries;
        if (n < (int)(_GFX_PAL_CHUNK * 4))
            break;                       /* конец файла */
    }
    close(fd);
    return total;
}
