Програмування на системному рівні в Visual Prolog

Механізм функціонування Visual Prolog, яка має предикати для безпосереднього доступу до операційної системи. Розгляд предикатів, які дозволяють звертатися до ОС, предикатів побітової обробки чисел та підтримки низькорівневого режиму роботи з пам'яттю.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 02.07.2011
Размер файла 21,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ПРОГРАМУВАННЯ НА СИСТЕМНОМУ РІВНІ в Visual Prolog

предикат операційна побітовий пам'ять

Visual Prolog має декілька предикатів для безпосереднього доступу до операційної системи. Спочатку розглянемо предикати, які дозволяють звертатися до операційної системи, а потім - предикати побітової обробки чисел. Після цього розглянемо групу предикатів підтримки низькорівневого режиму роботи з пам'яттю.

Користуючись предикатами, можна включати можливість доступу до ОС безпосередньо з прикладної програми на Visual Prolog. Звернення до ОС можна виконувати викликом предиката system, звернення до утиліт формування дати і часу - предикатів date і time, за допомогою предиката em/symbol можливе отримання змінних середовища ОС, а за допомогою comline - читання аргументів командного рядка, з якими була викликана програма. Більш того, ви можете одержати стартовий каталог і ім'я програми викликом syspath, а предикати marktiine, timeout і sleep надають можливість встановлювати і очікувати настання встановленого моменту часу. Також існують предикати sound і beep, і, нарешті, osversion, що повертає версію ОС, diskspace, повертає об'єм вільного місця на диску, і три версії storage, які дозволяють визначати об'єм пам'яті, що використовується.

Нижче наведено декілька практичних прикладів використовування предикатів.

Предикат system/1

Програма на Visual Prolog отримує доступ до ОС через предикат system, що має вигляд:

system("command") % (i)

Якщо аргумент є порожнім рядком, то новий командний інтерпретатор буде запущений в інтерактивному режимі -- з'являється можливість звернення до ОС, наприклад, з клавіатури.

Наведемо два приклади:

1. Для копіювання файла B:\ORIGINAL.FIL у файл А:\NEWCOPY.FIL з системи Visual Prolog викличте:

system("")

Після цього скопіюйте файл, використовуючи звичайну команду ОС:

copy B:\ORIGINAL.FIL А:\NEWCOPY.FIL

Повернення до системи Visual Prolog виконується набором команди

exit

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

2. Для перейменування файла (без роботи безпосередньо в ОС) слід подати команду на зразок:

system("ren newcopy.fil newcopy.txt")

Предикат system/3

Ця розширена версія предиката system має дві додаткові можливості: за допомогою її можна дізнатися про рівень помилки ОС, а також перевизначити режим виведення на екран системи під час роботи з нею. Остання можливість при роботі з Windows ефекту не дає.

Вид предиката system/3:

system(CommandString, Resetvideo, ErrorLevel) % (i,i,o)

Тут змінна ErrorLevel зв'язується із значенням рівня помилки ОС. Це програмний код повернення, відомий ОС, коли програмі повертається управління, тобто в момент завершення виклику system.

У текстовому режимі DOS змінна Resetvideo повідомляє про необхідність повернення відеоапаратури у стан, в якому вона знаходилася перед обробкою предиката system/з. Значення Resetvideo = 1 повертає її у початкове положення, Resetvideo = 0 - не повертає. Якщо Resetvideo = 0, то виконання програми підтримуватиметься в екранному режимі, заданому вами. (Інформацію про встановлення режиму екрану див. у довідковому керівництві з відеоапаратури).

Предикат envsymbol/2

Предикат envsymbol виконує пошук змінних середовища у таблиці ОС. Ці змінні можуть бути встановлені командою операційної системи SET та іншими засобами ОС. Предикат envsymbol має вигляд:

envsymbol(EnvSymb, Value) % (i,o)

Наприклад, команда

SET SYSDIR=C:\FOOL

привласнює змінній sysdir рядок З:\FOOL, а мета

%...*/

envsymbolC'SYSDIR", SysDir)

%...*/

виконує пошук змінного середовища sysdir у таблиці змінних середовища і зв'язує SysDir із З:\FOOL.

Предикат envsymbol завершується неуспішно, якщо задана змінна середовища не визначена.

Предикати time/4 і date/3/4

Visual Prolog має два стандартні, часто використовувані предикати: date і time. Кожен з них може бути використаний двома способами, залежно від того, вільні або зв'язані змінні при виклику предиката.

Якщо всі змінні зв'язані, то предикат time перевизначає системний годинник на нове значення часу. Якщо змінні вільні, то система пов'язує їх із значеннями, одержаними від системного годинника.

time(Hours, Minutes, Seconds, Hundredths)

% (i, i,i,i) (о, про, 0,0)

Предикат date/з також пов'язаний з системним годинником, обробляється аналогічно time і має вигляд:

date(Year, Month, Day) % (i,i,i) (0,0,0)

Предикат date/4 має тільки версію, у якої всі аргументи вихідні. Четвертий аргумент - номер дня тижня, але схема нумерації, що використовується, залежить від ОС. Зазвичай, 0 - ця неділя, 1 - понеділок і т.д.

date(Year, Month, Day, WeekDay) % (0,0,0,0)

Як приклад розглянемо програму, яка використовує time для повідомлення часу, що затрачує на перегортання каталога, заданого за замовчуванням.

goal

time(HI,Ml,SI,_),nl

write("Start time is: ",H1,":",M1,":",SI), nl

% This is асtivity that is being timed

system("dir /s/b з:\\*.*")

time(H2,M2,S2,_)

Time = S2-S1 + 60*(M2-M1 + 60*(H2-H1))

write("Elapsed time: ",Time," seconds"),nl

time(H3,M3,S3,_)

write("time now is: ",H3,":",M3,":",S3).

Предикат comline/1

Предикат comline прочитує параметри командного рядка, що використовувався під час виклику програми. Формат предиката:

comline (CoiranandLine) % (про)

Тут CommandLine - рядок.

Предикат syspath/2

Предикат syspath повертає стартовий каталог і ім'я викликаючої програми. Він має вигляд:

syspath(HomeDir,ExeName) % (0,0)

Предикат syspath використовується для надання програмам можливості завантаження файлів з їх домашнього каталога.

Visual Prolog надає два різні сервіси часу: припинення виконання і перевірку використаного часу.

Предикат sleep/1

Предикат sleep припиняє виконання програми на заданий час. Він має вигляд:

sleep(CentiSecs) % (i)

Тут CentiSecs - цей час, вимірюваний у сотих частках секунди, на яке програма буде припинена. Точний час, протягом якого програма чекатиме, залежить від активності процесора і ОС. Не слід очікувати точності більшої, ніж 20=50 мілісекунд.

Предикат marktiте/2

Предикат marktime повертає відмітку часу, яка далі може бути перевірена на закінчення, використовуючи предикат timeout. Предикат marktime має вигляд:

marktime(CentiSecs,Ticket) % (i,o)

Тут CentiSecs - необхідний час, протягом якого Ticket має продовжуватися. Зазначимо, що Ticket - не просто час. Ця структура береже деяку спеціальну інформацію в недокументованому форматі. Ticket призначена тільки для подальшого використовування предикатами timeout і difftime.

Предикат timeout/1

Предикат timeout перевіряє на закінчення відмітку часу, повернену marktime. Якщо час закінчився, timeout успішний, інакше - неуспішний. Предикат timeout має вигляд:

timeout(Ticket) % (i)

Як і з предикатом sleep, слід очікувати великої точності.

Предикат difftime

Visual Prolog має стандартний предикат difftime:

difftime(real,real,real) % (i,i,o)

повертає різницю між першим і другим тимчасовими маркерами у форматі дійсного числа. Перший часовий маркер має бути молодшим, ніж другий, тобто можливе таке використовування:

marktime(О,Ml)

lengthy_jprocess

marktime(О,М2)

difftime(M2,Ml,Diff).

Як приклад розглянемо програму ch15e04.pro (лістинг 13.2), що демонструє роботу marktime І timeout.

predicates

ttimeout(real)

clauses

ttimeout(TM):-timeout(TM)!.

ttimeout(TM):-

write("No timeout, sleep 0.5 secs"),nl

sleep(50)

ttimeout(TM).

goal

marktime(400,TM) % 4 sees

ttimeout(TM)

write("XnBlNGO!\n").

Предикат sound/2

Предикат sound генерує звук апаратного спікера:

sound(Duration,Frequency) % (i,i)

Тут Duration -- цей час, виражений у сотих частках секунди.

Предикат beep/0

Предикат beep еквівалентний sound (50, ЮОО) і має вигляд:

beep % (no arguments)

Предикат osversion/1

Предикат osversion повертає версію поточної ОС і має вигляд:

osversion(VerString) % (про)

Формат verstring залежить від ОС.

Предикат diskspace/2

Предикат diskspace повертає в беззнаковому довгому цілому доступний простір на диску і має формат:

diskspace(Where,Space) % (i,o)

Space виражений у байтах.

В DOS-орієнтованих версіях Visual Prolog Where -- це символ, що позначає ім'я диска.

Предикати storage/З і storage/11

Стандартний предикат storage повертає інформацію про три області пам'яті, що використовуються системою для виконуваних програм (стік, купа (heap) і слід (trail) відповідно) у вигляді беззнакових довгих цілих:

storage(StackSize, HeapSize, TrailSize) % (0,0,0)

Всі значення аргументів вимірюються у байтах.

У всіх версіях Visual Prolog Traiisize містить кількість пам'яті, що використовується для області сліду.

Stacksize вказує, скільки залишилося вільного стекового простору. HeapSize визначає, скільки пам'яті доступно процесу.

Storage/11 є розширеною версією предиката storage/3, storage/11 повертає більш докладну інформацію про області пам'яті, що використовуються додатками, для виконуваних програм. Опис цього предиката ви можете знайти в інтерактивній системі допомоги Visual Prolog.

Предикат storage/0

Версія storage без аргументів призначена для налагодження. Цей предикат друкує у спеціальному вікні, скільки пам'яті використовують різні частини системи управління пам'яттю Visual Prolog і число точок повернення.

Visual Prolog включає шість предикатів для бітових операцій: bitand, bitnot, bitor, bitxor, bitleft і bitright. Ці предикати мають по одному варіанту потоку параметрів, працюють з цілими числами і повинні використовуватися у префіксній нотації.

Предикат bitnot/2

Предикат bitnot виконує функції побітового логічного "НЕ":

bitnot (X, Z) % (i,o)

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

Таблиця 1 - Предикат bitnot

Оператор

X

z

Bitnot

1

0

0

1

Предикат bitand/3

Цей предикат виконує побітно логічну операцію "І". Він має вигляд:

bitand(X, У, Z) % (i,i,o)

Якщо х і у пов'язані з цілими числами, z буде пов'язана з результатом побітового вживання логічної операції "І" до відповідних біт двійкового подання х і у (табл. 2).

Таблиця 2 - Предикат bitand

Оператор

X

У

z

Bitand

1

1

1

1

0

0

0

1

0

0

0

0

Предикат bitor/3

Предикат bitor виконує побітове логічне "АБО"

bitor(X, У, Z) % (i,i,o)

Якщо х і у пов'язані з цілими числами, z буде пов'язана з результатом побітового вживання логічної операції "АБО" до відповідних біт двійкового подання х і У (табл. 3).

Таблиця 3 - Предикат bitor

Оператор

X

У

z

bitor

1

1

1

1

0

1

0

1

1

0

0

0

Предикат bitxor/3

Предикат bitxor виконує те, що побітове логічне "виключає АБО":

bitxor(X, У, Z) % (i,i,o)

Якщо х і У пов'язані з цілими числами, то z буде пов'язана з результатом побітового вживання логічної операції що "виключає АБО" до відповідних біт двійкового подання х і У (табл. 4).

Таблиця 4 - Предикат bitxor

Оператор

X

У

z

bitxor

1

1

0

1

0

1

0

1

1

0

0

0

Предикат bitleft/3

Предикат bitleft виконує побітовий зсув вліво:

bitleft(X, N, У) % (i,i,o)

У буде пов'язана з результатом, одержаним при зсуві х вліво на n розрядів (бітий в двійковому уявленні х). Розряди, що залишилися справа, заповнюються нулями.

Предикат bitright/3

Предикат bitright виконує зсув вправо:

bitright(X, N, У) % (i,i,o)

Якщо х і n пов'язані з цілими величинами, то у зв'язується із зсунутим вправо на n розрядів двійковим поданням числа х. Розряди, що залишилися зліва, заповнюються нулями.

Visual Prolog має чотири вбудовані предикати для прямого (низькорівневого) доступу до пам'яті. Це предикати ptr_dword, memDword, memWord і memBite.

Предикат ptr_dword

Предикат ptr_dword повідомляє абсолютну адресу stringvar або створює рядок stringVar на основі одержаної адреси.

ptr_dword(StringVar, Seg,) % (о,i,i) (i,o,o)

Якщо stringVar зв'язана, то предикат ptr_dword повертає номер сегмента (Seg) і зсув () рядка stringVar. Якщо зв'язані Seg і Off, предикат ptr_dword пов'язує stringVar з рядком, який міститься в цьому місці. На 32-бітових платформах сегмент ігнорується. Предикат ptr_dword значною мірою був витиснений функцією cast.

Рядком у Visual Prolog є послідовність символів ASCII, що закінчується порожнім символом. Ви можете використовувати процедури низького рівня для обробки нестандартних рядків (тих, що містять декілька нульових байт). Проте не можна здійснювати виведення нестандартних рядків або включати їх у базу даних.

Предикати memByte, memWord і memDword

Visual Prolog містить три предикати для отримання і зміни певних елементів пам'яті: memByte, memWord і memDword. Вони використовуються для доступу до byte, word і dword відповідно. Всі предикати мають два формати:

memByte(Segment, Offset, Byte)% (i,i,i) (i,i,o)

memWord(Segment, Offset, Word)% (i,i,i) (i,i,o)

memDword(Segment, Offset, DWord)% (i,i,i) (i,i,o)

і

memByte (StringVar, Byte) % (i,i) (i,o)

memWord(StringVar, Word) % (i,i) (i,o)

memDword(StringVar, DWord) % (i,i) (i,o)

Segment має ТИП ushort, Offset - ТИП unsigned, а Byte, Word І Dword - ТИП byte, word і dword відповідно. В реальному режимі DOS місцерозташування в пам'яті обчислюється за формулою ((Segment * 16) + Offset).

Предикати mem* значною мірою були витиснені предикатами get*entry і set*entry для бінарних доменів.

Visual Prolog включає декілька предикатів, розглянутих у цьому розділі, які здійснюють доступ до ОС, виконують побітові логічні операції і операції зсуву, забезпечують підтримку низького рівня для маніпулювання пам'яттю:

Предикати, що здійснюють доступ до ОС:

* system - можливість виконання зовнішньої програми;

* time - установка або читання свідчень вбудованого годинника;

* date - доступ до вбудованого календаря;

* envsimbol - доступ до таблиці змінних середовища ОС;

* comline - читання аргументів командного рядка;

* syspath - повернення стартового каталога та імені виконуваного файла;

* osversion - повернення номера версії ОС;

* diskspace - повернення об'єму доступного простору на диску. Об Предикати, що виконують побітові операції:

* bitor - логічне "АБО";

* bitand - логічне "І";

* bitand - логічне "НЕ";

* bitxor - що логічне "виключає АБО";

* bitleft - зсув вліво;

* bitright - зсув вправо.

Предикати, які забезпечують підтримку прямого доступу до пам'яті:

* ptr_dword - повертає адресу аргументу або поміщає аргумент в задане місце пам'яті;

* membyte - вибирає або поміщає однобайтну величину;

* memword - вибирає або поміщає двобайтову величину;

* memword - вибирає або поміщає чотирибайтову величину.

Размещено на Allbest.ru


Подобные документы

  • Основы языка Visual Prolog. Введение в логическое программирование. Особенности составления прологов, синтаксис логики предикатов. Программы на Visual Prolog. Унификация и поиск с возвратом. Использование нескольких значений как единого целого.

    лекция [120,5 K], добавлен 28.05.2010

  • Общая характеристика и функциональные возможности языка логического программирования Prolog, а также систем SWI-Prolog и Visual Prolog. Формирование базы знаний относительно определения возможности трудоустройства студента и принципы реализации запросов.

    лабораторная работа [1,3 M], добавлен 07.10.2014

  • Огляд переваг та недоліків мови Пролог, історія її створення. Числення предикатів як математична основа її функціонування. Порівняльна характеристика середовищ програмування Prolog. Алгоритми розв’язування математичних задач за допомогою цієї мови.

    курсовая работа [504,5 K], добавлен 23.12.2014

  • Понятие экспертных систем, их классификация, виды и структура. Построение продукционной модели экспертной системы прогнозирования результатов сессии на основании анализа успеваемости, ее реализация в языке логического программирования Visual Prolog.

    дипломная работа [1,6 M], добавлен 25.01.2011

  • Загальна характеристика інформаційної підтримки перукарні. Розгляд основ створення програмної системи для розрахунку прибутку. Опис табличного та графічного вигляду запитів та звітів. Використання мови програмування Visual С++, Visual С#; СУБД ACCES.

    курсовая работа [3,0 M], добавлен 11.01.2015

  • Напівфункціональна мова програмування, складова частина Access - Visual Basic for Applications (VBA). Створення коду VBA за допомогою майстрів елементів управління. Модулі, створення процедур обробки подій. Редагування у вікні модуля, аргументи процедури.

    реферат [144,8 K], добавлен 31.08.2009

  • Реализация экспертных систем любой сложности, решение любых головоломок и шарад с помощью языка логического программирования Prolog. Основные понятия в языке Prolog. Правила логического вывода и запросы. Процедуры логического вывода и принятия решений.

    курсовая работа [19,0 K], добавлен 24.05.2012

  • Характеристика мови програмування VBA (Visual Basic for Application): можливості й засоби. Використання редактора Visual Basic. Створення та виконання VBA-програм. Типи даних, змінні й константи, операції й вирази. Керуючі оператори, процедури й функції.

    реферат [29,9 K], добавлен 28.06.2011

  • Розробка таблиці для збереження даних у текстовому файлі про фільми в середовищі програмування Visual Studio C++ та їх сортування за країною виробництва. Реалізація таблиці за допомогою компонента dataGridView. Опис і контрольний приклад роботи програми.

    курсовая работа [1,4 M], добавлен 02.11.2016

  • Теоретичні основи мови програмування C++ та середовища розробки Microsoft Visual C++, яка дозволяє створювати як маленькі программи і утиліти для персонального використання, так і корпоративні системи, що працюють з базами даних на різних плтаформах.

    реферат [26,5 K], добавлен 01.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.