/* * 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 #include #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; }