IzhNews #0D
28 февраля 2003
  Софт  

IS-DOS - Макросы в IS-DOS.


Программное обеспечение Описание Операционные системы iS-DOS

       Макросы в IS-DOS.

                                "Ловите ветер всеми парусами!.."

                                "Ну, если я чего решил,
                                то выпью обязательно..."
                                                     В. Высоцкий

(c) Колесников Сергей (SKL-KEEPER)
──────────────────────────────────────────
   ┌┐
   ├┴┐
   └─┘ IS-DOSе я работаю уже давно - целых
пять  лет - и, что называется, собаку съел
в этом деле. А вот  макросами  заинтересо-
вался и стал применять их совсем  недавно.
Виной  тому недостаток информации: в help-
ах о них  упомянуто  как-то  поверхностно,
неконкретно, да и кто мог знать, что с  их
помощью  можно  значительно облегчить себе
жизнь, поручив  компьютеру выполнение тру-
доемких  работ?! Только имейте в виду, что
работать  с  текстовыми  файлами в IS-DOSе
имеет  смысл  только на электронном диске,
иначе  все  преимущества  этого  редактора
сойдут на нет.
   Начнем с того, что  макросы  вызываются
из  текстового  редактора нажатием "EXTEND
MODE". В  верхней  строке  экрана появится
слово "MAC". После этого  программа  будет
ждать нажатия клавиши, вызывающей  макрос.
В файле EDITed_mac.txt должно  находиться
описание  действий, которые  должен произ-
вести  макрос, причем  это описание должно
начинаться с символа, его вызывающего.
   Ну, вот  конкретный  пример: Вы  ведете
большую  переписку и некоторые слова, наи-
более  часто  употребляемые, можете закре-
пить  за  макросами и вызывать их нажатием
всего двух клавиш - EXTEND MODE и еще  од-
ной ключевой. Вот так:

   zЗдравствуй,
   dДо свидания
   sSPECTRUM

   В  первом  примере после вызова макроса
и  нажатия "z" компьютер напишет с позиции
курсора  слово "Здравствуй,", во  втором -
слово  "До  свидания", в  третьем - SPECT-
RUM.
   Только надо иметь в виду, что  символов
в  строке  должно быть не более 32 (именно
столько помещается в буфер драйвера). Если
надо  написать  больший  по  объему текст,
можно  связать макросы в цепочки, вызвав в
конце первого следующий, например:

   1Спектрумисты,#0E2
   2объединяйтесь!

   Код  #0E  как  раз служит для замыкания
макросных  строк. После  него  надо только
указать, какую  строку "привязать" к вызы-
ваемой. Цепочку  макросов можно замыкать и
саму на себя, т.е. если вы напишете  такой
макрос:

   1SPECTRUM#0E1,

   то  программа будет непрерывно печатать
SPECTRUM,  пока   Вы  не  нажмете  пробел.
Именно  "space"  и  служит  для прерывания
цепочки  макросов. Можно  также в качестве
признака конца цепочки использовать пустую
строку - символ "T" латинское на  префиксе
SS/SPACE (код #12).
   Следует  еще  упомянуть о комбинации #R
(Repeat) - повторитель. После него  должны
стоять две цифры, первая из которых - чис-
ло  повторов, вторая - длина  повторяемого
участка. Пример:

   #R38SPECTRUM  - этот  макрос напечатает
слово SPECTRUM три раза (по 8 букв).
   #R51#0A  - а  этот переместит курсор на
пять строк вниз.

   Я в своей практике использую макрос для
распечатки "титула" письма (по другому -
углового штампа), вот его текст:

1.dw1(с) SKL-KEEPER.dw0.ds1#0D#0E@
@  aka   КОЛЕСНИКОВ Сергей#0D#0Eш
ш        Михайлович.ds0#0D#0D#0Eщ
щ355042, Ставрополь,#0D#0Eъ
ъул.Доваторцев 53/2-8#0D#0D#0Eт
ттел. (8652) 77-55-95#0D#0Eю
ю   18.00-22.00 МСК#0D#0D#0Ez
z#R92  Здравствуй,#20

   А  теперь  подробное объяснение. Макрос
вызывается  нажатием "1" (после EXTEND MO-
DE,  естественно).  .dw1, .dw0, .ds1, .ds0
- это коды управления принтером, позволяю-
щие  печатать  разными  шрифтами, я на них
останавливаться не буду. После печати пер-
вой строки в конце ее стоит  код  #0D, что
равнозначно  нажатию "ENTER", т.е. следую-
щую строку будем печатать с новой строчки.
Далее  вызывается  строчка с символом "@",
печатается,  опять  переводится  строка, и
вызывается следующая по символу "ш". После
нее - дважды перевод строки и вызов следу-
ющей по символу "щ", ну и так  далее. Пос-
ледняя  строка макроса сообщает программе,
что  надо девять раз выполнить печать двух
пробелов, затем слова "Здравствуй,", и на-
печатать еще один пробел.
   С помощью макросов можно давать  редак-
тору конкретные задачи. Рассмотрим некото-
рые из них. Вот, например, изменение пара-
метров редактора, таких, как длина  строки
форматирования:

3#12pr31#0Ds  ;31 символ в строке
4#12pr41#0Ds  ;41    -"-
5#12pr42#0Ds  ;42    -"-
6#12pr62#0Ds  ;62    -"-
7#12pr75#0Ds  ;75    -"-

   Вызывая  макрос  под  символом  "3", мы
указываем  программе, что  необходимо выз-
вать функцию главного префикса (SS/SPACE),
код которой #12, затем вызвать функцию "p"
 - настройка параметров редактора, устано-
вить  правую  границу  форматирования  "r"
равной 31 символу, "нажать" ENTER и  запи-
сать  это  дело  выполнением  функции  "s"
(SAVE) в файле  edit.com. Как  видите, все
очень  просто: поочередно  указывайте, что
надо делать программе, и все!
   И писать макросы не так трудно, как ка-
жется на первый взгляд. Просто сначала вы-
полните установленную Вами задачу вручную,
записывая при этом, какие клавиши нажимае-
те, а  затем  оформите все это в виде мак-
роса.
   Для справки вот некоторые коды  клавиш,
которые могут Вам пригодиться:

     Клавиша      Код      Функция

      CS/1         07       RUS/LAT
      CS/2         06       BIG/small
      CS/3         04       Ins/ovr
      CS/4         05       Home
      CS/5         08       Left
      CS/6         0A       Down
      CS/7         0B       Up
      CS/8         09       Right
      CS/9         0F       End
      CS/0         0C       Delete
      ENTER        0D
      SPACE        20
      CS/SS        0E       Macro
      SS/Q         15       Page UP
      SS/A         10       Page DOWN
     SS/ENTER      11       Prefix
     SS/SPACE      12       Prefix
      SS/W         13       Erase
      SS/E         14       Insert
     CS/SPACE      16
     CS/ENTER      17

   Только  имейте в виду, что ноль для де-
сятков писать обязательно!
   Поехали дальше.
   Расскажу  Вам  о  конкретном  случае из
моей практики. Дело в том, что я  сваппер,
мой каталог составлялся постепенно в тече-
нии многих лет и сейчас достигает 460 сек-
торов, или около  120  kB. Но  я  допустил
ошибку, и демки у меня были не в отдельном
разделе, а  вперемешку с играми... Неудоб-
но, согласен! Передо  мной  встала  задача
отсортировать  демки  от  игр, занеся их в
отдельный  раздел. Задача немного облегча-
лась  тем, что  в  названии  демок я писал
DEMOMUSIC (а иначе как бы я отличал  демки
от игр?). Я все время откладывал сортиров-
ку, т.к. вручную  это  заняло  бы  слишком
много времени, а этого я себе позволить не
мог :-). И вот, когда я стал изучать  мак-
росы, я подумал: "А почему бы не  поручить
всю эту работу им?"
   Как  же  составить  текст  макроса? Ну,
давайте  по  порядку.  Прежде  всего, надо
дать  задание оверлею поиска, что мы соби-
раемся сортировать (напоминаю, что отличи-
тельная  черта демок - это запись в той же
строке слова DEMOMUSIC, а  в  играх  этого
слова нет).
   Оверлей поиска (и замены, кстати) вызы-
вается  нажатием "F" на  главном  префиксе
(SS/SPACE). Войдя  в  этот  оверлей, дадим
форму модели - "DEMOMUSIC", а затем выйдем
из  него. Эта модель теперь в буфере овер-
лея.
   Что бы мы делали, если бы нам надо было
делать эту работу вручную? Сначала мы вой-
дем  в  главный  префикс  SS/SPACE код #12
(см. таблицу выше), затем на всякий случай
переместимся  в начало  файла, т.е. нажмем
"t", далее  опять войдем в главный префикс
и нажмем "f" для поиска модели  в  тексте,
затем "n" (поиск  следующей  модели). Нач-
нется  поиск, компьютер  найдет  строку, в
которой стоит слово"DEMOMUSIC", далее  нам
надо будет выйти из этого режима  нажатием
пробела, опять  войти  в  главный префикс,
зафиксировать его пробелом, стереть строч-
ку  "d"  (delete), переместиться  в  конец
файла и восстановить стертую строчку нажа-
тием "u" (undelete). Ну  и, наконец, выйти
из префикса нажатием пробела. Сделаем  эту
программу  циклической, иначе  она  найдет
одну  строку, перенесет ее в конец файла и
остановится. А сделать это  можно, замкнув
эту  цепочку саму на себя кодом #0E. В ко-
нечном итоге  вот, что  у  нас  получилось
(макрос вызывается нажатием цифры "2"):

2#12t#12fn #12 dbu #0E2

   Результатом  его  работы  станет  целый
раздел со строками, содержащими слово "DE-
MOMUSIC". Постойте, а зачем нам  раздел, в
каждой  строчке  которого стоит это слово?
Это уже не rules :-) Мы лучше обзовем этот
самый раздел "Демки" или что-нибудь в этом
роде,  а  слово  DEMOMUSIC  уберем, но  не
вручную и даже  не  отдельным  макросом, а
лучше пусть этот же макрос в процессе сво-
ей работы еще и удаляет это слово! А чтобы
это сделать, надо лишь немного усовершенс-
твовать  уже  созданный  нами  макрос.  Но
предварительно надо будет в начале его ра-
боты, когда мы задаем модель, задать еще и
замену (нажатием клавиши "M") в виде девя-
ти пробелов (по числу букв в слове DEMOMU-
SIC). Доработка макроса будет  заключаться
только в добавлении  трех  операций: после
того, как комп восстановил ранее найденную
и стертую строчку, нам  надо  будет  войти
опять  в  оверлей  поиска  и замены ("f"),
"нажать"  "n"  (поиск  следующей  модели),
программа, естественно,  "найдет"  эту  же
самую  строчку, на которой стоит курсор, и
мы  с помощью режима "S" (S/Cs) произведем
замену  найденной  модели на девять пробе-
лов! Вот теперь макрос примет  окончатель-
ный вид:

2#12t#12fn #12 dbufnS  #0E2

   Поясню только, почему перед #0E2 появи-
лось два пробела: первый - выход из режима
поиска и замены, второй - снятие  фиксации
макроса.
   Ну вот, как видите, не так все и сложно
:-) Нужную нам задачу мы решили.
   А теперь давайте попробуем  решить  за-
дачку посложнее: а  если  нам  понадобится
сделать просто выборку программ из катало-
га  по какому-то признаку, не стирая их? В
принципе, можно воспользоваться вышеприве-
денным способом, сохранив потом то, что мы
нашли, а исходный каталог стереть (на дис-
кете-то он все равно останется). Но  можно
решить  этот  вопрос  и с помощью макроса,
правда,  работать  он  будет   значительно
дольше, чем рассмотренный выше. Остроумную
идею решения такой задачи предложил  Крас-
нодарский   электронный  журнал  "Одиссей"
(ныне почивший:-( ).
   Итак, каковы  наши действия? Загрузим в
редактор  файл-каталог.  Вызываем  главный
префикс  SS/SPACE, затем  оверлей поиска и
замены "f", вводим модель для поиска и за-
мены, равное  модели(!) по количеству сим-
волов число знаков  "@"  (можно  и  другие
значки, но  желательно  пореже употребляе-
мые). Нажимаем SPACE, переходим  в  начало
файла (#12t), вызываем  оверлей  поиска  и
замены  (#12f) и  делаем глобальную замену
модели во всем файле на ту замену, что  мы
ввели  раньше ("g"). Затем меняем модель и
замену  местами, что  производится  вводом
"0" и выходим из оверлея кодом #10:

a#12t#12fg0#10#0Eb

   Макрос  вызывается  по клавише "a", а в
конце строки вызываем вторую строку. В ней
для  проверки на завершение макроса прове-
ряем  наличие  пустой  строки ("T"), снова
вызываем  оверлей  поиска  и замены и даем
ему  установку найти первую модель в текс-
те, т.к., выполнив  глобальную  замену, мы
вернулись в точку входа в редактор, т.е. в
начало файла:

b#12T#12fn

   Снимаем оверлей SS/A и, вызвав  оверлей
блочных  операций,  маркируем  строку, где
стоит курсор:

b#12T#12fn#10#11mm

   Выходим в конец файла и снова использу-
ем  код  #0E  для  вызова следующей строки
макроса по букве "c", получаем:

b#12t"12fn#10#11mm#12b#0Ec

   Возвращаемся в оверлей  блочных  опера-
ций, вызываем функцию копирования, снимаем
отметку и вызываем следующую строку:

c#11c#10#11o#0Ee

   А вот две следующих строки макроса  вы-
полняют  более  сложные  функции.  Первая,
вызываемая по букве "e", запускает оверлей
поиска и замены, который ищет  первую  мо-
дель  от конца файла, а т.к. это - только-
что скопированная нами строка, то, естест-
венно, она  и  выбирается.  Затем  оверлей
производит  обратную  операцию,  возвращая
предыдущую модель  и  убирая  введенную  в
первой строке макроса замену. Затем снима-
ем оверлей и возвращаемся в начало файла:

e#12fp#53#10#12t#0Ef

   Последняя строка, вызываемая  по  букве
"f", опять-таки  запускает  оверлей поиска
и замены, ищет  первую  модель  от  начала
файла и производит ту же, что и предыдущая
строка, операцию, т.е. обмен  замены и мо-
дели, возвращая ее исходное значение.
   Снимаем оверлей и зацикливаем созданный
макрос на строку по букве "b", т.к. первая
нужна нам только раз.

f#12fn#53#10#0Eb

   В итоге вот что у нас получилось:

a#12t#12fg0#10#0Eb
b#12t#12fn#10#11mm#12b#0Ec
c#11c#10#11o#0Ee
e#12fp#53#10#12t#0Ef
f#12fn#53#10#0Eb

   Попробуйте, работает  отлично! А  Вы  в
это  время пойдите попейте чайку или поку-
рите в подъезде (курить вредно! :-) ).

   Ну и напоследок еще один  макрос, кото-
рый, во-первых, позволит  Вам  еще  больше
разобраться в этом деле, а во-вторых, име-
ет практическое значение в работе.
   Иногда  бывает необходимо разбить текст
на  страницы, особенно  если в тексте есть
таблицы  и  не  хочется, чтобы, к примеру,
шапка ее была на одной странице, а осталь-
ное - на другой.
   На стандартном листе бумаги формата  A4
помещается  62  строки  текста, если печа-
тать в полтора интервала. Напишем  макрос,
который  разобьет  наш текст по страницам,
а  вызывать  его  будем,  например, буквой
"r".
   Итак, прежде  всего  необходимо перейти
в начако файла, т.к. вдруг Вам понадобится
разбить на страницы wet-файл? Затем перей-
дем  на  вторую строку макроса, вызываемую
по символу "<", где трижды переведем  кур-
сор на страницу вниз (а это три раза по 20
строк) и еще два раза на строку  вниз. Те-
перь  повторно вызываем префикс SS/SPACE и
ставим  значок  разделителя  страниц  "l".
Чтобы процесс продолжался, зацикливаем эту
строку  макроса  на  самоё  себя, а первая
строчка нам нужна только раз в начале  ра-
боты макроса. Вот что получилось в итоге:

r#12t#0E<
<#R31#10#0A#0A#12l#0E<

   И  в  заключение - самый  короткий мак-
рос, который  позволит Вам распечатать да-
ту:
   d#Д

   Я надеюсь, при загрузке системы Вы  еще
в  autoexec.bat  включили  строчку  вызова
date.com  и в самом начале работы постави-
ли дату. Вот эта дата и распечатается!
──────────────────────────────────────────




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
IS-DOS - настройка и работа IS-DOS 2000.
IS-DOS - Макросы в IS-DOS.
IS-DOS - пользователям: как скопировать системный диск IS-DOS и остаться при этом в живых.

В этот день...   23 сентября