// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)

/* Бібліотека Мавки */

взяти визначення мавка;

простір мавка {
  простір бібліотека {
    структура Дані {
      розмір: природне;
      дані: *п8;
    }
  }
}
// ВАЖЛИВО: параметри дій бібліотеки НЕ ЗМІНЮВАТИ! інакше прийдеться змінювати ВСЮДИ (віндовс, лінукс, макос, васм)
//          якщо треба щось таке зробити, то треба створити нову дію!
//          сумісність цих дій між версіями має завжли зберігатись!
//          це головна біль потім міняти їх у Васм!

// мат
дія бібліотека_мавки_Е_р64() -> р64;
дія бібліотека_мавки_ЛОГ10_р64() -> р64;
дія бібліотека_мавки_ЛОГ2_р64() -> р64;
дія бібліотека_мавки_ЛОГ2Е_р64() -> р64;
дія бібліотека_мавки_ЛОГ10Е_р64() -> р64;
дія бібліотека_мавки_ПІ_р64() -> р64;
дія бібліотека_мавки_КОРІНЬ1_2_р64() -> р64;
дія бібліотека_мавки_КОРІНЬ2_р64() -> р64;
дія бібліотека_мавки_синус_р64(значення: р64) -> р64;
дія бібліотека_мавки_косинус_р64(значення: р64) -> р64;
дія бібліотека_мавки_тангенс_р64(значення: р64) -> р64;
дія бібліотека_мавки_арксинус_р64(значення: р64) -> р64;
дія бібліотека_мавки_арккосинус_р64(значення: р64) -> р64;
дія бібліотека_мавки_арктангенс_р64(значення: р64) -> р64;
дія бібліотека_мавки_арктангенс2_р64(а: р64, б: р64) -> р64;
дія бібліотека_мавки_абсолютне_р64(значення: р64) -> р64;
дія бібліотека_мавки_експонента_р64(значення: р64) -> р64;
дія бібліотека_мавки_корінь2_р64(значення: р64) -> р64;
дія бібліотека_мавки_стеля_р64(значення: р64) -> р64;
дія бібліотека_мавки_підлога_р64(значення: р64) -> р64;
дія бібліотека_мавки_округлити_р64(значення: р64) -> р64;

// афс
дія бібліотека_мавки_афс_видалити(
  дані_шляху: *п8,
  розмір_шляху: природне,
  обробник: (видалено: природне, помилка: природне, аргумент: адреса) -> ніщо,
  аргумент: адреса
);
дія бібліотека_мавки_афс_дописати(
  дані_шляху: *п8,
  розмір_шляху: природне,
  дані_даних: *п8,
  розмір_даних: природне,
  обробник: (помилка: природне, аргумент: адреса) -> ніщо,
  аргумент: адреса
);
дія бібліотека_мавки_афс_записати(
  дані_шляху: *п8,
  розмір_шляху: природне,
  дані_даних: *п8,
  розмір_даних: природне,
  обробник: (помилка: природне, аргумент: адреса) -> ніщо,
  аргумент: адреса
);
дія бібліотека_мавки_афс_прочитати(
  дані_шляху: *п8,
  розмір_шляху: природне,
  обробник: (дані_даних: *п8, розмір_даних: природне, помилка: природне, аргумент: адреса) -> ніщо,
  аргумент: адреса
);
дія бібліотека_мавки_афс_створити_папку(
  дані_шляху: *п8,
  розмір_шляху: природне,
  обробник: (помилка: природне, аргумент: адреса) -> ніщо,
  аргумент: адреса
);

// інет
стала МАВКА_ІНЕТ_УСПІХ = 0;
стала МАВКА_ІНЕТ_ПОМИЛКА_НЕВІДОМА = 1000;
стала МАВКА_ІНЕТ_ПОМИЛКА_НЕДОСТАТНЬО_ПАМʼЯТІ = 1001;
стала МАВКА_ІНЕТ_ПОМИЛКА_АРГУМЕНТУ = 1002;
стала МАВКА_ІНЕТ_ПОМИЛКА_АДРЕСА_ВИКОРИСТОВУЄТЬСЯ = 1003;
стала МАВКА_ІНЕТ_ПОМИЛКА_ЗʼЄДНАННЯ_ВІДХИЛЕНО = 1004;
стала МАВКА_ІНЕТ_ПОМИЛКА_ЗʼЄДНАННЯ_СКИНОТО = 1005;
стала МАВКА_ІНЕТ_ПОМИЛКА_МЕРЕЖА_НЕДОСТУПНА = 1006;
стала МАВКА_ІНЕТ_ПОМИЛКА_ХОСТ_НЕДОСТУПНИЙ = 1007;
стала МАВКА_ІНЕТ_ПОМИЛКА_ТАЙМАУТ = 1008;
стала МАВКА_ІНЕТ_ПОМИЛКА_КАНАЛ_ЗЛАМАНО = 1009;
стала МАВКА_ІНЕТ_ПОМИЛКА_ДОСТУПУ = 1010;
стала МАВКА_ІНЕТ_ПОМИЛКА_ЗАБАГАТО_ФАЙЛІВ = 1011;
стала МАВКА_ІНЕТ_ПОМИЛКА_АДРЕСА_НЕДОСТУПНА = 1012;
стала МАВКА_ІНЕТ_ПОМИЛКА_ПЕРЕПОВНЕННЯ_БУФЕРА = 1013;
стала МАВКА_ІНЕТ_ПОМИЛКА_МЕРЕЖА_ВІДМОВИЛА = 1014;
стала МАВКА_ІНЕТ_ПОМИЛКА_МЕРЕЖА_СКИНУТА = 1015;
стала МАВКА_ІНЕТ_ПОМИЛКА_ЗʼЄДНАННЯ_ПЕРЕРВАНО = 1016;
стала МАВКА_ІНЕТ_ПОМИЛКА_ВЖЕ_ПІДДОСЛІДЖЕНО = 1017;
стала МАВКА_ІНЕТ_ПОМИЛКА_НЕ_ПІДʼЄДНАНО = 1018;
стала МАВКА_ІНЕТ_ПОМИЛКА_ВХІД_ВИХІД = 1019;
стала МАВКА_ІНЕТ_ПОМИЛКА_НЕПРАВИЛЬНИЙ_ФАЙЛ = 1020;

стала БІБЛІОТЕКА_МАВКИ_ВИД_ІА_ІП4 = 4;
стала БІБЛІОТЕКА_МАВКИ_ВИД_ІА_ІП6 = 6;

// інет слуга
синонім БібліотекаМавкиІнетСлугаОбробникЗапуску = (адр_слуга: адреса, помилка: природне) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникПомилки = (адр_слуга: адреса, помилка: природне) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникЗупинки = (адр_слуга: адреса) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникЗнищення = (аргумент_слуги: адреса) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникПідключенняЗвʼязку = (адр_слуга: адреса, адр_звʼязок: адреса) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникДанихЗвʼязку = (адр_слуга: адреса, адр_звʼязок: адреса, дані: *п8, розмір: природне) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникСтіканняЗвʼязку = (адр_слуга: адреса, адр_звʼязок: адреса) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникЗакінченняЗвʼязку = (адр_слуга: адреса, адр_звʼязок: адреса) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникПомилкиЗвʼязку = (адр_слуга: адреса, адр_звʼязок: адреса, помилка: природне) -> ніщо;
синонім БібліотекаМавкиІнетСлугаОбробникВідключенняЗвʼязку = (адр_слуга: адреса, адр_звʼязок: адреса) -> ніщо;

дія бібліотека_мавки_інет_служити(
  іа_вид: природне,
  іа_дані: *п8,
  іа_розмір: природне,
  порт: природне,
  обробник_запуску: БібліотекаМавкиІнетСлугаОбробникЗапуску,
  обробник_помилки: БібліотекаМавкиІнетСлугаОбробникПомилки,
  обробник_зупинки: БібліотекаМавкиІнетСлугаОбробникЗупинки,
  аргумент: адреса,
  обробник_знищення: БібліотекаМавкиІнетСлугаОбробникЗнищення,
  обробник_підключення_звʼязку: БібліотекаМавкиІнетСлугаОбробникПідключенняЗвʼязку,
  обробник_даних_звʼязку: БібліотекаМавкиІнетСлугаОбробникДанихЗвʼязку,
  обробник_стікання_звʼязку: БібліотекаМавкиІнетСлугаОбробникСтіканняЗвʼязку,
  обробник_закінчення_звʼязку: БібліотекаМавкиІнетСлугаОбробникЗакінченняЗвʼязку,
  обробник_помилки_звʼязку: БібліотекаМавкиІнетСлугаОбробникПомилкиЗвʼязку,
  обробник_відключення_звʼязку: БібліотекаМавкиІнетСлугаОбробникВідключенняЗвʼязку,
);

дія бібліотека_мавки_інет_отримати_аргумент_слуги(
  адр_слуга: адреса,
) -> адреса;

дія бібліотека_мавки_інет_зупинити_слугу(
  адр_слуга: адреса,
  закрити_підключення: природне,
) -> ціле;

// інет клієнт
синонім БібліотекаМавкиІнетКлієнтОбробникПідключення = (адр_звʼязок: адреса, помилка: природне) -> ніщо;
синонім БібліотекаМавкиІнетКлієнтОбробникДаних = (адр_звʼязок: адреса, дані: *п8, розмір: природне) -> ніщо;
синонім БібліотекаМавкиІнетКлієнтОбробникСтікання = (адр_звʼязок: адреса) -> ніщо;
синонім БібліотекаМавкиІнетКлієнтОбробникЗакінчення = (адр_звʼязок: адреса) -> ніщо;
синонім БібліотекаМавкиІнетКлієнтОбробникПомилки = (адр_звʼязок: адреса, помилка: природне) -> ніщо;
синонім БібліотекаМавкиІнетКлієнтОбробникВідключення = (адр_звʼязок: адреса) -> ніщо;

синонім БібліотекаМавкиІнетЗвʼязокОбробникЗнищення = (аргумент_звʼязку: адреса) -> ніщо;
синонім БібліотекаМавкиІнетЗвʼязокОбробникНадіслання = (адр_звʼязок: адреса, аргумент_надіслання: адреса) -> ніщо;
синонім БібліотекаМавкиІнетЗвʼязокОбробникЗакінчення = (адр_звʼязок: адреса, аргумент_закінчення: адреса) -> ніщо;

дія бібліотека_мавки_інет_підключитись(
  іа_вид: природне,
  іа_дані: *п8,
  іа_розмір: природне,
  порт: природне,
  обробник_підключення: БібліотекаМавкиІнетКлієнтОбробникПідключення,
  обробник_даних: БібліотекаМавкиІнетКлієнтОбробникДаних,
  обробник_стікання: БібліотекаМавкиІнетКлієнтОбробникСтікання,
  обробник_закінчення: БібліотекаМавкиІнетКлієнтОбробникЗакінчення,
  обробник_помилки: БібліотекаМавкиІнетКлієнтОбробникПомилки,
  обробник_відключення: БібліотекаМавкиІнетКлієнтОбробникВідключення,
  аргумент: адреса,
  обробник_знищення: БібліотекаМавкиІнетЗвʼязокОбробникЗнищення,
);

дія бібліотека_мавки_інет_записати_аргумент_звʼязку(
  адр_звʼязок: адреса,
  аргумент: адреса,
  обробник_знищення: БібліотекаМавкиІнетЗвʼязокОбробникЗнищення,
);

дія бібліотека_мавки_інет_отримати_аргумент_звʼязку(
  адр_звʼязок: адреса
) -> адреса;

дія бібліотека_мавки_інет_звʼязок_надіслати(
  адр_звʼязок: адреса,
  дані: *п8,
  розмір: природне,
  аргумент: адреса,
  обробник: БібліотекаМавкиІнетЗвʼязокОбробникНадіслання,
) -> логічне;

дія бібліотека_мавки_інет_звʼязок_закінчити(
  адр_звʼязок: адреса,
  дані: *п8,
  розмір: природне,
  аргумент: адреса,
  обробник: БібліотекаМавкиІнетЗвʼязокОбробникЗакінчення,
);

дія бібліотека_мавки_інет_звʼязок_знищити(
  адр_звʼязок: адреса,
);

простір мавка {
  простір бібліотека {
    структура КористувацькіДаніБібліотекиМавки {
      взято__мат: *Притриманий; // ПредметМодуля
      взято__афс: *Притриманий; // ПредметМодуля
      взято__аввід: *Притриманий; // ПредметМодуля
      взято__інет: *Притриманий; // ПредметМодуля

      // ці притримувати не треба, так як вони є властивостями модулів вище
      інет__Слуга: *ПредметКласу;
      інет__Звʼязок: *ПредметКласу;
    }

    дія ініціалізувати(М: *Машина);

    дія записати_дію__мат__син(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__кос(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__тан(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__асин(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__акос(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__атан(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__абс(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__експ(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__кор2(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__стеля(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__підлога(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__мат__округлити(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія ініціалізувати__мат(М: *Машина, предмет_модуля: *ПредметМодуля);

    дія записати_дію__афс__видалити(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__афс__дописати(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__афс__записати(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__афс__прочитати(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__афс__створити_папку(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія ініціалізувати__афс(М: *Машина, предмет_модуля: *ПредметМодуля);

    дія записати_дію__аввід__запитати(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія ініціалізувати__аввід(М: *Машина, предмет_модуля: *ПредметМодуля);

    структура АргументІнетСлуги {
      М: *Машина;
      прт_слуга: *Притриманий;
      як_текст: логічне;
      прт_обробник_запуску: *Притриманий;
      прт_обробник_помилки: *Притриманий;
      прт_обробник_зупинки: *Притриманий;
      прт_обробник_підключення_звʼязку: *Притриманий;
      прт_обробник_даних_звʼязку: *Притриманий;
      прт_обробник_стікання_звʼязку: *Притриманий;
      прт_обробник_закінчення_звʼязку: *Притриманий;
      прт_обробник_помилки_звʼязку: *Притриманий;
      прт_обробник_відключення_звʼязку: *Притриманий;
    }
    структура АргументІнетЗвʼязку {
      М: *Машина;
      прт_звʼязок: *Притриманий;
      як_текст: логічне;
      прт_обробник_підключення: *Притриманий;
      прт_обробник_даних: *Притриманий;
      прт_обробник_стікання: *Притриманий;
      прт_обробник_закінчення: *Притриманий;
      прт_обробник_помилки: *Притриманий;
      прт_обробник_відключення: *Притриманий;
    }
    структура КористувацькіДаніІнетСлуги {
      адр_слуга: адреса;
    }
    структура КористувацькіДаніІнетЗвʼязку {
      адр_звʼязок: адреса;
    }
    дія виділити_аргумент_інет_звʼязку(М: *Машина) -> *АргументІнетЗвʼязку;
    дія обробник_знищення_інет_звʼязку(аргумент_звʼязку_клієнта: адреса);
    дія створити_інет_Звʼязок(М: *Машина, адр_звʼязок: адреса) -> *СкладенийПредмет;
    дія перед_знищенням_користувацьких_даних_інет_звʼязку(М: *Машина, користувацькі_дані: *КористувацькіДані);
    дія отримати_текст_інет_помилки(М: *Машина, помилка: природне) -> *ПредметТексту;
    дія записати_клас__інет__Слуга(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_клас__інет__Звʼязок(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__інет__служити(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія записати_дію__інет__підключитись(М: *Машина, предмет_модуля: *ПредметМодуля);
    дія ініціалізувати__інет(М: *Машина, предмет_модуля: *ПредметМодуля);

    дія створити_дію__читати(М: *Машина) -> *ПредметДії;
  }
}