Середовище програмування MADL

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Середовище програмування MADL » MADL2023 » MD00 » MD00. Процедури, функції їх коди та їх опис


MD00. Процедури, функції їх коди та їх опис

Сообщений 1 страница 35 из 35

1

2

Procedure SetAddrRAM(e:Cardinal);{CodeProc=1#}

Тип1. Основні процедури (функції) компілятора.

Задається адреса, куди буде компілюватись подальший потік коду. Якщо адреса більша за 49151, видається відповідна помилка. Також видається помилка якщо в цю адресу вже було компілювання.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

3

Procedure DB(e:Cardinal);{CodeProc=2#}

Тип1. Основні процедури (функції) компілятора.

Процедура додає байт даних в код КР580. Якщо адреса більша за 49151, видається відповідна помилка. Також видається помилка якщо на цю адресу вже було компілювання.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

4

Procedure StartProgram;{CodeProc=3#}

Тип1. Основні процедури (функції) компілятора.

Обов'язкова команда будь-якої програми, яка вказує точку старту програми.
У разі відсутності буде видано помилку.

Можливі помилки компіляції:
5='* Повторне вказання точки старту ( StartProgram; ).'

5

Procedure INITCompiler;{CodeProc=4}

Тип1. Основні процедури (функції) компілятора.

Ініціалізація компілятора. Процедура є обов'язковою і має у програмі перебувати першою. Усі процедури компілятора до INITCompiler будуть "анульовані".

6

Function FINALCompiler:Boolean;{CodeProc=5#}

Тип1. Основні процедури (функції) компілятора.

Функція є обов'язковою і має бути останньою. Функція виконує фінальну компіляцію програми та у разі вдалої компіляції програми запускає програму на виконання згідно встановленим прапором SetfSEi, SetfSaveLVT, SetfSE,SetfCLU Функція повертає результат компіляції програми, True - вдала компіляція, False - НЕ вдала компіляція,тобто у процесі компіляції виникли помилки.

Можливі помилки компіляції:
3='* Не вказано точку старту ( StartProgram; ).'
4='* Відсутність коду в програмі.'
6='* Відсутня ініціалізація програми.'

7

Procedure REM(S:String255);{CodeProc=6}

Тип1. Основні процедури (функції) компілятора.

Ремарки.
Необов'язкова процедура виключно для користувача. Може бути корисною при помилках компіляції.
При виведенні помилки компіляції вказується (останній) Rem до виникнення помилки. У процедурі в принципі допустимі будь-які символи, але рекомендується використання лише друкованих. Максимальна довжина коментаря 255 символів. У звіті про помилки "RemStrERR:="

8

Procedure SetNameInternal(s:String6);{CodeProc=7}

Тип4. Процедури встановлення ім'я програми та файлу.

Встановлює ім'я програми "всередині" файлу ЛВТ, тобто. ім'я яке буде висвічуватись при завантаженні ЛВТ-файлу в ПК-01 або емуляторах. За замовчуванням ім'я дорівнює '      ', (6 пробілів). Ім'я задається в ANSI кодуванні та перекодується в КОІ. Однак, якщо ви хочете задати ім'я "на пряму" в КОІ кодуванні скористайтеся процедурою SetNameInternalKOI яку використовує цю процедуру.

Примітка.
Процедура, може бути використана скільки завгодно раз у будь-якому місці. Проте, для зрозумілості рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і всього лише один раз.

9

Procedure FillChar(Count,e:Cardinal);{CodeProc=8#}

Тип1. Основні процедури (функції) компілятора.

Додає до коду програми, код(e), у кількості(Count). Якщо Count=0, додавання ігнорується. Власне, аналог процедури DB, лише у циклі.

Примітка.
Виконується швидше, ніж кілька DB.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

10

Procedure ComA(COM:Cardinal);{CodeProc=9#}

Тип1. Основні процедури (функції) компілятора.

Процедурою ComA, обробляються однобайтові процедури-команди-КР580. Тобто будь яка однобайтова процедура-команда-КР580 використовує процедуру ComA. В принципі, користувач теж може використовувати цю процедуру, тільки слід врахувати той факт, що в неї немає перевірки на помилки та її потрібно використовувати тільки правильно, тобто, неприпустиме "плутане" використання цих процедур, - процедура ComAвиключно для ОДНОБАЙТОВИХ кодів команд-КР580.

У разі неправильного використання процедур результуючий код буде неправильним і видачі помилки не буде!

Приклад використання процедури командою-КР580 середовищем MADL:

Код:
{40}Procedure MovBB;Begin ComA($40);end;

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

11

Procedure ComB(COM,Value:Cardinal);{CodeProc=10#}

Тип1. Основні процедури (функції) компілятора.

Процедурою ComB, обробляються двобайтові процедури-команди-КР580.Тобто будь яка двубайтова процедура-команда-КР580 використовує процедуру ComB. В принципі, користувач теж може використовувати цю процедуру, тільки слід врахувати той факт, що в неї немає перевірки на помилки та її потрібно використовувати тільки правильно, тобто, неприпустиме "плутане" використання цих процедур, - процедура ComB виключно для ДВУБАЙТОВИХ кодів команд-КР580, де значення Value має бути 0..255.

У разі неправильного використання процедур результуючий код буде неправильним і видачі помилки не буде!

Приклад використання процедури командою-КР580:

Код:
{06}Procedure MviB(e:Cardinal);Begin ComB($06,e);end;

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

12

Procedure ComC(COM,Value:Cardinal);{CodeProc=11#}

Тип1. Основні процедури (функції) компілятора.

Процедурою ComC, обробляються трибайтові процедури-команди-КР580. Тобто будь яка трибайтова процедура-команда-КР580 використовує процедуру ComC. В принципі, користувач теж може використовувати цю процедуру, тільки слід врахувати той факт, що в неї немає перевірки на помилки та її потрібно використовувати тільки правильно, тобто, неприпустиме "плутане" використання цих процедур, - процедура ComC виключно для ТРИБАЙТОВИХ кодів команд-КР580, де значення Value має бути 0..65535.

У разі неправильного використання процедур результуючий код буде неправильним і видачі помилки не буде!

Приклад використання процедури командою-КР580:

Код:
{01}Procedure LxiBC(e:Cardinal);Begin ComC($01,e);end;

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

13

Procedure FillDB(var arr:array of Byte; BeginPos, count:Cardinal);{CodeProc=12#}

Тип1. Основні процедури (функції) компілятора.

Додає у програму код який у масиві (arr:array of Byte), з позиції у масиві BeginPos у кількості байт масиву Count. Якщо Count=0, додавання ігнорується Якщо BeginPos більший за розмір масиву, додавання ігнорується. Якщо BeginPos+Count виходить за межі масиву, додавання буде до кінця масиву.
Наприклад, якщо масив
Var arr:array[0..7] of Byte=($00,$00,$00,$00,$01,$39,$A5,$2F);
Виконати процедуру FillDB (arr, 3, 5);
До програми буде додано DB($00);DB($01);DB($39);DB($A5);DB($2F);

Примітка.
Відлік масиву ведеться із нульового значення. Для додавання з першого до останнього значення масиву, розмір якого ще й наперед не відомий, використовуйте процедуру FillDB ось так: FillDB (arr, 0, $ FFFFFFFF);

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

14

Procedure SetFullNameLVTfile(s:String255);{CodeProc=13}

Тип4. Процедури встановлення ім'я програми та файлу.

Встановлюється ім'я для скомпілованого файлу LVT. Ім'я можна встановлювати як коротке (у поточній директорії) і довге, тобто. повний шлях, наприклад "c:\LVT\_res.LVT" За замовченням назва "_res.LVT" (створюється в поточній директорії).

Примітка.
Директорії на шляху збереження файлу повинні існувати. Інакше буде збій компілятора.

Примітка.
Процедура, може бути використана скільки завгодно раз у будь-якому місці. Проте, для зрозумілості рекомендую використовувати на початку компіляції (відразу після INITCompiler) і всього лише один раз.

15

Procedure SetfSaveLVT(b:Boolean);{CodeProc=14}

Тип2. Процедури успішної компіляції.

Прапор "записати у файл LVT" при успішній компіляції. Якщо встановлено прапор у True, то створюється скомпільований LVT-файл. У випадку з b = false, файл не створюється, але компіляція та діагностика на помилки відбувається. Корисно відключати створення LVT-файлу, під час трасування програми, якщо встановлено використання внутрішнього емулятора SetfSEi(true). Для зовнішніх емуляторів SetfSaveLVT(True); обов'язково, інакше їм відкривати нічого буде :-)

Примітка.
Прапор не впливає на код програми, що компілюється, впливає лише на хід роботи самого компілятора.

Примітка.
За умовчанням, після успішної компіляції програми (після виконання функції FINALCompiler, при встановлених прапорах за замовчуванням, SetfSEi(true); SetfSaveLVT(true), решта = False), результат зберігається в "_res.LVT", далі запускається скомпільована програма внутрішньому емуляторі Sedll.dll. Однак, якщо Вас чимось не влаштовує такий хід компілятора, його можна змінити. Всі установки, звичайно повинні бути виконані після процедури INITCompiler і до функції FINALCompiler.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці.
Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

16

Procedure SetfSE(b:Boolean);{CodeProc=15}

Тип2. Процедури успішної компіляції.

Прапор запуску зовнішнього "SE-для-Мадл" (SE.exe) емулятора. Якщо b=true, компілятор запускає зовнішній "SE-для-Мадл" (\SE\SE.exe) емулятор. Якщо b=False, компілятор НЕ запускає зовнішній "SE-для-Мадл" (\SE\SE.exe) емулятор.

Примітка.
Процедура працює при SetfSaveLVT(true). При цьому запуск внутрішнього емулятора та запуск командного рядка призначеного користувачем повинні бути вимкнені SetfSEi(false); SetfCLU(false), хоча це за бажанням :-)

Увага!
Зовнішній емулятор «SE.exe» налаштований виключно для зовнішнього імені файлу _res.LVT. Тому для його роботи не потрібно змінювати зовнішнє ім'я файлу процедурою SetFullNameLVTfile. Або ж скористатися емулятором призначеним користувачем,процедури SetfCLU, SetCLU.

Примітка.
Прапор не впливає на код програми, що компілюється, впливає лише на хід роботи самого компілятора.

Примітка.
За умовчанням, після успішної компіляції програми (після виконання функції FINALCompiler, при встановлених прапорах за замовчуванням, SetfSEi(true); SetfSaveLVT(true), решта = False), результат зберігається в "_res.LVT", далі запускається скомпільована програма внутрішньому емуляторі Sedll.dll. Однак, якщо Вас чимось не влаштовує такий хід компілятора, його можна змінити.Всі установки, звичайно повинні бути виконані після процедури INITCompiler і до функції FINALCompiler.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після  INITCompiler; ) і лише один раз.

17

Procedure SetCLU(s:String255);{CodeProc=16}

Тип2. Процедури успішної компіляції.

Процедурою призначається командний рядок користувача, який запуститься на виконання у разі успішної компіляції.
Наприклад,

* можна призначити запуск емулятора "SASemulator1.44Beta"
ось так ввівши ПОВНИЙ ШЛЯХ у SetCLU
"...\SASemulator1.44Beta\SASEmulator_.exe.LVT _res.LVT"

* можна призначити запуск емулятора "Башкирія"
ось так ввівши ПОВНИЙ ШЛЯХ у SetCLU
"...\Башкирія\EMU.exe _res.LVT"

* можна призначити запуск емулятора "LVOVulator"
ось так ввівши ПОВНИЙ ШЛЯХ у SetCLU
"...\LVOVulator\LVOVulator.exe _res.LVT"

Примітка.
Прапор не впливає на код програми, що компілюється, впливають лише перебіг роботи самого компілятора.

Примітка.
За умовчанням, після успішної компіляції програми (після виконання функції FINALCompiler, при встановлених прапорах за замовчуванням, SetfSEi(true) SetfSaveLVT(true), решта = False), результат зберігається в "_res.LVT", далі запускається скомпільована програма внутрішньому емуляторі Sedll.dll.
Однак, якщо Вас чимось не влаштовує такий хід компілятора, його можна змінити. Всі установки, звичайно повинні бути виконані після процедури INITCompiler і до функції FINALCompiler.

Примітка.
Процедура працює при SetfSaveLVT(true). При цьому запуск внутрішнього та зовнішнього емулятора мають бути відключені SetfSEi(false);SetfSE(false), хоча це за бажанням :-)
Зверніть увагу на приклади командних рядків користувача.
В кінці запуску емулятора, як параметр емулятора повинен бути прописаний файл, який в SetFullNameLVTfile (в даному випадку це "_res.LVT").
Ці приклади перевірялися і всі працювали. Якщо дані приклади чомусь не працюють, тобто. не запускаються емулятори, спробуйте це вирішити через запуск BAT-файлу.

Примітка.
Запуск BAT-файлу на прикладі procedure SetErrorCLU(s:String255);. При випробуванні notepad.exe як переглядач звіту, наступні рядки чомусь не працювали SetErrorCLU('notepad.exe Error.txt');
і SetErrorCLU('C:\windows\notepad.exe Error.txt'), notepad.exe не запускався.
Я вже не знаю, як там з іншими редакторами (переглядачами), не перевіряв, а також запустився б notepad.exe якби він знаходився до каталогу МАДЛу,але в даному випадку я знайшов вихід, щоб запускати BAT-файл.Тобто. в SetErrorCLU задається рядок подібний "view.bat Error.txt". У файлі view.bat прописується наступне "c:\windows\notepad.exe %1".Таке точно працює.

18

Procedure SetfCLU(b:Boolean);{CodeProc=17}

Тип2. Процедури успішної компіляції.

Прапор включає запуск командного рядка, призначеного користувачем процедурою SetCLU. якщо b=true, компілятор запускає командний рядок SetCLU, якщо b=false, компілятор не запускає командний рядок SetCLU.

Примітка.
Прапор не впливає на код програми, що компілюється,впливає лише на хід роботи самого компілятора.

Примітка.
За умовчанням, після успішної компіляції програми (після виконання функції FINALCompiler, при встановлених прапорах за замовчуванням,SetfSEi(true), SetfSaveLVT(true);, решта = False), результат зберігається в "_res.LVT", далі запускається скомпільована програма внутрішньому емуляторі Sedll.dll. Однак, якщо Вас чимось не влаштовує такий хід компілятора, його можна змінити. Всі установки, звичайно повинні бути виконані після процедури INITCompiler і до функції FINALCompiler.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

19

Procedure SetfSEi(b:Boolean);{CodeProc=18}

Тип2. Процедури успішної компіляції.

Прапор запуску внутрішнього емулятора SEdll.dll. якщо b=true, компілятор запускає внутрішній емулятор SEdll.dll, якщо b = false, компілятор НЕ запускає внутрішній емулятор SEdll.dll. За замовчуванням b=true.

Примітка.
Прапор не впливає на код програми, що компілюється, впливає лише на хід роботи самого компілятора.

Примітка.
За умовчанням, після успішної компіляції програми (після виконання функції FINALCompiler, при встановлених прапорах за замовчуванням, SetfSEi(true); SetfSaveLVT(true);, решта = False), результат зберігається в "_res.LVT", далі запускається скомпільована програма внутрішньому емуляторі Sedll.dll. Однак, якщо Вас чимось не влаштовує такий хід компілятора, його можна змінити. Всі установки, звичайно повинні бути виконані після процедури INITCompiler і до функції FINALCompiler.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

20

Procedure SetNameInternalKOI(s:String6);{CodeProc=19}

Тип4. Процедури встановлення ім'я програми та файлу.

Встановлює ім'я програми всередині файлу ЛВТ, тобто. ім'я яке буде висвічуватись при завантаженні ЛВТ-файлу в ПК-01 або емуляторах. Ім'я має бути в кодуванні КОІ. За замовчуванням ім'я дорівнює '      ', (6 пробілів).

Примітка.
Процедура, може бути використана скільки завгодно раз у будь-якому місці. Проте, для зрозумілості рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і всього лише один раз.

21

Procedure SetFileOutError(s:String255);{CodeProc=20}

Тип3. Процедури невдалої компіляції.

Процедура встановлює ім'я файлу, в який буде виводиться інформація про помилку компіляції. За  замовчуванням це файл 'Error.txt'.

Примітка.
За замовчуванням, після не вдалої компіляції програми, згідно з встановленими прапорів SetfErrorTXTinFile(true) та SetfError(true). Відбувається виведення у файл 'Error.txt' (при SetFileOutError('Error.txt') ) звіту про помилку.
Далі запускається переглядач view.exe для перегляду файлу Error.txt.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

22

Procedure SetErrorCLU(s:String255);{CodeProc=21}

Тип3. Процедури невдалої компіляції.

Процедурою задається командний рядок користувача (разом з ім'ям файлу заданим у SetFileOutError) самостійно. Як приклад, "view.exe Error.txt". Працює процедура за SetfErrorfCLU(true).

Примітка.
При випробуванні notepad.exe як переглядач звіту, наступні рядки чомусь не працювали SetErrorCLU('notepad.exe Error.txt'); і SetErrorCLU('C:\windows\notepad.exe Error.txt'), notepad.exe не запускався. Я вже не знаю, як там з іншими редакторами (переглядачами), не перевіряв,
а також запустився б notepad.exe якби він знаходився до каталогу МАДЛу, але в даному випадку я знайшов вихід, щоб запускати BAT-файл.Тобто. в SetErrorCLU задається рядок подібний "view.bat Error.txt".
У файлі view.bat прописується наступне "c:\windows\notepad.exe %1".Таке точно працює.

Примітка.
За замовчуванням, після не вдалої компіляції програми, згідно з встановленими прапорів SetfErrorTXTinFile(true) та SetfError(true). Відбувається виведення у файл 'Error.txt' (при SetFileOutError('Error.txt'); ) звіту про помилку.
Далі запускається переглядач view.exe для перегляду файлу Error.txt.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую  використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

23

Procedure SetfError(b:Boolean);{CodeProc=22}

Тип3. Процедури невдалої компіляції.

Прапор переглядача.
Процедура встановлює або відключає, переглядач "view.exe",для перегляду файлу звіту, заданого процедурою SetFileOutError. Якщо b=true, запуск переглядача "view.exe" увімкнено. Якщо b=false, запуск переглядача "view.exe" вимкнено. За замовчуванням b=true

Примітка.
Прапор не впливає на код програми, що компілюється, впливають лише на хід роботи самого компілятора.

Примітка.
За замовчуванням, після не вдалої компіляції програми, згідно з встановленими прапорів SetfErrorTXTinFile(true) та SetfError(true). Відбувається виведення у файл 'Error.txt' (при SetFileOutError('Error.txt'); ) звіту про помилку. Далі запускається переглядач view.exe для перегляду файлу Error.txt.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

24

Procedure SetfErrorfCLU(b:Boolean);{CodeProc=23}

Тип3. Процедури невдалої компіляції.

Процедура встановлює прапор обробки командного рядка користувача SetErrorCLU. Якщо b=true, то запускається командний рядок користувача. Якщо b=false, командний рядок користувача не запускається.
За замовчуванням b=false. При установці ErrorfCLU(true), логічно відключити, переглядач "view.exe", процедурою SetfError(false) Хоча це за бажанням. :-)

Примітка.
Прапор не впливає на код програми, що компілюється,впливає лише на хід роботи самого компілятора.

Примітка.
За замовчуванням, після не вдалої компіляції програми, згідно з встановленими прапорів SetfErrorTXTinFile(true) та SetfError(true). Відбувається виведення у файл 'Error.txt' (при SetFileOutError('Error.txt'); ) звіту про помилку. Далі запускається переглядач view.exe для перегляду файлу Error.txt.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

25

Procedure SetfErrorTXTinFile(b:Boolean);{CodeProc=24}

Тип3. Процедури невдалої компіляції.

Процедура містить/виключає виведення помилок у файл. true = увімкнено виведення помилок у файл, false = вимкнено виведення помилок у файл За замовченням:true.

Примітка.
Якщо виключити виведення помилок у файл, слід врахувати, що багато процедур пов'язані з обробкою помилок, описані далі втрачають сенс.

Примітка.
Прапор не впливає на код програми, що компілюється, впливає лише на хід роботи самого компілятора.

Примітка.
За замовчуванням, після не вдалої компіляції програми, згідно з встановленими прапорів SetfErrorTXTinFile(true) та SetfError(true). Відбувається виведення у файл 'Error.txt' (при SetFileOutError('Error.txt') ) звіту про помилку. Далі запускається переглядач view.exe для перегляду файлу Error.txt.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую  використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

26

Procedure FillDW(var arr:array of Word;BeginPos,count:Cardinal);{CodeProc=28#}

Тип1. Основні процедури (функції) компілятора.

Додає до програми код який у масиві (arr:array of Word), з позиції у масиві BeginPos у кількості байт масиву Count. Якщо Count=0, додавання ігнорується Якщо BeginPos більший за розмір масиву, додавання ігнорується. Якщо BeginPos+Count виходить за межі масиву, додавання буде до кінця масиву.

Наприклад, якщо масив Var arr:array[0..7] of Word=($AE00, $1200, $E500, $E000, $3401, $4A39, $A895, $2FF); Виконати процедуру FillDW(arr, 3, 5); До програми буде додано  DW($E000);  DW($3401); DW($4A39); DW($A895); DW($2FF);

Примітка.
Відлік масиву ведеться із нульового значення. Для додавання з першого до останнього значення масиву, розмір якого ще й наперед не відомий, використовуйте процедуру FillDW ось так: FillDW(arr, 0, $ FFFFFFFF);

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

27

Procedure DW(e:Cardinal);{CodeProc=29#}

Тип1. Основні процедури (функції) компілятора.

Процедура додає 2 байти даних, тобто число типу Word. Якщо адреса більша за 49151, видається відповідна помилка. Також видається помилка якщо на цю адресу вже було компілювання.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

28

Procedure FillDD(var arr:array of Cardinal;BeginPos,count:Cardinal);{CodeProc=32#}

Тип1. Основні процедури (функції) компілятора.

Додає до програми код який у масиві (arr:array of Cardinal), з позиції у масиві BeginPos у кількості байт масиву Count. Якщо Count=0, додавання ігнорується Якщо BeginPos більший за розмір масиву, додавання ігнорується. Якщо BeginPos+Count виходить за межі масиву, додавання буде до кінця масиву.

Наприклад, якщо масив Var arr:array[0..7] of Cardinal =($E63FAE00, $12975200, $E2500, $AE0, $3BB4A01, $4EDF1A39, $AEABC895, $29283FF); Виконати процедуру FillDD(arr, 3, 5); До програми буде додано DD($AE0); DD($3BB4A01); DD($4EDF1A39); DD($AEABC895); DD($29283FF);

Примітка.
Відлік масиву ведеться із нульового значення. Для додавання з першого до останнього значення масиву,
розмір якого ще й наперед не відомий, використовуйте процедуру FillDD ось так: FillDD(arr, 0, $ FFFFFFFF);

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

29

Procedure DD(e:Cardinal);{CodeProc=33#}

Тип1. Основні процедури (функції) компілятора.

Процедура додає 4 байти даних, тобто. Число типу Cardinal (DWord). Якщо адреса більша за 49151, видається відповідна помилка. Також видається помилка якщо на цю адресу вже було компілювання.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

30

Procedure FillDQ(var arr:array of int64;BeginPos,count:Cardinal);{CodeProc=34#}

Тип1. Основні процедури (функції) компілятора.

Додає до програми код який у масиві (arr:array of int64),

з позиції у масиві BeginPos у кількості байт масиву Count. Якщо Count=0, додавання ігнорується Якщо BeginPos більший за розмір масиву, додавання ігнорується. Якщо BeginPos+Count виходить за межі масиву, додавання буде до кінця масиву.

Приклад аналогічний до процедури FillDB.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

31

Procedure DQ(e:int64);{CodeProc=35#}

Тип1. Основні процедури (функції) компілятора.

Процедура додає 8 байт даних, тобто. число типу INT64 (FPC,Delphi) Якщо адреса більша за 49151, видається відповідна помилка. Також видається помилка якщо на цю адресу вже було компілювання.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

32

Procedure Dstring255(s:String255);{CodeProc=37#}

Тип1. Основні процедури (функції) компілятора.

Додає до коду рядок  S типу  String255, по аналогії  DB в циклі, відповідно кількості символів в рядку S.
Якщо  S='' то додавання не відбувається, повідомлення про помилку теж не виникає.

Примітка.
Виконується швидше, ніж кілька DB.

Можливі помилки компіляції:
1='* Неприпустима адреса компіляції.'
2='* В адресу вже було компілювання.'

33

Procedure SetAddrRAM2;{CodeProc=38#}

Тип1. Основні процедури (функції) компілятора.

Процедура перевіряє  адресу компіляції і якщо адреса менш ніж $8000
то встановлює її рівної $8000.

Можливі помилки компіляції:
2='* В адресу вже було компілювання.'

34

Procedure SetFileOutReportMD00(s:String255);{CodeProc=39}

Тип2. Процедури успішної компіляції.

Процедура встановлює ім'я файлу, в який буде виводиться звіт компіляції. За замовчуванням це файл 'ReportMD00.txt'. Вивід звіту у файл залежить від встановленого прапору  SetReportMD00TXTinFile, якщо прапор дорівнює true, - вивід звіту відбувається, якщо   false, - вивід звіту НЕ відбувається. За замовченням  SetReportMD00TXTinFile(false);

Примітка.
Звіт відбувається лише у разі успішної компіляції.

Примітка.
Процедура не впливає на код програми, що компілюється, впливають лише на хід роботи самого компілятора.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

Примітка.
Якщо використовується "внутрішній" емулятор, то звіт створюється після закриття вікна запущеної програми в емуляторі.

Приклад звіту про компіляцію (в файлі звіту):

Звіт про компіляцію.
Результат компіляції, файл: ЛабиринтСАС-2018(1).lvt

Початкова адреса програми: $8000 (32768)
Кінцева адреса програми: $A189 (41353)
Адреса старту програми: $8000 (32768)

35

Procedure SetReportMD00TXTinFile(b:Boolean);{CodeProc=40}

Тип2. Процедури успішної компіляції.

Прапор виводу звіту в файл. якщо b=true, звіт виводиться в файл. якщо b = false, звіт НЕ виводиться в файл.
За замовчуванням b=false.

Примітка.
Звіт виводиться в файл лише у разі успішної компіляції.

Примітка.
За замовчуванням звіт виводиться в файл 'ReportMD00.txt'. Однак ім'я файлу може бути змінено процедурою SetFileOutReportMD00.

Примітка.
Прапор не впливає на код програми, що компілюється, впливає лише на хід роботи самого компілятора.

Примітка.
Процедури встановлення прапорів визначають подальший хід компілятора після не вдалої компіляції можуть бути використані скільки завгодно раз у будь-якому місці. Проте для зрозумілості, їх рекомендую використовувати на початку компіляції (відразу після INITCompiler; ) і лише один раз.

Примітка.
Якщо використовується "внутрішній" емулятор, то звіт створюється після закриття вікна запущеної програми в емуляторі.

Приклад звіту про компіляцію (в файлі звіту):

Звіт про компіляцію.
Результат компіляції, файл: ЛабиринтСАС-2018(1).lvt

Початкова адреса програми: $8000 (32768)
Кінцева адреса програми: $A189 (41353)
Адреса старту програми: $8000 (32768)


Вы здесь » Середовище програмування MADL » MADL2023 » MD00 » MD00. Процедури, функції їх коди та їх опис