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

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

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


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


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

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

1

Список процедур та їх кодів, які використовуються в MADL (MD01)
1.SetAddrRAM   2.DB   3.StartProgram   6.Rem   7.SetNameInternal   8.FillChar   9.ComA

10.ComB   11.ComC   12.FillDB   13.SetFullNameLVTfile   14.SetfSaveLVT   15.SetfSE

16.SetCLU   17.SetfCLU   18.SetfSEi   19.SetNameInternalKOI   20.SetFileOutError

21.SetErrorCLU   22.SetfError   23.SetfErrorfCLU   24.SetfErrorTXTinFile   28.FillDW   29.DW

32.FillDD   33.DD   34.FillDQ   35.DQ   37.DString255   38.SetAddrRAM2

39.SetFileOutReportMD00   40.SetReportMD00TXTinFile   41.INITCompiler

42.FINALCompiler   CLEAR   43.InitLabelLV   44.LabelA   45.Labelp1   46.Labelp2

47.SetNameLabelLV   48.SetCommentLabelLV   49.SetFileOutReportMD01

50.SetReportMD01TXTinFile   51.Clabel   52.Labelp   53.Labelm   54.LabelAadr   55.Abslt

56.SetIDMD03

Дивіться також:
     MADL2023     MD00
MD01. Вступ.
MD01. Процедури мнемонікою АСМ (КР580) в MADL
MD01. Процедури мнемонікою MADL в MADL
МD01. Помилки компіляції
Навігатор форуму

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. Основні процедури (функції) компілятора

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

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

5

Процедура INITCompiler, яка має код 4 в MD01 відсутня!
Замість неї використовується процедура INITCompiler;, яка має код 41.

6

Функція FINALCompiler, яка має код 5 в MD01 відсутня!
Замість неї використовується процедура FINALCompiler;, яка має код 42.

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. При установці SetfErrorfCLU(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)

36

Procedure INITCompiler;{CodeProc=41}

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

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

37

Function FINALCompiler:Boolean;{CodeProc=42#}

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

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

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

38

Procedure InitLabelLV(Var L:TLabelLV);{CodeProc=43}

Тип5. Процедури TLabelLV.

Будь-яка процедура, яка використовує мітки, використовує цю процедуру для перевірки мітки на ініціалізацію та для ініціалізації мітки у випадку необхідності. Якщо мітка не ініціалізована процедура призначає мітці індивідуальний код та перевірочний код IDXorCode який по суті є XOR індивідуального коду з випадковим числом на дану сесію запуску компілятора. Індивідуальний код призначається у випадку, якщо IDXorCode=0
або IDCode <> (IDXorCode xor RND). Призначається послідовно 1,2,3...і.д.
Як правило, користувачеві не потрібно використовувати цю процедуру, оскільки інші процедури обробляють мітки її використовують. В разі необхідності «обнулення», тобто. скасування ініціалізації якоїсь мітки, необхідно IDCode мітки "занулити" (IDCode=0), а ще краще зробити CLEAR, замість "занулення" (IDCode=0). Ця процедура більша призначена для розробника, тобто. для мене :-) може знадобиться в подальших частинах МАДЛ MD02, MD03, MD04 і т.д.

Примітка.
Не використовуйте CLEAR  та InitLabelLV там де явно немає потреби цього робити!

Можливі помилки компіляції:
15='* Кількість міток не повинна перевищувати 99999.'

39

Procedure LabelA(Var L:TLabelLV);{CodeProc=44#}

Тип5. Процедури TLabelLV.

Призначення мітки. Аналогічний в асемблерах ”m1:”, ”m2:”

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'

40

Procedure Labelp1(Var L:TLabelLV);{CodeProc=45#}

Тип5. Процедури TLabelLV.

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

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'

41

Procedure Labelp2(Var L:TLabelLV);{CodeProc=46#}

Тип5. Процедури TLabelLV.

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

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'

42

Procedure SetNameLabelLV(Var L:TLabelLV);{CodeProc=47#}

Тип5. Процедури TLabelLV.

Призначення імені мітки. Призначається один раз. Повторне призначення мітки є неприпустимим.
Мітка повинна складатися із символів:
0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

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

Можливі помилки компіляції:

43

Procedure SetCommentLabelLV(Var L:TLabelLV; CommentStr:String255);{CodeProc=48#}

Тип5. Процедури TLabelLV.

Коментар мітки.Призначається один раз. Повторне призначення коментаря мітки є неприпустимим. Символи допустимі будь-які. Застосовується в повідомленнях про помилки, звіт про компілювання тощо.

Можливі помилки компіляції:

44

Procedure SetFileOutReportMD01(s:String255);{CodeProc=49}

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

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

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

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

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

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

45

Procedure SetReportMD01TXTinFile(b:Boolean);{CodeProc=50}

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

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

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

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

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

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

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

46

Procedure Clabel(COM:Cardinal;var L:TLabelLV);{CodeProc=51}

Тип5. Процедури TLabelLV.

Процедура обробляє трьох-байтові команди КР580, що містять мітку. Аналогічна процедурі ComC.

Можливі помилки компіляції:

47

Procedure Labelp(Var L:TLabelLV; adjustment_of_address:Cardinal);{CodeProc=52#}

Тип5. Процедури TLabelLV.

Призначення мітки адресою на adjustment_of_address більше, ніж поточна адреса.

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'

48

Procedure Labelm(Var L:TLabelLV; adjustment_of_address:Cardinal);{CodeProc=53#}

Тип5. Процедури TLabelLV.

Призначення мітки адресою на adjustment_of_address менше, ніж поточна адреса.

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'

Отредактировано Admin (2023-03-05 14:55:02)

49

Procedure LabelAadr(var L:TLabelLV; address:Cardinal);{CodeProc=54#}

Тип5. Процедури TLabelLV.

Призначення мітки на конкретну адресу.

Приклад.
LabelAadr(L1, 3333);
Мітці L1 буде “прив'язана“ конкретна ЯП. Тобто еквівалентно, тому,
якщо на етапі компіляції при адресі  3333 буде дана команда LabelA(L1).

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'

50

Procedure Abslt(var L1:TLabelLV; offsetAdr:Integer; var L2:TLabelLV);{CodeProc=55#}

Тип5. Процедури TLabelLV.

{L1 absolute L2}
Процедура є аналогією процедури Absolute в  паскале-подібних мовах програмування.

Нагадаю приклад використання процедури  Absolute в  паскале-подібних мовах програмування, - var  Str: string[32];  StrLen: Byte absolute Str;
Даний код означає що змінні  Str та  StrLen будуть використовувати одну й ту ж область пам'яті та починатись з одного й того  ж адресу.

По такій же аналогії працює процедура Abslt. Вона робити “прив'язку” L1 до того ж адресу де знаходиться L2. Аналогічний код в МАДЛ виглядає ось так: LabelA(L1); LabelA(L2);  (або ж LabelA(L2);LabelA(L1); без різниці) тобто дві змінні розмічаються одна біля одної поспіль (незалежно від послідовності в даному випадку). На відміну від коду вище Abslt може знаходиться не поруч вже розміченої мітки а будь де далі (після розмітки  L2).
Наприклад,

Код:
LabelA(L2); 
{Тут будь який код}
Abslt(L1,0,L2); 

Варто зауважити, що змінна  L2, до використання Abslt, повинна бути визначена, однієї з процедур визначення LabelA, Labelp1, Labelp2, Labelp, Labelm, LabelAadr і т.д. а  змінна L1, не повинна бути визначена. В іншому випадку буде видача про помилку компіляції.

OffsetAdr, - вказує потрібне зміщення від адреси L2 (в мінусову чи то
в плюсову сторону). Якщо зміщення не потрібне вказується, - 0.

Примітка.
Команда базується на команді LabelAadr.

Можливі помилки компіляції:
10='* Повторна розмітка мітки.'
11='* Мітка не визначена.'

51

Procedure CLEAR(Var L:TLabelLV);

Тип5. Процедури TLabelLV.

Процедура очищення полів типу TLabelLV.

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

Код:
Procedure MACRO1;
L1:TLabelLV;
BEGIN
CLEAR(L1); {Якщо не зробити очищення L1, в полях L1 можуть залишитись попередні дані, (тобто з попереднього використання MACRO1;) та компілятор буде "вважати" що ця змінна вже ініціалізована, має код і т.д.}
{...........}
LabelA(L1);{ ... і ось в цьому місті буде видана помилка (якщо звісно не використати вище CLEAR(L1);) тому, що з попереднього використання MACRO1; змінна L1 вважатиметься _вже_ініціалізованої_та_розміченою}
END;

Примітка.
Не використовуйте CLEAR  та InitLabelLV там де явно немає потреби цього робити!

52

Procedure SetIDMD03(var L1:TLabelLV; IDMD03:Cardinal);{CodeProc=56}

Тип5. Процедури TLabelLV.

Ця процедура використовується МД03 для передачі ІД-коду мітці, який був призначений в  МД03. Тобто  МД01 (МД02) назначає новий ІД-код ('IDcode'), який буде скоріш за все відмінний від назначеного  ІД-коду мітці в МД03. Використовується це лише при видачі помилок ('ErrorLabel1.IDCodeMD03:=') та в звіті про компіляцію ('IDCodeMD03'). Якихось впливів на код та на хід компіляції ця процедура не робить. Користувач який користується МД01 (МД02) може її використовувати на свій розсуд. Або взагалі не використовувати.

Рекомендовано параметр IDMD03 встановлювати від 1 до 99999.


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