// 2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)
взяти визначення мавка/бібліотека;
взяти визначення мавка/пристрій;
простір мавка {
простір бібліотека {
внутрішня дія перед_знищенням_кдс(М: *Машина, користувацькі_дані: *КористувацькіДані) {
змінна кдс = користувацькі_дані.значення як *КористувацькіДаніІнетСлуги;
якщо кдс.адр_слуга != пусто {
надрукувати_кд(М, "ПОМИЛКА МАВКИ: кдс.адр_слуга != пусто!!!");
}
звільнити(М, кдс);
}
внутрішня дія здійснити_предмет(М: *Машина, предмет: *Предмет, кількість_задіяних: п32, дані_задіяних: *Значення) {
змінна інформація_падіння: ІнформаціяПадіння;
здійснити(
М,
НЕДІЙСНЕ,
ПРЕДМЕТ(предмет),
Задіяні { ВидЗадіяних2, кількість_задіяних, дані_задіяних, 0 },
МІСЦЕю8(М, ю8"вм://бібліотека/інет/служити.ц", 0),
);
якщо отримати_інформацію_падіння(М, інформація_падіння::адреса) {
якщо М.налаштування.обробник_падінь == пусто {
ЗАПАНІКУВАТИ(М, "необроблене падіння!");
} інакше {
вимкнути_стан_падіння(М);
М.налаштування.обробник_падінь(
М,
інформація_падіння
);
}
}
}
внутрішня дія обробник_запуску(адр_слуга: адреса, помилка: природне) {
якщо адр_слуга == пусто {
// потім: паніка
вернути;
}
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна М = ас.М;
змінна кдбм = М.користувацькі_дані_бібліотеки.значення як *КористувацькіДаніБібліотекиМавки;
змінна предмет_слуги = створити_складений_предмет(М, кдбм.інет__Слуга);
змінна кдс = виділити<КористувацькіДаніІнетСлуги>(М, 1);
кдс.адр_слуга = адр_слуга;
предмет_слуги.користувацькі_дані = створити_користувацькі_дані(М, кдс, перед_знищенням_кдс);
ас.прт_слуга = притримати_глобально(М, предмет_слуги як *Предмет);
змінна предмет_обробник_запуску: *Предмет = пусто;
якщо ас.прт_обробник_запуску != пусто {
предмет_обробник_запуску = ас.прт_обробник_запуску.предмет;
}
якщо предмет_обробник_запуску == пусто {
вернути;
}
змінна предмет_помилки: *Предмет = пусто;
якщо помилка != 0 {
предмет_помилки = створити_помилку(
М,
отримати_текст_інет_помилки(М, помилка),
);
змінити_властивість(
М,
ПРЕДМЕТ(предмет_помилки),
М.константи_назв._код,
ЧИСЛО(р64(помилка)),
МІСЦЕю8(М, ю8"вм://бібліотека/інет/служити.ц", 0),
);
}
змінна кількість_задіяних = п32(2);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_слуги);
якщо предмет_помилки == пусто {
дані_задіяних[1] = НЕДІЙСНЕ;
} інакше {
дані_задіяних[1] = ПРЕДМЕТ(предмет_помилки);
}
здійснити_предмет(
М,
предмет_обробник_запуску,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_помилки(адр_слуга: адреса, помилка: природне) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна М = ас.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_обробник_помилки: *Предмет = пусто;
якщо ас.прт_обробник_помилки != пусто {
предмет_обробник_помилки = ас.прт_обробник_помилки.предмет;
}
якщо предмет_обробник_помилки == пусто {
вернути;
}
змінна предмет_помилки = створити_помилку(
М,
отримати_текст_інет_помилки(М, помилка),
);
змінити_властивість(
М,
ПРЕДМЕТ(предмет_помилки),
М.константи_назв._код,
ЧИСЛО(р64(помилка)),
МІСЦЕю8(М, ю8"вм://бібліотека/інет/служити.ц", 0),
);
змінна кількість_задіяних = п32(2);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_слуги);
якщо предмет_помилки == пусто {
дані_задіяних[1] = НЕДІЙСНЕ;
} інакше {
дані_задіяних[1] = ПРЕДМЕТ(предмет_помилки);
}
здійснити_предмет(
М,
предмет_обробник_помилки,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_зупинки(адр_слуга: адреса) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна М = ас.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_обробник_зупинки: *Предмет = пусто;
якщо ас.прт_обробник_зупинки != пусто {
предмет_обробник_зупинки = ас.прт_обробник_зупинки.предмет;
}
якщо предмет_обробник_зупинки == пусто {
вернути;
}
змінна кількість_задіяних = п32(1);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_зупинки,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_підключення_звʼязку(адр_слуга: адреса, адр_звʼязок: адреса) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна М = ас.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_обробник_підключення_звʼязку: *Предмет = пусто;
якщо ас.прт_обробник_підключення_звʼязку != пусто {
предмет_обробник_підключення_звʼязку = ас.прт_обробник_підключення_звʼязку.предмет;
}
змінна предмет_звʼязку = створити_інет_Звʼязок(М, адр_звʼязок);
змінна акс = виділити_аргумент_інет_звʼязку(М);
акс.М = М;
акс.прт_звʼязок = притримати_глобально(М, предмет_звʼязку як *Предмет);
бібліотека_мавки_інет_записати_аргумент_звʼязку(
адр_звʼязок,
акс,
обробник_знищення_інет_звʼязку
);
якщо предмет_обробник_підключення_звʼязку == пусто {
вернути;
}
змінна кількість_задіяних = п32(2);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_звʼязку);
дані_задіяних[1] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_підключення_звʼязку,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_даних_звʼязку(адр_слуга: адреса, адр_звʼязок: адреса, дані: *п8, розмір: природне) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна М = ас.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_обробник_даних_звʼязку: *Предмет = пусто;
якщо ас.прт_обробник_даних_звʼязку != пусто {
предмет_обробник_даних_звʼязку = ас.прт_обробник_даних_звʼязку.предмет;
}
якщо предмет_обробник_даних_звʼязку == пусто {
звільнити(М, дані);
вернути;
}
змінна акс = бібліотека_мавки_інет_отримати_аргумент_звʼязку(адр_звʼязок) як *АргументІнетЗвʼязку;
змінна предмет_звʼязку = акс.прт_звʼязок.предмет;
змінна кількість_задіяних = п32(3);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_звʼязку);
якщо ас.як_текст {
дані_задіяних[1] = ПРЕДМЕТ(створити_текст_без_копіювання(
М,
розмір,
дані,
));
} інакше {
дані_задіяних[1] = ПРЕДМЕТ(створити_дані_без_копіювання(
М,
розмір,
дані,
));
}
дані_задіяних[2] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_даних_звʼязку,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_стікання_звʼязку(адр_слуга: адреса, адр_звʼязок: адреса) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна аз = бібліотека_мавки_інет_отримати_аргумент_звʼязку(адр_звʼязок) як *АргументІнетЗвʼязку;
змінна М = аз.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_звʼязку = аз.прт_звʼязок.предмет як *СкладенийПредмет;
змінна кдз = предмет_звʼязку.користувацькі_дані.значення як *КористувацькіДаніІнетЗвʼязку;
змінна предмет_обробник_стікання_звʼязку: *Предмет = пусто;
якщо ас.прт_обробник_стікання_звʼязку != пусто {
предмет_обробник_стікання_звʼязку = ас.прт_обробник_стікання_звʼязку.предмет;
}
якщо предмет_обробник_стікання_звʼязку == пусто {
вернути;
}
змінна кількість_задіяних = п32(2);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_звʼязку);
дані_задіяних[1] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_стікання_звʼязку,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_закінчення_звʼязку(адр_слуга: адреса, адр_звʼязок: адреса) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна аз = бібліотека_мавки_інет_отримати_аргумент_звʼязку(адр_звʼязок) як *АргументІнетЗвʼязку;
змінна М = аз.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_звʼязку = аз.прт_звʼязок.предмет як *СкладенийПредмет;
змінна кдз = предмет_звʼязку.користувацькі_дані.значення як *КористувацькіДаніІнетЗвʼязку;
змінна предмет_обробник_закінчення_звʼязку: *Предмет = пусто;
якщо ас.прт_обробник_закінчення_звʼязку != пусто {
предмет_обробник_закінчення_звʼязку = ас.прт_обробник_закінчення_звʼязку.предмет;
}
якщо предмет_обробник_закінчення_звʼязку == пусто {
вернути;
}
змінна кількість_задіяних = п32(2);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_звʼязку);
дані_задіяних[1] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_закінчення_звʼязку,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_помилки_звʼязку(адр_слуга: адреса, адр_звʼязок: адреса, помилка: природне) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна аз = бібліотека_мавки_інет_отримати_аргумент_звʼязку(адр_звʼязок) як *АргументІнетЗвʼязку;
змінна М = ас.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_звʼязку = аз.прт_звʼязок.предмет як *СкладенийПредмет;
змінна предмет_обробник_помилки_звʼязку: *Предмет = пусто;
якщо ас.прт_обробник_помилки_звʼязку != пусто {
предмет_обробник_помилки_звʼязку = ас.прт_обробник_помилки_звʼязку.предмет;
}
якщо предмет_обробник_помилки_звʼязку == пусто {
вернути;
}
змінна кількість_задіяних = п32(3);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
змінна предмет_помилки = створити_помилку(
М,
отримати_текст_інет_помилки(М, помилка),
);
змінити_властивість(
М,
ПРЕДМЕТ(предмет_помилки),
М.константи_назв._код,
ЧИСЛО(р64(помилка)),
МІСЦЕю8(М, ю8"вм://бібліотека/інет/служити.ц", 0),
);
дані_задіяних[0] = ПРЕДМЕТ(предмет_звʼязку);
дані_задіяних[1] = ПРЕДМЕТ(предмет_помилки);
дані_задіяних[2] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_помилки_звʼязку,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_відключення_звʼязку(адр_слуга: адреса, адр_звʼязок: адреса) {
змінна ас = бібліотека_мавки_інет_отримати_аргумент_слуги(адр_слуга) як *АргументІнетСлуги;
змінна акс = бібліотека_мавки_інет_отримати_аргумент_звʼязку(адр_звʼязок) як *АргументІнетЗвʼязку;
змінна М = акс.М;
змінна предмет_слуги = ас.прт_слуга.предмет;
змінна предмет_звʼязку = акс.прт_звʼязок.предмет як *СкладенийПредмет;
змінна кдз = предмет_звʼязку.користувацькі_дані.значення як *КористувацькіДаніІнетЗвʼязку;
змінна предмет_обробник_відключення_звʼязку: *Предмет = пусто;
кдз.адр_звʼязок = пусто;
якщо ас.прт_обробник_відключення_звʼязку != пусто {
предмет_обробник_відключення_звʼязку = ас.прт_обробник_відключення_звʼязку.предмет;
}
якщо предмет_обробник_відключення_звʼязку == пусто {
вернути;
}
змінна кількість_задіяних = п32(3);
змінна дані_задіяних = виділити<Значення>(М, природне(кількість_задіяних));
дані_задіяних[0] = ПРЕДМЕТ(предмет_звʼязку);
дані_задіяних[2] = ПРЕДМЕТ(предмет_слуги);
здійснити_предмет(
М,
предмет_обробник_відключення_звʼязку,
кількість_задіяних,
дані_задіяних,
);
}
внутрішня дія обробник_знищення(аргумент_слуги: адреса) {
змінна ас = аргумент_слуги як *АргументІнетСлуги;
змінна М = ас.М;
якщо ас.прт_слуга != пусто {
відпустити_притриманий_глобально(М, ас.прт_слуга);
}
якщо ас.прт_обробник_підключення_звʼязку != пусто {
відпустити_притриманий_глобально(М, ас.прт_обробник_підключення_звʼязку);
}
якщо ас.прт_обробник_даних_звʼязку != пусто {
відпустити_притриманий_глобально(М, ас.прт_обробник_даних_звʼязку);
}
якщо ас.прт_обробник_стікання_звʼязку != пусто {
відпустити_притриманий_глобально(М, ас.прт_обробник_стікання_звʼязку);
}
якщо ас.прт_обробник_закінчення_звʼязку != пусто {
відпустити_притриманий_глобально(М, ас.прт_обробник_закінчення_звʼязку);
}
якщо ас.прт_обробник_помилки_звʼязку != пусто {
відпустити_притриманий_глобально(М, ас.прт_обробник_помилки_звʼязку);
}
якщо ас.прт_обробник_відключення_звʼязку != пусто {
відпустити_притриманий_глобально(М, ас.прт_обробник_відключення_звʼязку);
}
звільнити(М, ас);
}
внутрішня дія рідна_дія__служити(
М: *Машина,
діяльність: *Діяльність
) -> ЗначенняАбоСтанПадіння {
змінна задіяне_іа = НЕДІЙСНЕ;
змінна знайдено_задіяне_іа = ні;
змінна задіяне_порт = НЕДІЙСНЕ;
змінна знайдено_задіяне_порт = ні;
змінна задіяне_формат = НЕДІЙСНЕ;
змінна знайдено_задіяне_формат = ні;
змінна задіяне_обробник_запуску = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_запуску = ні;
змінна задіяне_обробник_помилки = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_помилки = ні;
змінна задіяне_обробник_зупинки = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_зупинки = ні;
змінна задіяне_обробник_підключення_звʼязку = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_підключення_звʼязку = ні;
змінна задіяне_обробник_даних_звʼязку = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_даних_звʼязку = ні;
змінна задіяне_обробник_стікання_звʼязку = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_стікання_звʼязку = ні;
змінна задіяне_обробник_закінчення_звʼязку = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_закінчення_звʼязку = ні;
змінна задіяне_обробник_помилки_звʼязку = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_помилки_звʼязку = ні;
змінна задіяне_обробник_відключення_звʼязку = НЕДІЙСНЕ;
змінна знайдено_задіяне_обробник_відключення_звʼязку = ні;
знайдено_задіяне_іа = знайти_задіяне(М, діяльність.задіяні, 0, М.константи_назв._іа, задіяне_іа::адреса);
знайдено_задіяне_порт = знайти_задіяне(М, діяльність.задіяні, 1, М.константи_назв._порт, задіяне_порт::адреса);
знайдено_задіяне_формат = знайти_задіяне(М, діяльність.задіяні, 2, М.константи_назв._формат, задіяне_формат::адреса);
знайдено_задіяне_обробник_запуску = знайти_задіяне(М, діяльність.задіяні, 3, М.константи_назв._обробник_запуску, задіяне_обробник_запуску::адреса);
знайдено_задіяне_обробник_помилки = знайти_задіяне(М, діяльність.задіяні, 4, М.константи_назв._обробник_помилки, задіяне_обробник_помилки::адреса);
знайдено_задіяне_обробник_зупинки = знайти_задіяне(М, діяльність.задіяні, 5, М.константи_назв._обробник_зупинки, задіяне_обробник_зупинки::адреса);
знайдено_задіяне_обробник_підключення_звʼязку = знайти_задіяне(М, діяльність.задіяні, 6, М.константи_назв._обробник_підключення_звʼязку, задіяне_обробник_підключення_звʼязку::адреса);
знайдено_задіяне_обробник_даних_звʼязку = знайти_задіяне(М, діяльність.задіяні, 7, М.константи_назв._обробник_даних_звʼязку, задіяне_обробник_даних_звʼязку::адреса);
знайдено_задіяне_обробник_стікання_звʼязку = знайти_задіяне(М, діяльність.задіяні, 8, М.константи_назв._обробник_стікання_звʼязку, задіяне_обробник_стікання_звʼязку::адреса);
знайдено_задіяне_обробник_закінчення_звʼязку = знайти_задіяне(М, діяльність.задіяні, 9, М.константи_назв._обробник_закінчення_звʼязку, задіяне_обробник_закінчення_звʼязку::адреса);
знайдено_задіяне_обробник_помилки_звʼязку = знайти_задіяне(М, діяльність.задіяні, 10, М.константи_назв._обробник_помилки_звʼязку, задіяне_обробник_помилки_звʼязку::адреса);
знайдено_задіяне_обробник_відключення_звʼязку = знайти_задіяне(М, діяльність.задіяні, 11, М.константи_назв._обробник_відключення_звʼязку, задіяне_обробник_відключення_звʼязку::адреса);
змінна іа_вид: природне;
змінна іа_дані: *п8;
змінна іа_розмір: природне;
змінна треба_звільнити_іа_дані = ні;
змінна порт: природне;
змінна як_текст = ні;
змінна предмет_обробник_запуску: *Предмет;
змінна предмет_обробник_помилки: *Предмет;
змінна предмет_обробник_зупинки: *Предмет;
змінна предмет_обробник_підключення_звʼязку: *Предмет;
змінна предмет_обробник_даних_звʼязку: *Предмет;
змінна предмет_обробник_стікання_звʼязку: *Предмет;
змінна предмет_обробник_закінчення_звʼязку: *Предмет;
змінна предмет_обробник_помилки_звʼязку: *Предмет;
змінна предмет_обробник_відключення_звʼязку: *Предмет;
якщо не знайдено_задіяне_іа {
змінна нульова_іа = ю8"0.0.0.0";
іа_вид = БІБЛІОТЕКА_МАВКИ_ВИД_ІА_ІП4;
іа_дані = нульова_іа.дані;
іа_розмір = нульова_іа.розмір;
треба_звільнити_іа_дані = ні;
} інакше якщо задіяне_іа.вид == ЗПредмет {
змінна предмет_іа = задіяне_іа.дані як *Предмет;
якщо предмет_іа.клас == М.клас_Дані {
змінна предмет_даних = предмет_іа як *ПредметДаних;
іа_вид = БІБЛІОТЕКА_МАВКИ_ВИД_ІА_ІП6;
іа_дані = предмет_даних.дані;
іа_розмір = предмет_даних.розмір;
треба_звільнити_іа_дані = ні;
} інакше якщо предмет_іа.клас == М.клас_Текст {
змінна предмет_тексту = предмет_іа як *ПредметТексту;
змінна іа_ю8: ю8;
змінна позиція_помилки: природне;
змінна успіх = перекодувати_кд_в_ю8(
М,
предмет_тексту.значення,
іа_ю8::адреса,
позиція_помилки::адреса
);
якщо не успіх {
вернути ПАДІННЯ(М, створити_текст(М, "Не вдалось перекодувати іа в ю8."));
}
іа_вид = БІБЛІОТЕКА_МАВКИ_ВИД_ІА_ІП4;
іа_дані = іа_ю8.дані;
іа_розмір = іа_ю8.розмір;
треба_звільнити_іа_дані = так;
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"іа\" має бути текстом або даними."));
}
якщо не знайдено_задіяне_порт {
порт = 0;
} інакше якщо задіяне_порт.вид == ЗЧисло {
порт = природне(задіяне_порт.дані як р64);
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"порт\" має бути числом."));
}
якщо не знайдено_задіяне_порт {
порт = 0;
} інакше якщо задіяне_порт.вид == ЗЧисло {
порт = природне(задіяне_порт.дані як р64);
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"порт\" має бути числом."));
}
якщо знайдено_задіяне_формат {
якщо задіяне_формат.вид == ЗПредмет {
змінна пф = задіяне_формат.дані як *Предмет;
якщо пф == М.клас_Дані {
} інакше якщо пф == М.клас_Текст {
як_текст = так;
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"формат\" має бути класом Дані або Текст!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"формат\" має бути класом Дані або Текст!"));
}
}
якщо не знайдено_задіяне_обробник_запуску {
предмет_обробник_запуску = пусто;
} інакше якщо задіяне_обробник_запуску.вид == ЗПредмет {
предмет_обробник_запуску = задіяне_обробник_запуску.дані як *Предмет;
якщо предмет_обробник_запуску.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_запуску\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_запуску\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_помилки {
предмет_обробник_помилки = пусто;
} інакше якщо задіяне_обробник_помилки.вид == ЗПредмет {
предмет_обробник_помилки = задіяне_обробник_помилки.дані як *Предмет;
якщо предмет_обробник_помилки.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_помилки\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_помилки\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_зупинки {
предмет_обробник_зупинки = пусто;
} інакше якщо задіяне_обробник_зупинки.вид == ЗПредмет {
предмет_обробник_зупинки = задіяне_обробник_зупинки.дані як *Предмет;
якщо предмет_обробник_зупинки.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_зупинки\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_зупинки\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_підключення_звʼязку {
предмет_обробник_підключення_звʼязку = пусто;
} інакше якщо задіяне_обробник_підключення_звʼязку.вид == ЗПредмет {
предмет_обробник_підключення_звʼязку = задіяне_обробник_підключення_звʼязку.дані як *Предмет;
якщо предмет_обробник_підключення_звʼязку.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_підключення_звʼязку\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_підключення_звʼязку\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_даних_звʼязку {
предмет_обробник_даних_звʼязку = пусто;
} інакше якщо задіяне_обробник_даних_звʼязку.вид == ЗПредмет {
предмет_обробник_даних_звʼязку = задіяне_обробник_даних_звʼязку.дані як *Предмет;
якщо предмет_обробник_даних_звʼязку.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_даних_звʼязку\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_даних_звʼязку\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_стікання_звʼязку {
предмет_обробник_стікання_звʼязку = пусто;
} інакше якщо задіяне_обробник_стікання_звʼязку.вид == ЗПредмет {
предмет_обробник_стікання_звʼязку = задіяне_обробник_стікання_звʼязку.дані як *Предмет;
якщо предмет_обробник_стікання_звʼязку.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_стікання_звʼязку\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_стікання_звʼязку\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_закінчення_звʼязку {
предмет_обробник_закінчення_звʼязку = пусто;
} інакше якщо задіяне_обробник_закінчення_звʼязку.вид == ЗПредмет {
предмет_обробник_закінчення_звʼязку = задіяне_обробник_закінчення_звʼязку.дані як *Предмет;
якщо предмет_обробник_закінчення_звʼязку.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_закінчення_звʼязку\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_закінчення_звʼязку\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_помилки_звʼязку {
предмет_обробник_помилки_звʼязку = пусто;
} інакше якщо задіяне_обробник_помилки_звʼязку.вид == ЗПредмет {
предмет_обробник_помилки_звʼязку = задіяне_обробник_помилки_звʼязку.дані як *Предмет;
якщо предмет_обробник_помилки_звʼязку.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_помилки_звʼязку\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_помилки_звʼязку\" має бути дією!"));
}
якщо не знайдено_задіяне_обробник_відключення_звʼязку {
предмет_обробник_відключення_звʼязку = пусто;
} інакше якщо задіяне_обробник_відключення_звʼязку.вид == ЗПредмет {
предмет_обробник_відключення_звʼязку = задіяне_обробник_відключення_звʼязку.дані як *Предмет;
якщо предмет_обробник_відключення_звʼязку.клас != М.клас_Дія {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_відключення_звʼязку\" має бути дією!"));
}
} інакше {
вернути ПАДІННЯ(М, створити_текст(М, "Задіяне \"обробник_відключення_звʼязку\" має бути дією!"));
}
змінна ас = виділити<АргументІнетСлуги>(М, 1);
ас.М = М;
ас.як_текст = як_текст;
ас.прт_слуга = пусто;
якщо предмет_обробник_запуску != пусто {
ас.прт_обробник_запуску = притримати_глобально(М, предмет_обробник_запуску);
}
якщо предмет_обробник_помилки != пусто {
ас.прт_обробник_помилки = притримати_глобально(М, предмет_обробник_помилки);
}
якщо предмет_обробник_зупинки != пусто {
ас.прт_обробник_зупинки = притримати_глобально(М, предмет_обробник_зупинки);
}
якщо предмет_обробник_підключення_звʼязку != пусто {
ас.прт_обробник_підключення_звʼязку = притримати_глобально(М, предмет_обробник_підключення_звʼязку);
}
якщо предмет_обробник_даних_звʼязку != пусто {
ас.прт_обробник_даних_звʼязку = притримати_глобально(М, предмет_обробник_даних_звʼязку);
}
якщо предмет_обробник_стікання_звʼязку != пусто {
ас.прт_обробник_стікання_звʼязку = притримати_глобально(М, предмет_обробник_стікання_звʼязку);
}
якщо предмет_обробник_закінчення_звʼязку != пусто {
ас.прт_обробник_закінчення_звʼязку = притримати_глобально(М, предмет_обробник_закінчення_звʼязку);
}
якщо предмет_обробник_помилки_звʼязку != пусто {
ас.прт_обробник_помилки_звʼязку = притримати_глобально(М, предмет_обробник_помилки_звʼязку);
}
якщо предмет_обробник_відключення_звʼязку != пусто {
ас.прт_обробник_відключення_звʼязку = притримати_глобально(М, предмет_обробник_відключення_звʼязку);
}
бібліотека_мавки_інет_служити(
іа_вид,
іа_дані,
іа_розмір,
порт,
обробник_запуску,
обробник_помилки,
обробник_зупинки,
ас,
обробник_знищення,
обробник_підключення_звʼязку,
обробник_даних_звʼязку,
обробник_стікання_звʼязку,
обробник_закінчення_звʼязку,
обробник_помилки_звʼязку,
обробник_відключення_звʼязку,
);
якщо треба_звільнити_іа_дані {
звільнити(М, іа_дані);
}
вернути НЕДІЙСНЕ;
}
дія записати_дію__інет__служити(
М: *Машина,
предмет_модуля: *ПредметМодуля
) {
змінна кількість_параметрів = природне(12);
змінна дані_параметрів = виділити<Значення>(М, кількість_параметрів);
дані_параметрів[0] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._іа,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[1] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._порт,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[2] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._формат,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[3] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_запуску,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[4] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_помилки,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[5] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_зупинки,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[6] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_підключення_звʼязку,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[7] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_даних_звʼязку,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[8] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_стікання_звʼязку,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[9] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_закінчення_звʼязку,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[10] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_помилки_звʼязку,
пусто,
НЕДІЙСНЕ
));
дані_параметрів[11] = ПРЕДМЕТ(створити_параметр(
М,
М.константи_назв._обробник_відключення_звʼязку,
пусто,
НЕДІЙСНЕ
));
змінна д = створити_рідну_дію(
М,
М.константи_назв._служити,
створити_послідовність_без_копіювання(
М,
кількість_параметрів,
дані_параметрів
),
пусто,
рідна_дія__служити,
пусто
);
записати_властивість_модуля(
М,
предмет_модуля,
М.константи_назв._служити,
ПРЕДМЕТ(д)
);
}
}
}