Odyssey Magazine
#02
14 июля 1997 |
|
IS-DOS - Проблемы и решения: макросы.
IS_DOS: Проблемы и решения. ──────────────────────────── (С) 1997 Сергей Ляпин Music by Shov 1. Вступление. Прежде, чем приступить к продолжению опи- сания макросов, я хотел бы поделиться с Вами кое-какими мыслями и фактами. Дело в том, что все мои статьи основаны на версии IS_DOS от Slot'а, IS_DOS UPGRADE, которую приобрел совершенно легально в ИНФОРКОМЕ, в мае 1996 года. И вот совсем недавно был несказанно рад получить новый IS_DOS уже от самого Iskrasoft, IS_DOS CLASSIC v4.5. Многое в этом программном продукте радует, но кое-что и огорчает. Вообще-то Iskrasoft с самого начала повела, мягко говоря неэф- фективную и неверную политику, выпустив новую неплохую систему с ограниченным фор- матером. Такой подход отпугнул многих пользователей и как следствие, многих программистов, видящих в себе "дойную ко- рову" для Iskarsofta ( почему, я надеюсь понятно ?). Затем пошла путаница в версиях системы, которая продолжается до сих пор и пояснения типа, это версия 3.5, которую вы знаете, как 5.0, но до этого она была 4.2, не ручаюсь за точность формулировки, но по сути это так, стоит хотя бы почитать help'ы. Но это еще пол-беды выпустив новую версию 4.5, Iskrasoft приятно обрадовал, что она не совместима со старыми версиями и одновременно лишена некоторых, пусть не жизненно важных, но таких удобных и прият- ных вещей, которые делают работу в этой системе более интересной. Непонятно, какая "кошка" пробежала между Iskrasoft'ом и Slot'ом, это очень бы хотелось узнать, но что это так, нет ни малейших сомнений, стоит хотя бы посмотреть на комплектацию дискет от этих фирм, наличие или точнее отсутствие достаточно большого количества файлов на Slot'овских версиях IS_DOS, о наличии, которых на базовой дискете я уз- нал из журнала "ZX-FORMAT". Таким образом по непонятным причинам вновь страдает пользователь. Кроме этого новая, только что полученная мной версия этой системы, лишила возможности использовать такие удобные программы как вывод текстовых со- общений в bat-файлах ( echo.com ) и созда- ния RAM_DISK'а старой, но добротной qbac- kup.com, которая не требует никаких допол- нительных установок и лишних ответов , в отличии от новой sv_image.com., новый, не спорю, улучшенный драйвер клавиатуры хо- рош, но зачем-то в нем поменяли местами русские шипящие. Именно вот такие недочеты и своеобразные нелепости на каждом шагу этой хорошей и удобной системы и тормозят широкое и эффективное применение системы, отпугивая многих пользователей, вызывая массу противоречий и критики вместо конс- труктивной работы на благо всех. В после- дующих статьях я постараюсь более подробно рассмотреть новую версию и поделиться практическими советами по ее эффективному применению, а так же рассмотреть другие интересные программы IS_DOS. Будем считать это своеобразным вступлением в цикл статей о новых возможностях этой системы. ***************************************** 1. Межоверлейные макросы. ───────────────────────── В предыдущей статье было рассмотренно на- писание текстовых и оверлейных макросов, в этот раз рассмотрим очень нужные и удобные межоверлейные функции, описываемые с ис- пользованием макросов. Как в макросах вы- зывается оверлей и как он работает, поэто- му, надеюсь вы помните, что вызов для од- ноклавишных оверлеев ( т.е. вызываемых по одной клавише) можно использовать, как шестнадцатиричный код этой клавиши, так и ее обозначение, а для вызова двухклавишных оверлеев необходимо пользоваться только кодом, соотетствующим их комбинации. Таким образом межоверлейный макрос будет содер- жать как коды, так и символы. Что бы было легче понять рассмотренные ниже примеры, да и вам для облегчения дальнейшей работы с этим видом макросов, приведем таблицу вызова оверлеев и выполняемых ими функций. Рассмотрим такой простой пример.Допустим вы имеете довольно объемный файл, благо редактор позволяет с таким работать, ката- лог, к примеру с играми и он имеет различ- ную информацию: название, год выпуска, фирма, номер дискеты на которой она запи- сана и многое другое. Вам эта информация необходима, в этом файле, но не нужна в распечатываемых наклейках на дискетах. И кроме этого ваш каталог, к примеру, создан по алфавиту, а вдруг понадобилась распе- чатка его по типам игр, по годам выпуска, по фирмам выпустившим эти игры, что тогда? Вот тут то макрос вам и поможет сэкономить время, нервы и позволит выполнить эти опе- рации автоматически, без вашего непосредс- твенного участия, просто запустите его и можете делать, что угодно, макрос все об- работает и самостоятельно закончит работу. Вот эти примеры и рассмотрим. 2.Пример работы с каталогом игр. ─────────────────────────────── И так вот образец файла ( естественно гру- бый и утрированный, но поняв принцип, ал- горитм макроса, думаю вам не составит тру- да приспособить его к своему каталогу) НАЗВАНИЕ ИГРЫ . ГОД * НОМЕР ДИСКЕТЫ И ПР. А DESOLATOR 1986 d10 Sega ходилка B THE DOUBLE 1984 d12 J.S.Ltd футбол C HUNDRA 1987 d22 Zeus боевик D EV.STAR 1986 d02 Hewson симулятор и т.д и т.п... Задача : 1. Создать макрос находящий игры по конк- ретной фирме производителю; 2. Создать макрос, который скопирует эти подборки в отдельный файл и выйдет из ре- дактора завершив работу. 3. Создать макрос-счетчик файлов. *** 1. ─── Прежде, чем приступить к составлению мак- роса, необходимо оговориться, перед запус- ком рассмотренной ниже комбинации вручную настройте оверлей поиска и замены, т.е. выставьте, в данном случае, фирму и ее временную замену. Таким образом вы созда- дите макрос, в который не надо будет каж- дый раз входить и менять установку, а де- лать это будет можно всего лишь в самом редакторе, вызвав оверлей поиска и замены. Рассмотрим как это делается. Вы загрузили в редактор файл-каталог, затем решили ско- пировать из него все игр фирмы Ocean , тогда для этого, вызываете оверлей допол- нительных функций SS/Space , затем оверлей поиска и замены , клавишей "F" , вводите модель "Ocean" , и замену любой символ или группу символов, это значения не имеет, так как эта информация нужна только запус- каемому макросу и не повлияет на результат и наконец нажимаете " Space ", возвращаясь в редактор. Теперь смело запустив описан- ный ниже макрос, получим в конце файла полный список данных игр. Если вдруг вы решите сделать список по другому типу, ни- чего страшного, просто поменяйте модель , замену можете оставить ту же и опять смело запускайте макрос. И так приступим. Первым делом загрузим в редактор файл ed_mac.txt, затем, с начала строки напечатаем символ, который будет вызывать нужный нам макрос, например, "a". Следующим шагом будет выход в начало фай- ла, осуществляемый указанием после символа вызова макроса, кода оверлея дополнитель- ных функций плюс символа "t" : a#12t Затем, вызываем оверлей поиска и замены, кодом " #12f ", делаем глобальную замену модели во всем файле на ту замену, которую мы ввели в оверлей до запуска макроса, пользуясь символом "g" ( см.описание овер- лея поиска и замены ), и наконец меняем модель и замену местами, что производится вводом в макрос символа "0", и выходим из данного оверлея кодом " #10". Вот, что у нас получилось : a#12t#12fg0#10 Таким образом эта часть макроса выводит курсор в начало файла, ищет по всему файлу модель, которыю мы ввели, производит ее глобальную замену и закончив выходит из оверлея. Далее, используя служебный код #0E, вызываем другую строку макросов по букве "b": a#12t#12fg0#10#0Eb В следующей строке проверяем наличие пус- той строки, это нам необходимо для провер- ки на завершения макроса, вызываем снова оверлей поиска и замены и даем ему уста- новку найти первыю модель в тексте так как выполнив глобальную замены мы вернулись в точку входа в редактор, т.е, в начала фай- ла. Выглядит это так : b#12T#12fn Снимаем оверлей кодом комбинации SS/A и вызвав оверлей блочных операций маркируем строку на которой стоит курсор : b#12T#12fn#10#11mm Выходим в конец файла и опять используем код #0E, для вызова следующей строки мак- роса по букве "c". В результате получаем: b#12T#12fn#10#11mm#12b#0Ec Возвращаемся в оверлей блочных операций, вызываем функцию копирования, снимаем от- метку - это задача следующей строки макро- са. Вот как она выглядит : c#11c#10#11o А вот две далее создаваемых строки макро- сов выполняют более сложные и интересные функции.Первая строка, мы ее вызываем из предыдущего макроса по букве "d", запуска- ет оверлей поиска и замены, который ищет первую модель от конца файла, а так как это скопированная только, что нами строка, то естественно она и выбирается, затем оверлей производит обратную операцию, возвращая предыдущую модель и убирая вве- денную замену в первой строке макроса. За- тем снимаем оверлей уже привычной комбина- цией и возвращаемся в начало файла : c#11c#10#11o#0Ed d#12fpS#10#12t Вторая строка, вызываемая по букве "e" опять таки запускает оверлей поиска и за мены , ищет первую модель от начала файла и производит ту же операцию, что и преды- дущий макрос, т.е. обмен замены и модели, возвращая ее исходное значение. Снимаем оверлей и зацикливаем созданный макрос на строку по букве "b", т.е. на вторую стро- ку, так как первая, по "а", нужна нам только один раз, а остальные строки предс- тавляют собой цикл команд. Вот мы и созда- ли первый, из рассматриваемых нами макро- сов, который будет, в нашем случае, искать по всему файлу-каталогу игр, игры фирмы "Ocean" копировать их в конец файла и са- мостоятельно завершать свою работу, когда все игры будут скопированны : ╔══════════════════════════════╗ ║ ║ ║ a#12t#12fg0#10#0Eb ║ ║ b#12T#12fn#10#11mm#12b#0Ec ║ ║ c#11c#10#11o#0Ed ║ ║ d#12fp#53#10#12t#0Ee ║ ║ e#12fn#53#10#0Eb ║ ║ ║ ╚══════════════════════════════╝ Возможности по доводке и упрощению данной конструкции оставляю на ваше усмотрение. Когда разберетесь с межоверлейными макро- сами, сами усовершенствуете данный макрос, если конечно он вам понадобиться. Дело в том, что пока практически не начнешь рабо- тать с ними, не почувствуешь всю красоту и удобство, а многих очень часто отталкивает незнание или отсутствие какой-либо инфор- мации по данной теме, и лучше всего писать макрос под конкретную, злободневную зада- чу, тогда даже самые сложные и трудоемкие операции, по-крайней мере в основном, бу- дут выполняться редактором самостоятельно. А выгода рассмотренного макроса я думаю очевидна, его гибкость позволит вам не пи- сать кучу макросов на разные модели, а просто оперативно поменять модель и про- должить работу... *** 2. ─── Макрос по номером два, в нашем списке, позволяет скопировать отобранные уже игры фирмы "Ocean" в отдельный файл. Мы расс- мотрим два варианта такого макроса: Вариант N 1. ─────────── Макрос копирует отобранные игры в отдель- ный файл, и выходит в каталоговые панели is_dos ; Вариант N 2. ──────────── Макрос копирует отобранные игры в отдель- ный файл, но вместо выхода из редактора, удаляет эти игры и выходит в начало файла, ожидая ваших последующих действий ; Следует помнить, что эти макросы начинают работать с того места на которое вы выста- вите курсор. Итак их общая часть такова. Вызываем оверлей блочных операций, марки- руем строку на которую мы уже выставили курсор, затем выходим из оверлея с помощью комбинации клавиш SS/m, она соответствует символу точка ".", выходим в оверлей до- полнительных функций и нажатием клавиши "b", переходим в конец файла. Вызываем еще раз предыдущий оверлей и нажимаем клавишу "p", что позволит записать отмеченный блок в отдельный файл, в том же каталоге, в ко- тором вы работаете. Теперь вводим имя, например : Ocean.txt. Taким образом, отме- ченный блок запишется в файл Ocean.txt : f#11m.#12b#11pOcean.txt#0D Оконцовка макроса будет различной, поэтому рассмотрим ее по вариантам. ВАРИАНТ N 1. ──────────── В этом варианте снимаем отметку, войдя в оверлей, символом "о", заходим в оверлей дополнительных функций, символом "Е" , по- падаем в меню выхода, символом "D" , вы- полняем "сухой" выход из редактора в пане- ли is_dos. Строка макроса для этого вари- анта будет выглядеть так : f#11m.#12b#11pOcean.txt#0D#11o#12ed ВАРИАНТ N 2. ──────────── В этот случае, входим в оверлей блочных операций, дважды используя комбинацию CS/D, на этом оверлее, удаляем отмеченный блок и , к примеру , возвращаемся в начало файла : f#11m.#12b#11pOcean.txt#0D#11#44#12t *** 3. ─── Третий макрос позволит вам подсчитать, все, что угодно по вашему каталогу, сколь- ко игр на определенную букву в нем, сколь- ко игр какого-то года выпуска и т.д. и т.п. Рассмотрим его несколько другим спо- собом, т.е. сначала я запишу макрос, а по- том объясню его. Принцип его работы подо- бен рассмотренному выше макросу, т.е. прежде чем запустить его в работу, необхо- димо сначала, выставить необходимые пара- метры модели, т.е. того, что будем счи- тать, и замены и кроме этого надо зайти в оверлей калькулятора, и ввести, допустим "0", что бы при входе в него из макроса все корректно обрабатывалось. ПРИМЕЧАНИЕ. Дело в том, что после загрузки файла в ре- дактор этот оверлей сразу работает на ввод числа, но стоит выполнить хоть одно вычис- ление, как потом, при входе он будет тре- бовать сначала нажатия клавиши ввода, а потом уже символа и, что бы не морочить себе голову и не создавать лишние труднос- ти лучше решить эту проблему сразу, до за- пуска макроса. Еще одна недоработка созда- телей редактора. Макрос - счетчик ┌─────────────────────────────────┐ │ 1#12t#12fg0#10#0E2 │ │ 2#12T#12fn#10#12ci1#0Dko#10#0E3 │ │ 3#12t#12fnS#10#0E2 │ └─────────────────────────────────┘ Макрос вызывается по цифре 1, переходим в начало файла, вызываем оверлей поиска и замены, производим глобальную замену в файле модели, меняем модель и замену мес- тами, снимаем оверлей, это необходимо для зацикливания макроса между второй и трет- ьей строкой, вызываем следующую строку по цифре 2. В ней делаем проверку на снятие цикла ( #12T ), опять вызываем оверлей по- иска и замены, даем команду найти следую- щую, от начала файла модель, снимаем овер- лей, вызываем оверлей калькулятора "#12c", затем , символом "i", пeреводим оверлей в режим ввода числа, вводим цифру "1", подт- верждаем кодом #0D, складываем 1 и 0, ме- няем их местами и наконец выходим из овер- лея( замена необходима для того, что бы результат сложения записывался в то месте, откуда мы его потом скопируем в файл). Вы- зываем третью строку макроса. Переходим в начало файла, вызываем оверлей поиска и замены, ищем следующую модель, возвращаем ей предыдущее значение и опять вызываем макросную строку 2, тем самым зацикливая макросную цепочку до теста на пустую стро- ку. После проведенных расчетов и заверше- ния работы макроса нужно просто еще раз зайти в оверлей калькулятора и выйдя из него по клавише Space. Результат вычисле- ний тут же запишится в файл. ***************************************** Можно до бесконечности приводить примеры макросов, но думаю, в этом нет необходи- мости, главное, что бы вы уловили суть макроса, способ его построения и те огром- ные возможности, которые он предоставляет. В конце, я хотел бы уделить несколько слов некоторым сложным моментам, которые подс- терегают вас на этом пути. ОСОБЕННОСТИ : ───────────── 1. При работе с оверлеем калькулятора, после занесения результата в текст, нельзя вызвать оверлей макросов из макросной строки ; 2. При работе с двумя файлами, используя такую возможность оверлея блочных опера- ций, также нельзя вызвать оверлей макросов из макросной строки ; 3. (От редакции) Также нельзя вызвать мак- рос из меню занесения параметров (SS/Space + P) 4. Новая версия IS_DOS Classic 4.5 ,позво- ляет вставлять в строку макросов и исполь- зовать отдельно еще один служебный символ :" #Д ", который воспроизводит текущую да- ту, выставленную в файле date.com . Хотелось бы, что бы при разработке новых версий, ISKRASOFT приняла во внимание эти недостатки. На этом я заканчиваю цикл ста- тей по макросам, хотя уверен буду не раз возвращаться к этой теме в следующих стат- ьях. Попробуйте макросы и если у вас воз- никнут вопросы или коментарии к данной ин- формации, буду очень рад помочь вам. В следующей статье поговорим о возможностях использования bat-файлов в системе IS_DOS и их связи с системой меню. Кроме этого со следующего номера журнала, должна появить- ся новая рубрика для владельцев компьютера PROFI, в которой будут рассмотренны раз- личных прикладные программы в среде СР/М, дополнительные возможности по использова- нию IS_DOS и многое, многое другое. Так что до новых встреч... __________________________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября