Командна мова REXX
Операційна система DOS поступово удосконалюється фірмами Microsoft і IBM. Однак командна мова DOS як і раніше залишається бідною і незручною. Це навіть привело до появи продуктів сторонніх фірм, також що вирішують цю проблему (наприклад, 4DOS, ВАТ або The Norton Batch Enhancer).
Командна мова (
batch lanfiua^е) дозволяє вам об'єднати ряд команд операционнои системи в одну і дати їй своє ім'я. Наприклад, якщо ви хочете переписати дані з дискети на жорсткий диск, ви повинні послідовно здійснити наступні дії:
1.
Створити підкаталог на диску З, наприклад TARGET.
2. Зробити каталог TARGET поточним.
3.
Вставити дискету в дисковод А.
4. Виконати команду COPY А:*.* З:
Часто багато хто забуває про пункт 2, і всі файли виявляються скопійованими в кореневий каталог диска С. Однако ви можете створити командний файл, назвати його FLOPCOPY і
вмістити в нього всі команди, необхідні для копіювання файлів з дискети на жорсткий диск. Тоді замість трьох команд вам буде досить виконати тільки одну: FLOPCOPY TARGET. Грамотно
написаний командний файл дозволить вам копіювати дані з дискети в будь-який каталог, використовуючи команди типу FLOPCOPY JUNK або
FLOPCOPY GR8TSTUF.
Перше знайомство з мовою REXX
Щоб на практиці познайомитися з мовою REXX, напишемо зовсім коротку програму, яка буде просто виводити на екран напис: «Hello, World!» На атом прикладі ми покажемо, як створюються програми на REXX, як вони виконуються і яку мають структуру.
За допомогою редактора OS/2 System Editor (Системний Редактор OS/2) створіть файл з ім'ям HELLO.CMD. Розташуйте його в підкаталозі, який міститься в дорозі доступу, або додайте підкаталог з цим файлом в дорогу доступу, або запускайте HELLO.CMD з того підкаталогу, в якому він знаходиться. Вмістіть в файл HELLO.CMD наступні рядки:
/* FIRST REXX PROGRAMM */
"SAY Hello, World:"
Запишіть файл на диск і відкрийте сеанс командного рядка OS/2. У командному рядку введіть HELLO і натисніть клавішу Enter. Програма виведе на екран наступнеповідомлення:
Hello, World!
Ви вже знаєте про те, що всі командні файли (а програми на мові REXX є особливим виглядом командних файлів) повинні мати розширення. CMD. Крім того, редактор, в якому ви створюєте програму на REXX, повинен зберігати файли в текстовому форматі ASCII (такий формат також часто називають «plain text» або «text-only»). Щоб запустити готову програму на мові REXX, ви повинні ввести в командному рядку ім'я відповідного файла.
Перший рядок файла HELLO.CMD це коментар. Аналогічну функцію в мові командних файлів DOS виконують рядки, що починаються з оператора REM. У програмах на мові REXX будь-який текст, укладений між символами /* і */, системою ігнорується. Перший рядок програми на мові REXX обов'язковоповиненмістити коментар. Саме по цій ознаці CMD.EXE визначає, на якій мові написана програма на REXX або на DBL. Якщо перший рядок файла. CMD починається з символів /*, то система розглядає його як програму на мові REXX. У іншому випадку файл виконується як звичайний командний файл. Другий рядок файла HELLO.CMD містить оператор SAY. SAY це основна команда виведення в мові REXX. Аналогом цього оператора в DBL є команда ECHO. У операторі SAY можна одночасно використати як змінні, так і текст, взятий в лапки, наприклад:
"SAY THE CURRENT VALUE OF THE X VARIABLE EQUALS " X
Внаслідок виконання цього оператора на екран услід за пояснюючим текстом
буде виведено поточне значення змінної X.
Використання в програмах REXX команд OS/2
Більшість рядків командного файла на мові DBL являють собою команди операційної системи, які цілком можна вводити прямо в командному рядку. У свою чергу REXX використовує могутні оператори і функції, які не є командами OS/2. Проте в програми на мові REXX можна включати і команди операційної системи. Розглянемо простий приклад, в якому з програми на мові REXX чотири рази підряд виконується команда DIR:
/* DIRECTORY LOOP */ DO 4
DIR END
І хоч ця програма не виглядає дуже корисною, можливість напряму з програми виконувати команди операційної системи складно переоцінити. Але цим робота з командами OS/2 з програми на мові REXX не обмежується. REXX дозволяє вам будувати команди зчастин і тут же «прямо на літу» виконувати
/* COMMAND ASSEMBLY EXAMPLE */
"SAY PLEASE ENTER А ONE-WORD COMMAND, "
"SAY LIKE DIR, COPY, OR ERASE:"
PARSE PULL CMD
"SAY NOW ENTER AN ARGUMENT FOR А COMMAND, LIKE *. *: "
PARSE PULL ARGS
/* NOW EXECUTE THE COMMAND WITH THE ARGUMENT */
CMD ARGS
Спробуйте запустити цю програму, і ви отримаєте на екрані приблизно наступний діалог:
PLEASE ENTER А ONE-WORD COMMAND, LIKE DIR, COPY, OR ERASE:
ERASE
NOW ENTER AN ARGUMENT FOR А COMMAND, LIKE *.*
А*.*
3 file(s) erased
У даному прикладі команда виконувалася в каталозі, що містить три файли, що починається з букви «А». Найбільш вражаючий приклад використання команд OS/2 в програмах на мові REXX це програми установкидодатків. "
Передбачимо, ви отримали дискету з утилітами, упакованими в один файл, що виконується, скажемо OS2.EXE. Для того щоб встановити ці програми на жорсткий диск, необхідно зробити наступні дії:
1. Створити на диску, що має щонайменше 2 Мб вільного простору, каталог UTILS.
2. Скопіювати з дискети в цей каталог файл OS2.EXE.
3. Щоб розпакувати утиліти, ввести команду OS2. Коли процес розпаковування файлів завершиться, в каталозі UTILS з'являться готові до роботи програми.
Без цих трьох операцій запустити утиліти не можна. Однак починаючий користувач може не зміркувати, які дії необхідно зробити для установкиотриманого програмного забезпечення. І тут йому можна допомогти, написавши командний файл, що здійснює всі ці дії автоматично. Хороша програма на мові REXX зажадає від користувача лише ввести команду INSTALL і ім'я каталога, в який треба встановити утиліти. Передбачимо, програма вже отримала дані про те, з якого дисковода потрібно встановити додатки, і про те, на який жорсткий диск їх потрібно вмістити. Розглянемо, як буде створюватися новий каталог і як туди будуть копіюватися файли.
Отже, програма вже має в своєму розпорядженні інформацію, звідки копіювати файли, і зберігає ім'я цього дисковода в змінної SOURCE. Точно так само програма знає і диск, на який потрібно скопіювати утиліти. Буква цього диска міститься в змінної DESTINATION. He будемо поки розбиратися, як це все відбувалося, а перейдемо безпосередньо до створення підкаталогу і копіювання файлів. Фрагмент тексту програми, який виконує цю задачу, може виглядати таким чином:
/* "EXECUTE THE MAKE DIRECTORY" COMMAND */ MKDIR" DESTINATION
/* "NOW EXECUTES THE COPY COMMAND */ COPY" SOURCE II "*.*" DESTINATION
На початку програма повинна створити підкаталог. Перший рядок компонує і виконує відповідну команду MKDIR. У другому рядку файли копіюються в щойно створений каталог. Оператор конкатенування рядків (¦¦) використовується для того, щоб в команді копіювання між значенням змінної SOURCE і рядком «*.*» не з'явивсяпропуск. Попередня частина програми не повиннавикликатиу вас ніяких ускладнень. Ми вже детально розбирали, як запитати у користувача дані, перевірити їх коректність і вмістити їх у відповідні змінні (в нашому випадку SOURCE і DESTINATION).
До програми залишилося тільки додати запуск саме архіву, що розпаковується з утилітами OS2.EXE:
/* "EXECUTE THE МАКЕ DIRECTORY" COMMAND */ MKDIR" DESTINATION
/* "NOW EXECUTES THE COPY COMMAND */ COPY" SOURCE ¦¦ "*.*•• DESTINATION OS2
/* "ALL DONE NOW */ SAY ALL DONE." "SAY THE FILES ARE NOW UNCOMPRESSED ON YOUR HARD DISK."
Велика кількість коментарів в цьому фрагменті програми без великих зусиль дозволить вам розібратися в призначенні кожного оператора.
Для приведеного вище прикладу можливостей командної мови DOS цілком досить. Однак без допомоги додаткових програм командний файл DOS не може запитувати додаткову інформацію у користувача, зберігати структуровані дані, виконувати математичні дії або вирішувати багато які інші задачі, що легко програмуються на будь-якій іншій мові. Тому могутня командна мова REXX є великою перевагою операційної системи OS/2. Командні файли дозволяють автоматизувати велику частину рутинної роботи з комп'ютером. Після того як ви прочитаєте розділ 16 другого тому, ми сподіваємося, що REXX стане для вас незамінним помічником.