#ifndef PRYSTRIY_H
#define PRYSTRIY_H

#include "mavka/tsil.h"

#define КолірВиводуСтандартний 0
#define КолірВиводуЧервоний 1
#define КолірВиводуЗелений 2
#define КолірВиводуСиній 3
#define КолірВиводуЖовтий 4

typedef struct ЕлементШляхуПристроюМавки ЕлементШляхуПристроюМавки;

struct ЕлементШляхуПристроюМавки {
  п8* дані;
  природне розмір;
};

extern логічне пристрій_мавки_отримати_версію_як_ю8(п8** вихід_даних,
                                                    природне* вихід_розміру);

extern void пристрій_мавки_вивести_сирі_дані(п8* дані, природне розмір);

extern void пристрій_мавки_вивести_шлях(природне колір,
                                        п8* дані,
                                        природне розмір);

extern void пристрій_мавки_вивести_ю8(природне колір,
                                      п8* дані,
                                      природне розмір);

extern адреса пристрій_мавки_виділити(природне розмір);

extern адреса пристрій_мавки_перевиділити(адреса значення,
                                          природне новий_розмір);

extern void пристрій_мавки_звільнити(адреса значення);

extern void пристрій_мавки_вийти(ц32 код_виходу);

extern логічне пристрій_мавки_прочитати_файл(п8* дані_шляху,
                                             природне розмір_шляху,
                                             п8** вихід_даних,
                                             природне* вихід_розміру);

extern логічне пристрій_мавки_перетворити_п64_в_ю8(п64 значення,
                                                   п8** вихід_даних,
                                                   природне* вихід_розміру);

extern логічне пристрій_мавки_перетворити_ц64_в_ю8(ц64 значення,
                                                   п8** вихід_даних,
                                                   природне* вихід_розміру);

extern логічне пристрій_мавки_перетворити_р64_в_ю8(
    р64 значення,
    п8** вихід_даних,
    природне* вихід_розміру,
    ціле* вихід_розміру_експоненти);

extern р64 пристрій_мавки_піднести_до_степеня_р64(р64 значення, р64 степінь);

extern логічне пристрій_мавки_перевірити_чи_шлях_існує_і_є_файлом(
    п8* дані_шляху,
    природне розмір_шляху);

extern логічне пристрій_мавки_отримати_абсолютний_шлях(п8* дані_шляху,
                                                       природне розмір_шляху,
                                                       п8** вихід_даних,
                                                       природне* вихід_розміру);

extern логічне пристрій_мавки_отримати_теку_шляху(п8* дані_шляху,
                                                  природне розмір_шляху,
                                                  п8** вихід_даних,
                                                  природне* вихід_розміру,
                                                  природне рівень);

extern логічне пристрій_мавки_отримати_теку_до_паків(п8* дані_шляху,
                                                     природне розмір_шляху,
                                                     п8** вихід_даних,
                                                     природне* вихід_розміру);

extern логічне пристрій_мавки_отримати_назву_модуля_з_шляху_ю8(
    п8* дані_шляху,
    природне розмір_шляху,
    п8** вихід_даних,
    природне* вихід_розміру);

extern логічне пристрій_мавки_збити_шлях_до_модуля(
    природне кількість_елементів,
    ЕлементШляхуПристроюМавки* елементи,
    п8** вихід_даних,
    природне* вихід_розміру);

extern логічне пристрій_мавки_перевірити_чи_шлях_починається_на(
    п8* дані_шляху,
    природне розмір_шляху,
    п8* дані_початку,
    природне розмір_початку);

extern логічне пристрій_мавки_отримати_шлях_до_паку_з_шляху_теки_модулів(
    п8* дані_шляху,
    природне розмір_шляху,
    п8* дані_шляху_до_паків,
    природне розмір_шляху_до_паків,
    п8** вихід_даних,
    природне* вихід_розміру);

extern логічне пристрій_мавки_читати_ю8(п8* дані_перед,
                                        природне розмір_перед,
                                        п8** вихід_даних,
                                        природне* вихід_розміру,
                                        природне* вихід_кінець_файлу,
                                        природне дозволити_історію);

extern логічне пристрій_мавки_читати_ю8_асинхронно(
    п8* дані_перед,
    природне розмір_перед,
    void (*обробник)(п8* дані,
                     природне розмір,
                     природне кінець_файлу,
                     адреса аргумент),
    адреса аргумент,
    природне дозволити_історію);

extern логічне пристрій_мавки_отримати_поточний_шлях_процесу(
    п8** вихід_даних,
    природне* вихід_розміру);

#endif // PRYSTRIY_H