Текст
                    В.З.АЛАДЬЕВ, В.Ф.ШИЛЕНКО

ПРОФЕССИОНАЛЬНЫЙ
ПЕРСОНАЛЬНЫЙ
КОМПЬЮТЕР

АРХИТЕКТУРА
И ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ

- -

СПРАВОЧНОЕ
РУКОВОДСТВО


В.З. АЛАДЬЕВ, В.Ф. ШИЛЕНКО ПРОФЕССИОНАЛЬНЫЙ ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР ЙМ юзо АРХИТЕКТУРА И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СПРАВОЧНОЕ РУКОВОДСТВО Киев „Украинская Советская Энциклопедия” имени М. П. Бажана 1990
ББК 32.973.2fl2 А45 Рецензент академик АН УССР В. И. СКУРИХИН Аладьев В. 3., Шиленко В. Ф. А45 Профессиональный персональный компьютер ИС- КРА 1030: Архитектура и прогр. обеспечение: Справ, руководство. - К.: УРЕ, 1990. - 484 с.: ил. 14 ISBN 5-88500-017-4 (в пер.) В справочном руководстве описана архитектура и прог- раммное обеспечение наиболее массовой отечественной персональной ЭВМ (ПЭВМ) „ИСКРА 1030”. Приводится ха- рактеристика основных компонент ПЭВМ и ее программно- го обеспечения (ПО): ^операционная система АДОС, язык программирования БЕЙСИК, редактор текстов и целый ряд других программных средств широкого назначения. Рассматриваются вопросы использования на ПЭВМ прог- раммных средств, разработанных для одной из наиболее популярных за рубежом ПЭВМ IBM PC. Рассчитано на ши- рокий круг специалистов, использующих в своей деятель- ности ПЭВМ, а также студентов и учащихся, изучающих „Основы информатики и вычислительной техники”. 1404000000-005 М222(04)-90 БЗ-25-10-89 ББК 32.973.2Я2z ISBN 5-88500-017-4 © Аладьев В. 3., Шиленко В. Ф., 1990
ПРЕДИСЛОВИЕ Программирование - это ремесло, и каждый программист должен достичь требуемого профессионального уровня, одним из путей повышения которого является наличие специальной литературы. Эта проблема становится особенно актуальной в наши дни, когда наряду с относительно небольшим числом боль* ших ЭВМ, предназначенных в основном для профессионального пользователя, в народное хозяйство страны начинают массово поступать как отечественные, так и зарубежные персональные ЭВМ (ПЭВМ). Персональный характер использования данного класса ЭВМ поднимает вопросы подготовки массового пользо- вателя, значительную часть которых будут составлять непро- фессиональные пользователи. Имеющаяся литература по ПЭВМ явно недостаточна и не удовлетворяет целому ряду требова- ний. Периодически появляющаяся в этом направлении переводная литература ориентирована на зарубежные модели ПЭВМ и не отражает целого ряда особенностей отечественных моделей, унифицированных с соответствующими зарубежными образца- ми. Выпускаемые отечественной промышленностью наиболее массовые ПЭВМ ИСКРА 1030, ЕС 1840 и НЕЙРОН И9.66, унифи- цированные с такой известной зарубежной системой ПЭВМ, как IBM PC/XT, оказались не совместимыми между собой по ряду основных характеристик. Наконец, поставляемая, в частности с ПЭВМ ИСКРА 1030, техническая документация не отражает це- лого ряда возможностей стандартно поставляемого програм- много обеспечения, а то и вовсе оказывается некорректной. Все это создает определенные трудности при массовом освоении ПЭВМ, особенно непрофессиональным пользователем. Настоящая книга предполагает заполнить ряд перечисленных выше пробелов. Она предназначена для пользователей ПЭВМ различного уровня. В книге рассматриваются вопросы разра- ботки прикладного программного обеспечения с использовани- ем языка программирования БЕЙСИК и операционной системы АДОС для наиболее массовой отечественной ПЭВМ ИСКРА 1030. А так как данная модель ПЭВМ унифицирована с такой извест- ной зарубежной системой, как IBM PC/XT, то это делает данную книгу достаточно актуальной для любого пользователя, эксплу- атирующего ПЭВМ, совместимые с серией IBM РС/ХТ/АТ. Для лучшего понимания назначения данной книги и ориентации в ней приведен краткий обзор-экскурс ее содержания. Введение представляет современное состояние и ближайшие перспективы использования и развития класса персональных
ЭВМ и их программного обеспечения. Особый акцент делается на те ПЭВМ и программные средства, которые совместимы с IBM PC и представляют интерес для пользователей ИСКРА 1030 ЕС 1840, НЕЙРОН И9.66, ЕС 1834 (ГДР), MS/2 (ВНР), IDM (Индия), PCT 88-С, РСТ 286-10 (Австрия) и др. Во второй главе рассматриваются архитектура и основные характеристики технических средств ПЭВМ ИСКРА 1030. Особое внимание уделяется обсуждению тех элементов ПЭВМ, реали- зация которых отлична от соответствующих элементов серии IBM PC/XT. Третья глава посвящена архитектуре и функциям програм- много обеспечения (ПО) ПЭВМ ИСКРА 1030. Предложена класси- фикация программных средств и на ее основе рассматривают- ся основные программные средства, которые можно использо- вать на ПЭВМ ИСКРА 1030. Кратко рассматриваются вопросы использования наиболее популярных программных средств массового назначения на ПЭВМ ИСКРА 1030. В четвертой главе детально рассматривается операционная система АДОС 2.0, совместимая с хорошо известной системой MS DOS версии 2.0. Подробно рассматриваются все средства системы АДОС и ее организация. Особое внимание уделяется особенностям реализации и применения основных средств АДОС, которые не нашли отражения в отечественной, а в ряде случаев - и в зарубежной литературе. Изложение иллюстриру- ется различного назначения примерами, что позволяет читателю получить целый ряд практических рекомендаций по использова- нию системных средств в своей практической деятельности. Пятая глава содержит детальное описание одного из наибо- лее развитых диалектов языка БЕЙСИК - БЕЙСИК А серии IBM PC.’ Данный язык является наиболее популярным на различного типа ПЭВМ. В его среде разработано и разрабатывается боль- шое число программных средств различного назначения. Дается классификация средств языка БЕЙСИК и на ее основе проводит- ся обсуждение всех средств языка. Каждое средство (команда, оператор, различного рода функции) рассматривается на 4-х уровнях: синтаксис и семантика, назначение, использование и особенности применения и выполнения. Изложение хорошо ил- люстрировано примерами. Много внимания уделено вопросам методологии разработки программных средств в среде языка БЕЙСИК и системе АДОС. Особое внимание глава уделяет воп- росам реализации и выполнения ряда основных средств языка, не нашедших отражения в отечественной массовой и техничес- кой литературе, что представит большой интерес читателю, раз- рабатывающему прикладное ПО в среде языка БЕЙСИК. Описывая в настоящей книге одну из наиболее массовых систем программирования ПЭВМ на основе языка БЕЙСИК, при рассмотрении вопросов программирования ограничимся исклю- чительно средой языка БЕЙСИК (образно говоря, не выходя за аксиоматику языка БЕЙСИК), лишь схематично обозначая связь с другими системами программирования, например, на языке
Макроассемблера. Такой подход позволяет достаточно компакт- но и детально рассмотреть основные вопросы использования ПЭВМ ИСКРА 1030 массовым пользователем, что особенно акту- ально для многочисленных пользователей, работавших до этого в среде диалектов языка БЕЙСИК для ПЭВМ ИСКРА 226, ДВК, ЭЛЕКТРОНИКА, серий ЕС ЭВМ и СМ ЭВМ. В шестой главе рассматривается большое число примеров использования средств языка БЕЙСИК для разработки ПО поль- зователя. Приведенные примеры преследуют не только чисто иллюстративные цели по использованию^ особенностям и воз- можностям основных средств языка БЕЙСИК, но и имеют су- губо прикладное назначение, так как многие из них могут быть использованы в качестве готовых сервисных программных средств. Глава седьмая посвящена весьма важному вопросу расши- рения выразительных средств языка БЕЙСИК ПЭВМ ИСКРА 1030, который несмотря на развитые средства не предоставляет пользователю целый ряд важных функций: операции с матрич- ными объектами, внешней сортировки, динамической модифи- кации программ, вычисления интегралов и корней функций, преобразования файлов из одного типа в другой и т. д. В главе описывается пакет <PARCELLA>, предназначенный для расши- рения выразительных средств языка БЕЙСИК. В настоящей реализации пакет включает две версии и позволяет использо- вать в БЕЙСИК-программах дополнительные средства: динами- ческой модификации программ, вычисления интеграла и ну- левого корня функции одного переменного, внешней сортиров- ки по двум параметрам и сложному логическому условию, преобразование последовательного файла в файл произволь- ного доступа и др. Приводятся рекомендации по дальнейшему расширению функциональных возможностей пакета и его при- менению. На примере организации пакета <PARCELLA> демон- стрируются достаточно простые и эффективные подходы к раз- работке многомодульных программных систем сложной струк- туры. Восьмая глава содержит описание и рекомендации по ис- пользованию текстового редактора, представляющего большой интерес для широкого круга пользователей, включая непрофес- сиональных пользователей ПЭВМ. Большое внимание уделено особенностям выполнения и использования основных режимов редактора. Дается описание возможностей редактора, не на- шедших отражения в технической литературе, поставляемой с ПЭВМ ИСКРА 1030. Наряду с описанием стандартно поставляе- мого редактора текстов дается краткая сравнительная характе- ристика аналогичных средств, имеющихся на ПЭВМ ЕС 1840 и НЕЙРОН И9.66. В девятой главе описывается минимальная базовая операци- онная система MINIDOS, разработанная на основе систем АДОС и MS DOS версии 3.3. Данная система размещается на одном то- ме НГМД и включает такие средства программирования, как
Turbo-PASCAL, Forth и BASIC, а также редактор текстов. Эксплу- атация системы показала ее высокую эффективность при нали- чии у ПЭВМ только НГМД, что окажется весьма актуальным для широкого круга пользователей ПЭВМ ИСКРА 1030. Десятая глава знакомит с целым рядом программных средств, пока стандартно не поставляемых с ПЭВМ, но либо имеющихся в фондах алгоритмов и программ, либо в значитель- ной мере совместимых с ПЭВМ ИСКРА 1030. Описание средств ведется по трем направлениям: операционные системы ПЭВМ, инструментальные средства и системы программирования, пакеты прикладных программ. Среди этих средств можно упо- мянуть такие, как: MS DOS 3.3, DCP, MS DOS 4 1, UNIX, XENIX, PICK, Side Kick Plus (операционные системы), Turbo-PASCAL, Turbo-BASIC, FORTH, Quick C-Compiler, Turbo-PROLOG, PRO- LOG V Plus (системы программирования), Word Perfect, Easy Flow, TEX, GEM, GraFORTH, SuperCalc 3, dBase 4 Plus, EXCEL, WORKS, FRAMEWORK, LOTUS 1-2-3, REDUCE, Turbo-EURECA (па- кеты прикладных программ). По вопросам поставки программных средств для ПЭВМ, сов- местимых с IBM РС/ХТ/АТ, можно обращаться по адресу: Таллинн 200108 Мустамяэ теэ 55 ПТИ Госстроя ЭССР тел. (8-0142)-527-664 В приложениях приводятся наиболее важные сводные данные по ПЭВМ ИСКРА 1030 и ее основным программным компонен- там: операционной системе, языку программирования БЕЙСИК и редактору текстов, а также другие полезные справочные све- дения. Литература содержит большое число как отечественных, так и зарубежных источников по ПЭВМ, совместимым с ПЭВМ ИСК- РА 1030, и их программному обеспечению, что представляет определенный библиографический интерес. Предлагаемая книга представит интерес не только для широ- кого круга специалистов, использующих в своей деятельности возможности ПЭВМ ИСКРА 1030 или унифицированных с ней ПЭВМ (ЕС 1840, ЕС 1841, ЕС 1834, А 7150, MS/2 и так далее), но вообще для пользователей любой 16-разрядной ПЭВМ, совме- стимой с системой IBM РС/ХТ/АТ. Книга может оказаться весьма полезной студентам и учащимся по курсу „Вычислитель- ная техника и информатика”. В заключение пользуемся случаем выразить благодарность фирме Borland International Inc. (США) за предоставленную воз- можность ознакомления со своими новыми разработками в об- ласти программного обеспечения ПЭВМ, совместимых с IBM РС/ХТ/АТ.
СПИСОК СОКРАЩЕНИЙ ААПД - адаптер аппаратуры передачи данных АВ - арифметическое выражение АЛУ - арифметико-логическое устройство АП - абонентский пункт АРМ - автоматизированное рабочее место АТС - адрес текущего сегмента памяти АЦК - алфавитно-цифровая клавиатура ПЭВМ АЦПУ - алфавитно-цифровое печатающее устройство БВ/В - программный буфер ввода-вывода данных БД - база данных БЗ - база знаний БИС - большая интегральная схема БСВ/В - базовая система ввода-вывода АДОС БУФ - блок управления файлом в системе АДОС ВД - виртуальный диск ПЭВМ ВП - внешняя память ПЭВМ ВТ - вычислительная техника ГО - графический объект в среде языка БЕЙСИК ГФП - глобальная функция перехода однородной структуры ДДК - действительная десятичная константа ДПСЧ - датчик псевдослучайных чисел БЕЙСИКа ДЭК - действительная экспоненциальная константа ЕС ЭВМ - единая система электронных вычислительных машин ЕСПД - единая система проектной документации ЗУПД - запоминающее устройство с произвольным доступом ЗЭ - запоминающий элемент памяти ИВВ - интерфейс ввода-вывода ИИ - искусственный интеллект ИП - идентификатор переменной языка БЕЙСИК ИПС - информационно-поисковая система ИСИ - интеллектуальный системный интерфейс ИУ - логическое имя внешнего устройства ПЭВМ ИФ - имя файла программы или данных -• КА - конечный автомат к-ПА - к-мерный параллельный алгоритм КВР - клавиша верхнего регистра клавиатуры ПЭВМ КЗ - код завершения программы или команды АДОС КСВ/В - консоль стандартного ввода-вывода ПЭВМ КФ - конфигурация однородной структуры^ ЛУ - логическое условие в операторах БЕЙСИКа ЛУВ/В - логика управления системой ввода-вывода ЛФП - локальная функция перехода однородной структуры МАИ - маркер адреса идентификации на дискете МАСМ - макроассемблер ПЭВМ ИСКРА 1030
МОФП - многооператорный фрагмент БЕИСИК-программы МП - микропроцессор МТ - машина Тьюринга МФП - многострочный фрагмент БЕЙСИК-программы НГМД - накопитель на гибких магнитных дисках НМД - накопитель на жестких магнитных дисках „Винчестер НМЛ - накопитель на магнитной ленте ОВС - однородная вычислительная структура ОКП - окружение команд процессора ОП - оперативная память ПЭВМ ОПАС - обработчик прерываний от адаптера связи ОПОС - обработчик прерываний от особых ситуаций и ошибок ОПС - обслуживающие программные средства ОПТ - обработчик прерываний от таймера ПЭВМ ОПФК - обработчик прерываний от функциональных клавиш ОПФМ - обработчик прерываний от фоновой музыки ПЭВМ ОС - операционная система ОСТ - однородная структура ПДП - прямой доступ в память ПДП - прямой доступ в оперативную память ПДС - параллельная динамическая система ПЗУ - постоянное запоминающее устройство ПК - персональный компьютер ПНК - порядковый номер клавиши клавиатуры ПЭВМ ПО - программное обеспечение ПЭВМ ПОЭ - прямоугольная область экрана дисплея ППО - прикладное программное обеспечение ПЭВМ ППП - пакет прикладных программ ПФД - последовательный файл данных ПЦ - признак цвета экрана дисплея ПЭВМ - персональная электронная вычислительная машина РФ - расширение имени файла САПР - система автоматизации проектирования СВ - символьное выражение СИН - системный интерфейс СМ ЭВМ - система малых электронных вычислительных машин СОП - список операторов языка БЕЙСИК СПО - системное программное обеспечение ПЭВМ СПС - сервисные программные средства ПЭВМ СРК - состояние регистра клавиатуры ПЭВМ СУБД - система управления базами данных СФ - спецификатор файла программы или данных ТОС - теория однородных структур ТабК - таблица констант УВВ - устройство ввода-вывода ПЭВМ УМТ - универсальная машина Тьюринга УПФМ - условие прерывания от фоновой музыки ПЭВМ ФДПД - файл данных произвольного доступа ФК - функциональные клавиши ПЭВМ _ ФУП - функции управления печатью БЕЙСИКа
Ц16К Ц8К ЦДК ЦК ЦП ЦЭГР ЧПУ шс ЭБМ ЭВМ - целая 16-ричная константа - целая 8-ричная константа - целая десятичная константа - цифровая клавиатура ПЭВМ - центральный процессор ПЭВМ - цвет экрана в графическом режиме - числовое программное управление - ширина строки вывода информации - электронная бухгалтерская машина - электронная вычислительная машина
1. ВВЕДЕНИЕ Начало 70-х годов характеризуется появлением нового поко- ления средств вычислительной техники (ВТ) - персональных ЭВМ (ПЭВМ), получивших к настоящему времени чрезвычайно широкое распространение и проникающих во все новые сферы человеческой деятельности. Интерес к различного типа ПЭВМ в настоящее время настолько велик, что в США с 1988 г. начал вы- ходить специальный журнал, посвященный ПЭВМ - „PC Compu- ting”, в котором представлены практически все сведения об ос- новных ПЭВМ, выпускаемых в различных странах мира. Данный журнал наряду с сугубо техническими вопросами, ориентиро- ванными на пользователей различного уровня, много внимания уделяет проблеме интерфейса человека и ПЭВМ. Превосходные оформление и представление информации по всем основным аспектам развития и привлечения ПЭВМ делают данный журнал отличным средством приобщения широких масс к миру совре- менной компьютерной техники и технологии. К настоящему времени общий ежегодный объем выпуска ПЭВМ превысил 5 млн. единиц. Постоянно растет и объем программного обеспе- чения, ориентированного на различного типа ПЭВМ. ПЭВМ рево- люционизируют ВТ в том отношении, что она становится все более дешевой, массовой, доступной и надежной, а ее приме- нение оказывается экономически эффективным практически во всех областях. По существу, ПЭВМ становятся фундаментом грандиозной программы компьютеризации общества на всех его уровнях. Класс ПЭВМ, в свою очередь, делится на четыре основные подкласса: портативные, переносные, домашние и профессио- нальные персональные ЭВМ. Известный журнал в области микропроцессорной ВТ „Chip”, издаваемый в ФРГ, провел об- следование на лучшие ПЭВМ 1987 г. [147]. Целью такого обсле- дования, в первую очередь, было проследить современные тен- денции развития персональной ВТ. Используя данные обследо- вания, приведем на примере лучших образцов ПЭВМ характе- ристики четырех основных подклассов персональных ЭВМ. Портативные ПЭВМ представляют собой миниатюрные компь- ютеры, предназначенные для решения достаточно сложных вы- числительных и относительно простых информационных задач. Лучшая модель данного подкласса ZENITH Z-183 имеет: микро- процессор, работающий с тактовой частотой 7,16 МГц; память емкостью 512 Кбайтов (с возможностью расширения до 1 Мбай- та); накопитель на гибких магнитных дисках диаметром 89 мм
и емкостью 880 Кбайтов; параллельный и последовательный интерфейсы; дисплей монохромный или цветной с разрешающей способностью 640x640 точек. ПЭВМ данного типа могут рабо- тать от батарейных источников питания. Переносные ПЭВМ по своим возможностям практически сов- падают с портативными и предназначены, в первую очередь, для работы в условиях частой смены мест их использования. Луч- шая модель данного типа COMPAQ Portable III имеет следующие характеристики: микропроцессор, работающий с тактовой час- тотой 12 МГц; память емкостью 640 Кбайт (с возможностью расширения до 6,6 Мбайт); накопители на гибких магнитных дисках диаметром 130 мм и емкостью 1,2 Мбайт; диски типа „Винчестер” емкостью 20 или 40 Мбайт; цветной дисплей; плаз- менный дисплей с разрешающей способностью 640x640 точек; последовательный и параллельный интерфейсы. Домашние ПЭВМ предназначены для решения вычислитель- ных и информационных задач средней степени сложности: веде- ние различного рода семейных расчетов, различного типа игро- вые задачи, обучение различным предметам, учебные задачи, демонстрация компьютерных слайдов и так далее. У нас в стра- не такого типа ПЭВМ часто называют школьными компьютерами, хотя это и не совсем верно. Лучшая модель такого типа ПЭВМ Amiga 500 в своем составе имеет: микропроцессор, работаю- щий с тактовой частотой 8 МГц; память емкостью 640 Кбайтов (с возможностью расширения до 1,6 Мбайт); накопители на гиб- ких магнитных дисках диаметром 89 мм и емкостью 720 Кбайт; магнитные диски типа „Винчестер” емкостью 10 Мбайт; дисплей (26,5 см по диагонали) на жидких кристаллах; последователь- ный, параллельный и RGB-видео интерфейсы; масса 7 кг. Профессиональные ПЭВМ предназначены для решения слож- ных вычислительных, информационных, логических и других задач профессиональными специалистами в науке, технике, уп- равлении производством, службе быта, образовании и т. д. Типич- ными представителями ПЭВМ этого подкласса являются IBM РС/ ХТ/АТ, послужившие прототипами для отечественных профес- сиональных ПЭВМ ИСКРА 1030, ЕС 1840 и НЕЙРОН И9.66. ПЭВМ этого типа обладают весьма развитыми системным и проблем- ным программным обеспечением и широким набором внешних устройств. По своим возможностям они могут конкурировать с целым рядом моделей ЭВМ третьего поколения. Учитывая ори- ентацию настоящей книги именно на профессиональные ПЭВМ, приведем основные характеристики лучших моделей данного подкласса, использующие микропроцессоры (МП) фирмы Intel. В дальнейшем, если не оговорено противного, под термином „IBM РС/ХТ/АТ” будет пониматься любая модель серий IBM PC, IBM XT и IBM AT, базирующихся на МП Intel 8080/8086/8088/ 80286/80386. В настоящее время для моделей 30, 50, 60 и 80 данной серии часто применяется также термин „ПЭВМ серии PS/2”, который также будет использоваться на протяжении книги.
Лучшая модель данного типа IBM Personal System/2 Model 30 имеет следующие основные характеристики: микропроцессор Intel 8086/8088, работающий с тактовой частотой 8 МГц; па- мять емкостью 640 Кбайт (с возможностью расширения до 2,64 Мбайт); два накопителя на гибких магнитных дисках диа- метром 89 мм и общей емкостью 1,4 Мбайт; диск типа „Вин- честер” емкостью 20 Мбайт; монохроматический или цветные дисплеи с различным качеством изображения; последователь- ный (RS-232) и параллельный интерфейсы. Модель Tandon РАС 286 имеет микропроцессор Intel 80286, работающий с тактовой частотой 6/8 МГц; память емкостью 640 Кбайт (с возможностью расширения до 1 Мбайта); накопи- тель на гибких магнитных дисках диаметром 89 мм и емкостью 1,2 Мбайт; два накопителя типа „Винчестер” общей емкостью 60 Мбайт; цветной графический дисплей с разрешающей способ- ностью 640x350 точек; последовательный и параллельный ин- терфейсы. Данная модель использует микроканальную структу- ру и ориентирована на графический стандарт VGA. Принимая во внимание тот факт, что описанные выше ПЭВМ четырех основных подклассов представлены только их базовы- ми моделями (без учета возможности их комплектации другими внешними устройствами), можно получить довольно полное представление об уровне современной массовой персональной ВТ различного назначения. Как правило, базовое программное обеспечение включает достаточно большой набор языков прог- раммирования, пакеты прикладных программ, игровые и демон- страционные программы и т. д. Остановимся только на одном существенном моменте, связанном с развитием отечественной персональной ВТ. Лежащий в основе современных ПЭВМ относительно неболь- шой набор универсальных микропроцессоров (Intel 8086/80286/ 80386, Motorolla 66000 и др.) допускает при относительно не- больших затратах сборку массовых ПЭВМ всех типов и различ- ных их модификаций в домашних условиях квалифицированны- ми специалистами. У нас в стране имеется немало примеров собранных различного типа ПЭВМ как в условиях кружков, групп энтузиастов, так и просто отдельными специалистами, включая модели IBM PC весьма оригинального исполнения. Все это хорошо и должно поощряться, однако используемые в ка- честве дисплеев отечественные бытовые телевизоры чрезвы- чайно опасны из-за вреда, наносимого зрению пользователя. Поэтому крайне актуальной при решении проблемы компьюте- ризации общества становится задача налаживания выпуска нашей промышленностью специальных дисплеев для ПЭВМ. Второй проблемой является массовая подготовка пользова- телей на всех уровнях, так как именно широкое внедрение ПЭВМ в жизнь общества и их доступность при отсутствии соответствующей подготовки приведут к тому, что новей- шие ПЭВМ с их превосходными возможностями будут ис- пользоваться столь неквалифицированно и неэффективно,
как и первые ЭВМ. А разработка и эксплуатация програм- много обеспечения сделают несколько шагов назад и потеряют те позиции, которые были завоеваны столь большими усилиями нескольких поколений программистов. Следует также отметить, что появление ПЭВМ не только дало огромный импульс компьютеризации общества, но и наряду с этим породило целый ряд сопутствующих проблем. И одной из них является проблема разработки для ряда классов задач эф- фективных алгоритмов, функционирующих в условиях относи- тельно ограниченных вычислительных ресурсов ПЭВМ [215]. В настоящее время мировой парк ПЭВМ состоит из целого ря- да моделей, к наиболее известным из которых можно отнести Amiga 500, Atari 1040 ST, Cyborg 386, Blackship 386, PS/2, Apple Toshiba T 1000 и др. Подобно ЭВМ других классов ПЭВМ работа- ют под управлением операционных систем (ОС), из которых наи- более популярные MS DOS, PC DOS, CP/M-86, UNIX, XENIX, VE NIX, OS/2. ПЭВМ характеризуются широким применением более простых языков программирования высокого уровня, из кото- рых наиболее популярные БЕЙСИК, ПАСКАЛЬ, ФОРТ, СИ, ФОРТ- РАН-77, КОБОЛ, АДА и ЛИСП. Более подробную информацию о современном состоянии и развитии ПЭВМ, их программного обеспечения, тенденциях развития и применения за рубежом можно найти в [1-16, 21—27, 31, 80-83, 89] и в целом ряде др. отечественных и зарубежных источниках. В последние годы отечественная промышленность также приступила к выпуску ПЭВМ, среди которых можно выделить ЕС 1840, ДВК, Нейрон И9.66, ИСКРА 226 и ИСКРА 1030. Большое распространение получила ПЭВМ ИСКРА 226, программно сов- местимая с хорошо известной системой WANG 2200 MVP. ПЭВМ ИСКРА 226 ориентирована на проведение в диалоговом режи- ме оперативных плановых расчетов, работы с локальными база- ми данных в составе ИПС и поисковых систем, решения в диало- говом режиме научно-технических, инженерных, статистиче- ских и оптимизационных задач, создания систем автоматизации проектирования, диалоговые системы различного назначения, редакционно-издательские работы и т. д. ПЭВМ ИСКРА 226 мо- жет быть использована в сетях ЭВМ на базе СМ ЭВМ и ЕС ЭВМ в качестве интеллектуального терминала или элементарной ЭВМ на низшем уровне сетевой обработки информации [1-3]. Серия ИСКРА 1030 явилась качественно новым развитием ПЭВМ ИСКРА 226. Прототипом для данной серии послужила хо- рошо известная за рубежом система персональных компьюте- ров IBM PC [5, 7, 11, 52, 75,86, 88]. По сравнению с ПЭВМ ИС- КРА 226 ИСКРА 1030 обладает значительно более высокими техническими и эксплуатационными характеристиками, а так- же более развитым программным обеспечением, базирующем- ся на одной из наиболее популярных операционных систем для ПЭВМ - MS DOS. ПЭВМ ИСКРА 1030 снабжена программными средствами, поз- воляющими использовать на ней разработанное программное
обеспечение для электронных бухгалтерских машин типа ИС- КРА-555 и НЕВА-501. Такое решение позволяет достаточно про- сто перейти большому числу пользователей с морально и фи- зически устаревшей техники на перспективные ПЭВМ. Наряду с этим, ПЭВМ ИСКРА 1030 не имеет стандартно поставляемых средств для программной совместимости с ПЭВМ ИСКРА 226, что в первую очередь объясняется принципиальными различи- ями в архитектуре технических и программных средств обеих ПЭВМ. Вопросам программной совместимости ПЭВМ таких, как ДВК, ЭЛЕКТРОНИКА-60 и ИСКРА 226 посвящены работы [1-3], однако проведенный анализ программных средств показывает нецелесообразность разработки аналогичных программных систем сопряжения для ПЭВМ ИСКРА 1030 и ИСКРА 226. Особо следует остановиться на вопросах применения ПЭВМ. Ориентированные первоначально на выполнение относительно несложных задач, в последние годы ПЭВМ все интенсивнее вступают в конкуренцию с мини-ЭВМ и ЭВМ более старших клас- сов. Данная тенденция ощущается все интенсивнее. Прежде всего, массовая ПЭВМ ближайших лет представляет- ся как 64-разрядная ЭВМ, имеющая от 4 до 32 Гигабайт памяти, тем или иным способом распределенной между оперативной и внешней памятью. Быстродействие такой ПЭВМ будет не менее 10 млн. операций/с, она почти всегда будет соединена линиями связи с подобными ей или другими ЭВМ. Доступность таких ли- ний связи будет столь же важной, как и доступность самих ПЭВМ и их программного обеспечения. Создание сетей обработки информации, включающих в себя в качестве элемен- тов того или иного назначения ПЭВМ с вышеуказанными харак- теристиками, позволит пользователю использовать все прог- раммные и информационные ресурсы такой информационно- вычислительной сети. На этом пути уже наметился существенный прогресс. Так, ПЭВМ Personal Logician 386 (США) по архитектуре совпадает с IBM PC/AT, но дает возможность выполнять трехмерное графи- ческое моделирование при трехкратном повышении производи- тельности [22]. Сопроцессоры на базе 32-разрядных МП обеспе- чивают функционирование ОС UNIX и быстродействие до 10 млн. операций/с на ПЭВМ серии IBM PC [21] и совместимых с ними моделях ПЭВМ. Разработанный 64-разрядный векторный микро- процессор используется в качестве сопроцессора в IBM PC/AT или совместимых с ней ПЭВМ и позволяет повысить производи- тельность этих ПЭВМ на целом ряде задач до уровня производи- тельности супермини-ЭВМ стоимостью в 1 млн. долларов [23]. Фирмой APPLE (США) на основе концепции открытой архитекту- ры 'Open МАС' создана ПЭВМ МАС-2 с повышенным быстродей- ствием и улучшенными графическими возможностями [24]. ПЭВМ МАС-2 работает под управлением MS DOS, созданной для ПЭВМ корпорации IBM. Фирмой AMD (США) создан 32-разрядный микропроцессор с быстродействием 17 млн. операций/с в уста- новившемся режиме и в максимальном режиме - до 25 млн.
операций/с [25]. Весьма высоко быстродействие ПЭВМ IBM PC/AT 70-А21 и IBM PC/AT 386/25 фирмы Compaque (США). Сверхвысоким быстродействием обладает и ПЭВМ PCD-3TD [209]. Уже сегодня ПЭВМ, чтобы котироваться на международном рынке, должны иметь, как минимум: МП типа Intel 80286 с такто- вой частотой не менее 8 МГц, устройства на гибких магнитных дисках емкостью не менее 720 Мбайт каждое, диски типа „Вин- честер” емкостью не менее 40 Мбайт, оперативную память не менее 2 Мбайт, принтер и цветной графический дисплей. В нас- тоящее время на западном рынке типичной моделью является ПЭВМ Cyborg 386 на базе МП Intel 80386 с оперативной памятью в 2 Мбайта (возможностью расширения до 16 Мбайт), двумя гиб- кими дисками емкостью 1,4 Мбайт и двумя дисками типа „Вин- честер” емкостью 40 Мбайт каждый, параллельным принтером и цветным графическим дисплеем. Как уже отмечалось, ПЭВМ серии PS/2 содержат модели 30, 50, 60 и 80, отличающиеся производительностью и функциональ- ными возможностями. ПЭВМ серии PS/2 нижнего уровня базиру- ются на 16-разрядном МП Intel 8086 (как и ПЭВМ ИСКРА 1030) и работают с ОС MS DOS 3.3 (АДОС 2.0), тогда как ПЭВМ высшего уровня (модель 80) базируются на 32-разрядном МП Intel 80386 и работают с новой мультипрограммной ОС OS/2. Новое поко- ление ПЭВМ с МП типа Intel 80386 и 32-разрядной шиной данных имеют тактовую частоту до 25 МГц и позволяют эффективно раз- рабатывать и использовать САПРы с широкими графическими функциями. Новыми перспективными моделями ПЭВМ на основе МП Intel 80386 являются: АМТ-386, GV-386, FS-386, Blackship 386, Z-386 и др. [194]. В минимальной конфигурации все эти модели имеют 32-разрядную память емкостью 1 Мбайт, гибкие диски по 1,2 Мбайта, жесткие диски по 40 Мбайт, стандартные параллельный и последовательный интерфейсы, монохромные видеоадаптер и дисплей. Модели могут работать как под управлением систе- мы MS DOS 3.3,так и 6S/2 с тактовой частотой 16 МГц. Более де- тально перспективы развития 32-разрядных ПЭВМ анализируют- ся в [190], тогда как интересный сравнительный анализ конку- ренции в области разработки новых высокопроизводительных ПЭВМ можно найти в [195]. Много интересных сведений по ПЭВМ серии PS/2 и целому ряду программных средств можно найти В [121]. Параллельная обработка информации в настоящее время яв- ляется наиболее перспективным способом повышения быстро- действия различного класса ЭВМ, включая и ПЭВМ [2, 18, 19, 25, 28, 53, 54, 74, 99, 100, 119, 153-155]. Так, организация парал- лельных вычислений на основе ПЭВМ позволяет в целом ряде случаев увеличить их быстродействие до величины быстродей- ствия супер-ЭВМ типа „CRAY”. С этой целью в состав ПЭВМ включают дополнительные платы расширения. По типу исполь- зуемого процессора дополнительные платы делятся на три
группы: на базе МП Intel 80386, транспьютеров Inmos и RISC-про- цессоров. В частности, платы первого типа предназначены для увеличения производительности ПЭВМ при многопроцессорной работе одновременно нескольких программ под управлением операционной системы MS DOS. Наряду с перечисленными в настоящее время существует ряд других интересных разрабо- ток по созданию перспективных ПЭВМ, что со всей определен- ностью подтверждает вышеприведенные оценки по ПЭВМ бли- жайших 10-15 лет [74-77, 95-100]. Из зарубежных разработок в этом направлении следует осо- бо отметить клеточные ML-сопроцессоры для моделей IBM РС/ ХТ/АТ, разработанные фирмой Cellware Ltd. (Венгрия) [213]. Кле- точный ML-сопроцессор представляет собой однородную матри- цу из 16x16 вычислительных элементов, каждый из которых мо- жет выполнять 16 локальных функций перехода. С матрицей ас- социированы два блока локальной памяти объемом 256 Кбайт и блок управления. Использование ML-сопроцессора с IBM PC/XT/ АТ и совместимыми с ними моделями ПЭВМ позволяет сущест- венно повысить быстродействие при решении таких важных классов задач, как распознавание образов, обработка сигналов, управление технологическими процессами, все типы клеточных и булевых вычислений, использование некоторых типов опера- ций с базами данных и др. Использование ПЭВМ в режиме эмуляции терминалов боль- ших ЭВМ обеспечивает пользователю как доступ к ресурсам большой ЭВМ, так и локальную обработку информации. Наиболь- шее распространение получили технические программные средства для подключения ПЭВМ к большим ЭВМ фирм IBM и DEC (США). Важным этапом в развитии ПЭВМ явилась разработка техни- ческих и программных средств, поддерживающих функциониро- вание ПЭВМ в многопользовательском режиме под управлени- ем современных ОС типа XENIX, МРМ-86, OS/2 и др. Работа ПЭВМ в многопользовательском режиме позволит более эффек- тивно использовать вычислительные ресурсы, создать на осно- ве таких ПЭВМ многопользовательские АРМы, которые в бли- жайшем будущем станут узлами локальных информационно- вычислительных сетей [77]. Разрабатываются и совершенствуются технические и прог- раммные средства для подключения ПЭВМ к функционирующим коммерческим локальным информационно-вычислительным се- тям. В настоящее время в распоряжение пользователей предо- ставлен широкий выбор различных типов локальных сетей на базе ПЭВМ. Локальные сети различаются по топологии, исполь- зуемым методам доступа, физической среде передачи инфор- мации, скорости передачи информации в сети, максимально до- пустимому числу подключаемых к сети ПЭВМ и т. д. Выбор того или иного типа сети определяется конкретными потребностя- ми пользователя [12-15]. Большинство имеющихся локальных сетей поддерживает ПЭВМ IBM РС/ХТ/АТ и совместимые с ними
ПЭВМ, что представляет особый интерес для отечественного пользователя в свете дальнейшего развития применений и са- мой серии ИСКРА 1030. Проведенный анализ показывает, что сетевым требованиям с некоторыми допущениями из массовых отечественных ПЭВМ отвечает, в частности, ИСКРА 1030. Наличие в ней соответству- ющих интерфейсных выходов позволяет с помощью аппаратуры передачи данных сравнительно легко подключать эти ПЭВМ к телефонным линиям общего пользования и получать доступ к информационным ресурсам сети. Уже с учетом таких возмож- ностей ПЭВМ ИСКРА 1030 может служить для создания АРМов, что существенно расширяет возможности применения данного вычислительного средства персонального пользования. Вторая тенденция состоит в том, что рост программных и тех- нических возможностей ПЭВМ позволяет использовать их в тех сферах и для тех задач, которые ранее являлись привилегией более старших классов ЭВМ. Примерами такого рода могут слу- жить задачи генетики, экономики, математического моделиро- вания, прикладной и чистой математик, образования, математи- ческой биологии и биологии развития, социологии, медицины, оптимизации, техники, анализа управляющих систем, обороны и т. д. При определенных допущениях подобные задачи могут успешно решаться и на ПЭВМ ИСКРА 1030. Третьей тенденцией является использование ПЭВМ в качест- ве непосредственной основы для моделирования. В этом случае некоторая модель погружается непосредственно в систему вза- имосвязанных ПЭВМ, когда функционирование отдельной или ряда ПЭВМ системы моделирует работу того или иного блока, элемента моделируемого объекта. Реализация данной тенден- ции требует от ПЭВМ повышенной надежности, развитых средств сопряжения и специального программного обеспе- чения. Четвертая тенденция состоит в резком смещении акцентов по разработке программных средств. В последние годы доля разработанных и разрабатываемых программных средств для ПЭВМ растет чрезвычайно быстрыми темпами. Общее число па- кетов программ, разработанных для ЭВМ всех классов, состав- ляет за рубежом около 25 тысяч и более половины из них - па- кеты для различного типа ПЭВМ. При этом не учитывается пока все то программное обеспечение, которое на сегодняшний день разработано большим числом пользователей индивидуальных ПЭВМ в домашних условиях. А ведь среди них имеются весьма оригинальные разработки теоретического и прикладного харак- тера. В условиях существования региональных или националь- ных (и даже межнациональных) информационно-вычислитель- ных сетей появляется возможность упорядочения и доступ- ности программных средств индивидуального пользователя такой сети. Однако уже сейчас персональный характер исполь- зования ВТ определяет смещение акцентов в ее применении. Примером тому может служить разработка целого ряда весьма
важных программных средств, ориентированных в первую оче- редь именно для различного типа ПЭВМ [1-10, 27, 31, 87, 89]. Таким образом, класс ПЭВМ как никакие другие предыдущие ЭВМ не только настоятельно требует изменения технологий в целом ряде областей человеческой деятельности, но и создает для этого основные предпосылки. И этой проблеме следует уде- лить самое пристальное внимание, учитывая ближайшие перс- пективы развития ВТ и у нас в стране. В настоящей книге детально рассматриваются архитектура и программное обеспечение ПЭВМ ИСКРА 1030, однако данные материалы могут быть использованы и при освоении програм- мирования как на последующих моделях серии ИСКРА 1030, так и других 16-разрядных ПЭВМ, унифицированных с серией IBM РС/ХТ/АТ: ЕС 1840, ЕС 1841, ЕС 1834, НЕЙРОН И9.66, СМ 1910, А-7150 (ГДР), MS/2 (ВНР) и т. д. И хотя диалекты языка БЕЙСИК отличаются как синтаксисом, так и семантикой, но они очень близки друг к другу, в этом плане настоящая книга мо- жет быть полезной. Насыщенность книги примерами позволя- ет читателю познакомиться на практике с основными возмож- ностями и принципами программирования на ПЭВМ ИСКРА 1030 в одной из самых популярных ОС - MS DOS. Важность освоения системы MS DOS даже пользователями ПЭВМ с другими операционными средами объясняется еще и тем, что недавно разработанное фирмой Hunter Systems (США) программное обеспечение XDOS дает возможность использо- вать прикладные программные средства, разработанные в сре- де MS DOS, на ПЭВМ, не совместимых с IBM РС/ХТ/АТ. Приводимые в книге примеры, во-первых, в основной своей массе ориентированы на иллюстрацию особенностей и основ- ных возможностей средств ОС и языка программирования БЕЙ- СИК. Во-вторых, значительная часть примеров служит для обес- печения начинающего пользователя основными навыками и при- емами работы по созданию программного обеспечения в опера- ционной системе MS DOS. И, наконец, целый ряд примеров, удовлетворяя вышеперечисленным целям, может быть ис- пользован в качестве готовых системных или сервисных прог- раммных средств в его практической деятельности на моделях ПЭВМ, совместимых с IBM РС/ХТ/АТ. Настоящая книга носит справочный и практический характер и рассчитана прежде всего на читателя, знакомого с основами программирования. Организация книги и ее содержание позво- ляют использовать ее в качестве справочника при работе на ИСКРА 1030 и совместимых с нею ПЭВМ. Книга также может быть использована и начинающими пользователями ПЭВМ.
2. АРХИТЕКТУРА СЕМЕЙСТВА ПЭВМ ИСКРА 1030 2.1. НАЗНАЧЕНИЕ И ОСНОВНЫЕ ТЕХНИЧЕСКИЕ ДАННЫЕ ПЭВМ ИСКРА 1030 Персональная профессиональная ЭВМ ИСКРА 1030 предна- значена для решения широкого круга задач специалистами раз- личных отраслей народного хозяйства, науки, техники, медици- ны, социологии, экономики, управления и т. д. Средства сопря- жения позволяют использовать её в информационно- вычислительных сетях в качестве интеллектуального термина- ла или элементарной ЭВМ на низшем уровне сетевой обработ- ки информации. На базе ПЭВМ ИСКРА 1030 можно создавать различного назначения АРМы и обучающие системы диалогово- го типа. ПЭВМ ИСКРА 1030 выполнена в настольном варианте, ос- новной модуль которого (без принтера) имеет размеры 48x44x50 см3. Питание ПЭВМ осуществляется от обычной се- ти переменного тока (220 В; 50 Гц), она может эксплуатиро- ваться в круглосуточном режиме. Дисплей (размер экрана по диагонали 40 см) позволяет работать как с графической, так и с алфавитно-цифровой информацией. ПЭВМ ИСКРА 1030 выпускается в нескольких исполнениях, отличающихся объемом оперативной памяти и набором внеш- них запоминающих устройств на магнитных дисках. Остальные характеристики всех исполнений ПЭВМ идентичны. Любое ис- полнение ПЭВМ ИСКРА 1030 содержит: - центральный процессор (ЦП) с быстродействием порядка 1 млн. операций/с; - оперативную память.(ОП) емкостью 256, 512 или 1024 Кбайт в зависимости от исполнения; - клавишное устройство (клавиатуру); - дисплей, составляющий совместно с клавиатурой консоль ПЭВМ; - адаптеры сопряжения с каналами связи, работающие в ран- гах ИРПС и С2 (6 каналов ИРПС и один переключаемый ка- нал ИРПС/С2); - алфавитно-цифровое печатающее устройство (принтер); - накопители на гибких магнитных мини-дисках и на жест- ких магнитных дисках типа „Винчестер”. Принтер представляет собой алфавитно-цифровое печатаю- щее устройство (АЦПУ) типа СМ 6329, изготовляемое в ГДР по лицензии одного из крупнейших в Европе изготовителей печа- тающих устройств - фирмой EPSON. Принтер позволяет выво- дить на печать информацию в нескольких задаваемых програм- мно форматах, допускает широкий набор шрифтов и режимов
печати, а также может работать в режиме графики, с помощью которого можно, в частности, выводить на печать точную копию содержимого экрана дисплея. Операционная система АДОС 2.0 поддерживает работу с принтерами следующих типов: IBM 80CPS Printer, IBM Graphic printer, Epson MX-80 и любым принте- ром типа 010983. Накопители на гибких магнитных мини-дискетах (НГМД) ти- па СМ 5640 позволяют хранить на одной дискете до 360 Кбайт информации. Накопитель на жестком магнитном диске (НМД) типа „Винчестер” позволяет хранить информацию емкостью 5 Мбайт. В зависимости от исполнения ПЭВМ ИСКРА 1030 снаб- жается либо двумя НГМД, либо одним НГМД и одним НМД. Так как использование дискет и дисков типа „Винчестер" в БЕЙСИК-системе программирования идентично, то в дальней- шем, как правило, будем говорить просто о дисках, имея в ви- ду оба типа магнитных носителей. В основу серии ПЭВМ ИСКРА 1030 положена базовая модель ИСКРА 1030.11, относительно которой и приведены перечи- сленные характеристики. В серию ПЭВМ планируется включить шесть моделей: ИСКРА 1030. АВ (АВ = 11, 21, 31, 12, 22, 32), от- личающихся составом внешних устройств, объемом оператив- ной памяти и базовым программным обеспечением. Так, из внешних устройств с базовой моделью планируется постав- лять: - НМД емкостью 5, 10 и 31 Мбайтов; - графопостроители типа Н-307, К 6411/6418; - устройство ввода графической информации; -адаптер приборного интерфейса; -накопители на магнитных лентах типа СМ 5300.1/5315; - НГМД типа ЕС 5325 емкостью 500 Кбайтов; -контроллер локальной сети ПЭВМ. Базовое программное обеспечение предполагается расширить языками программирования высокого уровня ПАСКАЛЬ и СИ, использовать операционные системы MS DOS 3.3, UNIX и XENIX. Таким образом, последующее развитие серии ПЭВМ ИСКРА 1030 существенно расширит сферу ее применения в различных об- ластях народного хозяйства, науки, техники и т. д. ПЭВМ ИСКРА 1030 должна эксплуатироваться в помещении размером не менее 2x3 м2 при температуре окружающей сре- ды в пределах +10+ +35° С, относительной влажности от 40% до 80% при температуре +25° С и атмосферном давлении 84 + 107 кПа. Питание ПЭВМ осуществляется от сети перемен- ного тока с однофазным напряжением 220 В с допускаемым отклонением в пределах - 15%+ +10% и частотой (50±1)Гц. При выполнении указанных условий обеспечивается относи- тельно устойчивая работа ПЭВМ. Средний срок службы ПЭВМ ИСКРА 1030 до списания (с учетом восстановительных работ по деталям, срок которых менее 10 лет) составляет не менее 10 лет.
В следующем разделе главы приводится более детальная характеристика основных внешних устройств ПЭВМ ИС- КРА 1030, позволяющая получить более полное представление о возможностях системы. 2.2. ОСНОВНЫЕ ВНЕШНИЕ УСТРОЙСТВА ПЭВМ ИСКРА 1030 В настоящем разделе дается более детальная характеристи- ка внешних устройств ПЭВМ ИСКРА 1030: клавиатуры, дисплея, принтера, НГМД, НМД и адаптера аппаратуры передачи данных. КЛАВИАТУРА. Общий вид рабочего поля клавиатуры ПЭВМ ИСКРА 1030 приведен на рис. 1. Следует отметить, что клавиатура ПЭВМ ИСКРА 1030 отлича- ется от клавиатур других совместимых с ней ПЭВМ, например ЕС 1840, НЕЙРОН И9.66, ЕС 1843 (ГДР), А-7150(ГДР). Однако в подавляющем большинстве описываемые ниже функциональ- ные возможности клавиатуры ПЭВМ ИСКРА 1030 имеют место и для клавиатур совместимых с ней ПЭВМ. Все рабочее поле клавиатуры можно условно разбить на три основные функциональные области: (1) область функциональных клавиш (ФК); (2) область алфавитно-цифровых клавиш (АЦК); (3) область цифровых клавиш (ЦК). Область ФК включает десять функциональных клавиш F1 + F10 и кнопку 'INIT' (начальная загрузка системы). В различных режи- мах работы ПЭВМ (ОС, МАСМ, БЕЙСИК, ЯМБ, Редактор) функ- циональные клавиши несут различные смысловые нагрузки, о которых будет идти речь в соответствующих разделах. Более того, функциональное назначение многих клавиш определяет- ся средой, в которой функционирует ПЭВМ (АДОС, системы программирования, пакеты прикладных программ и т. д.). Об- суждение работы с функциональными клавишами будет касать- ся только рассматриваемых в книге программных компонент ПЭВМ. Подробная же информация о работе с функциональными клавишами в различных режимах может быть найдена в техни- ческой документации [17]. Клавиша 'INIT' предназначена для сброса системы и исполь- зуется, как правило, при серьезных сбоях во время загруз- ки ОС. После нажатия клавиши 'INIT* выполняется встроенный тест самопроверки ПЭВМ и загружается ОС. Область АЦК содержит клавиши букв латинского и русского алфавитов, клавиши с цифрами и специальными знаками, а так- же ряд специальных клавиш управления. Переключение с латин- ского, алфавита на русский и наоборот осуществляется клави- шей Р/Л . Переключение же верхнего и нижнего регистров в любом алфавите осуществляется клавишами 'верхний ре- гистр (t), расположенными третьими слева и справа в нижней строке АЦК. Клавиша '<=', расположенная в верхнем правом углу АЦК, служит для 'возврата на шаг' и стирания на экране
1 СП ->•—j ю 1 С*) и* + со ш см —•- • NLX Г. / ’ 1 - ♦ 1 ° i 1 | э # * % А * * ( ) - 4- " FSC * _ 1 23456 7890"=/ - * о. * 1—1 CXJ* 4 .. . ► /\ • fi XX ФЫВ АП Р ОЛ Д Ж Э J CTR 1 FYWAPROLDV \ ( \ <}~—t х I \/ • • / СП N а 3 и С X Z X X хи S L0 СО Л X н и- s - 2 S ПРОБЕЛ > D о со и О у <:— S -> ос о 1 1 т »- см U. U. <0 U- со U. О U. СП LL ш U. LL. о» U. Рис. 1. Клавиатура ПЭВМ ИСКРА 1030
дисплея символа в данной позиции при вводе информации. Для удаления всей строки текста используется клавиша 'ESC', по которой уничтожается содержимое буфера ввода и можно пов- торить ввод с самого начала. При нажатии клавиши 'ESC' на экране высвечивается символ ’ \*, после которого на строке ниже будет высвечиваться заново вводимая информация. Клавиша 'ПУСК' идентифицирует конец текста при вводе информации с клавиатуры. При нажатии данной клавиши инфор- мация из буфера, ввода пересылается в оперативную память ПЭВМ. Клавиша 'CLK служит для фиксации заглавных букв подобно клавише 'верхний регистр', но в отличие от послед- ней ее действие распространяется только на алфавитные кла- виши области АЦК. Клавиша 'PrS' служит для вывода на прин- тер копии содержимого экрана дисплея. Так как она работает на верхнем регистре, то для ее использования следует нажать одновременно с ней и клавишу 'верхний регистр . Клавиши 'ALT', 'CTR' и табуляции (расположена во второй строке АЦК крайней слева) используются при работе с MS DOS, языком программирования БЕЙСИК и Редактором текстов и их назна- чение будет рассмотрено при описании соответствующих прог- раммных средств. В обычном случае клавиша 'ALT' использу- ется для ввода символов, отсутствующих на клавиатуре, на- пример символа Об этом случае использования клавиши 'ALT' речь будет идти несколько ниже. Продолговатая клавиша 'ПРОБЕЛ* служит для пропуска требуемого (по числу нажатий) количества позиций вводимого текста, при этом встречающийся на пути текст стирается. Область ЦК содержит клавиши с цифрами 0*9, десятичную точку, клавиши +,', '-' и две управляющие клавиши 'NLK' и 'S/В'. Клавиша 'NLK' служит для фиксации цифрового ре- гистра и позволяет вводить цифровые символы как клавишами АЦК, так и клавишами ЦК. Клавиша 'S/В' позволяет прервать выполнение любой программы или команды системы. Одновре- менное нажатие клавиш 'CTR' и 'S/В' приостанавливает вы- полнение программы или команды ОС. При этом система реа- гирует на эти клавиши только тогда, когда опрашивается кла- виатура и информация, пересылается на экран. Если не за- фиксирована клавиша 'NLK', то остальные клавиши ЦК несут смысловую нагрузку согласно табл. 1. Относительно клавиши '*' следует сделать одно существен- ное замечание. Наряду с перемещением курсора влево она поз- воляет повторно вызывать на экран последнее содержимое буфера ввода, после чего его можно корректировать и вводить заново. При этом набранный текст накладывается на вызван- ный из буфера по клавише При определенном навыке сов- местно с клавишей '-' можно использовать и клавиши '-*' и -- для указанных выше целей. Данное свойство оказыва- ется, в частности, весьма удобным при необходимости повтор- ного ввода команд системы на выполнение, но уже с новым набором параметров.
Клавиша ЦК Смысловая нагрузка клавиш Сдвиг курсора на одну позицию вправо Сдвиг курсора на одну позицию влево т Сдвиг курсора на одну строку вверх 1 Сдвиг курсора на одну строку вниз — -* Сдвиг курсора в конец текущей строки Возврат курсора в начало экрана 1 Вывод предущей экран-страницы на экран т Вывод следующей экран-страницы на экран ♦—* Используются в специальных режимах Редактирования текстовой информации Таким образом, учитывая возможность, а в ряде случаев и большее удобство ввода цифровой информации с АЦК, область ЦК (вопреки своему названию) больше предназначена для функций управления курсором и редактирования вводимой ин- формации. В заключение рассмотрения клавиатуры отметим еще одно ее важное свойство. Каждая клавиша клавиатуры выполняет определенную функцию, реализуемую при ее нажатии. Однако большинство клавиш при их фиксации выполняют свои функции непрерывно до отпускания клавиши. Например, фиксируя кла- вишу 'Т', получаем на экране непрерывно увеличивающуюся вправо строку символов Т', формирование которой прекра- щается после отпускания клавиши 'Т . Данное свойство также полезно при формировании различного рода текстов, содержа- щих цепочки идентичных символов. Для получения навыка ра- боты с клавиатурой ПЭВМ следует провести определенное чи- сло часов практических занятий с ней. При практической работе с клавиатурой следует иметь в виду, что она позволяет буфе- рировать до 20 нажатий клавиш, если центральный процессор не может их сразу обработать. ДИСПЛЕЙ ПЭВМ ИСКРА 1030 служит для черно-белого отоб- ражения символьной и графической информации и предна- значен для круглосуточного режима работы при условии соб- людения перечисленных в предыдущем разделе технических требований. Следует отметить, что весьма простая доработка монохроматического дисплея ИСКРА 1030 (доступная любому пользователю) превращает его в цветной монитор, поддер- живающий шесть цветовых оттенков. Для символьного режима дисплей допускает два формата вывода: 25 строк на экране по 40хК (К=1,2) символов в строке. Формат вывода информации на экран задается специальными командами ОС и языка программирования. Так, в языке прог- раммирования ЯМБ дополнительно к основным двум возмож- на установка еще двух форматов вывода на экран: - 15 строк по 64 символа в строке; -7 строк по 32 символа в строке.
В графическом режиме имеется возможность адресоваться к каждой точке экрана для вывода различной графической ин- формации. Данный режим обеспечен также двумя форматами: (320хК)х200 точек (К=1,2). Графический режим можно исполь- зовать только на языках программирования Макроассемблер и БЕЙСИК. Однако в значительной мере с графической инфор- мацией можно работать и в среде, например, языка ПА- СКАЛЬ [69]. При загрузке ОС автоматически устанавливается символьный режим с форматом 25 строк по 80 символов в строке экрана. На экран дисплея можно выводить все символы, предусмот- ренные таблицей кодов ПЭВМ ИСКРА 1030 (см. приложение 1). Символы, отсутствующие на клавиатуре, можно вводить нажа- тием клавиши ’ALT и одновременным вводом порядковых но- меров этих символов в таблице кодов. Например, зафиксиро- вав клавишу ’ALT’ и введя число 250, на экране получаем изображение символа после отпускания клавиши 'ALT'. ПРИНТЕР типа СМ 6329 работает как с рулонной, так и с фор- матированной бумагой шириной до 420 мм. Печать осуществля- ется в течение прямого и обратного хода печатающего меха- низма со скоростью 100 знаков в секунду. Принтер позволяет выводить все символы и специальные знаки, имеющиеся на клавиатуре ПЭВМ, а также символы псевдографики и копию со- стояния графического экрана дисплея. Принтер позволяет ра- ботать с 9 видами шрифтов и выводить символьную информа- цию в шести форматах, определяемых табл. 2. Из табл. 2 видна взаимосвязь максимальной длины сим- вольной строки, выводимой на принтер, в зависимости от его типа и используемого шрифта. Принтер позволяет выводить до 3-х копий листингов. Развитые возможности программно-управляемого вывода определяют весьма широкий спектр использования принтера. Вопросы программируемого вывода информации на принтер будут рассмотрены ниже, здесь же мы приведем наиболее важные сведения по управлению работой принтера. На передней панели имеется ряд кнопок для управления ра- ботой принтера и сигнальных лампочек для индикации его состояния. Кнопка ON LINE’ переводит принтер в оперативный режим, при котором он работает под управлением ПЭВМ. Кноп- ка OFF LINE’ переводит принтер в автономный режим, в кото- ром имеется возможность протяжки бумаги: FORM FEED - однократное нажатие этой кнопки протя- гивает бумагу на длину стандартного , t листа; LINE FEEDv' - нажатие этой кнопки перемещает бумагу , на одну строку назад; LINE FEEDA’ - нажатие этой кнопки перемещает бумагу на одну строку вперед. Специальные лампочки на панели принтера идентифицируют следующие состояния:
Тип шрифта Количество символов в строке СМ 6329.01 М СМ 6329.02 М Нормальный 80 136 Нормальный широкий 40 68 Шрифт 'элита' 96 163 'Элита' широкий 48 81 Уплотненный шрифт 132 233 Уплотненный широкий 66 116 PWR (зеленая) РЕ (желтая) - информирует о готовности принтера; - информирует об отсутствии или конце бумаги; ERR (красная) - информирует об ошибках в работе прин- тера. Для простейшего тестирования принтера (проверка графи- тажа и механических функций) можно использовать встроенный тест, который запускается при одновременном нажатии кноп- ки 'LINE FEED ▼(LINE FEEDA)' и включении питания принтера. В первом случае тест работает до выключения питания принте- ра, во втором - до прекращения фиксации кнопки 'LINE FE- ED а'. Одновременное нажатие обеих кнопок 'LINE FEEDv' и 'LINE FEED а' тестирует механические функции принтера, которое прекращается с отключением питания. При одновременном нажатии кнопок 'FORM FEED' и 'LINE FEED ▼' и включении питания принтера на печать выводится содержимое заполненного буфера в 16-ричном виде (НЕХ DUMP). Наряду с этим под крышкой принтера находится 14 пе- реключателей типа DIL (Dual-Inline) с обозначениями 5+ 18, служащие для управления режимами печати. Подробная ин- формация об использовании этих переключателей может быть найдена в технической документации [17]. НГМД типа СМ 5640 установлены в основном модуле ПЭВМ и работают с гибкими магнитными мини-дисками (дискетами) типа ЕС 5288, усовершенствованные оригиналы которых яв- ляются в настоящее время наиболее популярными магнитными накопителями для ПЭВМ во всем мире, успешно конкурируя с магнитными лентами и винчестерскими дисками. Подробный обзор современного состояния и тенденция развития НГМД можно найти в [63]. Дискеты имеют механические средства (специальный вырез на конверте) для защиты от несанкциони- рованной записи и уничтожения файлов. Для организации за- щиты этот вырез следует заклеить фольгой. Подробные сведе- ния о структуре информации на дискетах, их форматах и кон- струкции можно найти в приложении 2. НГМД типа СМ 5640 работает только с одной стороной дискеты. Перед первым ис- пользованием дискеты ее следует проинициализировать, в ре-
зультате чего на дискете форматируются 80 треков по 9 сек- торов в каждом емкостью по 512 байт. Следовательно, полная емкость дискеты составляет 360 Кбайт на одной ее стороне. Вторая сторона дискеты также может быть подготовлена для использования в НГМД типа СМ 5640, но эта простая механи- ческая процедура здесь не описывается. После длительного использования дискеты ее рекомендуется, после перезаписи с нее информации, проинициализировать заново, чтобы отме- тить дефектные сектора, если они есть. Скорость обмена информацией с НГМД составляет 250 Кбайт/с. Дискеты можно инициализировать и в формате по 40 треков на одной стороне, который соответствует форма- ту всех ПЭВМ, совместимых с IBM PC. В этом случае объем одной стороны дискеты составит только 180 Кбайт. Дискеты такого формата можно использовать как на ПЭВМ ИСКРА 1030, так и на всех ПЭВМ, совместимых с IBM РС/ХТ/АТ. ПЭВМ ИСКРА 1030 дает возможность переписывать инфор- мацию с дискет одного формата (40 треков) на дискеты друго- го формата (80 треков) и наоборот. Подробнее об этом будет идти речь ниже. В ОС ПЭВМ ИСКРА 1030 оба кармана НГМД име- ют системные имена (левый) и 'В' (правый). При наличии у ПЭВМ только одного НГМД имена 'А' и 'В' совпадают, и си- стема идентифицирует единственный карман как 'А' независи- мо от указанного имени ('А' или 'В'). НМД является стационарным и не предусматривает смену магнитного носителя. Емкость НМД составляет 5 Мбайт, он может быть только единственным в системе с именем 'С'. При наличии в составе ПЭВМ НМД его необходимо подготовить к работе в системе АДОС с помощью команды FDISK, в против- ном случае при обращении к НМД выдается сообщение 'Невер- ное устройство'. При подготовке к работе на жестком диске формируется от 1 до 4-х разделов, которые могут в отдельно- сти использоваться разными операционными системами (на- пример, АДОС, MS DOS, PC DOS). Команда FDISK позволяет сформировать разделы и один из них подготовить для исполь- зования системой АДОС. Для подготовки раздела АДОС следует запустить команду FDISK, создать с ее помощью на жестком диске раздел АДОС и сделать его активным (из него можно будет загружать си- стему). Затем командой FORMAT разметить раздел АДОС и за- писать в него необходимые файлы системы. По команде FOR- MAT в раздел АДОС записывается таблица FAT и создается главный каталог, размер которого зависит от размера разде- ла АДОС, а сам раздел используется в системе АДОС совер- шенно аналогично, как и дискеты. Для ссылок,к,разделу АДОС жесткого диска используется системное имя С'. Подробно ра- бота с НМД будет рассмотрена ниже. С НМД связано и созда- ние для ПЭВМ и малых вычислительных систем интеллекту- ального интерфейса SCSI [62]. Резкий рост емкости памяти такого типа НМД при уменьшении их размеров до 133 мм
потребовал от разработчиков ПЭВМ и малых ЭВМ перейти на . использование интеллектуальных системных интерфейсов (ИСИ), которые обеспечивали бы на основе общего протокола возможность обращения ко всем внешним УВВ вычислительной системы. При этом адаптер ИСИ занимает только одно гнездо панели ПЭВМ, в отличие от обычных интерфейсов, требующих для каждого УВВ отдельного гнезда. Это особенно важно для класса ПЭВМ из-за их небольших размеров. Однако наиболее важной особенностью ИСИ является возможность существен- ного увеличения скорости обмена информацией, что делает его необходимым для целого ряда весьма важных задач поль- зователя. Начатые рядом фирм США исследования по созда- нию ИСИ завершились удачной разработкой, получившей офи- циальное название SCSI (Small Computer Systems Interface). С другой стороны, в настоящее время зарубежная промыш- ленность начала массовый выпуск для ПЭВМ высокопроизво- дительных НМД емкостью 172 Мбайтов с диаметром диска 133 мм моделей SCSI и ESDI фирмы Control Data (США), что дало хорошую практическую сферу применений для ИСИ. ИСИ SCSI представляет собой шину, которая состоит из 50-ти выводов, и, соединенную с главным адаптером, который зани- мает только одно гнездо в панели ЭВМ и осуществляет функ- цию управления работой всех УВВ. Таким образом, ИСИ SCSI работает в режиме, аналогичном прямому доступу к памяти. Главный адаптер ИСИ имеет, как правило, собственный микро- процессор, обрабатывающий определенный набор команд вы- сокого уровня, что и послужило основанием назвать новый тип интерфейсов интеллектуальными. АДАПТЕР аппаратуры передачи данных (ААПД) обеспечи- вает возможность подключения к ПЭВМ шести абонентов по каналу связи в ранге ИРПС (ИРПС1 + ИРПС6) и одного абонента по стыку С2. ААПД дает возможность одновременной и незави- симой работы с каждым из семи абонентов. Телефонный ка- нал может быть как коммутируемым, так и некоммутируемым. Взаимодействие с удаленными устройствами ввода-вывода обеспечивается по рангу ИРПС. ААПД позволяет использовать ПЭВМ ИСКРА 1030 как в качестве удаленного интеллектуаль- ного терминала для ЭВМ ЕС или СМ, так и в составе информа- ционно-вычислительных сетей на базе других ПЭВМ по одно- му или нескольким каналам связи. ААПД обеспечивает обмен информацией по каналу связи в ранге ИРПС на расстояние до 500 м при скорости обмена до 9600 бод/с, и протоколы связи при этом совместимы с ЭВМ НЕВА-501, ИСКРА-555, СМ ЭВМ и ПЭВМ ИСКРА 226. При работе по стыку С2 для передачи информации на большие расстоя- ния (до 50 км) необходимо использовать модемы. В противном случае обмен по стыку С2 можно осуществлять на расстоя- ния в пределах 1015 м. Скорость передачи информации по стыку С2 может варьироваться от 200 до 9600 бод/с, а прото- колы связи соответствуют принятым в ЕС ЭВМ для абонентско- го
го пункта АП-70. Подробнее о использовании ААПД для пере- дачи информации будет идти речь ниже. Более детальная информация об основных внешних ус- тройствах ПЭВМ ИСКРА 1030 будет частично приведена при рассмотрении ряда программных средств, а недостающая может быть найдена в технической документации [17]. 2.3. ПРИНЦИПИАЛЬНАЯ АРХИТЕКТУРА ПЭВМ ИСКРА 1030 Архитектура ПЭВМ ИСКРА 1030 представляет собой общую конфигурацию основных компонент, их основные возможности и характеристики, а также взаимосвязи между ними. Общая архитектура включает: центральный процессор (ЦП), логику управления системным интерфейсом, схему синхронизации, оперативную память (ОП) и подсистему ввода-вывода (рис. 2). Центральным процессором служит микропроцессор, кото- рый дешифрует команды и управляет всем ходом вычисле- ний и управления в ПЭВМ; он же выполняет все логические и арифметические операции. Схема синхронизации формирует одну или несколько последовательностей равномерно распо- ложенных во времени импульсов, которые необходимы для синхронизации действий в микропроцессоре и логике управ- ления системным интерфейсом. Схема синхронизации разме- щается на кристалле самого микропроцессора. Оперативная память предназначена для хранения команд и данных, которые выполняет ЦП. Она состоит из 2 модулей, Подсистема ввода - вывода ОП Рис 2. Принципиальная архитектура ПЭВМ ИСКРА 1030
каждый из которых содержит 256 Кбайт. Каждая ячейка памя- ти хранит часть или все данные или команду, с ней ассоцииру- ется идентификатор, называемый адресом памяти. ЦП после- довательно выбирает команды из ОП и выполняет определяе- мые ими действия по обработке или управлению. Подсистема ввода-вывода состоит из разнообразных ус- тройств (УВВ), предназначенных для взаимодействия с внеш- ней средой и хранения больших объемов информации. Не- которые УВВ допускают только ввод или вывод информации, тогда как другие могут совмещать обе возможности. Напри- мер, клавиатура и дисплей допускают соответственно только ввод и вывод информации, тогда как НГМД и НМД допускают как чтение, так и запись информации наряду с ее длительным хранением. Компоненты ПЭВМ, осуществляющие длительное хранение информации (программ и данных), называются внеш- ней памятью (ВП). Наиболее распространены дисковые накопи- тели, из которых особое место занимают НГМД и НМД. Набор стандартно поставляемых УВВ для ПЭВМ ИСКРА 1030 состоит из: клавиатуры, дисплея, принтера, НГМД и/или НМД и ААПД. Системный интерфейс (СИН) образует совокупность про- водников, соединяющих ЦП с ОП и УВВ. По этим проводникам, оформленным в виде кабеля или соединений на печатной пла- те, передается любая информация. Проводники СИН объединя- ются в три основные группы: - линии данных для передачи информации; - линии адреса, указывающие куда или откуда передается информация; - линии управления, определяющие алгоритм функциониро- вания СИН. Схемы для подключения СИН к устройству называются просто интерфейсом, а логика управления СИН образует интерфейс ЦП и частично размещается на самом кристалле ЦП. Интерфейсы ОП в основном образуют схемы для дешифра- ции адреса требуемой ячейки памяти и буферизации данных на (с) СИН, а также схемы выполнения операций чтения и за- писи. Интерфейсы ввода-вывода варьируются от очень про- стых до очень сложных и буферируют данные на (с) СИН, при- нимают приказы от ЦП и передают в ЦП информацию о состоя- нии подключенного УВВ. Кроме этого, интерфейсы ВП взаимо- действуют непосредственно с ОП, а для этого требуется специальное управление СИН. Взаимодействие между интер- фейсом ввода-вывода и шиной данных СИН осуществляется через специальные системные регистры, называемые пор- тами ввода-вывода. 2.4. СТРУКТУРА И ФУНКЦИОНИРОВАНИЕ ЦЕНТРАЛЬНОГО ПРОЦЕССОРА Микропроцессор ПЭВМ ИСКРА 1030 содержит ЦП, выпол- ненный на однокристальном высокопроизводительном 16-раз-
рядном микропроцессоре КР1810 ВМ86 (аналоге Intel 8086). Для отладки программно-аппаратных средств устройств на ба- зе этого микропроцессора разработана инструментальная тех- нологическая система СТ-1024 [20]. ЦП выполняет операции над байтами и словами (2 байта), а наличие 20-ти адресных шин обеспечивает доступ к ОП и портам ввода-вывода общим объемом до 1 Мбайт. 16 линий адреса из 20 используются и как линии данных. Поэтому на системный интерфейс запрещено одновременно подавать адреса и данные. Мультиплексирова- ние адресов и данных во времени замедляет (правда не столь существенно) скорость передачи информации в системе. Наряду с этим ЦП обеспечивает обмен информацией между УВВ, входящими в состав ПЭВМ, обработку данных и управле- ние УВВ. Разрядность обрабатываемых ЦП команд и данных со- ставляет 8 или 16 бит. ЦП работает в максимальном режиме, что обеспечивается подключением вывода типа 'min/max' к си- стемному интерфейсу. Выбор максимального режима обуслов- лен возможностью подключения арифметического сопроцессо- ра КР1810 ВМ87 (аналоге Intel 8087), позволяющего существен- но сократить время выполнения арифметических операций. Быстродействие ЦП для операций типа 'регистр - регистр' со- ставляет порядка 1 млн. операций/с, однако использование на ПЭВМ языков программирования БЕЙСИК и ЯМБ интерпре- тирующего типа сводит его на нет. Для оценки производитель- ности ПЭВМ в среде интерпретатора БЕЙСИК была использова- на следующая программа, реализующая простой цикл задан- ной длины и хронометрирующая время выполнения цикла в за- висимости от его длины (числа БЕЙСИК-команд). Результатом работы программы является таблица, содержащая длины (А) циклов, время (Т) их выполнения и число (В) БЕИСИК-операто- ров в секунду. Листинг самой программы и фрагмент резуль- тата ее выполнения имеет вид: 10 M=10000:LPRINT ’’Длина А : Время Т:Число В” 20 LPRINT ”” 30 T1=TIMER:FOR А=1 ТО M:NEXT‘.T2=TIMER:T=T2-T1 40 LPRINT М, Т, INT (M/T):IF М>10~6 THEN END ELSE 50 M=M+10000:GOTO 10 т„й„...,в , Длина А : Время Т : Число В 10000 14.32813 697 20000 29 689 30000 43.60938 687 40000 58.44141 684 50000 73.26953 682 60000 88.16016 680 70000 102.76950 681 Из приведенного примера следует, что относительная произ- водительность ПЭВМ ИСКРА 1030 не превышает 700 БЕЙ-
СИК-операторов в секунду и вполне соизмерима с аналогич- ной производительностью ПЭВМ ИСКРА 226 [1-3]. Таким обра- зом, значительно эффективнее использовать языки транслирую- щего типа, например Turbo-BASIC, Turbo-PASCAL, Turbo-C, что позволит в значительно большей мере ощутить быстродействие ПЭВМ ИСКРА 1030. Переходим теперь к рассмотрению внутренней конфигура- ции ЦП ИСКРА 1030 (рис.З). За исключением регистра команд, которым фактически служит 6-байтная очередь, регистры управления и рабочие регистры разделены на три группы согласно выполняемым ими функци- ям. Имеются группа регистров данных (арифметические ре- гистры), указательная группа (базовые и индексные регистры, программный счетчик и указатель стэка), а также сегментная группа (специальные базовые регистры). Все регистры ЦП дли- ной 2 байта (16 бит). В группу регистров данных входят регистры АХ, ВХ, СХ, и DX, предназначенные для хранения операндов и результа- тов операций и допускающие адресацию не только целых ре- гистров, но и их младшей и старшей половин. Например, до- Регистр команды Очередь команд FIFO (ОК) Рис 3 Внутренняя конфигурация ЦП
пускается использование двух байтов в регистре АХ вместе, а также указывать отдельные его байты AL (младший) и АН (старший) (рис. 3). Регистры ВХ, СХ и DX, кроме арифметических функций, име- ют и специальные назначения: ВХ - служит базовым регистром при вычислениях адреса; СХ - в ряде команд используется как неявный счетчик; DX - в ряде команд ввода-вывода содержит адрес порта ввода-вывода. Указательная группа представлена регистрами IP, SP, ВР SI и DI. Указатель команды IP и регистр SP фактически являют- ся программным счетчиком и указателем стэка, но полные ад- реса команды и стэка образуются суммированием содержимо- го этих регистров и содержимого сегментных регистров CS и SS, которые относятся к сегментной группе. Регистр ВР явля- ется базовым при обращениях к стэку и может использоваться совместно с другими регистрами. Регистры SI и DI предназна- чены для индексации, но их можно использовать и самостоя- тельно в сочетании с регистрами ВХ и ВР. Кроме регистра IP, остальные регистры данной группы могут хранить операнд, но допускают обращения только к 16-битному регистру. Чтобы обеспечить гибкую базовую адресацию и индексацию, адрес данных формируется сложением содержимого регист- ров ВХ или ВР, содержимого регистров SI или DI и смещения. Полученный таким образом адрес ЕА называется эффектив- ным, однако окончательный адрес данных определяется ЕА и соответствующим сегментным регистром DS, ES или SS. Сегментную группу образуют регистры CS, SS, DS и ES. Так как участвующие в формировании адреса регистры ВХ, IP, SP, ВР, SI и DI имеют длину только 16 бит, то и эффективный адрес имеет ту же длину. С другой стороны, выдаваемый на шину адреса физический адрес должен содержать 20 бит. Поэтому дополнительные 4 бита образуются при сложении эффективно- го адреса с содержимым одного из сегментных регистров. Пе- ред сложением к содержимому сегментного регистра справа добавляются 4 нуля, что дает 20-битный результат. Например, если (CS)=4247 и (1Р)=100А, то следующая команда будет вы- бираться по физическому адресу, вычисляемому как: 100А эффективный адрес + 42470 начальный адрес сегмента 4347А физический адрес команды В приведенном примере все адреса даются в 16-ричной форме, а круглые скобки обозначают содержимое соответствующих регистров. Применение сегментных регистров разделяет всю ОП на перекрывающиеся сегменты, каждый из которых имеет размер 64 Кбайт и начинается с адреса, кратного 16-ти. Наличие сег 2 0-76
ментных регистров обеспечивает следующие важные преиму- щества по управлению ОП: - упрощается использование отдельных областей ОП для программы, ее данных и стэка; - максимальная емкость ОП может быть 1 Мбайт, хотя ко- манды оперируют 2-х байтными адресами; - секции программ, данных и стэка могут иметь длину бо- лее 64 Кбайт благодаря использованию нескольких сег- ментов программ, данных или стэка; - при выполнении программы она сама и/или ее данные мо- гут размещаться в различных областях ОП. Арифметико-логическое устройство (АЛУ) предназначено для выполнения арифметических и логических операций, а ЛУВ/В представляет собой микросхему логики управления вводом-выводом. Слово состояния процессора (PSW) содержит 16 бит, из которых 7 в настоящее время не используются. Флажки ЦП (табл. 4) подразделяются на флажки условий, отражающие ре- зультат выполнения АЛУ предыдущей операции, и флажки уп- равления, от которых зависит выполнение специальных функ- ций. Таблица 4 Номер бита PSW Флажок PSW Смысловая нагрузка флажка 0 CF Перенос из старшего бита 2 PF Проверка байта на четность 4 AF Вспомогательный перенос 6 ZF Проверка результата на нуль 7 SF Установка знака результата 8 TF Установка трассировки 9 IF Разрешение прерываний 10 DF Управление цепочками 11 OF Установка переполнения 1,3, 5, 12-15 — Неиспользуемые биты psw Подробнее о флажках PSW и их назначении можно найти в [16]. В общем виде функционирование ЦП состоит из следующих основных этапов: 1) выборки очередной команды по указанному адресу из ОП; 2) загрузки ее в регистр команды и дешифровки с одновре- менным инкрементом ОП для адресации следующей ко- манды; 3) выполнения команды, а в случае перехода - загрузки в регистр адреса перехода; 4) повторения этапов 1+3. Функционирование ЦП ИСКРА 1030 соответствует описанному общему алгоритму, но имеются некоторые различия и совме- щение выполнения ряда команд.
Адрес следующей команды определяется на основе сложе- ния (IP) и (CS), а регистр команды представляется 6-байтной очередью по принципу fclFO \ которая непрерывно заполняется, когда системный интерфейс свободен от других операций. Такое опережение значительно увеличивает производитель- ность ЦП, так как к моменту завершения текущей команды сле- дующая команда чаще всего уже находится в очереди на вы- полнение. В случае перехода очередь сбрасывается и не дает экономии времени, но в среднем это происходит не так часто. Для иллюстрации эффекта от использования опережающей загрузки очереди команд приведем время выполнения различ- ных форм команды 'ADD' (сложение). Сложение регистр - память'(результат в памяти) с исполь- зованием базовой индексной адресации требует 24 такта синхронизации для операции над байтами или словами, если слово находится по четному адресу, и 32 такта - если слово находится по нечетному адресу. Но для считывания слова из ОП требуется всего 4 такта. Следовательно, при выполнении команды 'ADD' оказывается много тактов синхронизации, в те- чение которых системный интерфейс свободен для заполне- ния очереди команд ЦП. ЦП ИСКРА 1030 имеет весьма развитую систему команд, длина которых варьируется от одного до 6 байт. Длина смеще- ний и непосредственных данных в команде может быть 8 или 16 бит в зависимости от типа команды. В первом одном или двух байтах команды находятся код операции и указание режи- ма адресации. ЦП ИСКРА 1030 располагает одиннадцатью ре- жимами адресации. После этих байтов команды могут нахо- диться: - двухбайтный эффективный адрес ЕА; - смещение (1 или 2 байта); - непосредственный операнд (1 или 2 байта); - смещение (1 или 2 байта) и непосредственный операнд длиной до 2 байт; - смещение (2 байта) и сегментный адрес (2 байта). Применение одной из 5 перечисленных возможностей опреде- ляется кодом команды и режимом адресации. В большинстве кодов команд имеются однобитные флажки, позволяющие из- менять режим выполнения команды. ЦП ИСКРА 1030 выполняет: - команды пересылки данных (27) для пересылки данных, адресов и непосредственных операндов в регистры или ячейки ОП; - арифметические команды (32) для выполнения арифмети- ческих операций над бинарными, упакованными и неупа- кованными двоично-кодированными десятичными цифрами; - логические команды (5) для реализации логических опе- раций; - команды условных и безусловных переходов (21) для из- менения естественного порядка выполнения команд по- средством загрузки в регистр адреса перехода;
- команды циклов (4) для упрощения декремента счетчика цикла, проверки и перехода; - холостую команду (NOP); - команды манипуляций флажками (9) для управления уста- новкой и проверкой содержимого флажков PSW; - команды сдвигов (8) для перемещения всех битов опе- ранда влево или вправо на заданное число; - команды управления (5) для управления режимами функ- ционирования ЦП; - цепочечные команды (20) для упрощения обработки сим- вольных цепочек, связанных с обработкой текстовой ин- формации. Перечисленные группы команд ЦП ИСКРА 1030 содержат в общем 132 команды, позволяющие довольно эффективно вести разработку сложных программных систем на базе язы- ка Ассемблера ASM-86 фирмы Intel, а также создавать на его основе развитые операционные системы для всех ПЭВМ, сов- местимых с IBM РС/ХТ/АТ. Подробное описание системы ко- манд ЦП ИСКРА 1030 можно найти в [16,17] и др. материалах по IBM РС/ХТ/АТ и совместимых с ней ПЭВМ [86-88]. 2.5. СТРУКТУРА И ФУНКЦИОНИРОВАНИЕ ПАМЯТИ В самом общем случае память ПЭВМ ИСКРА 1030 состоит из внешней памяти (ВП) и оперативной памяти (ОП), к которой ЦП может непосредственно обращаться за выборкой или за- писью информации. Доступ к информации из ВП ЦП может по- лучить только посредством транзитной пересылки ее через ОП. Настоящий раздел посвящен ОП и ее связи с системным интер- фейсом. ОП состоит из ячеек, называемых словами памяти, каждая из которых адресуется как единое целое. ОП неоднородна, и ее классификация зависит от способов обращения к находя- щейся в ней информации. Если из памяти можно только считывать, то она называется постоянным запоминающим устройством (ПЗУ), но если она допускает чтение и запись информации, то такая память назы- вается памятью со считыванием и записью. Произвольный до- ступ относится к памяти, в которой к любой ее ячейке можно обратиться за один и тот же промежуток времени; в этом слу- чае к ячейкам памяти можно обращаться по порядку. ОП всех современных ПЭВМ допускает произвольный доступ и часть памяти с произвольным доступом, допускающая считывание и запись, называется запоминающим устройством с произволь- ным доступом (ЗУПД). Следовательно, ОП ПЭВМ состоит из двух основных компонент: ПЗУ и ЗУПД. ОП ПЭВМ ИСКРА 1030 реализована в виде четырех модулей, которые подключаются к системному интерфейсу четырьмя каналами прямого доступа (рис. 4).
Модули ПЗУ Модули ЗУПД В состав модуля памяти входит интерфейс и набор микросхем памяти, каждая из которых содержит массив запоминающих элементов (ЗЭ), служащих для хранения 1 бита информации. Организация и объем ОП зависит от исполнения ПЭВМ. Так, для ПЭВМ ИСКРА 1030 исполнения 2 модуль ЗУПД имеет орга- низацию 256X8, т. е. он содержит 256 Кбайт слов памяти дли- ной 8 бит каждое. Следовательно, информационная емкость такого полупроводникового ЗУПД составляет 512 Кбайт. Ис- полнения 1, 2 и 3 ПЭВМ имеют емкость ОП соответственно 256, 512 и 1024 Кбайт. ЗУПД работает в следующих режимах: запись, считывание и регенерация (хранение информации при нали- чии канала питания) и обеспечивает исправление одной и об- наружение двух ошибок. Для обеспечения надежности и про- верки функционирования ЗУПД используется схема корректи- рующего кода Хэмминга. Контроллер непосредственного доступа к ОП предназна- чен для приоритетного обслуживания четырех каналов не- посредственного доступа и реализует подмножество функ- ций БИС контроллера DMA 8237А-5 фирмы Intel, что позволяет обеспечить функционирование зарубежных ОС (MS DOS Micro- soft, PC DOS и др.) на ПЭВМ ИСКРА 1030 и последующую заме- ну данного контроллера на БИС - аналог DMA 8237А-5. Логическая структура ЗУПД определяется функционирую- щим на ПЭЗМ системным (а порой и прикладным) програм- мным обеспечением и не является строго фиксированной. Структура ЗУПД в условиях использования на ПЭВМ ИС- КРА 1030 ОС АДОС 2.0 будет рассмотрена ниже. В отличие от ЗУПД ПЗУ допускает только считывание ин- формации и его содержимое нельзя изменить без специаль- ного оборудования. Плотность упаковки ПЗУ значительно вы- ше, чем ЗУПД, и они существенно дешевле, энергонезависимы, высоконадежны и помехоустойчивы. Модули ПЗУ служат для хранения ядра операционной системы, содержащего целый ряд основных компонент MS DOS: программы инициации си- стемы и начальной загрузки, драйверы базовой системы ввода- вывода, драйверы внешних устройств. Это позволяет делать автоматическую загрузку ОС при включении ПЭВМ в сеть,
а также значительно сократить время обслуживания наибо- лее важных и часто используемых запросов пользователя и системы. Объем ПЗУ составляет всего 8 Кбайт, оно является программируемым элементов ПЭВМ. Однако микропрограммирование ПЗУ существенно отлича- ется от обычного программирования. Достаточно подробное и доступное описание принципа микропрограммирования мож- но найти в книге [18]. Для автоматизации проектирования ПЗУ существуют специальные устройства, называемые програм- маторами ПЗУ. Один из наиболее известных - универсальный программатор фирмы Intel в ОС ISIS-II, представляющий боль- шой интерес и для разработчиков ПЭВМ ИСКРА 1030. Совре- менные тенденции развития микропроцессорных систем (на- пример, на базе 32-разрядного микропроцессора Intel 80386) показывают растущую роль ПЗУ, содержащих более широкий набор специальных и системных программных средств. 2.6. СИСТЕМНЫЙ ИНТЕРФЕЙС ПЭВМ ИСКРА 1030. СОПРОЦЕССОР АРИФМЕТИЧЕСКИХ ВЫЧИСЛЕНИЙ Системный интерфейс (СИН) представляет собой набор про- водников, предназначенных для передачи информации между основными компонентами ПЭВМ ИСКРА 1030. В нем можно вы- делить три шины: управления, адреса и данных, которые свя- заны с интерфейсами ОП и УВВ (рис. 5).
Вычислительные системы с такой организацией оказываются достаточно простыми, гибкими и дешевыми. При проектирова- нии системы учитывается тот СИН, который объединяет все ее устройства. Основные характеристики СИН формализуются и образуют так называемый стандарт СИН. Если вычислитель- ная система пользуется успехом у пользователя, то ее стан- дарт СИН получает широкое распространение, и другие про- изводители ВТ могут разрабатывать свои устройства, удовлет- воряющие требованиям этого стандарта, особенно если стан- дарт принят в качестве официального ассоциацией IEEE (США). Благодаря наличию множества совместимых устройств раз- работчик имеет возможность значительно сократить время раз- работки вычислительной системы и существенно уменьшить расходы, используя детально спроектированный СИН. В насто- ящее время за рубежом для микропроцессорных систем ши- рокое распространение получил системный интерфейс MUL- TIBUS фирмы Intel [16]. СИН ПЭВМ ИСКРА 1030 соответствует стандарту интерфейса MULTIBUS. Интерфейсы СП и УВВ связаны с логикой управления СИН, причем между логикой и интерфейсами находятся только про- водники СИН. Следовательно, интерфейсы спроектированы только для передачи и приема сигналов, совместимых с логи- кой управления СИН и его временной диаграммой. При нали- чии сходства интерфейсов ОП и УВВ между ними имеются и су- щественные различия. Подробное описание интерфейсов обоих типов заинтересованный читатель может найти в [16]. Для адаптации к возможно большему числу применений в микропроцессоре КР1810 ВМ86 предусмотрены два режима работы: минимальный и максимальный. Минимальный режим рассчитан на небольшие однопроцессорные системы, в кото- рых все необходимые сигналы управления СИН генерирует сам ЦП, что минимизирует необходимую логику управления, тогда как максимальный режим рассчитан на средние и боль- шие системы, включая мультипроцессорные. В этом режиме микропроцессор КР1810 ВМ86 кодирует только основные сиг- налы управления СИН в 3 бита состояния и использует освобо- дившиеся проводники для дополнительной информации, кото- рая требуется в мультипроцессорной системе. В ПЭВМ ИСКРА 1030 СИН работает в максимальном режиме, что позволяет строить на его основе мультипроцессорные системы. Максимальный режим специально предназначен для реализации мультипроцессорных систем. Имеющиеся мульти- процессорные средства максимального режима рассчитаны на три базовые конфигурации системы: сопроцессор, сильно связанную и слабо связанную конфигурации. Первые две из них очень похожи друг на друга тем, что ЦП и вспомогатель- ный процессор (сопроцессор) разделяют не только всю систе- му памяти и ввода-вывода, но и логику управления СИН. В обо- их конфигурациях микропроцессор КР1810 ВМ86 является ве- дущим, а сопроцессор ведомым. Управление доступом к СИН
осуществляет ЦП, поэтому сигнал запроса системного интер- фейса сопроцессором передается сначала в ЦП. В сильно свя- занной конфигурации сопроцессор действует непосредствен- но с ЦП и при использовании сопроцессора между процессор- ными элементами имеется больше линий. Так как микропро- цессоры КР1810 ВМ86 всегда выступают ведущими, то в кон- фигурациях ПЭВМ на их основе не может быть двух микро- процессоров этого типа. Рассмотрим в этом плане сопроцес- сорную конфигурацию ПЭВМ ИСКРА 1030. Хотя микропроцессор КР1810 ВМ86 является достаточно мощным однокристальным процессором, его системы команд недостаточно для эффективной реализации целого ряда слож- ных применений. С этой целью микропроцессор можно допол- нить сопроцессорами, расширяющими систему команд веду- щего процессора в направлениях, обеспечивающих более эф- фективную реализацию необходимых специальных вычисле- ний и управления. Так, микропроцессор КР1810 ВМ86 не имеет команд арифметики с плавающей точкой, а при использовании в качестве сопроцессора микропроцессора числовой обра- ботки КР1810 ВМ87 легко реализуются все требования вычи- слений с плавающей точкой. ПЭВМ с сопроцессором не требует никакой дополнительной логики, отличающейся от той, которая требуется в системе с максимальным режимом функционирования СИН. ЦП и со- процессор выполняют свои команды из одной и той же програм- мы, которая написана в расширенном множестве команд про- цессора КР1810 ВМ86. Если команда должна выполняться со- процессором, то ЦП кроме возможного считывания операнда для команды не производит более никаких действий. Сопроцессор числовой обработки КР1810 ВМ87 специально разработан для эффективного выполнения арифметических вычислений и может работать с целыми, десятичными и дей- ствительными числами длиной от 2 до 10 байт. Этот сопроцес- сор может оперировать данными семи различных типов: целое, короткое целое, длинное целое, упакованное BCD, короткое дей- ствительное и временное действительное. Сопроцессор опе- рирует 68 командами, которые по выполняемым ими функци- ям можно разбить на шесть групп: передача данных, арифме- тические сравнения, трансцендентные, оперирующие кон- стантами и управления процессом вычислений. Так как сопроцессор и ведущий ЦП разделяют один и тот же командный поток, то пользователь, работающий с языком Ассемблера ИСКРА 1030, имеет возможность писать свои программы в системе команд, объединяющей команды обоих процессоров, т. е. в этом случае система команд ПЭВМ ИС- КРА 1030 расширяется на 68 команд и составляет в целом 200 команд. Подробное описание сопроцессора КР1810 ВМ87 (аналога микропроцессора Intel 8087) можно найти в книге [16]. К сожалению, выпускаемые в большом количестве ПЭВМ ИСКРА 1030 пока не снабжаются сопроцессором КР1810 ВМ87,
что существенно ограничивает их возможности. В этом отно- шении хорошее впечатление оставляют выпускаемые в ГДР ПЭВМ А-7150 и ЕС-1834, созданные также на базе микропро- цессоров Intel 8086 и 8087 и оснащенные достаточно развитым программным обеспечением. Описание этих перспективных для многих применений ПЭВМ можно найти в [72,78,79]. Весьма интересной представляется также серия ПЭВМ MS/2 (ВНР), сов- местимая с IBM РС/ХТ/АТ. 2.7. СИСТЕМА ВВОДА-ВЫВОДА ПЭВМ ИСКРА 1030 В настоящем разделе обсуждается вопрос передачи инфор- мации между УВВ и ЦП или ОП ПЭВМ ИСКРА 1030. На рис. 6 представлена принципиальная архитектура системы ввода-вы- вода ПЭВМ. Как видно из приведенного рисунка, все УВВ подключаются к СИ через собственные интерфейсы. Каждый интерфейс имеет свой набор регистров, называемых портами ввода-вывода, через которые ЦП и ОП взаимодействуют с УВВ при обмене ин- формацией. Одни порты предназначены для буферизации дан- ных, другие - для хранения информации о состоянии УВВ и его интерфейса, которую может проверить ЦП, а третьи - для полу-
чения приказов от ЦП, управляющих работой УВВ и его интер- фейса. Все взаимодействия с УВВ осуществляются через пор- ты ввода-вывода в его интерфейсе. Следовательно, в ЦП име- ются средства для передачи информации в (из) порты (ов), а также в (из) ОП. Вывод из ЦП в управляющий или буферный порт осуществля- ется выдачей адреса на шину адреса и соответствующих сиг- налов на шину управления СИН с последующей выдачей дан- ных на шину данных СИН. Ввод из входного порта реализует- ся выдачей адреса и управляющих сигналов на соответствую- щие шины СИН и ожиданием реакции интерфейса УВВ выдачей содержимого адресованного порта на шину данных СИН. Сле- дует отметить, что адреса ассоциируются не с интерфейсами УВВ, а с портами ввода-вывода. Так, если интерфейс УВВ имеет два порта ввода-вывода, то он должен воспринимать два различных адреса ввода-вывода. Передачу данных через порт можно осуществлять двумя способами. Первый способ - выполнить команду, которая пе- редает один байт или одно слово, второй - выполнить после- довательность команд, которая заставляет специальную ком- поненту системы, связанную с интерфейсом УВВ, передать совокупность байт или слов в(из) указанный(ого) блок(а) яче- ек ОП. Второй способ называется прямым доступом в память (ПДП), а специальная компонента УВВ называется контролле- ром ПДП. Байт или слово передаются между портом и ЦП, а ре- жим ПДП осуществляется непосредственно с ОП. Программный ввод-вывод и ввод-вывод по прерываниям основываются на передаче байт и слов: информация от ОП к портам ввода-вывода и наоборот передается через регистр ЦП. Например, чтобы передать блок байт или слов из УВВ в ОП, программа должна последовательно вводить байты или слова в регистр ЦП и только после этого помещать их в смежные ячейки ОП. Эти операции реализуются программным циклом. Блоковым вводом управляет интерфейс УВВ и контроллер ПДП так, что каждый байт или слово по мере их появления передают- ся из порта ввода-вывода непосредственно в ОП. Для иниции- рования передачи программа должна только выдать необхо- димые приказы в интерфейс УВВ и контроллер ПДП. Аналогич- ным образом интерфейс УВВ и его контроллер обрабатывают последовательно поступающие байты или слова из ОП для пе- редачи их на УВВ. В связи с передачей информации возникает два вопроса: как система распознает интерфейс УВВ, имеющий или готовый принимать данные, и какой интерфейс ей обслуживать первым при готовности к обмену нескольких интерфейсов. При програм- мном вводе-выводе сама программа определяет требующие обслуживания интерфейсы УВВ, проверяя биты готовности в их регистрах состояния, т. е. опрашивая УВВ. При вводе-выводе по прерываниям интерфейс УВВ посылает в ЦП внешнее пре- рывание, когда он имеет данные для ввода или готов прини-
мать их, а сама операция ввода-вывода реализуется специаль- ной процедурой прерывания. В операции ПДП интерфейс УВВ запрашивает использование СИ, выдавая сигнал по линии уп- равления, и осуществляет необходимую передачу информации без участия ЦП. Когда обслуживания запрашивают несколько интерфейсов УВВ, порядок удовлетворения запросов на обмен зависит от встроенного в систему механизма приоритетов. В ПЭВМ ИСКРА 1030 программное взаимодействие с пор- тами ввода-вывода осуществляется посредством команд IN (ввод) и OUT (вывод). Обе эти команды передают байт или слово и имеют длинный и короткий форматы. Первым операн- дом в команде IN является регистр AL (передача байта) или ре- гистр АХ (передача слова). Как и при обращении к ОП, слово передается из двух смежных адресов, причем младший байт передается в регистр АХ из порта ввода-вывода с меньшим адресом. Если второй операнд в команде IN оказывается кон- стантой, то она служит адресом порта ввода-вывода, содержи- мое которого поступает в регистр. Команда IN в этом случае имеет длину 2 байта, и адрес занимает второй ее байт. Когда вторым операндом указан регистр DX, то команда IN полага- ется однобайтной, а в качестве адреса порта ввода-вывода используется содержимое регистра DX. Этот формат коман- ды IN рбеспечивает доступ к портам ввода-вывода с адреса- ми в пределах от 0 до 64 Кбайт. Аналогичная картина имеет место и для команды OUT с тем отличием, что в ней адрес пор- та ввода-вывода является получателем информации и поэто- му должен указываться первым операндом, а вторым операн- дом указываются регистры AL или АХ. Детальное описание архитектуры вычислительных систем на базе микропроцессоров фирмы Intel можно найти в прево- сходной книге [16]. Там же приводится описание новых 32-раз- рядных микропроцессоров фирмы Intel, что может представить определенный интерес для читателей с точки зрения дальнейше- го развития серии ПЭВМ ИСКРА 1030, тогда как книга [86] ори- ентирована на системных программистов, работающих в среде Макроассемблера, и описывает основные принципы и архи- тектуру семи наиболее широко используемых в мире микро- процессоров, включая и Intel 8086. Следующие главы посвящены программному обеспечению ПЭВМ ИСКРА 1030.
3. АРХИТЕКТУРА И ФУНКЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПЭВМ ИСКРА 1030 В широком смысле слова программное обеспечение (ПО) лю- бой ЭВМ многофункционально, имеет ярко выраженную модуль- ную структуру и предназначено как для управления всем ходом функционирования ЭВМ, так и решения тех прикладных задач, на которые ориентирована ЭВМ данного класса. В основу ПО всех современных ЭВМ ложится та или иная операционная система (ОС). Она представляет собой набор системных программных средств, обеспечивающих функционирование ЭВМ, интерфейс пользователя с ЭВМ и эффективное использование всех прог- раммных и вычислительных ресурсов системы. Термин „опера- ционная система” не имеет строгого определения, поэтому раз- личные авторы относят к ОС различные системные програм- мные средства. В настоящей главе будем придерживаться классификации программных средств, принятой в книгах [1, 2, 18, 19], и нашедшей многочисленных последователей. ПО ПЭВМ ИСКРА 1030 реализовано на основе ОС АДОС 2.0, которая унифицирована с наиболее распространенной и по- пулярной за рубежом ОС для ПЭВМ - MS DOS фирмы Microsoft. В настоящее время за рубежом на базе одноплатных микро- ЭВМ разрабатываются мощные вычислительные системы, характеризующиеся многопроцессорностью, наличием уст- ройств управления кэш-памятью, свободным доступом к памяти, полной компоновкой элементов на плате и необ- ходимым ПО. По последним данным после ОС UNIX самой по- пулярной среди разработчиков 32-разрядных одноплатных микро-ЭВМ является именно ОС MS DOS [71], что повышает ак- туальность ее освоения. Система АДОС в значительной мере унифицирована также с ОС PS DOS [52], разработанной корпо- рацией IBM для серии IBM РС/ХТ/АТ. При этом ОС АДОС 2.0 унифицирована с системой MS DOS 2.0. Здесь уместно несколь- ко подробнее обсудить термин „унифицирована”. В отечественной литературе часто приходится встречаться с высказываниями о совместимости ПО ПЭВМ ИСКРА 1030 и ее прототипа IBM PC/XT. Это положение является ошибочным по целому ряду причин, из которых остановимся на некоторых. Во-первых, ПЭВМ ИСКРА 1030 является не копией, а аналогом IBM PC/XT, в котором не реализован целый ряд технических решений прототипа. В частности, в полной мере не реализован сопроцессор Intel 8087, предназначенный для арифметических вычислений и оперирующий 68 командами. Поэтому целый ряд программных средств непереносим с системы IBM PC/XT или совместимых с ней ПЭВМ на ИСКРА 1030. Во-вторых, ори- гинальная базовая MS DOS успешно функционирует на ПЭВМ
ИСКРА 1030. Это объясняется тем, что ОС используёт опреде- ленный базовый набор команд ЦП (пересылки, работы со стэ- ком и таблицами, передач управления, управления ЦП и так далее), которые входят во все аналоги IBM PC/XT (ЕС 1840, ИСКРА 1030 и НЕЙРОН И9.66). В связи с этим и возникает па- радоксальная ситуация, когда оригинальная ОС MS DOS функ- ционирует на аналогах IBM PC/XT или совместимых с ней зарубежных ПЭВМ, а другие программные (системные и при- кладные) средства на аналогах не работают. По вышеуказанной причине, например, не работают на ИСКРА 1030 в полном объеме своих функциональных возможностей оригинальные версии трансляторов с языков программирования FORTRAN-77 и PL/М, целый ряд важных программных пакетов. На отсутствие полной совместимости оказывают влияние и различия в режи- мах функционирования ряда компонент аналогов и оригина- лов ПЭВМ. Проведенный анализ ПЭВМ ЕС 1840, НЕЙРОН И9.66 и ИСКРА 1030 показал, что будучи программно несовмести- мыми попарно между собой, каждая из них несовместима и со своим зарубежным прототипом. В свете вышесказанного, тер- мин „унифицирована” более соответствует для определения совместимости отечественных ПЭВМ с их зарубежными про- тотипами. На ПЭВМ ИСКРА 1030 подобно НЕЙРОН И9.66 наряду с MS и PC DOS может использоваться и система СР/М с разработан- ным в ее среде прикладным ПО. ПЭВМ НЕЙРОН И9.66 стандарт- но поставляется с двумя операционными системами НЕЙ- РОН-ДОС1 (унифицирована с MS DOS) и НЕЙРОН-ДОС2 (уни- фицирована с СР/М). Следует отметить, что поставляемое с НЕЙРОН И9.66 программное обеспечение предоставляет пользователю большие возможности, чем в случае ИСКРА 1030, и лучше документировано. Например, вместе с операционной системой НЕЙРОН-ДОС1 поставляются такие пакеты широкого назначения как: НЕЙРОН-БАЗА НЕЙРОН-ФАЙЛ НЕЙРОН-ТЕКСТ - система управления реляционными ба- зами данных среднего объема; - система хранения и обработки информа- ции, организованной в виде записей; - редактор текстов, аналогичный редакто- ру, поставляемому с системой АДОС, но с большими функциональными воз- можностями. Все указанные программные средства могут успешно эксплуа- тироваться и на ПЭВМ ИСКРА 1030. Хотя здесь и будет вполне уместно дать один совет пользователям ПЭВМ ИСКРА 1030 (а также ЕС 1840, ЕС 1841 и НЕЙРОН И9.66): при любой воз- можности следует использовать оригинальные операционные системы и разработанные в них программные средства (ком- пиляторы с языков программирования, СУБД, ППП, экспертные системы и так далее), например систему MS DOS 3.3. Однако
цель нашей книги состоит в изучении ПО, поставляемого с ПЭВМ ИСКРА 1030, хотя по мере возможности будем давать инфор- мацию о перспективных для ПЭВМ серии ИСКРА 1030 програм- мных средствах различного назначения. О имеющемся для сов- местимых с моделями IBM РС/ХТ/АТ программном обеспече- нии можно узнать из многочисленных оригинальных и перевод- ных источников, фирменных руководств, приведенных в списке литературы, а также из гл. 10 книги. Система АДОС включает большой набор системных команд, предоставляющих пользователю широкий выбор разнообраз- ных функций. Все сообщения АДОС (за редким исключением) выдаются пользователю на русском языке. Для команд же са- мой системы принята латинская мнемоника, полностью соот- ветствующая принятой в системе MS DOS. Поэтому далее по тексту можно встретить попеременное упоминание то АДОС, то MS DOS. Полный комплект модулей АДОС поставляется пользователю на отдельной дискете типа ЕС-5288 вместе с ПЭВМ ИСКРА 1030. В данной главе обсуждаются архитектура, основные функции ПО ПЭВМ ИСКРА 1030 и назначение его ос- новных компонент. В следующих же главах подробно рассмат- риваются сама система АДОС, язык программирования БЕЙ- СИК и Редактор текстов. 3.1. СОСТАВ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПЭВМ ИСКРА 1030 ПО ПЭВМ ИСКРА 1030 можно условно разбить на четыре в определенном смысле самостоятельные части: - системное ПО (СПО); - сервисные программные средства (СПС); - обслуживающие программные средства (ОПС); - прикладное программное обеспечение (ППО). Состав каждой из перечисленных частей, вообще говоря, с те- чением времени видоизменяется и порой значительно. Это связано с разработкой и обновлением старых программных средств и т. д. Однако назначение отдельных компонент, как правило, остается неизменным. Поэтому приводимая ниже схема состава ПО ПЭВМ ИСКРА 1030 отражает именно се- годняшнее положение дел в этом вопросе. Краткая характеристика наиболее популярных и доступных программных средств, которые можно использовать на ПЭВМ ИСКРА 1030, будет приведена в гл. 10. Рассмотрим несколько подробнее каждую из перечисленных на приведенной схеме компонент ПО ПЭВМ ИСКРА 1030. 3.2. СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПЭВМ ИСКРА 1030 Основой всего ПО ПЭВМ ИСКРА 1030 является ОС АДОС версии 2.0, унифицированная с ОС MS DOS версии 2.0. Она обеспечивает пользователя средствами автоматического уп-
ПО ПЭВМ ИСКРА 1030 СПО СПС опс ппо -Ядро АДОС -Транзиты АДОС -Интерпретатор с языка Ассемблер - Редактор связей - Программы CREF DEBUG - Интерпретатор с языка БЕЙСИК -Редактор -Тесты ПЭВМ -ППП edlin -Тесты ПО -Программы - Специаль- - Смешанные пользователя ные сервис- тесты ные функции -Демонстра- - Редактор ционные за- текстов дачи - Игры - Интерпретатор с языка ЯМБ - Компиляторы с язы- ков высокого уровня: С, COBOL, FORTRAN-77, PL/M, Turbo-Pascal, Modula-2, PROLOG, FORTH И др. равления УВВ, поддерживает выполнение проблемных и систем- ных программ, обеспечивает диалог с пользователем. АДОС представляет собой совокупность программных файлов, нахо- дящихся на дискете. Весь набор системных файлов АДОС раз- бивается на две группы - ядро АДОС и транзиты АДОС. В ядро АДОС входят четыре системных файла: - программа начальной загрузки (IPL; находится в файле с именем BOOT RECORD PROGRAM), автоматически считы- вающаяся в ОП при запуске ПЭВМ и управляющая загрузкой остальной части ядра АДОС; - программа управления базовым вводом-выводом (файл с именем IBMBIO.COM), управляющая системой ввода-вы- вода всех УВВ ПЭВМ; - программа файловой службы (файл с именем IBMDOS.COM), поддерживающая файловую структуру системы и выпол- няющая целый ряд специальных функций; - процессор консольных команд (файл COMMAND.COM), слу- жащий для обработки вводимых с консоли системных команд АДОС. Три первые программы ядра занимают фиксированное место в самом начале дискеты с системой АДОС (АДОС-дискета). В целях защиты при обычной распечатке каталога АДОС-диске- ты имена этих трех системных файлов не выводятся. Ниже будут описаны специальные средства, позволяющие получить эти распечатки. При включении ПЭВМ после выполнения встро- енных тестов в ОП загружается с первого сектора АДОС-диске-
ты программа начальной загрузки IPL, которая затем загружа- ет в ОП остальные компоненты ядра АДОС. После загрузки ядра система готова к работе, т. е. к восприятию команд, реа- лизующих широкий набор функций АДОС. Такова в самых общих чертах картина загрузки и инициации системы АДОС. В следую- щей главе значительно более подробно будут описаны назна- чения основных компонент АДОС, ее загрузка и инициация. Часть вводимых с консоли команд обрабатывается ядром АДОС (внутренние команды), тогда как другие команды требуют загрузки в ОП соответствующих программных файлов системы (внешние команды). Загружаемые системные файлы и состав- ляют транзиты АДОС. Практически все системные сообщения пользователю выводятся на русском языке, однако мнемоника самих системных команд полностью соответствует соглаше- ниям системы MS DOS. Система АДОС позволяет выполнять следующие основные функции: - подготавливать к работе (инициализировать) дискеты; - поддерживать файловую систему; - выводить, проверять и корректировать информацию на дискетах; - копировать программы и данные на дискетах; - редактировать программы и данные, вызванные в ОП; - выполнять системные и проблемные программы, рабо- тающие под управлением системы; - поддерживать работу с дисками типа „Винчестер”; - поддерживать работу с виртуальными дисками; - управлять работой всех УВВ, подключенных к ПЭВМ. Наряду с перечисленными АДОС обеспечивает пользователя целым рядом специальных сервисных функций: установка ре- жимов работы печати, дисплея, канала связи и т. д. В состав СПО входят также интерпретаторы с языков прог- раммирования Ассемблер, БЕЙСИК и ЯМБ. Интерпретаторы с этих языков программирования представляют собой прог- раммные файлы, загружаемые в ОП средствами системы АДОС. Интерпретаторы в отличие от компиляторов осуществляют покомандное выполнение программ, написанных на языках программирования интерпретирующего типа, что требует боль- ших временных затрат, чем в случае использования компиля- торов. Однако по сравнению с интерпретатором компилятор менее гибок, так как при необходимости изменения программы в ходе ее выполнения интерпретатор дает возможность про- вести необходимые изменения и продолжить ее выполнение, тогда как компилятор в аналогичной ситуации требует повто- рить с самого начала измененную программу. Для использования всех программных возможностей ПЭВМ ИСКРА 1030 пользователю предоставляется возможность раз- рабатывать, отлаживать и выполнять программы на машинно- зависимом языке Ассемблер, являющемся аналогом языка ASM-86 IBM PC. Данный язык позволяет пользователю не только
использовать все программные возможности ПЭВМ, но и дает эффективные средства по расширению возможностей самой ОС ПЭВМ и созданию высокоэффективных программных средств. В свою очередь, эффективное использование языка Ассемблер требует от пользователя серьезных профессиональ- ной подготовки и навыков работы с вычислительной техникой. Именно поэтому Ассемблер предназначен в основном для си- стемных программистов, работающих на ПЭВМ ИСКРА 1030. Язык Ассемблера - символический язык, в котором каждый код машинной операции имеет легко запоминаемое символи- ческое имя, называемое мнемоникой. Язык Ассемблера по форме и содержанию подобен машинному языку ИСКРА 1030. Программа на языке Ассемблера состоит из строк, представ- ляющих инструкции и комментарии. Комментарии не влияют на вырабатываемый транслятором объектный код, но включа- ются в листинг программы и позволяют лучше ориентировать- ся в ней. Инструкции делятся на четыре группы: - машинные инструкции; - команды Ассемблера; - макрокоманды Ассемблера; - псевдоинструкции Ассемблера. Машинные инструкции - это символические представления машинных команд ПЭВМ в составе инструкций Ассемблера. Команды Ассемблера представляют собой требования к транс- лятору Ассемблера по выполнению определенных действий во время трансляции исходного модуля программы. Макроко- манды служат для создания предварительно определенных последовательностей кодов. Из такой последовательности Ассемблер генерирует исходные инструкции, которые затем обрабатываются так, как если бы они были частью исходного модуля программы. Псевдоинструкции мнемонически подобны командам Ассемблера и указывают ему, что делать с данными, условными переходами, макроопределениями и листингами. Они, как правило, не порождают кодов машинного языка. Макросредства языка Ассемблер позволяют составлять конкретные наборы программных кодов для наиболее часто использующихся в программе последовательностей инструк- ций и вставлять их в программу, не повторяя самого набора инструкций. Такой набор программных кодов с приписанным ему именем называется макрокомандой, а совокупность ин- струкций, служащая основой макрокоманды, называется мак- роопределением. Когда возникает потребность использовать такую совокупность кодов, в исходный текст программы поме- щается имя макрокоманды с набором соответствующих фор- мальных параметров. Макроассемблер (МАСМ) на месте ма- крокоманды помещает в текст программы нужный набор ин- струкций, заменяя аргументы макроопределения значениями формальных параметров макрокоманды. Макросредства допускают рекурсивные конструкции, когда имеется возможность обращения из макроопределения к ма-
крокоманде. При этом глубина рекурсии ограничивается только размером доступной области ОП. Макросредства включают ко- манды повторения, упрощающие запись некоторых наиболее типичных макроопределений. МАСМ транслирует исходные коды языка Ассемблер в программы на машинном языке и обес- печивает выполнение функций по: - проверке и документированию исходных программ; - генерации макрокоманд; - перемещению объектных программ; - обнаружению ошибок в исходных программах; - выдаче листингов исходных и объектных программ. МАСМ выполняется под управлением системы АДОС и требует для своего функционирования 96 Кбайт оперативной памяти. МАСМ из исходного формирует перемещаемый объектный модуль, определяя для каждой инструкции смещение относи- тельно базового сегмента, в котором располагается данная инструкция. Оттранслированный модуль может быть отредак- тирован с помощью Редактора связей LINK. Результатом рабо- ты программы LINK является готовый к исполнению перемеща- емый загрузочный модуль, который может быть помещен в лю- бой доступной области ОП. Редактор связей LINK выполняет следующие основные функции: - объединяет отдельно созданные объектные модули в один загрузочный модуль; - разрешает внешние перекрестные ссылки; - генерирует листинг, содержащий разрешение внешних, ссылок и сообщения об обнаруженных ошибках; - генерирует перемещаемый загрузочный модуль. Таким образом, загрузочный модуль может выполняться в лю- бом доступном месте ОП, а перемещаемость объектного мо- дуля приводит к возможности модульной организации про- грамм. По требованию пользователя МАСМ создает файл листинга и файл перекрестных ссылок. Файл листинга содержит исход- ный модуль, машинный код каждой инструкции, а также табли- цу имен и их значений. Файл перекрестных ссылок содержит компактное представление имен из исходного модуля и номе- ров строк, в которых они используются. Этот файл может быть обработан специальной программой CREF, которая позволяет существенно упростить отладку программ сложной структуры. Специальная программа-монитор DEBUG предназначена для удобства отладки ассемблерных программ и проверки функ- ционирования технических средств ПЭВМ. Она позволяет уп- равлять выполнением отлаживаемой программы, вмешиваясь при необходимости в процесс ее выполнения. Программа DE- BUG дает возможность доассемблировать программу при вне- сении в нее изменений. Наряду с этим DEBUG позволяет загру- жать в ОП, корректировать и отображать на экране дисплея задаваемые пользователем файлы. Подробная информация по использованию языка Ассемблера для разработки системного
И проблемного ПО на ПЭВМ ИСКРА 1030 может быть найде- на в [17]. Язык программирования высокого уровня БЕЙСИК ПЭВМ ИСКРА 1030 предназначен для разработки программ решения весьма широкого круга задач из различных областей. БЕЙСИК позволяет эффективно описывать различные формульные вы- ражения, производить достаточно сложные вычисления, обра- батывать символьную и графическую информацию. Развитые средства языка БЕЙСИК позволяют работать с числовыми кон- стантами и переменными различной точности, использовать широкий набор арифметических и логических операций, рабо- тать с одно- и двумерными массивами данных. Подобно Ас- семблеру, БЕЙСИК-программы используют дискеты и жесткие диски типа „Винчестер” в рамках соглашений, принятых в си- стеме АДОС. Поэтому БЕЙСИК-программы и связанные с ними данные могут размещаться на АДОС-дискете и обрабатывать- ся средствами АДОС. Однако по ряду соображений пользова- тельские программы и данные не рекомендуется размещать на системных носителях информации. Однако ради справед- ливости следует отметить, что хотя БЕЙСИК и является наибо- лее популярным языком программирования на ПЭВМ, с точки зрения структурного программирования он имеет целый ряд недостатков. Этот момент следует учитывать при необходимо- сти разработки для ПЭВМ ярко выраженных структурированных программ. В связи с тем, что язык БЕЙСИК является наиболее популяр- ным массовым языком программирования разных типов ПЭВМ [1-10,39,44], а также достаточно популярен и на ЭВМ других классов [26], знакомство с ним должно составить необходимый элемент изучения и использования ПЭВМ любого типа. Изуче- ние его должно стать составной частью любого курса по осно- вам программирования, вычислительной техники и информати- ки. Такой подход позволит в кратчайшие сроки привлечь к ра- боте с ПЭВМ массового пользователя, что не замедлит ска- заться на развитии многих сфер человеческой деятельности, да и самого человека в целом. Поэтому в настоящей книге дается детальное изложение языка программирования БЕЙСИК ПЭВМ ИСКРА 1030, совме- стимого с БЕЙСИК весьма широкого класса ПЭВМ как оте- чественных, так и зарубежных. В плане ознакомления с даль- нейшим развитием инструментальных средств языка БЕЙСИК можно обратиться к работам [1-3,21]. Для обеспечения преемственности ПО, разработанного для ЭБМ ИСКРА-555 и НЕВА-501, в СПО ПЭВМ ИСКРА 1030 включен язык программирования ЯМБ (язык машин бухгалтерских), который совместим с версией языка ЯМБ для вышеназван- ных ЭБМ. Язык программирования ЯМБ предназначен для разработки программ решения различных учетно-статистических и инфор- мационно-справочных задач, связанных с обработкой данных
и одновременным формированием многострочных и много- графных документов в любых отраслях народного хозяйства. Структура языка ЯМБ позволяет производить любые операции по обработке данных, управлять УВВ, составлять описание форм выходных документов и массивов данных. ЯМБ дает возмож- ность писать разветвленные программы обработки цифровой и алфавитно-цифровой информации. Простота синтаксических конструкций и русская мнемоника позволяют использовать ЯМБ пользователям с минимальной специальной подготовкой. По своей информационной емкости ЯМБ является высокоэффективным специализированным язы- ком, обеспечивающим экономное использование ОП и дискет. С помощью языка ЯМБ можно описывать размещение в ОП числовой и алфавитно-цифровой информации как формируемой по программе пользователя, так и вводимой с УВВ. ЯМБ позво- ляет пользователю обрабатывать различные особые ситуации, связанные с вводом-выводом, и оперировать с несколькими типами данных как фиксированной, так и переменной длины. Арифметические и логические операции, индексирование, ус- ловная и безусловная передачи управления позволяют описы- вать практически любые алгоритмы обработки информации. Однако, как сама структура ЯМБ-программ, так и набор операторов языка в первую очередь ориентированы на работу с различного рода документами. Следует помнить, что исполь- зование ЯМБ-программами дискет отлично от соглашений си- стемы АДОС. Поэтому при работе с языком ЯМБ необходимо после его загрузки в ОП вынуть из НГМД АДОС-дискету и ис- пользовать дискеты, предназначенные и подготовленные для ЯМБ-программ. Подробная информация по использованию язы- ка ЯМБ для разработки прикладного ПО находится в [17]. Наряду с интерпретаторами вышеуказанных языков прог- раммирования в операционной системе MS DOS на ПЭВМ ИС- КРА 1030 можно использовать компиляторы с языков прог- раммирования высокого уровня (Turbo-BASIC, Pascal, Turbo- Pascal, Modula-2, PROLOG [78,79,85,91] и др.), которые наряду с прочими преимуществами, присущими этим языкам, по срав- нению с аналогичными интерпретаторами позволяют созда- вать программное обеспечение более высокой производитель- ности. Например, ряд программ, разработанных в средах БЕЙ- СИК-интерпретатора и Turbo-BASIC, позволил получить почти десятикратный временной выигрыш при их выполнении на ПЭВМ ИСКРА 1030. Однако использование этих средств требует большего размера ОП и памяти на дисках, чем в случае исполь- зования интерпретаторов. 3.3. СЕРВИСНЫЕ ПРОГРАММНЫЕ СРЕДСТВА ПЭВМ ИСКРА 1030 Сервисные программные средства (СПС) обеспечиваются как на уровне ряда команд самой системы АДОС, так и отдель- ными сервисными программами. Строковый редактор EDLIN
обеспечивается системной командой 'EDLIN' и служит для создания, корректировки и отображения файлов текстов или исходных модулей программ. Основные функции строкового редактора: - создание новых файлов с исходными модулями и их сох- ранение; - обновление существующих файлов и сохранение обнов- ленного и исходного файлов; - удаление, редактирование и отображение строк файла; - поиск контекста в указанных строках файла с целью его корректировки. Строковый редактор работает со строками переменной длины не более 253 символов. Строки обрабатываемого редактором EDLIN текста нумеруются с шагом 1, начиная с первой строки; нумерация строк отражается на экране дисплея, но сами но- мера в текстовой файл не помещаются. Ряд команд системы АДОС предназначен для выполнения специальных сервисных функций: - инициализации магнитных дискет; - проверки, распечатки и корректировки содержимого дискет; - обслуживания магнитных дисков типа "Винчестер”; - работы с каталогом дискет; - обслуживания файловой системы; - сортировки текстовой информации; - других сервисных функций. Подробно эти функции будут рассмотрены в следующей главе. Редактор текстов используется для создания и редактиро- вания различного рода текстовой информации, которую не- обходимо запомнить или которая уже хранится на дискетах в виде файлов. Текст может представлять собой исходную программу на любом языке программирования, набор данных или произвольный текстовой материал. Следует отметить, что данная книга была подготовлена с помощью Редактора текстов ПЭВМ ИСКРА 1030. В процессе редактирования можно построчно и постранично просматривать текст на экране дисплея, проводить различного рода его корректировку, выполнять автоматический поиск в тексте заданных контекстов, выполнять автоматическую за- мену в режиме поиска и т. д. Редактор позволяет выводить любую текстовую информацию на принтер в требуемом для пользователя формате. При редактировании текста можно включать в него указания (специальные команды) о специаль- ных режимах печати: нумерацию страниц, выделение заголов- ков, печать двойной плотностью и т. д. Редактор текстов до- пускает использование в текстовой информации всех символов кодовой таблицы ПЭВМ ИСКРА 1030 (приложение ^.Подроб- ному описанию Редактора текстов и работе с ним будет ниже посвящена отдельная глава.
Наряду с перечисленными стандартно поставляемыми сер- висными средствами пользователь, использующий на своей ПЭВМ другие операционные системы, например MS DOS 3.2 или MS DOS 3.3 [40,41], получает доступ к более богатому выбору сервисных средств как на уровне самой системы, так и в виде специальных сервисных программ и пакетов. В качестве при- мера можно привести широко используемые многофункцио- нальные сервисные пакеты типа 'PCTOOLS', которые, вообще говоря, можно использовать и в системе АДОС. 3.4. ОБСЛУЖИВАЮЩИЕ ПРОГРАММНЫЕ СРЕДСТВА ПЭВМ ИСКРА 1030 Обслуживающие программные средства (ОПС) состоят из различного назначения тестов, демонстрационных задач и боль- шого набора различных игр. Все имеющиеся тесты можно раз- бить на тесты ПЭВМ и тесты ПО. Тесты ПЭВМ предназначены для проведения приемочных испытаний и профилактического обслуживания ПЭВМ ИС- КРА 1030. Они позволяют проверить работоспособность ПЭВМ; по своему функциональному назначению разбиты на четыре отдельных теста: ТЕСТ 1 - служит для всесторонней проверки работы кла- виатуры ПЭВМ; ТЕСТ 2 - служит для проверки УВВ, каналов связи и ОП, а также интерпретации операторов языка ЯМБ; ТЕСТ 3 - используется совместно с ТЕСТ 2 и служит для дополнительной проверки ОП ИСКРА 1030 испол- нений 2, 4 или 5; ТЕСТ 4 - используется совместно с ТЕСТ 2 и служит для дополнительной проверки ОП ИСКРА 1030 испол- нения 3. Все перечисленные четыре теста написаны на языке ЯМБ, их листинги можно получить, загрузив в ОП соответствующий тест и задав требуемый режим вывода [17]. Наряду с данными тестами существуют средства тестирования тех или иных ком- понент ПЭВМ как встроенные, так и в рамках самой систе- мы АДОС. Тесты ПО служат для проверки всех основных компонент ПО ПЭВМ ИСКРА 1030. Тест Макроассемблера МАСМ и редакто- ра связей LINK (файл K_MASM.BAT) проверяет работоспособ- ность указанных программных средств трансляцией исходного программного модуля ISKRA.ASM с последующим редактирова- нием полученного объектного модуля. Тест системы АДОС (файл K_ADOS.BAT) служит для проверки работоспособности ОС ПЭВМ и ее основных функциональных возможностей. Смешанные тесты позволяют осуществлять проверку рабо- тоспособности ПЭВМ и основных компонент ПО. Уже упоминае- мый ТЕСТ 2 проверяет основные узлы ПЭВМ и работу интер-
поетатора с языка ЯМБ. Тесты TEST 1 и TEST 2 написаны на языке БЕЙСИК и наряду с проверкой работы интерпретато- ра с языка БЕЙСИК позволяют проверить функционирование УВВ ПЭВМ в заданных пользователем режимах и проверить функционирование ПЭВМ в автоматическом режиме соответ- ственно. Более подробную информацию по всем перечислен- ным средствам тестирования можно найти в [17]. Относитель- но вышеуказанных средств тестирования ПЭВМ ИСКРА 1030 и ее ПО следует заметить, что в основе своей поставляемые пользователю средства не предназначены для серьезного те- стирования и осуществляют весьма поверхностную проверку работоспособности основных компонент ПЭВМ и ее ПО. К разделу обслуживающих программных средств можно отнести демонстрационные задачи и игры, количество которых в настоящее время чрезвычайно велико. Демонстрационные задачи представляют пользователю рекламные данные о ПЭВМ ИСКРА 1030 и ее программных возможностях. Многочислен- ные игры позволяют пользователю в игровой форме легче при- общиться к работе на ПЭВМ в диалоговом режиме и в опреде- ленной мере могут служить формой организации интеллекту- ального отдыха пользователя. Но не только в этом польза по- добных игровых программ. Написанные с использованием мно- гих важных средств языков БЕЙСИК и МАСМ и содержащие от- носительно немного операторов (команд) выведенные листинги этих программ могут служить хорошими примерами для поль- зователя, начинающего программирование на этих языках. 3.5. ПРИКЛАДНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. ПАКЕТЫ ПРОГРАММ Прикладное программное обеспечение (ППО), разработан- ное пользователями для различных областей применения, со- ставляет подавляющую часть всего ПО ПЭВМ ИСКРА 1030 и с течением времени будет все более обширным и многофункцио- нальным. Это тем более справедливо, если учесть весь тот объем ПО, совместимого в значительной мере с ПО ПЭВМ ИС- КРА 1030, которое было разработано за более чем 10-летний период корпорацией IBM и другими пользователями за рубежом для системы IBM РС/ХТ/АТ и совместимых с ней ПЭВМ. Наряду с большим числом прикладных программ специаль- Нм%°п^ЗНаЧеНИЯ в настояи*ее время в операционной среде 5 DOS разработано большое число различного назначения пакетов прикладных программ (ППП), представляющих большой интерес для самого широкого круга пользователей: работа с графикой, ведение баз данных, решение планово-экономи- ческих задач и т. д. в [42] приведено большое число разнообразных программ (более 300) научно-технического характера: численные методы, спектральный, статистический, корреляционный и регрессион- ный анализы, вычисление специальных функций, электротех-
нические расчеты и др. Написанные на языке БЕЙСИК и насчи- тывающие несколько десятков программных строк каждая, эти программы легко переводятся и в среду БЕЙСИК ИСКРА 1030 или ИСКРА 226. Для автоматизации перевода БЕЙСИК-прогр лмм с одного диалекта языка на другой можно использовать ин- струментальные средства и подход, описанные в [1 * 3]. В [42] также можно найти краткое сравнение ряда популярных диа- лектов языка БЕЙСИК для карманных, домашних и профессио- нальных ПЭВМ. Пакет MOLKICK ориентирован на исследование сложных химических структур и может выполняться на моделях серий IBM РС/ХТ/АТ или PS/2. Весьма интересный пакет разработан для специалистов в области теоретической физики [108], ко- торый также ориентирован на ПЭВМ IBM РС/ХТ/АТ. Особый интерес представляют для непрофессионального пользователя системы управления базами данных (СУБД). Из зарубежных источников следует, что в настоящее время пользователям предлагается около 150 пакетов СУБД для раз- личных типов ПЭВМ. Внимание отечественных пользователей могут привлечь прежде всего те СУБД, которые работают под управлением операционных систем MS DOS и PC DOS, совме- стимых с системными требованиями отечественных ПЭВМ ЕС 1840, ИСКРА 1030 и НЕЙРОН И9.66 [29,30]. Этим требовани- ям отвечают примерно 20 американских пакетов собственно СУБД и несколько интегрированных ППП, включающих СУБД. Характеристики таких ППП можно найти в [27,79,84,87]. Из этих ППП для пользователей ПЭВМ ИСКРА 1030 особый интерес представляют СУБД jJBase', отечественным аналогом которого является пакет *НЕЙРОН-база*, предназначенный для ПЭВМ НЕЙРОН И9.66 [30], и интегрированная система 'Frame- work', предназначенная для решения прикладных задач. ППП dBase и Framework* хорошо дополняют друг друга и работают под управлением MS DOS и PC DOS. Наряду с ними представ- ляют интерес и такие пакеты широкого назначения, как VisiCalc, Multiplan, SuperCalc, Lotus [52]. В [84] приводится опи- сание 20 наиболее популярных пакетов для ПЭВМ, совмести- мых с IBM РС/ХТ/АТ, включая Knowledgeman, Harvard Project Manager, SuperCalc, Decision Analyst, Lotus 1-2-3 и др. Совре- менные тенденции массового применения ПЭВМ во всех сферах человеческой деятельности привели, в частности, к то- му, что разработчики СУБД для больших ЭВМ модифицируют свои программные изделия с целью внедрения их на ПЭВМ. С другой стороны, разработчики СУБД для ПЭВМ стремятся создать системы со сложными функциями по управлению дан- ными - и тех и других объединяет желание обеспечить просто- ту использования СУБД для ПЭВМ, учитывая широкое исполь- зование их непрофессиональными пользователями. Качественным сдвигом в развитии СУБД являются разра- ботка и внедрение одного из направлений искусственного интеллекта (ИИ) - экспертных систем. Такие системы хаоак-
теризуются сочетанием эвристики с базой знаний, которая от- делена от набора правил, управляющих ходом принятия реше- ний Разработка систем ИИ ведется и для ПЭВМ, что увеличивает спрос на эти системы как на коммерческий продукт. Целый ряд экспертных систем различного назначения разработан и разрабатывается в операционной среде MS DOS и PC DOS [27], что представляет большой интерес для отечественных поль- зователей ПЭВМ типа ИСКРА 1030. Хороший обзор современ- ного состояния инструментальных средств экспертных систем, ориентированных на ПЭВМ, можно найти в работе [73]. Там же приводится перечень компаний - разработчиков наиболее по- пулярных экспертных систем для серии IBM РС/ХТ/АТ или сов- местимых с нею ПЭВМ. Подробную информацию о коммерче- ских экспертных системах можно найти в [84,87,90]. В последнее десятилетие все большее значение класс ПЭВМ имеет и в исследовании такой столь грандиозной научной, гно- сеологической и вместе с тем практической проблемы, как проблема ИИ во всей ее полноте [43,44,89], где под термином „искусственный интеллект” понимается проблема повышения уровня „разумности” самих компьютеров. Наряду с перечисленным большой интерес представляют и ППП для более специальных применений ПЭВМ. Так, создан- ный под руководством Д. Кнута из Стэнфордского универси- тета (США) пакет 'ТЕХ' предназначен для подготовки различного рода научных публикаций в наиболее удобных форматах [31]. Окружение пакета позволяет, в частности, создавать специ- ализированные символы и элементы математических обозна- чений. Данный пакет весьма эффективен при подготовке мате- риалов математического характера к печати и представляет собой своего рода уникальный текстовый редактор. Пакет 'ТЕХ' переносим на все наиболее популярные вычислительные системы, начиная с IBM PC/XT, Apple, Commodore и кончая не- которыми супер-ЭВМ. Начиная с 1989 года вновь созданный международный журнал 'Applied Mathematical Letters будет принимать к публикации только материалы, подготовленные с помощью пакета 'ТЕХ' или совместимых с ним редакторов текстов. Это позволит довести срок от поступления рукописи до ее опубликования до 3-х месяцев. Рядом фирм США и Японии разработаны издательские систе- мы широкого назначения, совместимые с ПЭВМ серии IBM PC и работающие nojj управлением таких известных пакетов, как, напр., PageMaker, Ventura Publisher', 'Windows', используемых для обработки текстовой и графической информации. Работают указанные пакеты в среде MS DOS и/или PC DOS [72,80-83, о7,88]. Разработан целый ряд интересных пакетов для решения научных и инженерных задач [31-36]. Имеются ППП для исполь- зования ПЭВМ в качестве прототипа математических моделей ряда важных процессов и объектов [37]. Традиционно популяр- ной является разработка различного рода пакетов для исполь-
зования в сфере образования. Здесь особенно интересны раз- работки университета Мэриленд, являющегося ведущим в США центром по разработке обучающих систем для корпорации IBM Так, недавно созданный для IBM PC диалоговый пакет 'FULC- RUM' дает возможность студентам проверить свои способно- сти к решению пространственных и ограниченных по времени решения задач [38]. Наряду с разработкой собственно ППП различного назначе- ния проводятся серьезные проработки по вопросам оптимиза- ции различного класса алгоритмов и структур баз данных, которые учитывали бы специфику их функционирования на ПЭВМ. Большинство этих разработок проводится для ПЭВМ, сов-’ местимых с IBM РС/ХТ/АТ [31], и в этой связи представляют значительный интерес для пользователей и разработчиков ПО ПЭВМ ИСКРА 1030, ЕС 1840 и НЕЙРОН И9.66. Таким образом, перед пользователем часто стоит нелегкая задача из разнообразия имеющихся программных средств выбрать наиболее приемлемое. К сожалению, это не единствен- ная проблема отечественного пользователя ПЭВМ. Ниже рас- смотрим некоторые примеры ППО, представляющие определен- ный интерес. В заключение приведем краткую информацию о наиболее часто используемом распределении поставляемого с ПЭВМ ИСКРА 1030 базового ПО на шести дискетах типа ЕС-5288: дискета 1 - содержит все файлы АДОС и строковый редак- тор EDLIN; дискета 2 - содержит интерпретаторы с языков программи- рования МАСМ и БЕЙСИК, программы CREF, DEBUG, EXE2BIN и редактор связей LINK; дискета 3 - содержит интерпретатор с языка программи- рования ЯМБ и файлы, используемые для рабо- ты с каналом связи по программам, написан- ным на языке ЯМБ; дискета 4 - содержит тесты TEST-1 и TEST-2 на языке БЕЙ- СИК для проверки функционирования ПЭВМ и работы интерпретатора с языка БЕЙСИК; дискета 5 - содержит тесты на языке ЯМБ для проверки функционирования ПЭВМ и работы интерпрета- тора с языка ЯМБ; дискета 6 - содержит файлы редактора текстов. Золее подробную информацию о конкретном распределении базового ПО можно найти в технической документации, постав- ляемой с ПЭВМ ИСКРА 1030.
4 ОПЕРАЦИОННАЯ СИСТЕМА АДОС ' ДЛЯ ПЭВМ ИСКРА 1030 4.1. ХАРАКТЕРИСТИКА И ЗАГРУЗКА СИСТЕМЫ АДОС Как уже отмечалось выше, ОС АДОС унифицирована с наи- более распространенной и популярной системой MS DOS и обеспечивает пользователя средствами автоматического уп- равления УВВ, поддерживает выполнение всех системных и проблемных программ и управляет использованием и функ- ционированием всех ресурсов ПЭВМ ИСКРА 1030. Система АДОС имеет ярко выраженную файловую структуру, програм- мные файлы которой по своему назначению и режиму исполь- зования делятся на две основные группы: ядро системы и ее транзиты. Ядро системы содержит программные файлы IBMIO.COM, IBMDOS.COM и COMMAND.COM, а также программу начальной загрузки IPL (системный файл с именем BOOT RECORD PROG- RAM); является резидентной частью АДОС и обеспечивает вы- полнение основных функций ОС: управление основными ре- сурсами (ЦП и ОП) и всеми УВВ ПЭВМ, поддержку файловой структуры, отслеживание выполнения всех программ, работаю- щих под управлением АДОС. Другие программные файлы си- стемы составляют ее транзитную часть и служат для реали- зации различного назначения сервисных функций. Пользователь использует возможности системы АДОС посредством специального языка команд, представляющего собой, по сути дела, язык управления системными ресурсами. Команды АДОС делятся на внутренние и внешние. Внутрен- ние команды системы интерпретируются процессором кон- сольных команд (файл COMMAND.COM), находящемся в самом ядре системы, и поэтому после загрузки АДОС в ОП не требуют присутствия АДОС-дискеты с системными файлами на НГМД, тогда как для выполнения внешних команд требуется загрузка в ОП соответствующих им системных файлов, содержащих программы обработки данных команд. Для возможности работы с системой АДОС необходимо включить ПЭВМ в сеть и загрузить систему. Включение ПЭВМ осуществляется в следующем порядке: в дисковод 'а' поме- щается^ АДОС-дискета, включаются основной модуль ПЭВМ, дисплей и принтер (по мере надобности). Необходимо соблю- дать указанный порядок включения, чтобы исключить возмож- ные трудности при загрузке системы. Выключение ПЭВМ про- изводится в обратном порядке. При включении ПЭВМ автома- тически выполняется встроенный тест проверки ОП, который
продолжается 20 + 25 с. В процессе выполнения теста на экра не дисплея Отображается мигающий символ курсора и выводят ся цифры (кратные 16-ти), указывающие объем проверенной части ОП в Кбайтах (1 Кбайт = 1024 байта). После выполнения теста проверки подается звуковой сиг нал и происходит обращение к дисководу 'А', содержащему АДОС-дискету. ПЭВМ считывает систему АДОС в два основных этапа. На первом этапе с 1-го сектора нулевого трека АДОС дискеты считывается программа начальной загрузки IPL, ко торая в свою очередь загружает остальные компоненты ядре системы АДОС: файлы IBMBIO.COM, IBMDOS.COM и процессор команд COMMAND.COM. В случае возникновения сбоя в процес се загрузки АДОС следует нажать клавишу 'INIT*, после чегс загрузка системы возобновится с самого начала. Если в ди сководе 'а' отсутствует дискета или в нем установлена нс АДОС-дискета, на экране дисплея появляется сообщение оС ошибке. В этом случае следует установить АДОС-дискету и на жать клавишу 'INIT'. При необходимости перезагрузить систему АДОС, не вы ключая ПЭВМ и не обращаясь к клавише 'INIT', необходимо вставить в дисковод А* АДОС-дискету и при нажатых клави шах 'CTR' и ALT' нажать клавишу . После отпускания ука занных трех клавиш осуществляется системный сброс: выпол няется встроенный тест проверки ОП без индикации на экране объема проверенной части ОП и загружается ядро системы АДОС. Системный сброс является наиболее предпочтительным способом перезагрузки системы и его можно выполнять в лю- бое время функционирования ПЭВМ. Перезагрузку системы можно делать и по команде COMMAND, по которой загрузка осуществляется с перезагрузки файла COMMAND.COM и вы- полнения системного пакетного файла AUTOEXEC.BAT После загрузки ядра системы автоматически загружается с АДОС-дискеты системный файл AUTOEXEC.BAT, содержащий 8 последовательно выполняемых команд АДОС: ECHO OFF CLS DISK PRN10 DATE TIME VER ECHO ON - отмена режима высвечивания команд на экране - очистка экрана дисплея; - загрузка в ОП драйвера, обеспечивающего ра- боту с 40- и 80-трековыми дискетами, в про- тивном случае АДОС может работать только с 80-трековыми дискетами; - загрузка драйвера принтера типа СМ 6329; - вывод на экран дисплея запроса даты; - вывод на экран дисплея запроса времени; - вывод на экран дисплея версии АДОС; - восстановление режима высвечивания команд системы на экране дисплея. Драйверы 'DISK' и 'PRN10' после загрузки постоянно находятся в резидентной части ОП. Если на АДОС-дискете отсутствует
файл AUTOEXEC.BAT, то система после загрузки ядра автома- тически выполнит запрос даты и времени и переходит в режим АДОС с ожиданием ввода команд. В этом случае необходимо отдельно ввести команды 'DISK' и 'PRN10'. Подробнее об ис- пользовании системного файла AUTOEXEC.BAT будет идти речь ниже. В процессе выполнения команд файла AUTOEXEC.BAT у пользователя запрашивается ввод даты в виде ММ-ЧЧ-ГГ (ММ/ЧЧ/ГГ) и времени в виде ЧЧ:ММ:СС. При ошибках в ответах выдается соответствующее сообщение и предлагается ответ повторить. Поэтому вместо ответа достаточно нажать клавишу 'ПУСК , сохраняющую стандартные значения времени и даты. После ввода времени на экране дисплея высвечивается версия системы: ИСКРА 1030 АДОС версия 2.00. После выполнения команд файла AUTOEXEC.BAT на экране дисплея высвечивается системная метка А>, говорящая о пе- реходе ПЭВМ в состояние АДОС, в котором пользователь имеет следующие возможности: (1) вводить и выполнять все команды системы АДОС; (2) загружать интерпретаторы с языков программирования МАСМ, БЕЙСИК и работать с программами на этих язы- ках; (3) загружать интерпретатор с языка программирования ЯМБ, заменить АДОС-дискету дискетой, подготовленной для ЯМБа, и работать с ЯМБ-программами; (4) загружать компиляторы с языков программирования (LISP, PASCAL, Turbo-BASIC, С, Fortran-77 и т. д.) и рабо- тать с программами на этих языках; (5) загружать и работать с пакетами прикладных программ и СУБД (dBase 3, SuperCalc, EUREKA, Lotus 1-2-3 и др.). Правила работы в каждом из перечисленных и в ряде других режимов подробно описаны в документации [17] и др. материа- лах. Детально рассмотрим только режимы (1) и (2) для АДОС и среды программирования БЕЙСИК. 4.2. РАБОТА С КЛАВИАТУРОЙ ПЭВМ В РЕЖИМЕ АДОС Как уже указывалось выше, клавиатура ПЭВМ состоит из трех рабочих областей: функциональные клавиши (ФК), алфа- витно-цифровые клавиши (АЦК) и цифровые клавиши (ЦК). Кла- виатура ПЭВМ ИСКРА 1030 является многофункциональным устройством в том смысле, что назначение той или иной кла- виши или группы клавиш может зависеть от того ПО, которое в данный момент функционирует на ПЭВМ. Поэтому здесь будут представлены возможности клавиатуры только в режиме Функционирования системы АДОС. С целью экономии места будет дано описание функций только тех клавиш, которые отличны от приведенного выше описания клавиатуры. В целом ряде случаев требуется нажатие двух клавиш одновременно.
Это условие будем идентифицировать как объединение клавиш знаком При этом механически это реализуется как нажатие первой клавиши, затем второй с последующим отпусканием обеих клавиш. Для наглядности действия клавиш сведем в табл. 5. Таблица 5 Комбинация клавиш Результат нажатия клавиш CTR+'ПУСК' Переход на следующую строку экрана для продол- жения ввода информации CTR + S/B Прекращение выполнения любой команды системы и переход в режим АДОС ESC Стирание введенной строки; на экране высвечива- ется символ \ и курсор сдвигается на строку вниз, ожидая продолжения ввода информации CTR + NLK Приостановка вывода на экран; для возобновления вывода нажать любую клавишу АЦК KBP + PrS Вывод копии экрана на принтер; выводится часть экрана от строки с курсором и до конца CTR + PrS Устанавливается режим вывода вводимых строк как на экран, так и на принтер; для отмены режима нажать еще раз CTR+Prs CTR,ALT+'-<-' Выполняется системный сброс, т. е. происходит пе- резагрузка системы АДОС CTR + C CTR + S Отмена вводимого текста с консоли В файл, вводимый с консоли по copy, помещаются символы 1!' CTR + N В файл, вводимый с консоли по copy, помещается символ 'музыкальный ключ' CTR + Z CTR + P Формирование символа 'конец текста' Система переходит в режим зависания', из кото- рого ее можно вывести только перезагрузкой по 'CTR.ALT+ОвГ ИЛИ 'INIT Клавиша Режим редактирования строк F1 Копирование одного символа из буфера ввода на экран дисплея F2 Копирование из буфера ввода на экран символов строки от ее начала до указанного символа F3 Копирование из буфера ввода на экран оставшихся символов строки F4 Пропуск в буфере ввода всех символов от начала строки до указанного символа F5 (Dei) Запись строки в буфер ввода, но не в файл Уничтожение символа в буфере ввода Установка и отмена режима вставки, позволяющего вводить символы внутрь строки ESC Сброс текущей строки на экране; буфер ввода не изменяется
в табл. 5 сокращением 'КВР' обозначена клавиша верхнего регистра (Т). Первые семь вариантов работы с клавиатурой ПЭВМ относятся к обычному режиму вво^а и редактирования строки до того, как нажата клавиша ПУСК и строка еще не по- мещена в буфер ввода. Для возможности редактирования строк файла, расположенного в ОП или на дискете, следует исполь- зовать строковый редактор EDLIN, который оперирует посред- ством 8 клавиш редактирования, указанных в конце таблицы. Следует отметить, что редактирование осуществляется только содержимого строки, находящейся в буфере ввода, а рассмот- ренные клавиши редактирования относятся, только к строчному редактору EDLIN. При нажатии клавиши 'ПУСК' отредактиро- ванная строка возвращается в файл на свое место, а ее копия сохраняется в буфере ввода. В других режимах редактирова- ния (например, в среде языка программирования БЕЙСИК или Редактора текстов) правила работы с функциональными кла- вишами и другими клавишами, используемыми при редакти- ровании, могут существенно отличаться. Для получения навы- ка работы с клавиатурой ПЭВМ в режиме АДОС рекомендуется отработать с командами АДОС и текстовой информацией необ- ходимое количество часов за консолью, поочередно апробируя все вышеперечисленные возможности. 4.3. ФАЙЛОВАЯ СТРУКТУРА СИСТЕМЫ АДОС Операционная система АДОС организована в виде набора взаимосвязанных системных файлов. Создаваемое в среде ОС АДОС ПО пользователя также оформляется системой в фай- ловую структуру. Файлы могут содержать исходные, объектные и загрузочные модули программ, данные, интерпретаторы и трансляторы с языков программирования, внешние команды системы и т. д. Для организации файловой структуры на дискетах необхо- димо предварительно проинициализировать дискеты систем- ной командой FORMAT. При инициализации дискеты идентифи- цируются дефектные сектора, в начале дискеты записывается программа начальной загрузки IPL, а за ней таблица распре- деления дисковой памяти (FAT) и главный каталог тома, куда будет заноситься информация о всех создаваемых на данной дискете файлах. Каждый файл в системе АДОС идентифици- руется уникальным именем, имеющим не более восьми сим- волов. В имени файла допускается использование латинских букв, ЦрФР и слеДУюЩих специальных символов: „(”, „)”, » J”, J”, „%”, „А”, м'”. Система переводит все строчные буквы в имени файла в заглавные и дополняет имя справа про- белами до восьми символов. В имени файла нельзя использо- ?ДТЬ следующие символы: (.), (”), (/), (\), ([), (]), (:), (;), (>), (<), (+), \ Л (,). Особо чревато нежелательными последствиями ис-
пользование в имени файла символов „>” и/или „<”, которое в ряде случаев может привести к непредсказуемым резуль- татам. Имя файла может уточняться его расширением длиной до трех символов. Расширение имени файла состоит из симво- лов, допустимых в самом имени, и отделяется от него точ- кой (.). Приведем несколько примеров допустимых имен файла: MPSM.SKB ISKRA#.316 (#&!%©*).{'} PTIP.TO3 AVZ.R46 GRODNO.62 ##SG.88 МТОС.100 #AGN#.ASV Расширение имени обычно используется для уточнения инфор- мации, находящейся в файле, и может быть произвольным. Однако ряд специальных расширений имен файлов использует- ся особым образом некоторыми программами и внешними ко- мандами системы АДОС. Об этом будет идти речь в следующих разделах настоящей главы. Если имя файла не содержит рас- ширения, то оно полагается системой состоящим из пробелов. Для лучшей ориентации пользователя при анализе содержи- мого дискет с программным обеспечением приведем перечень наиболее употребительных расширений имен файлов, относя- щихся к тем или иным программным компонентам (табл. 6). Главный каталог тома на дискете может хранить информа- цию о 112 файлах. Вместе с тем система АДОС позволяет ор- Таблица 6 Расширение имени файла Назначение файла с данным расширением (MS DOS или PC DOS) . ASM .ВАК . ВАТ . BAS .с .СОВ .СОМ .DAT .DOC .EXE . FMT .FOR . OBJ . PAS . MSG . HLP Программные файлы на языке assembler Исходный файл редактора edlin Командный пакетный файл (вАТСН-файл) Программные файлы на языке basic а Программные файлы на языке СИ Программные файлы на языке cobol Файлы, содержащие команды системы Файлы с различного рода данными Файлы, содержащие документацию Загрузочные модули программ Форматы представления информации Программные файлы на языке fortran-77 Объектные модули программ Программные файлы для Turbo-Rascal Файлы с различного рода сообщениями Файлы с инструкциями по применению того или иного программного средства . TBL . TMT .TXT . SYS .VC Табличные файлы Временный файл Текстовой или символьный файл Файлы операционной системы Модули прикладного пакета visICalc
ганизовать древовидные файловые структуры, что позволяет иметь на дискете любое число файлов, ограниченное только размерами дискеты и самих файлов. Древовидная файловая структура организуется следующим образом. Главный каталог тома содержит не только имена файлов, н0 и имена подкаталогов, которые, в свою очередь, являясь просто файлами, могут содержать любое число имен файлов и других подкаталогов и т. д. Имена подкаталогов имеют ту же структуру, что и имена файлов. В одном подкаталоге не может находиться двух одинаковых имен файлов, но в разных подка- талогах имена файлов могут повторяться. В каждый момент времени система АДОС работает с ак- тивным дисководом 'А, 'В' или 'С', что идентифицируется на экране дисплея системной меткой 'Х>', где 'X' принимает зна- чение 'А', 'В' или V. Для определения другого дисковода ак- тивным следует за текущей системной меткой ввести имя но- вого дисковода с двоеточием. Например, следующая последо- вательность действий определяет дисковод 'В' активным 'А>'-*'А>В:'-*'В>' Для выполнения системной команды, относящейся к неактив- ному дисководу, в ней следует указывать имя нужного диско- вода с двоеточием. Например, по команде rA>DIRB:' на экран выводится каталог дискеты на дисководе 'В' и после выполне- ния команды восстанавливается системная метка А>'. Везде в дальнейшем будет использоваться понятие 'имя дисково- да и, если не оговорено противного, под этим понятием бу- дет пониматься выражение имя дисковода с двоеточием'. Для идентификации файла следует указывать имя дисковода и само имя файла, разделенные двоеточием. При указании только имени файл ищется на активном дисководе. При поиске файлов можно применять маски '*' и ' ?Использование маски ' *' означает, что в имени файла (расширении), начиная с этой позиции и до конца имени (расширения), могут стоять любые допустимые символы. Маска ' ?' означает, что в имени (расширении) файла на данной позиции может стоять любой допустимый символ. Например, по команде 'DIRA??.V?Z' выво- дятся на экран имена файлов каталога, имеющие длину име- ни 3, начинающиеся с буквы 'А* и расширение которых первым и третьим символами имеет соответственно буквы V' и 'Z , тог- да как по команде 'DIR *.*' выводятся на экран имена всех файлов каталога на активном дисководе. Активным называется каталог, с файлами которого в дан- ный момент осуществляется работа. При загрузке системы АДОС активным устанавливается главный каталог, переназ- начить который можно специальными командами системы. Таким образом, в общем случае при обращении к файлу сле- дует указывать три параметра: имя дисковода, каталог и имя искомого файла. Для активных дисковода и каталога соответ- ствующие им параметры указывать не обязательно. Для файла
из неактивного каталога следует указать цепочку (путь - path; имен подкаталогов, по которой система отыскивает нуж< ный подкаталог с искомым файлом. Система может начинать поиск как с главного, так и с активного каталога на томе. Путь должен содержать имена подкаталогов, разделенных симво- лом 'V. Имя искомого файла указывается в самом конце пути и отделяется также символом 'V. Если путь начинается с сим- вола 'V, то поиск начинается с главного каталога тома, в про- тивном случае - с активного. Длина пути подкаталогов не долж- на превышать 63 символа. Почти все команды системы АДОС, работающие с файлами, позволяют использовать пути подка- талогов. Для иллюстрации сказанного рассмотрим следующий пример файловой структуры, дерево подкаталогов которой имеет вид AVZ ASV AGN ТОС MVL HSD HSR DDD LLL Предположим, что в данный момент активным ^является подка- талог'ТОС*. Тогда, например, к файлу HSR.046 из подкаталог^ HSR можно обращаться следующим образом: (1) \AVZ\TOC\HSR\HSR.046 (2) HSR\HSR.O46. В первом случае поиск искомого файла осуществляется по всем подкаталогам, начиная с главного каталога тома, тогда как во втором случае поиск файла осуществляется, начиная с активного подкаталога. Следует отметить, что погружение файла в древовидную структуру представляет собой своего рода индексацию файла.
Каждый подкаталог содержит два специальных элемента, которые можно вывести на экран по команде DIR. Первый из них содержит одну точку вместо имени файла и определяет этот файл в качестве подкаталога. Второй содержит две точки вместо имени файла. На основе этого элемента система стро- ит ссылку к каталогу более высокого уровня по отношению к данному. Например, подкаталог ТОС' является таким катало- гом по отношению к каталогам 'HSD' и 'HSR'. Второй элемент (..) можно использовать для организации поиска файлов. На- пример, при активном подкаталоге 'MVL' файл 'OS.41' из под- каталога 'ASV' можно найти двумя способами: (1) \AVZ\AGN\ASV\OS.41 (2) ..\ASV\OS.41 Во втором случае система начинает поиск файла с подкаталога 'AGN', являющегося старшим для подкаталога 'ASV'. В цепочке поиска можно неоднократно использовать второй элемент (..). Для указания дисковода, на котором ищется искомый файл, необходимо в начале цепочки поиска указать имя дисковода, например В: ..\ASV\SVG.64. В рамках файловой структуры имеется возможность соз- дания так называемых пакетных файлов. Такие файлы имеют расширение имени '.ВАТ', содержат необходимую последова- тельность команд системы АДОС и выполняются по специаль- ной команде BATCH. Сама система АДОС имеет свой пакетный файл AUTOEXEC.BAT, который загружается и выполняется ав- томатически после загрузки системы. Структура этого файла описывалась в разд. 4.1, более подробная информация о нем приведена ниже. 4.4. ОПИСАНИЕ КОМАНД, ОБЕСПЕЧИВАЕМЫХ СИСТЕМОЙ АДОС 4. 4. 1. Основные сведения о командах системы АДОС Команды системы АДОС представляют собой командный язык по управлению системой, УВВ, программами пользовате- ля и позволяют выполнять целый ряд сервисных функций раз- личного назначения. Каждая команда АДОС состоит из ключе- вого слова - имени команды и следующих за ним формальных параметров. Параметры в командах являются ключевыми, т. е. не зависят от своего взаимного расположения. При описании формата команд будем придерживаться следующих согла- шений: - необязательные параметры кодируются в квадратных скобках; - ключевые слова кодируются заглавными буквами и соот- ветствуют своему написанию; ключевые слова можно
вводить с клавиатуры как заглавными, так и строчными буквами; -для указания альтернатив используются фигурные скобки и символ Т. Например, выражение [{XIУ}] говорит о том, что можно использовать как X, так и У, или не использо- вать ни одно из них; -многоточие используется для отражения возможности пов- торения предшествующей ему конструкции; -русские слова в угловых скобках <>' определяют кон- струкции, которые будут описаны ниже; -все остальные символы являются элементами формата команд и должны вводиться согласно их кодированию. Основными русскими словами при описании форматов команд системы АДОС являются: < ИУ:> -имя устройства с двоеточием; по умолчанию вы- бирается активное или системное устройство; < путь> -цепочка подкаталогов, разделенных символом <ИФ> - имя файла, удовлетворяющее соглашениям АДОС; если в имени используется недопустимый сим- вол, то он воспринимается как ограничитель, и имя файла урезается до этого символа; < .РФ> - расширение имени файла, удовлетворяющее сог- лашениям системы АДОС; < СФ> - спецификатор файла, представляющий собой кон- струкцию вида [<ИУ:>] [<путь>]<ИФ>[<.РФ>]. По умолчанию для <ИУ:>, <путь> и <.РФ> полагаются соответ- ственно активный дисковод, текущий каталог и три пробела. В форматах всех внешних команд системы перед именем команды кодируются параметры [ИУ:][путь], определяющие путь поиска файлов с расширением .СОМ , содержащих прог- раммы обработки этих команд. Форматы внутренних команд системы не содержат указанных параметров, так как соот- ветствующие им программы находятся в ядре АДОС, т. е. яв- ляются резидентными. Почти каждая команда системы допуска- ет использование необязательного параметра «^коммента- рий^ который не должен содержать символов Если при представлении формата команды в нем не указан этот па- раметр, то соответствующая команда не допускает его ис- пользование. Ряд имен в системе АДОС имеет специальный смысл, т. е. обрабатывается системой особым образом. Например, логи- ческие УВВ имеют следующие имена: {LPT1 :| PRN:} CON: - принтер; при наличии более одного прин- тера они нумеруются LPTk: (k=1,2, 3); - консоль; при использовании в качестве
{COM1:|AUX:} COM2: NUL: устройства ввода нажатие клавиш Тб' + ПУСК' отменяет CON в качестве вводного устройства; - первый адаптер асинхронной связи; - второй адаптер асинхронной связи; - псевдоустройство, используемое при от- ладке программ; при выводе на такое ус- тройство данные не передаются, но опера- ция успешно завершается; при вЪоде с та- кого устройства вырабатывается признак 'конец файла'. Перечисленные выше имена логических устройств можно ис- пользовать в командах АДОС вместо имен файлов при условии наличия в системе указанных УВВ, в противном случае реак- ция АДОС на них непредсказуема. Двоеточие за указанными логическими именами необязательно и любые символы за ло- гическим именем УВВ игнорируются. Все имена внутренних команд системы АДОС также являются зарезервированными. Широкая трактовка понятия файловой системы АДОС поз- воляет в целом ряде случаев логически отождествлять УВВ и собственно дисковые файлы. В первую очередь это сущест- венно для организации обмена информацией. Например, по команде COPY CON В:А информация, вводимая с консоли, помещается в файл 'А' на УВВ 'В'. Как уже отмечалось выше, все команды системы АДОС делятся на внутренние и внешние. Внутренние команды встроены в интерпретатор команд COMMAND.COM и для их вы- полнения присутствие АДОС-дискеты не обязательно. Внешние же команды представляют собой файлы с расширениями имени .COM', '.EXE' или '.ВАТ'. Первые два расширения имени иден- тифицируют файл как загрузочный модуль, который выполня- ется после его загрузки в ОП, тогда как файлы с расширением имени '.ВАТ' содержат наборы команд системы в том же фор- мате, что и при вводе их с консоли. Такие файлы на выпол- нение вызываются специальной командой BATCH и содержа- щиеся в них команды выполняются в пакетном режиме. Оди- ночная команда вводится в систему АДОС с консоли после нажатия клавиши 'ПУСК'. Следует отметить, что вызов команд АДОС ничем не отли- чается от вызова программы пользователя или другого прог- раммного средства. Поэтому,, создавая программные файлы с расширениями имен '.СОМ' и .EXE', пользователь может расширять набор команд системы. Примеры такого рода будут рассмотрены ниже. Следует отметить, что различный набор внешних команд в значительной мере определяет различия версий операционной системы MS/PC DOS. Следующие положения имеют место для всех команд си- стемы АДОС:
(1) выполнение команды заканчивается успешно, если до появления системной метки 'А>' или 'В>' на экране дис- плея не появилось диагностических сообщений об ошиб- ках; (2) система ищет внешние команды в текущем каталоге на заданном дисководе (или по умолчанию), а затем в ка- талогах, определенных последней командой PATH; можно указывать путь поиска командой PATH; (3) за именем команды могут следовать формальные пара- метры, отделяемые друг от друга ’пробелом', символа- ми „ , ”, „ ; ” и „=” или знаком табуляции; в пределах ко- манды разделители параметров можно чередовать, ок- ружая их любым числом пробелов и знаков табуляции; нельзя использовать разделители в параметре 'СФ спецификатор файла; в ряде команд, например, FORMAT в качестве разделителей параметров нельзя использо- вать символы „ , ”, „ ; ” и „=”; (4) после появления на экране сообщения '... нажмите лю- бую клавишу * следует нажать любую клавишу АЦК; обыч- но нажимается клавиша 'ПУСК'; (5) выполнение любой команды можно прекратить клави- шами 'CTR' + 'S/В'; при этом ситуация BREAK (прерыва- ние) распознается системой только при обращениях к системным логическим УВВ, перечисленным выше; (6) клавишами 'CTR' + 'NLK' можно приостановить выпол- нение любой команды и продолжить ее выполнение на- жатием любой клавиши АЦК; (7) для корректировки вводимой команды используются клавиши редактирования; команда вводится в систему только после нажатия клавиши ПУСК*; (8) использование масок (обобщающих символов) допустимо только в параметре <СФ>, но не в имени команды; (9) система распознает символы '<', '>' и *’/ в командах, как знаки перенаправления и прямой связи, поэтому использовать их следует очень внимательно. В заключение приведем (табл. 7) сводку всех команд системы АДОС, сгруппированных по их основному функциональному назначению. Таблица 7 № п/п Группа команд Имя команды Тип команды 1 1. Сервисные FORMAT Внешняя 2 DISKCOPY 3 DISKCOMP 4 COMP 5 DEL Внутренняя 6 ERASE
Продолжение табл, 7 № п/п Группа команд Имя команды Тип команды 7 RECOVER Внешняя 8 DISK » 9 FDISK 10 BACKUP 11 RESTORE > 12 DEBUG 13 EDLIN 14 2. Информационные DIR Внутренняя 15 VER 16 VOL 17 REM > 18 PAUSE 19 TREE Внешняя 20 3. Управления ASSIGN 21 системой BREAK Внутренняя 22 BUFFERS 23 COMMAND 24 CHDIR 25 PROMPT 26 CLS > 27 SET > 28 DATE > 29 SHELL 30 DEVICE 31 TIME 32 EXIT 33 FILES 34 PATH 35 4. Управления VERIFY Внутренняя 36 вводом-выводом CTTY Внешняя 37 GRAFTABL 38 GRAPHICS 39 MODE » 40 PRINT > 41 SORT 42 FIND 43 MORE 44 5. Пакетные ECHO Внутренняя 45 FOR 46 GOTO 47 IF 48 SHIFT » 49 BATCH 50 6. Работы с файлами CHKDSK Внешняя 51 EXE2BIN 52 MKDIR Внутренняя 53 RENAME(REN) 54 RMDIR (RD) 55 COPY 56 TYPE
Из табл. 7 следует, что все 56 команд системы АДОС услов- но разбиваются на 6 групп. Данная систематизация команд системы до некоторой степени условна. Однако опыт работы с системами MS DOS, PC DOS и АДОС показывает, что она в зна- чительной мере отражает использование той или иной команды при работе с системой и прикладным ПО. 4. 4.2. Сервисные команды системы АДОС Команды данной группы наряду с целым рядом других при- менений предназначены, в основном, для обеспечения пользо- вателя основными сервисными средствами: подготовка внеш- них носителей информации на дисках, копирование дискет и отдельных файлов, удаление файлов, редактирование простых текстов и так далее. Команда FORMAT имеет формат [ИУ:] [путь] FORMAT [D:] [/S] [/1] [/8] [/V] [/В] [комментарий] и служит для инициализации дискет, выполняя следующие ос- новные функции: - размечает дискету на заданном УВВ в указанном пользо- вателем формате; - проверяет качество поверхности дискеты и отмечает де- фектные сектора; - заносит на дискету таблицу FAT (File Allocation Table), главный каталог тома и программу начальной загрузки IPL. Параметры [ИУ:] [путь] указывают путь к файлу с именем FORMAT.COM с программой инициализации дискеты. По умол- чанию предполагается, что данный файл находится на диско- воде 'а' в главном каталоге тома. Данная оговорка справед- лива для описания всех последующих внешних команд систе- мы АДОС; ее всегда будем иметь в виду, каждый раз не ак- центируя на этом внимания. Параметр 'D:' указывает имя дисковода, на котором будет производиться инициализация дискеты: по умолчанию полага- ется активный дисковод. Параметр 7S' указывает на не- обходимость копирования системных файлов IBMBIO.COM, IBMDOS.COM и COMMAND.COM на новый диск в указанном порядке. Параметр 7Г определяет режим разметки 40-треко- вой односторонней дискеты независимо от типа УВВ; в против- ном случае дискета размечается в формате 80 треков. Параметр 7v' позволяет создать метку тома размером в 11 символов, которая заносится в главный каталог тома. В метке тома нельзя использовать специальные знаки: <', '. , ',I \ V, V, ]*, V. Совместное использование парамет-
ров '/S/V' позволяет скопировать на дисковый том системы и создать метку тома. Параметр 78' определяет разметку ди- скеты по 8 секторов на треке, в противном случае на треке размечается по, 9 секторов. Параметр /В* служит для разметки дискеты, предназначае- мой для размещения на ней версии ОС, отличной от системы АДОС 2.0. Система при этом не копируется, но место для нее отводится. Параметр 7в' употребляется совместно с парамет- ром /8'. Следует отметить, что параметры ,7В' и 7V' несовме- стимы, а совокупности параметров 78/S/B' или 7S/B' эквива- лентны их отсутствию. При инициализации дискет вся находящаяся на них инфор- мация уничтожается, и дефектные сектора специальным обра- зом маркируются. Команда FORMAT распознает тип УВВ и раз- мечает дискету следующим образом: на одностороннем УВВ по 8 секторов на треке (эти дискеты можно читать на любом УВВ), на двусторонних УВВ, если не указан параметр 7Г, по 9 секторов на треке (такие дискеты обычным способом нельзя использовать на односторонних УВВ). Команда FORMAT иг- норирует все переназначения УВВ, сделанные по команде ASSIGN, и использует соглашения о совместимости дискет и УВВ, приведенные ниже в описании команды DISKCOMP. В конце инициализации на экран выводится информация об объемах в байтах дискеты в целом, дефектных секторов, обла- сти с системными файлами и свободной области. В процессе выполнения команды FORMAT выводятся сообщения, требую- щие от пользователя определенных действий, смысл которых ясен из самих сообщений. Для инициализации дискеты на одностороннем УВВ в формате 80 треков требуется в среднем 45 с, а в формате 40 треков - 25 с. Приведем несколько при- меров использования команды FORMAT для инициализации диска: 1. А> FORMAT В: /S /В [разметка] Вставьте новую дискету в устройство В: — и нажмите яюбую клавишу Разметка ... Разметка закончена — Система скопирована Метка тома (11 знаков или ВВОД) ? MINIDOS AVZ 362496 байтов - объем диска 40960 байтов используется системой 5120 байтов в дефектных секторах 316416 байтов свободно Еще размечать (Y/N)?N 2. А> FORMAT В:/8/В Текст (А) из примера 1 322560 байтов - объем диска 322560 байтов - свободно (А)
3. A> FORMAT В:/8/В/V Параметры несовместимы Ошибка разметки 4. А> FORMAT В:/В/V Параметры несовместимы Ошибка разметки 5. А> FORMAT В: /V Текст (А) из примера 1, далее аналогично 6. А> FORMAT В:/S/В Текст (А) из примера 1, далее аналогично 7. А> FORMAT В:/S/B/8 Текст (А) из примера 1, далее аналогично Команда FORMAT вырабатывает коды завершения: О - успешное выполнение команды; 3 - команда прекращена по клавишам 'CTR' + 'S/B'; 4 - команда прекращена системой из-за ошибок; 5 - команда прекращена из-за ответа 'N' при подготовке винчестерского диска. Данные коды завершения можно обрабатывать командой ус- ловного перехода IF ERRORLEVEL пакетного командного файла. Команда FORMAT является одной из наиболее часто исполь- зуемых команд системы. Она необходима при подготовке но- вых дискет к работе и ее также рекомендуется периодически применять к длительно эксплуатирующимся дискетам, пред- варительно скопировав с них нужную информацию. Команда DISK имеет формат [ИУ:] [путь] DISK [/В] [/1] [/Е] [комментарий] и служит для обеспечения возможности работы с 40-трековыми дискетами. Параметры [ИУ:] [путь] указывают путь к файлу DISK.COM, содержащему программу. Параметр 7в' позволяет использовать 40-трековые дискеты для перезагрузки ядра системы и/или процессора команд. После такой перезагрузки оба устройства 'А и 'В' будут ра- ботать только с 40-трековыми дискетами. Параметр /Е дает возможность работать с оригинальными версиями MS DOS. После выполнения команды DISK с этим параметром пользо- ватель может работать как с 40-, так и 80-трековыми диске- тами. Одновременное использование параметров 71/Е* в команде DISK дает возможность работать с ПЭВМ при нали- чии только одного дисковода А*. После выполнения команды DISK /1/Е с устройства 'А следует перезагрузить систему, и ПЭВМ будет работать с 40- и 80-трековыми дискетами, отож- дествляя оба устройства 'А' и 'В'. Например, по команде DIR В: на экран будет выводиться каталог тома, находящегося на устройстве А. Этот прием бывает полезным при выходе из строя правого дисковода. Если же из строя вышел левый
дисковод ГА\ то следует попытаться поменять местами оба дисковода. Операция эта простая и особой подготовки не тре- бует. Команда FDISK имеет формат [ИУ:] [путь] FDISK [комментарий] и служит для подготовки жесткого диска типа Винчестер' к ра- боте в системе АДОС. Параметры [ИУ:] [путь] указывают путь к файлу FDISK.COM, содержащему утилиту подготовки жестко- го диска. Утилита работает в режиме меню, содержащему перечень выполняемых ею функций. После запуска команды FDISK на экран дисплея выводится следующая информация: РЕЖИМЫ FDISK Текущий номер диска: 1 Выберите один из режимов: 1. Создание раздела АДОС 2. Замена активного раздела 3. Удаление раздела АДОС 4. Отображение информации о диске 5. Выбор следующего диска Укажите режим: [1] ESC - для выхода в АДОС. Если ПЭВМ имеет только один НМД, то сообщения о текущем номере диска и режима 5 не выводятся. Заданием номера поль- зователь выбирает функцию обслуживания утилитой FDISK, выполнение которой также осуществляется в диалоговом ре- жиме. По 'ESC' осуществляется завершение выполнения ути- литы и выход в состояние системы. При отсутствии на ПЭВМ НМД запуск команды FDISK инициирует сообщение 'Нет жест- ких дисков'. В режиме 1 создается раздел системы АДОС согласно ука- занию пользователя о его местоположении и размере. Создан- ный раздел фиксируется в таблице разделов тома (ТРТ-сектор О цилиндра 0 на стороне 0). Под раздел АДОС можно отвести весь жесткий диск. При запросе утилиты выдаются значения по умолчанию всех параметров создаваемого раздела. Поль- зователю сообщается также общий объем жесткого диска и положение наибольшего свободного его участка. В режиме 2 созданный раздел АДОС делается активным. Только один из разделов жесткого диска может быть актив- ным, т. е. использоваться системой АДОС. Если в разделе АДОС находятся файлы системы, то сделав его активным, из него можно загружать систему. При выполнении режима 2 на экран дисплея выводится ТРТ и запрос на ввод номера разде- ла, который должен быть сделан активным. После подготовки раздела его следует проинициализировать командой FORMAT.
По режиму 3 происходит удаление указанного в ответ на за- прос утилиты FDISK раздела. Для этого утилита выводит на эк- ран дисплея ТРТ и запрашивает номер удаляемого раздела, а затем просит подтвердить его удаление. Удаление раздела разрушает и всю находящуюся в нем информацию. В режиме 4 на экран дисплея выводится ТРТ, описание раз- делов которой содержит следующую информацию: - номер раздела (1 * 4); - состояние раздела (А - активный; N - неактивный); - тип раздела (АДОС, не АДОС); - начальный и конечный номер цилиндра диска; - размер раздела в цилиндрах; - общий объем жесткого диска. Режим 5 служит для организации последовательной работы с несколькими НМД типа 'Винчестер'. Команда BACKUP имеет формат [ИУ:] [путь] BACKUP D1: [СФ] D2: [/S] [/М] [/D: <дата>] и служит для перезаписи файлов с жесткого диска типа 'Вин- честер' на дискеты. Следует отметить, что такое 'копирование' файлов понимается больше в смысле сохранения файлов жесткого диска, вызванного стационарной его природой, и от- лично от обычного копирования файлов, скажем по команде СОРУ. Параметры [ИУ:] [путь] указывают путь к файлу ВА- CKUP.COM, содержащему программу перезаписи. Параметры D1’.' и 'D2:' определяют соответственно имена НМД (откуда перезаписываются файлы) и НГМД (куда переза- писываются файлы). Параметр 'СФ' определяет спецификатор перезаписываемого файла; в параметре допускается исполь- зование обобщающих символов. При отсутствии данного па- раметра происходит перезапись всех файлов жесткого диска. Параметр '/S' задает режим сохранения как файлов жестко- го диска, так и подкаталогов указанного (или текущего) каталога тома. Параметр 7м' определяет, что перезаписыва- ются только файлы, созданные или измененные после послед- ней их перезаписи. Параметр же '/А' вызывает добавление перезаписываемых файлов к файлам, ранее перезаписанным на том же устройстве. Параметр '/0:<дата>' задает режим перезаписи только тех файлов, которые были изменены после указанной в подпараметре 'дата' даты, задаваемой в виде ММ - ДД - ГГ (ММ - месяц, ДД - день, ГГ - год). Дискеты для перезаписи файлов жесткого диска должны быть предварительно проинициализированы командой FOR- MAT. Если в команде BACKUP отсутствует параметр '/А', то на- ходящиеся на дискете файлы уничтожаются при перезаписи. При перезаписи жесткого диска команда BACKUP выводит со- общения о смене дискет для перезаписываемых файлов по мере их заполнения. При перезаписи файлов жесткого диска имена их помещаются в главный каталог дискеты, на которую
помещается метка, содержащая дату и номер самой дискеты. Последовательная нумерация дискет позволяет использовать команду RESTORE для обратного восстановления файлов с дискет на жесткий диск. При выполнении команды BACKUP на экран дисплея выво- дятся имена всех перезаписываемых файлов и генерируются следующие коды возврата: О - нормальное завершение команды BACKUP; 1 - не найдено файлов для перезаписи; 3 - команда прекращена пользователем (по 'CTR' + 'S/B'); 4 - команда BACKUP прекращена из-за ошибок. Коды возврата команды BACKUP могут быть обработаны в па- кетном файле с помощью команды IF ERRORLEVEL. Команду BACKUP нельзя использовать совместно с командой ASSIGN из-за возможности неправильной структуры каталогов при восстановлении файлов жесткого диска. Следует отметить, что команда BACKUP не производит пе- резаписи (копирования) в общепринятом смысле, а служит для сохранения файлов жесткого диска на промежуточном носи- теле - дискете с целью освобождения на нем места под другие файлы. Поэтому файлы, перезаписанные с жесткого диска на дискеты, содержат дополнительную служебную информацию (для команды RESTORE) и их нельзя прямо использовать. Пе- ред использованием эти файлы необходимо снова восстано- вить на жестком диске с помощью команды RESTORE Команда RESTORE имеет формат [ИУ:] [путь] RESTORE D1: [D2:] [<СФ>] [/S] [/Р] [комментарий] и служит для обратного восстановления с дискет на жесткий диск файлов, ранее на них перезаписанных командой BACKUP. Параметры [ИУ:] [путь] указывают путь к файлу RESTORE.COM, содержащему программу восстановления файлов. Параметры 'D1:' и D2:' определяют соответственно имена НГМД (с которого восстанавливаются файлы) и НМД (куда восстанавливаются файлы). Параметр СФ’ определяет спе- цификатор восстанавливаемого файла, при его отсутствии восстанавливаются все файлы с дискеты на жесткий диск. Параметр /S* определяет режим восстановления файлов как указанного (или активного) каталога, так и всех его под- каталогов. При этом просматриваются каталоги всех уровней ниже указанного. Параметр /р' инициирует режим запросов для файлов, измененных с момента последней перезаписи их командой BACKUP, и для файлов, помеченных как "только для чтения . В ответ на запрос команды можно либо разрешить восстановление файла, либо запретить его восстановление. При выдаче командой RESTORE запроса на установку или замену дискеты следует проверить правильность ее установ- ки в НГМД и при отсутствии уверенности рекомендуется на-
чать с дискеты с номером 1. Команда RESTORE генерирует сле- дующие коды возврата: О - нормальное завершение команды RESTORE; 1 - отсутствуют файлы для восстановления; 3 - команда прекращена пользователем (по 'CTR' + 'S/В ); 4-команда RESTORE прекращена из-за ошибок. Данные коды возврата можно обрабатывать в пакетных файлах посредством команды IF ERRORLEVEL. Перед выполнением RESTORE не рекомендуется использовать команду ASSIGN Команда DISKCOPY имеет формат [ИУ:] [путь] DISKCOPY [D1:[D2:]] [/1] [комментарий] и используется для полного копирования дискет с предвари- тельной инициализацией, если это необходимо. Параметры [ИУ:] [путь] определяют путь к файлу с именем DISKCOPY.COM, содержащему программу копирования. При их отсутствии поиск файла ведется в главном каталоге активного дисковода. Па- раметр /Г определяет копирование только первой стороны дискеты независимо от типов дискет и УВВ. В зависимости от наличия параметров 'D1:' и 'D2:' - имен дисководов команда DISKCOPY производит такие действия: Параметр Действия команды DISKCOPY А В Производит копирование'А'-*'В' -В > 'В'-*'А' А - Копирование на 'а' с поочередной заменой исходной и выходной дискет - - > > > Если дискета для копии не проинициализирована, то команда DISKCOPY размечает ее в формате исходной дискеты. Команда DISKCOPY не принимает во внимание переназначений, сделан- ных по команде ASSIGN, не уменьшает число экстентов и ис- пользует те же соглашения о совместимости дискет и УВВ, что и команда DISKCOMP. В процессе выполнения команды выдаются сообщения, которые весьма прозрачны и особых пояснений не требуют. Приведем несколько примеров исполь- зования команды DISKCOPY для копирования дискет: 1 DISKCOPY А: В: — Вставьте исходную дискету в устройство А: Вставьте дискету для копии в устройство В: (А) и нажмите любую клавишу Копируется 9 секторов на дорожке на 2 стороны Копирование закончено — Копировать еще (Y/N)?t
2. DISKCOPY В: Текст аналогичен (А) примера 1 3. DISKCOPY А: В: /1 Текст аналогичен (А) примера 1 Команда DISKCOPY выдает сообщения о всех возникающих аварийных ситуациях, однако при ее использовании следует помнить, что по DISKCOPY стирается вся информация на прини- мающем томе и на него записывается новая информация. Команда DISKCOMP имеет формат [ИУ:] [путь] DISKCOMP [D1 :[D2]] [/1] [/8] [комментарий] и служит для по^екторного сравнения дискет на указанных па- раметрами D1: и D2: дисководах. Параметры [ИУ:] [путь] указывают путь к файлу DISKCOMP.COM, содержащему прог- рамму сравнения. Отсутствие этих параметров вызывает те же действия, что и для вышерассмотренных команд. Параметр /1 задает сравнение только первых сторон дискет независимо от типов УВВ. Параметр /8* задает режим сравне- ния только первых 8 секторов на каждом треке дискет. Если какой-либо из этих параметров опущен, то используется со- ответствующая характеристика дискеты на первом, дисководе (D1:). В зависимости от наличия параметров 'D1:' и D2:* коман- да DISKCOMP производит следующие действия: Параметр | Действия команды DISKCOMP А В УВВ Д сравнивается с В УВВ В сравнивается с 'а' А - поэтапное сравнение в А - » » » Команда DISKCOMP попарно сравнивает треки дискет и при несовпадении выдает сообщение о номерах сторон и треков на них. Не рекомендуется сравнивать дискеты, полученные од- на из другой посредством команды COPY *.*, так как данная команда в общем случае осуществляет неоднозначное по секторам копирование файлов дискет. Команда DISKCOMP использует следующие соглашения о совместимости дискет и УВВ: (1) на УВВ с двумя сканирующими головками можно срав- нивать односторонние и двухсторонние дискеты; (2) на УВВ с одной сканирующей головкой можно сравни- вать только односторонние дискеты. При нарушении этих соглашений выдается сообщение об ошиб- ке. Выдаваемые в процессе выполнения команды сообщения особых пояснений не требуют. Команда DISKCOMP игнорирует
все переназначения УВВ, сделанные по команде ASSIGN. При- ведем несколько примеров на использование команды: 1. А> DISKCOMP [сравнение дискет] Сравниваются по 9 секторов две стороны дискет в диско- водах 'А* и 'В'; выводимые сообщения пояснений не тре- буют. 2. А> DISKCOMP А: В: /8/1 Сравниваются по 8 секторов первые стороны дискет в дисководах 'а' и 'В'; выводимые сообщения пояснений не требуют. Команда СОМР имеет формат [ИУ:] [путь] СОМР [СФ1] [СФ2] [комментарий] и служит для сравнения содержимого двух файлов или двух наборов файлов. Параметры [ИУ:] [путь] указывают путь к фай- лу COMP.COM, содержащему программу сравнения. При от- сутствии этих параметров поиск файла осуществляется подоб- но вышеописанному для других команд и данной оговорки в последующем больше делать не будем. При отсутствии одного из параметров 'СФ1' или 'СФ2' систе- ма потребует определить недостающие файлы. В противном случае происходит побайтное сравнение всех файлов. Если вместо параметров 'СФ' указываются только имена дисково- дов, то происходит сравнение всех файлов каталогов обоих дискет, находящихся на них. При сравнении выдаются сообще- ния о несовпадающих байтах в файлах с указанием смещения байта от начала файла и содержимое этих байтов. После 10 не- совпадений сравнение прекращается. В спецификаторах фай- лов допускаются обобщающие символы, причем в обоих срав- ниваемых файлах они согласовываются путем подстановки одинаковых наборов символов. Следует иметь в виду, что команда СОМР всегда сравнивает число байтов файлов, ука- занное в каталоге, игнорируя маркеры конца файла „1А” При несовпадении длин файлов сравнение прекращается с выдачей на экран соответствующего сообщения. Все сооб- щения, выдаваемые командой СОМР, достаточно прозрачны и особых пояснений не требуют. Приведем примеры исполь- зования команды СОМР для сравнения двух системных файлов с именем AUTOEXEC.BAT соответственно систем АДОС 2.0 и MINIDOS 1.0, а также данного файла с файлом COMP.COM: 1. а>сомр Autoexec.bat b:\autoexec.bat Файлы разной длины Сравнивать еще (Y/N)?N 2. А> СОМР A:\AUTOEXEC.* Введите имя второго файла (устройства) B:\AUTOEXEC.BAT Сообщения, аналогичные примеру 1
з А> СОМР \AUTOEXEC. ВАТ B:\COMP.COM Сообщения, аналогичные примеру 1 Команда СОМР оказывается весьма полезной, в частности, при сравнении двух версий операционной системы ПЭВМ. Наряду с этим, команда СОМР может с успехом использоваться для сравнения программных файлов или файлов данных, имеющих небольшое число различий. Команды DEL и ERASE имеют формат {DEL I ERASE} [ИУ:] [путь] [ИФ[.РФ]] [комментарий] и служат для физического удаления указанных файлов. При фи- зическом удалении файлов происходит удаление их из катало- га тома, а занимаемое ими место присоединяется к свободной области диска. Параметры [ИУ:] [путь] определяют путь поиска удаляемого файла, а параметры ИФ* и '.РФ' - его имя и расши- рение имени. В этих параметрах допускается использовать обобщающие символы; в случае отсутствия этих параметров подразумевается случай '*.**, т. е. удаление всех файлов каталога. Однако при использовании обобщающего знака (*) следует проявлять особую внимательность, так как, например, по команде DEL *42.BAS будут удалены с диска все файлы, имеющие расширение имени .BAS , а не только файлы с име- нами, оканчивающимися на „42”. При указании удаления всех файлов каталога система требует подтверждения пользователя. По командам DEL и ERASE нельзя удалять файлы, отмечен- ные только для чтения' и каталоги томов, а также файлы, от- меченные как системные'. Для удаления с дисков каталогов служит специальная команда RMDIR. Особой внимательности требует использование команд DEL и ERASE после выполнения команды ASSIGN, производящей переназначение УВВ. Примеры использования обеих команд: А > DEL B:\TAB.bs А > ERASE B:\keybd.* А> DEL B:PRINT*.* А > ERASE B:\RES*.*:гес*.* СОМ*.* Команда RECOVER имеет формат [ИУ:] [путь] RECOVER {СФ I D:} [комментарий] и служит для восстановления данных на дискете с дефектными секторами. Параметры [ИУ:] [путь] указывают путь к файлу ECOVER.COM, содержащему программу восстановления. помощью данной команды можно восстанавливать все фай- ы дискеты с дефектным каталогом или файлы, расположен- ие на дефектных секторах, исключая данные самих дефект-
них секторов. Обязательный параметр 'СФ* или *0:* определяем файл или дискету, подлежащие восстановлению. При восстановлении файла из него исключается информ^, ция дефектных секторов. При восстановлении дискеты команда RECOVER полагает ее каталоги полностью разрушенными и ана, лизирует цепочки кластеров в таблице FAT, создавая из них новые файлы. Этим файлам присваиваются последовательные системные имена вида FILExxxx.REC, и они включаются в глав- ный каталог тома. При нехватке места в главном каталоге команда RECOVER выдает об этом сообщение и прекращает процесс восстановления дискеты. В этом случае рекомендует- ся скопировать восстановленные файлы в каталог другой дискеты и снова применить команду RECOVER к дефектному тому. При восстановлении текстовых файлов, как правило, требуется повторное их редактирование. Наиболее актуаль- ным является восстановление последовательных файлов, так как в случае наличия дефектных секторов невозможно обра- титься к остальной части файла. Приведем несколько приме- ров использования команды RECOVER по восстановлению дефектного тома и файлов каталога' 1. А > RECOVER В: Для восстановления файлов на диске В: нажмите любую клавишу 60 файлов восстановлено 2. А > RECOVER В:\*.* [восстановление] Для восстановления файлов на диске В: нажмите любую клавишу 5120 из 5188 байтов восстановлено Таким образом, при использовании параметра СФ* восстанав- ливается только указанный файл, а при использовании пара* метра D:' восстанавливаются все каталоги заданного тома. Например, при восстановлении системной АДОС-дискеты вос- станавливается главный каталог тома, а все системные фай- лы, включая скрытые, получают в каталоге дополнительно имена вида FILE0001.REC-j-FILE0061.REC. Команда SYS имеет формат [ИУ:] [путь] SYS D: [комментарий] и служит для копирования двух системных файлов IBMBIO СОМ и IBMDOS.COM с дискеты, содержащей файл SYS.COM, на диске- ту, заданную параметром D:*. Параметры [ИУ:] [путь] опреде- ляют путь к файлу SYS.COM, содержащему программу копи- рования. Дискету для указанных системных файлов следует предварительно проинициализировать командой FORMAT •'$ или FORMAT /В. При выборе дискеты для копии следует руко- водствоваться правилом: имеющаяся файловая организация
дискете должна позволить записать копируемые командой J!yg системные файлы первыми на дискете и занимаемое Лайлом IBMBIO.COM место должно быть непрерывным. Команда SYS используется, как правило, для реорганизации на диске- тах версии операционной системы. Пример использования команды SYS: А > SYS В: Система скопирована. Команда DEBUG имеет формат [ИУ:] [путь] DEBUG [СФ] [П1] [П2] [комментарий] и служит для загрузки и запуска на выполнение монитора, обес- печивающего функциональную среду, удобную для отладки МАСМ-программ и проверки оборудования. Монитор позволяет управлять выполнением отлаживаемой МАСМ-программы, а также загружать, изменять и выводить на экран дисплея файлы и содержимое заданных секторов дискет. Параметры [ИУ:] [путь] указывают путь к файлу с именем DEBUG.COM, содержащему программу-монитор. Параметр 'СФ' определяет спецификатор файла, загружаемого в ОП, который можно просматривать, модифицировать или выполнять. При отсут- ствии параметра СФ* пользователь имеет возможность рабо- yaTjD с текущим содержимым ОП. Дополнительные параметры П1 и П2* представляют собой параметры программы, задан- ной параметром СФ*, и загружаются в ее область параметров. Подробное описание работы с монитором DEBUG можно найти в документации [17]. Здесь же будут кратко рассмотрены команды монитора, представляющие интерес для достаточно широкого круга пользователей. Команды монитора DEBUG задаются латинской буквой, за которой следует набор параметров. В качестве разделителей между параметрами служат символы 'пробела* и 'запятой* (,). Числовые значения параметров должны быть 16-ричными. Выполнение команды можно прекратить по клавишам 'CTR' + + S/В или приостановить клавишами *CTRr + 'NLK'. Возобновить затем выполнение команды монитора можно нажатием любой клавиши. Меткой монитора DEBUG является символ дефиса (-). Все команды монитора представлены табл. 8. Из перечисленных в табл. 8 команд монитора DEBUG особый интерес представляют команды D, Е, F, Н, L, S и W, которые позволяют пользователю достаточно просто читать и моди- фицировать содержимое любых секторов заданного диска. Принцип проведения таких операций весьма прост: по команде монитора V в ОП с дискеты загружаются нужные сектора и по команде 'D* на экран дисплея выводится их содержимое. По команде *Е* корректируются области памя- и, содержащие эти сектора, затем командой *W' скорректи-
Таблица q Команда Назначение команды А с D Трансляция в ОП инструкций Ассемблера Сравнение содержимого двух областей ОП Вывод на экран содержимого заданной области оператив- ной памяти Е Замена содержимого областей ОП новыми значениями- побайтный вывод на экран содержимого ОП с возмож- ностью изменения любого байта Г В Заполнение указанной области ОП данными из команды Запуск программы на отладку с указанного адреса оста- нов по достижении заданной точки н 1 Вывод на экран суммы и разности двух заданных 16-рич- ных чисел Чтение содержимого указанного порта ввода и вывод его на экран дисплея L М Загрузка в ОП файла или заданных секторов с диска Перемещение содержимого указанной области ОП по за- данному адресу О R Запись байта данных в указанный порт вывода Вывод на экран и изменение содержимого регистров и флажков ЦП S Поиск вхождения заданной цепочки символов в указанной области ОП т Выполнение указанного числа инструкций отлаживаемой МАСМ-программы, начиная с заданного адреса V Трансляция содержимого ОП в код, подобный языку Ас- семблера, и вывод его на экран совместно с адресами ОП и 16-ричными значениями байтов W Запись на заданный диск файла или указанных секторов (обратная команде L) 0 Завершение работы монитора и возврат в состояние систе- мы АДОС рованная информация записывается на заданные сектора дискеты. Возможны и другие варианты подобных операций позволяющие достаточно просто модифицировать как систем- ное, так и проблемное ПО ПЭВМ ИСКРА 1030. Наряду с этим подобные подходы позволяют с меньшими затратами разо- браться в программных средствах, не обеспеченных докумен- тацией или имеющих не совсем качественную документацию. Рассмотрим простой пример применения ряда команд монитора DEBUG для чтения секторов с дискеты, вывода их содержимого на экран и корректировки, а затем запись измененного содер- жимого секторов обратно на дискету с последующей контроль- ной распечаткой: А > DEBUG -LCS: 100 1 35 -RCS
CS 1C50 Id 1C50 1C51 1C50: 1C50 00 00 - F 1C50 1C51 AB 46 - W CS: 100 1 3 5 - F 1C50 1C51 00 00 - D 1C50 1C51 1C50: 1C50 AB 46 -L CS: 100 1 3 5 -D 1C50 1C51 1C50: 1C50 AB 46 -Q A> В приведенном примере запускается команда DEBUG, и пользо- ватель получает возможность работать с монитором. Команда V монитора загружает с дискеты, находящейся на УВВ 'В', 3 сектора по адресу в ОП <CS>+100, где <CS> - содержимое регистра CS, о котором речь шла в главе 2. Команда 'R' выво- дит содержимое-адрес регистра CS и по команде D' на экран дисплея выводится содержимое заданной области (2 байта) памяти. Затем посредством команды, 'F' содержимое этих двух байтов изменяется и командой VJ' модифицированное содержимое секторов 3-5 записывается обратно на дискету. После этого команда 'F* обнуляет содержимое прежней области памяти, команда L' вновь считывает сектора 3-5 в память, и команда D' осуществляет контрольный вывод на экран со- держимого скорректированных байтов. Наконец, команда 'Q' завершает работу монитора и осуществляется переход в со- стояние системы (устанавливается системная метка А>'). Монитор DEBUG можно использовать, в частности, для вывода версии файла IBMBIO.COM. Для чего следует загрузить DEBUG и ввести команду D FOOO:FFFO, по которой на экран выводится дата создания файла IBMBIO.COM. Для АДОС это будет дата 05/18/87. За более подробным описанием возмож- ностей и работы с монитором DEBUG отсылаем читателя к до- кументации по ПЭВМ ИСКРА 1030 [17]. Команда EDLIN несет большую функциональную нагрузку пс редактированию текстовых файлов и будет подробно рас- смотрена ниже в настоящей главе. 4.3. Информационные команды системы АДОС Команды данной группы предназначены, в первую очередь, обеспечить пользователя наиболее актуальной информацией 0 состоянии системы. Команда DIR имеет формат DIR [СФ] [/Р] [/W] [комментарий]
и служит для вывода информации о файлах, заданных парамет. ром 'СФ'. При указании этого параметра действуют стандар^ ные умолчания для УВВ и пути поиска файла. В данном пар^ метре допускается использование обобщающих символов. Параметр 7р* задает режим постраничного вывода информации на экран, а параметр 'М' определяет вывод информации в сж^ том формате (выводятся только пути поиска и имена файлов) Параметр 7W рекомендуется использовать при ширине э^ рана 80 символов. Выводимая по команде DIR информация включает следующие элементы: - идентификацию тома (метка тома); - объем свободной памяти на дискете; - имя файла и его расширение, если оно есть; - размер файла в байтах; - дату последней модификации (создания) файла. Следует отметить, что скрытые и системные файлы командой DIR не выводятся. Средства, позволяющие это сделать, буду| описаны ниже. При выводе информации по команде DIR элементы, соответ- ствующие подкаталогам, отмечаются признаком '<DIR> ' в поле расширения имени файла. Ссылки к порождающему каталогу отмечаются точкой /и двумя точками в поле имени файла. По команде DIR свободное место на томе идентифицируется с точностью до 1 Кбайта (1 Кбайт = 1024 байта), т. е. простран- ство, меньшее 1024 байта, полагается нулевым. Это же за- мечание относится и к подобной команде DIRSORT системы MINIDOS, описанной в гл. 9. Приведем примеры на использо- вание команды DIR: 1. A>DIR \СО*.* Том на устройстве А без метки Каталог А: \ COMMAND СОМ 17664 1-01-85 12:15а CONFIG ВАК 64 1-01-85 12:17а СОМР СОМ 2584 1-01-85 12:15а CONFIG SYS 104 1-01-85 12:25а 4 файлов 71564 байтов свободно 2. А> DIR... Том на устройстве А без метки Каталог А:\ LPTO 1152 1-01-85 12:08а F-80 116 1-01-85 12:10а LASNAMAE 116 1-01-88 12:00а 2 файлов 71564 байтов свободно 3. А > DIR\R*.*/W [листинг каталога] Том на устройстве А без метки Каталог А:\ RECOVER COM RESTORE COM R1 EXE 3 файлов 71680 байтов свободно
4 . a > DIR A: > B:DIR 5 a > DIR A: »B:DIR1 6 . A > DIR A: > PRN 7 a> DIR A:> LPT1 - вывод листинга каталога тома на 'А' в файл DIR на УВВ 'В' - вывод листинга в конец файла DIR1 на УВВ 'В* - вывод листинга каталога на принтер - вывод листинга каталога на принтер Команда DIR является одной из наиболее часто используемых в операционной системе любой версии. Следует помнить, что при попытке вывести каталог непроинициализированной диске- ты командой DIR выдается неадекватное диагностическое сообщение „Смена диска на устройстве <Х>. Прекратить (А), повторить (R), пренебречь (I)?”, на которое следует ответить вводом символа с последующей инициализацией тома. Команда TREE имеет формат [ИУ:] [путь] TREE [D:] [/F] [комментарий] и служит для вывода на стандартное устройство вывода списка всех каталогов на заданной параметром 'D:' дискете и всех файлов дискеты. Параметры [ИУ:] [путь] указывают путь к файлу TREE.COM, содержащему программу вывода. Параметр 'D:' указывает дисковод, список каталогов дискеты на котором вы- водится. Параметр /F* определяет дополнительно вывод списка файлов каждого подкаталога тома. При выводе каждого под- каталога тома указывается полный путь поиска к нему. Коман- да TREE позволяет получить древовидную структуру указанно- го подкаталога тома. Примеры использования команды TREE: 1. А > TREE Подкаталоги не найдены 2. А > TREE /F Подкаталоги не найдены 3. А > TREE B:/F Сектор не найден при чтении на устройстве В Прекратить (А), повторить (R), пренебречь (1)?А В> Следует отметить, что активным после выполнения команды TREE становится дисковод, указанный в ее параметре 'О:'. Команда VER имеет формат VER [комментарий] и служит для вывода номера версии операционной системы.
Например: А > VER [версия ОС] ИСКРА 1030 АДОС версия 2.00 Команда VOL имеет формат VOL [D:] [комментарий] и служит для вывода на экран метки тома на заданном пара метром 'D:' УВВ. Например: А> VOL В: [метка тома] Том на устройстве В без метки Команда REM имеет формат REM [информационное сообщение] и служит для вывода на экран дисплея указанного в ней со- общения длиной не более 123 символа. Имя команды также выводится вместе с сообщением. Сообщения не должны содер- жать символов '>' и воспринимаемых системой как слу- жебные символы, о которых будет идти речь ниже. Примеры использования команды REM: 1. А> REM The theory of homogeneous structures 2. A > REM Данное число > 45 Защита записи при записи на устройстве А 3. А> REM Number < 8 Файл не найден В примерах 2 и 3 приведено использование в команде REM недопустимых символов и реакция на это системы. Команда REM используется в основном в пакетных файлах. Команда PAUSE имеет формат PAUSE [информационное сообщение] и служит для вывода на экран указанного в ней сообщения и перевода системы в состояние ожидания, из которого систе- му можно вывести нажатием любой клавиши. Данная команда используется в основном в пакетах команд. В этом случае выполнение пакета команд продолжается до нажатия любой клавиши, кроме клавиш 'CTR' + 'S/B'. В последнем случае поль- зователю предоставляется возможность либо продолжить выполнение пакета команд, либо вернуться в состояние си- стемы (метка А>). В параметре команды PAUSE также нельзя использовать символы '>' и '< . Следующие примеры иллюстри- руют сказанное:
1 a > PAUSE Заменить дискету на А Нажмите любую клавишу ... 2 А > PAUSE Вставить дискету > В Защита записи при записи на устройстве А 3 А > PAUSE А<->В Файл не найден !Дз рассмотрения команд REM и PAUSE следует, что использо- вание в их параметре символа >' приводит к попытке записи на активный дисковод, тогда как символ '<' инициирует поиск несуществующего файла на активном дисководе. 4. 4.4. Команды управления системой АДОС Команды данной группы служат в основном для изменения ряда основных характеристик системы. Команда ASSIGN имеет формат [ИУ:] [путь] ASSIGN [D1 = D2 [...]] [комментарий] и служит для переопределения запросов на дисковое УВВ, за- данное параметром D1*, к новому устройству 'D2'. Параметры [ИУ:] [путь] указывают путь к файлу ASSIGN.COM, содержащему программу переназначения запросов. Параметры D1' и '02' определяют соответственно дисковые УВВ, с которого и на ко- торый переопределяются запросы на ввод-вывод. Такие пары устройств, соединенных знаком равенства '=', могут образо- вывать список. Указанные в команде ASSIGN УВВ должны существовать физически и быть работоспособными. В противном случае может потребоваться перезагрузка системы, ибо восста- новить первоначальное распределение запросов командой ASSIGN уже не удастся. Связано это с тем, что перед перерас- пределением команда ASSIGN всегда обращается к УВВ, на которое до этого было сделано переопределение операций ввода-вывода. Команда ASSIGN без параметров отменяет все предыдущие переопределения дисковых устройств. Данная команда была введена с целью облегчить исполь- зование программ, требующих для своего функционирования определенного типа УВВ, отсутствующих на ПЭВМ. Команду ASSIGN следует использовать весьма осторожно, так как воз- можны недопустимые операции обмена с дисковыми УВВ. Команды FORMAT, DISKCOPY и DISKCOMP игнорируют все пере- 9пРеделения, сделанные командой ASSIGN. Ключевой параметр комментарий* не должен содержать символов >' и Приве- дем примеры использования команды ASSIGN: А > ASSIGN А=С [переназначение] А > DIR
Том на устройстве А с меткой VDISK V2.0 2. А > ASSIGN А=А [использование ASSIGN и PRINT] А > PRINT AUTOEXEC.* Имя устройства печати [PRN]: ргп Резидентная часть PRINT загружена A:AUTOEXEC.BAT печатается в данное время 3. А > ASSIGN [text] А=А [Текст] 4. А > ASSIGN А=А <text> Файл не найден Команда BREAK имеет формат BREAK = {ON I OFF} [комментарий] и указывает на необходимость проверки ситуации 'BREAK' при каждом обращении программы к операционной системе. Си- туация BREAK' возникает при нажатии клавиш 'CTR' + 'S/B* Следует помнить, что при нажатии указанных клавиш в процер- се записи на диск может произойти потеря информации Па- раметр 'ON' определяет, что ситуация 'BREAK' будет прове- ряться при запросе программой пользователя любой функции системы, тогда как параметр 'OFF' задает проверку только при запросах к стандартным УВВ, печати и вспомогательному УВВ. Отсутствие обоих параметров в команде BREAK приво- дит к выводу на экран режима BREAK, не меняя самого режима. Примеры использования команды: 1. А > BREAK BREAK в состоянии ON 2. А > BREAK=ON [изменение режима] А > BREAK BREAK в состоянии ON Для лучшего понимания следующих команд кратко рассмот- рим системный файл CONFIG.SYS, предназначенный для опре- деления конфигурации системы. Этот файл содержит команды, задающие ряд важных характеристик системы. Ниже приво- дится пример набора команд файла CONFIG.SYS системы MINIDOS, содержащего четыре команды: DEVICE=ANSI.SYS DEVICE=VDISK.SYS 64 512 16 BUFFERS=4 FILES=1O Файл CONFIG.SYS можно модифицировать или создавать, на- пример, с помощью команд COPY, EDLIN или Редактора текстов. При загрузке системы АДОС на АДОС-дискете отыскивается файл CONFIG.SYS и происходит интерпретация содержащихся в нем команд. Если данный файл отсутствует, то для парамет- ров конфигурации системы принимаются значения по умолча-
ю В файле CONFIG.SYS допустима команда BREAK, однако нИотличие от непосредственного ввода команды с консоли использование ее без параметров в файле конфигурации эк- \валентно режиму BREAK=OFF. Рассмотрим теперь четыре оманды (BUFFERS, DEVICE, FILES и SHELL), которые мож н0 использовать только в файле конфигурации системы Команда BUFFERS имеет формат BUFFERS=N [комментарий] и служителя задания числа системных буферов ввода-вывода. Число N может принимать значения в интервале 1+99; по умолчанию принимается N=2. Число буферов ввода-вывода системы можно изменить только корректировкой команды BUFFERS в файле CONFIG.SYS с последующей перезагрузкой системы. При определении оптимального числа системных буферов ввода-вывода следует учитывать: - типы наиболее часто используемых программ; - размер оперативной памяти ПЭВМ; - число дисковых устройств; - производительность системы при работе с разным числом буферов ввода-вывода; - использование для файлов данных произвольного доступа от 2 до 20 буферов ввода-вывода; - число буферов для последовательных файлов данных не увеличивается. Практические соображения показывают, что большинство при- кладных программ, редко использующих произвольный доступ к дисковой памяти, вполне удовлетворительно обслуживаются 2'4 системными буферами. Значительное использование про- извольного доступа к дисковой памяти прикладными програм- мами требует 4-10 системных буферов ввода-вывода, тогда как работа с базами данных делает целесообразным исполь- зование уже 1О-!‘2О системных буферов. Однако следует при этом учитывать, что для Т системных буферов ввода-вывода требуется 528хТ дополнительных байт в ядре системы АДОС. Команда DEVICE имеет формат DEVICE=<CO> [комментарий] и служит для включения в систему драйверов новых логических Параметр СФ* указывает спецификатор файла, содержа- щего драйвер логического УВВ. Драйверы стандартных УВВ включены в системный файл IBMBIO.COM, что не требует для команд DEVICE в файле CONFIG.SYS. В состав системы МОС включен один загружаемый драйвер, расширяющий Функции системы по управлению стандартными УВВ. Этот
драйвер находится в файле ANSLSYS. Для него в файле конфи, гурации системы помещена команда DEVICE=ANSI.SYS. Для описанной ниже системы MINIDOS в файл конфигурации вклю. чена также команда DEVICE=VDISK.SYS для драйвера вир^уаль. ного диска. Виртуальный диск создается в ОП программой VDISK.SYS и представляет собой модель дискового устройства. При этом допустимо использование нескольких виртуальных дисков, которым приписываются последовательные буквенные имена^ следующие за обозначениями физических дисковых УВВ си- стемы. Области ОП для виртуальных дисков могут быть выде- лены как в системной части АДОС, так и вне ее. Для включения каждого виртуального диска (ВД) в систему необходимо файл конфигурации CONFIG.SYS пополнить коман- дой DEVICE формата DEVICE=[HY:] [путь] VDISK.SYS <Р> <С> <К> [/Е] [комментарий], где [ИУ:] [путь] - указывает путь к файлу VDISK.SYS; Р - объем ВД в Кбайтах (минимум - 1 Кбайт, максимум - объем свободной части ОП, умолчание - 64 Кбайт); С - размер сектора ВД в байтах (умолчание - 128, допустимо - 256 и 512); К - размер главного каталога ВД в элементах (минимум - 2, максимум - 512, умолча- ние - 64); Е - определяет размещение ВД в ОП вне си- стемной области АДОС. Для обращения к ВД достаточно указать его логическое имя, следующее за последним именем, используемым в системе. Например, для ПЭВМ с двумя устройствами НГМД с логиче- скими именами А* и В' именем ВД будет идентификатор С\ ВД присваивается метка VDISK V2.0, с ним можно работать как с обычным дисковым томом. Исключение состоит в том, что к ВД неприменимы следующие команды системы: FORMAT SYS и DISKCOPY, т. е. команды, которые непосредственно связаны с организацией информации на дисковом томе. Если в системе (посредством файла CONFIG.SYS) определено несколько ВД, то им присваиваются последовательные логи- ческие имена. Информация на ВД (при отсутствии сбоев памя- ти ПЭВМ) сохраняется до следующей перезагрузки операцион- ной системы. Команда FILES имеет формат FILES=N [комментарий] и служит для указания максимального числа файлов, одновре- менно открываемых с использованием системных номеров.
п0 умолчанию параметр N принимает значение 8; значение К олжно лежать в пределах 8+99. Система не может одновре- менно открыть более 8 (по умолчанию) или N (в команде FILES) Файлов с системными номерами. Эта команда однако не влияет на число файлов, открываемых дополнительно прикладной программой с использованием блоков управления файлом (БУФ), создаваемых самой программой в своей области памя- ти тогда как БУФы для файлов с системными номерами созда- ются в области ядра системы и для них требуется дополни- тельная память размером 48x(N-8) байтов. Каждая прикладная программа может иметь максимум 20 одновременно открытых файлов, из которых 3 использует сама система и 5 используют стандартные ввод и вывод, печать, вспомогательное УВВ и ре- гистратор системы. Таким образом, максимальное число си- стемных номеров для файлов в рамках всей системы опреде- ляется командой FILES, а для отдельной программы пользо- вателя оно равно 20. Команда SHELL имеет формат SHELL <СФ> и служит для указания файла, содержащего процессор команд верхнего уровня, который будет использоваться при загрузке системы вместо системного файла COMMAND.COM. В команде SHELL нельзя использовать параметр комментария, присут- ствие данной команды в файле CONFIG.SYS приводит к иден- тификации на экране дисплея версии системы при ее загрузке В качестве примера использования вышеописанных команд конфигурации системы приведем содержимое файла конфи- гурации системы MINIDOS: DEVICE=ANSLSYS [дополнительные функции в/в] DEVICE=VDISK.SYS 64 512 16 [виртуальный диск] BUFFERS=4 [системные буфера в/в] FILES=10 [системные номера файлов] Команда COMMAND имеет формат COMMAND [ИУ:] [путь] [/Р] [/С <цепочка символов>] и служит для вызова вторичного процессора команд, в качестве которого может использоваться процессор команд пользова- теля для обработки командных строк. Вторичный процессор команд должен иметь имя COMMAND.COM. Параметры [ИУ:] [путь] определяют дисковод и каталог, содержащие вторичный процессор команд. Параметр 7р' вызывает резидентную заг- РУзку вторичного процессора команд. В этом случае вторичный процессор не должен содержать возвратов в основной процес- сор команд, для выхода из вторичного процессора требуется
перезагрузка системы. Параметр 7С' позволяет передать вы- зываемому процессору команд цепочку символов, интерпре- тируемую как ввод команды. После выполнения этой команды управление возвращается к основному процессору команд. Например, по команде А > COMMAND В:/С DIR загружается вторичный процессор команд, выполняет команду DIR для активного каталога и возвращает управление основ- ному процессору команд системы. Команда COMMAND без па- раметров вызывает загрузку вторичного процессора, который унаследует окружение основного процессора команд. В этом случае для возврата из вторичного процессора в основной необходимо выполнить специальную команду EXIT. В команде COMMAND нельзя использовать параметр комментария, дей- ствие параметра '/Р' подавляется параметром '/С'. Приведем простой пример использования команды COMMAND: А>COMMAND ПП ЭВМ ИСКРА 1030 АДОС версия 2.0 (1986 г.) А > EXIT [выход из вторичного процессора] Команда PROMPT имеет формат PROMPT [текст системной метки] и служит для установки новой метки системы вместо стан- дартной метки А>'. В качестве новой метки системы становит- ся 'текст', указанный в команде PROMPT, которая без пара- метров восстанавливает старое значение системной метки. Текст новой метки может состоять из любых символов, но лю- бое вхождение в текст пары символов '$Х', где X - любой сим- вол, обрабатывается специальным образом: вместо каждого вхождения такой пары в текст метки помещается информация согласно табл. 9. В качестве иллюстрации приведем пример использования команды PROMPT: А > PROMPT MINIDOS $N$B MINIDOS A: PROMPT Команда SET имеет формат SET [имя=[<значение>]] и служит для включения в окружение команд процессора (ОКП) указанной цепочки символов. По данной команде параметр, указанный в ней, полностью переписывается в системную область ОП, отведенную для строк ОКП. По команде SET без па-
Значение х в $х Подставляемая в текст новой метки информация $ D т р V N G L В 0 Е Символ Текущая дата Текущее время Путь к активному каталогу тома Номер версии операционной системы Имя активного дисковода Символ '>' Символ ’< ’ Символ (двоеточие) Символ* =' (равенство) esc (стирание) CR LF (подчеркивание) н Любой другой символ Возврат на шаг Игнорируется раметров можно вывести на экран дисплея содержимое об- ласти ОКП, например: MINIDOS A>SET РАТН= COMSPEC=A: \ COMMAND.COM PROMPT=MINIDOS $N$G MINIDOS A> Система автоматически добавляет в область ОКП строки, по- рождаемые командами PROMPT и PATH, а строка COMSPEC= =<путь> определяет путь поиска процессора команд, когда требуется его перезагрузка. Если в ОКП имеется строка с име- нем, указанным в команде SET, то она заменяется на строку из команды. Команда SET с параметром имя" без значения* Удаляет соответствующую строку из ОКП. По заполнению ОКП (ее размер составляет 128 байтов) вводимые по команде SET новые строки игнорируются с выдачей соответствующего со- общения на экран дисплея. Команда PATH имеет формат PATH {[[D1:]<путь 1 >[;[[D2:]<путь2>]... ]] I и служит для указания каталога и подкаталогов, в которых $Удут разыскиваться команды системы и пакеты команд, не обнаруженные в активном каталоге. Параметрами команды является список путей поиска каталогов, в которых бу^ут отыскиваться файлы с расширениями имени '.COM', '.EXE и
'.ВАТ'. Элементы списка путей поиска разделяются точкой с запятой (;). Имена дисководов могут опускаться (D1:, D2:,...), но пути поиска (путь1, путь2, ...) должны указываться пол- ностью. Просмотр каталогов производится в том же порядке, как они определены в списке параметров команды PATH, ко- торая без параметров высвечивает на экране дисплея пути, ранее определенные командами PATH. Команда PATH с па- раметром '; отменяет все ранее определенные (по команде PATH) каталоги для автоматического поиска, т. е. восстанав- ливает исходное состояние согласно содержимому области ОКП системы. Следует помнить, что допущенные в команде PATH ошибки распознаются только в период ее выполнения, а несуществующие пути поиска игнорируются. Информация из команды PATH заносится в область ОКП, содержимое этой области сохраняется при завершении прог- рамм, остающимися резидентными. Поэтому перед первым выполнением команды PATH следует загрузить в ОП программы PRINT, MODE и GRAPHICS. В команде PATH нельзя использо- вать параметр комментария. Приведем примеры, иллюстрирую- щие вышесказанное. 1. А > PATH B:\STRUCTUR:\ISKRA A>SET COMSPEC=A: \ COMMAND.COM РАТН=В: \STRUCTUR: \lSKRA 2. А> PATH; A>SET COMSPEC=A: \COMMAND.COM PATH= 3. A > PATH C:; B:\SYSTEM A>SET COMSPEC=A: \COMMAND.COM PATH=C:; B:\STRUCTUR Команда CLS [комментарий] используется для очистки эк- рана дисплея. По данной команде очищается экран и устанав- ливается метка системы с курсором в левом верхнем углу экрана. Команда DATE имеет формат DATE [{[ММ-ДД-ГГ] I [ММ/ДД/ГГ]}] и служит для изменения текущей системной даты, которая за- носится в каталоги томов при создании или модификации фай- лов. В параметре команды буквы ММ (1 + 12), ДД (1'31) и ГГ (1980'2099 или 80*99) обозначают соответственно месяц, день и год. В качестве разделителя в параметре допускаются символы '-' и 7'. Команда DATE без параметров выводит на экран дисплея текущую дату и запрашивает ввод нового зна- чения для даты; клавиша 'ПУСК' сохраняет старую дату.
Команда TIME имеет формат TIME [ЧЧ:ММ[:СС[.ХХ]] и служит для ввода текущего системного времени, которое заносится в каталоги томов при создании или модификации файлов. Буквы ЧЧ (0-23), ММ (0-59), СС (0-59) и XX параметра команды TIME определяют соответственно часы, минуты, се- кунды и сотые доли секунды. Команда TIME без параметров служит для переопределения системного времени и вывода на экран текущего времени. Команда также не допускает ис- пользования комментария. Примеры использования команд DATE и TIME: 1. А > DATE Текущая дата: Сб 12-31-1988 Введите дату 6/14/88 2. А > TIME Текущее время: 0:05:46.42 Введите время 23:50:00 Команда CHDIR (CD) имеет формат (CD I CHDIRJ [D:] [путь] и служит для замены активного каталога на активном или за- данном дисковом УБВ или указывает путь к новому активному каталогу. Параметр 'D:' указывает УВВ с томом, на котором нужно изменить или отобразить на экран текущий каталог. Параметр ’путь’ указывает путь к каталогу, который становит- ся текущим после выполнения команды CHDIR. Этот параметр может указывать путь как от текущего, так и от главного ка- талога тома; в последнем случае первым символом парамет- ра должен быть V. При отсутствии данного параметра на эк- ран выводится путь к текущему каталогу на указанном уст- ройстве. Например, A>CDB: А > CHDIR B:\PTIP\GOSSTROI - отображается на экране путь к текущему каталогу на устройстве 'в'; - на устройстве 'В' активным становится подкаталог 'GOSSTROI' В команде CHDIR не допускается использования параметра комментарий.
4.4.5. Команды управления вводом-выводом Команды данной группы служат для управления системным вводом-выводом и предоставляют пользователю существен- ные средства по организации ввода-вывода при работе с данными. Команда VERIFY имеет формат VERIFY [{ON I OFF}] [комментарий] и служит ^ля установления режима записи на дисковые УВВ. Параметр ON* устанавливает режим проверки чтением каж- дой операции записи на дисковые УВВ, тогда как параметр OFF* отменяет этот режим. При загрузке системы (если коман- дой SET не указано противного) действует режим *OFF*, ко- торый требует в среднем вдвое меньше временных затрат на обменные операции с дисковыми УВВ. Команда VERIFY без ука- занных параметров выводит на экран дисплея информацию о текущем режиме операций записи на дисковые УВВ, в этом случае команда не должна содержать комментария. Примеры использования команды VERIFY: 1. А > VERIFY OFF [изменение режима записи] 2. А > VERIFY [проверка режима записи] Необходимо ON или OFF 3. А > VERIFY VERIFY в состоянии OFF 4. А > VERIFY ON [восстановление режима] 5. А > VERIFY VERIFY в состоянии ON Команда CTTY имеет формат CTTY <ИУ> и служит для замены консоли стандартного ввода-вывода (КСВ/В) на вспомогательную консоль или восстанавливает в качестве КСВ/В клавиатуру и дисплей. Параметр *ИУ* (имя устройства) допускает логические имена AUX, СОМ1 и COM2. Значение CON' параметра восстанавливает КСВ/В - клавиа- туру и дисплей. В общем случае параметр 'ИУ' допускает лю- бое имя символьного УВВ, определенного в загружаемом для него драйвере пользователя. Указываемое символьное устрой- ство должно обязательно допускать операции ввода и вывода. Команда CTTY действует только для программ, использующих вызовы функций системы. Перед работой с другими програм- мами следует восстановить стандартное состояние КСВ/В. Приведенный пример иллюстрирует использование в качестве КСВ/В первого адаптера асинхронной связи:
A> CTTY AUX Команда GRAFTABL имеет формат [ИУ:] [путь] GRAFTABL [комментарий] и служит для включения в ядро системы дополнительной таб- лицы изображений знаков (с кодами 128+255) для графическо- го режима работы дисплея. Параметры [ИУ:] [путь] указывают путь к файлу GRAFTABL.COM, содержащему программу загруз- ки таблицы. При загрузке таблицы ядро системы увеличивается на 1200 байтов. Каждое новое выполнение команды GRAFTABL влечет за собой перезагрузку таблицы с выводом на экран со- общения: 1. А > GRAFTABL [загрузка таблицы графики] ЗНАКИ ГРАФИКИ ЗАГРУЖЕНЫ 2. А > GRAFTABL [перезагрузка таблицы] ЗНАКИ ГРАФИКИ ЗАГРУЖЕНЫ Команда GRAPHICS имеет формат [ИУ:] [путь] GRAPHICS [комментарий] и служит для обеспечения вывода на принтер содержимого экрана дисплея в режиме графики. Параметры [ИУ:] [путь] ука- зывают путь к файлу GRAPHICS.COM, содержащему соответ- ствующую программу. Выполнение команды не вызывает пе- чати, а только разделяет соответствующие средства системы. Команда GRAPHICS увеличивает размер ядра системы на 700 байтов. После выполнения команды содержимое графиче- ского экрана можно вывести на принтер по клавише PrS', при этом содержимое выводится в повернутом виде: правый верхний угол экрана помещается на бумаге принтера в левом верхнем углу. Команда MODE имеет пять форматов и служит для установ- ления режимов работы печати, адаптера графического дисплея или асинхронного адаптера связи. Параметры команды [ИУ ] [путь] во всех ее форматах устанавливают путь поиска файла MODE СОМ, содержащего программу установки режима работы ФОРМАТ 1. ** [ИУ:] [путь] MODE N [комментарий] позволяет установить режим работы адаптера графического Дисплея согласно значению параметра N'
40 (80) BW40 (BW80) СО40 (СО80) - установка ширины экрана в 40(80) симво- лов; - режим подавления цвета с шириной экра- на 40(80) символов; - режим разрешения цвета с шириной экра- на 40(80) символов. ФОРМАТ 2: [ИУ:] [путь] MODE LPT<t>[:] [N] [,[М] [,К]] [комментарий] позволяет устанавливать режим печати согласно значениям параметров команды MODE: <t> - номер устройства печати (t=1,2,3); N - число символов в строке (N=80,132; по умолчанию N=80); М - вертикальная плотность в линиях на дюйм (М=6,8; по умолчанию М=6); К - режим повторной попытки вывода на печать после останова печати (по умолчанию выводится сообщение о прекращении работы устройства печати). При использовании параметра 'к' прекратить попытки печати на выключенное или несуществующее устройство можно по клавишам CTR' + 'S/В'. Следует отметить, что интерпретатор с языка БЕЙСИК отменяет действие команды MODE. ФОРМАТ 3: [ИУ:] [путь] MODE [N], М [,Т] [комментарий] служит для осуществления сдвига изображений на экране дисплея согласно значениям его параметров: N - имеет тот же смысл и принимает те же значения, что и для формата 1; М - сдвиг изображений влево (L) или вправо (R); Т - вывод на экран текстового изображения и запроса на осуществление сдвига. Изображение сдвигается на один символ в указанном направ- лении при ширине экрана 40 символов и на два символа - при ширине 80 символов. После сдвига на предварительно очищенный экран дисплея выводится сообщение о видимости изображения с запросом. По ответу 'N' сдвиг продолжается, по т - команда MODE завершает свою работу. ФОРМАТ 4: [ИУ:] [путь] MODE СОМ<1>[:]<скор>[,<контр>] [,<длина>] [,<стоп>] [,Р] [комментарий]
служит для установления режима работы асинхронного адап- тера связи согласно значений входящих в него параметров: < t> - номер асинхронного адаптера связи (t=1,2); < скор> -устанавливает скорость обмена в 110 и 150х2к (к=0-6) бод; < контр> - указывает на необходимость контроля паритета (N - нет контроля, 0 - контроль по нечету и Е (по умолчанию) - контроль четности); < длина> - длина слова данных (7 - по умолчанию или 8 бит); < стоп> - число стоповых битов (1 или 2; по умолчанию по- лагается 1 для всех скоростей обмена, кроме 110 бод, для которой значение есть 2); р - использование асинхронного адаптера для связи с устройством печати. В формате 4 команда MODE определяет протокол обмена для асинхронного адаптера связи и умолчание данного формата эквивалентно наличию команды: MODE СОМ1: 12,N,8,1 ,Р. ФОРМАТ 5: [ИУ:] [путь] MODE LPT<t>[;]=COM<N>[:] [комментарий] служит для перенаправления данных параллельной печати к асинхронному адаптеру связи. Параметр 't' определяет номер устройства печати (1, 2 или 3), параметр 'N' - номер асинхрон- ного адаптера связи (1 или 2). По команде MODE формата 5 все данные,,адресовавшиеся до этого к устройству печати с номером С, будут переадресованы к асинхронному адапте- ру связи с номером 'N'. Перед использованием команды MODE формата 5 для асинхронного адаптера связи следует приме- нить команду MODE формата 3 с параметром 'Р'. Отменить действие команды MODE формата 5 можно коман- дой MODE формата 1, например MODE LPT1. При выполнении команды MODE (кроме формата 5) в ОП загружается ее рези- дентная часть, являющаяся общей для всех форматов команды. Действие резидентной части команды MODE распространяется до перезагрузки системы. Приведем примеры на использование форматов команды MODE: А > MODE LPT1 : 132,8,Р [формат 2] А > MODE СОМ1 : 12,N,8,1,Р [формат 4] Команда MORE имеет формат [ИУ:] [путь] MORE [комметарий] и служит для постраничного (страницей является экран дис- плея) вывода информации на стандартное устройство вывода.
Параметры [ИУ:] [путь] указывают путь к файлу с именем MORE.COM, содержащему программу вывода. Команда MORE читает данные со стандартного устройства ввода и выводит их на экран дисплея до его заполнения, после чего выдает сообщение - MORE - и ждет нажатия любой клавиши для продолжения вывода ин- формации на экран. Команда MORE может выводить информа- цию на любое стандартное устройство вывода, но вывод ее осуществляется блоками размера 1 или 2 Кбайт, т. е. блок ра- вен размеру экрана дисплея. Команду MORE можно также использовать для перлюстрации символьных файлов. Приве- дем пример использования команды MORE: А > MORE < B.PARCELLA.88 - осуществляет постраничный вывод на экран текстового фай- ла PARCELLA.88. Выйти из команды MORE можно по клавишам 'CTR'+'S/B'. Команда PRINT имеет формат [ИУ:] [путь] PRINT [СФ] [/С] [/Т] [/Р]... [комментарий] и служит для параллельного вывода данных списка файлов одновременно с выполнением других программ. Параметры [ИУ:] [путь] указывают путь к файлу PRINT.COM, содержащему программу параллельного вывода. Параметры 'СФ' определяют спецификаторы выводимых файлов, а параметры 7С', 7т' и 7р' - режим вывода. Параметр 7т' указывает режим прекраще- ния печати, по которому все файлы удаляются из очереди PRINT, прекращается печать данных выводимого файла, пе- чатается сообщение о прекращении работы PRINT, бумага на принтере протягивается до начала следующей страницы и вы- дается звуковой сигнал. Параметр /С определяет режим отмены, по которому пред- шествующее ему имя файла и все последующие имена файлов до появления параметра 7р' или до конца командной строки удаляются из очереди PRINT. Параметр 7р' определяет режим печати, по которому предыдущее имя файла и все последующие имена файлов до появления параметра 7с' или до конца ко- мандной строки включаются в очередь PRINT. При этом в име- нах файлов допускается использование обобщающих сим- волов. Если в команде PRINT нет параметров 7с', 7т* и 7Р', то по умолчанию полагается параметр 7р\ и все указанные в ко- мандной строке файлы включаются в очередь PRINT. Команда PRINT без параметров приводит к выводу на экран очереди PRINT. На печать файлы выводятся в том порядке, в каком они
определены в команде PRINT. После вывода очередного файла бумага на принтере протягивается к началу следующей стра- ницы. Следует отметить, что имена выводимых файлов в оче- реди PRINT могут дублироваться. Ввод команды PRINT первый раз в систему приводит к за- грузке в ОП ее резидентной части и выдаче запроса на опре- деление имени логического устройства печати: AUX, PRN (по умолчанию), LPTk (k=1+3), СОМ1, COM2 и т. д. Указываемое в ответе на запрос команды устройство вывода должно быть физически подключено, в противном случае реакция системы непредсказуема. Если при первом вводе команды PRINT в си- стему не указаны имена файлов, то команда выводит на экран сообщение о загрузке своей резидентной части и переходит в состояние системы 'А>'. В процессе выполнения команды PRINT нельзя менять диски с файлами и изменять или удалять файлы из PRINT-очереди. Наряду с этим нельзя использовать выделенное для PRINT устройство вывода другими программами до завершения команды. При возникновении ошибки чтения файла команда PRINT производит следующие действия: - прекращает печать выводимого файла; - выводит сообщение об ошибке ввода-вывода; - протягивает бумагу на принтере к началу следующей страницы и выдает звуковой сигнал; - выводит сообщение: Все, файлы отменены оператором' (при наличии параметра 7т') или 'Файл отменен опера- тором* (параметр /С ); - протягивает бумагу на принтере к началу следующей страницы; - если очередь PRINT не исчерпана, то осуществляется пе- реход к выводу очередного файла. Пример использования команды PRINT: 1. А > PRINT CONFIG.* B:DDD.* В:ТТТ.* постановка в очередь PRINT на печать файлов с именами CONFIG, DDD и ТТТ и произвольными расширениями имен. Команда SORT имеет формат [ИУ ] [путь] SORT [/R] [/+N] [комментарий] и служит для сортировки и записи на стандартное устройство вывода данных, полученных со стандартного устройства вво- да. Параметры [ИУ:] [путь] указывают путь к файлу с именем SORT EXE содержащему программу сортировки. Данные сор- тируются согласно последовательности модов ASCII. Параметр '/R' определяет сортировку данных по, убыванию, в его отсутствие - по возрастанию. Параметр 7+N' указывает начало позиции ключа сортировки в сортируемых строках.
Поле ключа сортировки начинается с указанной позиции и кон- чается строкой. По умолчанию полагается N=1; размер сорти- руемого файла не должен превышать 63 Кбайтов. Приведем примеры сортировки символьных файлов: 1. SORT >PRN - сортировка файла, вводимого с консоли, с последующим выво- дом результата на печать; 2. SORT >CON -аналогично примеру 1, но с выво- дом на экран; 3. SORT>C:A - аналогично примеру 1, но с выво- дом результата в файл В на УВВ 'С'; 4. SORT - аналогично результатам приме- ра 2; 5. SORT <C:D>C:D - сортировка по возрастанию фай- ла D на УВВ 'С'; 6. SORT /R <C:B>B:D - сортировка дискового файла В по убыванию и помещение резуль- тата в файл D на УВВ 'В'; 7. SORT /R/+8 <B:F >PRN - сортировка файла F на УВВ 'В* по убыванию значений ключа, начинающегося с 8-й позиции логической записи, и вывод ре- зультата на PRN (принтер). В приведенных примерах 1+4 после запуска команды SORT входной файл вводится с клавиатуры, и после каждой введен- ной записи нажимается клавиша ПУСК . Конец входного файла идентифицируется нажатием клавиш F6* + Т|УСК’ или 'CTR'+ z + ПУСК*, формирующих маркер конца файла ”1А”. После этого входной файл сортируется, результат выводится на указанное в команде SORT УВВ (PRN, CON, LPT1) или в за- данный дисковый файл. В примерах 5+7 команда SORT исполь- зуется для сортировки дисковых файлов. Команду SORT мож- но успешно использовать для предварительной сортировки входных данных пользователя с последующей записью их в файл либо для сортировки любых дисковых файлов объемом не более 63 Кбайт. Следует помнить, что команда SORT не поз- воляет правильно сортировать числовые файлы и имеет целый ряд ограничений при необходимости производить сортировку файлов по сложным логическим условиям. Для этих целей предназначена программа PROCSORT, описанная в главе 6. Команда FIND имеет формат [ИУ:] [путь] FIND [/V] [/С] [М]<”цепочка”><СФ1>... <СФк> и служит для выборки из указанных файлов всех строк, содер- жащих заданные цепочки символов, и вывод их на стандарт-
ное устройство вывода. Параметры [ИУ:][путь] указывают путь к файлу FIND.EXE, содержащему программу выборки. Указанные в команде FIND файлы должны быть в коде ASCII, т е. текстовыми файлами или файлами исходных модулей. Режим вывода найденных строк определяется параметрами '/V', 7С' и 7N . Параметр '/V' инвертирует действие команды FIND и позволяет выводить все, строки указанных файлов, не содержащие заданных 'цепочек' символов. Параметр '/С' поз- воляет выводить только количество строк, содержащих задан- ные 'цепочки' символов, а параметр ZN' приводит к включе- нию в выводимые строки их порядковых номеров в файлах. Параметр /С' подавляет действие параметра 7N'. Отыскивае- мая цепочка' символов заключается в кавычки (”); в ней раз- личаются прописные и строчные буквы; содержащиеся внутри 'цепочки символов кавычки (”) должны удваиваться. В конце командной строки с FIND указываются спецификаторы файлов, в которых будет осуществляться поиск строк с указанными 'цепочками'. Имена файлов в спецификаторах не могут со- держать обобщающих символов. Приведем примеры использо- вания команды FIND: 1. FIND ”REM” B’.F.BAS ----(Ю) B’.F.BAS 100 RESUME NEXT:REM Обработчик прерываний По команде FIND выводится программная строка файла F.BAS, содержащая оператор ”REM”. 2. FIND /V ”REM” B:F.BAS ----(10) В:F.BAS Выводится текст БЕЙСИК-программы F.BAS без программных строк, содержащих оператор ”REM”. 3. FIND /С/V ”REM” B’.F.BAS ----(10) B:F.BAS:8 Выводится число программных строк файла F.BAS, не содер- жащих оператора ”REM”. 4. FIND /С ’’OPEN” B’.FAIL В:PTIP ----(Ю) B:FAIL:12 ----(Ю) В’.РЛР’.б Подсчет числа программных строк в файлах FAIL и PTIP, содер- жащих оператор ’’OPEN”. 5. FIND ”REM” B-.F46.BAS >C:REM Выборка из файла F46.BAS программных строк, содержащих оператор ”REM”, и помещение их в файл REM на УВВ 'с'. Из вышесказанного следует, что команда FIND может ока- заться весьма полезной при анализе текстовых файлов боль- шого объема и идентификации программных средств в исход- ном виде, а также при контекстной перекомпановке текстовых файлов. Команды SORT, FIND и MORE образуют так называемые фильтры системы АДОС, т. е. команды, которые читают данное стандартное устройство ввода, модифицируют полученные
данные указанным образом и посылают их на стандартное устройство вывода. Пользователь имеет возможность созда- вать и собственные фильтры системы. Для этого его програм- мы-фильтры должны читать данные со стандартного ввода и по- сылать модифицированные по некоторому алгоритму данные на стандартное устройство вывода, используя функции систе- мы при реализации стандартного ввода-вывода. Рассмотрим еще одно средство системы АДОС по управлению обменом ин- формации между стандартными устройствами ввода и вывода. В его основе лежат системные средства по управлению опера- циями стандартного ввода-вывода и возможности системы по переопределению стандартных УВВ. Таким образом, ис- пользуя в своих программах только средства стандартных ввода и вывода, пользователь не заботится о переделке своих программных средств при переопределении стандартных УВВ. Функции по настройке программ на работу с новыми, отлич- ными от стандартных, УВВ берет на себя система. Например, используя в программе в качестве устройств ввода и вывода консоль, можно, не меняя программы, переопределить ввод с клавиатуры на ввод с дискового УВВ, а вывод - с дисплея на принтер. Единственное исключение сделано для регистра- тора системных диагностических сообщений, выход которого нельзя переопределить на выходное устройство, отличное от стандартного. Такая мера вполне объяснима с точки зрения функционирования системы. Возможность переопределения устройств ввода-вывода используется в системе АДОС доста- точно широко, особенно в период отладки программных средств в диалоговом режиме. Система АДОС допускает использование файлов в качестве стандартных устройств ввода и вывода. Для этих целей ис- пользуются специальные форматы параметров в командных строках: (1) А > > «СФ> I УВВ} Файл, определенный параметром 'СФ*, создается или укорачи- вается до нулевой длины и становится стандартным устрой- ством вывода - весь вывод на экран, кроме диагностических сообщений, будет направляться теперь в этот файл. При ука- зании в качестве параметра УВВ осуществляется вывод на устройство с заданным логическим именем (CON, PRN, LPT1). (2) А> < <СФ> Указанный параметром СФ* файл открывается для чтения и наз- начается стандартным устройством ввода. В этом случае программа или система получают данные не с консоли, а из этого файла. Поэтому файл должен уже содержать всю необ- ходимую информацию, в противном случае может понадобить- ся перезагрузка системы. Приведем несколько примеров на использование указанных средств переназначения устройств и файлов:
1. DIR B:>PRN -вывод каталога тома 'В' на принтер; 2’sORT>B:F42 -вывод отсортированных входных дан- ных в файл F42 на УВВ 'В'; 3. SORT <B:AGN - сортировка файла AGN и вывод резуль- тата на экран дисплея; 4. SORT <В:F >PRN - сортировка файла F и вывод результа- та на печать; , 5. SORT <B:F >C:R - сортировка файла F и вывод результа- та в файл R на УВВ 'С'. Средство переназначения устройств и файлов позволяет ор- ганизовать сцепление программ на информационном уровне. В качестве иллюстрации сказанного может служить пример PROGRAM <B:INPUT >C:OUTPUT, в котором программа PROGRAM читает входной файл INPUT и результат своего выполнения помещает в выходной файл OUTPUT на дисковом устройстве 'С'. Средства системы АДОС прямой связи стандартных вывода и ввода позволяют использовать стандартный вывод одной программы в качестве стандартного ввода для другой прог- раммы. Прямая связь осуществляется сцеплением программ с автоматическим переназначением устройств стандартных вывода и ввода. В командной строке сцепляемые программы разделяются двоеточием (:). В ряде фирменных руководств по системе MS DOS для этих целей указывается символ (I). В общих чертах система реагирует следующим образом на сцепленные программы. Выход первой программы на- правляется во временный файл с системным именем вида %PIPEzzz.$$$, создаваемый в главном каталоге на дисковом томе умолчания. Затем данный файл определяется входным для второй программы, откуда она и получает входную инфор- мацию. Это достаточно мощное средство управления вводом- выводом, предоставляемое системой пользователю любого уровня. Однако следует предупредить, что данное средство не реализовано не только в системах АДОС 2.0, MS DOS 2.0, но и во всех операционных системах, включая MS DOS 3.3, которая в настоящее время является наиболее массовой на ПЭВМ типа IBM РС/ХТ/АТ. 4. 4.6. Пакетные команды системы АДОС Команды данной группы используются главным образом для создания так называемых пакетных файлов (ВАТСН-файлов). Система наряду с обработкой отдельно вводимых команд предоставляет возможность работать с наборами последо- вательно выполняемых команд, организованных в виде ВАТСН- файлов, представляющих собой текстовые файлы, строками которых служат командные строки.
Имя ВАТСН-файла должно иметь расширение '.ВАТ'. В са- мой системе уже имеется один ВАТСН-файл AUTOEXEC.BAT, используемый при каждой загрузке системы АДОС. Пользо- ватель может изменить этот файл с помощью команд COPY, EDLIN или Редактором текстов и наполнить его новым содер- жанием, более отвечающим условиям эксплуатации системы. О примерах конкретных наполнений файла AUTOEXEC.BAT peib будет идти ниже. Все остальные ВАТСН-фаЛпы, находящиеся на дисковых УВВ, можно вызывать на выполнение специаль- ной командой BATCH. Команда BATCH имеет формат <СФ> [<параметры>] и служит для чтения с дискового тома указанного в парамет- ре СФ' ВАТСН-файла и запуска его на выполнение с пере- дачей ему значений для формальных параметров, если такие предусмотрены в данном пакетном файле. Параметр *СФ' указывает имя ВАТСН-файла без расширения его имени, а 'па- раметры' указывают значения для формальных параметров вызываемого пакетного файла. Если указанный файл не найден в текущем каталоге, то система ищет его в катал j- гах, указанных в последней выполнявшейся команде PATH. Прерывание выполнения ВАТСН-файла по клавишам 'CTR + + S/В инициирует запрос пользователю на прекращение пакета команд. Пользователь получает возможность либо продолжить работу пакета команд, либо завершить ее и пе- рейти в состояние системы. ВАТСН-файл в качестве послед- ней может содержать команду BATCH, что позволяет орга- низовать выполнение цепочек ВАТСН-файлов. До заверше- ния выполнения ВАТСН-файла нельзя снимать с УВВ дискету с этим файлом. Для организации ВАТСН-файлов можно использовать до 10 формальных параметров, имеющих вид %К (К=0~^9). Эти параметры при загрузке ВАТСН-файла на выполнение заменяются фактическими значениями из ВАТСН-команды, вызывающей этот пакетный файл. Формальный параметр %0 всегда заменяется именем ВАТСН-файла и предшествую- щим ему именем дисковода (если оно указано в ВАТСН- команде), т. е. параметр %0 копирует команду BATCH без параметров. Все параметры в ВАТСН-команде являются позиционными и разделяются пробелами. Отсутствующие параметры заменяют соответствующие им формальные па- раметры в ВАТСН-файле пустыми символьными значения- ми, но не пробелами. Формальные параметры нельзя ис- пользовать в системном пакетном файле AUTOEXEC.BAT, который запускается автоматически. Дальше рассматрива- ются остальные пакетные команды системы АДОС, позво- ляющие управлять работой пакета команд. Все эти коман-
дь1 можно использовать и вне ВАТСН-файлов, но особого смысла это не имеет, за редким исключением. Команда ECHO имеет формат ECHO {ON I OFF I <сообщение>} и служит для управления выводом на системное устройство вывода выполняемых команд ВАТСН-файла. Параметр 'ON(OFF)' разрешает (запрещает) вывод на системное устройство вывода выполняемых команд пакета. При наличии параметра <сообще- ние> оно выводится независимо от состояния ECHO (ON или OFF). Команда без параметров выводит состояние ECHO. Ис- пользование команды ECHO вне пакета команд приводит к по- давлению вывода метки системы и информации по коман- де REM. Команда SHIFT [комментарий] служит для расширения на единицу числа используемых в ВАТСН-файле формальных параметров. Каждое новое вхождение команды SHIFT в пакет сдвигает на единицу нумерацию формальных параметров, т. е параметр %К становится параметром %(К+1). Команда GOTO имеет формат GOTO :<метка> и служит для передачи управления командной строке пакета содержащей указанную в ней "метку". Метка различается пер- выми 8-ю символами, перед ней стоит знак двоеточия (:). При отсутствии в пакете команд указанной метки выдается соот- ветствующее диагностическое сообщение, выполнение пакета команд прекращается с переходом в состояние системы. В про- тивном случае работа пакета продолжается с командной стро- ки, идентифицируемой указанной меткой. Команда FOR имеет формат FOR % <V> IN (<список>) DO <команда (%V)> и служит для организации циклического выполнения указанной в ней команды с подстановкой вместо входящего в нее фор- мального параметра/%у" поочередно значений из указанного списка . Элементы 'списка' разделяются пробелом, а в ка- честве последнего элемента списка' может использоваться комментарий, не содержащий символов >' и '<'. Команда FOR не допускает вложений и при ее выполнении генерируется вы- полнение указанной в ней 'команды' системы с поочередно подставляемыми в ее тело вместо параметра "%у" фактических значений из 'списка'. В параметрах список' и 'команда (%V)"
допускается использование обобщающих символов, относя- щихся к спецификаторам файлов. Относительно команды FOR следует сделать следую- щее замечание. При использовании в ее теле любой другой команды системы, допускающей параметр ’комментарий*, возможно организовать многократное выполнение команды при неизменных ее фактических параметрах. Например, по команде А> FOR %К IN (1 1 1) DO DIR В: %К три раза выводится содержимое каталога тома на УВВ 'В', а по команде А> FOR %R IN (A A A) DO SHIFT %R А> SHIFT А А> SHIFT А А> SHIFT А трехкратное выполнение команды SHIFT позволяет увеличить диапазон используемых в пакете команд формальных парамет- ров с (0%+9%) до (1%+12%). Следующий пример иллюстрирует вывод на экран содержимого файлов REM, FAIL.BAS и ТТТ, рас- положенных на УВВ 'С*, FOR %R IN (REM FAIL.BAS TTT) COPY C:%R CON. Команда IF имеет формат IF [NOT] <условие> <команда> и служит для организации условного выполнения команд системы, как правило, команд пакета. Указатель ’NOT* заме- няет условие на противоположное. Параметр 'команда’ идентифицирует команду, которая выполняется при истинно- сти 'условия’. Параметр 'условие' имеет следующие три формата: (1) ERRORLEVEL п, где п-число. Условие' полагается истинным, если предыдущая программа или команда системы выработала код возврата, не меньший чем п (команды системы, кроме FORMAT, BACKUP и RESTORE, не вырабатывают кодов возврата); (2) <цепочка 1>==<цепочка 2>. В качестве 'цепочек' могут быть любые строки символов. 'Условие' полагается истинным при совпадении обеих 'цепочек'. В 'цепочках' различаются заглавные и строчные буквы, в них можно использовать формальные параметры %п;
(3) EXIST <список СФ>. 'Условие', полагается истинным, если хотя бы один указанный в 'списке' файл существу- ет. При этом в спецификаторах файлов 'списка' допуска- ется использование обобщающих символов. Примеры использования трех форматов пакетной команды IF: 1 FORMAT B:/V £ IF NOT ERRORLEVEL 1 COPY C.AVZ.* B:\ $ REM Конец пакетного файла Данный пакетный файл форматирует том на УВВ 'В' и в зависимости от кода завершения (КЗ) команды FORMAT либо копирует (КЗ=0) файлы AVZ.* с УВВ 'С' на подготов- ленный том на УВВ 'В', либо завершает работу; 2. IF 1==%1 COPY BJNIT*.* CON -• IF 2==%1 DEL B JNIT*.* REM Конец пакетного файлд IF.BAT Данный пакетный файл с именем IF.BAT в зависимости от определения ВАТСН-команды IF 1 или IF 2 соответ- ственно, выводит файлы INIT*.* на экран или удаляет их на 'В'; 3. IF EXIST B:AGN.* DEL B:AGN.* COPY C:RSV.* B'.AGN.* REM Конец пакетного файла EXIST.BAT Данный пакетный файл удаляет файлы AGN.* (если они есть) на томе 'в' и вместо них с тома 'С' копирует файлы RSV.* под именами удаленных файлов. Наряду с перечисленными в ВАТСН-файлах можно использо- вать и другие команды системы. Из описания пакетных команд системы нетрудно убедиться, что средство ВАТСН-файлов позволяет пользователю органи- зовать достаточно сложную и гибкую систему пакетной об- работки заданий подобно тем, которые существуют на более старших классах ЭВМ (ЕС и СМ ЭВМ) [19,53,54]. Данное сред- ство ВАТСН-файлов совместно с другими системными сред- ствами позволяет без дополнительного программирования создавать программные средства из уже имеющихся програм- мных компонент как системных, так и проблемных. Наконец, на основе ВАТСН-файлов можно создавать достаточно разви- тые командные языки управления работой системы. Для ил- люстрации основных возможностей ВАТСН-файлов приведем несколько комплексных примеров, представляющих и само- стоятельный интерес. В первом примере созданы два ВАТСН-файла с именами G-SERVIS и SERVIS 1, оба с 8-ю формальными параметрами. По ВАТСН-команде запускается пакет G-SERVIS с необходимы- ми значениями для формальных параметров, смысл которых ясен из прилагаемого ниже листинга:
CLS ECHO ON REM МЕНЮ: REM — REM 1. Инициализация дискет - 1 REM 2. Копирование файлов - 2 REM 3. Слияние двух файлов - 3 REM 4. Копирование дискет -4 REM 5. Создание подкаталогов -5 REM 6. Вывод файлов на принтер -6 REM 7. Переименование файлов - 7 REM 8. Удаление подкаталогов тома -8 M ************************************************ REM Параметры %N имеют значения: %1 - вид работы (VS); REM %2-имя УВВ1;%3-имя1 файла;%4-имя2 файла;%5-имя УВВ2; REM %6-путь к подкаталогу;%7-имя УВВЗ;%8-имяЗ файла PAUSE Нажать любую клавишу АЦК... В: SERVIS1 %1 %2 %3 %4 %5 %6 %7 %8 Данный пакетный файл выводит меню возможных работ и наз- начение всех используемых формальных параметров. После чего последняя в файле ВАТСН-команда загружает пакетный файл SERVIS1 с передачей ему значений для формальных па- раметров. В зависимости от значений формальных параметров выполняется одна из 8-ми сервисных функций. Листинг пакет- ного файла SERVIS1 имеет следующий вид: ECHO OFF IF 1==%1 A:FORMAT %2 IF 2==%1 COPY %2:%3 %5:%4 IF 3==%1 COPY %2:%3 + %5:%4 %7:%8 IF 4==%1 A:DISKCOPY %2: %5: IF 5==%1 A:PRINT %2:%6 IF 6==%1 MKDIR %2:%6 IF 7==%1 REN %2:%3 %4 IF 8==%1 RD %2:%6 REM Заказ выполнен-для продолжения работы нажать любую PAUSE клавишу и запустить ВАТСН-команду 'G-SERVIS' В качестве конкретного примера использования описанных пакетных файлов приводится инициализация дискеты на УВВ 'В', демонстрирующая и принцип передачи значений формаль- ных параметров: В> G-SERVIS 1 В 3 4 5 6 7 8 В> REM 8. Удаление подкаталогов тома - 8 В> REM ************************************** В> REM Параметры N имеют значения: %1-вид работы (1+8);
B> REM В-имя УВВ1;3-имя1 файла;4-имя2 файла; 5-имя УВВ2 В> REM 6-путь к подкаталогу; 7-имя УВВЗ;8-имяЗ файла В> PAUSE Нажать любую клавишу АЦК ... Нажмите любую клавишу... В> B:SERVIS1 1В 3 4567 8 В> ECHO OFF Вставьте новую дискету в устройство В: и нажмите любую клавишу Аналогичным образом можно создавать различного назначения ВАТСН-файлы, позволяющие автоматизировать наиболее часто используемые процедуры обработки информации, сервисные и управления системой. Для обычных пользовательских прог- раммных систем в ВАТСН-файлы можно погружать инструкции по работе оператора с данными системами. 4. 4. 7. Команды работы с файлами Основным назначением команд данной группы является обеспечение пользователя наиболее важными функциями по обслуживанию файловой системы. Ряд вышерассмотренных команд системы также используется для обслуживания файлов наряду с выполнением других функций. Рассматриваемые же здесь команды в подавляющем числе случаев используются именно для обслуживания файловой системы. Команда CHKDSK имеет формат [ИУ:] [путь] CHKDSK [СФ] [/F] [/V] [комментарий] и служит для анализа файлов, каталогов тома и таблицы FAT на заданном или активном дисковом томе с выдачей сообще- ния о состоянии диска и распределении памяти на нем. Коман- да позволяет также корректировать на диске информацию, от- носящуюся к каталогам, файлам и таблице FAT. Команда CHKDSK выводит информацию и о скрытых файлах каталога тома. Параметры [ИУ:] [путь] указывают путь к файлу с именем CHKDSK.COM, содержащему программу. Следует помнить, что указанное в команде дисковое УВВ должно отличаться от того, С которого считывается файл, CHKDSK.COM. При наличии параметра СФ* команда, CHKDSK выводит число экстентов, занимаемых указанным в СФ* файлом. Параметр допускает использование обобщающих символов. Параметр /F позволяет произвести с диском корректирующие действия, если обнаруживаются ошибки в каталоге тома или табли- це FAT. Если параметр '/F' отсутствует, команда CHKDSK ана- лизирует ошибочные ситуации на диске, выдает по ним диаг- ностические сообщения, но корректировки не производит.
Параметр 7v' служит для вывода всех файлов (включая и скрытыа)/на заданном диске и путей к ним. При обнаружении на диске кластеров, не принадлежащих файлам каталога, команда выдает запрос (если в ней предусмотрен параметр '/F') на организацию из них файла. В случае положительного ответа команда CHKDSK из этих кластеров организует файл с именем FILExxxx.CHK и помещает его в главный каталог заданного диска. Результат работы команды CHKDSK можно вывести в файл, если в ней не использовался параметр 7f\ Команду CHKDSK рекомендуется периодически применять к дискетам для проверки сохранности их файловой структуры, а также удаления на дисковом томе так называемых „беспри- зорных” кластеров, о которых подробнее будет сказано в по- следнем разделе настоящей главы. Приведем примеры исполь- зования команды CHKDSK; 1. А> CHKDSK [комментарий] 362496 байтов на диске 22528 байтов в 2 скрытых файлах 268288 байтов в 57 файлах пользователя 71680 байтов доступно 524288 всего байтов --------. ... 426144 байтов свободно -----’ ' ' 2. А> CHKDSK В: /F 362496 байтов на диске 1024 байтов в 1 файле пользователя 361472 байтов доступно Текст (А) примера 1 3. А> CHKDSK В: /V Каталог В: В: \VW.FMT Текст примера 2 4. А> CHKDSK B:\VW.* Текст примера 2 5. А> CHKDSK В: >B:FILE.COM А> PRINT B:FILE.* В первых четырех примерах демонстрируется использование команды CHKDSK при различных вариантах ее параметров и выводимая командой информация. Наряду с информацией, относящейся к файлам и дискам, команда выводит данные о использовании оперативной памяти ПЭВМ. В пятом примере демонстрируется помещение результата выполнения команды CHKDSK в файл FILE.COM на устройстве В’ и вывод содержи- мого этого файла на принтер по команде PRINT. Команда EXE2BIN имеет формат [ИУ:] [путь] EXE2BIN <СФ1>[<СФ2>] [комментарий]
и служит для преобразования файлов с расширением имени .EXE в файлы с расширением .СОМ или .BIN. Параметры [ИУ:] [путь] указывают путь к файлу EXE2BIN.EXE, содержащему программу преобразования. Параметр СФГ определяет преобразуемый файл, а пара- метр 'СФ2' - результат преобразования. Умолчание расшире- ния имени в СФ1 полагает его равным .EXE, а в 'СФ2' - -BIN. При отсутствии имени файла в параметре 'СФ2' оно берется из параметра СФГ. Преобразуемый файл должен быть правиль- ным .ЕХЕ-файлом, созданным редактором связей LINK, и по длине не превышать 64 Кбайтов. Команда EXE2BIN использует- ся, как правило, для преобразования ассемблеровских загру- зочных модулей в .COM-файлы и подробно описана в [17]. В качестве примера рассмотрим перевод в .СОМ- и .BIN-файлы системных .ЕХЕ-файлов: 1. А> EXE2BIN PRN10 В: PRN.COM А> EXE2BIN PRN10 В: PRN.BIN / 2. А> EXE2BIN SORT В: SORT.COM Неконвертируемый файл и необходим адрес сегмента 3. А> EXE2BIN FIND В: FIND.COM Текст примера 2 4. А> EXE2BIN FIND В: FIND.BIN Текст примера 2 5. А> EXE2BIN VW0 В: VWO.COM Текст примера 2 6. А> EXE2BIN R1 В: R1.COM Текст примера 2 Из примера следует, что конвертируется в .СОМ- и .BIN-фай- лы только системный файл PRN10.EXE, обеспечивающий ра- боту принтера. Остальные файлы неконвертируемы, таК как не являются сегментно переместимыми, т. е. входящие в них программы содержат сегменты с абсолютными ад- ресами. При создании программного файла следует иметь в виду, что .COM-файлы проще по структуре, компактнее и быстрее загружаются в память, чем .ЕХЕ-файлы. Поэто- му предпочтительнее, если это возможно, использовать именно этот формат для организации программных файлов прикладных задач. Команда MKDIR (MD) имеет формат (MKDIR I MD) [D:] <путь> [комментарий] У служит для создания подкаталога на заданном параметром дисковом томе. Параметр D:* необязателен и в его отсут- ствие по умолчанию принимается активный дисковод. Второй параметр команды является обязательным и указывает путь
к создаваемому подкаталогу. Задаваемый путь может начи- наться сплавного или активного каталога тома. Последнее имя в цепочке имен параметра ’путь' и есть имя создаваемого подкаталога. Подкаталог, в отличие от главного каталога, может распо- лагаться на нескольких экстентах тома, его размер ограничен только размером свободной памяти на томе. Количество под- каталогов на томе не ограничивается, но максимальная длина пути от главного каталога тома до любого его подкаталога не должна превышать 63 символа, включая и разделители. Рассмотрим примеры создания подкаталогов: 1. А> MKDIR B:\TABLE А> DIRB: Том на устройстве В без метки Каталог В:\ PRN10 BIN 2066 1-01-80 TABLE <DIR> 1-01-82 12:35а (А) 12:46а — 2 файла 358400 байтов свободно 2. А> DIR >B:\TABLE\FILE 3. А> MD B:\TABLE\STRUCTUR А> DIR В: Текст (А) примера 1 2 файла 354304 байтов свободно 4. А> DIR B:\TABLE Том на устройстве В без метки Каталог B:\TABLE <DIR> 1-01-83 12:45а <DIR> 1-02-83 12—41а FILE 2432 1-02-83 12:56а STRUCTUR <DIR> 1-01-83 12:35а 4 файла 354304 байтов свободно 5. А> MKDIR B:\TABLE\PTIP\COMPUTER Невозможно создать каталог Примеры 1 и 3 демонстрируют создание подкаталогов на УВВ 'в' и листинги главного каталога тома на нем. В приме- ре 2 результат выполнения команды DIR заносится в файл FILE в подкаталог TABLE. В примере 4 выводится подкаталог TABLE и, наконец, в примере 5 демонстрируется невозмож- ность создания более одного дополнительного уровня подка- талогов. Команда RENAME (REN) имеет формат {RENAME I REN}<CO> <ИФ> [.<РФ>] [комментарий] и служит для переименования файлов. Файлы, указанные в па- раметре 'СФ', получают имена и расширения из второго пара-
метра команды. Допускается использование в параметрах обобщающих символов, при этом выполняется их согласован- ная подстановка. В процессе выполнения команды RENAME осуществляется проверка на однозначность вхождения в те- кущий или активный каталог файла с данными именем и его расширением. При нарушении этого условия команда RENAME прекращает свою работу. Приведем несколько примеров ис- пользования команды RENAME: 1. А> RENAME PRN10.BIN BINTABL.COM [переименование] 2. А> RENAME B:\GRODNO TALLINN.COM 3. А> REN B:\TABLE\FILE PL.COM Результаты выполнения команды RENAME легко проверяются командой DIR, выводящей ка/алог тома. Команда RMDIR (RD) имеет формат {RMDIR I RD} [D:] <путь> [комментарий] и служит для удаления,указанного параметром 'путь' каталога тома на устройстве и:'. Удаляемый каталог должен быть пустым, т. е. содержать только элементы (.) и (..). Нельзя уда- лить с помощью команды RMDIR главный или текущий каталог тома. Следует помнить, что удаляемый каталог может содер- жать скрытые файлы, не выводимые по команде DIR, но выво- димые по команде CHKDSK. Примеры, использования команды RMDIR для удаления каталогов на 'В': 1. А> RMDIR В:\ [Удаление главного каталога] Неверный путь. Нет каталога или каталог не пуст 2. А> DIR B:\TABLE\STRUCTUR Том на устройстве В без метки Каталог B:\TABLE\STRUCTUR <DIR> 1-02-85 12:45а <DIR> 1-02-85 12:45а 2 файла 357376 байтов свободно А> RD B:\TABLE\STRUCTUR A: DIR B:\TABLE\STRUCTUR Том на устройстве В без метки Каталог B:\TABLE Файл не найден в первом примере демонстрируется невозможность удаления главного каталога тома. Во втором примере удаляется пустой подкаталог STRUCTUR, состояния подкаталога до и после вы- полнения команды RMDIR проверяются командой DIR. Команда TYPE имеет формат TYPE <СФ> [комментарий]
и служит для вывода заданного в параметре.'СФ' файла на стандартное устройство вывода. В параметре 'СФ' недопусти- мо использование обобщающих символов. При выводе файла обрабатываются только знаки возврата каретки, перевода строки и табуляции. Для вывода файла на печать можно исполь- зовать совместно с командой ТУРЕ функцию печати экрана (клавиша PrS) или перенаправить вывод файла по ТУРЕ на пе- чать. Команду ТУРЕ целесообразно применять только к тексто- вым файлам, т. е. файлам данных или программ в коде ASCII. Рассмотрим несколько примеров: 1. А> TYPE CONFIG.SYS [вывод конфигурации системы] DEVICE=ANSI.SYS ---------- DEVICE=VDISK.SYS 64 512 16 BUFFERS=4 FILES=1O --- (A) 2. A> TYPE CONFIG.SYS > PRN Текст (А) примера 1 В первом примере команда TYPE выводит системный файл CONFIG.SYS на экран дисплея, тогда как во втором - вывод командыТУРЕ переадресуется на принтер с помощью средства прямой связи стандартных устройств ввода и вывода, о которых говорилось выше. Команда СОРУ имеет формат СОРУ [А#В] <СФ1> [+ <СФ2> [А#В]... [СФк] [А#В] [/V] А#В = {</А> I </В>] и служит для копирования указанных файлов с возможностью их переименования, слияния файлов, копирования данных фай- ла на устройство вывода и копирования входных данных в за- данный пользователем файл. Параметр 'СФ1' определяет копируемый файл (файлы) и в нем обязательно присутствие имени файла, допускающее обобщаю- щие символы. Параметр 'СФк' определяет имя копии (имена копий), присутствие в нем имени файла необязательно, так как в этом случае имена и их расширения берутся из параметра 'СФ1'. Отсутствие устройства и пути в параметре 'СФк' соот- ветствует умолчанию системы. Промежуточные параметры + СФ2 и т. д., соединенные знаком + , указывают на операцию объединения файлов. Параметр Tv' должен быть последним в командной строке и задает режим записи на диск с проверкой на весь период выполнения команды СОРУ. Альтернативные параметры 7 А | и 7в' определяют способ обработки командой СОРУ копируеЛ мых файлов. Каждый из этих параметров действует, начинал* с параметра ГСФ\ за которым следует в команде СОРУ, я ДЯ следующего параметра 7а* или 7в . Смысл параметров /А и /В отражен в табл. 10.
Копируемый файл Файл - копия /А Файл текстовый и первое вхождение в него кода ”1А” ’конец файла’счита- ется copy как конец данных /А В конце копии формируется код ”1А” - 'конец файла* /В Файл бинарный и копируют- ся все его знаки /В В конце копии не формируется код ”1А” конца файла Умолчанием, действующим до первого появления параметров 7а' и 7в', будет 7в\ если в команде СОРУ не указано слияния файлов (знак +'), и /А* - в противном случае. Команда СОРУ копирует только файлы указанного или ак- тивного каталога тома. Копирование из устройства системно- го ввода или на устройство должно выполняться в текстовом режиме с параметром 7а*. Нельзя копировать файлы с ус- тройств или на устройства с логическими именами СОМ и AUX. Если в спецификаторе копируемого файла использовались обобщающие символы, то имена копируемых файлов выводят- ся на экран дисплея. Команда СОРУ полагает операцию копи- рования успешной, если обнаружен и скопирован хотя бы один файл, определенный параметром *СФ1* команды, в противном случае выдается соответствующее диагностическое сообще- ние. Следует отметить, что при копировании не сохраняется признак файла только для чтения*. Команда СОРУ имеет три режима работы: (1) Копия файла получает имя и расширение имени копируе- мого файла СОРУ <СФ1> [D:] [путь] Например, по команде А> СОРУ *.СОМ В:\ копируются с диске- ты на УВВ *А* все файлы с расширением имени .СОМ в главный каталог тома на УВВ 'в' под своими исходными именами. Если в принимающем каталоге уже есть файл с таким же именем, как и вновь создаваемый, то происходит замещение старого файла новым. (2) Осуществляется копирование файлов с изменением их имен СОРУ <СФ1><СФ2> В данном режиме можно вместо параметров указывать логи- ческие имена устройств системы, что позволяет использовать команду СОРУ для передачи данных между устройствами си- Стемы. Например, по команде COPY CON В: \RLE.942 копируют- Ся данные с клавиатуры в файл FILE.942 на томе УВВ 'В. Для
завершения ввода информации с клавиатуры нужно нажать клавиши F6' + ПУСК* или 'CTR' + '7! + 'ПУСК'. По команде COPY CON LPT1 осуществляется копирование вводимых с кла- виатуры данных на печать. Конец вводимых данных идентифи- цируется подобно предыдущему примеру. (3) Осуществляется слияние текстовых или бинарных фай- лов, управляемое параметрами 7а' и 7в'; спецификаторы объединяемых файлов соединяются в команде COPY знаком '+' (плюс). При слиянии файлов в каталог тома заносятся дата и время копирования, так что командой COPY можно обновлять дату и время, приписанных файлам. Рассмотрим несколько приме- ров использования команды COPY: 1. А> COPY CONFIG.* В: CONFIG.BAK CONFIG.SYS 2 файла скопировано 2. А> COPY AUTOEXEC.* + CONFIG.* B:NEWFILE.AVZ AUTOEXEC.BAT CONFIG.BAK CONFIG.SYS 1 файл скопирован 3. A> COPY AUTOEXEC.BAT + CONFIG.SYS В: /V AUTOEXEC.BAT CONFIG.SYS 1 файл скопирован 4. A> DISK.COM > A A> DIR Том на устройстве А без метки Каталог А:\ CONFIG SYS 210 1-01-83 12:35а А 0 6-14-88 12:16р 2 файла 338944 байтов свободно А> COPY CONFIG.SYS + А CONFIG.SYS А 1 файл скопирован А> DIR Том на устройстве А без метки Каталог А:\ CONFIG SYS 210 6-14-88 12:45р А 0 6-14-88 12:16р 2 файла 338944 байтов свободно 5. А> COPY CON PRN Вывод с помощью команды COPY и замены файлов устройствами текста, вводимого с консоли
6. A> COPY B:\FILE Контрольный пример создания файла на дискете с кон?* соли посредством команды COPY ~ Z 1 файл скопирован А> COPY B:\FILE PRN Контрольный пример создания файла на дискете с консоли посредством команды COPY 7 А> COPY CONFIG.SYS PRN 8 А> COPY В:*.* С: 9 А> COPY CONFIG.* + В:РРРР.* + В:ТТТ.* B:DDD.SUM Ю А> COPY BiDDD.SUM + CON В: В примере 1 на УВВ 'В' копируются два системных файла с оди- наковыми именами, но разными их расширениями. В примере 2 осуществляется слияние двух системных файлов и создание из них на УВВ 'В' файла с новым именем. В примере 3 осуще- ствляется объединение двух системных файлов и запись ре- зультирующего файла на УВВ 'В' с проверкой записи. Новый файл получает имя первого из соединяемых файлов. В приме- ре 4 продемонстрировано использование команды COPY и пустого файла А для изменения в каталоге тома даты и вре- мени создания системного файла CONFIG.SYS. В документа- ции [17] аналогичная операция описана неверно. В примере 5 команда COPY применяется для вывода на принтер текста, вводимого с консоли ПЭВМ. В примере 6 команда COPY исполь- зуется для создания текстового файла на дискете на основе вводимой информации с консоли и последующего вывода на принтер с дискеты созданного файла. Пример 7 демонстрирует использование команды COPY для вывода на принтер файла, находящегося на диске, пример 8 - использование команды COPY для копирования всех файлов тома на УВВ 'В' в АДОС-раз- дел жесткого диска типа Винчестер* на УВВ с именем 'С'. В примере 9 демонстрируется объединение файлов, располо- женных на разных УВВ, и помещение объединенного файла DDD.SUM на том УВВ В*. Пример 10 иллюстрирует пополнение файла DDD.SUM с консоли и размещение расширенного файла под тем же именем на том же томе (исходный файл замещает- ся новым). Наконец, приведем без пояснений наиболее типич- ные случаи копирования с использованием команды COPY: COPY CON <СФ> COPY CON AUX COPY <СФ> CON COPY <СФ> AUX COPY <СФ> LPTk COPY AUX CON COPY CON PRN - формирование файла с консоли; - ввод данных в первый адаптер асин- хронной связи с консоли; - вывод файла на экран дисплея; - вывод файла через первый адаптер асинхронной связи; - вывод файла на к-й принтер системы; - вывод информации с первого адаптера асинхронной связи на экран дисплея; - вывод информации с консоли на печать.
На этом завершается рассмотрение команд системы АДОС, За исклкУчёнием команды EDLIN, к изучению которой мы и гъе- реходим в следующем разделе. 4.5. РАБОТА СО СТРОКОВЫМ РЕДАКТОРОМ EDLIN Система АДОС располагает сервисным средством для соз- дания, редактирования и вывода текстовых файлов или файлов исходных модулей программ. Для этих целей служит команда EDLIN, обеспечивающая работу с одноименным строковым ре- дактором. Основные функции EDLIN состоят в следующем: - создание текстовых файлов и их сохранение на дисках; - модификация файлов и сохранение как исходных, так и мо- дифицированных файлов; - удаление, редактирование, добавление и вывод строк файла; - контекстный поиск текста в строках файла для его замены или удаления. Редактор EDLIN работает с текстовыми файлами, содержащими строки переменной длины не более 253 символов. Номера строк генерируются и выводятся при работе редактора, но в файлах они отсутствуют. При удалении или вставке строк нумерация строк модифицированного файла соответствующим образом корректируется. Команда EDLIN, запускающая редак- тор строк, имеет формат [ИУ:] [путь] EDLIN <СФ> [/В] [комментарий) Параметры [ИУ:] [путь] указывают путь к файлу EDLIN.COM, со- держащему редактор строк. Параметр СФ* определяет специ- фикатор файла, с которым будет работать редактор. Параметр /В' позволяет обрабатывать файл, не принимая во внимание маркеры конца файла. Если указанный в команде EDLIN файл не существует, то он создается на заданном томе, и на экране дисплея вслед за меткой редактора строк (*) выводится сообщение 'Новый файл'. После чего пользователь может формировать содержи- мое вновь создаваемого файла с клавиатуры (команда I). Если же файл уже существовал на диске, то он загружается в раздел памяти пользователя до заполнения 75% ее объема. При помещении в этот объем всего файла выдается сообщение 'Конец вводного файла'. После метки редактора (*) можно приступать к редактированию вызванного файла. При невоз- можности загрузить в память весь файл редактор загружает строки файла на максимально допустимый объем памяти (75°о) и выдает свою метку. После чего можно отредактировать за- груженную часть файла, переписать ее на диск и после этого загрузить в память следующую порцию текстовых строк файла (команды А и W). После завершения работы с файлом по
команде Е сохраняется исходный файл, получивший расшире* ние имени '.ВАК', и записывается на диск новый фацдьр имене’м и расширением, указанными в команде EDLIN. В связи с этим командой EDLIN нельзя редактировать фай- лы с расширением имени '.ВАК', так как они воспринимаются редактором строк как копии. Однако при необходимости тако- го редактирования можно переименовать файлы, изменив рас- ширения их имен, и применить к ним команду EDLIN. Перехо- дим теперь к рассмотрению команд строкового редактора. Параметр 'с* (строка) команд редактора используется для указания номера строки, который определяется одним из трех способов: - десятичное целое число в интервале 1+65529; - символ (#) указывает строку, следующую за последней строкой редактируемого файла в памяти; - символ (.) указывает текущую строку файла в памяти. В качестве текущей строковый редактор рассматривает стро- ку, подвергшуюся последним изменениям. Такая строка при выводе помечается символом (*) между ее номером и первым символом. Номер строки должен отделяться от ее содержимого пробелом или запятой. Каждая команда редактора строк, кроме команды редактирования строки, идентифицируется одной буквой латинского алфавита, которая может вводиться как прописной, так и строчной буквой. Для удобства визуального контроля рекомендуется разде- лять команду и ее параметры разделителями (пробел или за- пятая), однако разделитель необходим только между двумя смежными номерами строк. , Ввод команд осуществляется после нажатия клавиши *ПУСК', а выполнение команды можно прекратить по клавишам CTR' + 'S/В'. Команды, выводящие на экран дисплея большие объемы информации, можно при- останавливать нажатием клавиш 'CTR + 'NLK'. Этот способ можно использовать для удобства перлюстрации выводимой информации на экран. Последующее нажатие любой клавиши возобновляет вывод информации на экран дисплея, т. е. вы- полнение приостановленной команды строкового редактора. Клавиши управления и редактирования используются анало- гично работе в режиме системы. К номерам строк редактируе- мого файла можно, ссылаться относительно текущей строки, при этом символ '+' перед номером строки указывает на стро- ку за текущей, а символ - на строку перед текущей. Уп- равляющие символы можно включать в текст или в строки команд поиска (S), или замены (R). Для этого следует нажать клавиши 'CTR' + 'V' и ввести управляющие символы на верхнем регистре., Например, последовательное нажатие клавиш CTR + V и 'z генерирует управляющий символ конца фай- ла (’CTR' + 'Z'). в одной командной строке редактора можно вводить не- сколько команд, однако при вводе команды редактирования единственной строки ее следует отделить точкой с запятой (;)
№ п/л Команда Назначение команды 1 А Запись строк из файла в память 2 с Копирование заданных строк текста 3 D Удаление указанных строк текста 4 [<с>] Редактирование заданной <с>-строки 5 Е Завершение команды edlin и сохранение исходного и выходного файлов 6 1 Вставка указанных строк В’ текст 7 L Вывод указанных строк текста 8 М Перемещение указанных строк текста 9 Р Вывод на экран страницы текста 10 О Завершение команды edlin без сохранения введен- ных корректировок 11 R Изменение строк текста согласно заданному поль- зователем контекста 12 S Поиск в тексте заданного контекста 13 т Копирование строк из заданного файла в редакти- руемый текст 14 W Запись на диск указанных строк из памяти, начиная с первой строки от остальной части командной строки. Команды поиска (S) и замены (R), входящие в командную строку, должны заканчи- ваться нажатием клавиш 'CTR' + 'Z' или функциональной кла- виши Тб' вместо клавиши 'ПУСК'. В остальных случаях коман- ды следуют в командной строке одна за другой без каких-либо разделителей. Однако в целях визуального контроля рекомен- дуется все же оставлять между ними по крайней мере один пробел. После общей информации по редактору EDLIN и его командам переходим к их более детальному описанию. Пол- ный набор команд редактора EDLIN отражен в сводной табл. 11; Из приведенной таблицы нетрудно убедиться, что набор команд редактора EDLIN позволяет проводить достаточно ши- рокий спектр работ с текстовыми файлами, используемыми для большого числа применений. Переходим теперь к подроб- ному описанию команд строкового редактора. При обсуждении данных команд редактора под редактируемым файлом везде подразумевается файл, определенный в команде EDLIN. Команда <[к] А> добавляет указанное необязательным па- раметром 0 < к < 65530 число строк из файла на диске в ре- дактируемый текст, находящийся в ОП. Строки файла добавля- ются вслед за текущей строкой редактируемого файла. Данная команда имеет смысл при редактировании больших по объему файлов, не помещающихся целиком в ОП. С помощью ее и команды записи на диск (W) можно легко организовать по- блочное редактирование файлов больших размеров. При отсут- ствии параметра 'к в команде <А>, загружаются строки из
указанного файла до заполнения памяти на 75%. Если память уже заполнена на 75%, то команда <А> не вызывает никаких действий по загрузке файла. При загрузке последней строки файла выводится сообщение о конце файла. Например, по команде <100 А> из файла на диске считывается в редактируе- мый текст в ОП 100 очередных строк. Команда <[С1 ], [С2], [СЗ], [,К] С> позволяет копировать строки из диапазона С1*С2 и помещать их пере^ строкой с но- мером ОЗ К раз. По умолчанию для параметра К' полагается значение 1, а для параметров *С1* и/или *С2* - номер текущей строки редактируемого текста. После копирования строки редактируемого файла соответственным образом перенумеру- ются. Номера строк в команде <С> не должны перекрываться. Текущей строкой после копирования становится первая ско- пированная строка, номер которой будет СЗ в новой нумера- ции. Например, по команде <10,20,100 С> перед "Строкой с но- мером 100 помещается копия блока строк с номерами 10-20 и после перенумерации редактируемого текста текущей становится строка с номером 100. Команда <[С1] [,С2] D> удаляет строки редактируемого текста с номерами С1*С2, и текущей становится строка, сле- дующая за удаленными строками, т. е. строка с номером С1 после перенумерации текста. По умолчанию для параметров С Г и *С2 команды <D> принимается номер текущей строки. Например: ,100 D - удаление всех строк текста, начиная с текущей до строки 100 включительно; 200, D - удаление всех строк текста, начиная со строки 200 до текущей строки; D - удаление только текущей строки текста. Команда [С] служит для редактирования строки текста с но- мером С. При использовании вместо номера строки С симво- ла (.) на редактирование вызывается текущая строка, тогда как простое нажатие клавиши ПУСК* (отсутствие номера стро- ки С) приводит к вызову на редактирование строки, следующей за текущей. После выполнения данной команды на экране дисплея появляются номер редактируемой строки и ее содер- жимое (эта строка теперь становится текущей), а в следующей строке экрана дублируется ее номер, после которого пользо- ватель может ввести новое содержимое строки. Редакти- рование строки осуществляется вышеописанными клави- шами управления и редактирования. Например, по команде <250 ПУСК*> вызывается на редактирование строка текста с номером 250, а по команде <. *ПУСК*> - текущая строка Текста. При нежелании сохранить скорректированную строку вместо клавиши ПУСК* следует нажать клавиши *CTR'+ S/B'
цди 'ESC'’ В этом случае корректируемая строка останется без изменения. Помещение курсора в начало редактируемой стро- ки и нажатие клавиши 'ПУСК* эквивалентно нажатию клавиш 'ESC' или 'CTR' + 'S/В*. Если же курсор находится внутри ре- дактируемой строки, то нажатие клавиши 'ПУСК' стирает оста- ток строки за курсором. Команда <Е> завершает работу редактора EDLIN и сохраняет на диске отредактированный файл согласно спецификатору, указанному в команде EDLIN. Одновременно сохраняется (если он до этого существовал) и исходный файл, которому добав- ляется расширение имени '.ВАК'. После этого управление возвращается операционной системе. Если на диске оказалось недостаточно свободного места, то исходный файл не получает расширения имени '.ВАК*, а отредактированный файл записыва- ется неполностью и получает расширение имени '.DDD*. В ко- нец отредактированного файла записываются управляющие символы 'возврат каретки , 'перевод строки' и 'конец файла' "0D0A1A” (*CTR'+ 'Z'). Команда <С*1> служит для ввода в редактируемый текст строки непосредственно перед строкой с номером С. Перед созданием нового символьного файла следует выдать команду <1> без параметра. При отсутствии параметра С' или исполь- зовании в качестве его символа (.) полагается текущая строка текста. Указание в качестве *С' символа (#) или номера строки, большего существующего в памяти, приводит к вставке за последнюю строку текста, т. е. добавление строки в конец текста. В режиме вставки строк каждый раз на экран дисплея выводится номер вставляемой строки, после которого можно вводить сам текст строки. Каждое нажатие клавиши 'ПУСК* вводит очередную вставляемую строку в текст и выводит на экран номер следующей за ней строки. Выйти из режима встав- ки строк можно нажатием клавиш CTR' + 'S/В. После этого текущей становится строка, следующая за вставленной, даже если она последняя строка текста в памяти. Вставка строк внутрь редактируемого текста приводит к перенумерации его строк. Например, по команде <251 1> пользователь получает возможность вставлять строки после строки текста с номе- ром 250. Команда <[01] [,С2] L> позволяет выводить на экран дисплея строки редактируемого текста с номерами С1+С2; при этом текущая строка текста остается без изменения. По умолчанию для параметров *С1* и'С2^ команды <L> полагаются соответ- ственно значения *—11* и *+11* относительно текущей строки редактируемого текста. Например, по команде <,100L> на эк- ран дисплея выводятся строки текста с номерами (Т-11)+100, а по команде <L> - строки текста с номерами (Т-11)+(Т+11), где Т - номер текущей строки текста. Если в последнем при-
мере номер текущей строки текста окажется меньше 12, то выводятся первые 23 строки редактируемого текстов памятУ* Команда <[С1 ] [,С2] 'СЗ' М> служит для перемещения блока строк с номерами С1*С2 редактируемого текста на место перед строкой с номером СЗ. Умолчанием для параметров 'СГ и С2' является номер текущей строки текста. При указа- нии параметров команды <М> недопустимо перекрытие об- ластей перемещаемых строк. После перемещения строки редактируемого текста перенумеровываются и текущей ста- новится первая из перемещенных строк, т. е. строка с номе- ром СЗ+С1-С2-1. Например, по команде <10,15,100 М> строки текста с номерами 10*15 перемещаются в текст перед строкой с номером 100 и текущей (после перенумерации) становится строка с номером 94. Команда <[С1] [, С2] Р> служит для вывода страницы текста, ограниченной строками с номерами С1 и С2, на экран дисплея. Умолчанием для параметра 'С1' является номер строки текста, следующей за текущей, а для параметра 'С2' - число на 22 боль- шее значения параметра СГ. Например, по команде <Р> без параметров на экран выводятся 23 строки текста, следующие за текущей строкой. Только этим отличается команда <Р> от команды <L>. Команда <Q> без параметров служит для завершения ра- боты с редактором EDLIN без сохранения введенных до этого корректировок файла. После ввода команды <Q> на экран дисплея выводится запрос: „Прекратить (Y/N)?”, по ответу 'У' на который редактор завершает работу без сохранения всех ранее внесенных корректировок файла и без создания .ВАК-фай- ла. В противном случае на экране появляется метка редакто- ра (*) и с ним можно продолжить работу. Команда <R> строкового редактора имеет формат [С1] [,С2] [?] R [<текст 1>] ['Е6'<текст2>] и служит ^для контекстной замены редактируемого текста. Параметр текст Г является контекстом поиска, вместо кото- рого подставляется текст из параметра 'текст2'. Параметры С1 и С2' указывают диапазон строк, в которых будет осу- ществляться контекстная замена. По умолчанию для значений параметров 'сГ и 'С2' принимаются соответственно номер строки, следующей за текущей, и номер последней строки Редактируемого текста в памяти. Если отсутствует только параметр 'текст2', то из указанных строк текста удаляются все вхождения контекста текст 1*. При отсутствии в команде обоих параметров 'текст Г и 'текст2' значение для перво- г° из них берется из предыдущей команды <R> или <S>, а для
второго - из предыдущей команды <R>. Если при отсутствии в команде <R> параметров 'текст Г и 'текст2' до ее приме- нения не использовались команды <R> и <S>, то выводится сообщение: Не найден'. Это же замечание относится и к коман- де <S>, описываемой ниже. Команда <R> использует функ- циональную клавишу F6', однако при изменении ее функцио- нальной нагрузки следует нажать клавиши 'CTR' + 'Z'. Ис- пользование параметра ?' в команде приводит к выводу после каждой замены контекста запроса: 'Да?'. Ответ 'Y' на него сохраняет замену, в противном случае замена контекста от- меняется. В обоих случаях поиск следующего вхождения кон- текста продолжается со следующего символа той же строки редактируемого текста. Все изменения корректируемой строки отображаются на экране дисплея, и текущей становится послед- няя измененная строка текста. Например, по команде 1 R MS DOS <F6> MINIDOS во всех строках редактируемого текста, находящихся в памя- ти, происходит автоматическая замена контекста 'MS DOS' на новое содержание 'MINIDOS'. Текущей становится строка текста, которая последней подверглась такой корректировке. Команда <[01] [,02] [?] S [текст]> служит для поиска первой строки редактируемого текста из диапазона строк с номерами С1-С2, содержащей вхождение контекста 'текст'. Умолчание для параметров СГ и 'С2',аналогично случаю команды <R>. Если не указан параметр '?*, то на экран дисплея выводится первая найденная строка с контекстом 'текст' и становится текущей строкой текста. При использовании же параметра '?' на экран после вывода очередной строки, содержащей задан- ный контекст 'текст', выводится запрос: Да?'. Ответ 'Y' на него или нажатие клавиши 'ПУСК' делает выведенную строку текста текущей, и поиск на этом завершается. Любой другой ответ приводит к продолжению поиска до нахождения нужной строки или просмотра всех строк текста из заданного интервала. Если искомая строка не найдена, то выдается сообщение: 'Не най- ден' и текущая строка текста не меняется. Если в команде <S> опущен параметр 'текст', то в качестве его значения исполь- зуется последний контекст, используемый в предыдущих командах <S> и <R>. При наличии в командной строке после <S> других команд требуется использование после команды <S> клавиш 'F6' или 'CTR'+'S/B' (признак конца контекста). Команда <S> различает в контексте 'текст' прописные и строч- ные буквы. Например, по команде 1 ? S Homogeneous Structures выбираются на просмотр все строки редактируемого текста, содержащие указанный контекст. Команда <[С] Т 'СФ'> служит для включения в редактируе- мый текст перед строкой с номером С содержимого дискового файла, заданного параметром СФ'. По умолчанию параметр
'с' определяет номер текущей строки текста. Включаемый в текст файл отыскивается в текущем каталоге указанного устройства. Если в команде <Т> указан путь поиска файла, то он определяет текущий каталог на все время работы стро- кового редактора. Например, по команде <100 Т B:\Tatlinn> в редактируемый текст перед строкой с номером 100 поме- щаются строки файла Tallinn, расположенного в главном ка- талоге тома на устройстве В . Команда <[к] W> служит для записи заданного параметром к числа отредактированных строк текста из памяти, начиная с первой строки, в файл, указанный в команде EDLIN. При от- сутствии параметра к производится запись на диск такого количества первых строк текста из памяти, чтобы она осталась заполненной только на 25%. Если это условие уже выполнено, то команда <W> никаких действий по записи текста на диск не производит. Оставшиеся после записи на диск строки текста в памяти перенумеровываются. Например, по команде <2000 W> на диск записываются 2000 первых строк текста из памяти, оставшиеся строки текста перенумеровываются. Команда <W> имеет смысл при работе с текстовыми файлами, полностью не помещающимися в памяти. Подробное рассмотрение команд редактора EDLIN показы- вает, что его возможности позволяют не только выполнять редактирование текстов исходных модулей программ, но и ор- ганизовать простую работу с различного рода текстовой до- кументацией: переписку, подготовку статей, отчетов и т. д. Приведем теперь несложный комплексный пример, демонстри- рующий использование основных команд редактора EDLIN. Суть предлагаемого примера сводится к следующему. Си- стемной командой EDLIN на устройстве В' создаются два символьных файла GRODNO и TALLINN, содержащие заданную пользователем текстовую информацию. Файл GRODNO содер- жит 20 строк фиксированной длины, а файл TALLINN - 10 строк. В создании обоих файлов используется команда <1> редакто- ра. Затем на принтер выводится посредством системной команды PRINT содержимое обоих файлов. После этого коман- дой <D> редактора удаляются все строки текста, находяще- гося в памяти. Команда <Т> редактора считывает в ОП файл GRODNO, а команда <R> заменяет все вхождения контекста VVV в строках текста на GGGSSS . Далее команда <М> пере- мещает 3 первые строки текста перед текущей строкой, т. е. строкой, подвергшейся последней контекстной замене. По команде <1> осуществляется редактирование 1-й строки текста, а командой <С> первая строка текста копируется 3 ра- за перед строкой текста с номером 10. Команда <S> отыски- вает в редактируемом тексте строку с контекстом АА* и де- лает ее текущей. По команде <W> на диск записываются пер- *О-Уд
вне 10 строк текста, а команда <1> вставляет 2 новые строки перед 10-й строкой текста. Команда <А> считывает файл GRODNO в память и вставляет его за текущей строкой текста. Команда <L> выводит на экран дисплея 10 строк текста, а команда <Р> - первую страницу текста длиной в 23 строки Наконец, команда <Е> завершает редактирование сохраняя исходный файл с расширением имени ВАК и отредактирован- ный файл. Системная команда PRINT выводит на печать содер- жимое всех файлов, задействованных в настоящем примере. Приводимый ниже листинг иллюстрирует вышеописанный пример использования команд редактора EDLIN: EDLIN B1GRODNO EDLIN B-.TALLINN PRINT B:*.* 1,100 D T B:GRODNO 1,20 RVVV<F6>GGGSSS 1,3,. M 1 редактирование строки 1 1,1,Ю,ЗС 1 S AA 10 W 10 I 1.10L 1 P E PRINT B:*.* В листинге примера даются перечень и порядок использования команд редактора EDLIN (своего рода программа на командном языке редактора) по созданию и редактированию файлов GROD- NO и TALLINN. Читателю предоставляется в качестве самостоя- тельного упражнения наполнить данные файлы конкретным содержанием, провести указанные в листинге действия над файлами и выводом результатов на печать проверить правиль- ность выполненной работы. В заключение рассмотрения команды EDLIN и одноименно- го с ней строкового редактора следует отметить, что навыки работы с ним приходят довольно быстро при его практическом использовании, которое не вызывает каких-либо трудностей в связи с простотой командного языка редактора. 4.6. СТРУКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ АДОС В предыдущих разделах были детально рассмотрены коман- ды системы АДОС, тогда как о самой структуре системы были приведены только самые общие сведения. Полученная инфор- мация дает возможность описать более развернуто структуру,
возможности и программные интерфейсы системы АДОС. Как уже отмечалось, система АДОС состоит из четырех програм- мных компонент (файлов): (1) программа начальной загрузки (IPL; файл с именем BOOT RECORD PROGRAM), которая расположена в 0-м сек- торе 0-трека любого диска, подготовленного командой FORMAT (сделано это с целью идентификации системных АДОС-дискет); (2) программа взаимосвязи с базовой системой ввода-вы- вода (БСВВ), находящаяся в ПЗУ (данная программа рас- полагается в системном файле IBMBIO.COM и обеспечи- вает использование функций БСВВ); (3) управляющая программа (супервизор) находится в си- стемном файле IBMDOS.COM и обеспечивает интерфейс высокого уровня для программ пользователя (она со- держит подпрограммы управления файлами, блокирова- ния/деблокирования дисковых записей, целый ряд встро- енных функций); (4) процессор*команд системы, находящийся в системном файле COMMAND.COM. При загрузке системы АДОС в память ПЭВМ с устройства 'А* считывается программа начальной загрузки IPL и получает уп- равление. Программа IPL проверяет каталог АДОС-дискеты с целью определения на дискете первым и вторым системными файлами соответственно IBMBIO.COM и IBMDOS.COM. При от- сутствии этих файлов IPL выводит диагностическое сообщение. В противном случае она загружает в память оба эти файла и передает управление программе IBMBIO. Программа IBMBIO проверяет оборудование ПЭВМ, иницииру- ет все подсоединенные устройства, загружает драйверы и устанавливает вектора прерываний с номерами, меньши- ми 20. В частности, программа IBMBIO использует для своей инициации информацию из файла CONFIG.SYS конфигурации системы. После этого программа IBMBIO настраивает адреса в программе IBMDOS и передает ей управление. Версию ис- пользуемого файла IBMBIO.COM можно получить либо с по- мощью команды DEBUG, описанной выше, либо программы РЕЕК, описанной в главе 6. Программа IBMDOS инициирует свои внутренние управляю- щие таблицы и вектора прерываний с номерами 20+27, созда- ет префикс сегмента программы для процессора команд и возвращает управление программе IBMBIO. Получая управ- ление, программа IBMBIO загружает файл COMMAND.COM по адресу, сформированному ею, и передает управление процес- сору команд COMMAND. Программа COMMAND выполняет свой инициатор и загружает на выполнение системный команд- ный пакет AUTOEXEC.BAT, после выполнения команд которо-
го осуществляет выдачу метки системы 'А>' (рис. 7). После этого система АДОС готова к приему команд с консоли. Вышесказанное иллюстрирует рис.7. Рис Общая схема шрулси операционной системы АДОС
Следует отметить, что в случае необходимости перезагруз- ку MS DOS можно осуществлять и вводом команды COMMAND, по которой перезагружается только файл COMMAND.COM и вы- полняется пакетный системный файл AUTOEXEC.BAT. Процессор команд, находящийся в файле COMMAND.COM, состоит также из четырех программных компонент: (1) резидентная часть располагается в памяти сразу за программой IBMDOS и ее областью данных и содержит обработчики прерываний от завершения ситуации BREAK и неустранимой ошибки. Она же содержит и все стан- дартные обработчики аварийных ситуаций АДОС, кото- рые включают вывод сообщений об ошибках и интер- претацию ответов: A, R и I. Входящая в резидентную часть программа перезагрузки перезагружает транзит- ную часть процессора команд, есля загрузка ее окончи- лась неудачно; (2) инициатор процессора команд следует за резидентной частью и получает управление после загрузки файла COMMAND.COM. Инициатор содержит программу выпол- нения системного пакетного файла AUTOEXEC.BAT, оп- ределяет адрес загрузки программы, и первая же загру- женная им программа перекрывает его область; таблица векторов прерываний область связи программ БСВВ область системных связей АДОС программа IBMBIO программа IBMDOS резидентная часть COMMAND инициатор процессора команд Область памяти пользователя программа загрузки и выполнения СОМ- и EXE - файлов транзитная часть процессорных команд Рис 8- Общая структура распределения памяти ПЭВМ ИСКРА 1030 для операционной системы АЛ ОС
(3) транзитная часть процессора команд загружается в стар- шие адреса памяти и содержит все внутренние команды системы и процессор пакета команд. Она выдает метку системы 'А>', читает команды с консоли, инициирует их выполнение формированием строки параметров для функции ЕХЕС и передает ей управление; (4) программа загрузки и выполнения внешних команд, на- ходящихся в файлах с расширениями имен .СОМ и .EXE вызывается по функции ЕХЕС для загрузки указанных программ в область пользователя. Общая схема распределения оперативной памяти ПЭВМ ИС- КРА 1030, работающей под управлением системы АДОС, пред- ставленна на рис. 8. Система АДОС обеспечивает пользователя двумя наборами средств: системными прерываниями и вызовами функций, кото- рые рекомендуется предпочитать первым. Система поддержи- вает разнообразные вызовы функций для работы с символьны- ми УВВ, для управления файлами и памятью и т. д. Каждая функ- ция идентифицируется своим 16-ричным номером. В табл. 12 сгруппированы по назначению функции системы АДОС. Таблица 12 Номер функции Назначение функции 1+ 12 Завершение программы работы с символьными устройствами 13+ 24, 27+ 29 Управление файлами на основе блока управления файлом (БУФ) 25, 26, 2А+ 2Е Основные функции, не связанные с внешними устройствами 2F+ 38, 4С+ 4F 54+ 57 39+ ЗВ, 47 ЗС+ 46 Расширение основных функций системы АДОС Функции по работе с каталогами Управление файлами на основе системных но- меров 48+ 4B 32, 34, 37, 55 50+ 53 Расширенное управление памятью Функции используются для нужд самой систе- мы АДОС Функции системы АДОС доступны любому пользователю либо прямо (для программ на языке Макроассемблера), либо косвен- но (для программ на языках программирования БЕЙСИК или ЯМБ посредством подпрограмм на языке Макроассемблера). Детальное описание функций ОС АДОС можно найти в [17]. Система АДОС и работающее под ее управлением програм- мное обеспечение имеют ярко выраженную файловую структу- ру. Поэтому вполне уместно рассмотреть распределение памя- ти на дискетах, как основных носителях файловой структуры. Дискеты, проинициализированные в системе АДОС, размечают-
ся 512-байтовыми секторами, являющимися единицей физиче- ской записи информации на томе. Секторы, в свою очередь, об- разуют треки, содержащие 8 или 9 секторов. При инициализации дискеты на нее записывается следующая информация: - программа начальной загрузки IPL (Boot Record); - таблица размещения файлов FAT; - копия таблицы FAT; - главный каталог тома (Root Area); - область для файловой системы. Информация о размерах указанных областей на дискете содер- жится в программе IPL согласно табл. 13. Таблица 13 Число сторон Число секторов на треке Размер fat (сек- торов) Каталог (секто- ров) Число элементов в каталоге Число секторов в кластере 1 8 1 4 64 1 1 9 2 4 64 1 2 8 1 7 112 2 2 9 2 7 112 2 Таким образом, дискеты делятся по числу используемых при работе сторон, числу секторов на треке и числу треков на сто- роне. Под файлы выделяется место на дискете в кластерных единицах и только в период их создания. Пространство распре- деляется в возрастающем порядке номеров кластеров. Для односторонней дискеты кластером является сектор, для двух- сторонней - два последовательных сектора. Еще раз отметим, что 80-трековые дискеты, используемые в системе АДОС, считаются двухсторонними: треки с четными номерами при- надлежат условной стороне 0, а с нечетными - условной сто- роне 1. Таблица FAT логически связывает все кластеры одно- го файла в цепочку. При создании нового файла на дискете отыскивается первый свободный кластер и выделяется соз- даваемому файлу и так, пока не будет записана вся информа- ция создаваемого файла. Такой подход позволяет эффективно использовать дисковую память, выделяя вновь создаваемым файлам кластеры, освободившиеся после удаления файлов на томе. По причине покластерного выделения дисковой памяти вновь создаваемому файлу он может занимать на томе не смежные участки, т. е. распределение файлов на дисковом томе имеет мозаичную картину. В ряде случаев это может при- вести к снижению производительности программы из-за уве- личения времени доступа к данным. Путем продуманного рас- пределения файлов на дисковом томе в зависимости от прин-
ципа их использования можно в ряде случаев существенно уменьшить временные издержки на доступ к данным При работе с файлами данных могут возникать так называе- мые „беспризорные” кластеры. Основной причиной такого явления служит отсутствие в программе своевременного закрытия создаваемых файлов. В этом случае использование системной команды CHKDSK позволяет избавляться от такого типа кластеров независимо от причин их появления на томе. Первые 12 секторов системной дискеты жестко распределе- ны под Boot-область, FAT (2 копии) и Root-область следующим образом: Сектор Область Назначение области 0 Boot Используется DOS 1+4 FAT » » 5+11 Root 12+719 Файлы Для размещения файлов Область Root содержит информацию о файлах главного ка- талога тома, имеет фиксированные размер (7 секторов) и рас- положение на томе (сектора 5+11). Таблица FAT (File Allocation Table) служит для покластерно- го выделения дисковой памяти под файлы и начинается в ло- гическом секторе 1, следующем за сектором с программой IPL. Таблица FAT имеет размер 1 или 2 сектора и состоит из элементов длиной 1,5 байта. На дискете существует и копия таблицы FAT в целях обеспечения надежности работы с файло- вой системой тома. Первые два элемента таблицы FAT харак- теризую+ главный каталог и формат дискеты. Общая длина этих элементов составляет 3 байта. Они содержат индикаторы раз- мера каталога и формата дискеты: байты 2 и 3 содержат флажки 'FFFF', а первый байт определяет формат дискеты (табл. 14). Таблица 14 № Шифр Число сторон Число секторов Число треков Объем, Кбайт Код 1 S-8 1 8 40 160 FF 2 D-9 2 8 40 320 FF 3 S-9 1 9 40 180 FC 4 D-9 2 9 40 360 FD 5 OD-9 2 9 80 720 F9 6 OD-15 2 15 80 1200 F9 Система MS DOS использует информацию из первых двух эле- ментов таблицы FAT для идентификации типов используемых дискет.
В первых версиях MS DOS использовалось ограниченное число форматов дискет. Начиная же с версии 2.0 MS DOS под- держивает работу с четырьмя основными форматами (1-5-4), представленными в приведенной таблице форматов. Форматы 5+6 дискет используются на IBM PC/AT. Следует отметить, что УВВ для таких дискет могут использоваться и на ПЭВМ IBM PC/XT и ИСКРА 1030 как нестандартные при условии вклю- чения в MS DOS соответствующих'им драйверов. Предполагает- ся, что формат QD-15 в ближайшее время станет весьма мас- совым. С третьего элемента таблицы FAT (кластер 002) начинается собственно отображение файлов, находящихся на томе. Каждый элемент таблицы FAT содержит 3 16-ричные цифры согласно табл. 15. Таблица 15 Содержимое элемента Смысловая нагрузка 000 Кластер не использовался, но доступен FFB-5- FFF Указание на последний кластер файла FFO+ FF6 Указание резервных кластеров FF7 Дефектный кластер NNN (Отличные от перечисленных) номер следующего кла- стера файла Номер первого кластера файла находится в каталоге (подка- талоге) тома. Таблица FAT всегда начинается в логическом секторе 1 и следует сразу же за программой IPL. Для повыше- ния надежности на дискете формируются две рядом располо- женные таблицы FAT. При работе с файлами система загружа- ет в системный буфер копию таблицы FAT и назначает этому буферу высший приоритет сохранности. Это позволяет сохра- нять в памяти копию таблицы FAT длительное время, увеличи- вая производительность системы, так как число обращений к дискетам сокращается. Главный (корневой) каталог тома создается командой FOR- MAT при инициализации дискеты и следует непосредственно за второй копией таблицы FAT. Главный каталог тома содер- жит максимум 64 (для односторонних дискет) и 112 (для двух- сторонних дискет) элементов длиной по 32 байта. Каждый эле- мент каталога служит для описания одного файла на данном томе. Подкаталоги в отличие от главного каталога тома явля- ются обычными файлами, поэтому они могут содержать лю- бое число элементов, ограниченное только емкостью самой дискеты. Каждый элемент каталога (подкаталога) имеет фикси- рованный формат (табл. 16). Первый байт поля 1 элемента каталога указывает состояние данного элемента (16-ричное значение):
№ п/п Байт элемента Назначение данного поля 1 0+7 Имя файла 2 8+10 Расширение имени файла 3 11 Индикатор файла 4 12+21 Резервные байты 5 22+23 Время создания или обновления файла 6 24+25 Дата создания или обновления файла 7 26+27 Номер первого кластера файла 8 28+31 Размер файла в байтах 00 - никогда не использовался. Служит индикатором конца поиска файлов в каталоге тома; Е5 - элемент использовался, но был освобожден; 2Е - указатель подкаталога. Если второй байт поля также содержит '2Е', то поле начального кластера содержит номер первого кластера данного каталога в каталоге, для которого данный каталог является подкаталогом; XX - (отлично от предыдущих) первый символ имени файла. Поле 3 элемента каталога (индикатор файла) определяет со- стояние файла относительно его использования и может при- нимать следующие 16-ричные значения: 01 - файл помечен 'только для чтения', т. е. установлена за- щита от распечатки и изменения файла. Значение этого единичного бита может сочетаться с нижеследующими; 02 - файл помечается как 'скрытый', т. е. исключается из обычного поиска в каталоге; 04 - файл помечается как 'системный' и также исключается из обычного поиска в каталоге тома; 08 - идентифицирует метку тома, содержащуюся в первых 11 байтах элемента каталога. Такой элемент не со- держит другой информации и может находиться только в главном каталоге тома; 10 - идентифицирует файл в качестве подкаталога, который исключается из обычного поиска в каталоге; 20 - архивный бит, устанавливаемый при закрытии файла ранее открытого для записи. Данный бит может со- четаться с другими битами индикатора файла, но в на- стоящее время системой АДОС не используется. Например, в системе АДОС файлы, IBMBIO.COM и IBMDOS.COM помечены как скрытые системные' файлы 'только для чтения'. Скрытыми файлы можно отметить при их создании. Биты 'скрытый', 'системный', 'архивный' и 'только для чтения' можно изменить вызовом специальной функции системы АДОС. Сле- дует отметить, что изменять содержимое системных областей
BOOT, FAT и ROOT можно, например, с помощью сервисного пакета Norton Utilities или системной команды DEBUG. Общий алгоритм доступа к файлу состоит в следующем. По заданному спецификатору (СФ) элемент файла отыскивает- ся (или создается) в указанном каталоге (подкаталоге) тома и на основе информации о первом занимаемом им кластере (или первом свободном кластере) тома данные файла считы- ваются (записываются) с(на) УВВ. Таким образом, каталог (подкаталог) тома и таблица FAT содержат всю необходимую информацию для организации и ведения файловой системы. Приведенная информация не страдает большой избыточностью и позволяет организовать эффективные методы доступа к программам и данным, рас- положенным в файлах. Следует отметить, что материалы дан- ной главы представляют определенный интерес и при освое- нии операционных систем MS DOS и PC DOS, а также др. унифицированных или совместимых с ними систем для ПЭВМ.
5. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ БЕЙСИК ПЭВМ ИСКРА 1030 5.1. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ БЕЙСИК ПЭВМ ИСКРА 1030 Язык программирования высокого уровня БЕЙСИК ПЭВМ ИСК- РА 1030 соответствует диалекту языка BASIC А для ПЭВМ се- рии IBM РС/ХТ/АТ и предназначен для составления программ решения различного рода задач. Настоящий диалект языка БЕЙ- СИК позволяет пользователю, применяющему его для програм- мирования своих задач, выполнять следующие основные про- цедуры: - производить достаточно сложные расчеты вычислительно- го характера; - выполнять арифметическую и логическую обработку число- вой и символьной информации; - работать с файлами программ и данных, находящихся на томах в НГМД и НМД; - выводить на экран дисплея символьную и графическую ин- формацию в различных форматах; - использовать программы, написанные на языке Ассемблера; -управлять цветом экрана и создавать музыкальные фрагмен- ты; - выводить на печать выходные документы различной структу- ры и сложности; - осуществлять обмен информацией по каналам связи. Программные объектные модули, входящие в состав интер- претатора с языка БЕЙСИК, поставляются пользователю, как правило, на отдельной дискете и находятся в системном файле с именем BAS. СОМ. Данный файл может быть вызван в память для просмотра и распечатки с помощью программы-монитора DEBUG, описанной в разд. 4.4.2. Как правило, система программирования на основе языка БЕЙСИК включает интерпретатор и компилятор. БЕЙСИК-интер- претатор наиболее эффективен при разработке и отладке ПО в интерактивном режиме. Именно эта часть БЕЙСИК-системы в основном используется массовым пользователем. Однако быст- родействие ПО в среде БЕЙСИК-интерпретатора, порой, неудов- летворительно, в этом случае следует использовать БЕЙСИК- компилятор. Для работы с БЕЙСИК-компилятором система со- держит редактор связей (LINK) и библиотеку стандартных модулей. Именно в таком виде поставляется БЕЙСИК-система программирования с ПЭВМ ЕС 1841, тогда как с ПЭВМ ИСК- РА 1030 поставляется только БЕЙСИК-интерпретатор. Для соз- дания более эффективного ПО на языке БЕЙСИК рекомендуется использовать систему программирования Turbo-BASIC, кратко
упоминаемую в гл. 10. В настоящей главе все изложение будет вестись относительно БЕЙСИК-интерпретатора. Уместно упомянуть, что при всех прочих равных возможностях из основ- ных отечественных ПЭВМ - ЕС 1840, ЕС 1841, НЕЙРОН И9.66 и ИСКРА 1030 последняя поставляется с наименее развитым стандартным системным ПО. В настоящей главе приводится описание полной версии диа- лекта языка БЕЙСИК ИСКРА 1030, рассчитанной на максималь- ный набор внешних устройств ПЭВМ и на работу как с цветным, так и черно-белым дисплеем. Поэтому читателю, использующе- му материалы данной главы в своей практической деятельнос- ти, следует учитывать те ограничения, которые накладываются конкретной моделью ПЭВМ ИСКРА 1030 и набором ее внешних устройств. Читателя, интересующегося более развернутой ха- рактеристикой языков программирования семейства БЕЙСИК, отсылаем к разд. 3.2 и работам [1-5, 8-10, 39, 42, 56-58, 61, 217-221]. 5.2. ЗАГРУЗКА ИНТЕРПРЕТАТОРА ЯЗЫКА БЕЙСИК И РАБОТА С КЛАВИАТУРОЙ ПЭВМ ИСКРА 1030 Интерпретатор языка БЕЙСИК находится в системном файле BAS. СОМ. Перед использованием его следует загрузить в па- мять подобно обычной внешней команде системы. Для своего размещения интерпретатор требует 48 Кбайт памяти, а для ра- бочей области интерпретатора, содержащей программы и дан- ные, отводится максимум 64 Кбайта. Размер рабочей области выводится на экран дисплея при загрузке БЕИСИКа. При загруз- ке интерпретатора языка БЕЙСИК (в дальнейшем ради краткос- ти будем говорить просто БЕЙСИКа) пользователь может опре- делить следующие характеристики: - размер рабочей области БЕЙСИКа; - число файлов, одновременно открываемых в БЕЙСИК-прог- раммах пользователя; - размер буфера для размещения записей файла и буфера для приема сообщений по каналу связи; - имя выполняемой БЕЙСИК-программы пользователя, находя- щейся на указанном дисковом томе; БЕЙСИК загружается только в том случае, когда ПЭВМ находит- ся в состоянии системы, т. е. на экране дисплея идентифициру- ется системная метка. Команда BAS имеет формат [ИУ:] BAS [СФ] [<IN] [[>]>OUT] [/F:N 1] [/S:N2] [/C:N3] [/M:N4] и служит для загрузки интерпретатора языка БЕЙСИК и переда- чи ему значений для основных формальных параметров. Пара- метр [ИУ:] служит для указания имени дискового УВВ, содержа- щего том с файлом BAS. СОМ - интерпретатором языка БЕЙСИК. Параметр ’СФГ определяет спецификатор файла, содержаще- го БЕЙСИК-программу, которую требуется обработать интер-
претатором. Эта программа после загрузки БЕЙСИКа вызывает- ся в его рабочую область и выполняется. Если в имени файла отсутствует его расширение, то по умолчанию предполагается BAS. Более того, если БЕЙСИК-программа находится на том же томе, что и файл BAS. СОМ, то в параметре 'СФ' можно не ука- зывать имени устройства. В случае отсутствия на указанном томе БЕЙСИК-программы, определенной параметром 'СФ', выводится сообщение 'Файл не найден', и ПЭВМ переходит в со- стояние системы. При отсутствии параметра 'СФ' после загруз- ки БЕЙСИК переходит в режим ожидания ввода с консоли ко- манд или программы. Параметры '<IN' и '>OUT' определяют спецификаторы файлов, заменяющих клавиатуру и экран дисплея. Если в команде BAS указан параметр '<IN', то данные стандартного ввода будут счи- тываться БЕЙСИКОМ из указанного в параметре файла или уст- ройства, определенного своим логическим именем. А именно, операторы БЕЙСИКа INPUT, INPUTS и LINE INPUT, выполняющие стандартный ввод, будут получать информацию из определенно- го параметром '<IN' файла или устройства. В качестве значения параметра '<IN' допустим любой спецификатор файла или уст- ройство ввода, указанное ниже. Если отсутствует параметр 'СФ', то ^эайл, определенный параметром '<IN', должен содер- жать БЕЙСИК-программу, иначе возникает ошибка синтаксиса при выполнении команды BAS. В любом случае при использо- вании параметра '<IN' определяемый им файл должен быть соз- дан и подготовлен заранее. Параметр '>OUT' определяет стандартный вывод БЕЙСИКа не на экран дисплея, а в заданные файл или на устройство вывода. В качестве значения параметра допускается любой специфика- тор файла или устройство вывода, указанное ниже. А именно, оператор БЕЙСИКа PRINT, выполняющий стандартный вывод, бу- дет выводить информацию в определенные параметром '>OUT' файл или устройство вывода. Файл для стандартного вывода создается на заданном томе автоматически. Если этот файл уже существовал, то он делается пустым при отсутствии в команде BAS параметра '>' и открывается на дозапись в противном слу- чае. При наличии в команде BAS обоих параметров '<IN' и '>OUT' все диагностические сообщения и информация операторов PRINT помещаются в выходной файл, не отображаясь на экране дисплея. Если же в команде BAS имеется только параметр '>OUT', то данные операторов PRINT отображаются на экране дисплея и параллельно помещаются в выходной файл. В случае возникновения ошибки закрываются входной и выходной файлы, БЕЙСИК-программа завершается и управление получает опера- ционная система. В качестве логических устройств ввода и вывода, использу- емых в параметрах '<IN' и >OUT', допускаются: CON -клавиатура и экран дисплея (ввод и вывод); СОМ1 - первый асинхронный адаптер связи (ввод и вывод);
COM2 - второй асинхронный адаптер связи (ввод и вы- вод); PRN - принтер (вывод); LPT1 - первое устройство печати (принтер, вывод); LPT2 - второе устройство печати (экран, вывод); LPT3 - третье устройство печати (экран, вывод). Параметр 7F:N1' определяет максимальное число (N1) фай- лов, которые могут быть одновременно открыты в БЕЙСИК-прог- рамме пользователя. Максимально допустимое значение для N1 есть 15 и по умолчанию - 3 файла. Каждый открываемый файл требует дополнительно 188 байтов памяти для блока уп- равления файлом (FCB - File Control Block) и буфера ввода-вы- вода, размер которого указывается в параметре 7S:N2' коман- ды BAS. Параметр 7S:N2' определяет размер (N2) буфера ввода-вы- вода для обменных операций с дисковыми УВВ. Максимальное значение для N2 полагается 32767 и по умолчанию - 128 байтов. В целях повышения производительности системы рекомендует- ся полагать N2=512 байтов (размер сектора на дискетах). Параметр 7C:N3' определяет размер (N3) входного буфера для асинхронного адаптера связи. Максимальное значение для N=3 полагается 32767 и по умолчанию - 256 байтов. Для высоко- скоростных каналов связи рекомендуется полагать N3=1024 байтов. Выходной буфер для асинхронного адаптера связи уста- навливается автоматически и равен 128 байтам. Если ПЭВМ не использует средство передачи по каналам связи, то в команде BAS рекомендуется указывать параметр 7S:0*. чтобы не зани- мать лишнюю область памяти. Параметр 7м.Ы4' задает максимальный размер (N4) рабочей области в ОП, в которой размещается БЕЙСИК-программа поль- зователя и данные. Максимальное значение и значение по умол- чанию для N4 совпадают и равны 65536 байтов. Меньшее значе- ние для N4 задаете»-, как правило,» с целью резервирования мес- та в памяти для подпрограмм на языке Ассемблера. В качестве значений для величин Nk (k= 1-5-4) могут использоваться десятич- ные, 8- и 16-ричные числа. При этом перед 8-ричным числом ста- вится идентификатор '$0' и 16-ричным - идентификатор '$Н\ Приведем несколько примеров использования команды BAS для загрузки интерпретатора языка БЕЙСИК: A>B:BAS/C:O- загружается БЕЙСИК с исключением под- держки адаптера связи, остальные параметры по умолчанию; ожидание ввода команд с консоли; А> BAS В:ТЕХТ /FilO /S:512 /М:40000 - загружается БЕЙСИК и запускается программа TEXT. BAS, находящаяся на томе УВВ В'; программа может использовать не более 10 одновременно открываемых файлов, размер буфера ввода-вывода равен 512 байтов и под рабочую область отведено 40000 байтов; осталь- ные параметры по умолчанию;
A> BAS >>B:OUTPUT. BAS /М: SH9500 - загружается БЕЙСИК; ожидание ввода команд с консоли; все данные по оператору PRINT и диагностика БЕЙСИКа помещаются в выходной файл OUTPUT. BAS на томе УВВ 'В'; размер рабочей области БЕЙСИКА равен 33895 байтов; значения остальных параметров по умолча- нию; А> BAS <B:IN. BAS »B:OUT. BAS - загрузка БЕЙСИКа; вызы- вается программа из файла IN.BAS, который определен стан- дартным вводом; стандартным выходом определен файл OUT. BAS, запись в который будет осуществляться в его конец; ос- тальные параметры по умолчанию; А> BAS <B:AAA>PRN - загрузка БЕЙСИКА; выполнение прог- раммы из файла ААА на томе УВВ 'В' и выбор в качестве стан- дартного устройства принтера; остальные параметры по умол- чанию. При ошибочных вводах команды BAS на экран дисплея выво- дится сообщение 'Синтаксис' и исправленную команду следует ввести в систему заново. При успешном выполнении команды BAS и загрузке интерпретатора языка БЕЙСИК на экран дисплея выводится сообщение ПП ЭВМ * ИСКРА * БЕЙСИК версия А (1985 г.) и идентифицируется объем рабочей области БЕЙСИКа в бай- тах. Нижняя строка экрана дисплея является служебной стро- кой БЕЙСИКа и в ней постоянно находится следующая информа- ция: 1 LIST 2RUN 3LOAD” 4SAVE” 5CONT 6, ”LPT1 7TRON 8TROFF 9KEY OSCREEN, которая определяет приписанные функциональным клавишам служебные слова языка БЕЙСИК. При желании поль- Таблица 17 Клавиша y (ALT+Y) Слово BASIC Клавиша Y (ALT+Y) Слово BASIC А AUTO L LOCATE в BSAVE M MOTOR С COLOR N NEXT D DELETE 0 OPEN Е ELSE P PRINT F FOR R RUN G GOTO S SCREEN Н HEXJ T THEN 1 INPUT u USING К KEY w WIDTH X XOR
зователь может удалить служебную строку с экрана специаль- ной командой языка KEYOFF. Наконец, на экран выводится мет- ка '»' БЕЙСИКа (состояние БЕЙСИК), после которой можно вво- дить с консоли текст БЕЙСИК-программы или команды языка. Рассмотрим теперь использование клавиатуры ПЭВМ ИСК- РА ЮЗО в состоянии БЕЙСИК. Подробное описание клавиатуры ПЭВМ ИСКРА 1030 и ее ис- пользование в состоянии системы приведены в разд. 4.2, поэто- му здесь будут даны только отличия и дополнительные возмож- ности использования клавиатуры для состояния БЕЙСИК. Совместное использование клавиши 'ALT' и ряда клавиш ла- тинских букв АЦК позволяет упростить ввод служебных слов языка БЕЙСИК согласно табл. 17. Некоторые клавиши и их комбинации формируют так называ- емые расширенные коды, отсутствующие в таблице кодов ПЭВМ ИСКРА 1030 (приложение 1). Эти коды можно обрабатывать в БЕИСИК-программах посредством функции INKEY$, по которой программа получает два байта: первый байт содержит '00', а второй - расширенный код. В табл. 18 представлены некоторые часто используемые расширенные коды и генерирующие их на- боры клавиш. Полная информация о расширенных кодах может быть найдена в [17]. Функциональные клавиши, как указывалось выше, также поз- воляют вводить служебные слова языка БЕЙСИК. При загрузке интерпретатора им присваиваются значения десяти команд язы- ка БЕЙСИК, которые перечисляются в служебной строке БЕЙСИ- КА. Нажатие клавиш F2, F5, F6, F8 и F10 приводит к немедлен- ному выполнению соответствующих им команд языка БЕЙСИК, тогда как при нажатии других функциональных клавиш выво- дится текст соответствующих им команд языка, дополняется необходимыми параметрами и после нажатия клавиши 'ПУСК' команда начинает выполняться. Командой KEY можно переопре- делить назначение любой функциональной клавиши. Наряду Таблица 18 Расширенный код(байт 2) Комбинация клавиш, генерирующая данный код 15 Клавиша табуляции | «— 16 + 25 30 + 38 ALT + О, W, Е, R, T, Y, U, 1, О, Р ALT + A, S, D, F, G, Н, J, К, L 44 + 50 59 + 68 71 + 81 82, 83 ALT + Z, X, С, V, В, N, М Функциональные клавиши fi + Fio Клавиши:\, 1,1, - -,T,l Клавиши;«—•> (вставка), (удаление)
с этим прерывания, поступающие от нажатия функциональных клавиш, могут обрабатываться в БЕЙСИК-программах посредст- вом оператора ON KEY. Все эти вопросы будут рассматриваться несколько ниже. Логической единицей текста, обрабатываемого БЕЙСИКОМ, является программная строка длиной не более 255 символов. Программная строка может занимать несколько строк экрана дисплея (физических строк). Перемещение курсора со строки на строку экрана происходит автоматически по мере заполне- ния предыдущей физической строки. Однако можно переносить курсор на начало следующей физической строки, не заполняя текущую строку экрана до конца, что достигается нажатием клавиш 'CTR' + 'ПУСК'. В состав БЕЙСИК-интерпретатора входит встроенный экран- ный редактор, позволяющий осуществлять редактирование БЕЙ- СИК-программ. Ниже описывается работа с встроенным редак- тором. В режиме редактирования вводимая программная стро- ка может модифицироваться клавишами редактирования, нахо- дящимися в области ЦК клавиатуры и совмещенными с цифро- выми клавишами. Для использования этих клавиш в режиме ре- дактирования не следует перед их использованием нажимать клавишу 'NLK'(NUMLOCK), так как в состоянии БЕЙСИК нажатие Таблица '9 Клавиша Действие, вызываемое клавишей ESC ТабН Удаление с экрана программной строки Перемещение курсора в конец очередной графы табуля- ции; графами табуляции служат К-е позиции строки экрана (К=1+8р; р=0+10). Нажатие клавиши на нижнем регистре перемещает курсор на последнюю позицию графы, в, которой он находится. Если включен режим вставки то строка раздвигается на соответствую- CTR+'V щее число позиций Очистка экрана и перемещение курсора в левый верх- ний угол экрана; метка БЕИСИКа стирается и появляет- CTR+ ся вновь после ввода любой команды языка Перемещение курсора вправо к следующему слову строки экрана; слова в строке разделены пробелом, за- CTR+ пятой, (;), скобкой и т. д. Перемещение курсора влево к предыдущему слову фи- зической строки CTR+*~“*/ Удаление с экрана части программной строки от курсо- ра до ее конца CTR + S/B Возврат к состоянию БЕЙСИК с сохранением информа- ции на экране дисплея CTR+NLK Переход в рост^яние ожидания до нажатия любой клави- ши, кроме ctr , <-> и клавиши верхнего регистра
клавиши 'NLK' присваивает клавишам ЦК цифровые значения. Подробная работа клавиш редактирования описана в разд. 4.2. Наряду с перечисленными для целей редактирования в сос- тоянии БЕЙСИК используются клавиши АЦК 'ESC' и табуляции, а также клавиша 'CTR' совместно с некоторыми клавишами ЦК. Возможности редактирования с помощью указанных клавиш от- ражены в табл. 19. Для лучшего понимания и усвоения описан- ных выше приемов редактирования программных строк реко- мендуется загрузить интерпретатор БЕЙСИКа и после появле- ния его метки '»' набрать с клавиатуры произвольную строку длиной не более 255 символов и, не вводя ее в буфер ввода (по клавише 'ПУСК'), поработать с ней в режиме редактирова- ния, применяя вышеописанные средства редактирования и ап- робируя функциональные возможности клавиатуры ПЭВМ в сос- тоянии БЕЙСИК. Вышеописанные средства редактирования относятся к прог- раммной строке, находящейся в буфере ввода и отображаемой на экране дисплея. После нажатия клавиши 'ПУСК' отредакти- рованная строка замещает в памяти исходную строку БЕЙСИК- программы. В следующем разделе будут рассмотрены и другие аспекты редактирования БЕЙСИК-программ. 5.3. ВВОД И РЕДАКТИРОВАНИЕ БЕЙСИК-ПРОГРАММ Текст Бейсик-программы состоит из одной или нескольких программных строк (длиной <256), каждая из которых, в свою очередь, содержит один или несколько операторов или команд языка БЕЙСИК, отделенных друг от друга символом двоето- чия(:). Следует отметить, что более плотная упаковка операто- ров в программные строки позволяет снизить (и порой сущест- венно) время выполнения программы и занимаемый ее объем памяти. Операторы языка БЕЙСИК описывают действия с число- выми или символьными константами, переменными, массивами или функциями, а также определяют работу с внешними УВВ. Все строки БЕЙСИК-программы нумеруются в пределах 0 + * 65529 и располагаются в порядке возрастания их номеров. Следовательно, программной Бейсик-строкой считается любой текст длиной <256, начинающийся номером, содержащий по крайней мере один символ, отличный от пробела, и заканчи- вающийся символом клавиши 'ПУСК'. Текст программной строки до нажатия клавиши 'ПУСК', т. е. До пересылки строки в рабочую область БЕЙСИКа, редактирует- ся средствами, описанными в предыдущем разделе. Если прог- раммная строка содержит более 255 символов, то при нажатии клавиши 'ПУСК' лишние символы игнорируются, оставаясь при этом без изменения на экране дисплея. При вводе и пересылке в Рабочую область программная строка не проверяется на соот- ветствие синтаксису языка БЕЙСИК. Такая проверка осуществ- ляется только при выполнении программы. Этим, в частности,
интерпретатор языка БЕЙСИК ПЭВМ ИСКРА 1030 отличается от интерпретатора БЕЙСИКа ИСКРА 226 и ряда др. интерпретаторов [1-3]. Такая организация интерпретатора наряду с недостатка- ми имеет и ряд своих преимуществ, например при необходи- мости обработки в среде языка БЕЙСИК программных текстов на языках, отличных от языка БЕЙСИК ИСКРА 1030. Текст программы набирается на клавиатуре ПЭВМ с исполь- зованием клавиш АЦК, ЦК и функциональных клавиш. Служеб- ные слова языка БЕЙСИК можно вводить любой комбинацией прописных и строчных букв. Исключение составляют коммента- рии, операторы DATA и символьные константы в кавычках, где различаются оба типа букв. Строки программы идентифициру- ются их номерами, которые не обязательно должны следовать в порядке возрастания, так как БЕЙСИК сам осуществляет логи- ческую сортировку программных строк в порядке возрастания их номеров. Шаг нумерации строк может быть любым допусти- мым целым числом > 0. Однако из практических соображений рекомендуется шаг нумерации выбирать большим 1, скажем 10. Это позволит в случае необходимости весьма просто осуществ- лять вставки строк в программу без ее перенумерации. Для задания режима нумерации вводимой БЕЙСИК-програм- мы служит специальная команда AUTO языка, имеющая формат AUTO [нс] [, шаг], где параметр 'нс' определяет номер программной строки нача- ла нумерации, а параметр 'шаг' - шаг нумерации. В зависимос- ти от комбинации этих параметров команда AUTO осуществля- ет нумерацию программных строк согласно табл. 20. Если вмес- то параметра 'нс' указывается точка, то значение <нс> в табли- це полагается равным нулю. Команда AUTO используется, как правило, перед началом ввода текста программы. Например, после ввода команды AUTO 50, 20 набираемые программные строки будут нумероваться как 50, 70, 90,... Для выхода из ре- жима AUTO следует использовать клавиши 'CTR' + 'S/В'. В этом случае осуществляется выход на метку '»' БЕЙСИКа, и после- Таблица 20 Параметр Способ нумерации программных строк В AUTO Т - номера вводимых строк нс , шаг Т = <нс> + р*<шаг>; р=0,1,2,3... , шаг Т=0 + р*<шаг>; р=0,1,2,3,... нс , _ Т=<нс> + р*<пшаг>, где <пшаг> равен значению <шаг> из предыдущей auto или при ее отсутствии равен 10 - Эквивалентно команде auto 10,10
дующие строки программы можно вводить с произвольными но- мерами. Команду AUTO можно использовать при вводе прог- раммы любое число раз, если AUTO генерирует номер уже су- ществующей программной строки, то за номером помещается символ (*), предупреждающий, что ввод может заменить суще- ствующую строку. Однако, если пользователь нажмет клавишу ПУСК' сразу за звездочкой (*), то существующая в памяти прог- раммная строка сохранится, а команда AUTO сгенерирует сле- дующий номер строки. Программная строка, в которой нажаты клавиши 'CTR* + 'S/В* не сохраняется. Команда RENUM имеет формат RENUM [н1 [, н2] [, шаг]] и служит для перенумерации программных строк, начиная со строки с номером <н2> (по умолчанию принимается первая про- граммная строка), которой присваивается номер <н1>, с шагом <шаг> (по умолчанию шаг полагается 10). После перенумерации соответствующим образом изменяются все ссылки в программе на перенумерованные строки. Примеры: RENUM 1000, 920, 15 - строкам, начиная с номера 920, прис- ваиваются номера 1000+К*15; RENUM 200,, 20 - строкам, начиная с первой, присва- иваются номера 200+К*20; RENUM ,10 -строкам, начиная с первой, присваи- ваются номера 10+К*10; RENUM - строкам, начиная с первой, присваи- ваются номера 10+К*10; (К=0, 1,2,3,...) Данная команда используется, как правило, в том случае, когда программа не имеет резерва номеров для вставки новых строк. С помощью команды RENUM нельзя нарушить возрастающий порядок номеров программных строк. Для перлюстрации БЕЙСИК-программы или вывода ее текс- та на печать используются команды LIST и LLIST, имеющие фор- маты соответственно LIST [нс] [-[кс]] [, ”СФ”] [LLIST [нс] [-[кс]], где параметры 'нс* и 'кс* определяют номера начальной и конеч- ной выводимых строк программы, а параметр *СФ* определяет Файл или устройство для вывода листинга программы. В каче- стве устройства вывода можно указывать логические имена LPT1:, СОМ1:,СОМ2:, PRN и CON. Если в качестве значения пара- метра 'кс* используется точка (.), то полагается номер послед-
ней строки программы. Команды LIST, LLIST без параметров 'нс', 'кс' выводят листинг всей программы; по умолчанию для этих параметров принимаются соответственно начало и конец программы. Команда LLIST, в отличие от LIST, выводит листинг программы только на печать. При отсутствии параметра 'СФ' листинг выводится на экран дисплея. Листинг программы мож- но выводить на любое устройство вывода. Вывод листинга на печать или экран можно прекратить по клавишам 'CTR' + 'S/B', после чего БЕЙСИК переходит на уровень ввода команд '»'. Приведем несколько примеров использования команд: LLIST 500-1500 LIST , ”B:LISTINGM - вывод на принтер строк программы с номерами 500 + 1500 - вывод листинга в файл LISTING на УВВ 'В' LIST , ”PRN” - вывод листинга программы на печать LIST 10-850, ”LPT1:" -вывод строк 10-г-850 программы на первое устройство печати. После просмотра программы пользователь имеет возмож- ность изменить ее текст. Для ввода новой строки следует наб- рать ее текст с номером. После нажатия клавиши 'ПУСК' набран- ная строка помещается в рабочую область БЕЙСИКа. Если до этого в программе уже существовала строка с этим номером, то она замещается новой строкой. При вводе только номера су- ществующая строка с этим номером удаляется из программы. Для удаления программных строк можно использовать команду DELETE, имеющую формат DELETE [нс] [-[кс]], где параметры 'нс', 'кс' определяют соответственно начальный и конечный номера блока удаляемых строк программы. Исполь- зование в качестве значения этих параметров точки (.) опреде- ляет номер последней строки в программе. По команде 'DELETE <нс>- ' удаляются все строки программы, начиная с номера <нс>. Команда DELETE без параметров удаляет из памяти всю программу. Команду DELETE можно использовать и в качестве оператора в программной строке, но в этом случае после его выполнения интерпретатор переходит на уровень ввода команд '»'. При- меры: DELETE 120 DELETE 100-500 DELETE - 100 DELETE 100- DELETE.-. - удаление программной строки 120 - удаление блока строк 100 + 500 - удаление всех строк программы с номе- рами не большими 100 -удаление всех строк программы с номе- рами не меньшими 100 - удаление последней строки программы.
При попытке удалить несуществующую строку программы или добавлении новой строки при отсутствии свободного места в рабочей области выдаются соответствующие сообщения. Команда EDIT <k> (k - номер строки) позволяет вывести на экран дисплея и поместить в буфер ввода для целей редактиро- вания программную строку с номером <к>. Использование в ка- честве значения параметра команды точки (.) выводит на редак- тирование последнюю строку программы. Редактирование выз- ванной по команде EDIT программной строки осуществляется средствами, описанными в предыдущем разделе. Отредактиро- ванная строка возвращается в рабочую область по нажатию кла* виши 'ПУСК'. Никакие изменения строки на экране (в буфере ввода) не меняют строки в рабочей области до нажатия клави- ши 'ПУСК'. Подготовленную или отредактированную БЕЙСИК-программу можно записать в файл на диск посредством команды SAVE сле- дующего формата: SAVE ”<СФ>” [, Т], где параметр 'СФ' определяет спецификатор файла для записи программы, а параметр 'Т' задает режим записи программы: Т=А - запись исходного модуля в формате ASCII, который требу- ет больше места на диске, Т=Р - запись в закодированном би- нарном формате с защитой. Отсутствие 'Т' определяет запись программы во внутреннем формате интерпретатора. Такая про- грамма считывается и записывается быстрее остальных двух случаев. Файл с записанной программой получает имя и расши- рение имени (по умолчанию полагается .BAS) согласно пара- метру 'СФ'. К программе, записанной с защитой, не применимы в дальнейшем команды LLIST, LIST, EDIT; ее можно только загру- жать с диска в память и выполнять. Не существует способа сня- тия защиты для такого типа БЕЙСИК-программ. Например, по ко- манде SAVE ”В:ТХТ”, Р, находящаяся в памяти БЕЙСИК-програм- ма выгружается на том, находящийся на УВВ 'В', в файл под именем TXT. BAS с защитой. Если на томе уже существует файл с таким именем, то он замещается новым файлом, определен- ным параметром 'СФ'. Перед вводом новой БЕЙСИК-программы с консоли рекомен- дуется, в общем случае, очистить память командой NEW без па- раметров, по которой закрываются все файлы, очищается работ чая область БЕЙСИКа и осуществляется переход на уровень ввода команд'»'. Для загрузки программы с диска в память используется ко- Манда RUN, имеющая два формата: (1) RUN [нс] (2) RUN ”<СФ>” [, R] Команда RUN формата 1 запускает на выполнение программу,
находящуюся в памяти, с номера строки <нс> (по умолчанию с первой программной строки). Команда RUN формата 2 запру, жает в память и запускает программу из файла, определенного параметром 'СФ', предварительно закрыв все открытые файлы и очистив рабочую область БЕЙСИКа. По команде RUN форма- та 2 можно загружать на выполнение программный файл любого формата (исходный, упакованный, с защитой). Если испопьзу- ется параметр 'R', то закрытия файлов не происходит, что дела- ет файлы доступными для загруженной программы. Например, по команде RUN ”В:ТХТ”, R с УВВ 'В' загружается программа TXT. BAS, и открытые до ее загрузки файлы данных не закрыва- ются. Команда MERGE имеет формат MERGE ”СФ” и также предназначена для загрузки указанного в параметре 'СФ* файла, содержащего исходный модуль БЕЙСИК-программы. Программа, загружаемая с диска, объединяется с программой (если она есть), находящейся в памяти. При этом программные строки с одинаковыми номерами заменяются на вновь введен- ные. После загрузки программы БЕЙСИК переходит в режим ввода команд. Если указанный в параметре 'СФ' файл не содер- жит исходного модуля, т. е. программы в формате ASCII, то ста- рая программа, находящаяся в памяти, остается без изменения и выдается сообщение 'Неверный режим'. Например, по коман- де MERGE ”В.PROG.046” с тома, расположенного на УВВ 'В', счи- тывается программный файл с именем PROG.046 и объединяет- ся с программой, находящейся в памяти. Если в параметре 'СФ' не указано для файла расширение имени, то по умолчанию пола-1 гается BAS. Команда MERGE может использоваться для загруз-1 ки БЕЙСИК-программ в память без последующего их запуска, но основное ее назначение состоит в конструировании програм-1 мных модулей из заранее подготовленных и записанных на диск отдельных компонент в виде исходных текстов фрагментов программ. В заключение приведем ряд основных положений, которыми рекомендуется руководствоваться при выборе оптимальной по времени выполнения структуры программы. Предлагаема* структура состоит из программных блоков: - инициализации и описания переменных и массивов; - перехода по GOTO к главному блоку программы; - подпрограмм, упорядоченных по порядку их вызова; - главного блока программы; - других блоков программы. При проектировании программы следует избегать большого числа переходов, используя подпрограммы и циклы WHILE. WEND. При этом, по возможности, использовать операции с це- лыми числами или массивами, используя для значений индек-
сов также целые числа. Для сокращения места на дисках и в па- мяти (в первую очередь), а также времени выполнения прог- рамм рекомендуется отлаженные БЕЙСИК-программы реорга- низовать с целью уменьшения числа строк (многооператорные строки). В первую очередь, это связано с сокращением требу- емой памяти. Например, уже такой простой многострочный фрагмент (МФП) программы 1 PRINT TIMER 2 Х=46 3 X=SQR (Х'4.5) 4 Y=42*X 5 Z=INT (Y) 6 FOR K=1 TO 100 7 C=C+X*Y*Z 8 NEXT 9 PRINT TIMER и его многооператорный (МОФП) аналог, состоящий из одной строки, требуют памяти (в байтах) в файле и времени выполне- ния (в с) согласно табл. 21. Естественно, что при более слож- ных по структуре и объему программных системах разница в памяти и времени выполнения значительно более существенны. В последующем изложении будут приведены и другие рекомен- дации по разработке оптимальных по тому или иному критерию БЕИСИК-программ. В процессе выполнения БЕЙСИК-программы возможны раз- личного типа особые и аварийные ситуации. Полный перечень сообщений об ошибках и рекомендации по их устранению при- веден в технической документации [17]. Информация, представленная в предыдущем и данном разде- ле, позволяет пользователю вводить текст БЕЙСИК-программы с консоли в память, редактировать его как на уровне отдельной строки, так и в рамках всего текста, записывать программу на диск и считывать ее с диска в память на редактирование или выполнение. Однако для формирования самого текста програм- мы ему необходимо знать основные элементы языка БЕЙСИК и правила их использования. Таблица 21 Модуль фрагмента Память Время выполнения Исходный модуль МФП 116 0,77 МфП в бинарном виде 107 0,77 Исходный модуль МОФП 92 0,71 МОфп в бинарном виде 75 0,71
5.4. ОБЩЕЕ ОПИСАНИЕ ОСНОВНЫХ ПОНЯТИЙ И ВОЗМОЖНОСТЕЙ ЯЗЫКА БЕЙСИК В настоящем разделе приводятся основные понятия и воз- можности языка БЕЙСИК, которые будут использоваться на про- тяжении всего последующего изложения. Основным объектом изучения в последующих разделах будет БЕЙСИК-программа, составленная из программных строк и входящих в них опера- торов языка БЕЙСИК. Особое внимание будет уделено изучению основных операторов и команд языка, а также интерфейсу БЕЙ- СИК-программы с операционной системой АДОС. БЕИСИК-программа, описывающая алгоритм решения неко- торой задачи пользователя, может находиться в памяти ПЭВМ или в файле на диске. Выполняться же может только программа, находящаяся в рабочей области БЕЙСИКа, куда она заносится непосредственно с системной консоли или загружается с дис- ка, где она хранится в исходном или загрузочном виде. Прог- рамма состоит из одной или нескольких программных строк длиной не более 255 символов каждая. Программные строки идентифицируются номерами в интервале от 0 до 65529 и со- держат один или несколько операторов языка БЕЙСИК, разде- ленных двоеточием (:). Оператор является наименьшей логи- ческой единицей языка БЕЙСИК и служит для описания действий с числовыми или символьными константами, переменными, массивами или функциями или содержит информацию для уп- равления работой основных компонент ПЭВМ и ее внешних уст- ройств. Синтаксис языка БЕЙСИК допускает использование алфавит- ных, цифровых и специальных символов. Алфавитные символы включают все прописные и строчные буквы латинского алфави- та. Цифровые символы включают цифры от 0 до 9, а специальные символы - все прописные и строчные буквы русского алфави- та и 28 следующих символов: Пробел / = \ ( ) % $ । & } @ _ (подчеркивание) Ряд слов языка БЕЙСИК - служебные и предназначены для обозначения операторов, команд и функций языка. Поэтому та- кие слова нельзя использовать в качестве имен переменных. Они должны отделяться от других конструкций языка пробелами или другими разделителями, определяемыми синтаксисом язы- ка БЕЙСИК. В приложении 5 приводится полный список всех служебных слов языка БЕЙСИК ПЭВМ ИСКРА 1030. Все служеб- ные слова должны кодироваться в БЕЙСИК-программах соглас- но их написанию, при этом допускается произвольная комбина- ция прописных и строчных букв.
При работе с дисковыми УВВ БЕЙСИК полностью поддержива- ет концепцию файла как общего устройства ввода-вывода в полном соответствии с соглашениями системы АДОС (разд. 4.3). Имена файлов должны соответствовать соглашениям сис- темы АДОС. При этом БЕЙСИК обрабатывает имя файла следую- щим образом: - если расширение имени файла больше 3-х символов, то лишние символы отбрасываются; - если имя файла больше 8 символов и расширение у него от- сутствует, то после восьмого символа вставляется точка (.), а после нее сохраняется не более 3-х символов; - при длине имени файла больше 8 символов и наличии у него расширения выдается сообщение об ошибке. В имени файла, с которым работает БЕЙСИК, недопустимо ис- пользование символов '<' и С другой стороны, БЕЙСИК до- пускает использование пробелов в имени файла. Об этом будет идти речь в разд. 5.7.5. Допустимое число одновременно откры- ваемых файлов, с которыми может работать программа, указы- вается в команде BAS при загрузке интерпретатора БЕИСИКа (разд. 5.2). Работа в среде БЕЙСИКа с каталогами и подкатало- гами дискового тома полностью соответствует рассмотренным в разд. 4. 3 соглашениям системы АДОС. При этом БЕЙСИК полу- чает всю необходимую информацию от системы АДОС об актив- ных каталогах на томах каждого дискового УВВ ПЭВМ. Подроб- но о работе с файлами будет сказано ниже при описании соот- ветствующих операторов и команд языка БЕЙСИК, обеспечива- ющих работу с файлами. Рассмотрим теперь основные возможности использования дисплея в состоянии БЕЙСИК. Пользователь имеет возможность работать как с черно-белым, так и с цветным дисплеем, позво- ляющими выводить на экран текст, специальные символы, точ- ки и линии, прямоугольники и ряд др. графических объектов. Дисплей допускает два режима работы: текстовый и графичес- кий. В текстовом режиме экран дисплея имеет 25 (1 25) строк шириной 40 или 80 символов каждая. Ширина экрана устанавли- вается оператором SCREEN или принимается по умолчанию. Для вывода на экран обычно используется оператор PRINT. При за- полнении информацией текущей строки экрана автоматически осуществляется переход к началу следующей строки и так до строки с номером 24. При заполнении 24-й строки содержимое экрана сдвигается всякий раз на одну строку вверх. Строка 25 является служебной строкой БЕЙСИКа, содержащей информа- цию о значениях функциональных клавиш F1-5-F10. Однако по команде KEY OFF можно отменить служебную строку и исполь- зовать 25-строку как обычную строку экрана дисплея. Оператор COLOR при использовании черно-белого дисплея позволяет выводить символы в обратной контрастности: белые символы на черном фоне и черные на белом фоне. В случае Цветного дисплея есть возможность использования различных
сочетаний цветных символов на цветном фоне. По краям экрана можно устанавливать так называемый 'бордюр', не используе- мый для вывода информации и окрашиваемый согласно опера- тору COLOR. БЕЙСИК имеет средства для установки и отмены режима мерцания символов на экране и вывода символов с подчеркиванием. Дисплей имеет буфер емкостью 16 Кбайтов и содержит 4 (при ширине экрана 80 символов) или 8 (при ширине экрана 40 сим- волов) страниц текста, нумерация которых начинается с нуля и с которыми можно работать посредством оператора SCREEN. В графическом режиме пользователь имеет возможность вы- водить на экран отдельные точки, линии, различные геометри- ческие фигуры, графики и т. д., что обеспечивается адресацией любой точки экрана. Для данного режима оператор SCREEN дает возможность устанавливать два формата экрана дисплея: (1) средняя разрешающая способность экрана; (2) высокая разрешающая способность экрана. В форматах 1 и 2 экран дисплея имеет 320хК (К= 1,2) точек по го- ризонтали и 200 точек по вертикали соответственно. Точки экра- на при этом нумеруются слева направо и сверху вниз, начиная с нуля. Следовательно, в верхнем левом углу экрана находится точка с координатами (0,0), в нижнем правом углу - точка с ко- ординатами (320хК-1,199) (К=1,2). В операторах графического режима координаты точек экрана можно задавать двумя спосо- бами: абсолютный (X, Y) относительный STEP (М, N) - X и Y задают позиции точки по горизонтали и вертикали экрана соответственно - М и N задают смещения точ- ки по горизонтали и верти- кали экрана соответственно относительно координат последней использованной точки Последняя используемая точка экрана определяется каждым оператором графики как точка, на которую была последняя ссылка. Выход точки за пределы экрана при выполнении графи- ческих операторов может привести к непредсказуемым резуль- татам. В графическом режиме можно выводить на экран и текс- товую информацию. БЕЙСИК позволяет задавать прямоугольные области экрана (ПОЭ), в которых можно использовать собствен- ные локальные системы координат. В таких системах координат точки ПОЭ идентифицируются парами чисел из предварительно определенных диапазонов. Подробнее о возможностях графиче- ской работы в среде БЕЙСИК речь будет идти несколько ниже. Находясь на уровне ввода команд (метка '»'), БЕЙСИК пре- доставляет пользователю два режима работы: командный и про-
граммный. В командном режиме вводятся команды или набор операторов языка, разделенных двоеточием (:), и после нажатия клавиши 'ПУСК' сразу же выполняются, производя те или иные действия. В этом режиме набор операторов или команда не долж- ны идентифицироваться номером. После выполнения работы в ко- мандном режиме БЕЙСИК снова возвращается на уровень выпол- нения команд. В командном режиме можно использовать не все операторы языка БЕЙСИК. Этот момент будет отмечаться особо при описании операторов языка. Командный режим используется, как правило, при оперативном внесении в программу различного рода изменений, вывода оперативной информации или для реали- зации в среде БЕЙСИК так называемого 'настольного калькуля- тора'. В программном режиме пронумерованные строки программы вводятся с консоли в память, и сформированная БЕЙСИК-прог- рамма может выполняться только по команде RUN, начиная с ука- занного в ней номера строки. В программном режиме можно вы- полнять и большинство команд языка БЕЙСИК, но после выполне- ния ряда команд осуществляется переход на уровень ввода ко- манд ('»'), что прекращает выполнение программы. При выполнении программы возможны синтаксические ошиб- ки в обрабатываемых интерпретатором строках. В этом случае на экран дисплея выводится сама строка с ошибкой и соответст- вующая ей диагностическая информация, а пользователь получа- ет возможность сразу же исправить эту строку описанными в разд. 5.2. средствами. После нажатия клавиши 'ПУСК' исправ- ленная строка возвращается на свое место в памяти. При редак- тировании программной строки следует учитывать следующие важные моменты: - значения переменных программы не сохраняются; - закрываются все ранее открытые файлы данных; - программа может быть запущена на выполнение только за- ново, а не с точки останова. Приведем два простых примера выполнения оператора PRINT в командном и программном режимах: 1. PRINT (1942+1947)\1967+46*41*21 39607 2. 10 PRINT (1942+1947)\1967+46*41*21 RUN 10 39607 5. 5. ОПИСАНИЕ ОСНОВНЫХ ЭЛЕМЕНТОВ ЯЗЫКА БЕЙСИК Как уже отмечалось выше, БЕЙСИК-программа представляет собой совокупность программных строк, которые располагают- ся в порядке возрастания своих номеров. БЕЙСИК автоматически Услеживает логический порядок программных строк согласно
возрастанию их номеров как при вводе, так и при корректировке программ. Номера строк (0+65529) используются для обраще- ния к нужной строке, запуска программы с требуемого места и в операторах перехода. Программа выполняется в порядке возрастания номеров программных строк, если операторы пе- рехода или другие программные средства не указывают против- ного. Программная строка имеет формат <нс> [ОП 1 ] [:ОП2] [:ОПЗ].. .[:ОПк] ['<комментарий>[']], где 'нс' - номер строки, 'ОПк' - к-й оператор строки и скоммен- тарий> - любая строка символов длиной не более 255. При этом общая длина программной строки, включая символ клавиши 'ПУСК', не должна превышать 255 символов. Рассмотрим прос- тейшие базовые конструкции языка БЕЙСИК: константы, пере- менные, массивы и функции. КОНСТАНТЫ. БЕЙСИК допускает использование как число- вых, так и символьных констант. Константы помещаются непо- средственно в текст программной строки или команды и ис- пользуются в период выполнения программы. Символьная кон- станта представляет собой цепочку символов длиной не более 255, заключенную в кавычки. Например: PRINT ’’Вывод текста —> PRN” PRINT ”А<5 и В> 10; хТ5=125”, ’’Структура” PRINT ’’Математическая теория однородных структур” Числовые константы делятся на целые и действительные и по способу задания в программе бывают пяти типов: (1) целая десятичная константа (ЦДК); (2) целая 16-ричная константа (Ц16К); (3) целая 8-ричная константа (Ц8К); (4) действительная десятичная константа (ДДК); (5) действительная экспоненциальная константа (ДЭК). ЦДК представляет собой целое десятичное число в диапазоне -32768 + +32767, у которого знак '+' может опускаться, Ц16К - набор 16-ричных цифр {0+9; А,В, С, D, Е, F}, которому предшест- вует идентификатор '&Н', Ц8К - набор 8-ричных цифр {0+7}, кото- рому предшествует идентификатор '&О' или Ц16К и Ц8К ин- терпретируются БЕЙСИКОМ как ЦДК, поэтому Ц16К должна нахо- диться в пределах 0 + FFFF, а Ц8К - в пределах 0 + 177777, что позволяет обоим типам констант представлять весь диапазон целых чисел от -32768 до 32767. Например, значения &H7FFF и &077777 эквивалентны 32767, а &Н8000 и &100000 - значению -32768. ДДК представляет собой набор десятичных цифр, содержа- щий десятичную точку. В состав ДДК могут также входить знаки '+' и '-' (минус), помещаемые в самое начало константы. ДЭК представляет собой экспоненциальную форму действительного десятичного числа и имеет формат
ДДК {EID} Р. где Е - идентификатор десятичного основания степени, т. е. ЦЭК -ДДКх10Р, D - идентификатор двойной точности и целое число - 39 <Р<+39 - показатель степени. Значение ДЭК должно лежать в интервале 1Е-38 + 1.701412Е+38, в противном случае возни- кает ситуация 'Переполнение'. Приведем примеры на все типы констант: ЦДК Ц16К Ц8К ДДК ДЭК 314267 &H7B7F &036757 4247 67 42Е30 -248586 &HABCD &42467 -2107.27 -15Е-25 +123456 &HCDEF &0123467 +46.4567 +46.45Е-5 В свою очередь, цифровые константы допускаются двух фор- матов: обычной и двойной точности. Константа обычной точнос- ти - это любая цифровая константа, имеющая следующую харак- теристику: - записана не более, чем 7-ю цифрами; - ДЭК с использованием идентификатора 'Е'; - завершается символом Т. Примеры констант обычной точности: 304641, -245, 24Е+07, -2407.88!, 345.4641. Константы двойной точности - это любая цифровая константа, имеющая характеристику: - записана более, чем 7-ю цифрами; - ДЭК с использованием идентификатора 'D'; - завершается символом '#*. Следует отметить, что действительное число!А|>32767 без деся- тичной точки всегда помечается БЕЙСИКОМ символом обыч- ной точности, если оно содержит не более 7 цифр. Примеры констант двойной точности: 42476788, 12345#, -42.534D+5, -4.67#, 555.290788. В памяти под ЦДК отводится 2 байта, под константу обычной точности - 4 байта и под кон- станту двойной точности - 8 байтов. Числа обычной точности обеспечивают 6 достоверных десятичных знаков (на печать выводится не более 7 знаков), а числа двойной точности обес- печивают 17 достоверных знаков (на печать же выводится не более 16 знаков). ПЕРЕМЕННЫЕ. Наряду с константами в БЕЙСИК-программах используются переменные, идентифицируемые уникальными именами длиной не более 40 символов, если имя больше 40 символов, то БЕЙСИК рассматривает только первые 40 сим- волов, т. е. имена рассматриваются с точностью до первых 40 символов. Для задания имени переменной можно использовать латинские буквы, цифры и десятичную точку, при этом первым символом имени обязательно должна быть буква. В качестве имен переменных нельзя использовать служебные слова БЕЙ- СИКа, а имена, начинающиеся с букв 'FN , определяют вызов Функции пользователя, о которой речь будет идти ниже. Пере-
менным можно присваивать значения констант, других пере- менных и выражений, результатов вычислений по встроенным функциям языка или пользователя, а также вводимых и выводи- мых данных; переменные, в свою очередь, можно использовать в различных вычислительных конструкциях и операторах §во- да-вывода. Подобно константам, переменные делятся на число- вые и символьные. Числовой переменной можно присвоить зна- чение любого допустимого числа, а символьной - произвольную строку символов в кавычках длиной не более 255 знаков. До своего первого использования в программе числовая перемен- ная получает значение ноль, а символьная - значение пустой строки (строки нулевой длины). Имя наряду с идентификацией переменной определяет ее тип (числовая или символьная) и точность (обычной или двойной точности для числовых функций). Имя символьной переменной должно оканчиваться символом 'S', например: AVZS, AG SS, G290788S. В имени числовой переменной последний символ оп- ределяет следующие характеристики: % - целая десятичная переменная; ! - числовая переменная обычной точности; # - числовая переменная двойной точности; X - действительная переменная обычной точности (Х-любой допустимый символ, отличный от перечисленных). В памяти переменные целые, обычной и двойной точности, как и соответствующие им по типу константы, занимают соответ- ственно 2, 4 и 8 байтов. Использование констант и переменных двойной точности приводит к увеличению требуемых для их раз- мещения памяти и времени вычислений. Для присвоения пере- менным значений используется знак '=' (равенства или присво- ения), например: А%=29788, В#=4247646788, T$=”Basic”. Вычисления с целыми переменными и константами осуще- ствляются быстрее, чем с переменными других типов, поэтому при разработке оптимальных по времени выполнения программ рекомендуется там, где это возможно, использовать в вычисли- тельных процедурах целочисленные конструкции. В качестве иллюстрации приведем простой пример оценки времени выпол- нения вычислений с простыми и целыми переменными: 1 PRINT TIME$:FOR К=1 ТО 32000: A=A+1:NEXT K:PRINT TIMES 2 FOR K%=1 TO 32000:B=B+1:NEXT K%:PRINT TIMES 3 FOR K%=1 TO 32000:C%=C%+1:NEXT K%:PRINT TIMES RUN 13:24:41 время разница между в % 13:26:54 1-2.13 1-2 13 с 9,8 13:28:54 2-2.00 2-3 24 с 20,0 13:30:30 3-1.36 1-3 37 с 27,8 Таким образом, даже при использовании целочисленных пере- менных в таких простых программных конструкциях удается
весьма существенно снизить время выполнения вычислений, а числовые оценки относительного времени вычислений одной и той же циклической конструкции при разном сочетании ис- пользования простых и целых переменных позволяет сделать определенные практические выводы. При присвоении значений переменных БЕЙСИК позволяет осуществлять преобразования типов чисел при условии выпол- нения следующих основных правил: (1) значение, присваиваемое переменной, преобразуется согласно ее типа, (2) значение, преобразовываемое к обычной точности, округ- ляется; (3) значение, преобразовываемое к двойной точности, может получить другое внешнее представление; (4) при вычислениях выражений операнды двухместных арифметических операций преобразуются к точности опе- ранда с более высокой точностью, а результат вычисле- ний - к точности переменной, которой он присваивается. Следует помнить, что в правилах 1, 2 и 4 возможно округление значений, которое осуществляется по правилу (1): если первая отбрасываемая цифра не меньше 5, то остающаяся последняя цифра результата увеличивается на единицу, в противном слу- чае она остается без изменения. Приведем примеры на вышепе- речисленные правила: 1 AS%= 12.4837:AG%=46.624:AV%=44.5:PRINT AS%, AG%, AV% 12 46 45 2 V!=125.456752:D//=14.12345:PRINT V!, D# 125.4568 14.12345027923584 3 . A^=42.123456789:B%=46:D=A#*B%:PRINT A#*B%, D 1937 679012294 1937.679 Пример 1 иллюстрирует округление чисел в результате присво- ения значений целочисленным переменным, пример 2 - дейст- вие правил (2) и (3) при присвоениии значений переменным обычной и двойной точности, пример 3 - применение правила (4) при вычислении произведения переменных разных типов и точности. Относительно использования символов 1%, S, !, #1для иденти- фикации имен того или иного типа переменных следует сделать одно существенное замечание. Прежде всего, переменные МП, ип%. ИП$ и ИП#} также, как и переменные {ИП, ИП%, ИП$ и ИП#I попарно взаимно различны, т, е. интерпретатор БЕЙСИКа счита- ет их разными переменными (элементами массивов). Напри- мер. А% и A# - разные переменные, как если бы они имели раз- ные имена, тогда как Ч4П <и <ИП’>полагаются идентичными пе- ременными. Сказанное иллюстрирует следующий пример: А=1 A%=2.AS-"3" А*=4 PRINT А, А%, А$, A0;:PRINT А, А!
RUN 1 2 3 4 1 1 МАССИВЫ. Наряду с константами и простыми переменными БЕЙСИК в качестве объектов обработки допускает использова- ние одномерных (векторов) и многомерных (матриц) массивов. Массив представляет собой упорядоченный набор значений, индентифицируемых одним именем. Отдельные значения мас- сива называются его элементами, которые можно использовать в программе как простые переменные. Перед использованием массива в программе его следует, как правило, определить с помощью специального оператора DIM, в котором указывают- ся имя, тип, размерность и величина массива. При выполнении оператора DIM в памяти пользователя создается массив сог- ласно его описанию. Оператор DIM будет рассмотрен несколько ниже. Если в программе имеется обращение к одномерному масси- ву до его объявления, то БЕЙСИК предполагает создание мас- сива из 10 (1-ьЮ) или 11 (0-Н0) элементов. Обращение же к мно- гомерному массиву до его определения вызывает диагности- ческое сообщение „Индекс вне диапазона”. Следовательно, умолчание при описании одномерного массива подразумевает массив-вектор из 10 или 11 элементов, тогда как уже для дву- мерного массива аппарата умолчания не существует. Сказан- ное имеет место при условии использования в программе опе- ратора OPTION BASE О или по умолчанию. В случае же исполь- зования в БЕЙСИК-программе оператора OPTION BASE 1 для оп- ределения начала нумерации элементов массивов картина ме- няется и подробнее об этом можно найти в разд. 5.7.1. Это также отличает диалекты языков БЕЙСИК для ПЭВМ ИСКРА 1030 и ИС- КРА 226 [1-3]. Средства языка БЕЙСИК позволяют обращаться к массиву как к целому, так и к отдельным его элементам. При создании оптимальных по времени выполнения программ рекомендуется там, где это возможно, заменять большие совокупности значе- ний или переменных массивами. При обращении к элементу массива указывается имя массива и заключенные в круглые скобки координаты самого элемента в массиве (значения ин- дексов). Подобно константам и простым переменным мас- сив в зависимости от типа (целочисленный, обычной или двой- ной точности) требует в памяти для своего размещения соответ- ственно 2,4 и 8 байтов на каждый свой элемент. Приведем при- меры использования массивов: 1. FOR К=1 ТО 6:A$(K)=”AVZ”:PRINT A$(K);:NEXT К AVZ AVZ AVZ AVZ AVZ AVZ 2. 10 DIM A%(3»3)TOR 1=1 ТО 3:FOR J=1 TO 3 20 A % (I, J)=I*J:PRINT A%(l, J);:NEXT J:NEXT I RUN 123246369
3. 10 DIM A%(3, 2, 1):FOR 1=1 TO 3:FOR J=1 TO 2 20 FOR K=1 TO 1; A% (I, J, K)=I*J+K:PRINT A%(l, J, K) 30 NEXT K:NEXT J:NEXT I RUN 2 3 3 5 4 7 Следует отметить, что диапазон изменения значений индексов массива любой размерности можно указывать, начиная с едини- цы (нуля) и до максимально допустимого М, при условии отсут- ствия оператора OPTION BASE 1. Например: 10 DIM A(2,2):FOR 1=1 ТО 2:FOR J=1 TO 2 20 PRINT A(l, J);: NEXT J:NEXT IrPRINT ”*”;:FOR l=0 TO 1 30 FOR J=0 TO 1:PRINT A(l, J);:NEXT J:NEXT I RUN 0000*0000 Для формирования выражений из констант, простых перемен- ных, элементов массивов и функций язык БЕЙСИК располага- ет арифметическими, логическими операциями и операциями отношения. АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ представляет собой совокуп- ность числовых констант, функций, простых переменных и эле- ментов массивов и системных переменных, соединенных сим- волами арифметических операций и, возможно, круглыми скоб- ками. Для обеспечения работы с арифметическими выражения- ми БЕЙСИК располагает 8-ю операциями, перечисленными в по- рядке убывания их приоритетов в табл. 22. Перечисленные ариф- метические операции оперируют со значениями соответствую- щих операндов. При наличии в арифметическом выражении круглых скобок в первую очередь происходит выполнение опе- раций в скобках, где соблюдается порядок выполнения опера- ций согласно из приоритета. Поясним действие двух дополни- тельных операций: целочисленного деления и получения остат- ка от деления (\ и MOD). При операции целочисленного деления операнды, участвую- щие в операции, округляются до целых чисел и из результата их деления выделяется целая часть. Операция MOD дает целое число, представляющее собой остаток от целочисленного деле- ния операндов. При кодировании операции MOD необходимо от- делять ее от операндов по крайней мере одним пробелом. Опре- делив операцию округления по правилу 1 числа А до целого как [А], а операцию выделения целой части А через ]А[, легко дать Формульную запись операций (\) и MOD: A MOD В = А - ] [А]/[В] [*В=А-(А\В) *В А\В = ] [А]/[В][ Приведем примеры использования всех арифметических опера- ций.
1. A=5:B=6:C%=3:D%=4:PRINT C%*D%; A*B;-3; A/В; A+B; B-A 81 30 -6 .8333333 11 1 2. A%=6:B%=2:C%=11 :РП!ГIT A%\B%, C% MOD A % 3 5 Примеры весьма просты и с учетом сказанного пояснений не требуют. Следует отметить, что в случае возникновения особых ситуаций: деление на нуль и переполнение при вычислении арифметических выражений выдаются соответствующие сооб- щения, а дальнейшие действия программы состоят в следую- щем. В случае ситуации деления на нуль выдается сообщение 'Деление на нуль' и выполнение программы продолжается; при этом выражение, в котором возникла подобная ситуация, полу- чает значение 1.701412Е+38 (максимально допустимое для дан- ной системы, так называемая машинная бесконечность). В слу- чае же ситуации переполнения выдается сообщение „перепол- нение в сномер строки>” и выполнение программы прекращает- ся. Например: Таблица 22 Знак операции Смысл операции и ее приоритет при вычислении выражений Пример написания Возведение в степень (1) А*В=АВ — Изменение знака операнда (2) -А Умножение и деление операндов (3) А.В, А/В \ Целочисленное деление (4) А\В MOD Остаток от деления операндов (5) A MOD В + , “ Сложение и вычитание операндов (6) А+В, А-В 10 A=5:B=0:PRINT”X=”, A/В; ”В/В=”, В/В; ”В\В=”, В\В 20 A%=464121:PRINT ”Завершение”:ЕМ0 RUN Деление на нуль Х=1.701412Е+38 Деление на нуль В/В=1.701412Е+38 Деление на нуль В\В= 1.701412Е+38 Переполнение в 20 ЛОГИЧЕСКИЕ ОПЕРАЦИИ выполняют побитные действия над операндами, преобразованными при необходимости в це- лые числа в диапазоне -32768 * 32767. В случае нарушения это- го диапазона возникает ситуация переполнения и выполнение программы прекращается. В логических операциях оба операн- да рассматриваются как 16-разрядные бинарные цепочки, над которыми побитно слева направо производятся действия сог-
ласно операциям, представленным в порядке их приоритета в табл. 23. Алгоритм выполнения логических операций продемонстрируем на примере: Числа Бинарные представления 26 1101000000000000 AND AND -5 1111111111111011 26 1 101000000000000 Приведем пример использования всех логических операций: 10 A=46:B=-5:PRINT NOT A,-A AND В;А OR В;А XOR В; Таблица 23 Операнд Значение битов x и y X 0 0 i 1 Операция Y 0 1 0 1 Отрицание: NOT X 1 1 0 0 Конъюнкция: X AND Y 0 0 0 1 Дизъюнкция: X OR Y 0 1 1 1 Исключающее И ГН: X XOR Y 0 1 1 0 Эквивалентность: X EQV Y 1 0 0 1 Импликация: X IMP Y 1 1 0 0 20 PRINT A EQV В;А IMP В RUN -47 42 -1 -43 42 -5 Читателю в качестве несложного упражнения рекомендуется проверить полученные результаты. Логические операции мож- но эффективно применять для побитной обработки информации. Например, операцию AND можно использовать для пропускания только одного бита из байта состояния на канале ввода/вывода терминала, а операция OR может использоваться для 'смешива- ния* двух байтов с целью образования определенного бинарно- го значения. Читателю предлагается продолжить подобные при- меры, имеющие практический интерес. ОПЕРАЦИИ ОТНОШЕНИЯ сравнивают два числовых или сим- вольных значения и, если сравнение истинно, вырабатывают
значение (-1; да), в противном случае - значение (0; нет). Полу, ченные значения операций отношения можно использовать для управления вычислительным процессом или процессом обра- ботки информации в программе. БЕЙСИК допускает шесть опе- раций отношения (табл. 24). Таблица 24 Операция Смысл операции Синтаксис — Равенство двух операндов А = В о • >< Неравенство операндов АОВ; АХВ < Меньше, чем А<В > Больше, чем А>В <= • =< Не больше, чем А<=В;А=<В >=;=> Не меньше, чем А>=В;А=>В Следующий простой пример иллюстрирует использование всех шести операций отношения: PRINT 46=41; 15<>20; 10<8; 2>1; 15<=20; 3>=2 0-10-1 -1 -1 Сравнение символьных операндов осуществляется побайтно слева направо в соответствии с кодами входящих в них сим- волов (лрилож. 1). Операнды считаются равными, если коды соответствующих символов в них равны. При сравнении учи- тываются и все пробелы операндов, а более короткий операнд считается меньшим. Например, все соотношения ”AVZ”>”AGN”, ”AV” >”AV” и ”41 "о” АТ” истинны, т. е. их значения равны -0 (ДА). Логические операции над логическими значениями (0; ДА) и (-1; НЕТ) всегда дают снова логические значения, что позво- ляет использовать их совместно с операциями отношения для организации управления вычислительным процессом и обра- боткой на основе сложных логических конструкций. Например, по оператору 120 IF AV>46 OR AG<41 AND AS>20 THEN 1000 управление получает программная строка с номером 1000, если значение переменной AV больше 46 и/или одновременно значения переменных AG и AS соответственно меньше 41 и больше 20. Наряду с константами, переменными и элементами масси- вов в арифметических выражениях можно использовать мате- матические функции и числовые функции символьных аргу- ментов, которые без дополнительного программирования поз-
воляют получать в программе результаты наиболее часто ис- пользуемых алгоритмов вычислений или обработки информа- ции. Функции определены в самом языке БЕЙСИК, и их исполь- зование в выражениях аналогично использованию констант и переменных (кроме двух специальных функций, связанных с выводом информации). Следовательно, функция может ис- пользоваться в тех программных конструкциях, где допуска- ются выражения, но не переменная. Синтаксически каждая функция языка определяется своим именем (служебное слово языка), за которым в круглых скобках следует список допус- тимых аргументов, разделенных запятыми. Аргументами мо- гут быть константы или выражения, тип которых определяется самой функцией. Для удобства рассмотрения всего многооб- разия функций языка БЕЙСИК разобьем их на пять относитель- но самостоятельных групп: (1) математические функции; (2) числовые функции символьных аргументов; (3) символьные функции; (4) функции ввода/вывода и доступа к памяти; (5) системные переменные. Наряду с встроенными функциями языка БЕЙСИК пользователь может определять в своей программе собственные функции, которые в рамках его программы могут использоваться по- добно стандартным функциям языка. О данном средстве речь будет идти несколько ниже. Функции и переменные групп (4) (5) в дальнейшем будут называться системными и для их рассмотрения не будет выде- лено отдельного раздела, а описания их будут приводиться в разделах 5.7.2J- 5.7.8 совместно с теми основными конструк- циями языка БЕЙСИК, к которым они имеют наибольшее отно- шение и с которыми чаще всего используются. В настоящем разделе будут рассмотрены функции первых трех групп. Если не оговорено противного, то значение функ- ций первых двух групп является числом обычной точности, значение же числового аргумента может быть числом любой точности, но перед использованием оно преобразуется в число обычной точности. Сводная табл. 25 представляет математиче- ские (1) и числовые функции (2) символьных аргументов, кото- рые можно использовать в программах на языке БЕЙСИК ПЭВМ ИСКРА 1030. Все перечисленные в таблице функции яв- ляются встроенными функциями языка БЕЙСИК и при своем использовании не требуют специального определения. У математических функций аргументами являются арифме- тические выражения, а значениями числа. У числовых функций символьных аргументов значениями являются также числа, а аргументами символьные выражения или функции. Тригоно- метрические функции используют радианное измерение углов, и их значения представляют собой числа обычной точности. Функция FIX (X) получает целое число путем отбрасывания Дробной части аргумента X; значение функции должно лежать
в интервале -32768 * 32767. Это же замечание относится и к функции INT (X). Значение функции SGN (X) равно '-Г при Х<0, равно 0 при Х=0 и единице в противном случае. Функция RND (X) или RND (эквивалентно RND (1)) выполняет- Таблица 25 Функция группы 1 Назначение функции ABS (X) ATN(X) CDBL (X) Абсолютное значение аргумента X Арктангенс аргумента X Преобразование аргумента X в число двойной точности CINT (X) COS(X) CSNG(X) Округление аргумента X до целого Косинус аргумента X Преобразование аргумента X в число обычной точности EXP(X) FIX (X) LOG(X) RND [(X)] SGN (X) SIN (X) SOR(X) TAN (X) Значение функции ех (Х<88.02968) | Выделение целой части аргумента X Значение функции Ln х (Х>0) Генерация псевдослучайных чисел Функция знака аргумента X Вычисление синуса аргумента X Квадратный корень из X (Х>=0) Вычисление тангенса аргумента X Функция группы 2 Назначение функции ASC(X$) CVI(X$) CVS (X$) Код первого символа аргумента х$ Преобразование х$ в целое число Преобразование аргумента х$ в число обычной точности CVD (X$) Преобразование аргумента х$ в число двойной точности INSTR ([K,]x$, Y$ ) Номер позиции первого вхождения y$ w х$, на- чиная с К-го символа х$ LEN (X$) VAL (X$) Длина символьного аргумента х$ Числовое значение аргумента х$ ся следующим образом. Если значение Х<0, то -X преобразует- ся в целое число и используется для установки начального зна- чения встроенного в БЕЙСИК датчика равномернораспределен- ных в интервале [0, 1) псевдослучайных чисел (ДПСЧ), в против- ном случае этих действий не производится. Если X не равно О, то вычисляется новое псевдослучайное число; при Х=0 ДПСЧ сохраняет старое значение. Следовательно, функцию RND (X)
при Х<0 можно использовать для установки начального значе- ния ДПСЧ, при Х>0 (включая отсутствие у функции аргумента) - для получения псевдослучайных чисел и при Х=0 - для возмож- ности использования одного и того же псевдослучайного числа, полученного последним. Более подробно о ДПСЧ будет идти речь ниже при рассмотрении оператора RANDOMIZE. Приведем примеры использования ряда математических функций: ABS (-8)=8 CINT (15.5)=16 FIX (15.5)=15 RND (1)=0.683111 CDBL (45.678)=45.67800140380859 CSNG (1.4873548)=1.487355 INT (15.5)=15 SGN (-18.41)=-1 RND (0)=0.683111 RND=0.7151002 Функция ASC (XS) выдает в качестве своего значения целое число из интервала 0-^255, представляющее собой код первого символа аргумента Х$. Например: ASC (”AVZ”)=65 и ASC(”G”)= =71. Если Х$ имеет пустое значение, то идентифицируется ситу- ация 'Неверный вызов функции'. Значение функции CVI (CVS и CVD) есть целое число (число обычной и двойной точности), представлением которого в кодовой форме служит аргумент Х$, т. е. эти функции изменяют только тип аргумента, а не его значение. Данные функции рекомендуется использовать при работе с числовыми файлами произвольного доступа. Функции CVI, CVS и CVD преобразуют соответственно первые 2, 4 и 8 символов аргумента XS, длина которого не должна быть меньше этих значений, в противном случае идентифицируется ситуация 'Неверный вызов функции'. Например: CVI (” AV”)=22081, CVS(”AVZ”)=5.918035E-18 и CVD (” AVZAGNSV”)= = 1.876772291081595D-13. Обратными к данным функциям явля- ются соответственно символьные функции MKI3, MKS5 и MKD$. Функция INSTR ([К,]Х$, У$) (К лежит в интервале 1 - 255, по умолчанию К=1) в качестве своего значения вычисляют позицию первого вхождения цепочки символов Y$ в цепочку Х$, начиная с ее К-го символа. Функция принимает нулевое значение, если вхождение отсутствует или Х$ является пустой цепочкой. Если пустая только цепочка Y$, то функция принимает значение К или 1 по умолчанию. Например: INSTR (3, ’’ABCDEFAB", ”АВ”)=7, INSTR f’LLABC”, ”LA”)=2 и INSTR (”АВ”, Y$)=2. Функция VAL (Х$) получает числовое значе- ние начальных символов цепочки (или всей цепочки) Х$, если они представляют собой допустимую числовую константу, в противном случае значение функции равно нулю. При преобра- зовании функция игнорирует символы пробела, табуляции и пе- ревода строки. Например: VAL (’Тод 1988”)=0, VAL (”46”)=46 и VAL (”200038 Tallinn, Partisani 13-75”)=200038. Таким образом, арифметические выражения в общем случае включают числовые: константы, простые переменные, элементы массивов, математические функции и числовые функции сим- вольных переменных, а также круглые скобки, арифметические, логические-операции и операции отношения. В связи с таким
большим набором компонент и их различиями БЕЙСИК при вы- числении значений выражений соблюдает следующий приори- тет действий: (1) вычисляет значения содержимого круглых скобок, начи- ная со скобок более глубокого вложения; (2) вычисляет значения математических функций и числовых функций символьных аргументов; (3) выполняет арифметические операции в порядке убывания их приоритетов; (4) выполняет операции отношения в порядке присутствия их в выражении; (5) выполняет логические операции в порядке убывания их приоритетов. Приведенный порядок вычисления значений арифметического выражения следует соблюдать для получения правильных ре- зультатов. СИМВОЛЬНОЕ ВЫРАЖЕНИЕ представляет собой совокупность символьных: констант, функций, простых переменных, элемен- тов массивов и символьных системных переменных, соединен- ных символами операций отношения, операции (+) конкатенации (сцепления) и, возможно, круглыми скобками. Например: A$=”AGN”:PRINT А$+”-47”, ”А”+”В”+”С” AGN-47 АВС В дальнейшем при изложении настоящей главы для выраже- ний арифметического и символьного будут соответственно ис пользоваться сокращения 'АВ' и 'СВ'. Язык БЕЙСИК располагает 13-ю встроенными символьными функциями, которые весьма полезны при обработке различного рода символьной информации, а также для преобразования дан- ных при организации работы с файлами прямого доступа. Имя символьной функции всегда завершается символом Аргу- ментами символьных функций могут быть как арифметические, так и символьные выражения, а значениями только цепочки сим- волов. Табл. 26 представляет все допустимые символьные фун- кции языка БЕЙСИК ПЭВМ ИСКРА 1030. Рассмотрим теперь символьные функции несколько подроб- нее. Функция CHR$ (К) является обратной к функции ASC (Х$) и значение ее есть символ, код которого равен целому числу К в интервале 0 + 255. Как правило, данная функция используется для формирования символьных строк, содержащих специальные знаки. Например: PRINT ’’Символ '”+CHR$ (167)+”' обозначает меру А” Символ Ч' обозначает меру А
Функция Назначение функции CHRS (К) HEXS(K) LEFTS (XS, К) MIDS(XS. К[.Р]) Преобразование целого К в символ Преобразование К в 16-ричные символы Выделение первых К символов из xs Выделение из xs подцепочки длиной Р, начиная с К-го символа MKIS(K) MKSS(K) Преобразование целого К в цепочку символов Преобразование числа К обычной точности в цепочку символов MKDS (К) Преобразование числа К двойной точности в цепочку символов OCTS(K) RIGHTS (Х$, К) SPACES (К) STRS(K) STRINGS (К, Р) STRINGS (К. XS) Преобразование К в 8-ричные символы Выделение последних К символов из XS Строка символов 'пробел' длины К<255 Преобразование К в строку символов Цепочка из К символов chrs (Р) Цепочка из К первых символов xs Функция НЕХ$ (К) формирует символьную строку, представляю- щую собой 16-ричное значение округленного целого числа К арифметического аргумента. Величина К должна находиться в интервале -32768 + 65535 и НЕХ$ (-К)=НЕХ$ (65536-К). Например: PRINT НЕХ$ (1942), НЕХ$ (-32535), НЕХ$ (65536-32535) 796 80Е9 80Е9 Описание функции OCTS (К) отличается от функции НЕХ$ (К) только тем, что вместо 16-ричного значения формируется 8-рич- ное. Например: PRINT ОСТ$ (1942), ОСТ$ (-32535), ОСТ$ (65536-35535) 3626 100351 100351 Функция LEFTS (Х$, К) выделяет первые К символов цепочки Х$, где число К должно находиться в интервале 0+255. Значение функции при K>LEN (Х$) полагается равным Х$, а при К=0 - пус- той цепочке. Функция LEFTS является частным случаем функ- ции MIDS. Функция MIDS (Х$, К[, Р]), где целые части К и Р арифметиче- ских выражений лежат в интервале 0+255 (Р+К>0), выделяет из произвольной цепочки Х$ Р символов, начиная с ее К-й пози- ции. При отсутствии аргумента Р выделяется часть цепочки Х$ от К-го символа до ее конца, а при Р=0 или K>LEN (Х$) функция имеет пустое значение. Например:
PRINT MIDS f’AAGGNNZZ”, 3, 4), MID$ (” 123”+”456”, 3) GGNN 3456 Частными случаями MIDS являются функции LEFTS и RIGHTS: LEFTS (XS, K)=MIDS (XS, 1,K) RIGHTS (XS, K)=MID$ (X$, LEN (XS) -K+1) Функции MKIS (K), MKSS (К) и MKD$ (К) являются обратными для функций CVI, CVS и CVD, и служат для преобразования соответ- ственно целого числа, числа обычной и двойной точности в це- почку символов. Например: PRINT MKIS (19), MKSS (15.555), MKD$ (15.5555) !! Hex-II Tyx-ll Данные три функции весьма полезны при работе с файлами пря- мого доступа. Функция RIGHTS (Х$, К) является частным случаем функции MIDS и особых пояснений не требует, например: PRINT RIGHTS (”123456789”, 5) 56789 Функция SPACES также проста и пояснений не требует, напри- мер: PRINT ”AAA” + SPACE$(10) + ”BBB” AAA ВВВ Функция SPACES(O) определяет пустую символьную перемен- ную. Функция STR$(K) представляет в символьном виде значе- ние К арифметического аргумента. Изображению положительно- го числа предшествует один пробел. Этот момент следует учи- тывать при использовании данной функции в операциях сравне- ния. Например: PRINT STR$(29.0747), LEN (STR$ (29.0747)) 29.0747 8 Функция STRINGS (К, P), где К и P - целые числа из интервала 0+255, порождает цепочку из К копий символа, код которого равен Р. Например: PRINT STRINGS (3,42) + STRINGS (3,47) ***/// Наконец, функция STRINGS (К, Х$), где К - целая часть арифме- тического аргумента со значением в интервале 0 + 255, порож- дает цепочку из К копий первого символа непустого аргумента
Х$. Например: PRINT STRINGS (5, ”AVZ”) + STRINGS (5, ”VDT”) AAAAAVVVVV Так как встроенные функции языка БЕЙСИК могут участво- вать в образовании выражений наравне с константами и пере- менными, а в качестве их аргументов допускаются выражения то на основе базовых функций языка в программах можно обра- зовывать различного рода функциональные конструкции и опре- делять функции пользователя. Примеры правильного образова- ния функциональных конструкций: ABS (COS(X) + SIN (X)*SQR (Y~X+LOG(X*Y))) ABS (FIX (X*10~K) -FIX (FIX (X*1(T K)/10)*10) RIGHTS (X$, INSTR (X$,Y$)) LEFTS (X$, INT (LEN(Y$))) CHRS (CINT (X*Y)); RND((SGN(X+Y)*SGN (Z~3)) В частности, вторая из представленных функциональных кон- струкций служит для получения значения К-го десятичного зна- ка после запятой произвольного действительного числа. В при- ложении 6 приводится сводка функциональных конструкций, базирующихся на встроенных функциях языка БЕЙСИК и пред- ставляющих интерес для практического использования в прог- раммах, скажем, в качестве функций пользователя. 5.6. ОПИСАНИЕ КОМАНД ЯЗЫКА БЕЙСИК Команды языка БЕЙСИК вводятся с консоли ПЭВМ и выполня- ются сразу же после их ввода, т. е. после нажатия клавиши 'ПУСК'. Следует сразу же отметить, что деление на команды и операторы до некоторой степени условно: большинство ко- манд может выполняться в программном режиме, а операторы языка - в режиме команд. Деление на команды и операторы отражает, во-первых, принцип их использования при работе пользователя в среде языка БЕЙСИК. Команды, в отличие от операторов языка, используются, как правило, для выполнения таких действий, которые нецелесообразно, а то и вовсе нельзя (например, из-за невозможности предусмотреть какие-то дей- ствия в программе, что часто имеет место в многомодульных программных системах, особенно диалогового типа) проводить в программном режиме: - модификация и корректировка текста программы; - очистка рабочей области БЕЙСИКа; - оперативная работа с каталогами томов и файлами; - оперативное изменение данных программы; - задание режима отладки программы; - запуск программы и др.
Следует подчеркнуть, что, например, для получения оператив- ной информации о программе или оперативного изменения не- которых ее данных (значений констант, переменных, элементов массивов и т. д.) можно в командном режиме использовать и большинство операторов языка БЕЙСИК (PRINT, LPRINT, LET И т. д.). Более существенным различием команд и операторов язька является не принцип их использования, а выполнения, а именно: после нормального выполнения любого оператора БЕЙСИК-про- грамма продолжает свою работу согласно заложенного в ней алгоритма, тогда как после выполнения ряда команд, использу- емых в программной строке, программа завершает работу с вы- ходом на уровень ввода команд, предоставляя пользователю возможность в режиме команд произвести нужные действия или запустить программу заново. Следовательно, команды не только специально предназначены для работы в командном ре- жиме, но и при использовании ряда их в программе переводят после своего выполнения БЕЙСИК в режим ввода команд. Этот момент следует учитывать при использовании команд в програм- мном режиме. Так как и команды, и операторы, за некоторым исключением, могут использоваться как в командном, так и в программном режимах, то ниже будем часто использовать выражения 'коман- дная строка' и 'программная строка', отражающих два режима работы в среде языка БЕЙСИК. Таким образом, деление функциональных компонент языка БЕЙСИК на команды и операторы отражает не только принцип использования их в том или ином конкретном случае, но и раз- личную реакцию самого языка БЕЙСИК на команду и оператор, даже если в качестве команды выступает оператор. Более того, некоторые команды языка (напр., COLOR) оказывают действие не только в рамках среды БЕЙСИКа, но их действие сохраняет- ся и после перехода в систему АДОС. Каждая команда языка идентифицируется уникальным име- нем (служебное слово языка), за которым следует набор допус- тимых параметров, разделенных запятой (,) или дефисом (-). По- ле параметров от имени команды должно отделяться по край- ней мере одним пробелом. В качестве параметров команды мо- гут использоваться числовые и символьные выражения и пере- менные. Арифметические и символьные выражения для крат- кости будем обозначать соответственно 'АВ' и 'Сб'. Под цело- численным значением АВ будем понимать округление до целого значения произвольного АВ. БЕЙСИК ИСКРА 1030 располагает 25-ю командами, полный перечень которых приводится в табл. 27. В приведенной таблице символом (*) помечены те команды, которые после своего использования в программном режиме переводят БЕЙСИК в режим ввода команд, а отмеченная двумя звездочками (**) команда CONT вообще не допустима в прог- раммном режиме. Команда SAVE помечена тремя звездочками,
Команда Назначение команды AUTO • BLOAD BSAVE CHDIR CLEAR CONT •• DELETE • EDIT • FILES KILL LIST LLIST • LOAD MERGE * Генерация номеров программных строк Чтение с диска файла в двоичном формате Запись на диск файла в двоичном формате Замена активного каталога тома Очистка памяти от данных, но не программы Возобновление программы после прерывания Удаление заданных программных строк Вывод программной строки на редактирование Вывод на экран имен файлов указанного тома Удаление указанного файла на томе Вывод указанных строк на экран или в файл Вывод указанных программных строк на печать Загрузка в память программного файла Загрузка программного файла с диска для объедине- ния его с программой в памяти MKDIR NAME - AS NEW • RENUM • RESET RMDIR RUN SAVE ••• SYSTEM Создание подкаталога на указанном томе Переименование файла на дисковом томе Очистка рабочей области БЕЙСИКа Перенумерация программных строк Закрытие всех открытых файлов программы Удаление указанного каталога тома Загрузка программы с диска и запуск ее Выгрузка программы из памяти на диск в файл Выход из состояния БЕЙСИКа, закрытие всех файлов и возвращение в состояние системы АДОС TRON TROFF Включение режима трассировки программы Отмена режима трассировки программы т. к. использование ее в программном режиме в зависимости от ее параметров может как нарушать, так и сохранять порядок выполнения. Остальные команды языка БЕЙСИК при корректном использовании их в программном режиме не нарушают естест- венного порядка выполнения программы. Ниже приводится подробное описание команд языка БЕЙСИК, за исключением команд AUTO, DELETE, LIST, LLIST, MERGE, NEW, RENUM, RUN и SAVE, весьма тесно связанных с процедурами ввода, формирования и корректировки программ и вследствие этого описанных в разд. 5. 3. Три команды CHDIR, MKDIR и RMDIR языка БЕЙСИК имеют одинаковый формат {CHDIR I MKDIR I RMDIR} ”<путь>”
и служат для обеспечения работы с каталогами дисковых томов соответственно: замена активного каталога, создание и удале- ние подкаталога, определенного единственным параметром 'путь*. Описание данных команд (за исключением такой детали синтаксиса, как взятие параметра команды в кавычки и недо- пустимость сокращенного написания команд MKDIR и RMDIR) полностью соответствует аналогичным командам системы АДОС и с соответствующими примерами может быть найдено в разд. 4.4.4 и 4.4.7. Здесь же уместно сделать одно замечание, касающееся всех команд и операторов, содержащих в качестве параметров путь к файлу' или 'спецификатор файла' (СФ). В качестве таких параметров всегда можно использовать символьную перемен- ную, а в ряде случаев и символьное выражение. Если данный момент и не будет упоминаться при описании соответствующих средств языка БЕЙСИК, то он предполагается уже известным читателю. Примедем примеры использования вышеуказанных команд: 1. MKDIR "B:\KATALOG” - создается подкаталог с именем KATALOG на томе УВВ 'В'; 2. CHDIR ’’B:\KATALOG” - активным делается подкаталог KATALOG на томе УВВ 'В'; 3. RMDIR ”B:\KATALOG” - на томе УВВ 'В' удаляется подка- талог с именем KATALOG; 4. A$=”C:\KATALOG”:MKDIR А$ - аналогично примеру 1; 5. AS=”C:”:B$=”\KATALOG”:RMDIR А$+В$ - аналогично при- меру 3. При неправильном применении команды RMDIR (попытка уда- лить главный каталог тома, удаление непустого подкаталога и так далее) БЕЙСИК не производит действий по изменению ка- талога и выдает сообщение 'Ошибка доступа к файлу'. Команда BSAVE имеет формат BSAVE "СФ”, <АВ 1 >, <АВ2> и служит для выгрузки в бинарном формате на диск файла, за- данного параметром 'СФ'. Параметр 'АВ1' определяет целочис- ленное значение АВ, находящегося в диапазоне 0-5-65535 и за- дающего адрес памяти, из которого считывается информация (образ памяти). Значение 'АВ1' задает смещение в сегменте памяти, объявленном в БЕЙСИК-программе последним опера- тором DEF SEG. Параметр 'АВ2' определяет целочисленное зна- чение АВ в диапазоне 1-5-65535 и задает длину в байтах выгружа- емой на диск указанной области памяти. Обратной команде BSAVE является команда BLOAD, которая имеет формат BLOAD "СФ” [,<АВ1>]
и служит для загрузки с диска в память в бинарном формате файла, определенного параметром 'СФ', по адресу памяти, за- данному целочисленным значением параметра 'АВ1'. Параметр 'АВ1' имеет тот же смысл, что и в команде BSAVE, но при его отсутствии используется адрес памяти, из которого загружае- мый файл был ранее выгружен на диск. Обе команды BLOAD и BSAVE используются, как правило, для загрузки в память и хра- нения на дисках программ и данных в бинарном формате (копии участков памяти). При использовании команды BLOAD следует проявлять особую осторожность, так как БЕЙСИК не осуществ- ляет проверки адресов и возможно разрушение области памя- ти, в которой находится интерпретатор БЕЙСИКа. Приведем простой пример использования команд BSAVE и BLOAD для быстрого восстановления содержимого экрана дисплея: 1. KEY OFF:CLS:LOCATE 10, 34:PRINT ’’Меню пакета:” 2. LOCATE 11, 34:PRINT ”============”: LOCATE 13, 24 3. PRINT ”1. Сортировка файлов на дисках”:ЕОСАТЕ 14, 24 4. PRINT ”2. Редактирование текстов”: LOCATE 15, 24 5. PRINT ”3. Расширение средств БЕЙСИКа”±ОСАТЕ 16. 24 6. PRINT ”4. Контроль исполнительской дисциплины” 7. LOCATE 17,24:PRINT ”5. Расчет стандартных диафрагм” 8. DEF SEG=&HB800:BSAVE ”C:AGN, 0, &H1000:GOSUB 12 9. CLS.LOCATE 10,31:PRINT ’’Выполнение 3aKa3a”:FOR K=1 TO 1500 10. NEXT:LOCATE 12,30:INPUT ’’Возврат к меню (1-YI2-N)”; X$ 11.I F X$<>”1” THEN NEW ELSE BLOAD ”C:AGN”:GOSUB 12:GOTO 9 12.LOCATE 25,30:INPUT ’’Задать номер функции”; R.RETURN Команда CLEAR имеет формат CLEAR [,[К][,Р]] и служит для очистки от данных всей рабочей области БЕЙСИКа, сохраняя при этом саму программу. После выполнения команды массивы в программе не определены, числовым и символьным переменным присваиваются соответственно нулевые и пустые значения, а также теряется информация операторов DEF и прек- ращает работу оператор ВЕЕР (звуковой сигнал). Наряду с этим по команде CLEAR производятся действия: - закрываются все открытые в программе файлы; - обнуляются все переменные, объявленные по COMMON общими; - сбрасываются стэк и зона строки символов БЕИСИКа; - освобождаются все буфера ввода-вывода дисковых УВВ. Параметр 'К' команды CLEAR указывает в байтах максимальный размер рабочей области БЕЙСИКа, а параметр 'Р' - размер в байтах для его стэка (по умолчанию для 'Р' выбирается наи- меньшее из чисел 512 или 1/8 часть доступной памяти в рабочей области БЕЙСИКа).
Как правило, параметр 'К'используется для резервирования памяти в рабочей области под подпрограммы на языке Ассемб- лера, а параметр 'Р* - для программ, содержащих оператор PRINT для вывода на экран дисплея сложных графических объ- ектов, или операторы GOSUB и FOR с большим числом вложен- ных подпрограмм и циклов. При необходимости очистки от дан- ных только части рабочей области БЕЙСИКа следует использо- вать оператор ERASE в программном или командном ре ;имах. Команду CLEAR удобно использовать для динамического пере- распределения рабочей области БЕЙСИКа под МАСМ - подпрог- раммы, используемые БЕЙСИК-программой. При использовании CLEAR ,Р в программном режиме следует помнить, что в ре- зультате ее выполнения теряются значения переменных и эле- ментов массивов. Команда CONT без параметров служит для возобновления программы, прерванной по операторам STOP, END или нажати- ем клавиш 'CTR\ S/В . Перед использованием команды CONT следует помнить, что оператор END закрывает все открытые файлы программы, а после редактирования прерванной прог- раммы использование команды CONT крайне нежелательно из-за возможности возникновения непредсказуемых результа- тов. Прерванная (по 'CTR'+'S/B'), приостановленная (STOR) или прекращенная (END) программа по команде CONT возобновляется с точки прекращения своего выполнения. Относительно одной программы команду CONT можно приме- нять любое число раз. Следует помнить, что использование ко- манды CONT в программном режиме недопустимо. Команда FILES имеет формат FILES [”СФ”] и служит для вывода на экран дисплея имени заданного пара- метром 'Оф' файла дискового тома (по умолчанию выводятся имена всех файлов тома на активном УВВ). Команда FILES дей- ствует подобно команде DIR с параметром 7W' системы АДОС (разд. 4.4.3) и в параметре 'СФ' можно использовать обобщаю- щие символы '*'и ?', принятые в АДОС. Наряду с именами по команде FILES выводится информация о размере в байтах сво- бодного места на дисковом томе. Примеры: FILES ”В.” FILES ”B:BSAVE” FILES ” B:\KATALOG” A$=’C:”;FILES A$ - вывод имен всех файлов на томе в устройстве 'В'; - вывод имени файла BSAVE; - вывод всех имен файлов под- каталога KATALOG тома на УВВ 'В'; - вывод имен всех Лайлов на томе в устройстве 'С' (винчес- терский или виртуальный диск)
Команда KILL имеет формат KILL ”СФ” и служит для удаления определенного параметром 'СФ' файла на заданном или активном дисковом томе. Имя файла в пара- метре следует указывать полностью. Команда KILL применима ко всем типам файлов: программным, с прямым и последова- тельным доступом, и может удалить любой заданный файл, исключая непустой, активный и главный каталог тома, а также открытые в программе файлы данных. При попытке удалить открытый файл выдается сообщение 'Файл открыт' и файл оста- ется в сохранности. Например, по команде KILL ”B:\LEVEL\PTIP BAS” удаляется файл PTIP .BAS, находящийся в подкаталоге LEVEL тома на УВВ 'В'. При неправильном использовании коман- ды KILL выдается сообщение 'Ошибка доступа к файлу' или 'Осо- бый случай . Команда LOAD имеет формат LOAD ”СФ” [,R] и служит для загрузки (и при необходимости запуска) прог- раммы, находящейся в файле, определенном параметром 'СФ'. В случае отсутствия у имени файла расширения по умол- чанию полагается расширение имени '.BAS'. Следует отметить, что при использовании в команде LOAD имени БЕЙСИК-програм- мы без указания расширения (если оно действительно отсутст- вует) возникает ошибка 'Файл не найден. Обойти эту ситуацию можно либо присвоением файлу расширения имени BAS', либо заданием имени файла через символьную переменную, напри- мер: A$=”FAIL”:LOAD А$, а не LOAD “FAIL”. Перед загрузкой программы команда LOAD закрывает все открытые файлы и удаляет из памяти предыдущую программу и все связанные с ней данные. Если в команде указан параметр 'R', то загружен- ная программа начинает сразу же выполняться и все открытые до ее загрузки файлы остаются открытыми. Следовательно, ко- манду LOAD с параметром 'R' можно использовать для дозаг- рузки нескольких программ (или частей одной и той же прог- раммы), причем дозагрузка осуществляется всегда с самого начала при предварительной очистке памяти от предыдущей программы и ее данных. При отсутствии параметра 'R' после загрузки программы БЕЙСИК переходит в режим ввода команд. Например, по команде LOAD ’’B:\SYSTEM\PROG.041”,R с тома на УВВ 'В' загружается и начинает выполняться программа, нахо- дящаяся в файле PROG.041 подкаталога SYSTEM. Команда SAVE является обратной команде LOAD и подробно описана в разд. 5.3. Здесь мы дополнительно отметим одно ее
свойство в программном режиме. Если команда SAVE исполь- зуется в программной строке с параметром Т=А, то на диск записывается исходный текст программы, после чего осуществ- ляется выход в режим ввода команд, тогда как использование SAVE без этого параметра не меняет естественного порядка вы- полнения программы. Следующий простой пример иллюстриру- ет сказанное: 10 PRINT ”LASNAMAE”,:A$=”C:A42” 20 SAVE A$:PRINT "SAVE 1” 30 SAVE ”C:S67”, A:PRINT ’’SAVE 2” RUN LASNAMAE SAVE 1 Команда RESET без параметров закрывает все открытые в программе файлы на дисковых томах, а команда SYSTEM без параметров закрывает все открытые файлы и осуществляет вы- ход из состояния БЕЙСИК (») в состояние операционной сис- темы (А>). Нажатие клавиш 'CTR'+'C' в отличие от команды SYSTEM только переводит БЕЙСИК в режим ввода команд. Наряду с закрытием файлов команда RESET обеспечивает рабо- ту с файлами данных после смены дискет на УВВ. RESET заме- няет внутреннее управление дискетами по таблице их адресов в активном УВВ к моменту своего выполнения. Команду RESET следует применять после каждой смены дискет на УВВ, а опера- тор CLOSE - перед их сменой с целью актуализации таблицы адресов дискет. Например: 500 CLOSE 510 INPUT ’’Замените дискету на УВВ 'В' <ПУСК> 520 RESET Команда NAME AS имеет формат NAME”СФ1” AS”СФ2” и служит для присвоения файлу, определенному параметром 'СФ1', нового имени из параметра 'СФ2'. В параметре 'СФ2' обя- зательно указывается имя дискового УВВ, если оно отлично от активного, в противном случае выдается сообщение 'Ошибка переименования'. В качестве параметров команды можно ис- пользовать предварительно определенные символьные пере- менные. Примеры использования команды NAME AS: NAME ”C:PROG1.BAS” AS ”C:MTOHSATA.BAS” A$=”C:PROG1.BAS”:B$=”C:MTOHSATA.BAS”:NAME A$ AS B$, в которых файл PROG1 .BAS на томе УВВ 'С' переименовывается в файл MTOHSATA.BAS. После переименования файл сохраняет свое прежнее местоположение на диске и характеристики.
Команды TRON и TROFF без параметров служат соответст- венно для включения и выключения режима трассировки БЕЙ- СИК-программ. В режиме трассировки, используемом, как пра- вило, для отладки программ, на экран дисплея выводятся в квадратных скобках номера всех выполняемых программных строк, расположенных между операторами TRON и TROFF, сов- местно с результатами, выводимыми на экран. Например: 100 A=46:B=41:C=21:TRON 150 PRINT A+B+C:FOR К=1 ТО 3:S(K)=K~2 200 PRINT S(K);:NEXT K:PRINT ”VGS” 250 PRINT ’’Конец фрагмента” 300 TROFF:END RUN [150] 108 [200] 1 [200] 4 [200] 9 VGS [250] Конец фрагмента [300] Использование команд TRON и TROFF в программном режиме не нарушает естественного порядка выполнения программы. Если используется только одна команда TRON, то трассировка программы осуществляется от этой команды до логического конца программы. Если же используется только одна команда TROFF, то трассировки не происходит и команда игнорируется. В программе можно использовать произвольное число пар TRON-TROFF для отладки трассировки отдельных ее частей. С помощью операторов TRON-TROFF удобно осуществлять отладку циклических конструкций. Это же можно делать и с помощью приостановки выполнения программы по клавишам 'CTR'+'S/B', выводом нужной информации в командной строке и возобновлением выполнения программы по команде CONT. Завершив рассмотрение команд языка БЕЙСИК, переходим теперь к изучению операторов языка и основным приемам их использования при разработке БЕЙСИК-программ. 5.7. ОПИСАНИЕ ОПЕРАТОРОВ ЯЗЫКА БЕЙСИК Ведущим понятием языка БЕЙСИК является понятие операто- ра. Это наиболее крупное и содержательное понятие языка: каж- дый оператор определяет некоторый вполне законченный этап вычислений, обработки информации или управления. Запись оператора на БЕЙСИКе может оказаться достаточно длинной; список понятйй, из которых явно или косвенно образуется опе- ратор, может быть весьма обширным, так что изучение этого понятия требует обстоятельного рассмотрения ряда других по- нятий, значительная часть которых была рассмотрена в преды- разделах настоящей главы. Собственно говоря, раскры- понятия оператора языка БЕЙСИК, его использованию при
разработке различного рода алгоритмов, а также подготовке БЕИСИК-программ и посвящены следующие разделы главы. Оператор является минимальной логической программируе- мой единицей БЕЙСИК-программы, которая дает указание БЕЙ- СИКу выполнить определенные операции или действия по уп- равлению программой и другими ресурсами ПЭВМ. Каждый оператор состоит из идентифицирующего его служебного слова языка (имени) и набора параметров, которые для некоторых операторе могут отсутствовать. В большинстве случаев опера- тор содержит одно или несколько выражений, обеспечивающих БЕЙСИК информацией, какие операции следует произвести или какие действия следует выполнить. БЕЙСИК ИСКРА 1030 располагает большим набором операто- ров для создания различного назначения программных средств, которые по их основному назначению и в целях простоты рас- смотрения целесообразно разбить на следуюшие основные группы: (1) базовые операторы языка; (2) операторы управления системой; (3) операторы создания многомодульных программ; (4) операторы обработки прерываний; (5) операторы работы с файлами данных на дисках; (6) операторы работы с коммуникационными файлами; (7) операторы генерации звуковых сигналов; (8) операторы работы с графической информацией. Следует сразу же отметить^ что предложенная здесь классифи- кация операторов языка БЕЙСИК до некоторой степени услсвна и отражает, скорее, опыт и точку зрения авторов, полученные при работе с различными диалектами языка БЕЙСИК на различ- ного типа ПЭВМ [1-3]. В пользу данной классификации говорит и опыт подготовки различного уровня пользователей ПЭВМ для работы в среде языка БЕЙСИК. При изложении операторов языка БЕЙСИК будем придержи- ваться следующей методики: - описание формата и параметров оператора; - описание особенностей выполнения оператора; - наличие взаимосвязи с другими операторами; - основные сферы применения оператора; - наиболее типичные примеры использования оператора. При описании формата и параметров операторов будем при- держиваться соглашений, принятых выше при описании команд операционной системы и языка БЕЙСИК. Рассматривая в насто- ящей главе в определенной мере вопросы разработки эффек- тивных по тому или иному критерию БЕЙСИК-программ, связан- ных с использованием ряда операторов языка, авторы практи- чески не затрагивают такой важной характеристики, как надеж- ность программных средств, которая подробно освещена в ра- ботах [64- 68]. В качестве достаточно простого подхода к реше- нию данной проблемы можно предложить метод избыточности ПО, когда одну и ту же функцию выполняют несколько программ
(подпрограмм), реализованных на основе разных алгоритмов, но с одной и той же целевой функцией. Однако, скажем, в сис- темах реального времени использование такого подхода может встретить весьма существенные трудности. Так как значительное число пользователей ПЭВМ ИСКРА 226 в ближайшее время приступит к использованию ИСКРА 1030, то в процессе изложения операторов языка БЕЙСИК ИСКРА 1030 будем акцентировать внимание на имеющие место отличия в выполнении аналогичных или подобных операторов языка БЕЙ- СИК ИСКРА 226. Так как операторы управления системой пользователь может использовать уже на начальной стадии работы в среде БЕЙСИК, то к изучению этих операторов мы и приступаем в первую оче- редь. 5.7.1. Операторы языка БЕЙСИК для управления системой Операторы данной группы в первую очередь предназначены для управления системой, находящейся в состоянии БЕЙСИК, и могут выполняться как в программном, так и командном режи- мах. Под системой будем впредь понимать весь комплекс функ- ционирующих на ПЭВМ технических и программных средств, включая и самого пользователя, работающего с этими средства- ми. Операторы управления системой позволяют задавать режи- мы работы дисплея, принтера, управлять курсором и звуковой индикацией, присваивать значения функциональным клавишам и так далее. В отличие от ряда других операторов языка операто- ры управления системой использует, как правило, каждый поль- зователь, разрабатывающий в среде БЕЙСИК программное обеспечение любого назначения, и сфера действия большинства этих операторов не ограничивается рамками одной программы. Перечень операторов управления системой с кратким описани- ем их назначения приводится в табл. 28. Таблица 28 Оператор управления Назначение оператора управления ВЕЕР CLS COLOR * LOCATE • SCREEN • WIDTH • KEY • (3 формата) DATES • TIMES • OPTION BASE Генерация звукового сигнала Очистка экрана дисплея и его буфера Установка цветового режима экрана Управление курсором экрана дисплея Установка режима работы экрана дисплея Установка ширины строки вывода Обеспечение работы с функциональными клавишами и клавишами прерывания Установка системной даты Установка системного времени Установка начала нумерации элементов массивов в программе
Символом звездочка (*) помечены операторы управления, об- ласть действия которых (полностью или частично) распростра- няется до его переопределения. Рассмотрим теперь каждый из перечисленных операторов в отдельности. Следует сразу же отметить, что приводимые описания операторов в целом ряде случаев отличаются от их описания в документации [17], причи- ной чего, в частности, может быть тот или иной набор внешних устройств, поставляемых с ПЭВМ и отличающихся основными техническими характеристиками. Оператор ВЕЕР используется без параметров и служит для звуковой индикации путем выдачи сигнала частотой 800 Гц и длительностью 1/4 с. Основным назначением оператора являет- ся организация звуковой индикации при возникновении в про- цессе выполнения программы особых или аварийных ситуаций. Например, группа операторов 210 ВЕЕР:ВЕЕР:ВЕЕР:ВЕЕР: INPUT ’’Смените дискету на <В>”,Х выдает звуковой сигнал длительностью в 1 с, акцентируя внима- ние пользователя для смены дискет. Оператор CLS используется без параметров и служит для очистки экрана дисплея и его буфера. По данному оператору экран заполняется цветом фона и очищается активная страни- ца экрана в его буфере (для текстового режима дисплея) или весь буфер (для графического режима). После очистки курсор устанавливается в верхний левый угол экрана для текстового режима и в левую позицию второй строки экрана - в графиче- ском режиме дисплея. После выполнения оператора CLS точка, в которую устанавливается курсор, будет считаться последней точкой ссылки для последующего графического оператора. Если действует оператор VIEW, то по CLS очищается только активное окно экрана, и для очистки всего экрана перед CLS следут выполнить оператор VIEW без параметров. Экран дисп- лея можно очистить по клавишам 'CTR' + Y, а также изменяя его ширину операторами SCREEN и WIDTH. Основным назначением оператора CLS является очистка эк- рана дисплея перед выводом новой текстовой или графической информации с целью удаления 'лишнего фона', который может затруднить пользователю быстрее выделить нужную для него визуальную информацию. Дополнительно к сказанному, в графи- ческом режиме использование оператора CLS позволяет также в качестве последней точки ссылки установить начало экрана. Например, перед выводом текстовой информации оператор CLS очищает экран дисплея: 50 CLS:PRINT ”<ТЕХТ1>”:...:PRINT ”<ТЕХТ2>” 60....................................... 70....................................... 80 PRINT ”<ТЕХТ...................... >”
Следует отметить, что использование оператора CLS в команд- ной строке после команды NEW или LIST не приводит к очистке экрана дисплея. Оператор COLOR имеет формат COLOR {[К] [,[Ф][,Р]]1[Ф] [,Г]} и служит для установки цвета экрана дисплея, при этом первый набор параметров образует первый формат оператора и пред- назначен для текстового режима, а второй - для графического режима дисплея. Использовать оператор COLOR можно только при средней разрешающей способности экрана, иначе в графи- ческом режиме возникает ошибка с диагностикой 'Неверный вызов функции'. При наличии у ПЭВМ цветного дисплея можно использовать 16 различных цветов (табл. 29). Рассмотрим использование оператора COLOR в текстовом ре- жиме дисплея, для которого параметры имеют следующее наз- начение: К - значение АВ в диапазоне 0^-31, определяющее цвет и ре- жим выводимых символов; сам цвет определяется значе- нием в диапазоне 0-И 5, а прибавление к нему числа 16 определяет и цвет,и режим мерцания символов на экране дисплея; Ф-значение АВ в диапазоне 0-7 определяет цвет фона эк- рана; Р - значение АВ в диапазоне 0-15 определяет цвет квадрат- ной рамки экрана, не заполняемой информацией. В случае выхода значений указанных параметров из определен- ных для них диапазонов возникает ошибка с диагностикой 'Не- верный вызов функции' и цвета экрана остаются прежними. По умолчанию для каждого параметра используется его предыду- щее значение, однако использование оператора COLOR без ос- новных параметров не допустимо и инициирует сообщение 'Пропущен операнд . Таблица 29 Номер Цвет Номер Цвет 0 Черный 8 Серый 1 Синий 9 Голубой 2 Зеленый 10 Светло-зеленый 3 Фиолетовый 11 Светло-фиолетовый 4 Красный 12 Розовый 5 Оранжевый 13 Светло-оранжевый 6 Коричневый 14 Желтый _ 7 Белый 15 Ярко-белый
Для черно-белого дисплея параметры оператора COLOR име- ют следующие допустимые значения и смысл: [О - черный цвет выводимых символов 1 - подчеркнутые белые символы 2-5-7 - белый цвет выводимых символов [0+6 - черный цвет выводимых символов 7 - белый цвет выводимых символов [0 - черный цвет рамки экрана 1+7 - белый цвет рамки экрана Добавление числа 8 к значению К дает яркий белый цвет, а чис- ла 16 - мерцание символов. Например, использование операто- ра COLOR 0, 7, 0 устанавливает режим вывода черных символов на белом фоне с черной рамкой экрана. Следует отметить, что действие оператора COLOR распространяется только на инфор- мацию, выведенную на экран после его выполнения, тогда как предыдущая часть информации экрана остается без изменения. Это позволяет разнообразить оформление вывода на экран и сделать его более наглядным. Например, следующий простой фрагмент программы 1 CLS: X$=”<B>”:COLOR 0, 7, OiLOCATE 10, 20 2 PRINT ’’Заменить дискету на УВВ:” 3 COLOR 16, 7, ОХОСАТЕ 10, 44:PRINT Х$ выводит на экран с белым фоном и черной рамкой текст 'За де- нить дискету на УВВ: <В>' с мерцающей частью после двоеточия, т. е. логическое имя УВВ. В графическом режиме параметр 'Ф' задает АВ с целочислен- ными значениями в диапазоне 0+15 и определяет цвет фона эк- рана дисплея. Параметр Т' задает АВ с целочисленными зн че- ниями 1, 2 и 3, определяющими цвет выводимой графической ин- формации. В зависимости от значения параметра 'Ф' значение параметра Т' определяет цвет экрана в графическом режиме (ЦЭГР) (табл. 30). Таблица 30 Значение *Ф' Четное Нечетное Значение Т' ЦЭГР ЦЭГР 1 Зеленый 2 Красный 3 Коричневый Г олубой Оранжевый Белый
В графическом режиме не определяется рамка экрана, а вы- ход значений параметров из допустимых диапазонов вызывает ошибку с диагностикой 'Неверный вызов функции'. В этом режи- ме также недопустимо использование оператора COLOR без ос- новных параметров. Оператор COLOR предназначен, в первую очередь, для более наглядного и эстетичного представления ин- формации на экране дисплея. Оператор LOCATE имеет формат LOCATE [А] [,[В] [,С] [, [D] [, Е]]] и служит для установки курсора в заданную позицию экрана и определения его формы и видимости. Параметры 'А' и 'В' зада- ют АВ с целочисленными значениями соответственно в диапа- зонах 1-$-25 и 1-J-80 (1+40), определяющими номер строки экрана и позиции в ней. При этом производится только смещение кур- сора в начало заданной строки, но не ее позиции, хотя указан- ная позиция строки запоминается и следующий оператор PRINT программы будет выводить информацию именно с этой позиции строки. Параметр 'С' задает видимость курсора: 0 (невидим) и 1 (ви- дим; действует и по умолчанию). Параметры 'D' и 'Е' задают АВ с целочисленными значениями в диапазоне 0-5-7 и определяют форму курсора следующим образом. Представим себе минимальный квадрат, ограничивающий сймвол экрана и разбитый на 8 идентичных элементарных пря- моугольников (строк развертки), пронумерованных сверху вниз от 0 до 7. Стандартный курсор по размеру и совпадает с одной строкой развертки. Параметры 'D' и 'Е' определяют строки раз- вертки для тела курсора. При этом, если: D< Е, курсор занимает строки развертки D-E; D = Е .курсор занимает строку развертки Е; D>E,курсор занимает строки развертки с номерами 0-Е и D-7, т. е. может состоять из двух частей, либо пок- рывать весь символ экрана. Приведем примеры использования оператора LOCATE: LOCATE ,, 1, 7, 0 - формируется курсор на строках разверт- ки 0 и 7, т. е. ограничивающий сканируе- мый символ сверху и снизу; LOCATE,, 1, 3, 5 - формируется курсор на строках разверт- ки 3-5-5; LOCATE ,, 1, 7, 7 - формируется стандартный курсор Следует отметить, что параметры 'С', 'D' и 'Е' недопустимы в графическом режиме дисплея. Для LOCATE подобно оператору COLOR любой параметр является необязательным, и при его отсутствии используется последнее (или по умолчанию) его значение. Однако использование оператора LOCATE без основ-
ных параметров приводит к ошибке с диагностикой 'Пропущен операнд. После выполнения оператора LOCATE следующий оператор вывода на экран размещает информацию с заданного местоположения курсора: 1. 10 CLS:FOR К=1 ТО 20:FOR L=1 ТО 80 20 LOCATE 20-К+1, 80-L+1.PRINT ”A”:NEXT L.NEXT К 2. 1 CLS 2 X=RND (19.42)*46:Y=RND (19.47)*80 3 IF X+1 <=24 AND Y+1 <=80 GOTO 4 ELSE 2 4 LOCATE X+1, Y+1:PRINT ”A”:GOTO 2 В результате выполнения первого фрагмента происходит запол- нение бегущей буквой ' А' 20 первых строк экрана: начиная с 20-й строки по первую и в строках справа налево. В результа- те выполнения фрагмента 2 на основе функции RND вычисляют- ся координаты положения курсора для оператора LOCATE и в этой позиции выводится буква ' А', формируя на экране дисп- лея мозаику из случайно распределенных'А . Если в каком-либо типе дисплея для символа экрана выделено больше строк раз- вертки, то соответственно меняются и имеющие смысл значе- ния для параметров 'D' и 'Е'. Например, черно-белый дисплей ИБМ имеет 14 строк развертки, а цветной - 8 строк развертки. Курсор представляет собой важнейший компонент дисплея ПЭВМ и служит как для указания местоположения выводимой (вводимой) информации на экран (с клавиатуры), так и для ука- зания на различного рода объекты, расположенные на экране дисплея. Поэтому вопрос управления курсором представляется нам достаточно важным. Описанный выше оператор LOCATE в значительной мере решает эти задачи. Однако языки програм- мирования, кроме Макроассемблера и БЕЙСИКа, не имеют стан- дартных средств управления курсором и читателя, интересую- щегося решением этого вопроса, отсылаем к весьма интерес- ной книге [69]. К вопросу управления курсором экрана непосредственно от- носятся и системные функции CSRLIN и POS (к), которые позво- ляют индентифицировать местоположение курсора на экране. Функция CSRLIN принимает целочисленные значения в диапазо- не 1+25 и определяет номер строки экрана, в которой находится курсор. Функция POS (к) с фиктивным аргументом 'к' принимает цело- численные значения в диапазоне 1 + 80 (1+40; в зависимости от ширины экрана) и определяет номер позиции строки экрана, в которой установлен курсор. Пример использования указанных системных функций: 1 LOCATE 10, 40:PRINT "PARCELLA-88” 2 PRINT ”Строка=”; CSRLIN; ”Столбец=”; POS (88) RUN PARCELLA-88 Строка= 11 Столбец= 20
К сожалению, функции CSRLIN и POS (к) не позволяют непос- редственно определять местоположение текущей точки в графи- ческом режиме экрана в терминах 'строка/столбец', что пред- ставляется весьма важным для организации синхронного выво- да на экран графической и текстовой информации. Практические рекомендации по данному вопросу можно найти в разд. 5.7.8. Оператор SCREEN имеет формат SCREEN [Р][,Т[, [А] [, В]]]] и служит для задания режима работы дисплея. Параметр 'Р' за- дает АВ с целочисленными значениями 0, 1 и 2, определяющими соответственно текстовой, графический среднего и графиче- ский высокого разрешений режимы дисплея. Ширина экрана дисплея устанавливается по умолчанию или оператором WIDTH. Параметр 'Т' задает АВ с целочисленными значениями '0' и 'не О' (тО) и определяет режим использования цвета (в зависи- мости от значения параметра 'Р') согласно табл. 31. Таблица 31 0 1 2 т тО Разрешен цвет Черно-белый Черно-белый 0 Черно-белый Разрешен цвет Черно-белый Параметры 'А' и 'В' допустимы только в текстовом режиме при Р=0 и задают АВ, целочисленные значения которых опреде- ляют соответственно активную и видимую страницы буфера эк- рана дисплея. Допустимые значения для 'А' и 'В' лежат в диа- пазоне 0-5-7 (при ширине экрана 40) и 0-3 (при ширине экрана 80). По умолчанию значения параметров 'А' и 'В полагаются равными нулю. При использовании оператора SCREEN без ос- новных параметров возникает ошибка с диагностикой 'Пропу- щен операнд'. По умолчанию предполагается режим экрана дисплея согласно оператора SCREEN 0, 0, 0, который приписан Функциональной клавише 'F10'. Приведем примеры: SCREEN 0, 5, 0, 3 - текстовой режим с разрешением цвета при активной и видимой страницах бу- фера экрана соответственно 0 и 3; SCREEN 1,5 - графический черно-белый режим сред- ней степени разрешения; SCREEN 2, 0 - графический черно-белый режим высо- кой степени разрешения.
Следует отметить, что при переводе экрана оператором SCREEN из одного режима в другой существует только одно ог- раничение: экран, находящийся в режиме средней степени раз- решения (SCREEN 1), не переводится оператором SCREEN 0 в текстовой режим, т. е. имеет место следующая диаграмма: I I I SCREEN О SCREEN 1 <-> SCREEN 2 I_______________________________I Основным назначением оператора SCREEN является изменение режима работы дисплея с текстового на графический или наобо- рот. Оператор DATE$=X$ служит для установки системной даты, являющейся значением СВ Х$. Вводимая дата должна кодиро- ваться в виде {ММ-ДД-ГГГГ I ММ/ДД/ГГГГ}, где ММ - месяц, ДД - день и ГГГГ - год; для 'ГПТ' допустимы значения из диапа- зона 1980-^-2099 и год может вводиться только двумя своими последними цифрами. Для получения текущей даты в программе следует использовать системную переменную DATES. Оператор TIME$=Y$ служит для установки системного време- ни, являющегося значением СВ Y$. Вводимое время кодируется в виде {ЧЧ I ЧЧ:ММ I ЧЧ:ММ:СС), где ЧЧ (0-23) - часы, ММ (0-59) - минуты и СС (0-59) - секунды. Для снятия текущего показания времени в программе используется системная переменная TIMES. Операторы DATES и TIMES используются для организации и ведения службы времени при эксплуатации прикладных прог- рамм, для обеспечения программ сбора статистики о функцио- нировании системы, а также для других программных средств, связанных с реальными датой и временем. Приведем простой пример использования обоих указанных операторов: 20 CLS 'Очистка экрана' 30 X$=”8/8/88”:YS=”19:15”:DATE$=X$ 'Установка даты' 40 TIME$=Y$:LOCATE 12,7 'Установка курсора экрана' 50 PRINT ’’Дата - ”;DATE$:LOCATE 12, 26 60 PRINT ’’Время - TIMES RUN Дата - 08-08-1988 Время - 19:15:00 Для организации службы времени наряду с перечисленными средствами можно использовать и системную переменную TI- MER, которая вычисляет количество секунд, прошедших после полуночи. Оператор WIDTH имеет формат WIDTH [{ # <АВ> I ”ИУ:” I, ] [ШС]
и служит для установки ширины строки выводной информации для заданного файла или устройства вывода. Первый параметр задает либо АВ с целочисленными значениями в диапазоне 1-5-15, которое определяет логический номер открытого файла программы, либо СВ 'ИУ', значениями которого могут быть толь- ко: SCRN (по умолчанию), LPTk (k=1+3), СОМ1 и COM2. При этом указываемые устройства должны быть включены в систему, иначе возникает ошибка с диагностикой 'Устройство недоступ- но'. Параметр 'ШС* задает АВ с целочисленными значениями в диапазоне 1-5-255, определяющими ширину выводимой строки в указанные файл или устройство. Для устройства SCRN (экран) допускаются значения АВ 'ШС' только 40 и 80, при этом значение 80 переводит экран графиче- ского режима средней степени разрешения в режим с высокой степенью разрешения, а значение 40 - наоборот; экран очищает- ся и рамка его принимает черный цвет. Для экрана в текстовом режиме происходит утолщение символов в два раза, но сама строка экрана используется полностью. Для устройств вывода установленная по WIDTH ширина стро- ки используется в операторах OPEN открытия файлов и не меня- ет ширины выводимых строк для уже открытых файлов. Однако, операторы вывода LIST, LLIST, LPRINT и устройства LPTk (k= 1-5-3) зависят от оператора WIDTH. Для выводимого файла оператор WIDTH заменяет ширину устройства, заданную при открытии выводимого файла. По умолчанию для принтера устанавливается ширина строки 80 при максимальной ширине 132, но допускается и ширина строки до 255 символов; в этом случае БЕЙСИК не выполняет возврата каретки и перевода строки. Ширина 255 выбирается по умолчанию для устройств связи. Для экрана оператор SCREEN может вызвать изменение ширины строки, установленной по WIDTH. Оператор WIDTH используется, как правило, для задания ши- рины строки для выводного файла или устройства печати и свя- зи, что весьма важно для организации управляемого вывода ин- формации. Приведем примеры использования оператора WIDTH. WIDTH ”LPT1:”, 132 - установка ширины строки 132 для пер- вого устройства печати; WIDTH 40 - Остановка для экрана дисплея ширины строки 40; WIDTH #2,255 - установка ширины строки 255 для от- крытого выводного файла с логиче- ским номером #2. Следует помнить, что при использовании в операторе WIDTH логического имени устройства оно должно кодироваться с двое- точием и в кавычках, как это показано в первом примере. Оператор OPTION BASE К служит для задания минимального значения 'к' индексов массивов в программе. Параметр 'К' при-
нимает значения 0 (по умолчанию) и 1. Данный оператор должен предшествовать в программе всем объявлениям и использова- ниям массивов. Например, по OPTION BASE 1 нумерация индек- сов для всех массивов в программе будет начинаться с едини- цы. Сфера действия оператора OPTION BASE ограничивается только содержащей его программой. При использовании опера- тора OPTION BASE 0 (или по умолчанию) нумерацию массивов можно осуществлять как с нуля, так и с единицы. При этом, для 1-мерных массивов (без их объявления) при нумерации элемен- тов с нуля максимальная длина массива определяется в 11 эле- ментов, а при нумерации с единицы - в 10 элементов. В случае использования оператора OPTION BASE 1 нумерация элементов массива осуществляется только с единицы и для 1-мерного массива без его объявления принимается длина в 10 элементов. Для более гибкой организации работы с массивами в прог- рамме не рекомендуется использовать оператор OPTION BASE1, однако данный оператор весьма полезен при необходимости решать вопросы совместимости программ, написанных на раз- ных диалектах языка БЕЙСИК. Оператор KEY имеет три формата: (1) KEY (ON I OFF I LIST) (2) KEY K, X$ (3) KEY M,CHR$ (CPK) + CHR$ (ПНК) и служит для присвоения значений функциональным клавишам F1+F10, расширения набора клавиш прерывания и отмены режи- ма вывода значений функциональных клавиш на экран. Прерыва- ния от функциональных клавиш можно обрабатывать в програм- ме. ФОРМАТ 1. По оператору KEY ON (или по умолчанию) на экран в 25-й (служебной) строке выводятся значения функциональных клавиш F1-F10 при ширине экрана 80 символов и клавиш F1+F5 при ширине экрана 40 символов. По оператору KEY OFF очища- ется служебная строка (25-я) БЕЙСИКа и становится доступной для вывода информации. Для возможности вывода информации в 25-ю строку перед каждым оператором PRINT следует исполь- зовать оператор LOCATE 25, Р (Р - номер позиции в строке). На- конец, по оператору KEY LIST на экран выводятся значения, при- писанные функциональным клавишам F1+F10 Например, группа операторов KEY OFF:KEY LIST очищает служебную строку БЕЙСИКа и выводит на экран теку- щие значения функциональных клавиш F1+F10. Основным наз- начением оператора KEY формата 1 является очистка служеб-
ной строки БЕЙСИКа и получение информации о текущих значе- ниях функциональных клавиш. ФОРМАТ 2. Параметр 'К' оператора KEY задает АВ с целочис- ленными значениями в диапазоне 1 + 10, определяющими номер функциональной клавиши. Параметр 'Х$' задает СВ, значение которого присваивается функциональной клавише, определяе- мой параметром 'К'. Присваивается не более 15-ти первых сим- волов значения СВ 'Х$'; если значение СВ 'Х$' содержит только пробелы, то отменяется использование указанной первым пара- метром оператора функциональной клавиши. Каждой функциональной клавише можно присвоить опреде- ленный текст длиной не более 15-ти символов, который по нажа- тию данной клавиши вводится в буфер экрана. Данная возмож- ность и является основным назначением оператора KEY форма- та 2. Например, присваивая функциональной клавише текст не- которой команды или оператора без номера строки, заканчива- ющийся кодом (&Н13) клавиши 'ПУСК', можно путем нажатия данной клавиши выполнять приписанную ей команду или группу команд (операторов языка в командном режиме). Так, по опе- ратору KEY 5, ’’FILES” + CHR$ (34) + ”В:” + CHR$ (34) + CHR$(13) клавише F5 присваивается значение, представляющее собой команду FILES ”В:”, и каждое нажатие данной клавиши будет инициировать вывод перечня всех имен файлов тома на 'В'. ФОРМАТ 3. Оператор KEY данного формата позволяет опреде- лить шесть дополнительных клавиш прерывания, обрабатывае- мых оператором ON KEY. Параметр 'М' задает АВ с целочислен- ными значениями номеров клавиш прерывания в диапазоне 15+20. Подпараметры 'СРК' и 'ПНК' определяют соответственно состояние регистра клавиатуры (расположен в ОП по адресам &Н417 и &Н418) и 16-ричный порядковый номер задействован- ной клавиши. Биты основного байта состояния клавиатуры не- сут смысловую нагрузку согласно табл. 32 . Таблица 32 Бит Значение Смысловая нагрузка 0 &Н01 Нажата правая клавиша КВР 1 &Н02 Нажата левая клавиша КВР 2 &Н04 Нажата клавиша ,ctr 3 &.Н08 Нажата клавиша alt , 4 &Н10 Состояние Scroll Lock* 5 &.Н20 Активизирована клавиша *nlk, 6 &.Н40 Активизирована клавиша, CLK* 7 &Н80 Состояние вставки <->
Порядковые номера (скан-коды) клавиш можно найти в докумен- тации [17]. Порядок обработки оператором ON KEY клавиш пре- рывания состоит в следующем: - анализируется использование клавиш 'CTR' + 'PrS', опре- деляющих параллельный вывод содержимого экрана на принтер. Даже в случае задания их в качестве клавиш пре- рывания данная комбинация выполняет и свою основную функцию; - нажатие функциональных клавиш F1-S-F1O и клавиш управления курсором приводит к выполнению их основных функций, поэтому данные клавиши не имеет смысла использовать в качестве клавиш прерывания; - обрабатывается нажатая клавиша прерывания. Скан-коды клавиш прерывания не поступают в буфер клавиату- ры, поэтому пользователь может производить их обработку только посредством оператора ON KEY. При большом произволе в определении клавиш прерывания не рекомендуется использо- вать в их качестве комбинации клавиш 'CTR' + 'S/B' n'CTR' + 'ALT' + так как после обработки прерывания от них сразу же возникает соответственно прекращение выполнения прог- раммы с выходом в режим ввода команд БЕИСИКа и системный сброс. Следует помнить, что клавиша прерывания рассматрива- ется БЕЙСИКОМ как единое целое без учета использования ла- тинского и русского регистров. Это связано с тем, что скан-код идентифицирует только саму клавишу, а основной байт состоя- ния клавиатуры различает только верхний и нижний регистр, а не латинский и русский. Основным назначением оператора KEY формата 3 является организация различного рода ветвящихся алгоритмов вычисле- ний, обработки и управления, когда выбор той или иной ветви алгоритма определяется по инициативе пользователя. Данное средство оказывается также весьма полезным при наличии в программе длительных по времени выполнения циклических конструкций. В этом случае посредством определенных зара- нее клавиш прерывания можно по инициативе пользователя приостанавливать выполнение цикла и снимать показания зна- чений интересующих переменных и элементов массивов, либо сохранять полученные результаты в дисковых файлах с воз- можностью последующего продолжения работы программы. Приведем пример, иллюстрирующий принцип использования оператора KEY формата 3, и результат его работы: О KEY 15, CHR$(&H2) + CHR$(&H1E):KEY (15) ON 1 KEY 20, CHR$ (&HO) + CHR$(&H2E):KEY (20) ON 2 ON KEY (15) GOSUB 3:ON KEY (20) GOSUB 4.GOTO 2 3 CLS:LOCATE 10, 20.PRINT’’Нажата клавиша <A>”:GOTO 5 4 CLS:LOCATE 10, 20:PRINT’’Нажата клавиша <c>” 5 GOTO6:RETURN
6 PRINT "Конец фрагмента” :END RUN Нажата клавиша <А> Конец фрагмента В приведенном примере под клавиши прерывания с номерами 15 и 20 задействованы соответственно 'А' и 'с' на латинском ре- гистре или 'А' и V - на русском. После запуска программа ожи- дает нажатия одной из клавиш прерывания и в случае наступле- ния такого события управление получает соответствующий блок обработки прерывания от данной клавиши. Блок обработки весь- ма прост и содержит только информационный текст о нажатой клавише прерывания. Наряду с данной информацией БЕЙСИК выводит и содержимое 15 первых байтов буфера, т. е. именно столько символов, сколько допускается присвоить функцио- нальной клавише F1-J-F10 по оператору KEY формата 2. Эта ин- формация в определенной мере может представить интерес пользователю об использовании клавиатуры до нажатия клавиш прерывания. 5. 7. 2. Базовые операторы языка БЕЙСИК К операторам настоящей группы относим те операторы язы- ка, которые наряду с простыми позволяют создавать сложные одномодульные БЕЙСИК-программы без обмена информацией с дисковыми устройствами и без обработки прерываний, ава- рийных и особых ситуаций. Следовательно, базовые операторы языка позволяют разрабатывать многие программные средства, использующие только стандартные устройства ввода (консоль) и вывода (экран дисплея и принтер). Операторы данной группы покрывают интересы значительного числа пользователей и, в первую очередь, начинающих программировать в БЕЙСИК-среде ПЭВМ ИСКРА 1030. Изложение операторов данной группы бу- дет проводиться в полном соответствии с принятыми выше сог- лашениями, при этом, по мере возможности, будет уделено вни- мание различиям аналогичных или подобных операторов диа- лекта языка БЕЙСИК ПЭВМ ИСКРА 1030 и ИСКРА 226. Общая сводка базовых операторов языка с их краткими характеристи- ками приведена в табл. 33. В таблице символом звездочка (*) отмечены базовые операторы языка, которые нельзя или бессмысленно использовать в ко- мандном режиме. Переходим теперь к подробному описанию операторов этой группы. Оператор присваивания имеет формат ( let]a=b,
Оператор Назначение оператора LET DEF DIM ERASE REM • LSET, RSET MIDS SWAP STOP • END RANDOMIZE DATA • READ • RESTORE • WHILE-WEND FOR-NEXT GOTO ON IF DEF FN • GOSUB RETURN • INPUT LINE INPUT PRINT WRITE LPRINT PRINT USING LPRINT USING Присвоение значения переменной Объявление типа переменной или массива Объявление массивов в программе Удаление массивов из программы Ввод комментария в программу Выравнивание символьных значений Замена части символьной переменной Обмен значений двух переменных Останов выполнения программы Завершение выполнения программы Запуск датчика псевдослучайных чисел Создание в программе таблицы констант Чтение данных из таблицы констант (ТабК) Инициация повторного чтения из ТабК Организация цикла с выходом по условию Организация цикла с выходом по счетчику Безусловный переход в программе Вычисляемый переход в программе Условный переход в программе Определение функции пользователя Переход к указанной подпрограмме Выход из подпрограммы после завершения Ввод информации в программу с клавиатуры Ввод строки символов с клавиатуры Вывод информации из программы на экран (отличается от print) Вывод информации из программы на принтер Форматированный вывод на экран дисплея Форматированный вывод на принтер lpti где сам идентификатор 'LET' оператора может опускаться. В ка- честве 'А' могут использоваться переменная или элемент мас- сива любого типа, а в качестве 'В' - выражение, значение кото- рого присваивается 'А'. При этом типы 'А' и 'В' должны соответ- ствовать друг другу, иначе возникает ошибка с диагностикой 'Смешение типов'. Исключение составляет использование опе- ратора для присвоения числовых значений, когда допускается смешение типов (целых, обычной и двойной точности). Данная возможность позволяет не только осуществлять преобразова- ние типов, но и округлять числовые значения. Например: LET A=19.52:B=47.67:A%=A:B#=B:PRINT А%, B# 20 47.66999816894531 А$=”Результаты ”:С$=” расчета:”В41$=А$ + C$:PRINT В41 $
Результаты расчета: Оператор присваивания является одним из наиболее часто ис- пользуемых операторов языка БЕЙСИК. Оператор DEF имеет формат DEF<T> Х1 [-Х2] [,ХЗ [-Х4] ]. и служит для объявления типа переменной или массива по пер- вой букве их имени. Параметр 'Т' определяет тип переменной или массива (табл. 34). Таблица 34 Параметр 'Tz Тип переменной или массива INT Целые переменная или массив SNG Числовые переменная или массив обычной точности DBL Числовые переменная или массив двойной точности STR Символьные переменная или массив Параметры 'Хк' и 'Хк - XK+f' определяют отдельную букву Хк (от А до Z) или интервал (Хк - XK+f) букв, с которых начинаются имена переменных и/или массивов, получающих тип согласно параметра 'Т* оператора. При использовании оператора DEF его следует помещать в программе до первого использования объявленных в нем переменных и массивов, а определяемые в операторе интервалы букв должны иметь пустые пересечения. Явное задание типа переменной или массива, символами {%, !, $} подавляет действие оператора DEF, и наоборот, использо- вание оператора ЦЕЬпереопределяет тип ранее явно или неяв- но определенных переменной или массива. Если какие-либо переменная или массив не определены явно или оператором DEF.to они полагаются числовыми обычной точности. Следующий простой фрагмент иллюстрирует сказан- ное: 10 DEFINT I, J, К, L:DEFSTR A-D1DEFDBL X, Y:I1 = 19.42 20 J2=41:K=3E3:L=I1*J2 : АУ^’Результаты ”: BZ^‘pa6oTbi” 30 CV= фрагмента:”:Х=942.4767: PRINT AV+BZ+CV 40 PRINT I1;J2;K;L;X:X%=46.41:AV%=17.O888:K#=46.4121 50 PRINT X%;AV%; K#:DEFSTR AiDEFINT К 60 AV= Переопределение”:К=59.35: PRINT AV;K RUN Результаты работы фрагмента: 19 41 3000 779 942.4766845703125
46 17 46.41210174560547 Переопределение 59 Оператор DIM имеет формат DIM ИМХ (Хь Х2,...,Хк) [,ИМу(У-1 Yp)].. и служит для объявления в программе массивов и резервирова- ния для них места в памяти. Подпараметр 'ИМХ' определяет имя объявляемого массива, а подпараметр (X-j,...,Хк) - его характе- ристики: размерность (к) и максимальное число (Х|) элементов в каждой размерности j (j=14-k). В качестве 'Хк' можно исполь- зовать АВ или элемент массива, что дает возможность органи- зовывать динамическую модификацию размерности массивов с достаточной степенью гибкости. Величина Х-|*Х2*-*Хк ограничивается только размером дос- тупной области памяти, а наибольшее число программ имеют дело с 1- и 2-мерными массивами. При выполнении оператора DIM выделяется память всем указанным в нем массивам, а их элементам присваиваются нулевые или пустые значения в зави- симости от типа объявляемого массива. Если не использовался оператор OPTION BASE 1, то нумерация элементов массивов мо- жет начинаться с нуля или единицы, а отсутствие оператора DIM для используемого массива по умолчанию предполагает его 1-мерным с нумерацией элементов (0-10) или (1-10). Под- робнее об этом речь шла в разд. 5.7.1 при обсуждении операто- ра OPTION BASE. Попытка переопределить массив оператором DIM приводит к ошибке и для его переопределения следует сначала удалить массив из программы по оператору ERASE, а затем уже объя- вить его снова в операторе DIM. Примеры использования опера- тора DIM: 1. 10 DIM А5(1000), ВХ%(5, 10), CD1$ (100, 128) 10 DIM AVZ#(3, 80, 7), ZGN% (5, 4, 8, 7), ASV21 (30, 40) 2. 120 l=30:K=70:DIM A(15, 61, 6), В (I, K) 130 FOR M=0 TO 30:FOR N=0 TO 70:B (M, N)=M*N 140 PRINT В (M, N):NEXT N:NEXT M 3. 10 INPUT ’’Задать размерность массива”, N:DIM A(N~2+3) 20 FOR K=1 TO N"2+3:PRINT A(K);:NEXT К 4. 1 FOR К=1 TO 5:A(K)=K~2:NEXT:P=3:C=5 2 DIM B% (A(C), A(P)):FOR K=1 TO A(C) 3 FOR J=1 TO A(P):B% (K, J)=K+J:NEXT J 4 NEXT K:PRINT B% (A(C), A(P)):END RUN 34 Оператор ERASE имеет формат ERASE ИМ1 [,ИМ2]...
и служит для удаления из программы массивов, указанных сво- ими именами 'ИМк'. В результате выполнения оператора осво- бождается занимаемая массивами память и удаляется из таб- лицы переменных информация о них. После этого массивы с удаленными именами можно использовать в программе либо в новом качестве, либо с другими характеристиками. По ERASE нельзя удалять до этого не объявленный массив. Приведем при- мер использования оператора ERASE: 10 DIM AG (3,3), AS (10, 20):FOR K=1 TO 3:FOR J=1 TO 3 20 AG (K, J)=5:PR1NT AG (K, J);:NEXT J:NEXT К 30 ERASE AG, AS:DIM AG (100):AG(100)=46:PRINT AG (100) RUN 555555555 46 Основное назначение оператора ERASE - освобождение памяти от ненужных массивов либо совместно с оператором DIM - пе- реопределение массивов. Следует иметь в виду, что информа- ция переопределяемых массивов теряется. Оператор REM [<комментарий>] служит для помещения в программу различного рода пояснений, состоящих из произ- вольного набора символов. Оператор REM является невыполня- емым и должен кодироваться единственным или последним в программной строке. Наряду с оператором REM комментарий можно вводить в конце любой строки, выделяя его текст одним левым или двумя апострофами (’). Например: 10 DIM AGN41 (40, 220):REM Определение массива 20 ERASE AGN41 'Удаление массива <AGN41> 30 DIM AGf441 (10, 120):REM Переопределение <AGN41> 40 FOR K=1 TO 10:FOR J=1 TO 120:REM Начало цикла 50 AGN41 (К, J)=K*J+K~2+5*J 'Формирование массива' 60 NEXT J:NEXT K.PRINT AGN41 (10, 120):'Результат' RUN 1900 Помещение оператора REM или комментария с апострофами в середину программной строки приводит, как правило, к ошибке. Безболезненно для программы можно помещать в одной прог- раммной строке в произвольной комбинации только коммента- рии, определяемые оператором REM и апострофами (’). Это сущ- ественно отличает операторы REM языков БЕЙСИК ПЭВМ ИСКРА 1030 и ИСКРА 226 [1-3]. Средства комментария позволя- ют оформлять различного рода пояснения в БЕЙСИК-программе для удобства последующей работы с ее листингом. Операторы LSET X$=Y$ и RSET X$=Y$ служат для помещения значения СВ Y$ в поле символьной переменной Х$ с последую-
щим выравниванием его соответственно влево и вправо. Поле для переменной Х$ предварительно выделяется символьной функцией SPACES или оператором FIELD Выравнивание состоит в дополнении строки символов YS в поле переменной Х$ пробе- лами справа (LSET) или слева (RSET). Перед использованием операторов LSET и RSET числовые значения, помещаемые в по- ле переменной Х$, следует преобразовать в символьные пос- редством символьных функций MKI$, MKSS и MKDS, описанных в разд. 5.5. Приведем пример использования оператора RSET 10 XS=SPACE$ (15):Y$="XXXXX”:PSET XS=YS-PRINT XS 20 RSET XS=Y$ + YS-PRINT XS.RSET XS=Y$ + Y$ + YS 30 PRINT X$:REM Конец вывода результатов » RUN XXXXX XXXXXXXXXX XXXXXXXXXXXXXXX По данному фрагменту на печать выводятся формируемые зна- чения переменной XS, выровненные по правой границе. Опера- торы LSET и RSET используются, как правило, для выравнивания символьных строк перед выводом их на печать или заполнения данными буфера XS выводного файла с произвольным досту- пом. Если в операторах LSET, RSET для переменной Х$ не выделе- но место, например, символьной функцией XS=SPACE$(K), то присвоения ей значения не происходит. Иллюстрирует сказан- ное следующий простой пример 10 А$=”AGN”;LSET YS=A$:PRINT ”Y$=" Y$ RUN Y$= Оператор MIDS имеет формат MIDS (XS, К [ , P])=YS и служит для замены всей или части значения СВ Х$ новым зна- чением, определяемым СВ Y$. Параметр 'К' задает АВ с цело- численным значением в диапазоне 1-255, определяющим на- чальную позицию заменяемой подстроки в XS. Параметр 'Р' за- дает АВ с целочисленным значением в диапазоне 0-255, опре- деляющим длину заменяемой подстроки в Х$. По оператору MIDS первые <Р> символов значения Y$ замещают <Р> символов значения СВ Х$, начиная с его К-го символа. Если параметр *Р опущен, то для него по умолчанию принимается значение LEN (YS).
Сказанное иллюстрирует пример 10 Х$="Таллинн 2000ХХ; ” + STRINGS (15, &Н46) 20 У1$=,,35,,:У2$="38”:УЗ$=”Палдиски 171-26" 30 У4$="Партисани 13-75":MIDS (Х$, 13)=У 1S 40 MIDS (Х$, 17, 15)= Y3S.PRINT XS 50 MIDS (Х$, 13)=Y2S'MID$ (XS, 17)=Y4$:PRINT XS RUN Таллинн 200035; Палдиски 171-26 Таллинн 200038; Партисани 13-75 Основным назначением оператора MIDS является модификация символьной информаций, содержащей изменяемые по опреде- ленному алгоритму отдельные ее части. Оператор SWAP X, Y осуществляет обмен значений двух пе- ременных X и Y одного и того же типа. Следует помнить, что в отличие от многих других конструкций языка оператор SWAP требует строгого соблюдения соответствия типов у переменных X и Y. Так, не допускается совмещение действительных пере- менных обычной и двойной точности, действительных и целых переменных. Использование оператора DEF для переобъявления типов переменных ситуации не меняет. Результатом выполнения оператора SWAP есть присвоение переменной X значения переменной Y и наоборот. Приведем пример использования оператора SWAP- 10 X=46.41:Y=20:X$="XXX":YS=,,YYYYY" 20 SWAP X, Y:SWAP Х$, YS 30 PRINT "Х=”; X; ”Y=”; Y, ”XS=”; XS, "YS="; Y$ RUN X=20 Y=46.41 X$=YYYYY YS=XXX В качестве переменных в операторе SWAP могут использовать- ся элементы массивов. Основное назначение оператора - обра- ботка символьной информации. Оператор STOP служит для прекращения выполнения БЕЙ- СИК-программы и перехода на уровень ввода команд (>>). В ре- зультате выполнения оператора STOP производятся действия: - выполнение БЕЙСИК-программы прекращается; - открытые файлы программы не закрываются; - на экран дисплея выводится сообщение 'ВЫХОД В ХХХХ*. где ХХХХ - номер строки, содержащей оператор STOP; - осуществляется переход на уровень ввода команд (>>). Возобновить выполнение программы с места останова, прекра- щенной по оператору STOP, можно командой CONT. Пример: 100 PRINT "Сменить дискету на УВВ <B>":STOP 110 PRINT "Продолжение выполнения программы" RUN
Сменить дискету на УВВ <В> Выход в 100 CONT Продолжение выполнения программы Оператор STOP предназначен в основном для прекращения вы- полнения программы с целью произведения пользователем не- обходимых действий по обслуживанию. Оператор END служит для идентификации логического конца БЕЙСИК-программы и может помещаться в любом ее месте. Число операторов END в программе не ограничивается. Встре- тив оператор END, БЕЙСИК завершает программу и возвращает- ся на командный уровень (»). В отличие от оператора STOP END закрывает все открытые программные файлы и не выводит сообщений. Примеры использования оператора END можно най- ти при описании последующих операторов языка. В командном режиме оператор END можно использовать для закрытия прог- раммных файлов. Оператор RANDOMIZE [К] служит для запуска датчика псев- дослучайных чисел (ДПСЧ). Параметр 'К' задает АВ с целочис- ленными значениями в диапазоне (-32768 - 32767), определяю- щими начальные значения ДПСЧ. В случае отсутствия параметра 'К' выполнение оператора или команды RANDOMIZE приоста- навливается с выдачей запроса: Начальное состояние (-32768 + 32767) ? После ввода допустимого значения выполнение продолжается. Задавая различные допустимые значения для параметра 'К', получаем разные последовательности псевдослучайных равно- мерно распределенных на интервале (0, 1] чисел. Результаты выполнения оператора RANDOMIZE можно использовать посред- ством функции RND, описанной в разд. 5.5. Приведем пример ис- пользования оператора RANDOMIZE совместно с функцией RND: 100 RANDOMIZE 'Включение ДПСЧ 110 FOR К=1 ТО 3.PRINT RND;:NEXT К RUN Начальное состояние (-32768 * 32767) ? 46 0.5956935 0.7209578 0.2945666 RUN Начальное состояние (-32768 + 32767) ? 21 0.525854 0.9539137 0.5956988 RUN Начальное состояние (-32768 + 32767) ? 46 0.5956935 0.7209578 0.2945666 Пример достаточно прост и пояснений не требует. Следует от-
метить, что запуск ДПСЧ можно осуществлять и непосредствен- но с помощью функции RND (X), задавая для его начального сос- тояния значения через параметр 'X'. Подробно это описано в разд. 5.5. Оператор RANDOMIZE и функция RND применяются, как правило, для решения задач, связанных с использованием слу- чайных чисел: статистических, инженерно-технических, мате- матических и др. Например, указанные средства можно исполь- зовать для решения задач известным методом Монте-Карло. Они также могут оказаться полезными при составлении игро- вых и развлекательных задач на ПЭВМ. Оператор DATA имеет формат DATA А1 [, А2].. и служит для создания в памяти таблицы констант (ТабК), ис- пользуемых впоследствии оператором READ. В качестве пара- метров 'Ак' оператора могут использоваться любые числовые или символьные константы. Следует отметить, что в отличие от других диалектов языка (например, БЕЙСИК ИСКРА 226) в БЕЙ- СИК ИСКРА 1030 не допускается использование в качестве па- раметров 'Ак* переменных, что является в целом ряде случаев ограничением. Символьная константа может кодироваться без кавычек (”), если она не содержит запятых (,), двоеточий (:) и пробелов по своим краям. В БЕЙСИК-программе допускается использование любого числа операторов DATA и располагаться они могут в любых местах программы. Все операторы DATA программы формируют единую ТабК, порядок элементов кото- рой соответствует порядку самих операторов в программе Оператор READ просматривает данные в порядке возрастания элементов ТабК, рассматривая содержащиеся в них данные как одну непрерывную последовательность. Для возможности пов- торного считывания данных, начиная с указанного элемента ТабК, служит специальный оператор RESTORE. Примеры коди- рования оператора DATA: 100 DATA 19.42, GRODNO, GPI, ” 1:09:59” 200 DATA ’’Results:”, 19.47, 19.67, ”17:08:88” 300 DATA TARTU, TRU, 1962, 1966 Оператор READ имеет формат READX1 [,Х2]... и служит для считывания данных из ТабК, созданной оператора- ми DATA. Оператор READ может использоваться только сов- местно с операторами DATA, в противном случае возникает ошибка с диагностикой *Нет данных*. Оператор READ читает пос- ледовательно данные из ТабК и присваивает их значения пере- менным 'Хк*, перечисленным в списке переменных оператора.
Типы значений из ТабК должны соответствовать типам перемен- ных, которым они присваиваются. Соответствие здесь предпо- лагается только на уровне типов: числовые и символьные дан- ные; среди числовых же данных смешение типов допускается, производя соответствующие преобразования данных. По READ можно читать не все данные оператора DATA, а только необхо- димое начальное число его элементов. Несколько операторов READ могут читать данные из одной и той же ТабК. При этом каждый новый оператор READ читает сле- дующую порцию данных из ТабК. Если же список переменных в READ больше числа данных в ТабК, то возникает ошибка с ди- агностикой 'Нет данных'. В командном режиме использование операторов DATA и READ приводит к ошибке с диагностикой 'Нет данных', например: DATA 4, 5, 6:READ X, Y, Z:PRINT X, Y, Z Нет данных Это связано с тем, что ТабК по оператору DATA в командном ре- жиме не создается. Однако, если оператор DATA выполнен в программном режиме, то оператор READ можно использовать и в командном режиме, например: 10 DATA EXAMPLE, 5, 25 RUN » READ X$, Y, Z'.PRINT X$, Y, Z EXAMPLE 5 25 Данная возможность позволяет в оперативном режиме прове- рять содержимое ТабК, созданной операторами DATA. Приве- дем несколько примеров, иллюстрирующих допустимые спосо- бы использования операторов DATA и READ: 1. 10 DATA 1.85, SKB MPSM:DATA 6, 9, VVV:DATA 15, 8, PTI 15 DATA 1, 2, SS:DATA 55.56, 6.08, <Kloostrimetsa> 20 FOR K=1 TO 5:READ X, Y, Z$:PRINT X, Y, Z$:NEXT К RUN 1 85 SKB MPSM 6 9 VW 15 8 PTI 1 2 SS 55.56 6.08 <Kloostrimetsa> 2. 10 READ X, Y:PRINT X, Y 20 A=5:B=67:DATA 46,41 RUN 46 41 3. 10 DATA 46.41, 46.4121, TRU 20 READ X%, Y#, Z$:READ A!, B%, C$ 30 DATA 15.0888, 17.0888, GPI
40 PRINT X%; Y#; A!; B%; CS + ”+" + ZS RUN 46 46.4121 15.0888 17 GPI + TRU Примеры достаточно просты и пояснений не требуют. Оператор RESTORE [нс] указывает номер <нс> программной строки, содержащей оператор (операторы) DATA, с которых оператор READ начинает чтение данных. При отсутствии пара- метра 'нс' очередной оператор READ будет считывать данные с самого начала ТабК, т. е. с первого оператора DATA прог- раммы. Последующие операторы READ продолжат считывание данных из ТабК. Основное назначение оператора RESTORE - выборочное или повторное считывание данных из ТабК операторами READ. Ос- новным же назначением операторов DATA, READ и RESTORE яв- ляется создание и организация работы с ТабК, в качестве эле- ментов которой могут быть числовые и символьные константы, которые по тем или иным причинам целесообразно хранить в самой программе, а не в файлах на дисках. Приведем пример, иллюстрирующий использование всех трех вышерассмотренных операторов работы с ТабК: 10 READ X, Y, А$, BS.PRINT А$+В$+”=”; X+Y 20 READ М, N, А$, BS.PRINT А$+В$; M*N 30 RESTORE 60.READ X, Y:PRINT ”А=”; (X+Y)/Y 40 RESTOREiREAD X, Y, A$, B$, C, D.PRINT ”B=”; X+Y+C+D 50 DATA 46, 41, ’’Результат”, „суммы” 60 DATA 46, 21, Произведение, ”=” RUN Результат суммы= 87 Произведение= 966 А= 3.190476 В= 154 Пример достаточно прост и особых пояснений не требует. Циклические конструкции, допустимые языком БЕЙСИК ИСК- РА 1030, позволяют существенно упростить написание прог- рамм и сделать их более компактными и наглядными. Для этих целей предназначены следующие четыре оператора, позволяю- щие создавать различного типа и назначения циклические кон- струкции. Операторы WHILE АВ (заголовок цикла) и WEND (конец цикла) используются всегда в паре и служат для организации цикла с выходом по условию: если значение параметра АВ' отлично от нуля, то выполняются операторы, ограниченные соответст- вующими операторами WHILE и WEND (тело цикла), в противном случае управление получает оператор, следующий за WEND
Операторы WHILE-WEND допускают использование вложенных циклов, но при этом для каждого оператора WHILE должен быть обязательно отдельный оператор WEND конца цикла, даже если у вложенных циклов имеется общий логический конец. Напри- мер: 10 K=46.WHILE X-46:X=X+1 20 M=41.WHILE Y-41:Y=Y+1 30 N=21.WHILE Z-21:Z=Z+1 40 WEND:WEND:WEND:PRINT X; Y; Z RUN 46 41 21 Следует помнить, что выход из цикла возможен в любое вре- мя и в любом месте, тогда как вход в цикл допустим только че- рез его начало, т. е. через оператор WHILE, в противном случае возникает ошибка. Например: 10 WHILE X-100: Х=Х+1 20 Y=X~3+X+17.0888:WEND 30 PRINT X; Y.GOTO 20 RUN 100 1000117 WEND без WHILE в 20 Операторы WHILE - WEND можно применять и в командном режиме, однако в этом случае командная строка должна пол- ностью содержать всю циклическую конструкцию, например: WHILE X— 100: Х=Х+1.WEND:PRINT ”Х=”;Х Х=100 Приведем практический пример использования операторов WHILE - WEND для вычисления определенного интеграла мето- дом прямоугольников; из-за демонстрационных целей использо- вания операторов не ставилась цель получения оптимальной программной реализации: 0 А=0:В= 1 :Е=. 1 :Н=В-A.F 1 =0:F2= 1 1 WHILE SGN (ABS (F1 -F2)-E) 2 WHILE SGN (ABS (F1-F2)-E)+1 3 H=H/10*.X=0:F1=0 4 WHILE SGN (ABS (X-H-1) - .0001)+1:X=X+H 5 F1=F1+H*(46*X~ 3+41*X" 2+21 *X):WEND 6 X=0:F2=0:H=H/10 7 WHILE SGN (ABS (X-H-1) - .0001)+1 :X=X+H 8 F2=F2+H*(46*X~ 3+41*X~ 2+21 *X):WEND 9 WEND:WEND 10 PRINT ’’Значение определенного интеграла от” 11 PRINT ”F(X)=46X~3+41X"2+21X на отрезке [0, 1]” 12 PRINT ”c точностью ”;E;” есть ”;F2
RUN Значение определенного интеграла от F(X)=46X*3+41X*2+21X на отрезке [0, 1] с точностью Е=0.1 есть F2=35.67326 В примере отражена конструкция из вложенных циклов, орга- низованных операторами WHILE - WEND, которая реализует ал- горитм приближенного вычисления интеграла от полиномиаль- ной функции на отрезке [0, 1] с точностью Е=0.1. Следует отме- тить, что при использовании подобных циклических конструкций необходимо учитывать методы представления значений число- вых переменных, ибо в противном случае логически правильно организованный цикл при верных исходных данных окажется в выполнении бесконечным. В приведенном примере вынуждены были прибегнуть к до- полнительной проверке условия завершения цикла (конструк- ция выражений в программных строках 4 и 7), так как при вы- числении значений точек деления отрезка [0, 1] с шагом 0.1 бы- ли получены значения 0.9000001 вместо 0.9. Для возможности дифференцирования условия 'X' в операторе WHILE X можно использовать конструкции типа SGN (Х)+1 (при Х<0) и SGN(X)-1 (при Х>0), а для сложных проверок условия завершения цикла можно при- менять комбинации операторов, например 100 WHILE SGN (X): WHILE SGN (X)+1 Подобные подходы были применены в приведенном примере. Операторы WHILE - WEND используются, как правило, в тех цик- лических конструкциях, когда заранее не известно число выпол- нения операторов теяа цикла, и это число зависит от результа- тов вычислений, реализуемых операторами цикла. Операторы FOR - NEXT являются наиболее часто используе- мыми для организации в БЕЙСИК-программах циклических кон- струкций, выполняющихся заранее известное (ограниченное сверху) число раз. Оператор FOR (заголовок цикла) имеет формат FOR К=АВ1 ТО АВ2 [STEP АВЗ] и служит для идентификации начала циклической конструкции и определения параметров цикла. Числовая переменная 'К' (це- лая или обычной точности) используется в качестве счетчика цикла. Значения арифметических выражений 'АВГ, 'АВ2' и 'АВЗ' задают соответственно начальное, конечное значения счетчика цикла и шаг цикла. В качестве 'АВк' (к= 1+3) могут использовать- ся и элементы массивов.
Циклическая конструкция выполняется следующим образом. Оператор FOR формирует счетчик цикла с начальным значением <АВ1>, после чего выполняются все следующие за ним операто- ры (тело цикла) до оператора NEXT К, идентифицирующего ко- нец цикла по переменной цикла'К'. После этого значение <К> счетчика цикла изменяется на величину <АВЗ> шага цикла и сравнивается с величиной <АВ2>. Если <К> больше <АВ2>, то осуществляется выход из цикла и выполняется следующий за NEXT К оператор программы, в противном случае происходит повторение выполнения цикла при новом значении переменной 'К'. При отрицательном значении 'АВЗ' цикл повторяется до тех пор, пока значение счетчика цикла не станет меньше значения 'АВ2', а при <АВЗ>=0 цикл становится бесконечным. Это свойст- во можно использовать для организации бесконечных циклов с последующим выходом по некоторому логическому условию. Значения 'АВк' (к=1+3) вычисляются до формирования счетчи- ка цикла, поэтому возможны, в частности, конструкции вида 10 K=5:FOR К=К ТО K+5.PRINT K;:NEXT RUN 5 6 7 8 9 10 Если для параметров цикла выполняются соотношения (1) <АВ1> > <АВ2> и <АВЗ> > 0 (2) <АВ1> < <АВ2> и <АВЗ> < 0 (3) <АВ1> = <АВ2> и <АВЗ> = 0, то операторы цикла не выполняются, цикл завершается. В опера- торе NEXT К следует указывать переменную 'К' цикла, к которо- му данный оператор относится. В случае отсутствия перемен- ной цикла NEXT относится к последнему выполняемому опера- тору FOR (к внешнему циклу). Если же несколько циклов имеют одну общую конечную точку, то можно указывать для них один оператор NEXT, перечислив в нем переменные циклов в поряд- ке, обратном их вложенности (от внутренних к внешнему цик- лу). Подобно случаю операторов WHILE - WEND выход из цикла возможен в любом месте, но вход в цикл допустим только через его начало, т. е. через оператор FOR. Однако при необходимос- ти получения информации внутрь цикла, минуя его начало, мож- но воспользоваться возможностями таких операторов, как ON - GOSUB, ON COM GOSUB, ON KEY GOSUB, ON PLAY GOSUB, а так- же ON TIMER GOSUB. Примеры такого типа приводятся при опи- сании указанных операторов. Сказанное относится и к циклам WHILE - WEND. Однако, если обращение к подпрограмме (по GOSUB) указано внутри оператора IF - THEN, то выход из цикла с возвратом возможен не всегда. Этот момент следует учиты- вать. Операторы FOR - NEXT можно выполнять и в командном режиме при условии помещения в командной строке всей цик- лической конструкции. Следует отметить, что имеются сущест-
венные различия в семантике и выполнении циклических конст- рукций на основе операторов FOR - NEXT в языках БЕЙСИК ПЭВМ ИСКРА 1030 и ИСКРА 226 [1-3]. Циклические конструкции могут содержать вложенные цик- лы, организованные как на операторах FOR - NEXT и WHILE - WEND, так и на их сочетаниях. Глубина вложения циклов обоих типов ограничивается только размером доступной памяти в ра- бочей области БЕЙСИКа. В целях сокращения времени выполне- ния циклических конструкций в операторе FOR для параметров 'АВк' (к=1-3) рекомендуется, по мере возможности, использо- вать переменные целого типа. Использование циклических конструкций на основе операто- ров FOR - NEXT столь широко, что не имеет смысла перечислять даже типичные примеры. Характерной же чертой применения данной пары операторов можно считать использование их для организации циклов с заранее определенным максимальным числом выполнения. В первую очередь это относится к конструк- циям, связанным с обработкой различного рода массивов. При- ведем простые примеры, иллюстрирующие основные возмож- ности и особенности применения операторов FOR - NEXT: 1. 10 DIM А (10, 20, 30):FOR К=1 ТО 10 20 FOR J=1 ТО 20:FOR 1=1 ТО 30:А (К, J, l)=K*J*l 30 NEXT I, J, K.PRINT ”A(10, 20, 30)=”;A (10, 20, 30) RUN A (10, 20, 30)=6000 2. 10 DIM B(10, 10):FOR K=1 TO 10 20 FOR J=1 TO 10:B (K, J)=K*J 30 NEXT J:NEXT:PRINT ”B(10, 10)=”; B(10, 10) RUN В (10, 10)=100 3. 10 K=100:FOR J=1 TO 10:WHILE X-K 20 X=X+1:WEND:A (J)=J*X:NEXT 30 PRINT ”A (10)=”;A (10) RUN A(10)=1000 4. 10 PRINT TIME$;:FOR K=1 TO 10000:NEXT:T$=TIME$ 20 PRINT ” T$:PRINT T$;:FOR K%=1 TO 10000:NEXT 30 PRINT ” TIMES RUN 14:21:24 14:21:34 14:21:34 14:21:40 5. 10 DIM A(100, 100), B(30):FOR K=1 TO 30:B(K)=K 20 NEXT:K=5:FOR K=K TO 3*K:FOR J=1 TO 100 30 A(J, B(K))=J*K:NEXT J, K:PRINT ”A(5, 10)=”;A(5, 10) RUN A(5, 10)=50 6. 10 DIM A(10), B%( 15, 15):FOR K=1 TO 10 20 A(K)=K:NEXT:FOR J=1 TO 10 30 FOR P=10 TO 1 STEP -1
40 FOR K=A(J) TO A(P):B% (A(J), A(P))=A(J)*A(P) 50 NEXT К, P, J:PRINT ”B%(10, 10)=";B% (10, 10) RUN B%(10, 10)= 100 7. 10 DIM A(10, 20, 30):FOR K=1 TO 10:FOR J=1 TO 20 20 FOR 1=1 TO 30:A(K, J, l)=1:NEXT I, J:NEXT Приведенные примеры достаточно просты и с учетом вышеска- занного особых пояснений не требуют. Следует отметить, что в циклических конструкциях как на ос- нове оператора FOR - NEXT, так и WHILE - WEND использовать операторы загрузки программ в память, в частности оператор CHAIN MERGE, нужно очень осторожно, так как их выполнение разрушает информацию счетчика циклов, что приводит к невоз- можности нормального выхода из цикла через оператор NEXT или WEND. Однако циклические конструкции типа FOR - NEXT и WHILE - WEND можно заменить эквивалентными им конструк- циями на основе оператора IF - THEN следующего вида: <нс> Тело циклической конструкции <нс+р> <нс+р+1> IF <ЛУ> THEN <нс+р+1> ELSE GOTO <нс> В данной конструкции операторы тела цикла выполняются до тех пор, пока не станет истинным <ЛУ> в операторе IF - THEN. Такая конструкция в целом ряде случаев более эффективна и в нее можно входить по любой строке из тела цикла. Следующие три оператора языка БЕЙСИК предназначены для организации в программе различного типа переходов, изменя- ющих естественный порядок выполнения программных строк. БЕЙСИК допускает три основные типа переходов: безусловные, вычисляемые и условные. Оператор GOTO <нс> служит для организации безусловного перехода к программной строке, указанной ее номером в пара- метре 'нс'. В отличие от диалекта языка БЕЙСИК ПЭВМ ИСК- РА 226 настоящий диалект языка допускает использование опе- ратора GOTO в командном режиме, например: 100 GOTO 110:PRINT "Текст 1" 110 PRINT "Текст 2” RUN Текст 2 » GOTO 110 Текст 2
Оператор GOTO <нс> в командном режиме можно использовать для возобновления работы с программой, так как по оператору RUN <нс> уничтожается вся ранее полученная числовая и управ- ляющая информация (значения переменных, определения мас- сивов и т. д.). Приведем простой пример: 10 А=170888!:В=230467! 20 PRINT А, В RUN 170888 RUN 20 0 RUN 170888 GOTO 20 170888 230467 0 230467 230467 Оператор ON вычисляемого перехода имеет два форма- та: (1) ON <АВ> GOTO <НС1> [,<НС2>] . . . (2) ON <АВ> GOSUB <НС1> [ ,<НС2>] ... и служит для передачи управления строке с номером <НСк> (к=1*р), если целочисленное значение АВ', лежащее в диапазо- не 1*255, равно величине р. При <АВ>=0 или <АВ> >р выполняет- ся следующий за ON оператор. По оператору типа ON - GOTO управление получает программная строка, а по оператору типа ON - GOSUB - первая программная строка подпрограммы. Пос- ле выполнения подпрограммы, определенной оператором ON формата 2, управление получает следующий за ON - GOSUB оператор, если в подпрограмме не указан переход в какое-либо другое место программы. Операторы ON обоих форматов можно использовать и в ко- мандном режиме, например: 10 PRINT ’’оператор ON - GOTO в командной cTpOKe”:END 20 PRINT ’’оператор ON - GOSUB в командной строке”:РЕТ URN K=1:ON К GOTO 10 Оператор ON - GOTO в командной строке K=1:ON К GOSUB 20 Оператор ON - GOSUB в командной строке
Пример использования оператора ON обоих форматов: 10 FOR К=1 ТО 3.ON К GOTO 30, 40, 50 20 PRINT ’’Строки для перехода по ON - GOTO” 30 PRINT ”К = K;:ON К GOSUB 70, 70, 70.GOTO 60 40 PRINT”K=”: K;:ON К GOSUB 70, 70, 70.GOTO 60 50 PRINT ”K = K;:ON К GOSUB 70, 70, 70 60 NEXT.END 70 PRINT „Выход с возвращением в цикл”:ЛЕТиЛИ RUN k=1 Выход с возвращением в цикл K=2 Выход с возвращением в цикл К=3 Выход с возвращением в цикл Приведенный пример, помимо сказанного, иллюстрирует ис- пользование оператора ON формата 2 для организации выхода из цикла с последующим возвращением в него, минуя начало цикла. Оператор ON используется для организации переходов в программе в зависимости от вычисленных значений. Если в качестве параметра 'К' оператора используется числовая кон- станта, то оператор типа ON - GOTO эквивалентен оператору GOTO, а типа ON - GOSUB - оператору GOSUB. Оператор IF условного перехода имеет два формата: (1) IF <ЛУ> [, ] THEN {<нс> I <СОП 1>) [, ] ELSE [<СОП2>] (2) IF <ЛУ> [, ] GOTO <нс> [, ] ELSE [<СОП>] и служит для организации перехода в программе в зависимости от истинности логического условия 'ЛУ'. В качестве параметра 'ЛУ' могут быть любые конструкции типа отношений, содержа- щие АВ и/или СВ, соединенные знаками логических операций (NOT, AND, OR, XOR, EQV) и/или операций сравнения (=, о, <, >,<=,>=). В процессе выполнения оператора IF любого формата осу- ществляется проверка на истинность логического условия 'ЛУ'. В случае его истинности происходит переход на строку с номе- ром <нс> или выполняются операторы из списка операторов (СОЛ), разделенных двоеточием (:). В случае ложности 'ЛУ' вы- полняются операторы из <СОП>, указанные после слова ELSE, или управление получает следующий за IF оператор, если за ELSE отсутствует <СОП>. Необязательная запятая (,) в операторе IF любого формата является элементом синтаксиса и смысловой нагрузки не не- сет. В параметрах <СОП> допускается использование операто- ров IF, глубина вложения которых ограничивается длиной прог- раммной строки, при этом ELSE соответствует последнему не- закрытому THEN. Символьные переменные в 'ЛУ' сравниваются посимвольно слева направо с учетом конечных пробелов. Сравнение основа-
но на относительных значениях их 16-ричных кодов по таблице кодов ПЭВМ (приложение 1). Сравнение отношений выполняет- ся слева направо без учета старшинства логических операций. Допускается использование операторов IF - THEN и IF - GOTO в командной строке, но не допустимо разносить текст одного оператора IF на несколько программных строк. В качестве 'ЛУ' допускаются достаточно сложные конструкции, содержащие многоместные отношения, например: А$+В$=С$ AND Х~2+3*Х-46 > 21 OR X$=”YES” А$ о В$ OR X~2+Z <>6 OR X~2+Y~2 <= 5 AS > = В$ AND C$=”NO” AND X <= Y XOR X >= Z Примеры, иллюстрирующие особенности использования опера- тора IF обоих форматов: 1. 5 X$=”yes”:Y$=„AGN” 10 IF X$=”yes” GOTO 20 ELSE GOTO 30 20 PRINT X$;:X$=Y$:GOTO 10 30 PRINT ”NO” RUN YESNO 2. 5 X$=”AAA” 10IFX$=”YES” GOTO 30 20 ELSE END 30 PRINT X$ RUN AAA 3. 10 PRINT ” Оператор IF - THEN в командной строке” IF 46<>41 THEN 10 ELSE END Оператор IF - THEN в командной строке 4. 10 X$=”YES”:\$=”AAA”: X=46:Y=41 20 IF X$=”YES” AND Y$=”AAA” AND X< Y GOTO 30 ELSE END 30 PRINT X$, Y$, X, Y:X$=”GGG”:GOTO 20 RUN YES AAA 46 41 5. 10 XS=”YES”:Y$=”AAA”:X=46:Y=41 20 IF X$=”YES” AND Y$=”AAA” AND X>Y THEN GOTO 30 ELSE END 30 PRINT X$, Y$, X, Y:X$=”GGG”:GOTO 20 RUN Результат аналогичен примеру 4 6. 10 X=46:Y=41:Z=21: 20 IF X>Y AND Y>Z THEN PRINT X, Y, Z:PRINT ”NO” 30 SWAP X, Y:GOTO 20 RUN 46 41 21 NO 46 41 21
NO 7 10 X=46:Y=41:Z=21 20 IF X>Y AND Y>Z GOTO 40 ELSE PRINT ”NO” 30 SWAPX. Y:GOTO 20 40 PRINT X, Y, Z:GOTO 30 RUN Результат выполнения аналогичен примеру 6 8. 10А=46:В=41 20 IF А=В THEN GOTO 30 : END 30 PRINT A, B:IF A<B GOTO 40:END 40 PRINT A, В RUN 46 41 46 41 Данный пример иллюстрирует обязательность слова ELSE для обоих форматов оператора IF 9. 10 А=46:В=41: 20 IF А=В THEN GOTO 30 ELSE:END 30 PRINT A, B:IF A<B GOTO 40 ELSE:END 40 PRINT A, В RUN 10. 10 A=46:B=41:C=21: 20 IF AOB THEN IF BoC THEN IF A<100 GOTO 30 ELSE:END 30 PRINT А, В, C RUN 46 41 21 11.10 A$=” 123”:B$=”456”:C$=A$+B$ 20 IF A$+B$=C$ OR B$>A$ THEN PRINT C$:PRINT A$ ELSE RUN 123456 123 12. 10 A$=”123”:B$=”456”:C$=A$+B$ 20 IF A$<>B$ AND A$=”123” THEN 30 ELSE END 30 PRINT C$:PRINT A$ RUN Результат выполнения аналогичен примеру 11 13. 10 X=46:Y=21:IF X>Y THEN PRINT X, Y ELSE END 20 PRINT ’’Выполнение следующего за IF оператора” RUN 46 41 Выполнение следующего за IF оператора 14. 10 X=46:IF Х=46 THEN GOSUB 20:PRINT X:END ELSE END 20 PRINT ’’Выход с возвратом в <IF> *X=”;:RETURN RUN Выход с возвратом в <IF> * X=46 Приведенные примеры достаточно просты и с учетом сделанных замечаний и вышесказанного особых пояснений не требуют.
Основным назначением оператора IF является организация в программе сложных логических проверок и в зависимости от их результатов - передача управления в заданную точку програм- мы или выполнение указанной группы операторов языка. В при- водимых ниже примерах будут еще использоваться операто- ры условного перехода. Язык БЕЙСИК ИСКРА 1030 имеет в своем распоряжении це- лый ряд встроенных числовых и символьных функций. Однако пользователю предоставляется возможность определения и ис- пользования в программе своей собственной функции, вводи- мой посредством специального оператора DEF FN. Оператор DEF FN имеет формат DEF FN <ИФ>[(Х1, Х2,... ,Хк)]={АВ I СВ} и вводит в программу числовую или символьную функцию поль- зователя ИФ (XI, Х2,. . . ,Хк)=(АВ I СВ}. Параметры 'АВ' и 'СВ' определяют соответственно арифметическое и символьное фун- кциональное выражение, а 'Хк' определяют список аргументов функции, которым при обращении к функции присваиваются зна- чения из списка значений. Обращение к функции пользователя осуществляется по ее имени, перед которым кодируется иден- тификатор 'FN', например: 10 DEF FN AGN (X, Y, Z) =X~2+Y~2+Z~2 20 PRINT FNAGN (5, 6, Z) RUN 110 При каждом появлении в программе имени функции пользовате- ля с® списком значений аргументов происходит вычисление функционального выражения 'АВ' или 'СВ' путем присвоения его переменным соответствующих значений аргументов. Сле- дует помнить, что число и тип элементов списка значений дол- жны соответствовать числу и типу аргументов функции поль- зователя. Тип функции пользователя определяется аналогично случаю переменных, констант или массивов либо путем кодирования в конце имени функции специальных символов (%, $, #, !), либо посредством оператора DEF объявления типа. В функциональ- ных выражениях 'АВ' и 'СВ' можно использовать переменные, не входящие в список аргументов функции. Для определенной несколько раз функции действует последнее ее определение. Функция пользователя должна быть определена в программе до ее первого использования, что отличает это средство языка БЕЙСИК ИСКРА 1030 от аналогичного средства языка БЕЙСИК ИСКРА 226, в котором размещение оператора DEF FN в програм- ме несущественно. В частности, допускается фрагмент вида
10 PRINT FN Z (46) 20 REM Определение функции пользователя 30 DEFFN Z(X)=41*X+21 1907 недопустимый в среде языка БЕЙСИК ИСКРА 1030. Однако ис- пользование средства подпрограмм позволяет размещать опи- сание функции пользователя в любом месте программы. Напри- мер: 10 GOSUB 100:PRINT FNA (5, 6).END 20 REM Определение функции пользователя 100 DEF FNA (X, Y)=X~ 2+Y~ 2:RETURN RUN 61 В целом, по своим возможностям средство функций пользовате- ля в среде БЕЙСИК ИСКРА 226 значительно уступает аналогич- ному средству, имеющемуся в языке БЕЙСИК ИСКРА 1030. Пос- ледние три положения, в частности, делают возможным динами- ческую модификацию функций пользователя, например: 10 FOR К=1 ТО 3:DEF FNZ (Х)=К~2*Х 20 PRINT "Z(1)=”;FNZ (1);:NEXT К RUN Z(1)=1 Z(1)=4 Z(1)=9 Оператор DEF FN допускает определение рекурсивной функции, однако в программе следует предусмотреть условие прекраще- ния рекурсии, иначе возникает ошибка с диагностикой 'Нет па- мяти', например: 10 DEF FNZ (X, Y)=SQR (FNZ (X, Y)+INT (X/Y)) 20 PRINT FNZ (6, 5) RUN Нет памяти в 20 Имена функции пользователя и ее аргументов могут совпадать: 10 DEF FNAGN (X, Y, Z, AGN)=X~ 2+Y~ 2+Z~+AGN 20 PRINT FNAGN (1, 2, 3, 20) RUN 34 В командной строке оператор DEF FN не используется. Примеры определения функций пользователя: 1. 10 А=46:В=41.DEF FNZ# (X, Y)=A*X~ 3+B*Y" 2 20 PRINT ”Z (1.5, 2.21)=”; FNZ# (1.5, 2.21) RUN Z (1.5, 2.21)=355.4981079101563
2. 10 XS=”AAA”:YS=”BBB”: 20 DEF FNZS (X$, Y$)=X$+SPACE$(5)+Y$ 30 PRINT FNZS (X$. Y$) RUN AAA BBB 3. 10 DEF FNZ% (X. Y, Z)=SOR (X' 3+Y" 2 + Z) 20 PRINT FNZ% (46. 41, 21):IF X>6 THEN 30 ELSE END 30 PRINT ’’Конец фрагмента” RUN 315 4. 10 X$=”AAA”:Y$=”BBB”: 20 DEF FNZS (X$. Y$)=XS+SP ACE$(5)+Y$ 30 PRINT FNZS (FNZ$(X$. Y$). FNZS(X$. Y$)) RUN AAA BBB AAA BBB 5. 10 DEF FNAGN (X. Y. Z, AGN)=X" 2 + Y" 2 + Z" 2+AGN 15 DEF FNAGN (А. В. C. D)=A*B*C*D 20 PRINT FNAGN (1. 2. 3, 20) RUN 120 6. 10 DEF FNAGN (X. Y, Z. AGN)=X" 2+Y" 2+Z" 2+AGN 15 DEF FNAGN (А. В, C, D)=A*B*C*D.PRINT ”AAA”;: 20 PRINT FNAGN (1. 2, 3, 4) RUN AAA 24 7 10 DEF FNZ=A*X + B:A=5:X=46:B=21 20 PRINT FNZ RUN 251 Приведенные примеры достаточно просты и с учетом вышеска- занного особых пояснений не требуют. Оператор DEF FN позво- ляет в рамках программы пользователя существенно расши- рить набор часто используемых функций. Наряду с возможностью определения в программе собствен- ных функций пользователя БЕЙСИК предоставляет средства ор- ганизации подпрограмм, реализующих в программе стандарт- ные блоки выполнения наиболее важных и часто используемых процедур: вычислительных, обработки информации, обмена с внешними устройствами и т. д. Подпрограмма является обыч- ным набором программных строк, завершающихся оператором RETURN [<нс>] (возврат из подпрограммы). Обращение к под- программе осуществляется по номеру ее первой строки пос- редством оператора GOSUB. Вход в подпрограмму можно осу- ществлять (если это допускает ее логика) через любую ее прог- раммную строку. Оператор GOSUB <нс> указывает адрес входа в подпрограм- му по номеру <нс> ее программной строки. Тело подпрограммы
ограничивается строкой с номером <нс> и первым оператором RETURN и может располагаться в любом месте основной прог- раммы. Однако для удобства все подпрограммы рекомендуется помещать в одно место (начало или конец основной программы). Это позволит избежать многих ошибок при выполнении прог- раммы, так как при беспорядочном размещении подпрограмм возрастает вероятность недопустимого входа в подпрограмму (не по оператору GOSUB) с последующей ошибкой и диагности- кой 'RETURN без GOSUB'. Подпрограмма выполняется до ограничивающего ее операто- ра RETURN [<но], определяющего адрес возврата из подпрог- раммы. Возврат осуществляется либо к оператору, следующему за GOSUB, либо к программной строке, указанной в параметре 'нс' оператора RETURN. Допускается использование вложенных подпрограмм, глубина вложения которых ограничена только размером стэка языка БЕЙСИК. В подпрограмме следует весьма осторожно использовать оператор CHAIN MERGE загрузки программ в память, т. к. его выполнение уничтожает информацию в магазине возвратов и выход через оператор RETURN из подпрограммы становится не- возможен. Возникает ошибка с кодом ERR=142. Оператор GOSUB <нс> может использоваться в командной строке, при условии наличия в памяти ПЭВМ программной стро- ки с номером <нс> и оператора RETURN, например: 20 A=A+1:PRINT "А=”; A.-RETURN GOSUB 20 А=1 Примеры организации подпрограмм, иллюстрирующие основные свойства данного средства: 1. 10 GOSUB 20:GOSUB 30:GOSUB 40.END 20 PRINT ’’Подпрограмма 1”;:GOTO 50 30 PRINT ” Подпрограмма 2”;:GOTO 50 40 PRINT ” Подпрограмма 3” 50 RETURN RUN Подпрограмма 1 Подпрограмма 2 Подпрограмма 3 2. 10 FOR K=1 TO 100:IF K=50 THEN GOSUB 30 ELSE 20 A=A+1:NEXT:PRINT A=”;A:END 30 PRINT ’’Выход из цикла с возвратом ";:RETURN RUN Выход из цикла с возвратом; А=100 3. 10 GOSUB 20-.PRINT ’’Конец фрагмента”:ЕИО 20 PRINT ’’Подпрограмма 1”;:GOSUB 30.RETURN 30 PRINT ’’Подпрограмма 2”;:GOSUB 40.RETURN 40 PRINT ’’Подпрограмма 3”:RETURN RUN
Подпрограмма 1 Подпрограмма 2 Подпрограмма 3 Конец фрагмента 4. 10 GOSUB 20.PRINT ”Конец”:ЕМО 20 PRINT ’’Подпрограмма 1”;:GOSUB 40 30 PRINT ’’Тело noflnporpaMMbi”:RETURN 40 PRINT ’’Подпрограмма 2”:RETURN 50 50 PRINT ’’Выход no RETURN 50”:END RUN Подпрограмма 1 Подпрограмма 2 Выход no RETURN 50 Приведенные примеры достаточно просты и с учетом вышеска- занного пояснений не требуют. Рассмотренные до сих пор базовые операторы языка наряду с командами и операторами управления системой позволяют создавать единый достаточно сложный программный модуль редактировать его, записывать на диск в виде файла и выпол- нять. Однако описанные средства языка не позволяют вводить информацию в программу и выводить результаты ее работы Да- же с использованием стандартных устройств ввода и вывода (клавиатуры, экрана дисплея и принтера). Переходим к рас- смотрению операторов, работающих с указанными УВВ. Оператор INPUT имеет формат INPUT [;] [”<Комментарий>” {; I ,}] <Список ввода> и служит для ввода информации в программу с клавиатуры. Па- раметр 'Комментарий' позволяет выводить на экран различного рода поясняющую информацию по вводимым данным. В пара- метре 'Список ввода' перечисляются разделенные запятыми (,) имена числовых, символьных переменных и элементов мас- сивов в произвольном сочетании. Выполнение оператора INPUT приводит к останову программы с выдачей на экран 'Коммента- рия' и знака вопроса (?). Если после параметра 'Комментарий' в операторе кодировалась запятая (,), а не точка с запятой (;), то знак вопроса не выводится на экран дисплея. В ответ на запрос оператора INPUT следует ввести список значений, разделенных запятыми, для списка ввода оператора. Вводимые значения по количеству и типам должны соответство- вать элементам списка ввода, в противном случае выводится сообщение '?? Повторить ввод'. Использование сразу после INPUT точки с запятой (;) приводит к тому, что после нажатия клавиши 'ПУСК' курсор не перемещается на следующую строку экрана. Это позволяет, например, следующему оператору PRINT или PRINT USING выводить информацию в ту же строку ответа. Символьная информация может вводиться без кавычек (”), если в ней отсутствуют запятая (,) и/или концевые пробелы. Ес- ли 'Список ввода* содержит только один элемент, то нажатие
клав ши 'ПУСК' без данных присваивает нулевое значение чис- ловому элементу списка и пустое символьному. Длина значе- ния для символьной переменной списка ввода не должна пре- вышать 254 символов; лишние символы игнорируются. Следует отметить, что БЕЙСИК осуществляет присвоение значений эле- ментам списка ввода только после получения оператором INPUT всех данных ввода. Поэтому, до нажатия клавиши 'ПУСК' вводимая информация может корректироваться обычными сред- ствами БЕЙСИКа, а после ввода с ошибкой пользователь полу- чает возможность повторить ввод. Приведем комплексный при- мер, иллюстрирующий использование оператора INPUT и ре- зультаты его выполнения в зависимости от способа его кодиро- вания: 10 INPUT "Ввести значения переменных"; X, Y, А$, В$ 20 PRINT А$; X, В$; YJNPUT ;А, В, C:PRINT А, В, С 30 INPUT XJNPUT Y$:PRINT ”Х=”; X, "Y$="; Y$ 40 FOR K=1 TO 10.INPUT ;A(K):NEXT K1PRINT 50 FOR K=1 TO 10:PRINT A(K);:NEXT: 60 INPUT ;”X=”, X.-PRINT X RUN Ввести значения переменных? 46, 41, V=, G= V=46 G=41 7 46,41,21 46 41 21 ? 1962 ? Grodno X=1962 Y$=Grodno ?1?2?3?4?5?6?7?8?9?10 1 2 3 4 5 6 7 8 9 10 X=0 Пример достаточно прост и с учетом сказанного пояснений не требует. Оператор LINE INPUT имеет формат LINE INPUT [;] ["<Комментарий>" {; I,}] Х$ и служит для ввода строки символов длиной не более 254 в сим- вольную переменную Х$. Строка допускает любой набор симво- лов клавиатуры и вводится без ограничителей, при этом учиты- ваются и ведущие пробелы в ее начале. Запрос на ввод по опе- ратору LINE INPUT осуществляется без вывода на экран знака вопроса (?). При нажатии клавиши 'ПУСК' набранная с клавиатуры строка символов вводится и присваивается символьной переменной Х$. При использовании в операторе после параметра 'Коммен- тарий' точки с запятой (;) вместо запятой (,) выводимый на экран текст комментария отделяется от ответа одним пробелом, кото- рый заносится вместе с ответом в Х$. Это следует учитывать при использовании оператора в программном режиме. Приме-
некие в командной строке после параметра 'Комментарий' сим- волов I, I ,} приводит к такому же результату, как и при исполь- зовании оператора LINE INPUT с запятой после 'комментария' в программной строке. В остальном синтаксис и семантика оператора LINE INPUT совпадают с INPUT для ввода символьной информации. Примеры, иллюстрирующие использование опера- тора LINE INPUT в различных ситуациях: 1 10 LINE INPUT, "Ввести строку символов"; А$ 20 PRINT LEN (AS); A$:LINE INPUT "IN:", B$ 30 PRINT LEN (B$); B$ RUN Ввести строку символов AAAAA 6 AAAAA in-.aaaaa in-.aaaaa 5 AAAAA 2 LINE INPUT "Ввод”, XS.PRINT LEN (XS); X$ Ввод AAAAA 5 AAAAA LINE INPUT, "Input"; XS.PRINT LEN (X$); XS Input XXXXX 5 XXXXX Нажатие в процессе ввода по оператору LINE INPUT клавиш 'CTR'+'S/B' прерывает ввод данных, но последующая команда CONT позволяет повторить прерванный ввод с начала. Данная возможность может использоваться для корректировки вводи- мой информации наряду с обычными средствами БЕЙСИКа. Основным назначением операторов INPUT и LINE INPUT явля- ется организация в программе пользователя диалогового режи- ма работы и ввода, как правило, небольших по объему исходных данных. Для анализа содержимого буфера клавиатуры можно исполь- зовать системную переменную X$=INKEY$, которая принимает символьное значение Х$ длиной в диапазоне 0-2, интерпретиру- емое следующим образом: LEN (Х$)=0 - буфер ввода клавиатуры пуст; LEN(XS)=1 - Х$ содержит символ, считанный с клавиатуры; LEN (Х$)=2 - Х$ содержит расширенный код символа Считываемые по INKEYS символы не выводятся на экран, но при- сваиваются переменной XS и могут использоваться програм- мой. Например: 100 X$=INKEY$:IF LEN (Х$)=0 THEN 400 ELSE 200 IF LEN(X$)=1 THEN 500 ELSE 300 PRINT "Расширенный код=”:СОТО 600 400 PRINT "Буфер клавиатуры пуст”:СОТО 600 500 PRINT "С клавиатуры считан: ";XS 600 PRINT "Продолжение выполнения nporpaMMbi":END
По INKEYS программа может получать из буфера клавиатуры лю- бой символ или расширенный код, кроме символов следующих клавиш: 'CTR'+'S/B', 'CTR'+'NLK', 't'+'PrS' и 'CTR'+'ALT'+'— Функция INKEYS позволяет определить только что нажатую кла- вишу. Как и в случае функции INPUTS, вводимые с клавиатуры символы передаются в БЕЙСИК-программу, не отображаясь на экране дисплея. Информация о нажатии клавиш находится в байтах состояния клавиатуры (адреса &Н417 и &Н418). С по- мощью функции РЕЕК можно вывести содержимое этих байтов памяти на экран, например: 400 DEF SEG=O:PRINT НЕХ$ (РЕЕК(&Н417)), НЕХ$(РЕЕК (&Н418)) Оператор PRINT вывода на экран в простейшем виде уже ис- пользовался в приводимых выше примерах. В общем же случае оператор PRINT имеет формат (PRINT I ?} [сСписок вывода >] [(, I ; I TABI SPC}] и служит для вывода информации на экран дисплея. Вместо служебного слова 'PRINT' можно использовать знак вопроса (?), который БЕЙСИКОМ затем заменяется на 'PRINT'. Опера- тор (PRINT I ?} без параметров выводит на экран строку пробе- лов. В параметре 'список вывода' кодируются символьные и/или числовые константы, выражения, элементы массивов, а также функции ТАВ и SPC, разделенные пробелом, запятой (,) или точ- кой с запятой (;). Символьные константы всегда указываются в кавычках (”). Представленные в списке вывода' АВ и СВ пе- ред выводом на печать предварительно вычисляются. Использо- вание в качестве разделителей 'списка вывода' пробела и точ- ки с запятой эквивалентно. При выводе на печать физическая строка устройства делится на зоны по 14 позиций в каждой. Символ (:!!,} определяет мес- тоположение в строке выводимого элемента списка, за кото- рым он следует, следующим образом: (,) - вывод элемента списка в новую зону, 'пробел' - вывод элемента вслед за предыдущим; (;) - вывод элемента вслед за предыдущим. Кодирование вместо элемента 'списка вывода' К запятых при- водит к смещению следующих за ними выводимых значений на К зон в строке. Если оператор PRINT завершается символом (, I ,*} или функцией (TAB I SPC}, то следующий оператор PRINT будет выводить информацию в ту же строку, что и предыдущий, в противном случае вывод осуществляется с новой строки экрана. Длина строки экрана устанавливается либо оператором WIDTH (разд. 5.7.1), либо полагается 80 по умолчанию и по дос- тижении конца строки осуществляется возврат каретки и пере- вод строки. Вывод числового значения завершается пробелом; положи-
тельному числу предшествует пробел, а отрицательному - знак 'минус' (-). Если длина выводимого значения превышает оста- ток строки, вывод его начинается с новой строки, но если длина превышает длину строки экрана, установленную по оператору WIDTH, то вывод начинается в текущей строке. С оператором PRINT в параметре 'список вывода' можно ис- пользовать две специальные функции ТАВ и SPC. Обе эти функ- ции имеют смысл только в операторах вывода PRINT, LPRINT и PRINT#. Функция ТАВ (К) указывает, что вывод будет осуществ- ляться, начиная с К-й позиции строки устройства (К=1*255). Если при этом текущая позиция больше К, то позиция К устанав- ливается в следующей строке. Использование ТАВ в конце опе- ратора PRINT эквивалентно кодированию запятой (,). Функция SPC (К) выводит К (К=0-255) пробелов, при этом, если К больше длины L строки устройства, то вместо К полага- ется значение К (mod L). Использование SPC в конце оператора PRINT эквивалентно кодированию точки с запятой (;). В 'списке вывода' оператора можно использовать несколько функций ТАВ и/или SPC, что позволяет организовать достаточно гибкую сис- тему вывода информации на печать. При этом ТАВ указывает каждый раз новую позицию для вывода информации, тогда как SPC суммирует свои значения при вычислении позиции в строке. Оператор PRINT предназначен, в первую очередь, для обеспе- чения диалогового режима работы с программой пользователя, а в командной строке - для оперативного получения информа- ции о значениях переменных и элементов массивов в програм- ме. Примеры использования оператора PRINT: 1. 10 X=46.41:PRINT ’’Значение Х=”;Х; 20 Y=21.41:PRINT ’’Значение Y=”;Y 30 PRINT TAB (5); ”Х=”;Х; SPC(5);”Y=”;Y RUN Значение X= 46.21 Значение Y= 21.41 X=46.41 Y= 21.41 2. 10 A$=”AAA”:B$=”SSS”:X=46:Y=41:Z=21 20 PRINT "A$+B$=”;A$+B$; SPC (2); (X+Y)/Z; 30 PRINT , ”A$=”;A$,,,, ,”B$=”;B$ RUN A$+B$=AAASSS 4.142857 A$=AAA 3. 5 REM Вывод в зонном формате 10 X$=STRING$ (14, 65):Y$=STRING$ (13, 66) 20 PRINT X$, X$:PRINT Y$, X$:PRINT X$, Y$ RUN aaaaaaaaaaaaaa aaaaaaaaaaaaaa BBBBBBBBBBBBB AAAAAAAAAAAAAA AAAAAAAAAAAAAA BBBBBBBBBBBBB 4. О REM Программируемый вывод с помощью TAB 1 PRINT TAB (15);STRING$(5, 42):IF P=1 THEN END 2 FOR K=1 TO 3:PRINT TAB (15);”*”; TAB (19); ”*” 3 NEXT K.PRINT TAB (15);STRING$ (5, 42) RUN
5. 5 REM Использование функций ТАВ и SPC 10 PRINT TAB(45); TAB(15); TAB(68); TAB(40); ”40” 20 PRINT SPC(4); SPC(5); SPC(15); SPC(15); ”40” RUN 40 40 6. 5 REM Вывод в уплотненном формате 10 X=15.56:Y=48:Z=21.0888 20 PRINT ТАВ(З); X; TAB(10), Y; 30 PRINT ТАВ(З); X; TAB(15); Y RUN 15.56 48 15.56 48 Приведенные примеры достаточно просты и с учетом сказан- ного пояснений не требуют. Следует помнить, что при выводе на экран ряд символов воспринимается в качестве управляющей информации, при этом сами символы на экране не отобража- ются: Символ Результат использования в PRINT CHR$(12) Очистка экрана дисплея (подобно CLS) CHR$(28) Сдвиг курсора вправо на позицию CHR$(29) влево CHR$(30) вверх » CHR$(31) » вниз » Например, по следующему простому фрагменту 10 PRINT CHR$(12):LOCATE 24, 10:FOR К=1 ТО 23 20 PRINT CHR$(30):PRINT 24-К; ”-я строка”:ИЕХТ очищается экран дисплея, и каждый новый оператор PRINT вы- водит информацию на строку выше предыдущего оператора. К оператору PRINT непосредственно примыкает оператор WRITE, имеющий формат WRITE [<Список вывода>]
Действие данного оператора аналогично оператору PRINT со следующими отличиями: - в качестве разделителей 'Списка вывода' не допускаются пробелы; - при выводе значений элементов 'списка' они разделяются запятыми, а символьные значения выводятся в кавычках (”); - положительные числовые значения выводятся без веду- щего пробела; - в конце вывода осуществляются перевод строки и возврат каретки; - 'Список вывода' оператора не должен содержать функций ТАВ и SPC или завершаться символом (, I ;}. Приведем простой пример на использование оператора WRITE: 10 Х=46.41 :Y%=41.21 :А$="Текст":D=26.0888 20 WRITE X; Y%, А$, D RUN 46.41, 41, "Текст”, 26.0888 В определенном смысле обратной к операторам вывода на экран и операторам управления COLOR и SCREEN является сис- темная функция SCREEN (М, N [, К]), принимающая целочислен- ные значения в диапазоне 0+255. Данную функцию можно ис- пользовать в прог; \мме для получения характеристик цвета указанной позиции экрана или кода символа, находящегося в этой позиции. Параметры 'М' (1 +25) и 'N' (1+80 или 1+40) опре- деляют соответственно строку и столбец искомой позиции экра- на. Параметр же 'К' задает АВ с неотрицательными значениями, определяющими режим использования функции SCREEN следую- щим образом. При <К>=0 или по умолчанию значение функции SCREEN опре- деляет код символа на экране с координатами (М, N), тогда как при <К> >0 значение функции определяет признак цвета (ПЦ) указанной позиции экрана: - ПЦ символа = <К> (mod 16); - ПЦ фона =(<К> - (<К> (mod 16)))/16 (mod 128); - мерцание =127+Р (Р>0) Значения указанных признаков соответствуют описанию опера- тора COLOR. Следует отметить, что описание системной функ- ции SCREEN существенно отличается от описания, приведен- ного в [17]. Приведем простой пример использования функции SCREEN для определения символа графического экрана в пози- ции (10, 36): 1 FOR К=1 ТО 38:LOCATE 10. KrPRINT CHR$(46+K):NEXT 2 PRINT "Символ в (10, 36) есть ";CHR$(SCREEN(10, 36, 0)) 3 SCREEN 2:PRINT "Код символа=”; SCREEN (10, 36, 0) RUN /0123456789:;<=>?CABCDEFGHIJKLMNOPQRST
Символ в (10, 36) есть R Код символа= 82 Оператор LPRINT имеет формат LPRINT [<ФУП>;] [сСписок вывода>] [{, I ; I TAB I SPCJ] и служит для программно-управляемого вывода информации на принтер с логическим именем LPT1. В параметре 'список выво- да' допускаются те же элементы и разделители, что и для опера- тора PRINT. В этом отношении синтаксис и семантика операто- ров LPRINT и PRINT совпадают. Оператор LPRINT по умолчанию предполагает длину строки на принтере равной 80 и для ее изменения следует использо- вать оператор WIDTH (разд. 5.7.1). Так как печать асинхронна к выполнению своих команд, то в случае прогона бумаги и вы- дачи через небольшой промежуток времени (порядка 8 сек.) но- вого оператора LPRINT может возникнуть особая ситуация с диагностикой 'Таймаут устройства'. Для устранения подобных ситуаций можно использовать средства языка по обработке ошибок, которые будут описаны в следующем разделе. Примеры на использование оператора LPRINT: 1. 10 X$=”AAA”:Y$=”SSS”:A=46.41:B=46.21 20 LPRINT X$+Y$; SPC(5); А; В, A/B RUN AAASSS 46.41 46.21 1.004328 2. 10 X$=”AAA”:Y$=”SSS”:A=46.41:B=46.21 20 LPRINT X$+Y$ SPC(5) A В A/B RUN AAASSS 46.41 46.21 1.004328 3. 10 X=46.21:Y=22.0888:B$= ’’Результат^’ 20 LPRINT TAB (15); B$; INT (X/Y) RUN Результат= 2 Однако в отличие от PRINT оператор LPRINT дополнительно предоставляет пользователю широкие возможности по органи- зации в БЕЙСИК-программе программно-управляемого вывода на печать. Управление выводом осуществляется на основе кода ASCII, в котором буквы, числа и специальные символы кодиру- ются в диапазонах 32-5-126 и 160-5-254. Специальные функции уп- равления передаются на принтер сериями типа Escape, состоя- щими из кода Escape ”1В” и буквенно-цифровых знаков или сим- волов. Из БЕЙСИК-программы управлять выводом информации на печать и позволяет оператор LPRINT путем кодирования в нем параметра 'ФУП' (функции управления печатью). Данный параметр позволяет использовать следующие группы функций управления выводом: (1) выбор вида шрифта печати; (2) выбор точечного режима печати;
(3) установка интервала между строками на принтере. (4) управление подачей бумаги на устройстве печати. (5) управление форматом выводимой информации; (6) управление информацией в буфере вывода; (7) выбор специальных режимов вывода информации. Подробное описание возможностей программно-управляемого вывода на печать с многочисленными примерами заинтересо- ванный читатель может найти в [70]. Здесь же будут рассмотре- ны общий принцип управления выводом с помощью оператора LPRINT и ряд простых примеров. Параметр ' ФУП' управления выводом на печать представляет собой список, элементами которого являются коды функций уп- равления вида CHR$(N);["X";] [CHR$(M);J где N, М - целочисленные значения АВ в диапазоне 0+255 и 'X' - идентифицирующий символ. Конкретные коды основных функ- ций управления приведены в приложении 7. Примеры управле- ния печатью с помощью оператора LPRINT 4. 10 REM Примеры управления шрифтом на LPT 1 20 LPRINT CHR$(27); CHR$(14); ’’Печать”; 30 LPRINT "вразрядку" .LPRINT CHR$(20) 40 LPRINT CHR$(27); "G”:LPRINT "Двойная"; 50 LPRINT ,,ne4aTb”:LPRINT CHR$(27); „Н" 60 LPRINT CHR$(27); "M”; "Печать <Элита>" 70 LPRINT CHR$(27); "P"; "Печать <Пика>” RUN Печать вразрядку Двойная печать Печать <Элита> Печать <Пика> 5 1 LPRINT "HS=<n, A, T”;:REM Печать выше и ниже строки 2 LPRINT CHR$(15);CHR$(27);"S”; CHR$(0); ”(n)”; 3 LPRINT CHRS(18); CHR$(27); ”H"; ”.X"; 4 LPRINT CHRS(15); CHR$(27); ”S”; CHR$(1); ”n”; 5 LPRINT CHRS(27); "H”; CHR$(18); ’’> - однородная струк- тура" RUN HS=<'n. A, T(n). Хп> - однородная структура 6. 1 LPRINT CHR$(7); CHR$(7):REM Подчеркивание 2 LPRINT CHR$(27). CHRS(1); 3 LPRINT "Однородная структура (ОС) ”; 4 LPRINT CHR$(27); CHR$(0); 5 LPRINT "есть упорядоченная четверка" RUN Однородная структура есть упорядоченная четверка. Приведенные примеры достаточно просты и пояснений не тре- буют
Оператор PRINT USING имеет формат {PRINT I ?} USING FS; <Список вывода> [{, I ;}] и служит для форматированного вывода информации на экран дисплея. Все, что касается параметров, стоящих после 'F$', со- ответствует оператору PRINT за исключением следующих мо- ментов: - в параметре 'список вывода' нельзя совмещать числовые и символьные элементы; - в качестве разделителей нельзя использовать пробелы; - оператор не может заканчиваться функциями ТАВ и SPC. Обязательный параметр 'F$' определяет формат вывода отдель- но для символьной и числовой информации. В качестве 'FS' мо- гут выступать символьные константа, переменная или функция. Для символьной информации параметр 'F$' допускает значения: - выводится только первый символ значения каждого символьного элемента 'списка вы- вода'; - выводится полное значение каждого сим- вольного элемента 'списка вывода'; ”\*-к-\” - (к пробелов) выводится к+2 символов зна- чения каждого символьного элемента 'списка вывода'. В случае задания шаблона в виде ”\\” выводятся только два первых символа каждого элемента 'списка вывода'. Следует помнить, что использование формата усекает символь- ные значения справа или дополняет их пробелами. Приведем простой комплексный пример на форматированный вывод сим- вольной информации: 10 А$= ”AGNG47”:BS=„AVZG42”:C$=„ASVG67” 20 PRINT USING А$; В$; С$; А$ 30 PRINT USING ”\\”; AS, В$,'С$ 40 PRINT USING А$; В$, С$ 50 PRINT USING ”\ \”; А$, В$, С$ RUN AAAIA AGNAVZASV AGNG47AVZG42ASVG67 AGN47 AVZG42 ASVG67 Следует отметить, что форматированный вывод символьной ин- формации особого смысла не имеет в связи с его возможнос- тями. Тем более, что символьная функция LEFTS позволяет лег- ко организовать эквивалентный вывод информации. Проиллюст- рируем сказанное простым примером: 1 А$=” AGN”:B$=”VGS”:C$= ” 1988” 2 PRINT USING AS, В$, С$; 3 PRINT , LEFT$(A$,1); LEFT$(B$, 1); LEFTS (C$, 1)
4 PRINT USING A$; B$; C$;:PRINT , A$; B$; C$ 5 PRINT USING AS; B$; C$;: 6 PRINT , LEFT$(A$, 3); LEFTS (B$, 3); LEFTS (CS, 3) RUN AV1 AGNVGS1988 AGVG19 AV1 AGNVGS1988 AGVG19 Для вывода числовой информации параметр 'FS* допускает элементы формата: (0) - определяет позицию десятичной цифры и выводит в этой позиции цифру или пробел; (.) - определяет десятичную точку, справа от которой элемент '0' представляет только цифру; (+) - указывает позицию, куда выводится знак 'минус' или пробел; (-) - указывает позицию, куда выводится знак числа; (**) - кодируются слева от всех элементов '0' и указы- вают на замену пробелов слева символами '*'; ($$) - кодируются слева от всех элементов *#' и указы- вают позицию символа '$' и одну цифровую пози- цию; (“$) - кодируются слева от всех элементов '0' и дейст- вуют подобно '$$', но возможные пробелы слева заменяются символами '*'; (,) - кодируется слева от десятичной точки и опреде- ляет необходимость вставки запятой слева от каждой третьей цифры; (" _ кодируются за цифровыми позициями и определя- ют экспоненциальный формат; заполняются сим- волами E+kk или D+kk, где kk - порядок числа. В данном формате нельзя использовать символы '$$', '**$' и запятую (,); (_) - (подчеркивание) указывает, что следующий за ним знак выводится символьно в строку; (X) - (X - символ, отличный от перечисленных) выво- дится в строку без изменения. Если выводимое числовое значение не соответствует форма- ту, то оно расширяется влево цифровыми позициями с установ- кой символов '%'. Поле формата не должно определять более 24 цифровых позиций. Если число позиций после десятичной точки в формате меньше числа позиций в выводимом значении, то оно округляется. Приведем комплексный пример на исполь- зование оператора PRINT USING для вывода числовой информа- ции: О A$=”AVZAGNASV”:X=46.4121 :Y=23.0888410 1 PRINT USING ” <00. 00 - >”; X; Y,:Z=-14.0642 2 PRINT USING ” 0.0 I”; X, Y Z:D=194247670 3 PRINT USING ”< 00~~~ ->”; X, Y, Z
4 ? USING ”####,. =D”; D: ? USING ”<##. #"">”;Y 5 PRINT USING ”<##.#### + >”;X, Z 6 PRINT USING ’’<$$>”; X, Y, Z: ? USING ”<* *$ #>”;X 7 PRINT USING "Данные =+##. ####» X, Y; Z 9 ? USING ”Результат=+##.# ""от деления X/Y”; X/Y RUN <46.41> <23.09> %46.4 I %23.1 I %-14.1 I <5E+01>< 2E+01X -1E+01> %19, 424, 770. =D < 2.3E+01> < 46.4121+ >< 14.0642- > <%$46><%$23><%-$14> <*$46> Данные =+46.41210 Данные =+23.08884 Данные=-14.06420 Результат= +20.1 Е-01 от деления X/Y Следующий пример иллюстрирует возможность использования в качестве параметра ’F$' символьные константу, переменную и функцию: 1 X=46.41:F$=”<+##. ####>”:PRINT USING F$;X 2 F$=”\ \”:PRINT USING F$;"AVZ”; ”AGN” 3 X$=”<+##.”:Y$=”####>”:PRINT USING X$+Y$;X 4 PRINT USING ”\”+SPC$(2)+”\”; ”AGN”, ”AVZ” RUN <+46.4100> AVZ AGN <+46.4100> AGAV Наконец, оператор LPRINT USING имеет формат LPRINT USING F$; <Список вывода > [(, I ;}] и служит для форматированного вывода информации на принтер с логическим именем LPT1. Все сказанное относительно PRINT USING относится и к оператору LPRINT USING. Для иллюстрации применения оператора LPRINT USING приведем примеры, ис- пользованные при описании оператора PRINT USING с очевид- ной заменой операторов: ТО A$=”AGNG47”:B$=”AVZG42”:C$=”ASVG67” 20 LPRINT USING ”!”; А$; В$; С$; ”!”; А$ 30 LPRINT USING ” \ \”; А$, В$, С$ 40 LPRINT USING А$; В$; С$ 50 LPRINT USING ”\ \”; А$, В$, С$ 0 А$=”AVZAGNASV”:X=46.4121 :Y=23.088841 # 1 LPRINT USING ”<##. ## - >”; X; Y,:Z=-14.0642 2 LPRINT USING ”#.# I”;X, Y, Z:D=19424767# 3 LPRINT USING "< ##""->”; X, Y, Z
4 LPRINT USING ”####,. =D”; D.LPRINT USING ”<OjT~~>”;Y 5 LPRINT USING ”< ШШ+ >”, X, Z 6 LPRINT USING ”<$$>”; X, Y, ZiLPRINT USING ”<**$/^”;X 7 LPRINT USING ”Данные=+##ЯШ X, Y; Z 9 LPRINT USING „Результат=+##.Г от деления X/Y”;X/Y Результаты выполнения обоих примеров полностью совпадают с соответствующими примерами в описании оператора PRINT USING с той лишь разницей, что выводятся на принтер. Однако в отличие от оператора LPRINT в LPRINT USING нельзя непосредственно использовать средства программно-управляе- мого вывода. Для возможности использования этих средств оператором LPRINT USING перед ним следует задать оператор LPRINT, содержащий необходимую функцию управления пе- чатью (ФУП), например: 1 X=46.4121:LPRINT CHR$(27); CHR$( 14);: 2 LPRINT USING ’’Печать вразрядку Х=+ШШ”; X RUN Печать вразрядку X=+46.4121 Данный подход позволяет косвенно использовать средства про- граммно-управляемого вывода и операторами LPRINT USING. Более подробное описание функционирования LPRINT USING указано при описании оператора PRINT USING, представленного несколько выше. Следует отметить, что использование средств форматированного вывода (PRINT USING и LPRINT USING) для числовой информации наиболее целесообразно при условии ее однородности. Например, вывод только чисел обычной точности с небольшим разбросом значений. С операторами вывода информации на принтер в целом ряде случаев целесообразно использовать системную функцию LPOS(k), которая определяет номер текущей позиции в буфере вывода на принтер с логическим именем LPTk (k=0-3; LPTO= LPT1). Следует однако помнить, что номер позиции в буфере не обязательно совпадает с позицией сканирующей головки прин- тера. Например: 1 FOR К=1 ТО 55:A$=A$+’’A”:NEXT:LPRINT А$ 2 PRINT ’’Позиция в буфере=”,ЕРОБ(1) 3 PRINT ’’Позиция головки принтера=58” RUN Позиция в буфере= 1 Позиция головки принтера= 58 На этом завершается рассмотрение базовых операторов языка, которые позволяют создавать достаточно сложные одно- модульные БЕЙСИК-программы, снабжать их средствами обме- на информацией со стандартными устройствами ввода и выво- да (клавиатура, экран дисплея и принтер), а в совокупности с
командами языка осуществлять их редактирование, выполне- ние, отладку и хранение во внешней дисковой памяти в виде программных файлов. Указанные средства, удовлетворяя дос- таточно широкий круг пользователей ПЭВМ, вместе с тем не дают возможности решать следующие весьма важные вопро- сы разработки ПО: - создание многомодульных программных систем; - программная обработка прерываний, особых и аварийных ситуаций (живучесть ПО); - обеспечение программ средствами обмена информацией с внешней памятью на дисках; - использование ряда специальных возможностей ПЭВМ. Поэтому в следующих разделах главы этим вопросам будет уделено особое внимание. Так, в следующем разделе рассмат- риваются средства языка по созданию многомодульных прог- раммных систем в среде языка БЕЙСИК. 5. 7. 3. Операторы создания многомодульных БЕЙСИК-прог- рамм В настоящем разделе будут рассмотрены операторы, позво- ляющие создавать многомодульные БЕЙСИК-программы различ- ной структуры. Группа этих операторов количественно невели- ка (всего шесть операторов), но играет весьма важную роль при разработке ПО в среде языка БЕЙСИК. При описании операторов данной группы будем придерживаться тех же соглашений, что и раньше. Перечень операторов создания многомодульных БЕЙ- СИК-программ и их краткая характеристика приводятся в табл.35. Операторы, отмеченные звездочкой (*), нельзя или бессмысленно использовать в командной строке. Оператор CHAIN имеет формат CHAIN [MERGE] ”<СФ>” [, [нс] [, ALL] [, DELETE D]] и служит для загрузки указанной параметром 'СФ' программы в память и передаче управления по адресу программной строки с номером <нс> в памяти. По умолчанию управление получает после загрузки программная строка в памяти с минимальным номером. Следует отметить, что в качестве параметра <нс> в CHAIN может использоваться арифметическое выражение <АВ> >=0, а в качестве параметра ’СФ - символьная перемен ная; в этом случае кодирование кавычек (”) не допускается. Использование в качестве параметра <нс> АВ дает возмож- ность эффективно организовать вычисляемые переходы при создании многомодульного ПО динамической структуры. Ска- занное подтверждает простой пример: 10 P=INT (1942/47)+9:CHAIN MERGE ”C:PRG”, P, ALL
20 PRINT ”A="; INT (SQR( 1942+1 947)):END 50 PRINT ’’Конец фрагмента”.DELETE 65529 В дальнейшем, программу, которая содержит оператор CHAIN, будем называть основной, а указанную в CHAIN - загру- жаемой или подпрограммой. Одна и та же программа может быть одновременно относительно одной программы основной, а относительно другой - подпрограммой. При наличии парамет- ра 'MERGE' загружаемая подпрограмма объединяется с основ- ной программой, находящейся в памяти. По умолчанию загру- жаемая подпрограмма замещает в памяти основную программу Загружаемая подпрограмма должна быть в формате ASCII, т. е. листинга, если в CHAIN использовался параметр 'MERGE', иначе возникает ошибка с диагностикой 'Неверный режим'. Однако при отсутствии данного параметра по CHAIN можно загружать под- программы и в загрузочном виде. Следует помнить, что опера- тор CHAIN нельзя использовать в защищенной программе, так как возникает ошибка с кодом 5 в программной строке 65535, т. е. динамически модифицировать таким образом защищенную БЕЙСИК-программу не представляет возможным. Параметр 'ALL' указывает на необходимость передачи значе- ний всех переменных и элементов массивов загружаемой под- программе. Если данный параметр не кодируется, то передачу значений следует определить посредством оператора COMMON. Такой подход позволяет дифференцированно передавать загру- жаемой подпрограмме общую информацию. Таблица 35 Оператор Назначение оператора CHAIN Загрузка программы в ОП с передачей ей параметров, а управления объединенному модулю COMMON • Объявление общими переменных и массивов основной программы с загружаемой по chain CALL DEF SEG DEF USR POKE Загрузка в ОП ассемблеровской программы (АП) Задание текущего сегмента в ОП для АЛ Задание точки входа в загруженную АП Запись байта в ОП по указанному адресу Следует иметь в виду, что если в операторе CHAIN MERGE не указан параметр <нс>, определяющий номер строки, с которой будет выполняться программа в памяти, то использование пара- метра 'ALL' или оператора COMMON не сохраняет значений пе- ременных в программе. Например: 10 INPUT ’’Задать имя файла”, AL42S 20 CHAIN MERGE ”С:А-INTER", ALL, DELETE 10-20 200 PRINT "AL42$=”, AL42$ RUN
Задать имя файла BERLINOO. BAS AL42$= Параметр 'DELETE' позволяет удалять из памяти указанные подпараметром D=([<hc1>-<hc2>] I <нс1> [-<нс2>]} програм- мные строки с номерами <нс1>*<нс2> перед загрузкой подпрог- раммы. Отсутствие подпараметра 'нс2' удаляет строку с номе- ром <нс1>, а подпараметра 'нсГ - все строки основной прог- раммы с номерами не большими <нс2>. При загрузке подпрог- раммы по CHAIN действуют следующие два правила: - открытые файлы основной программы не закрываются; - при кодировании параметра 'MERGE' сохраняется установ- ка по OPTION BASE минимальных значений индексов мас- сивов; в случае отсутствия данного параметра такая уста- новка не сохраняется. Приведем примеры использования оператора CHAIN для дина- мической загрузки подпрограмм: 100 CHAIN MERGE ”B:PU1”, ALL. DELETE —250 : загрузка под- программы PL) 1.BAS с УВВ 'В' с передачей ей значений всех переменных основной программы; удаление строк основной программы с номерами не большими 250; объединение основ- ной программы с подпрограммой и передача управления строке в памяти с наименьшим номером; 120 CHAIN ”B:LPU3.GS”, ALL : перед загрузкой подпрограммы LPU3.GS с УВВ 'В' очищается память от основной программы с передачей значений всех переменных и элементов мас- сивов загружаемой подпрограмме; загруженная подпрограм- ма начинает выполнение с первой строки; 210 T=250:CHAIN MERGE ”B:GRODNO”, Т : загружается под- программа GRODNO.BAS с УВВ 'В' и объединяется с основной программой в памяти; управление получает программная строка в памяти с номером 250; значения переменных основ- ной программы не передаются; 425 CHAIN MERGE T42S, М42, ALL : загрузка в память програм- мы, путь к файлу с которой определяется в переменной Т42$, с передачей управления после загрузки строке с номером, равным целому положительному значению переменной М4£. Наряду с организацией многомодульных программ оператор CHAIN, в частности, можно использовать для динамической ре- конфигурации программ, находящихся в памяти. Приведем прос- той пример: Листинг основной программы 1 Х=46.41:У=41.21:А$=”Результат=” 2 PRINT А$; X/YJNPUT ’’Ввести Х$”; Х$ 3 IF X$=”YES” THEN CHAIN MERGE ”B:A”, 2. ALL ELSE 4 CHAIN MERGE ”B:B”, 2, ALL, DELETE 2
Листинги подпрограмм A.BAS и B.BAS. A.BAS: 2 PRINT А$; X+Y1INPUT ’’Ввести Х$”; Х$ B .BAS: 2 PRINT А$; X/YJNPUT ’’Ввести Х$”; Х$ Суть примера динамической реконфигурации состоит в следую- щем. После вывода результата деления (Х/Y) выдается запрос на ввод значения для переменной Х$. При получении ответа ’YES' загружается подпрограмма A.BAS, содержащая только одну строку с номером 2, которая замещает строку с тем же номером основной программы. При этом значения всех пере- менных основной программы остаются доступными для загру- жаемой подпрограммы и управление получает модифицирован- ная строка основной программы с номером 2. В случае ответа 'NO' происходит загрузка подпрограммы B.BAS, восстанавли- вающей исходный текст основной программы, и описанный цикл повторяется. Приведем результаты выполнения одного такого цикла: Результат= 1.126183 Ввести Х$? YES Результат= 87.61999 Ввести Х$? NO Результат= 1.126183 Ввести Х$? Ниже будут приведены более сложные программные конструк- ции, использующие оператор CHAIN. Такой оператор можно ис- пользовать и в командной строке. Отметим, что оператор CHAIN MERGE в конструкциях с GOSUB (подпрограмма), FOR - NEXT и WHILE - WEND (циклы) следует применять весьма осторожно, так как стандартный вы- ход из подпрограмм и циклов через операторы RETURN, NEXT и WEND в этом случае приводит к ошибкам. Связано это с тем, что выполнение оператора CHAIN уничтожает информацию в счетчике циклов и магазине возвратов. Совместно с CHAIN может использоваться и оператор COM- MON, который имеет формат COMMON <Список переменных и/или массивов> и служит для передачи загружаемой по CHAIN подпрограмме значений переменных и/или элементов массивов, указанных в его 'списке . Элементы 'списка' разделяются запятой, а мас- сивы указываются своими именами, за которыми кодируются круглые скобки '()'. В основной программе допускается любое число операторов COMMON, расположение их произвольно. Более того, допускается дублирование имен передаваемых пе- ременных и массивов как в одном, так и в нескольких операто- рах COMMON. Его нельзя использовать в командной строке.
Приведем пример, иллюстрирующий использование операто- ра COMMON, листинги основной и загружаемой программы с именем PRINT.BAS и результат выполнения основной програм- мы: 10 COMMON X, Y, А(), Y, X, А( ):X=46.21:Y=41.21 20 COMMON X, Y, А( ):FOR К=1 ТО 10:A(K)=K:NEXT 30 CHAIN ”B:PRINT” RUN < 46.21 >< 41.21 > A(1)=1 A (5)=5 A(10)=10 PRINT.BAS: 0 PRINT USING ”< >”; X; Y 1 PRINT ”A (1)=”; A(1); ”A(5)=”; A(5); ”A(10)=”; A(10) Относительно использования оператора COMMON и параметра ALL оператора CHAIN действуют правила: - если при загрузке подпрограммы по CHAIN удаляется про- граммная строка, содержащая оператор COMMON, то его действие прекращается; - область действия оператора COMMON распространяется на все время присутствия его в памяти; - действие параметра ALL распространяется до следующего оператора CHAIN, не содержащего ALL. Сказанное иллюстрирует простой пример: 10 X=46.41:Y=46.21:M=1988:COMMON М, X, Y 20 CHAIN MERGE ”С:Р”, 20, ALL, DELETE 10 30 COMMON Z:Z=Z+1:IF Z >2 THEN END ELSE 40 CHAIN MERGE ”С:Р”, 20 RUN Х=46.41 Y=46.21 M=1988 z=o Х=0 Y=0 M=0 Z=1 х=о Y=0 м=о Z=2 P.BAS: 20 PRINT ”X=”; X; ”Y=”; Y; ”M="; M; ”Z=”; Z Как следует из описания операторов CHAIN и COMMON, они позволяют создавать достаточно сложной структуры многомо- дульные программные средства в среде языка БЕЙСИК. Однако эти средства по ряду показателей все же уступают аналогич- ным средствам языка БЕЙСИК ПЭВМ ИСКРА 226 [1-3]. Средства, предоставляемые операторами CHAIN и COMMON, позволяют создавать многомодульное ПО в среде самого языка БЕЙСИК. Однако язык БЕЙСИК располагает и средствами для использования в своей среде программ, написанных на языке макроассемблера ИСКРА 1030 (МАСМ-программ). Вопросы разработки ПО в среде макроассемблера в данной книге не рас- сматриваются, они освещены в [16, 17, 69]. Однако целесооб- разно рассмотреть общий принцип использования МАСМ-про-
грамм в среде БЕЙСИКа на уровне интерфейса БЕЙСИКа с МАСМ-программой. С этой целью обсудим способы создания МАСМ-программ, выделения для них памяти, загрузки и исполь- зования в качестве подпрограмм для основной БЕЙСИК-прог- раммы. Для понимания нижеследующих материалов предпола- гаются определенные знания языка Ассемблера и принципов выполнения команд ПЭВМ ИСКРА 1030. БЕЙСИК использует для своей рабочей области до 64 Кбайт свободной доступной памяти, начиная с сегментного адреса, следующего за последним байтом интерпретатора. Рабочая об- ласть содержит БЕЙСИК-программу, ее данные, специальные управляющие данные и стэк интерпретатора. Общее распреде- ление памяти при работе ПЭВМ в среде языка БЕЙСИК (рабочая область выделена) показано на рис. 9. Кбайта Рис. 9. Распределение памяти ПЭВМ ИСКРА 1030 для операционной среды языка БЕЙСИК В связи с представленным распределением памяти в рабочей области БЕЙСИКа и дальнейшим обсуждением целесообразно рассмотреть вопрос хранения скалярной и символьной инфор- мации БЕЙСИК-программ в памяти. Скалярная переменная представляется набором байтов, имеющих следующее содержи- мое:
Номер байта Содержимое байтов 0 (тип) 2-целая; 3-символьная; 4-обычной и 8 - двойной точности переменная U2 Первые два символа имени пере- менной 3 Число К остальных символов имени 4-(К+3) Остальные символы имени (не обя- зательны) (К+4)-(К+М+3) Значение переменной; М=значению байта '0' Символьная переменная идентифицируется трехбайтовым опи- сателем: первый байт задает длину переменной в байтах от 0 до 255, второй и третий содержат ее адрес е памяти в виде смеще- ния относительно сегмента данных БЕИСИКа. Системная функ- ция VARPTR устанавливает указатель именно на описанные байты в зависимости от указанной в ее аргументе переменной. Функция VARPTR будет рассматриваться ниже в этом же раз- деле. Память для МАСМ-лрограммы можно выделять как внутри, так и вне рабочей области БЕЙСИКа. При размещении вне ра- бочей области не требуется никаких действий по выделению памяти, адресовать эту память можно с помощью оператора DEF SEG. Перед рассмотрением оператора DEF SEG целесообразно сделать несколько пояснений. В разд. 2.5 при обсуждении стру- ктуры и функционирования ОП ПЭВМ ИСКРА 1030 рассматри- вался принцип сегментированной адресации, суть которого состоит в следующем. Адрес любого байта в ОП состоит из двух частей: сегментной и относительной. Относительная часть ад- реса принимает значения в диапазоне 0-65535 и с ее помощью можно адресовать до 64 Кбайт памяти. Сегментная часть адре- са фактически является базовым адресом для области ОП раз- мером 64 Кбайт, которую позволяет адресовать относительная часть адреса (или смещение). Технические руководства корпорации IBM по IBM PC исполь- зуют весьма удобный способ записи сегментированных адре- сов. Сначала записывается сегментная часть адреса (или база), а за ней через двоеточие относительная часть (или смещение). Значения для обеих частей должны быть в одной и той же сис- теме счисления: десятичной, 16-ричной или 8-ричной. Например, если в 16-ричной системе значение базы есть F000 и смещения - FFF2, то полный сегментированный адрес байта памяти запи- сывается как FOOO.FFF2. Напомним, что фактический 20-разряд- ный адрес для данного примера будет иметь значение FFFF2. Именно сегментную часть адреса формирует оператор DEF SEG, а другие описанные ниже в настоящем разделе операторы и системные функции в качестве параметра используют только относительную часть адреса, т. е. смещение.
Оператор DEF SEG [=<адрес>] устанавливает адрес, который можно впоследствии использовать для загрузки (чтения) в (из) память (и) данных или МАСМ-программ. При загрузке интерпре- татора в качестве значения параметра оператора DEF SEG пола- гается сегмент, начинающийся рабочей областью БЕЙСИКа. Зна- чение АВ для параметра 'адрес' оператора должно находиться в диапазоне 0-65535 и задается в десятичном, 16-ричном или 8-ричном виде. Например, DEF SEG=15000 DEF SEG=&H3500 DEF SEG=&050032 Установленный no DEF SEG адрес текущего сегмента (АТС) па- мяти используется впоследствии операторами BLOAD, BSAVE, CALL и РОКЕ. Значение, указанное в операторе DEF SEG, поме- щается в сегментный регистр CS. Все адреса, используемые в последующих операторах и функциях трактуются как смеще- ния относительно АТС. Оператор DEF USR [М]=<адрес> указывает адрес точки входа в МАСМ-подпрограмму с номером <N> (по умолчанию N=0). Зна- чения для параметров 'N' и 'адрес' лежат соответственно в диа- пазонах 0-9 и 0-65535. Параметр .'адрес' определяет смещение точки входа в МАСМ-подпрограмму относительно АТС. Опера- тор устанавливает точку входа в МАСМ-подпрограмму, уже на- ходящуюся в памяти, из БЕЙСИК-программы. Для обращения к МАСМ-подпрограмме используется, напри- мер, системная функция USR, имеющая формат USR [N] ({АВ I СВ}) Параметр 'N' (номер подпрограммы) представляет собой деся- тичную цифру (по умолчанию ноль), соответствующую цифре, ис- пользованной в определении МАСМ-подпрограммы оператором DEF USR. Параметр в круглых скобках '()' содержит АВ или СВ, значения которых передаются МАСМ-подпрограмме в качестве формального параметра. Например, по фрагменту 2560 G=41.21:DEF SEG=&H3500 2570 DEF USR 5=&H150:Z=USR 5(INT (G~ 2)) устанавливаются АТС, точка входа в МАСМ-подпрограмму с но- мером 5 и ей передается управление с формальным парамет- ром. Результат выполнения подпрограммы помещается в Z. Другой способ организации интерфейса БЕЙСИК- и МАСМ- программ предоставляет оператор CALL, имеющий формат CALL <имя> [(<Список параметров>)]
и служащий для передачи управления и формальных парамет- ров из 'списка параметров' указанной параметром 'имя' МАСМ- подпрограмме. Параметр 'имя' указывает имя числовой пере- менной, значение которой определяет адрес точки входа в МАСМ-подпрограмму. 'Список параметров* содержит имена числовых и/или символьных переменных, передаваемых МАСМ- подпрограмме в качестве формальных параметров. Оператор CALL позволяет осуществить из БЕЙСИК-программы передачу управления и формальных параметров МАСМ-подпрограмме, уже находящейся в памяти. Например, по фрагменту 2000 DEF SEG=&H7500:X=46.4121:A$=”26.08.88” 2010 AGN41 = 120:CALL AGN41(X, Y%, Z#, AS) устанавливается АТС, переменная AGN41 задает точку входа в МАСМ-подпрограмму, а оператор CALL осуществляет передачу управления и четырех формальных параметров МАСМ-подпрог- рамме. Для возможности организации более гибкого интерфейса БЕЙСИК- и МАСМ-программ язык снабжен оператором РОКЕ, имеющим формат POKE N, М и служащим для записи содержи- мого байта, определенного АВ 'N' с целочисленным значением в диапазоне 0+255, по адресу в памяти, определенному смещени- ем 'М', значение которого лежит в диапазоне 0+65535. Напри- мер, РОКЕ 200, 150. При засылке байта с указанным значением в память БЕЙСИК не проверяет адресации. Поэтому использовать данный оператор следует весьма корректно, чтобы не разру- шить область БЕИСИКа. Непосредственно с оператором РОКЕ может использоваться и системная функция РЕЕК (К) доступа к памяти, значением ко- торой является содержимое байта памяти по адресу АТС+<К>, где К есть АВ с целочисленным значением в диапазоне 0+65535. Результат выполнения функции РОКЕ есть целое число в диапа- зоне 0+255. Приведем простой пример на использование опера- тора РОКЕ и функции РЕЕК: 10 DEF SEG=&H4000.X%= 165:Y%=40 20 POKE Х%, Y%.PRINT PEEK (Y%) RUN 165 Перечисленные средства языка, например, позволяют органи- зовать эффективную работу с буфером экрана. Так, сегментный адрес буфера экрана графического дисплея равен &НВ800, а ал- фавитно-цифрового - &HB000. Для дисплея, допускающего оба режима, следует использовать первый адрес, который указыва- ется в операторе DEF SEG. С помощью функций РЕЕК и РОКЕ можно соответственно читать содержимое буфера экрана и пи- сать в него нужную информацию.
другие примеры использования описанных средств будут приведены в гл. 9. При работе с МАСМ-подпрограммами весьма полезными могут оказаться также следующие системные функ- ции: V ARPTR (X) - адрес переменной X в ОП; V ARPTR$(X) - тип переменной X и ее адрес в ОП; V ARPTR (#нф) - адрес в ОП блока управления файлом с ло- гическим номером <нф>; FRE ((Z I Z$) - объем свободной памяти в рабочей области БЕЙСИКа. Кратко охарактеризуем эти системные функции. В качестве аргумента X' используется имя числовых или символьных пе- ременной или элемента массива; а аргумента *ЛН' - АВ с цело- численными значениями, определяющими логический номер открытого файла; аргументы 'Z', 'Z$' - любое числовое или сим- вольное выражение. Функция VARPTR по имени 'X' переменной или логического номера '#нф' открытого файла вычисляет соответственно отно- сительный адрес (ОА) первого байта значения переменной или блока управления файлом БЕЙСИКа (а не АДОС). Значение функ- ции VARPTR не зависит от результата выполнения оператора DEF SEG. Функция VARPTRS по имени переменной 'X' формирует цепоч- ку из трех символов, первый из которых определяет ее тип {зна- чение A=ASC (VARPTR$ (X))} и два последующих - относитель- ный адрес ее в памяти (значение определяется как B=CV1(RIG- HT$(VARPTR$(X), 2))}. Для значения 'А' формируются следующие значения: 2 - целая переменная X; 3 - символьная переменная; 4 - числовая переменная обычной точности; 8 - числовая переменная двойной точности Тогда как значение для 'В' находится в диапазоне 0-65535. Функция FRE вычисляет объем в байтах свободной части ра- бочей области БЕЙСИКа и в зависимости от типа аргумента это значение можно присваивать числовой или символьной пере- менной. Данная функция обладает весьма важным побочным эф- фектом, состоящим в сборке 'муссора', оказавшегося в рабочей области БЕЙСИКа в результате работы с символьными перемен- ными и массивами. Однако функция FRE проявляет этот эффект только при условии наличия у нее символьного аргумента, нап- ример, FRE (”46”). Автоматическая сборка 'муссора' БЕЙСИКОМ в целом ряде случаев требует значительного времени. Именно поэтому в зависимости от типа БЕЙСИК-программы функцию ERE иногда целесообразно использовать вне связи с МАСМ- программами. В командной строке функция FRE позволяет опе- ративно отслеживать размер свободной памяти в рабочей области БЕЙСИКа наряду с очисткой рабочей области БЕЙСИКа
от 'муссора'. Все перечисленные системные функции можно использовать в командном режиме. Приведем комплексный пример, иллюстрирующий использо- вание рассмотренных системных функций и результат его вы- полнения: 1 X%=46.41:Y=41.2146:A$=”AGN”:PRINT VARPTR (#0) 2 PRINT VARPTR (Х%); VARPTR (Y); VARPTR (A$) 3 PRINT ASC (VARPTR$(X%)); ASC (VARPTRS (Y)); 4 PRINT ASC (VARPTR$(A$)); ’’Свободная память=”; FRE (X$) 5 PRINT CVI (RIGHT$(VARPTR$ (X%), 2)) RUN 2591 3881 3887 3895 2 4 3 Свободная память= 61124 3881 С учетом вышесказанного приведенный пример пояснений не требует. За более подробным описанием рассмотренных сис- темных функций можно обратиться к [17]* , Для размещения в рабочей области БЕЙСИКа МАСМ-прог- рамм с помощью оператора CLEAR можно часть ее сделать не- доступной для интерпретатора. В следующем примере посред- ством системной функции FRE вычисляется неиспользуемая часть рабочей области, которая оператором CLEAR делается недоступной БЕЙСИКу, и по DEF SEG устанавливается ее начало для последующей загрузки МАСМ-программ: 100 CLEAR ,1024*64 - FRE (47) 110 DEF SEG=1024*64 - FRE (47) Выполнение оператора CLEAR вызывает следующие измене- ния в области данных БЕЙСИКа: - значения числовых переменных обнуляются, а символьных становятся равными пустой строке; - значения элементов массивов непредсказуемы; - отменяются все определения по оператору DEF. Эти моменты следует учитывать при использовании оператора CLEAR для организации многомодульных БЕЙСИК-программ. Рассмотрев средства организации интерфейса БЕЙСИК- и МАСМ-программ, а также средства по обеспечению ряда функ- ций совместного использования обоих типов программ, перей- дем к описанию самой технологии использования МАСМ-прог- рамм в качестве подпрограмм для основной БЕЙСИК-програм- мы. Для разработки МАСМ-программ используются средства Мак- роассемблера [17], которые здесь рассматриваться не будут. Предполагается, что читатель имеет некоторый навык работы с данными средствами. Для дальнейшей иллюстрации предлага- емой технологии возьмем пример простой МАСМ-программы
(исходный модуль) с тремя формальными параметрами X, Y и Z, которая складывает два полученных значения для параметров X и Y и возвращает результат сложения в переменную Z: MODUL SEGMENT COMMENT <Сложение двух чисел> ASSUME CS.MODUL AVGS PROC FAR PUSH BP MOV BP. SP MOV SI. [BPJ+10 MOV AX. [SI] MOV SI,[BP]+8 ADD AX. [SI] MOV DI, [BP]+6 MOV [DI], AX POP BP RET 6 AVGS ENDP MODUL ENDS END Для дальнейшей работы данный исходный модуль следует за- писать в дисковый файл под некоторым именем для последую- щей обработки его Макроассемблером. Сделать это позволяет, например, команда COPY системы АДОС COPY CON B.AVGS.ASM В результате ее выполнения получаем возможность ввести текст исходного модуля с консоли в файл AVGS.ASM на устрой- стве с именем 'В'. После этого исходный модуль посредством Макроассембле- ра (файл MASM.EXE) транслируется и создается перемещаемый объектный модуль под именем AVGS.OBJ. Затем объектный мо- дуль AVGS.OBJ должен быть отредактирован редактором свя- зей LINK, в результате чего формируется перемещаемый загру- зочный модуль, помещаемый, в .ЕХЕ-файл под именем AVGS.EXE. Таким образом, МАСМ-программа может выполняться в любой области памяти, выбираемой согласно требованиям языка БЕЙ- СИК. Подробная информация по разработке ПО в среде Макро- ассемблера ИСКРА 1030 может быть найдена в [17]. Создав готовую к выполнению МАСМ-программу, необходимо предусмотреть для нее место в рабочей области БЕЙСИКа. Сде- лать это можно с помощью параметра /М' в команде загрузки интерпретатора БЕЙСИКа. Например, по команде BAS /М:1024 для МАСМ-программ выделяется 1 Кбайт памяти в старших ад- ресах рабочей области БЕЙСИКа. Для использования МАСМ-лрограммы ее нужно загрузить в память. Сделать это можно следующими тремя способами: (1) средствами системы АДОС загрузить МАСМ-лодпрограм- му до загрузки БЕЙСИКа» сделав ее резидентной;
(2) средствами БЕЙСИКа загрузить МАСМ-подпрограмму как дисковый .ЕХЕ-файл; (3) переписать код МАСМ-подпрограммы из массива целого типа в рабочей области БЕИСИКа в отведенную для нее область памяти. Первый из этих способов позволяет загружать любые МАСМ- программы только вне рабочей области БЕЙСИКа. Он позволя- ет загружать МАСМ-программы любого размера, защищая сред- ствами системы АДОС выделенную им область памяти. В этом случае МАСМ-программы сохраняются в памяти все время до перегрузки системы АДОС. Такой способ, в частности, позволя- ет писать эффективные МАСМ-подпрограммы сортировки и, раз- мещая их вне области БЕЙСИКа, использовать для них в качест- ве рабочих областей сортировки большие участки памяти, су- щественно сокращая время сортировки. Третий способ загрузки можно применять только для неболь- ших по объему программ, написанных прямо в машинных инст- рукциях. В этом случае код программы определяется в основ- ной БЕЙСИК-программе операторами DATA и заносится в выде- ленную область памяти посредством оператора РОКЕ. Мы же остановимся несколько подробнее на втором способе загрузки, который наиболее популярен у пользователей, рабо- тающих, в основном, в среде языка БЕЙСИК. Для загрузки в па- мять и выгрузки в дисковый файл МАСМ-программ используют- ся две команды языка БЕЙСИК соответственно BLOAD и BSAVE, описанные в разд. 5.6. Для загрузки можно использовать коман- ду в программной строке <нс> BLOAD ”<СФ>,” <СМ> где 'СФ' указывает спецификатор .ЕХЕ-файла с МАСМ-програм- мой, а 'СМ' - смещение относительно АТС, установленного пос- ледним оператором DEF SEG. В случае нашего примера загруз- ка МАСМ-подпрограммы из файла AVGS.EXE с УВВ 'В' принимает вид <нс> DEF SEG=&H3500:BLOAD ”B:AVGS.EXE”, О Передачу управления из основной БЕЙСИК-программы в МАСМ-подпрограмму, уже находящуюся в памяти, можно осу- ществлять двумя способами: (1) с помощью системной функции USR и оператора DEF USR; (2) с помощью оператора CALL. Независимо от способа передачи управления МАСМ-под- программе при входе в нее регистры DS, ES и SS содержат сег- ментный адрес рабочей области БЕИСИКа (в поставляемой вер- сии языка он равен &H106F), а регистр CS - значение, указан- ное в последнем выполненном операторе DEF SEG. Если же опе- ратор DEF SEG не использовался или он не указал значения то содержимое регистра CS совпадает с вышеуказанными регист- рами. Регистр SP указывает на стэк, в котором МАСМ-подпрог-
рамма может использовать только 16 байт. Возврат в БЕЙСИК- программу должен выполняться при условии восстановления всех вышеуказанных регистров. Первый способ позволяет пе- редавать МАСМ-подпрограмме только один формальный пара- метр (см. пример, приведенный в описании оператора DEF USR). Более универсальным является использование оператора CALL для организации интерфейса БЕЙСИК- и МАСМ-программ. В опе- раторе CALL задаются имя переменной, значением которой яв- ляется целое число, указанное в команде загрузки BLOAD вто- рым параметром, и список передаваемых МАСМ-подпрограмме возвращаемых ею формальных параметров. В нашем примере данная конструкция может иметь вид: <нс> AVGS=O:CALL AVGS (X, Y, Z) Теперь мы располагаем всей информацией для организации ин- терфейса между основной БЕЙСИК-программой и МАСМ-под- программой. Один из вариантов реализации такого интерфейса имеет следующий вид: 100 X=46:Y=41:DEF SEG=&H3500 110 AVGS=0:BLOAD ”B:AVGS.EXE”, AVGS 120 CALL AVGS (X, Y, Z):PRINT ”X=”; X; ”Y=”; Y; ”Z=”; Z RUN X=46 Y=41 Z=87 В приведенном фрагменте определяются начальные значения для переменных X и Y, устанавливаются значение для АТС и смещения для вычисления адреса точки входа в МАСМ-под- программу, загружаемую из файла AVGS.EXE с УВВ 'В' по BLOAD. Оператор CALL передает управление и формальные параметры МАСМ-подпрограмме. Наконец, результат Z=X+Y выполнения МАСМ-подпрограммы выводится вместе с исходными данными на экран дисплея. Следующий простой фрагмент иллюстрирует использование БЕИСИК-программой в качестве подпрограммы ассемблеровс- кого .COM-файла, загружаемого по имени с активного УВВ в свободную часть рабочей области БЕЙСИКа 10 KEY OFF:CLS:REM Выполнение ASM.СОМ-файлов 20 CLEAR, FRE(42):INPUT ’’Задать имя АБМ.СОМ-файла”,А$ 30 DEF SEG=FRE (47):VGS=0:OPEN А$+”.СОМ” AS #1 40 FIELD #1, 128 AS B$:N=LOF (1):M=N:K=O:WHILE N 50 GET #1:FOR 1=1 TO 128:POKE K, ASC (MID$(B$, I, 1)) 60 K=K+1:N=N-1:IF N=0 THEN CALL VGS ELSE NEXT l:WEND 70 IF X$=”Y” OR X$=”y” THEN 20 ELSE END Нами описана наиболее популярная и доступная широкому кругу пользователей технология использования в среде языка БЕЙСИК МАСМ-программ. Однако существуют и другие, в ряде
случаев даже более эффективные, технологии, подробную ин- формацию о которых читатель может найти в [17]. Таким образом, в настоящем разделе мы ознакомились со средствами языка БЕЙСИК по созданию многомодульных прог- раммных средств как в среде самого языка, так и с применени- ем МАСМ-программ, позволяющих шире использовать возмож- ности ПЭВМ ИСКРА 1030. Правда, для этого пользователь дол- жен в достаточной мере владеть средствами Макроассемблера. Однако и массовый пользователь при программировании своих задач в среде БЕЙСИКа может использовать небольшие МАСМ- подпрограммы, выполняющие специальные функции обработки или вычислений, которые неэффективно, а то и невозможно, вы- полнять на языке БЕЙСИК. 5.7.4. Операторы языка для обработки прерываний, особых и аварийных ситуаций в БЕЙСИК-программах Выполнение достаточно сложных программ с использовани- ем разнообразных внешних устройств^ использование сложных алгоритмов вычислений, обработки информации различного ти- па и управления, а также невозможность заранее предусмот- реть возможные особые и аварийные ситуации, возникающие в процессе функционирования ПО и приводящие к прерыванию ес- тественного хода функционирования задач пользователя в сре- де языка БЕЙСИК приводит его к необходимости использовать специальные языковые средства для программной обработки таких ситуаций. Это, так сказать, вынужденная реакция пользо- вателя по обеспечению устойчивости своего ПО к реальным ус- ловиям его эксплуатации. С другой стороны, целый ряд задач требует при своем программировании использования средств По обеспечению возможности изменения естественного хода выполнения задачи на ПЭВМ уже по инициативе самого пользо- вателя или готового к работе и ждущего включения в вычисли- тельный процесс другого ресурса вычислительной системы. Такие изменения также реализуются на основе системы преры- ваний. Таким образом, программные средства по обработке всех перечисленных ситуаций являются неотъемлемой частью языка БЕЙСИК и по их гибкости и разнообразию в определенной мере можно судить и о возможностях самого диалекта языка. Данные средства языка БЕЙСИК ИСКРА 1030 являются в этом отноше- нии одними из наиболее развитых. В состав языка БЕЙСИК вхо- дят операторы по обработке прерываний, особых и аварийных ситуаций (табл. 36). Символом звездочка (*) в табл. 36 отмечены операторы, ко- торые нет смысла использовать в командной строке.
Оператор Назначение оператора COM (N) ON COM GOSUB Санкция на прерывания от канала связи Определение обработчика прерываний от канала связи. KEY (N) Санкция на прерывания от функциональ- ных клавиш и клавиш прерывания ON KEY GOSUB Определение обработчика прерывания от функциональных клавиш ERROR К ON ERROR GOTO RESUME TIMER ON TIMER GOSUB Моделирование ошибки с номером К Определение обработчика ошибок Выход из обработчика ошибок по error Санкция на прерывания от таймера Определение обработчика прерываний от таймера PLAY • ON PLAY GOSUB • Режим прерываний от фоновой музыки Определение обработчика прерываний от фоновой музыки Из табл. 36 видно, что средства языка БЕЙСИК позволяют осу- ществлять дифференцированную программную обработку пре- рываний по следующим пяти группам прерываний, особых и аварийных ситуаций: (1) от канала связи (СОМ1 и COM2); (2) от функциональных клавиш и клавиш прерывания; (3) от ошибок и особых ситуаций, возникающих в ходе выпол- нения программы; (4) от таймера системы; (5) от фоновой музыки. Перечисленный набор средств позволяет предусмотреть в БЕЙ- СИК-программе обработку наиболее важных планируемых и неп- ланируемых различного типа прерываний. В отличие от других диалектов языка в БЕЙСИКе ИСКРА 1030 каждое средство обра- ботки прерываний обеспечивается двумя основными операто- рами: (1) оператором санкционирования прерываний данного типа; (2) оператором задания условия прерывания и указания его обработчика в программе. Оператор (1) разрешает, запрещает или приостанавливает об- работку прерываний данного типа, а оператор (2) задает усло- вие прерывания и указывает первую программную строку обра- ботчика прерываний данного типа. При этом, перед выполнени- ем оператора (2) рекомендуется выполнить оператор (1). Сред- ство обработки особых и аварийных ситуаций (ON ERROR) имеет несколько иную структуру. Переходим теперь к подробному описанию перечисленных средств языка. Оператор СОМ (К) <режим> санкционирует прерывания от Указанного параметром 'К' адаптера связи СОМ1 (К=1) или
COM2 (К=2). Параметр 'режим' принимает значения: ON - разрешаются прерывания от адаптера СОМк; OFF - перевод адаптера СОМк в режим OFF-LINE; STOP - запрещаются прерывания от адаптера СОМк. Заданный оператором СОМ (К) режим обработки прерываний реализуется в операторе ON COM GOSUB, имеющем формат ON СОМ (К) GOSUB <нсо> Параметр 'К' определяет АВ с целочисленным значением 1 или 2, указывающим на адаптер связи СОМ1 или СО^И2, а параметр 'нсо' задает номер первой строки обработчика Прерываний от адаптера связи (ОПАС). Если <нсо>=0, то прерывания маскиру- ются, т. е. не обрабатываются. Если используется оператор СОМ (К) ON и в операторе ON СОМ (К) GOSUB параметр 'нсо' имеет ненулевое значение, то после выполнения каждого оператора программы происходит проверка буфера адаптера СОМк и в случае наличия в нем ин- формации управление получает ОПАС. Выход из ОПАС можно осуществлять по оператору RETURN подобно случаю подпрог- раммы, используемой по GOSUB. При использовании оператора СОМ (К) OFF обработки прерь- ваний от адаптера СОМк не происходит. Тогда как в случае ис- пользования оператора СОМ (К) STOP буфер адаптера связи не проверяется, но информация в нем сохраняется, так что после- дующее выполнение оператора СОМ (К) ON подключает ОПАС. После передачи управления ОПАС по прерыванию от адапте- ра СОМк автоматически устанавливается режим 'STOP*, чтобы не происходила рекурсия прерываний. Оператор RETURN выхо- да из ОПАС снова восстанавливает режим 'ON' для оператора СОМ (К) <режим>. Чередование операторов СОМ (К) с различны- ми значениями режима совместно с оператором ON СОМ (К) GOSUB <нсо> позволяет дифференцировать обработку прерыва- ний от адаптеров связи. Приведем простой пример использова- ния средств обработки прерываний от адаптера связи СОМ1: 10 СОМ (1) ON:ON СОМ (1) GOSUB 3000 20 END.REM Тело основной программы 100 REM.......................... 3000 REM Обработчик прерываний от СОМ1 ЗОЮ REM Обработка буфера адаптера связи 3020 RETURN 100 В данном примере разрешаются прерывания от адаптера связи СОМ1 и в случае возникновения такого прерывания управление получает ОПАС (строка 3000), обрабатывающий буфер адаптера. После обработки прерывания управление получает строка 100 программы. Оператор ERROR <АВ> служит для моделирования особой ситуации с кодом К=<АВ>, где К - целочисленное значение АВ
в диапазоне 1:255. Сам БЕЙСИК обрабатывает особые ситуации с кодами 1 + 78, описание которых приводится в [17]. Пользова- тель имеет возможность предусмотреть обработку своих осо- бых ситуаций, связанных, как правило, с особенностями функ- ционирования его ПО. Для кодов таких ситуаций рекомендуется использовать максимально возможные допустимые значения, чтобы они не совладали с кодами, обрабатываемыми стандарт- но БЕЙСИКОМ. При установке режима обработки особых ситуаций (по ON ERROR), если в программе предусмотрен обработчик прерыва- ний от особых ситуаций (ОПОС), то при первом же выполнении оператора ERROR <АВ> моделируется особая ситуация с кодом <АВ> и управление получает ОПОС. В случае отсутствия в прог- рамме ОПОС при возникновении особых ситуаций с кодами 1 + 78, обрабатываемых самим БЕЙСИКОМ, на экран выводятся соответствующие сообщения и выполнение программы прекра- щается. Тогда как для кодов пользователя (79+255) выводится сообщение 'Особый случай', и выполнение программы также прекращается. Следует отметить, что оператору ERROR в прог- рамме должен предшествовать оператор ON ERROR, в против- ном случае БЕЙСИК не распознает ОПОС. Например: 10 ON ERROR GOTO 50 : ERROR 250 20 PRINT "Конец фрагмента”:ЕНО 50 IF ERR=250 THEN PRINT ”Error=250”; ELSE 60 RESUME 20 RUN Еггог=250 Конец фрагмента Оператор ON ERROR GOTO <нсо> разрешает прерывания по особым и аварийным ситуациям и передает при их возникнове- нии управление первой строке ОПОС с номером <нсо>. После выполнения этого оператора любая особая ситуация, включая ситуации, возникающие в командной строке, инициирует пере- ход к ОПОС. В случае возникновения прерываний по особой си- туации, все остальные типы прерываний запрещаются, т. е. пре- рывания, обрабатываемые ОПОС, имеют максимальный приори- тет. Обработке ОПОС подвергаются только те прерывания от особых ситуаций, которые возникают после выполнения опера- тора ON ERROR GOTO. В случае возникновения особой ситуации в самом ОПОС БЕЙ- СИК выводит на экран дисплея соответствующее диагностиче- ское сообщение и прекращает выполнение основной программы. Для подавления таких ситуаций в ОПОС рекомендуется исполь- зовать оператор ON ERROR GOTO О. В ОПОС допускаются пре- рывания всех типов. Для выхода из ОПОС служит оператор RESUME. Оператор RESUME имеет формат RESUME [{0 I <нс> I NEXT)]
и указывает место в программе, с которого она возобновляет свое выполнение после выхода из ОПОС. Если в операторе от- сутствуют параметры или закодирован параметр '0' (ноль), то программа возобновляет работу с оператора, вызвавшего осо- бую ситуацию. В случае параметра нс (номер строки) програм- ма возобновляет выполнение со строки с номером <нс>. Нако- нец, в случае использования параметра 'NEXT' выполнение во- зобновляется с оператора, следующего за оператором, вызвав- шим особую ситуацию. В ОПОС допускается использование нескольких операторов RESUME, позволяющих дифференциро- вать выход из него. Пример на эту возможность будет приведен несколько ниже. Наряду с операторами обработки особых и аварийных ситуа- ций часто используются две системные переменные ERR и ERL. Переменная ERR получает код последней возникшей особой си- туации в программе, значение которого лежит в диапазоне 0-255. Значение ERR=O говорит о том, что особых и аварийных ситуаций обнаружено не было на момент вычисления функции ERR. С помощью системной переменной ERR проверяются коды особых ситуаций при организации различного типа ОПОС в БЕИ- СИК-программах. Это же относится и к системной переменной ERL. Системная переменная ERL получает в качестве значения но- мер программной строки, в которой возникла особая или аварий- ная ситуация. Значение ERL=O говорит о том, что особых ситуа- ций обнаружено не было на момент вычисления переменной ERL, тогда как значение ERL=65535 говорит о возникновении особой ситуации в командной строке. Следует соблюдать осторожность при использовании переменной ERL в операторе условного пе- рехода IF - THEN или IF - GOTO, так как номер строки за пере- менной ERL подвержен действию команды RENUM языка БЕЙСИК. Приведем примеры, иллюстрирующие использование опера- торов ERROR, ON ERROR GOTO, RESUME и системных перемен- ных ERR и ERL: О ON ERROR GOTO 2:A$=”B:GR0DN0.GPI” 1 KILL A$:PRINT ’’Конец фрагмента”:ЕИО 2 IF ERR=71 THEN 3 ELSE IF ERR=53 GOTO 5 ELSE 9 3 CLS.LOCATE 10, 25 4 PRINT ’’Вставить дискету в УВВ 'B'”:GOTO 9 5 COLOR 0, 7, 0:CLS:LOCATE 10, 20 6 PRINT ’’Файл”; A$; ’’отсутствует на дискете” 7 FILES MID$ (A$, 1, 2)+”\” 8 RESUME NEXT 9 RESUME В данном примере делается попытка удалить файл GRODNO.GPI на УВВ 'В'. В случае возникновения особой ситуации управление
получает ОПОС (строка 2), который с помощью системной пере- менной ERR дифференцирует тип возникшей ситуации и в зави- симости от него выводит на экран сообщения либо о неготов- ности УВВ (код 71) с просьбой установить дискету, либо об от- сутствии указанного файла (код 53) на установленном в УВВ 'В' томе с последующим выводом на экран содержимого каталога тома на УВВ'В'. О ON ERROR GOTO 4:X=46:Y=41:Z=21 1 A=X*Y:B=Y/Z:IF A<1000 THEN 2 ELSE ERROR 100 2 A=SQR(A)+Z:IF A> 100 THEN 3 ELSE ERROR 110 3 IF (X+Y)/Z<4 THEN END ELSE ERROR 90:END 4 REM Обработчик прерываний по особым ситуациям 5 IF ERR=100 THEN A=942:PRINT ”A=”; A; ELSE GOTO 7 6 PRINT ”ERR=”; ERR; ”ERL=”; ERLzRESUME 0 7 IF ERR=110 THEN A=947:PRINT ”A=”; A; ELSE GOTO 9 8 PRINT ”ERR=”; ERR; ”ERL=”; ERL:RESUME 9 IF ERR=90 THEN PRINT ”ERR=”; ERR; ”ERL=”; ERL:RESUME NEXT RUN A= 942 ERR=100 ERL= 1 A= 947 ERR=110 ERL= 2 ERR= 90 ERL= 3 В данном примере в зависимости от значений выражений фор- мируются посредством оператора ERROR особые ситуации пользователя с кодами 90, 100 и 110, которые обрабатываются ОПОС (строка 4). ОПОС анализирует возникающие особые ситу- ации с помощью системной переменной ERR и на основе ее значения выводит на экран соответствующую информацию, ор- ганизуя выход в основную программу через оператор RESUME в зависимости от кода обрабатываемой особой ситуации. 10 ON ERROR GOTO 30JNPUT ’’Ввести код ситуации”; К 20 ERROR K:REM Моделирование особой ситуации <К> 30 PRINT ”ERR=”; ERRiRESUME 10 RUN Ввести код ситуации? 0 ERR= 5 (Неверный вызов функции) Ввести код ситуации? 100 ERR= 100 Данный пример иллюстрирует недопустимость моделирования посредством оператора ERROR особой ситуации с кодом ° (ноль). Попытка смоделировать такую ситуацию приводит к ошибке с диагностикой 'Неверный вызов функции' - код 5. Следует отметить, что не все особые ситуации, обрабатывае- мые БЕИСИКом (коды 1-5-78), можно программно обрабатывать с помощью оператора ON ERROR и ОПОС. Так, особые ситуации с кодами 6 и 11 обрабатываются БЕЙСИКОМ, но сам код не фор- мируется и для обработки подобных ситуаций следует исполь-
зовать оператор ERROR моделирования особой ситуации. Сле- дующий пример иллюстрирует такой подход: О X=19.42:Y=19.47:ON ERROR GOTO 3 1 INPUT ’’Ввести Z”;Z:IF Z=0 THEN ERROR 11 ELSE 2 PRINT ’’Результат (X+Y)/Z=”; (X+Y)/Z:GOTO 5 3 REM Обработчик особых и аварийных ситуаций 4 IF ERR=11 THEN PRINT ”ERR=”; ERR; ’’Деление на 0 в ERL 5 INPUT ’’Повторить (1-Д/2-Н)”; T:ON T GOTO 1:END 6 RESUME 1 RUN Ввести Z? 6 Результат (X+Y)/Z= 6.481667 Повторить (1-Д/2-Н)? 1 Ввести Z? 0 ERR= 11 Деление на 0 в 1 Повторить(1-Д/2-Н)?2 В данном примере с целью программной обработки особых ситуаций с кодом 11 используется оператор ERROR для модели- рования данной ситуации и формирования кода. В целях повы- шения живучести программы рекомендуется использовать программную обработку аварийных ситуаций при работе с дис- ковыми файлами данных. Следующие два оператора языка позволяют организовать об- работку прерываний от таймера. Оператор TIMER <режим> санк- ционирует прерывания от таймера в зависимости от значения своего параметра 'режим' следующим образом: ON - разрешаются прерывания от таймера; OFF - отмена проверки временного интервала таймера; STOP - запрещение прерываний от таймера. Оператор ON TIMER имеет формат ON TIMER (К) GOSUB <нО и служит для определения условия прерывания от таймера (ве- личина К временного интервала) и указания первой строки об- работчика прерываний от таймера (ОПТ). Если <нс>=0, то обра- ботка прерываний от таймера не производится. Значение К=<АВ> лежит в диапазоне 1-86400 с (или 24 ч) и определяет временной интервал, по истечении которого проис- ходит прерывание от таймера, обрабатываемое ОПТ в зависи- мости от режима в операторе TIMER. Выход из ОПТ можно осу- ществлять по оператору RETURN, который, вообще говоря не- обязателен. Обе возможности иллюстрируются в приводимых ниже примерах. Если использовался TIMER ON и в операторе ON TIMER указан ненулевой номер <нс> программной строки ОПТ, то по истече-
нии временного интервала в К секунд происходит прерыва- ние от таймера с передачей управления ОПТ и включением отсчета нового временного интервала. Оператор TIMER OFF отменяет проверку временного ин- тервала, а оператор TIMER STOP приостанавливает обработ- ку прерываний от таймера, но само прерывание регистриру- ется и может быть впоследствии обработано после выполне- ния оператора TIMER ON. После передачи управления ОПТ устанавливается режим TIMER STOP, чтобы избежать рекур- сий прерываний. Выход из ОПТ по оператору RETURN восста- навливает режим TIMER ON, если в ОПТ не использовался оператор TIMER OFF. Приведем примеры, иллюстрирующие принцип программной обработки прерываний от таймера: О TIMER ON:ON TIMER (60) GOSUB 2 1 WHILE 46:A=A+1:WEND 2 REM Обработка прерывания от таймера 3 T=T+60:PRINT ’’Быстродействие ЦП в 4 PRINT ’’среде БЕЙСИК=”; INT (3*А/Т); ”оп/сек” 5 INPUT ’’Продолжить (1-Д/2-Н)”; K.ON К GOTO O.END RUN Быстродействие ЦП в среде БЕЙСИК= 812 оп/сек Продолжить (1-Д/2-Н)? 1 Быстродействие ЦП в среде БЕЙСИК= 809 оп/сек Продолжить (1-Д/2-Н)? 2 В данном примере устанавливается временной интервал в 60 секунд и санкционируются прерывания от таймера. Бес- конечный цикл типа WHILE - WEND увеличивает каждый раз на 1 значение счетчика А. По истечению временного интерва- ла управление получает ОПТ (строка 2), который оценивает некоторую производительность ЦП в среде языка БЕЙСИК в операторах/сек, выводит на экран сообщение и дает пользо- вателю возможность либо прекратить выполнение програм- мы, либо продолжить выполнение цикла. Пример иллюстриру- ет также организацию ОПТ без использования оператора вы- хода RETURN: 0 TIMER ON:ON TIMER (30) GOSUB 2 1 WHILE 46:A=A+1 :WEND 2 REM Обработка прерывания от таймера 3 T=T+30:PRINT ’’Быстродействие ЦП в ” ; 4 PRINT ’’среде БЕЙСИК =”; INT (3*А/Т); ”оп/сек” 5 INPUT ’’Продолжить (1-Д/2-Н)”; K:ON К GOTO 6:END 6 RETURN
Данный пример отличается от предыдущего наличием в ОПТ оператора выхода RETURN и другого значения для величины временного интервала. О TIMER ON.ON TIMER (30) GOSUB 2 1 ON ERROR GOTO 7.WHILE 46:A=A+1 .WEND 2 REM Обработка прерывания от таймера 3 T=T+30:PRINT ’’Быстродействие ЦП в ”,TERROR 100 4 PRINT ’’среде БЕЙСИК =”; INT (3*А/Т); "оп/сек" 5 INPUT ’’Продолжить (1 -Д/2-Н)”;К.ОН К GOTO 61END 6 RETURN 7 REM Обработка прерываний от особых ситуаций 8 IF ERR=100 THEN RESUME NEXT ELSE RESUME RUN Быстродействие ЦП в среде БЕЙСИК= 784 оп/сек Продолжить (1-Д/2-Н)? 2 Данный пример является расширением предыдущего путем включения в тело ОПТ моделирования особой ситуации с кодом пользователя 100, которая обрабатывается ОПОС (строка 7). Следующий фрагмент иллюстрирует динамическое изменение временного интервала Т: 0 TIMER ON:T=15 1 ON TIMER (Т) GOSUB 2.WHILE 41 WEND 2 T=T+15:PRINT ’’Время TIME$:RETURN 1 RUN Время= 14:49:41 Время= 14:50:11 Время= 14:50:56 Время= 14:51:56 Оператор KEY (К) <режим> санкционирует обработку преры- ваний от функциональных клавиш, клавиш управления курсором и прерывания. Параметр 'К' определяется АВ с целочисленными значениями в диапазоне 1-20 и указывает номер клавиши, пре- рывание от которой планируется к обработке. Значения <К> оп- ределяют клавиши следующим образом: <К> Клавиши, соответствующие <К> 1 + 10 Функциональные клавиши F1+F10 11 + 14 Соответственно клавиши (t, -, 1) управления кур' сором 15+20 Определенные оператором KEY клавиши прерывания Подробное описание оператора KEY формат 3, определяющего дополнительно 6 клавиш прерывания, можно найти в разд. 5.7 1
Оператор KEY (К) <режим> в зависимости от значения пара- метра'режим' выполняет следующие функции: ON - разрешение прерываний от клавиши с номером <К>; OFF - запрещение прерываний от клавиши с номером <К>; STOP - приостановка прерываний от <К>-клавиши. При разрешении прерываний от клавиши <К> оператор ON KEY с ненулевым номером строки в случае возникновения такого ти- па прерывания передает управление обработчику прерываний от функциональных клавиш (ОПФК). Оператор KEY (К) OFF запре- щает прерывания от клавиши <К>, тогда как оператор KEY (К) STOP приостанавливает обработку прерываний от данной кла- виши. Режим приостановки обработки прерываний аннулирует- ся последующим оператором KEY (К) ON. Оператор ON KEY (К) GOSUB <нсо> служит для определения условия прерывания от клавиши и ОПФК, обрабатывающего пре- рывания от клавиши с номером <К>. При разрешении прерыва- ний от клавиши <К> возникающие прерывания этого типа обра- батываются соответствующим ОПФК, первая программная стро- ка которого указывается параметром 'нсо' оператора. Режим использования оператора ON KEY (К) GOSUB аналогичен опера- тору ON СОМ (К) GOSUB, описанному в начале настоящего раз- дела. Механизм прерываний от клавиш не работает, если в бу- фере клавиатуры находятся коды других клавиш. Клавиши прерывания нельзя проверять с помощью системных функций INPUTS и INKEYS. Примеры обработки прерываний от клавиш: 10 KEY (10) ON:ON KEY (10) GOSUB 30 20 WHILE 41:A=A+1:WEND 30 REM Обработка прерываний от клавиш 40 PRINT ”А=”; ArINPUT ’’Продолжить (Y/N)”; А$ 50 IF A$=”Y” THEN RETURN ELSE END RUN A= 6228 (нажата клавиша F10) Продолжить (Y/N)? Y A= 11122 (нажата клавиша F10) Продолжить (Y/N)? N В данном примере разрешаются прерывания от функциональной клавиши F10, обработку которых осуществляет ОПФК (програм- мная строка 30). Выполнение бесконечного цикла типа WHILE - WEND прерывается клавишей F10 и на экран выводится значе- ние счетчика цикла А. 10 KEY (10) ON:ON KEY (10) GOSUB 30 15 KEY (9) ON:ON KEY (9) GOSUB 50 20 WHILE 41:A=A+1:WEND 30 REM Обработка прерываний от клавиш 40 PRINT ”А=”; A:RETURN 50 PRINT ’’Конец фрагмента”.^О
RUN А= 1942 А= 4247 Конец фрагмента (нажата клавиша F10) (нажата клавиша F10) (нажата клавиша F9) Данный пример является расширением предыдущего вводом об- работки прерываний от клавиши F9. Выполняется тот же беско- нечный цикл типа WHILE - WEND и в зависимости от нажатия клавиши F10 или F9 осуществляется соответственно вывод на экран значения счетчика цикла А с последующим возвратом в цикл или завершение выполнения фрагмента. 0 KEY (10) ON.ON KEY (10) GOSUB 9 1 KEY 15, CHR$ (&H2)+CHR$(&H1E):KEY (15) ON 2 KEY 20, CHR$(&H0)+CHR$(&H2E):KEY (20) ON 3 ON KEY (15) GOSUB 5:ON KEY (20) GOSUB 7 4 WHILE 21 :A=A+1 :B=46*A:WEND 5 REM Обработчик прерываний от клавиши <А> 6 PRINT "А=”; A.-RETURN 7 REM Обработчик прерываний от клавиши <с> 8 PRINT ”В=”; BzRETURN 9 END:REM Обработка прерываний по <F10> RUN А= 920 (нажата клавиша <А>-ЛАТ) В= 62238 (нажата клавиша <с>-РУС) А= 8317 (нажата клавиша <А>-ЛАТ) В=523480 (нажата клавиша <с>-РУС) » (нажата клавиша F10) В данном примере в качестве дополнительных клавиш 15 и 20 оператором KEY формата 3 (строки 1 и 2) определяются клавиши <А>-ЛАТ и <с>-РУС. Операторами KEY (К) (К=15, 20, 10) разре- шаются прерывания от указанных двух клавиш и функциональ- ной клавиши F10, а обработчики прерываний от всех трех кла- виш определяются операторами ON KEY (К) (строки соответст- венно 5, 7 и 9). Выполняется бесконечный цикл типа WHILE - WEND, в котором вычисляются значения переменных А и В. Пре- рывание от нажатия клавиши {<А>-ЛАТ I <с>-РУС) обрабатыва- ется ОПФК (строка (5 I 7}), выводящего значение переменной {А I В) с последующим возвратом в цикл. Прерывание от функ- циональной клавиши F10 приводит к завершению выполнения данного фрагмента. Оператор PLAY <режим> санкционирует прерывания от фоно- вой музыки согласно значению параметра 'режим': ON - разрешение прерываний от фоновой музыки; OFF - запрещение прерываний от фоновой музыки; STOP - приостановка прерываний от фоновой музыки. Условием прерывания от фоновой музыки (УПФМ) является уменьшение числа нот в буфере фоновой музыки с К до К-1. При
разрешении прерываний такого типа БЕЙСИК проверяет наличие УПФМ после выполнения каждого оператора программы и при его наличии происходит переход к обработчику прерываний от фоновой музыки (ОПФМ), первая строка которого определя- ется в операторе ON PLAY. Оператор ON PLAY имеет формат ON PLAY (К) GOSUB <нсо> и определяет УПФМ и сам ОПФМ. Параметр 'К' принимает цело- численные значения в диапазоне 1-32 и определяет УПФМ. В ос- нове своей механизм выполнения оператора ON PLAY (К) ана- логичен оператору ON TIMER, описанному в настоящем разделе несколько выше. Следует отметить, что УПФМ не выполняется, если установлен режим музыки переднего плана (по оператору PLAY ”MF....”) или если в момент выполнения оператора PLAY ON буфер фоновой музыки не содержал нот. При использовании в программе только ОПФМ нажатие клавиш 'CTR'+'S/B' всегда прекращает выполнение программы и возобновление ее по ко- манде 'CONT' начинается с первой строки ОПФМ. С операторами обработки прерываний от фоновой музыки, как правило, используется и оператор PLAY Х$, заполняющий музыкальный буфер информацией для воспроизведения мело- дии. Этот оператор подробно будет рассмотрен ниже. Пример, иллюстрирующий использование операторов PLAY и ON PLAY* 1 A$=”MBN46P5N21N41N46P6N21N41N46N21N41” 2 B$=”MBN57N66N42P3N57N66N42P5N57N66N42” 3 C$=”MBN62N59N47P3N62N59N47P5N62N59N47”:X$=A$ 4 PLAY X$:PLAY ON:ON PLAY (3) GOSUB 6 5 FOR K=1 TO 1000-.NEXT 6 REM Обработчик прерываний фоновой музыки 7 IF Р >2 THEN P=0:GOTO 8 ELSE 8 P=P+1:ON P GOTO 9, 10, 11 9 X$=BS:GOTO 4 10X$=C$:GOTO 4 11 X$=A$:GOTO 4 В данном фрагменте в переменные А$, В$, С$ помещена инфор- мация для воспроизведения трех музыкальных отрывков, вы- полняющихся в фоновом режиме. Оператор PLAY Х$ (строка 4) формирует буфер фоновой музыки, а операторы PLAY ON и ON PLAY (3) GOSUB 6 соответственно разрешают прерывания от фоновой музыки и указывают УПФМ и сам ОПФМ. УПФМ состоит в уменьшении числа нот в буфере фоновой музыки с 3-х до 2-х, после чего управление получает ОПФМ (строка 6). В зависимос- ти от значения счетчика Р ОПФМ заменяет значение переменной Х$ для оператора PLAY Х$ и передает ему управление. После чего вышеописанный процесс повторяется.
Наряду с рассмотренными операторами можно использовать и системную функцию PLAY (X), имеющую фиктивный аргумент X принимающий любое числовое значение, и определяющую число нот в буфере фоновой музыки. Значение функции нахо- дится в диапазоне 1+32 при использовании оператора PLAY "МВ..” (фоновая музыка) и равно нулю при использовании опе- ратора PLAY ” (музыка переднего плана). Следующий пример иллюстрирует использование системной функции PLAY (X): 1 A$=”MBN46P5N21N41N46P6N21N41N46N21N41” 2 B$=”MBN57N66N42P3N57N66N42P5N57N66N42”:X$=A$ 3 PLAY X$:C$=”MBN62N59N47P5N62N59N47P4” 4 IF PLAY(46)<3 THEN 5 ELSE 4 5 REM Обработчик смены фоновой музыки 6 IF Р >2 THEN P=0:GOTO 7 ELSE 7 P=P+1:ON P GOTO 8, 9, 10 8 X$=B$:GOTO 3 9 X$=C$:GOTO 3 10 X$=A$:GOTO3 Данный фрагмент представляет собой программную реализа- цию предыдущего примера на основе использования системной функции PLAY(X), а не механизма ОПФМ. В заключение настоящего раздела рассмотрим одно свойст- во, присущее всем операторам обработки прерываний и особых ситуаций, исключая операторы PLAY и ON PLAY Этим общим свойством является возможность, а в некоторых случаях и це- лесообразность использования операторов в командной строке. Для этого в БЕЙСИК-программе следует предусмотреть соотве- тствующий обработчик и после ее запуска по RUN в командной строке можно определять условия обработки прерываний и осо- бых ситуаций с определением для целей обработки соответст- вующих программных средств в самой программе (активизация обработчика прерываний). Проиллюстрируем сказанное рядом простых примеров: 1 1 PRINT ”AVZ”;:PRINT ”AGN”;:END 2 IF ERR=100 THEN PRINT ERR ELSE PRINT ERR 3 RESUME 1 RUN AVZAGN ON ERROR GOTO 2 ERROR 100 100 AVZAGN 2 10 WHILE 47:A=A+1 :WEND 20 PRINT ”A=”; A.INPUT ’’Продолжить (1-Д/2-Н)”; T
30 ON T GOTO 40:END 40 RETURN RUN ~C (нажимаются клавиши) 'CTR'+'S/B') Выход в 1 » TIMER ON:ON TIMER (15) GOSUB 20 CONT (возобновление выполнения) A=4287 Продолжить (1-Д/2-Н)? 2 3 . 10 WHILE 47-.A+A+1 :WEND 20 PRINT ”A=”; A.1NPUT ’’Продолжить (1-Д/2-Н)”; T 30 ON T GOTO 40:END 40 RETURN RUN ~C (нажимаются клавиши 'CTR'+ S/B') Выходв 1 KEY (5) ON:ON KEY (5) GOSUB 20 CONT (возобновление выполнения) A=2621 Продолжить (1-Д/2-Н)?2 В каждом из приведенных примеров листинг программного фрагмента не содержит операторов обработки прерываний и особых ситуаций, но в них предусмотрены соответствующие обработчики (ОПОС, ОПТ и ОПФК). Затем по команде RUN каж- дый из приведенных фрагментов запускается на выполнение, и в командной строке после завершения фрагмента или после прерывания его по клавишам 'CTR'+'S/B' вводятся оператор, санкционирующий обработку прерываний или особых ситуаций, и оператор для указания обработчика данных ситуаций, который активирует обработчик прерываний соответствующего типа. Приведенные здесь же результаты выполнения после этого фрагментов иллюстрируют действие механизма обработки пре- рываний и особых ситуаций посредством командной строки. С учетом рассмотренного материала настоящего раздела приве- денные примеры дополнительного пояснения не требуют. Следует сделать еще одно существенное замечание по орга- низации обработчиков прерываний разных типов. Так как опера- торы загрузки программ в память, в частности, CHAIN уничтожа- ют информацию в магазине возвратов, то использование этих средств в обработчиках прерываний должно осуществляться весьма осторожно, чтобы не вызвать ошибки при выходе из об- работчика. Рассмотрев средства языка по организации программной обработки в БЕЙСИК-программах различных типов прерываний, особых и аварийных ситуаций, переходим к весьма важному
вопросу возможностей языка по обмену информацией с внеш- ней памятью ПЭВМ - дисковыми устройствами. 5.7.5. Операторы работы с файлами данных на дисковых томах Все данные на дисковых томах, с которыми работает любая БЕЙСИК-программа, согласно файловой концепции системы АДОС оформляются в виде файлов. Сами БЕЙСИК-программы на дисковых томах также оформляются в виде программных фай- лов, с которыми пользователь работает посредством команд SAVE, LOAD, RUN, MERGE, KILL и NAME - AS (они были рассмот- рены в разд. 5.6 при изучении команд языка БЕЙСИК). В настоя- щем же разделе будут рассмотрены операторы и функции языка БЕЙСИК для обеспечения работы с файлами данных на диско- вых УВВ. Файлы данных БЕИСИК-программ полностью отвечают требованиям системы АДОС, исключая следующие моменты: - по умолчанию расширение имени файла данных не прини- мает значения '.BAS' (в отличие от программных файлов); - при указании файла данных его спецификатор кодируется в верхних кавычках (”). В среде языка БЕЙСИК пользователь имеет возможность рабо- тать с последовательными файлами и файлами с произвольным доступом. Рассмотрим работу в среде языка БЕЙСИК с каждым из этих типов файлов в отдельности, начав с наиболее простого. Перед дальнейшим изложением кратко поясним некоторые понятия. С каждым файлом данных связываются два понятия: физическая и логическая записи. Физическая запись непосред- ственно связана с типами дискового УВВ и магнитного носителя (дискеты или жесткого диска) и представляет собой единицу но- сителя, например, сектор, с которой работает УВВ при обмене информацией с дисковым томом. Программы же пользователя, как правило, имеют дело с логическими записями, которые представляют собой логически связанную совокупность байтов информации, посредством которой осуществляется в БЕЙСИК- программе обмен с дисковым файлом за одну операцию (чте- ние/запись). Если физическая запись (сектор) имеет длину 512 байтов, то длина логической записи может достигать длины в 32767 байтов. БЕЙСИК автоматически распределяет сектора дискового тома под логические записи файла. Это достигается как блокированием записей, так и возможностью занятия одной логической записью нескольких физических записей. Например, логическая запись может начинаться в середине одного секто- ра и кончаться в любом месте сектора, отстоящего от начально- го на К секторов. Файл данных любого из названных двух типов состоит из логических записей, которые в дальнейшем ради краткости будем называть просто записями. Вопросы блокиро- вания и деблокирования логических записей файлов данных здесь рассматриваться не будут.
При создании наиболее простым является последовательный файл. Однако при использовании данных готового последова- тельного файла отсутствуют гибкость и скорость в обращении к его отдельным записям. При создании последовательного фай- ла записи в него помещаются последовательно одна за другой по мере их поступления. При необходимости прочесть из такого файла (К+1)=ю запись мы вынуждены будем прочесть и пред- шествующие ей К записей. Для пополнения последовательного файла новыми записями недостаточно открыть его для записи как старый файл; при открытии такого файла на дозапись следу- ет использовать режим APPEND оператора OPEN открытия фай- ла. Числовая информация в последовательный файл пишется в символьном виде, поэтому для своего размещения на томе они требуют большего места. Создание и работа с файлом произвольного доступа несколько сложнее, чем с последовательными файлами, но ис- пользование таких файлов дает ряд существенных преимуще- ств. Прежде всего, числовая информация в файлах произволь- ного доступа обычно представляется в бинарном формате, что уменьшает требуемое для файла место на томе относительно аналогичного последовательного файла. Этот фактор в услови- ях относительно ограниченной внешней памяти представляется весьма существенным. Самым большим преимуществом фай- лов произвольного доступа является возможность произволь- ного доступа к его записям по их номерам. Это связано с тем, что информация в файл произвольного доступа пишется отдель- ными записями, идентифицируемыми номерами. Ниже будет показано, что возможно использовать последовательные файлы в качестве файлов произвольного доступа и, наоборот, при не- которых несложных предположениях. Условимся при дальнейшем изложении файл, в который осу- ществляется запись информации, называть входным, а из кото- рого выводятся данные - выходным файлом. При работе с файлами в среде языка БЕЙСИК используется буфер ввода-вывода размером в 128 байт (по умолчанию), од- нако для увеличения производительности обмена с дисковыми файлами рекомендуется задавать значение размера для буфера равным 512 байтов. Сделать это можно в момент загрузки БЕЙ- СИКа, кодируя в команде BAS параметр 7S:512'. Общая схема организации обмена с файлом данных имеет следующий вид: в зависимости от типа файла (последователь- ный или произвольного доступа) логические записи помещают- ся сначала в программный буфер, затем в системный и по мере его заполнения переписываются в дисковый файл. При чтении из файла описанная процедура происходит в обратном порядке. Размер программного буфера указывается в программе опера- тором FIELD и системного параметром 7S:' в команде BAS заг- рузки интерпретатора БЕЙСИКа. Максимальное число файлов, открываемых в БЕЙСИК-прог- рамме, по умолчанию полагается равным Зив случае необхо-
димости работы с большим числом М (М < 15) файлов при загру- зке БЕЙСИКа в команде BAS следует использовать параметр 7F:M . Если БЕЙСИК-программа не использует файлов прямого доступа, то в команде BAS рекомендуется указывать параметр 7S:O,I что позволяет сэкономить 128 байтов для каждого ис- пользуемого файла в программе. Полный перечень операторов работы с последовательными файлами приведен в табл. 37. Операторы, отмеченные символом звездочка (•), являются об- щими для обоих типов файлов и служат соответственно для открытия и закрытия файлов. Остальные представленные в таб- лице операторы работают только с последовательными файла- ми. Наряду с перечисленными операторами для работы с пос- ледовательными файлами можно использовать следующие четыре системные функции ввода-вывода: * LOC - определение текущего положения файла; * LOF - определение размера заданного файла; EOF - индикация условия 'конец заданного'файла ; INPUTS - чтение символов из заданного файла. Символом звездочка (*) помечены функции, используемые и для файлов с произвольным доступом. Все перечисленные операто- ры и системные функции для работы с последовательными фай- лами допустимы и в командной строке. Рассмотрение начнем с операторов OPEN и CLOSE, используемых при работе с файла- ми любого типа. Таблица 37 Оператор Назначение оператора OPEN • Открыть файл в указанном режиме с присвоени- ем ему логического номера CLOSE • INPUT* LINE INPUT# PRINT# PRINT# USING Закрыть файл с указанным номером Читать последовательный файл Читать строку последовательного файла Запись в последовательный файл Форматная запись в последовательный файл с указанным логическим номером WRITE# Запись в последовательный файл Оператор OPEN имеет два формата: (1) OPEN ”СФ” [FOR <режим>] AS [#] <нф> [LEN=K] (2) OPEN Х$, [#] <нф>, ”СФ” [, К] и служит для открытия файла любого типа, заданного его специ- фикатором ГСФ'. В качестве данного параметра может использо- ваться символьная переменная, определяющая путь к искомому файлу данных. Параметр 'режим' в зависимости от своего зна-
чения определяет режим открытия файла: OUTPUT - последовательная запись информации в файл; INPUT - последовательное чтение информации из файла; APPEND - дозапись в конец последовательного файла. При отсутствии параметра 'режим' предполагается открытие файла произвольного доступа. Необязательный параметр '#' идентифицирует логический номер файла, а параметр 'нф' ука- зывает само значение логического номера. Параметр 'нф' представляет собой АВ с целочисленными зна- чениями в диапазоне 1-М, где М указано в параметре 7F:M' ко- манды BAS загрузки интерпретатора БЕЙСИКа или равно трем по умолчанию. Задание логического номера файла большего М вызывает ошибку с диагностикой 'Неверный номер файла'. При- веденное здесь описание параметра 'нф' будет иметь силу на протяжении всего последующего изложения. Параметр 'К' определяет АВ с целочисленными значениями в диапазоне 1-32767 (по умолчанию <К>=128) и задает длину записи файла произвольного доступа. Величина <К> не должна превышать значения Т, указанного в параметре 7S:T' команды BAS загрузки БЕЙСИКа, так как длина логической записи не должна превышать размера системного буфера ввода-выво- да. Данный параметр неприменим для открытия последователь- ных дисковых файлов данных. Символьный параметр 'Х$' определяет СВ, в значении которо- го играет роль только первый его символ: О - эквивалентен режиму открытия OUTPUT; I - эквивалентен режиму открытия INPUT; R - режим произвольного ввода и вывода. Данный параметр в другой форме указывает режим открытия файла данных. Оператор OPEN отводит для файла данных или устройства бу- фера ввода-вывода, определяет режим доступа и связывает с файлом логический номер, который затем используется для ссылок к данному файлу операторами ввода-вывода. После открытия файла данных его логический номер можно использо- вать в следующих операторах и системных функциях: PRINT#, PRINT# USING, INPUT#, LINE INPUT#, WRITE#, INPUTS, CLOSE, EOF, LOC, LOF - последовательный файл, CLOSE, GET#, PUT#, LOC, LOF, FIELD - файл произвольного доступа. Операторы GET# и PUT# используются только с файлами про- извольного доступа, которыми могут быть либо дисковые фай- лы, либо печать. В качестве последовательного может быть открыт любой файл или устройство. Режим дозаписи APPEND в последовательный файл можно ис- пользовать только для дисковых файлов, для которых операторы
PRINT// и WRITE# будут расширять с конца указанные последо- вательные файлы. Один и тот же файл можно открывать под разными логически- ми номерами в разных допустимых для данного файла режимах В этом случае каждому логическому номеру отводится свой бу- фер ввода-вывода, однако БЕЙСИК не проверяет корректность использования данных в таком режиме работы с файлами При попытке открыть несуществующий файл как входной воз- никает ошибка с диагностикой 'Файл не найден для выходного же файла осуществляется создание нового файла на заданном дисковом томе. Приведем примеры корректного открытия файлов: 1 OPEN ’’B.PTI” FOR OUTPUT AS #2 - открывается на УВВ 'В новый последовательный файл PTI с логическим номером 2; если на томе уже существует файл с таким именем, то в него будет записываться новая информация; 2 OPEN ”B:AGN” FOR INPUT AS 1 - открывается на УВВ 'В' для чтения последовательный файл AGN с логическим но- мером 1; 3 OPEN ”В:А.О1” FOR APPEND AS #G - открывается на УВВ 'В' для дозаписи в конец последовательный файл А. 01 с логическим номером равным значению G, 4 OPEN ”R”, #4, ”B:STRUCTUR”, 1024 - открывается на УВВ 'В' файл STRUCTUR произвольного доступа с логическим номером 4 и длиной записи 1024 байтц; в файл можно за- писывать и из него можно читать; 5 . OPEN ”B:STRUCTUR” AS #4 LEN=1024 - аналогично при- меру 4; 6 OPEN A42S FOR INPUT AS #2 - открывается файл на чтение под логическим номером 2, путь к которому определяется в переменной A42S. Открывать в режиме дозаписи можно и новый файл, что иллюст- рирует следующий пример: 1 KILL ”B:W”OPEN ”ВЛУ” FOR APPEND AS 1:FOR K=1 TO 10 2 WRITE #1, K:NEXT:CLOSE:OPEN ”B:W” FOR INPUT AS 2 3 FOR K=1 TO 10JNPUT #2, Z:PRINT Z,* 4 IF EOF (2) THEN END ELSE NEXT RUN 123456789 10 При открытии файла no оператору OPEN следует помнить, что логический номер файла и длина записи не должны превышать значений, указанных соответственно в параметрах '/F:' и '/S:' команды BAS загрузки БЕЙСИКа. Ниже будут рассмотрены и другие примеры использования оператора OPEN. Оператор CLOSE имеет формат
CLOSE [<Список логических номеров файлов>] и служит для закрытия файлов, логические номера которых пе- речислены в его параметре 'список'. Закрытие любого файла состоит в аннулировании логической связи между файлом (уст- ройством) и его номером. После закрытия файлу можно впос- ледствии по оператору OPEN присваивать новый логический номер, а прежний номер использовать для другого файла дан- ных. При использовании оператора CLOSE без параметра в БЕИ- СИК-программе закрываются все открытые файлы и устройства. Подобно оператору CLOSE без параметра все открытые файлы закрываются по следующим операторам и командам языка БЕЙ- СИК. END, RESET, NEW, SYSTEM и RUN с параметром 'R' Следу- ет помнить, что оператор STOP не закрывает открытые файлы что позволяет впоследствии возобновить выполнение програм- мы. При закрытии по оператору CLOSE последовательного файла последнее содержимое его буфера ввода-вывода записывается в файл. Приведем примеры использования оператора CLOSE CLOSE #1, #4 6 - закрываются файлы с логическими номе- рами 1, 4 и 6; CLOSE - закрываются все открытые в программе файлы и устройства. Ниже будут приведены примеры на использование данного опе- ратора. Оба оператора OPEN и CLOSE можно использовать и в командной строке. Следует помнить, что файлы, не закрытые по CLOSE, закрываются в результате выполнения операторов END NEW, RESET, SYSTEM, RUN без параметра R, а также при любой корректировке БЕЙСИК-программы. Рассмотрев операторы OPEN и CLOSE, общие для обоих типов файлов данных, перейдем к изучению собственно операторов работы с данными последовательных файлов. Оператор PRINT# имеет формат PRINT # <нф>, [USING Х$;] <Список вывода> и служит для помещения в открытый последовательный файл с номером <нф> очередной логической записи, содержащей зна- чения элементов списка вывода'. Параметр 'нф' определяет логический номер файла, открытого по оператору OPEN. Параметр 'Х$' определяет СВ, описывающее формат анало- гично оператору PRINT USING, описанному в разд. 5.7.2. Пара- метр 'список вывода' содержит АВ и/или СВ, разделенные точ- кой с запятой (;). Если числовые элементы 'списка' разделяются запятой (,), то в поле значения элемента добавляется код 'пусто'
Поэтому рекомендуется в 'списке вывода' оператора PRINT# использовать в качестве разделителя только точку с запятой. Данные, записываемые в последовательный файл по операто- ру PRINT#, не уплотняются и помещаются в файл в символьном формате подобно тому, как это делает оператор PRINT при вы- воде данных на экран. Поэтому следует предусмотреть исполь- зование в записях разделителей для последующего корректного чтения данных из файла. Для форматированной записи данных в файл совместно с оператором PRINT# можно использовать параметр USING. Форматирование данных происходит аналогично оператору пе- чати PRINT USING. Вообще говоря, оператор PRINT# отличается от оператора PRINT в основном только тем, что выводит инфор- мацию не на экран, а в последовательный файл. Приведем при- мер-использования оператора PRINT#: 10 Х$=”Дата”: Y$=”6.09.88”:X=46:Y=41 20 OPEN ”B:DATA” FOR OUTPUT AS #1 30 PRINT #1, XS; Y$; X; Y; Z$=”#####” 40 PRINT #1, USING ZS; X*Y; X+Y По данному фрагменту открывается входной файл DATA с логи- ческим номером 1 и в него соответственно операторами PRINT# и PRINT# USING помещается запись <Х$; Y$; X; Y> и форматиро- ванная запись <X*Y; X+Y>. Более удобным относительно PRINT# является оператор WRITE#, имеющий формат WRITE # <нф>, [<Список вывода>] и служащий для помещения очередной логической записи, опре- деляемой параметром 'список вывода', в открытый последова- тельный файл с номером <нф>. Параметр 'список вывода' содер- жит АВ и/или СВ, разделенные запятыми или точкой с запятой. При отсутствии параметра 'список вывода' в файл помещается пустая запись. Различие между PRINT# и WRITE# такие же, как и между операторами PRINT и WRITE, рассмотренными в разд. 5.7.2. Подробнее об этом речь будет идти несколько ниже. При- ведем пример использования оператора WRITE#: 10 Х$=”Дата": YS=”6.09.88”:X=46:Y=41 20 OPEN ”B:DAT1” FOR OUTPUT AS #2 30 WRITE #2, X$; YS; X*Y; Y+X Пример подобен предыдущему примеру, приведенному для опе- ратора PRINT#. Оператор WRITE# не рекомендуется использовать для форми- рования файлов исходных текстов программ, так как програм- мные строки помещаются в файл в кавычках и прямое использо-
вание такого файла приводит к ошибке с кодом ERR=66 (Много файлов). Оператор INPUT# имеет формат INPUT # <нф>, <Список элементов выхода> и служит для чтения очередной логической записи из открытого последовательного файла (из канала связи или с клавиатуры) с номером <нф> и присвоения ее значений элементам 'списка'. В качестве элементов 'списка' могут выступать числовые и/или символьные переменные и элементы массивов, разделенные запятой. Значения считываемых из файла или устройства дан- ных должны по типу соответствовать элементам списка' опе- ратора INPUT#. При этом соответствие ограничивается только уровнем числовой или символьной информации, т. е. нельзя смешивать только числовые и символьные данные. В рамках же числовой информации допустимы любые совмещения типов, приводящие, в общем случае, к преобразованию данных. При чтении данных игнорируются ведущие пробелы, знаки 'перевода строки' и 'возврата каретки', а каждое число должно кончаться одним из этих знаков или запятой. Первым элемен- том прочитанного оператором символьного значения будет первый встреченный символ, отличный от пробела, 'перевода строки' и 'возврата каретки'. Если этот символ кавычки ("), то считанным символьным значением будет строка символов в кавычках, в противном случае строка заканчивается первым из встреченных знаков: запятая, 'перевод строки' или 'возврат каретки*, а если они отсутствуют, то считанная оператором IN- PUT# строка будет содержать 255 символов. При считывании в какую-либо переменную 'списка вывода' признака 'конец файла' значение этой переменной подавляется. Оператор LINE INPUT# имеет формат LINE INPUT #<нф>, XS и служит для чтения очередной символьной строки из открытого последовательного файла с логическим номером <нф> и прис- воения ее значения символьным переменной или элементу мас- сива Х$. Оператор читает последовательный файл до знака 'возврат каретки' и пропускает знак 'перевод строки' (если он следует за возвратом каретки'). Последовательность знаков 'перевод строки' и 'возврат каретки' (только в таком порядке) восприни- мается как часть считываемой строки. Оператор LINE INPUT# оказывается весьма полезным для чтения какого-либо исходно- го модуля БЕЙСИК-программы другой программой в качестве исходных данных для последующей обработки, например, мо- дификации или анализа исходного модуля. Следующий пример
иллюстрирует чтение посредством оператора LINE INPUT# ис- ходного модуля в переменную Х$ и последующий вывод ее со- держимого на экран: 10 OPEN ”B:PROG.BAS” FOR INPUT AS 3 20 LINE INPUT #3, X$:PRINT X$ 30 IF EOF (3) THEN END ELSE 20 RUN 1 REM Исходный модуль БЕИСИК-программы, 2 REM, который считывается в программу 3 REM по оператору LINE INPUT# Следует отметить, что перед использованием операторов INPUT# и LINE INPUT# следует переоткрыть файл, к которому они обращаются, чтобы начать чтение его записей с самого на- чала. В противном случае возникает особая ситуация 'конец файла'. В конструкциях, использующих операторы чтения последова- тельных файлов, как правило, применяется и системная функ- ция EOF (<нф>), которая идентифицирует условие 'конец файла' с логическим номером <нф>. Данная функция имеет смысл толь- ко для открытых последовательных файлов и принимает значе- ние '-1' при достижении конца файла и значение '0' в противном случае. В момент достижения конца файла функция EOF (<нф>)= =-Т, а считанная из файла запись является последней записью файла. Для файлов связи значение '-Г указывает , что буфер ввода-вывода от канала связи пуст. Функция EOF (0) информи- рует о конце файла на устройстве стандартного ввода, если оно было переназначено. Приведем пример на использование опе- раторов чтения INPUT#, LINE INPUT# и системной функции EOF: 1 ON ERROR GOTO 14:KILL ”B:G947” 2 А$=”Контрольный файл”:М=46:К1ЕЕ ”B:A942” 3 OPEN ”B:A942” FOR OUTPUT AS #1 4 OPEN ”B:G947” FOR OUTPUT AS #2 5 PRINT #2, А$+”номер 1”:FOR K=1 TO 3 6 WRITE #1, K*M+41:NEXT:CLOSE #1, #2 7 OPEN ”B:A942”FOR APPEND AS 3 8 FOR K=1 TO 21PRINT #3, (M-5)*K+K~2:NEXT 9 CLOSE.OPEN ”B:A942” FOR INPUT AS 2 10 OPEN ”B:G947” FOR INPUT AS 1 11 LINE INPUT #1, BS:PRINT B$:CLOSE #1 12 WHILE 46:P=P+1:INPUT #2, R:PRINT ”R”; P; R; 13 IF EOF (2)=-1 THEN END ELSE WEND 14 IF ERR=8 THEN RESUME NEXT ELSE RESUME NEXT RUN Контрольный пример 1 R1= 87 R2= 133 R3= 179 R4= 42 R5= 86
В приведенном примере предварительно удаляются с дискового тома на УВВ 'В' файлы А942 и G947 Если по крайней мере хоть один из указанных файлов на данном томе отсутствует, то обра- ботчик особых ситуаций (строка 14) передает управление сле- дующему за KILL оператору. Затем открываются на запись но- вые файлы с именами А942 и G947 с логическими номерами 1 и 2 соответственно. В файл G947 по оператору PRINT# помеща- ется текстовая строка, а в файл А942 по оператору WRITE# по- мещаются три записи с числовыми значениями. Оба указанных файла после этого закрываются оператором CLOSE. После этого файл А942 открывается для дозаписи и в него дополнительно помещаются еще две числовые записи, после чего все открытые файлы программного фрагмента закрываются. Файлы А942 и G947 переоткрываются для чтения и по опера- тору LINE INPUT# из файла G947 считывается запись с присвое- нием ее значения символьной переменной BS, которая выво- дится затем на экран, а сам файл закрывается. После этого опе- ратором INPUT# читаются записи файла А942, начиная с первой, и выводятся на экран с их нумерацией. Обработку ситуации 'конец файла' осуществляет системная функция EOF, которая при достижении конца файла А942 завершает программу по END с закрытием всех файлов, в противном случае продолжаются чтение и вывод на экран записей файла А942. В приведенном примере задействованы все операторы работы с последова- тельными файлами. При рассмотрении системы АДОС отмечали, что она не до- пускает использования пробелов в имени файла или его расши- рении, тогда как использование в качестве ограничителей кавы- чек (”) для параметра 'СФ' дисковых операторов в среде языка БЕЙСИК позволяет работать с файлами, имена которых содер- жат пробелы. Следующий простой пример иллюстрирует сказан- ное: 1 OPEN ”0”, 1, ”С:А V Z.4 2”:F0R К=1 ТО 5:PRINT #1, STR$(K~2) 2 NEXT:CLOSE:OPEN ”l”, 2, ”С:А V Z.4 2”:F0R К=1 ТО 5 3 INPUT #2, W$:PRINT ’’Запись номер”; К;” есть ”;W$:NEXT К RUN Запись номер 1 есть 1 Запись номер 2 есть 4 Запись номер 3 есть 9 Запись номер 4 есть 16 Запись номер 5 есть 25 Указанный момент следует учитывать при работе с каталогом дискового тома. С последовательными файлами могут исполь- зоваться дополнительно еще три системные функции LOF, LOC и INPUTS, две первые из которых можно использовать и с файлами произвольного доступа. Системная фукнция LOF (<нф>) по логическому номеру <нф> открытого файла определяет длину файла в байтах. Данная фун-
кция применима только к дисковым и коммуникационным фай- лам. Для коммуникационных файлов значением функции LOF бу- дет число байтов обмена в буфере ввода-вывода канала связи. С помощью данной функции можно отслеживать размер файла на диске и наличие свободного места в буфере ввода-вывода коммуникационного файла. Значение системной функции LOC (<нф>) зависит от типа и режима открытия файла с логическим номером <нф>: Значение функции LOC Анализируемый файл Число 128-байтных блоков в фай- ле, обработанных после его откры- тия по OPEN Количество информации в байтах в буфере ввода-вывода файла Номер последней считанной/запи- санной записи Последовательный Дисковый файл Коммуникационный файл Дисковый файл произвольного доступа Функция LOC имеет две существенные особенности: - значение LOC для последовательного выходного файла всегда больше нуля, так как первая запись такого файла читается в его буфер ввода сразу при открытии файла; - значение LOC для коммуникационных файлов всегда мень- ше 255, даже если в буфере ввода-вывода находится боль- ше информации. Это связано с тем, что для операции ввода не может быть введено одновременно более 255 байтов. При использовании системной функции LOC с последователь- ным файлом пользователь получает число 128-байтных блоков информации в файле, а точнее число P=[(L*N)/128] + К К=(0, 1,2), где L - длина логической записи, N - число записей в файле, К=К (L, N) и [А] - целая часть числа А, не превышающая самого А. При чтении из последовательного файла величина Р на едини- цу больше. Следующая программа позволяет получить значения величины Р в режимах создания и чтения последовательного файла в зависимости от параметров N и L: 1 INPUT ’’Ввести N и L”; N, L :C$=L$ 2 A$=”A”:FOR К=1 ТО L:C$=CS+A$:NEXT 3 OPEN ”B:TRU.67” FOR OUTPUT AS 1 4 FOR K=1 TO N:PRINT #1, C$:NEXT 5 PRINT ”LOC (1)=”;LOC(1);:CLOSE 6 OPEN ”B:tru.67” FOR INPUT AS 1 7 INPUT #1, X$:IF EOF (1) <>-1 THEN 7 ELSE 8 PRINT LOC (1):CLOSE:KILL ”B:TRU.67”:GOTO 1
функция LOC может использоваться для отслеживания по рядка работы с записями файла любого типа и контроля ин- формации в буфере ввода-вывода файла связи. Наконец, системная функция INPUTS, имеющая формат INPUTS (К [,[#] <нф>]), может использоваться только с последовательными и фай лами связи и служит для чтения очередных <К> символов из открытого файла с логическим номером <нф>. В качестве параметров 'К' и 'нф' могут использоваться АВ с допустимы- ми целочисленными значениями (<К> < 256; <нф> < М+1 где значение М берется из параметра ' /F:M' команды BAS. загрузки БЕЙСИКа или М=2 по умолчанию). Если отсутству- ет параметр 'нф', то данные читаются с клавиатуры ПЭВМ, при этом никакой поясняющей информации на экран не вы- водится, а программа просто ожидает ввода с клавиатуры указанного функцией числа <К> символов. Не отображается на экран и вводимая по запросу функции INPUTS информация. Дан- ную функцию весьма удобно использовать для организации па- рольной защиты, и она является предпочтительным средством чтения информации из файла связи. Следует отметить, что использование функции INPUTS не поз- воляет обрабатывать ситуацию 'Конец файла' посредством сис- темной функции EOF и обработку ее следует предусмотреть по- средством оператора ON ERROR. Например: 1 OPEN ”B:L5” FOR OUTPUT AS #1 2 FOR K=80 TO 83:A$=CHR$(K)+’*AAAA”:PRINT #1, A$:NEXT 3 CLOSE #1:OPEN ”B:L5” FOR INPUT AS #1 4 IF EOF (1) THEN END ELSE:X$=INPUTS (5, #1):PRINT XS; 5 IF EOF (1) THEN END ELSE GOTO 4 RUN PAAAA QAAAA RAAAA SAAAA, Конец файла в 4 В данном фрагменте возникает особая ситуация 'Конец файла несмотря на ее обработку посредством функции EOF Органи- зация этого фрагмента с использованием оператора ON ERROR обработки особых и аварийных ситуаций позволяет исправить указанный недостаток: 1 ON ERROR GOTO 5.OPEN ”В:15” FOR OUTPUT AS #1 2 FOR K=80 TO 83:A$=CHR$(K)+”AAAA”:PRINT #1, A$:NEXT 3 CLOSE #1’OPEN ”B:L5” FOR INPUT AS#1 4 X$=INPUT$ (5, #1):PRINT XS;:GOTO 4 5 IF ERR=62 THEN END ELSE RESUME RUN PAAAA GAAAA RAAAA SAAAA
Информация, вводимая в программу по функции INPUTS, не обязана заканчиваться знаком 'возврат каретки' (нажатие кла- виши 'ПУСК') и может содержать этот символ внутри себя. Фун- кция INPUTS позволяет читать с клавиатуры любые символы, ис- ключая символ клавиш 'CTR' + 'S/В', и является в этом смысле более удобной, чем операторы чтения INPUT и LINE INPUT. Ис- пользование данной функции предпочтительно в этой же связи и для файлов связи по сравнению с применением операторов INPUT# и LINE INPUT# чтения файла. Из дисковых файлов функ- ция INPUTS позволяет считывать любые символы, включая сим- вол CHR$(26) - конец файла. В связи с этим, функцию INPUTS можно эффективно применять при использовании файлов про- извольного доступа в качестве последовательных файлов. Об этом речь будет идти в следующем разделе. Приведем пример использования системных функций EOF, LOF и INPUTS: О A$=”424767”:PRINT ’’Ввести naponb?”:YS=INPUT$ (6) 1 IF Y$=A$ THEN 4 ELSE PRINT ’’Пароль неверен” 2 Z=Z+1:IF Z < 3 THEN О ELSE 3 PRINT ’’Работа закончена из-за неверного пароля” 4 OPEN ”В:А88” FOR OUTPUT AS 1 5 FOR K=1 TO 10.WRITE #1, K~2:NEXT 6 PRINT ’’Размер файла ABB=”;LOF (1);” байтов” 7 CLOSE:OPEN ”B:A88” FOR INPUT AS 3 8 INPUT #3, X:PRINT X; 9 IF EOF (3) THEN END ELSE GOTO 8 RUN Ввести пароль? Пароль неверен Ввести пароль? Размер файла А88 =38 байтов 1 4 9 16 25 36 49 64 81 100 В примере функционирование фрагмента посредством систем- ной функции INPUTS запрашивает у пользователя пароль. Три попытки неправильного ввода пароля прекращают работу с вы- водом об этом сообщения на экран. В противном случае откры- вается новый файл А88 с логическим номером 1, и в него поме- щается 10 записей. После этого на экран дисплея посредством функции LOF выводится информация о длине созданного файла А88. Затем файл А88 закрывается с последующим переоткрыти- ем для чтения. Все считываемые из файла записи выводятся на экран дисплея пока не будет достигнут конец файла, обрабаты- ваемый функцией EOF. Учитывая последовательный доступ, работа с файлами тако- го типа относительно медленная. Следующая программа позво- ляет набрать статистику по оценке времени создания и чтения последовательных файлов в зависимости от количества запи- сей фиксированной длины в 128 байтов:
0 INPUT ’’Задать число записей”; М 1 A$=”A":C$=T$:FOR К=1 ТО 128:C$=C$+A$:NEXT 2 PRINT TIMES+” ”;:OPEN ”B:L” FOR OUTPUT AS 1 3 FOR K=1 TO M:PRINT #1, C$:NEXT:PRINT TIMES 4 CLOSE.PRINT TIME$;:OPEN ”B:L” FOR INf?UT AS 2 5 INPUT #2, X$:IF EOF (2) <>-1 THEN 5 ELSE 6 PRINT ” ”+TIME$; LOF (2):CLOSE:KILL ”B:L”:GOTO 0 Результатом работы данной программы является время соз- дания и чтения последовательного файла с заданным числом 128-байтных записей, а также его объем в байтах. Несложный анализ полученной на основе работы программы статистики позволяет вывести довольно точную эмпирическую формулу для времени Т (в секундах) создания файла, содержащего К 128-байтных записей: Т(К)=[К/10]+ [К/100] + 4 Для чтения созданного последовательного файла из К 128-бай- тных записей время Т на 1-4 с меньше. Например, для чтения в программу 500-й записи требуется около 59 (по формуле) и 57 (на самом деле) секунд. Таким образом, последовательный файл при всей простоте его обслуживания занимает на диско- вом томе достаточно много места, а работа с ним требует су- щественных временных затрат. С целью уменьшения суммарных временных затрат по ис- пользованию последовательных файлов в режиме чтения мож- но предложить следующий подход, базирующийся на понятии так называемых 'интеллектуальных' файлов [53]. При работе с таким файлом в течение выбранных периодов набирается статистика по частоте использования его записей. В зависи- мости от этой частоты происходит упорядочение файла: запись с большей частотой использования располагается ближе к на- чалу файла. Полученные в этом направлении оценки говорят о возможности в целом ряде случаев значительного снижения суммарного времени работы с последовательными файлами данных. Резюмируя описание последовательных файлов данных, представим общую схему работы с файлами такого типа: (1) для работы с последовательным файлом в любом режиме (создание, дозапись или чтение) необходимо его открыть посредством оператора OPEN; (2) запись или дозапись в последовательный файл новых ло- гических записей осуществляется операторами PRINT#, PRINT# USING или WRITE#; в общем случае допускается чередование этих операторов при работе с одним и тем же файлом;
(3) чтение записей из последовательного файла осуществля- ется операторами INPUT# и LINE INPUT#; посредством системной функции INPUTS из файла можно читать задан- ное число символов в количестве не большем 255; (4) для чтения записей из последовательного файла, создан- ного или обновленного в этой же программе, следует его предварительно закрыть по оператору CLOSE и затем переоткрыть оператором OPEN для чтения зап-исей с на- чала файла; (5) с помощью системных фукнций EOF, LOF и LOC имеется возможность соответственно обработки ситуации 'конец файла' и получения информации о длине файла и послед- ней обрабатываемой в нем записи. В заключение обсуждения последовательных файлов приве- дем комплексный пример, иллюстрирующий средства языка по работе с файлами такого типа: 1 REM Комплексный пример на последовательные файлы 2 FOR К=1 ТО 255:C$=C$+”A”:NEXT:ON ERROR GOTO 20 3 KILL ”B:SVEGAL”:PRINT ’’Задать naponb?”:X$=INPUT$ (6) 4 KILL ”B:A”:KILL ”B:S”:KILL ”B:STRUCTUR. AGN” 5 OPEN ”B:PAROL” FOR INPUT AS #1:Y$=INPUT$ (5, #1):CLOSE 6 IF VAL (X$)=VAL (Y$) GOTO 7 ELSE T=T+1:IF T<3 THEN 3 ELSE 21 7 INPUT ’’Число записей”; N:OPEN ”B:SVEGAL” FOR OUTPUT AS 1 8 FOR K=1 TO N:PRINT #1, C$:NEXT:PRINT ’’Длина файла=”, L0F(1); 9 PRINT ’’Число 128-байтных блоков^”; LOC(1):CLOSE #1 10 OPEN ’’B.SVEGAL” FOR APPEND AS 2:FOR K=1 TO 100 11 WRITE #2, STRING$(255, 86):NEXT:PRINT ”LOC(2)="; LOC (2); 12 FOR K=1 TO 10.PRINT #2, USING ”####.##”; 19.42*K~2 NEXT 13 CLOSE 2:OPEN ”B:SVEGAL” FOR INPUT AS #2 44 OPEN ”B:A” FOR OUTPUT AS 3:FOR K=1 TO INT (L0F(2)/ (2*255)) 15 INPUT #2, B$:WRITE #3, B$:NEXT:PRINT ”LEN A=”;LOF(3); 16 CLOSE #3:OPEN ”B:S” FOR OUTPUT AS 3: WHILE 464121! P=P+1 17 LINE INPUT #2, Z$:IF P<INT (LOF(2)/(2*255)) THEN 19 ELSE 18 IF EOF (2) THEN PRINT ”LEN S=”; LOF(3):END ELSE WRITE #3, Z$ 19 WEND.REM Завершение создания новых файлов 20 RESUME NEXT:REM Обработка особых ситуаций 21 PRINT ’’Неверное задание пароля - Конец”:ЕИО RUN Задать пароль? Число записей? 20
Длина файла= 5140 Число 128-байтных блоков= 40 LOC(2)= 202 LEN А= 8169 LEN S= 15740 Читателю предлагается в качестве упражнения описать алго- ритм, реализованный приведенным программным фрагмен- том. Как уже отмечалось, в БЕЙСИК-системе стандартные фай- лы ввода с клавиатуры и вывода на экран и принтер открыва- ются и закрываются автоматически самим интерпретатором и в этом смысле образуют для пользователя стандартный ввод-вывод БЕЙСИКа. Ниже будут рассмотрены вопросы от- крытия этих файлов пользователем при организации ввода-вы- вода в БЕЙСИК-программах. Наряду с перечисленными выше недостатками, последова- тельный доступ имеет и свои преимущества. Так, наряду с бо- лее простыми средствами организации последовательных файлов данных (ПФД), операторы последовательного доступа удобно использовать в тех случаях, когда требуется осуще- ствлять вывод одной и той же информации на несколько вы- ходных УВВ. Следующий фрагмент иллюстрирует вывод ин- формации на принтер, экран и в ПФД в зависимости от значе- ния входных данных: 100 OPEN ”0”, 1, ”SCRN:”;OPEN ”0”, 2, ”LPT1:”:OPEN ”0”, 3, ”C:R” 110 INPUT ’’Вводите числа <1, 2, 3>. Конец -”0”;Р 120 IF Р=0 THEN END ELSE PRINT #P, P; ”Вывод”:СОТО 110 Для вывода на принтер можно использовать и такой вид оператора открытия, как OPEN ”LPT1:” AS #<нф> В этом случае открывается файл данных произвольного досту- па, позволяющий осуществлять повторную печать в только что выведенной строке, если длина строки определена как 255. Для протяжки бумаги (стандартный режим печати) сле- дует изменить длину строки вывода оператором WIDTN. Сле- дующий фрагмент иллюстрирует вывод в одну строку тремя операторами PRINT# с последующей отменой такого режима печати: 100 A$=”TALLINN 200038; ”:В$=” Partisan! 13-75;” 110 C$=”Aladyev V.”:OPEN ”LPT1:” AS #2:WIDTH #2, 255 120 PRINT #2, A$:PRINT #2, SPACES (16)+B$ 130 PRINT #2, SPACE$(33)+C$:WIDTH #2,128 140 PRINT #2, SPACE$(O):PRINT #2, ’’Конец фрагмента” RUN TALLINN 200038; Partisan! 13-75; Aladyev V. Конец фрагмента
Для ввода с клавиатуры также можно использовать опера- торы чтения последовательного доступа, для чего файл клавиа- туры открывается как OPEN ”KYBD:” FOR INPUT AS #<нф> Например: 100 OPEN ”KYBD:” FOR INPUT AS #2 110 INPUT #2,GALINA:PRINT GALINA 120 IF GALINA>0 THEN 110 ELSE END В данном фрагменте положительные вводимые числа выводят- ся на экран, а на первом отрицательном числе работа заканчи- вается. Однако при таком подходе имеется ряд неудобств: при вводе данных с клавиатуры отсутствует возможность вывода поясняющей информации и сами вводимые данные не отобража- ются на экране дисплея. Но такой ввод ’’вслепую” может ока- заться полезным при работе с различного рода закрытыми сис- темами. Переходим теперь к рассмотрению файлов произволь- ного доступа на дисковых томах. Организация работы с файлами произвольного доступа тре- бует несколько более сложной технологии, но позволяет адре- соваться непосредственно к требуемой записи файла по ее но- меру, что весьма существенно снижает время выборки данных из файла. Наряду с этим, занимаемое место на дисковом томе под файл произвольного доступа в общем случае меньше. Для работы с файлами данных произвольного доступа используются следующие операторы языка БЕЙСИК (табл. 38): Таблица 38 Оператор Назначение оператора OPEN • CLOSE • FIELD Открытие файлов данных любого типа Закрытие файлов данных любого типа Создание буфера ввода-вывода для файла данных произ- вольного доступа (ФДПД) GET” PUT- LSET RSET Чтение из ФДПД в буфер ввода-вывода записи Вывод записи из буфера ввода-вывода в ФДПД Помещение данных в буфер ввода-вывода ФДПД с вырав- ниванием соответственно слева/справа Все перечисленные операторы можно использовать в команд- ной строке, а оператры OPEN и CLOSE, отмеченные звездочкой (*), являются общими для файлов данных любого типа и подроб- но рассмотрены в начале настоящего раздела. Операторы LSET и RSET служат для помещения данных с выравниванием соот- ветственно слева и справа в буфер ввода-вывода файла произ- вольного доступа и описаны в разд. 5.7.2. Числовые функции
SVD, CVS и CVI символьных аргументов служат для преобразо- вания символьного значения соответственно в число двойной, обычной точности и целое число. Они подробно описаны в разд. 5.7.2. Символьные функции MKD$, MKS$ и МК1$ служат для пре- образования соответственно числа двойной, обычной точности и целого числа в символьное значение и подробно описаны в разделе 5.7.2. Системные функции LOC и LOF позволяют определять соот- ветственно номер последней обрабатываемой записи и длину файла данных. Описание этих функций дано в настоящем разде- ле при рассмотрении последовательных файлов данных. Пере- ходим теперь к описанию остальных трех операторов FIELD, PUT# и GET#, обеспечивающих работу с файлами данных произ- вольного доступа. Оператор FIELD имеет формат FIELD [#] <нф>, <Р1> AS X1 $, ... , <Pk> AS Xk$ и служит для выделения памяти под переменные логической за- писи в буфере ввода-вывода (БВ/В) файла данных произвольно- го доступа (ФДПД), определенного номером <нф>. Параметр 'Рк' определяет размер памяти в БВ/В для пере- менной 'Хк$' (к=1-М). В качестве парамеров 'Рк' и 'нф' могут быть числовые переменные или АВ, целочисленные значения которых используются оператором FIELD, при этом суммарная величина значений параметров <Рк> не должна превышать зна- чения длины логической записи, определенной в операторе OPEN для данного ФДПД. Оператор FIELD связывает переменные, составляющие логическую запись, с БВ/В для этого файла. Пос- ле закрытия ФДПД закрываются и связанные с ним все БВ/В, поэтому каждое новое открытие ФДПД следует связывать с но- выми БВ/В, задавая соответствующие операторы FIELD. Следует отметить, что символьные переменные 'ХК$' опера- тора FIELD нельзя использовать в операторах ввода.или присва- ивать им значения обычным оператором присваивания. В про- тивном случае будет нарушена логическая связь между этими переменными и буфером ФДПД. Для формирования логической записи можно указывать нес- колько операторов FIELD, которые в операции обмена с ФДПД участвуют как единое целое. При этом логическая запись фор- мируется путем наложения (в порядке указания операторов FIELD) содержимого БВ/В, определяемых всеми оператора- ми FIELD для данного ФДПД. Например, операторы FIELD из при- водимого примера: Ю KILL ”B:RRR”:OPEN ”b:rrr" AS #2 LEN=58:T=2:D=10 20 X1 S=STRING$(10, ” 1”):Y1 $=STRING$(30, ”2”) 30 Z1$=STRING$(18, ”3”) : M1$=STRING$(10, ”4”) 40 P1$=STRING$ (20, ”5”): C1$=STRING$ (18, ”6”) 50 D1S=STRING$ (15, ”7”) : GOSUB 200.LSET X$=X1$ 100 LSET Y$=Y1$:LSET Z$=Z1$:LSET M$=M1$
110 LSET P$=P1$:LSET C$=C1$:LSET D$=D1$ 120 PUT #2,1:PRINT LOF,(2):CLOSE:CLEAR 130 OPEN ”B:RRR” AS #2:GOSUB 200:GET #2,1 140 PRINT X$, Y$:PRINT Z$, M$ 145 PRINT P$, C$:PRINT D$:END 200 FIELD #T, D AS X$,3*D AS Y$,18 AS Z$ 210 FIELD #T,D AS M$,2*D AS P$,18 AS C$ 220 FIELD #T,15 AS D$:RETURN RUN 58 7777777777 777775555555555555556666666666 666666663333333333 7777777777 77777555555555555555 666666666666666666 777777777777777 определяют три БВ/В для логической записи длиной 58 байтов ФДПД с номером 2. Запись формируется следующим образом: на значение поля X$+Y$+Z$ буфера 1 (строка 200) накладыва- ется значение поля М$+Р$+С$ буфера 2 (строка 210) и на ре- зультат такого наложения накладывается значение поля D$ буфера 3 (строка 220). При этом все производимые наложения производятся со значениями буферов, выровненными по их ле- вой границе. Результат такого наложения (своего рода умно- жения) и составляет содержимое логической записи, поме- щаемой в ФДПД RRR (оператор PUT#). При считывании логической записи из ФДПД (оператор GET#) вышеописанная процедура использования БВ/В 1*3 повторя- ется в обратном порядке: полям каждого БВ/В присваиваются последовательно значения логической записи, начиная с ее начала. Следующий пример иллюстрирует процесс формирова- ния логических записей из нескольких БВ/В и чтение ФДПД как последовательного файла данных: 10 А$=”11111”:В$="2222222222”:С$=”333” 20 D$=”44444444”:OPEN ”B:LLL” AS 1 LEN=15 30 GOSUB 120:GOSUB 160.PUT #1,1 .CLOSE 1 40 OPEN "B:LLL” AS #1 LEN=15:GOSUB 120 50 GET #1,1:PRINT A1$,B1$:CLOSE #1 60 OPEN ”B:t” AS 2 LEN=11.GOSUB 130 70 GOSUB 160:PUT #2,1:CLOSE:OPEN ”R”,2,”B:T” 80 GET 2,1:PRINT C1$;D1$:OPEN ”R”, 3, ”B:D”, 15 90 GOSUB 140:GOSUB 160:PUT #3,1:CLOSE 3 100 OPEN ”B:D” FOR INPUT AS 1JNPUT #1,Z$ 110 PRINT Z$:IF EOF (1) THEN END ELSE END 120 FIELD #1,5 AS A1$,10 AS B1$:RETURN 130 FIELD #2,3 AS C1$,8 AS D1$:RETURN 140 FIELD #3,5 AS A1$,10 AS B1$ 150 FIELD #3,3 AS C1$,8 AS D1$:RETURN 160 LSET A1$=A$:LSET B1$=B$:LSET C1$=C$ 170 LSET D1$=D$:RETURN RUN
111112222222222 33344444444 333444444442222 Следует отметить, что обмен с ФДПД осуществляется только символьными данными, поэтому числовые данные перед поме- щением их в БВ/В следует преобразовать в символьные по- средством символьных функций MKIS, MKSS и MKD$, описанных в разд. 5.7.2, а затем поместить в БВ/В с помощью операторов LSET или RSET. Оператор FIELD, формирующий БВ/В, только оп- ределяет переменные для обмена по операторам PUT# и GET#, но сам не перемещает никаких данных. Например, по фраг- менту: 1 OPEN ”В:ККК” AS #2 LEN=4:FIELD #2,4 AS Y$ 2 FOR K=1 TO 200.LSET Y$=MKSS (K): PUT #2,К 3 NEXT:PRINT LOF (2);:CLOSE:OPEN ”R”, #1, ”B:KKK”,4 4 FIELD #1,4 AS XS.GET #1,100:PRINT CVS (X$) RUN 800 100 открывается ФДПД с именем ККК и логическим номером 2. Раз- мер логичёской записи файла полагается равным 4 байта. Оператором FIELD открытому файлу ККК приписывается БВ/в для переменной Y$ и в цикле значение <К> переменной цикла функцией MKSS преобразуется в строку символов и с вырав- ниванием помещается в БВ/В. После этого оператором PUT# очередная запись из БВ/В помещается в файл ККК. Окончание цикла завершает формирование ФДПД, на экран выводится длина файла и он закрывается. Затем файл ККК открывается вновь и из него считывается запись с номером 100, числовое значение которой, полученное посредством функции CVS, вы- водится на экран. Следует отметить, что вновь открытому файлу ККК припи- сывается новый БВ/В и при его открытии указывается длина логической записи. Указание длины логической записи ре- комендуется использовать и для существующих ФДПД, т. к. в противном случае оказывается невозможным получить пра- вильные результаты при чтении файла. В отличие от последовательных файлов данных (ПФД) ФДПД не обязательно закрывать после их создания. Открытый один раз в программе ФДПД, можно использовать затем многократ- но для чтения и записи данных. Например: 1 OPEN ”В:Т” AS 1 LEN=4:FIELD 1,4 AS Х$ 2 FOR К=1 ТО 151LSET XS=MKS$ (3*К) : PUT 1 3 NEXT.GET 1,5:PRINT ”N5=”;CVS (x$): END RUN N5= 15 В данном фрагменте открывается для создания ФДПД Т и затем из него осуществляется чтение записи с номером 5. При этом
файл повторно не перестирывается. Подобное обстоятельство связано с тем, что ПФД необходимо при каждом новом обраще- нии к его началу перестирывать, чтобы установить указатель на начало файла, тогда как в случае ФДПД обращаться можно непосредственно к любой его записи. При использовании нескольких операторов FIELD длина за- писи в операторе OPEN для ФДПД должна быть не меньше раз- мера максимального из БВ/В, определяемых этими FIELD Оператор PUT# имеет формат PUT [#] <нф> [,К] и служит для помещения логической записи из БВ/В, определен- ных соответствующими операторами FIELD, в ФДПД с номером <нф>. Параметр 'К' определяет номер логической записи, зна- чение которого должно находиться в диапазоне от 1 до 16777215. Это весьма широкий диапазон и при нынешних диско- вых УВВ его в полной мере использовать нельзя. При задании максимального допустимого номера (16777215) записи для дискеты возникает ситуация 'Диск полон'. При отсутствии па- раметра 'К' полагается номер очередной логической записи Например: 1 OPEN ”В:ККК” AS #2 LEN=4:FIELD #2,4 AS Y$ 2 FOR K=1 TO 200.LSET Y$=MKS$ (K) . PUT #2 3 NEXT.PRINT LOF (2);:CLOSE:OPEN ”R”, #1, ”B:KKK”, 4 4 FIELD #1,4 AS X$:GET #1,200:PRINT CVS (X$) RUN 800 200 В данном фрагменте ФДПД ККК формируется в количестве 200 записей с использованием оператора PUT# без номера записи. На экран с целью контроля выводится значение последней записи файла. В следующем примере логические записи ФДПД Т содержат числовую и символьную информацию. Очередная запись по- мещается в файл и сразу же для контроля считывается и вы- водится на экран без переоткрытия файла: 1 OPEN ”R”,1, ”В:Т”, 6IFIELD 1,2 AS А$,4 AS Х$ 2 FOR К=1 ТО 5:LSET AS=CHR$ (К+80)+”=” 3 LSET X$=MKS$ (К ~ 2): PUT #1,K:GET # 1 ,К 4 PRINT A$;CVS (X$),:NEXT:END RUN Q=1 R=4 S=9 T=16 U=25 Так как в системе ввода-вывода используются 512-байто вые буферы, то оператор PUT# не обязательно непосредствен но заносит логическую запись в ФДПД, а может помещать ее
в системный буфер ввода-вывода. По заполнении такого бу- фера его содержимое заносится в ФДПД. Оператор GET# имеет формат GET [#] <нф> [,К] и служит для чтения в БВ/В, определенные соответствующими операторами FIELD, значений логической записи с номером <К> из ФДПД с номером <нф>. Оператор чтения GET# является об- ратным для оператора записи PUT#. Смысл и значение парамет- ра К' с очевидными оговорками соответствуют аналогичному параметру оператора PUT#. В общем случае, подобно оператору PUT#, оператор GET# не осуществляет физического чтения логи- ческой записи из ФДПД. При задании максимального (16777215) или несуществующего номера логической записи чтения из ФДПД не происходит и не возникает особой ситуации. Рассмотрев все операторы и функции языка БЕЙСИК, предна- значенные для обеспечения работы с ФДПД, приведем основные этапы технологии использования файлов данных такого типа. (1 1) для создания ФДПД необходимо его открыть оператором OPEN как файл произвольного доступа с указанием дли- ны логической записи; (1.2) посредством операторов FIELD распределить память в БВ/В ФДПД для значений переменных, составляющих его логическую запись; (1.3) числовые значения логической записи преобразовать в символьные строки посредством символьных функций MKIS, MKS$ и MKDS; (1 4) операторами LSET и/или RSET поместить символьные значения логической записи в соответствующие поля БВ/В, определенные операторами FIELD для данного ФДПД (эта операция обязательна); (1 5) вывести значение логической записи из БВ/В в ФДПД на дисковом томе посредством оператора PUT#; (1 6) оператором CLOSE или END закрыть созданный ФДПД, (2. 7) для доступа к существующему ФДПД его необходимо открыть оператором OPEN с указанием длины записи, если до этого он не был открыт; (2. 8) посредством операторов FIELD распределить память в БВ/В ФДПД для значений переменных, составляющих его логическую запись; (2- 9) считать посредством оператора GET# из заданного ФДПД требуемую логическую запись в БВ/В, созданные опера- торами FIELD для данного файла; (2. 10) для преобразования символьных значений считанной из ФДПД в БВ/В логической записи использовать число- вые функции CVI, CVS и CVD;
(2. 11) после завершения работы с ФДПД его следует закрыть оператором CLOSE или END. С ФДПД можно использовать системные функции LOC и LOF, которые описаны выше в настоящем разделе. ФДПД можно чи- тать, при некоторых допущениях, как последовательный файл, но не наоборот. Об этом будет идти речь несколько ниже. В каче- стве примеров рассмотрим фрагменты, позволяющие провести сравнение последовательных файлов данных и ФДПД по таким параметрам как время создания, доступа к данным и требуемая память на дисковых томах, а также иллюстрирующих некоторые особенности использования ФДПД. Следующий фрагмент на основе создания ФДПД с именем DATA, содержащим символьные записи длиной 128 байтов, по- зволяет набрать статистику по времени создания такого файла на дисковом томе и его размера в зависимости от числа состав- ляющих его логических записей: 1 AS=”A”:FOR К=1 ТО 128:CS=C$+A$:NEXT 2 KILL ”B:DATA”:INPUT ’’Число записей в файле”; N 3 OPEN ”R”, 1, ”B:DATA”:FIELD 1, 128 AS Z$:LSET Z$=C$ 4 PRINT TIME$;:FOR K=1 TO N:PUT #1,K:NEXT:PRINT ” ’ 5 PRINT TIMES; ” Время ”; LOF (1); ” Длина’’.-CLOSE #1 6 INPUT ’’Продолжить (1-Д/2-Н)”;Т:ОИ T GOTO 2:END Полученная с помощью приведенного фрагмента статистика позволяет вывести эмпирическую формулу для оценки времени создания ФДПД с К символьными записями длиной в 128 байтов Т (К) = [К/20] + [К/200] + [К/400], где [А] - целочисленное значение величины А. С помощью мо- дификации приведенного фрагмента (путем удаления опера- тора KILL в строке 2) можно оценить время создания ФДПД при условии размещения вновь создаваемого файла на месте предыдущего. Полученная таким образом формула Т (К) = [К/10] + [К/100] - 10 говорит о том, что во втором случае время создания ФДПД практически в два раза больше. Из полученных оценок, в част- ности, следует, что при создании ФДПД целесообразнее уда- лить старый (если он есть) файл, а не писать новый на месте старого. Следующий фрагмент позволяет оценить время доступа к отдельной записи ФДПД с именем DATA: 1 OPEN ”B:DATA” AS #2FIELD #2,128 AS YS 2 INPUT ’’Номер записи”, K.PRINT TIMES;: 3 GET #2,N:PRINT , TIMES, ”K=”; К
4 INPUT ’’Продолжить (1-Д/2-Н)”, T:ON T GOTO 2:END RUN Номер записи 2400 15:10:58 15:11:00 K= 2400 Продолжить (1-Д/2-Н) 2 Результаты работы с данным фрагментом показывают, что вре- мя доступа к К-й записи ФДПД находится в пределах двух се- кунд с учетом времени на открытие и закрытие файла. В случае последовательного файла это время существенно больше и рас- тет с ростом номера считываемой логической записи, так как для чтения К-й записи необходимо прочесть все предыдущие (К-1) запись. В этом плане время создания последовательного файла из К логических записей и время считывания К-й записи этого же файла практически совпадают. Следующий базовый фрагмент позволяет оценить время со- здания и размер числовых последовательного файла и ФДПД в зависимости от количества записей и их типа: 1 X=46.4121:INPUT ’’Число записей”;Р 2 PRINT TIME$;:OPEN ”В:Т1” FOR OUTPUT AS *1 3 FOR K=1 TO P:PRINT #1, X:NEXT:PRINT , TIMES,LOF (1) 4 PRINT TIMES,:OPEN "R", 2, ”B:T2”, 4:FIELD 2,4 AS X$ 5 LSET X$=MKS$ (X):FOR K=1 TO P:PUT #2, K:NEXT 6 PRINT, TIMES, LOF(2):CLOSE:KILL ”B:T1”:KILL ’’B:12” 7 INPUT ’’Повторить (1-Д/2-Н)”, Y:ON Y GOTO 1:END RUN Число записей? 1000 13:43:38 13:43:58 11000 13:43:58 13:44:09 4000 Повторить (1-Д/2-Н) 2 В приведенном фрагменте на основе задаваемого числа (К) чис- ловых записей создается последовательный файл Т1 и на экран выводятся затраченное на это время (в секундах) и размер фай- ла (в байтах). Затем на основе той же исходной информации создается ФДПД Т2 и на экран выводятся аналогичные характе- ристики. После этого файлы Т1 и Т2 удаляются с дискового то- ма и пользователь получает возможность повторить работу по сбору статистики или завершить ее. Полученная с помощью данного фрагмента статистика позво- ляет представить весьма точные эмпирические формулы для оценки времени создания Т (в секундах) и размера L (в байтах) ФДПД и соответствующего ему последовательного файла в за- висимости от числа (К) логических записей: ФДПД Т1(К) = [К/100] + 1 L1(K) = 4*K Т2(К) /Т, (К)=2 Последовательный файл Т2(К) = [К750] - 2 L2(K)= 11 *К L2(K) / L, (К) = 2.75
Из полученных формул легко убедиться, что числовой последо- вательный файл (запись состоит из одного числа обычной точ- ности) относительно аналогичного ему ФДПД требует для свое- го размещения на дисковом томе в 2.75 раза больше места и для своего создания требует в 2 раза больше времени. Очевидные модификации базового фрагмента позволяют набрать статистику для получения подобных оценок и для фай- лов, составленных из записей целых чисел и чисел двойной точности: ФДПД Т2 (К) = [К/100] + [К/1000] (%) L,(K) = 2*K Т2(К)/Т, (К) = 1.2 Последовательный файл ~Т2 (К) = Т, (К) + [К/800] L2(K) = 8»К L2(K)/L1(K) = 4 (#) Т, (К) = [К/100] + 2 L,(K) = 8*К Т2(К)/Т, (К) = 5 Т2(К) = [К/20] L2(K) = 12*К L2(K)/LX(K) = 1.5 Таким образом, для ФДПД, формируемых на основе целых, обычной и двойной точности чисел, время создания практически одинаково, а размеры относятся соответственно как 1:2:4. Для соответствующих им последовательных числовых файлов времена создания относятся как 1:2:5 и размеров как 8:11:12. В табл. 39 сведены сравнительные характеристики времени создания (Т2/Тх) и размеров (L2/Lx) числовых и символьных ФДПД относительно аналогичных им последовательных файлов данных. Следует отметить, что приведенные выше оценки времени создания файлов и доступа к ним до некоторой степени относи- тельны. Связано это с тем, что при сборе статистики для их по- лучения было использовано значение по умолчанию для разме- ра системного БВ/В (128 байтов), что, учитывая общую схему обмена информацией с дисковыми УВВ, привело к некоторому увеличению времени обмена с дисковыми файлами обоих ти- пов. Однако, сравнительные характеристики последовательных файлов и ФДПД при этом, практически, остаются без какого- Таблица 39 Тип записи файла Время т2/т1 Размер l2/Li Целое число 1.2 4 Обычной точности 2 2.75 Двойной точности 5 1.5 Символьная строка длиной 0.8 1.5 4 байта
рибо существенного изменения. Полученные сравнительные оценки позволяют сделать ряд практических выводов, а именно: (1) в целях экономии дискового пространства и времени до- ступа к данным следует использовать ФДПД; (2) с целью сокращения времени рекомендуется удалять файл любого типа перед созданием нового файла с тем же именем и на том же дисковом томе; (3) в случае символьных файлов с небольшой длиной записи можно пользоваться как последовательной, так и произ- вольной организацией при практически незначительных изменениях основных характеристик; (4) для данных смешанной структуры (числовые и символь- ные) рекомендуется принимать во внимание указанную таблицу сравнительных характеристик файлов. Особо можно отметить, что с ФДПД могут использоваться операторы и функции последовательного доступа. Но в этом случае они работают не непосредственно с самим файлом, а с его буфером. Следует также отметить, что при такой органи- зации оператор FIELD не обязателен и не требуется преобразо- вание числовых данных в символьные перед помещением их в ФДПД. Однако при этом следует помнить, что операторы PRINT# и WRITE# помещают информацию в буфер файла до его заполнения, а операторы INPUT#, LINE INPUT# и функция INPUTS читают информацию из буфера файла. Поэтому данные операции должен отслеживать сам пользователь. Непосредственный же обмен информацией между буфером файла и ФДПД осуществляют только операторы GET# и PUT# про- извольного доступа. В этом смысле использование операторов последовательного доступа при работе с ФДПД, в общем слу- чае, может оказаться достаточно эффективным. Следующий про- стой пример иллюстрирует сказанное: 10 OPEN ”C:VGS” AS #1:FOR К=1 TO 12 20 PRINT #1,K:NEXT:PUT #1,9:GET #1,9 30 FOR K=1 TO 12JNPUT #1,A:PRINT A;:NEXT RUN 1 2 3 4 5 6 7 8 9 10 11 12 В заключение настоящего раздела рассмотрим вопросы ис- пользования последовательного файла (ПФД) в качестве ФДПД и наоборот. В ПФД, созданном по оператору PRINT# с точкой с запятой (;) в качестве разделителя списка вывода, каждая ло- гическая запись имеет следующий формат: любое числовое зна- чение представлено в том виде как оно задано в программе и ограничено с обоих сторон пробелом, а символьное значение присутствует без пробелов. В ПФД, созданном по оператору BITE# с точкой с запятой (;) в качестве разделителя списка вЬ1вода, каждая логическая запись имеет следующий формат:
все числовые значения представлены в том виде как они указа- ны в программе, а символьные значения берутся в кавычки и все элементы записи разделяются запятой (,). Зная структуру логических записей ПФД, можно легко определить их длину и использовать ее при открытии ПФД в качестве ФДПД. При этом следует иметь в виду, что каждая запись ПФД, кроме последней, завершается символами CHR$(13) + CHR$(10). Следующий фрагмент иллюстрирует использование ПФД в качестве ФДПД и наоборот: 1 Х=46.41: Y%=46: Z#=4641.2167#:A$=”GPI” 2 OPEN FOR OUTPUT AS 1:FOR K=1 TO 3 3 PRINT #1,K;X;Y%;Z#;A$:NEXT K:T=3:D=4 4 OPEN ”B:F2” FOR OUTPUT AS 2:FOR K=1 TO 3 5 WRITE #2,K;X;Y%;Z#;A$:NEXT К 6 OPEN ”B:F3” AS 3 LEN=21:M=3:GOSUB 17 7 LSET B$=A$:LSET X$=MKS$(X):LSET Y$=MKI$(Y%) 8 LSET Z$=MKD$(Z#):FOR K=1 TO 3:LSET K$=MKS$(K) 9 PUT #3,K:NEXT K:PRINT LOF(1);LOF (2);LOF(3):CLOSE 10 OPEN ”B:F1” AS 3 LEN=30:M=12:GOSUB 17:FOR K=1 TO 5 11 GET #3,K:PRINT K$;X$;Y$;Z$,B$;:NEXT:CLOSE 3 12 PRINT.OPEN ”B:F2” AS 3 LEN=28:M=9:GOSUB 17:FOR K=1 TO 5 13 GET #3,K:PRINT K$;X$;Y$;Z$;B$;:NEXT:CLOSE #3:PRINT 14 OPEN ”B:F3” FOR INPUT AS 2:FOR K=1 TO 3:W$=INPUT$(21,#2) 15 ? CVS(MID$(W$,1,4));CVS(MID$(W$,5,4)),CVI (MID$ (W$,9,2)): 16 PRINT CVD (MID$ (W$, 11, 8)); MID$ (W$,19,3):NEXT K:END 17 FIELD T.D AS K$,D AS X$, D/2 AS Y$,8 AS Z$,M AS B$:RETURN RUN 90 84 63 1 46.41 46 4641.2167 GPI 2 46.41 46 4641.2167 GPI 3 46.41 46 4641.2167 GPI 1,46.41,46,4641.2167, ”GPI” 2,46.41,46,4641.2167, ”GPI” 3,46.41,46,4641.2167,”GPI” 1 46.41 46 4641.2167 GPI 2 46.41 46 4641.2167 GPI 3 46.41 46 4641.2167 GPI В приведенном фрагменте формируются два ПФД F1 и F2, со- держащие по три логические записи из значений различных ти- пов, которые помещаются в файл соответственно операторами PRINT# и WRITE#. Формат логических записей, находящихся в ПФД, легко получить, например, с помощью системной коман- ды COPY B:F1 {CON I PRN}. Для ПФД F1 логическая запись имеет формат <Т> 46.41 46 4641.2167 GPI, а для ПФД F2 - 46.41,46,4641.2167, ”GPI” (<Т>=1+3).
После создания ПФД F1 и F2 создается ФДПД с теми же тремя логическими записями и именем F3. После этого на экран вы- водятся размеры файлов F1, F2 и F3, и они закрываются. Затем поочередно открываются файлы F1 и F2 как ФДПД и считывае- мые из них оператором GET# логические записи выводятся на печать. Считывание записей прекращается после поступления в БВ/В символа (CHR$(26) - конец файла) или по заданному числу записей. При открытии ПФД в качестве ФДПД длину записи следует указывать на два больше, так как каждая запись в ПФД, кроме последней, заканчивается символами CHR$(13) + + CHR$(10), а последняя - символами CHR$(13) + CHR$(26) ФДПД F3 открывается для чтения. Системной функцией INPUTS считывается в символьную переменную очередная за- пись файла. С помощью функций CVI, CVS и CVD формируются значения для числовых полей переменной WS, содержащей символьный эквивалент логической записи ФДПД. Таким обра- зом, в общем случае имеется возможность использования ПФД в качестве ФДПД и наоборот. Однако забота о соответствующем преобразовании полученных записей лежит на самом пользо- вателе. Отметим, что при использовании ФДПД в качестве ПФД при- менение операторов чтения INPUT# и LINE INPUT# не дает осо- бого результата, так как эти операторы читают за одно выпол- нение 255 очередных символов файла (либо весь файл, если его длина не более 255 символов), что в общем случае не име- ет смысла. Пример позволяет проиллюстрировать сказанное. 10 OPEN ”B:F9” FOR INPUT AS 1 20 LINE INPUT #1,Y$:PRINT Y$.T=T+1 30 IF E0F(1) THEN PRINT ”T=”,T:END ELSE GOTO 20 RUN VGSVGSVGSVGSVGSVGSVGSVGSVGSVGSVGSVGSVGSVGS T= 1 В приведенном примере открывается в качестве ПФД ФДПД F9 из него делается попытка прочесть и вывести на печать по- очередно все логические записи ”VGS” Однако уже первый опе- ратор LINE PRINT# считывает весь файл F9 в переменную Y$ И в этом случае следует отдать предпочтение функции INPUTS Учитывая важность вопроса работы с данными, рассмотрим еще ряд аспектов организации файлов данных обоих типов. ФДПД имеют достаточно простую дисковую структуру: записи Данных, сбуферированные согласно операторов OPEN и FIELD, имеют фиксированную длину L, заданную параметром LEN=L оператора OPEN, и следуют в файле вплотную одна за другой. Маркер конца файла отсутствует. Длина М такого ФДПД равна M=T*Lt Где т . число логических записей в файле. Совсем иная картина имеет место в случае ПФД, структура которого на диске зависит от способа его создания, определяе- мого оператором записи и типом используемых в нем разде- лителей для элементов логической записи (табл. 40):
В формате 1 логические записи файла представлены в сим- вольном виде (образ данных, подобно выводу на экран дис- Таблица 40 Оператор Разделители Формат PRINT # , (запятая) 1 PRINT # ; (точка с за- пятой) 2 WRITE # , или ; 3 плея), при этом каждому элементу записи (кроме последнего) выделяется необходимое число зон по 14 байтов каждая. По- следний элемент записи занимает только требуемое для него число символов. Каждая запись завершается кодами ”ODOA” - перевод строки и возврат каретки, а в качестве маркера конца файла используется код ”1А”. С учетом сказанного, длина ПФД формата 1 вычисляется по формуле п Р L(1)=[14* Z F(LEN(STR$(Nk))/14)+14* Z F(LEN(W,$)/14)+ k=1 j=1 {LEN (STR$ (Nf)) I LEN(Wf$))+2]*T+1 F(X)=INT(X)+SGN(ABS(INT(X)-X)), где T=n+p-1; Nk,Wj$ и Nff Wf$ - значения соответственно число- вых и символьных элементов логической записи (k=1*n; j=1 -^р, f - последний элемент) и Т+1 - общее число элементов записи. В формате 2 логические записи также разделяются кодами "ODOA” и в конце файла помещается маркер конца ”1А". При этом, числовые элементы записи разделяются пробелом, а сим- вольные помещаются в файл без разделителей. Длина ПФД тор- мата 2 вычисляется по формуле L(2)=[ Z LEN(STR$(Nk))+ £ LEN(W=$)+n]*T+1, k=1 j=1 где все обозначения имеют тот же смысл, что и в случае фор- мата 1. Из формул для L(1) и L(2) нетрудно убедиться, что ПФД форма- та 2 требуют значительно меньше места на дисковом томе со всеми вытекающими из этого последствиями. Однако, как в случае формата 1, так и в случае формата 2 при использова- нии в логической записи совместно числовых и символьных элементов перед пользователем, в общем случае, стоит задача правильного выделения после чтения логической записи ее от- дельных компонент. Для этого существует ряд способов, и ко- торых предложим два весьма простых:
(1) использование логических записей с однотипным набо- ром элементов (числовых или символьных); (2) при смешанном использовании элементов в начале за- писи помещается все числовые элементы, а затем все символьные. Первый способ является наиболее простым, но имеет некото- рые ограничения. Второй же способ более универсален, но из символьной части записи все же необходимо самому пользова- телю выделять составляющие ее элементы. Так, для символь- ных элементов записи при ее формировании на диске можно предусмотреть специальные разделители, по которым впослед- ствии легко выделять из записи все ее символьные элементы. В формате 3 элементы логической записи ПФД берутся в ка- вычки (”) и отделяются друг от друга запятой (,). Каждая за- пись завершается кодами ”ODOA” и в конце файла помеща- ется маркер ”1А”. Длина ПФД формата 3 вычисляется по сле- дующей формуле п р L(3)=[ Z LEN(STR$(Nk))+ X LEN(W:S)+3*p+n+1]*T+1, k-1 1=1 где все обозначения имеют тот же смысл, что и в случае фор- матов 1 и 2. В связи со способом представления элементов логической записи ПФД формата 3 допускает использование произвольной комбинации элементов записи без необходи- мости их последующего выделения после чтения файла. Длина ПФД формата 3 несущественно больше длины ПФД формата 2. Именно эти два обстоятельства делают наиболее предпочти- тельным использование ПФД формата 3. Относительно ПФД можно сделать одно общее замечание. Так как логические записи файлов этого типа содержат образ информации, разделяются кодами "ODOA” и маркером конца файла является ” 1А ”, то они по своей структуре соответствуют символьным файлам, с которыми работает большинство тек- стовых редакторов или процессоров. Поэтому такие файлы мож- но создавать и редактировать обычными текстовыми редакто- рами, что в целом ряде случаев весьма удобно. Впоследствии созданные или отредактированные таким способом файлы можно использовать в качестве ПФД для БЕИСИК-программ. На этой основе можно также создавать различного рода си- стемы подготовки и верификации данных, предназначенных для использования в среде языка БЕЙСИК. Вышесказанное иллюстрирует простой пример на использование ПФД трех рассмотренных форматов 1 REM Пример на работу с ПФД форматов 1,2 и 3 2 A$=,’AAA*”:A=19.42:G$=”GGG”:G=19.47:S#=130289# 3 OPEN ”O”,1,”C:Fr, OPEN ’ O”,2,”C:F2”:OPEN ”O”,3,”C:F3” 4 FOR K=1 TO 9;PRINT #1,A,G,S#,A$,G$:PRINT #2,A;G;S#;A$;G$ 5 WRITE #3,A$;A;GS;G;S# NEXT-CLOSE:OPEN T’.l/’CiFI” Ю Q-76
6 OPEN ”1” ,2,”C:F2”*OPEN T’,3,”C:F3”:INPUT #1 ,A.G,S#,D# 7 Z$=”F1:”:GOSUB 10JNPUT #2,A,G,S^,D$:Z$=”F2:”:GOSUB 10 8 INPUT #3,A$,A,G$,G,S#:PRINT ”F3:”;AS;A;GS;G;S# 9 PRINT ”LF1=”; LOF (1); ”LF2=”; LOF (2); ”LF3=”; LOF (3):END 10 L=INSTR (D$, ”*”):PRINT Z$;A;G;S#;MID$(D$,1,L-1);” 11 PRINT MID$(D$,L+1):RETURN RUN F1: 19.42 19.47 130289 AAA GGG F2: 19.42 19.47 130289 AAA GGG F3:AAA* 19.42 GGG 19.47 130289 LF1=550 LF2= 280 LF3= 298 На этом завершается обсуждение работы с файлами данных на дисковых томах и переходим к рассмотрению операторов языка для работы с коммуникационными файлами, обеспечива- ющих работу с каналами связи ПЭВМ ИСКРА 1030. 5. 7. 6. Операторы работы с коммуникационными файлами и другие операторы ввода-вывода Наряду с дисковыми файлами, БЕЙСИК располагает сред- ствами для организации работы с файлами связи. Файлы дан- ных, передаваемые по каналам связи, называются коммуника- ционными. Для открытия коммуникационных файлов служит оператор OPEN - СОМ, который имеет формат OPEN ”COM<k>: [С] [,Р] [,В] [,S] [,RS] [,CS[N]] [,DS[N]] [,CD[NJ] [,LF]” AS [#] <нф> [LEN=L] Оператор OPEN - COM позволяет организовать и поддерживать асинхронную связь типа RS232 с другими ЭВМ или внешними устройствами. В каждый конкретный момент времени в БЕИ- СИК-программе может быть открыт только один коммуника- ционный файл данных. Параметр 'к' принимает значение 1 или 2 и определяет адап- тер асинхронной связи СОМ1 или COM2 соответственно. Па- раметр 'С' указывает скорость (в бодах) обмена информацией по каналу связи и может принимать следующие значения: 75, 110, 150, 300 (по умолчанию), 1800, 300*2Р при р=1-5. Параметр 'Р' определяет паритет для обмена информацией и принимает значения согласно табл.41. Таблица 41 Значение'р' Смысловая нагрузка S о м Е N Бит паритета равен нулю Контроль обмена по нечету Бит паритета равен единице Контроль обмена по четности (по умолчанию) Бит паритета не установлен
Параметр 'В' принимает значения в диапазоне 4 + 8 (по умол- чанию 7) и определяет число бит в единице информации обме- на. Параметр В=8 требует наличия параметра P=N, а Р=4 запре- щает В=8. Следует отметить, что передача числовой информа- ции требует установки параметру В значения 8. Параметр 'S' принимает значение 1 или 2 и определяет чи- сло стоповых битов; по умолчанию принимается S=2 для С=75, 110 и S=1 в остальных случаях. Параметр LEN=L определяет максимально допустимую длину L передаваемых сообщений в байтах (по умолчанию LEN=128). Необязательные ключевые параметры RS, CS, DS, CD и LF служат для управления адаптером связи: CS[N] - управление сбросом приема информации; RS - подавление запроса к приемнику (RTS); DS[N] - управление обнаружением несущей частоты; LF - использование линии связи для подключения по- следовательной печати. Подпараметр 'N' определяет время (в мсек) ожидания сигна- ла до появления ситуации 'Тайм-аут устройства'. При N=O такой обработки ситуации не происходит. По умолчанию для перечис- ленных параметров принимаются значения: CDO, CS1000 (по умолчанию CSO), DS1000; по параметру LF посылается сиг- нал 'Перевод строки' после каждого символа 'Возврат карет- ки'. Значение параметра 'N' должно находиться в диапазоне 0 + 65535. Параметр 'нф' определяет логический номер коммуникацион- ного файла, его значение должно находиться в диапазоне 1-15, как и для обычных дисковых файлов данных. Оператор OPEN - СОМ выделяет БВ/В аналогично тому, как это делает оператор OPEN для дисковых файлов данных. Так как каждый адаптер связи открывается как файл, то все проце- дуры обмена, допустимые для дисковых файлов, допустимы и для коммуникационных файлов данных. Операторы чтения INPUT#, LINE INPUT#, системная функция INPUTS и операторы записи PRINT#, PRINT# USING и WRITE# совершенно аналогичны подобным операторам для дисковых файлов данных, которые описаны в разд. 5.7.5. Операторы PUT# и GET# имеют лишь незначительные отличия относительно их использования для дисковых файлов. В данном случае операторы используются для обмена блоками информа- ции фиксированной длины. Вместо значения номера логической записи в операторах PUT# и GET# указывается количество байтов информации, обмениваемой через БВ/В. Это количество не должно превышать значения, установленного параметром LEN оператора OPEN - СОМ для данного коммуникационного файла данных. Наряду с перечисленными операторами при работе с комму- никационными файлами используются системные функции LOC, LOF и EOF
1_0С(<нф>) - указывает число байтов информации в БВ/В файла, но не более 255; БОР(<нф>) - указывает размер свободной части БВ/В; ЕОБ(<нф>) - устанавливает значение 'истина' при пустом БВ/В и 'ложь' в противном случае Указанные системные функции весьма полезны для идентифика- ции и обработки ситуации 'Переполнение буфера связи'. Следу- ет отметить, что данная ситуация может возникнуть и при попытке прочитать заполненный БВ/В, т. е. при значении ЮЕ(<нф>)=0. Приведем ряд рекомендаций по работе с коммуникацион- ными файлами данных. Для получения информации по каналу связи следует отдавать предпочтение системной функции IN- PUTS, так как для обмена могут иметь значение все передавае- мые коды символов. В этом плане оператор INPUT# прекращает работу при получении символов запятой ( , ) или 'возврата ка- ретки', а оператор LINE INPUT# - при получении символа 'возв- рат каретки'. В связи с этим данные операторы имеют ограниче- ния.на считываемую информацию. Тогда как системная функция INPUTS позволяет считать любые коды и присвоить их значения указанной символьной строке. Приведем пример конструкции, которая весьма эффективна при организации чтения коммуни- кационных файлов данных: 200 OPEN ”СОМ1: 1200” AS #3 LEN=512 210 WHILE NOT EOF (3):X$=INPUT$(LOS(3),#3) 220 GOSUB 10001WEND 1000 REM Обработка полученной информации 1010 RETURN: 'в X$ из БВ/В канала связи В данной конструкции открывается коммуникационный файл с логическим номером 3 адаптера СОМ1 и максимальной дли- ной сообщений в 512 байтов. Считывание информации из файла осуществляется системной функцией INPUTS, которая все по- лученные в БВ/В символы присваивает переменной Х$. По опе- ратору GOSUB осуществляется выход из цикла типа WHILE- WEND для обработки полученной информации с последующим возвращением в цикл. Цикл считывания информации завершает- ся в случае отсутствия информации в БВ/В файла. Для обеспечения работы с каналами связи в ПЭВМ ИСКРА 1030 используется адаптер асинхронной связи (ААС), позволяющий осуществлять обмен информацией по шести кана- лам связи по рангу ИРПС и одному каналу по стыку С2. Каналу, работающему по стыку С2 присвоен номер 0, а все остальные каналы нумеруются в диапазоне 1*6. Перед началом работы с каналами связи необходимо загру- зить в рабочую область БЕЙСИКа три программные файла A_APD.COM, P_APD.EXE и B_APD.EXE, которые позволяют осу ществлять работу с каналами связи в режимах посимвольного
и форматного обмена информацией с абонентом. Для этого ис- пользуется МАСМ-подпрограмма, находящаяся в файле с име- нем А APD.COM, через которую БЕЙСИК-программа пользова- теля обращается в зависимости от избранного способа обмена информацией либо к файлу B_APD.EXE, являющемуся загружае- мым драйвером ААС, либо к файлу P_APD.EXE, содержащему загружаемые протоколы обмена информацией. Используя посимвольный режим обмена информацией, поль- зователь должен обеспечить соблюдение протокола обмена информацией и обработку передаваемого и получаемого байта информации в своей БЕЙСИК-программе. Тогда как при формат- ном режиме обмена эти функции берет на себя файл P_APD.EXE загружаемых протоколов при условии, что и абонент поддержи- вает один из протоколов обмена файла Р APD.EXE. Подробнее о работе с каналами связи можно найти~в [17]. В заключение рассмотрим средства языка БЕЙСИК по непо- средственной работе с портами ввода-вывода системы. Порт представляет собой специальный системный регистр, через который передается управляющая информация и данные для устройств ПЭВМ. Каждый порт идентифицируется собственным адресом от 0 до 65535 и связан с конкретным устройством или функциональным узлом ПЭВМ. Для работы с портом требуется детальная информация о его назначении и структуре ин- формации в нем. Некорректная работа с портами может привес- ти к непредсказуемым результатам. В ряде случаев посредст- вом портов можно использовать такие возможности ПЭВМ, ко- торые не доступны в среде языка БЕЙСИК. Например, через порт можно изменять цвет фона экрана дисплея даже в режиме высокой разрешающей способности. Вопросы работы с портами в настоящей книге подробно не рассматриваются. Оператор OUT М,Р посылает байт со значением CHR$ (Р) в порт ввода-вывода системы с номером М. Значение М должно находиться в диапазоне 065535. Совместно с оператором OUT используется, как правило, системная функция INP (М), позволя- ющая читать байт из порта ввода-вывода системы с номером М. Значение функции INP находится в диапазоне 0255. Следует отметить, что при некорректном использовании системной функции INP может возникнуть зависание системы, которое по- требует перезагрузки операционной системы. Приводимый ни- же пример иллюстрирует использование функции INF- 1 DIM А(2,256):'Анализ содержимого портов в/в 2 FOR К=1 ТО 256:A(1,K)=-1.A(2,K)=0:NEXT К 3 INPUT "Задать порты ввода-вывода (А+В)”; А,В 4 FOR К=А ТО B:FOR L=1 ТО 256JF A(1,L)=INP(K) THEN 6 ELSE 5 IFA(1,L)<>-1 THEN 7 ELSE 6 A(1.L)=|NP(K):A(2,L)=A(2,L)+1:GOTO8 7 NEXT L 8 NEXT K:PRINT ’’Байт порта ’’/’Число лортов”:БОР К=1 TO 256 9 IF A(1,K)=-1 THEN 10 ELSE PRINT A(1,K) ,A(2,K):NEXT
10 INPUT ’’Еще (Y/N)”;T$:IF T$=”Y” THEN CLEAR:GOTO 1 ELSE END RUN Задать порты ввода-вывода (А*В)? 0,20 Байт порта 0 224 225 32 Еще (Y/N)? N Число портов 16 1 1 3 В данном фрагменте на основе номеров (А+В) портов ввода-вы- вода с помощью системной функции INP определяется содер- жание указанных портов и формируется таблица А(2,256), первая строка которой содержит код байта порта, а вторая - число портов из заданного диапазона (А-^-В), содержащих этот байт. Следующий пример позволяет выводить на экран номера портов в указанном диапазоне, коды содержащихся в них символов и сами эти символы: 1 INPUT ’’Задать порты в/в (A-B)”;A,B:FOR К=А ТО В 2 PRINT К,INP (K),CHR$(INP(K)):NEXT К 3 INPUT ’’Повторить (1-A/2-H)”;T:ONT GOTO 1:END RUN Задать порты в/в (А-В)? 97,99 97 72 Н 98 38 & 99 110 N Повторить (1-Д/2-Н)? 2 Для синхронизации работы БЕЙСИК-программы с портами ввода-вывода системы служит оператор WAIT М,Р [,К], кото- рый служит для организации ожидания указанного состояния порта М системы. Оператор WAIT задерживает выполнение программы до появления в указанном порту М определенного байта: данные, читаемые из порта М, складываются со значени- ем <АВ>=К по (mod 2) и логически умножаются на значение <АВ>=Р; для К и Р выбираются целочисленные значения. Если результат равен нулю, данные продолжают читаться из порта М, в противном случае возобновляется выполнение программы. Переходим теперь к рассмотрению операторов языка, поз- воляющих генерировать последовательности звуков различной частоты и длительности, так называемых ’’музыкальных” опе- раторов. 5.7.7. Операторы генерации звуковых сигналов Настоящая группа содержит два оператора SOUND и PLAY, которые предназначены для генерации последовательностей
звуковых сигналов (мелодии). На использование операторов данной группы специальных ограничений не накладывается, однако для эффективного и осмысленного их применения не- обходимо по крайней мере элементарное знание музыкальной грамоты. Оператор SOUND, являющийся основным средством языка для работы с динамиком ПЭВМ, имеет формат SOUND <частота>,<длительность> и служит для генерации звукового сигнала заданных частоты и длительности. Параметр 'частота' принимает целочисленные значения в диапазоне 37-^-32767 и определяет частоту (высоту) звука в герцах. Однако следует иметь в виду, что человек ре- ально воспринимает звуки с частотой в диапазоне 20 + 20000 Гц. Параметр 'длительность' принимает целочисленные зна- чения в диапазоне 0-^65535 и определяет длительность звука в единицах таймера. Нулевое значение параметра определяет ожидание завершения предыдущего (если он есть и еще не за- кончен) оператора SOUND. В случае отсутствия действующего оператора SOUND никаких действий не производится. Оператор SOUND 32767.М создает паузу тишины длитель- ностью М. На практике же любая частота выше 20000 Гц дает тот же эффект. Высота звуков различных октав, а также типич- ные музыкальные темпы и их соответствие параметрам опе- ратора SOUND можно найти в технической документации [17], а также в книге [217]. Во время подачи звукового сигнала про- должается выполнение следующих за SOUND операторов, пока не встретится новый SOUND. Оператор SOUND весьма удобен для воспроизведения хоро- шо алгоритмизируемых последовательностей звуков и может использоваться для создания в БЕЙСИК-программе различного рода звуковых эффектов. Следующий фрагмент иллюстрирует использование оператора SOUND для имитации звука сирены: 10 FOR К=1 ТО 5 FOR 1=1 ТО 5:SOUND 554.37,8 20 SOUND 831 8 NEXT I SOUND 25000,16:NEXT К Для создания музыкальной композиции для ПЭВМ с помощью оператора SOUND необходимо знать частоты звуков различных октав (малой, первой, второй и т. д.). Для этого существуют специальные таблицы частот. Однако для практической работы достаточно использовать следующий простой прием. В качестве базовых выбираем частоты звуков малой октавы (символ # ’’ди- ез” обозначает повышение звука на полтона):
Нота | Частота | Нота | Частота До 130.81 До# 138.59 Ре 146.83 Ре# 155.56 Ми 164.81 Фа 174.61 Фа# 185 Соль 196 Соль# 207.65 Ля 220 Ля# 233.08 Си 246.94 Для других октав частоты звуков приближенно определяются по правилу: при переходе к следующей более высокой октаве частоты соответствующих звуков удваиваются, а при переходе к предшествующей октаве делятся на два. Например, для определения частот звуков третьей октавы приведенные выше частоты малой октавы следует умножить на восемь. В качестве еще одного примера использования оператора SOUND приведем простую программу <PIANO>, имитирующую игру на фортепьяно. В данном примере клавиатура ПЭВМ ИС- КРА 1030 имитирует клавиши фортепьяно следующим образом: Октава До До# Ре Ре# Ми Фа Фа# Соль Соль# Ля Ля# Си Большая 1 2 3 4 5678 9 0 - Малая й ц У к енгш щ зхъ Первая ф ы в а прол д ж э Вторая я ч с м и т ь б ю ё , / Естественно, для других типов клавиатур набор задействован- ных клавиш соответствующим образом меняется. Приведем листинг программы-имитатора <PIANO>, ориентированную на ПЭВМ, совместимую с IBM РС/ХТ/АТ: 1 KEY OFF:REM <PIANO> Имитация игры на фортепьяно * ИСКРА * 2 CLS.LOCATE 10,29:INPUT ’’Укажите имя Вашей ПЭВМ”,N$ 3 CLS:SCREEN 2:LOCATE 25,4:PRINT ”<@> Aladyev V.” +SPASE$(7); 4 PRINT ”* Фортепьяно ”+N$+” * Tallinn 1989”:LOCATE 4,30 5 LOCATE 8,22:INPUT ’’Задать диск с программой-имитато- ром”, D$ 6 LOCATE 10,24:INPUT ’’Настройку фортепьяно делать (Y I N)”, XS.CLS 7 GOSUB 38:LOCATE 4,29:IF XS=”Y” OR X$=”Y” THEN GOSUB 27 ELSE 8 LOCATE 20,27:PRINT ’’Идет настройка фортепьяно’”: LOCATE 4,29 9 OPEN ”I”,1,D$+”:PIANO.DAT”:FOR K=1 TO 48:INPUT #1,X,Y 10 N(X)=Y:NEXT:PRINT ”И H С T P У К Ц И Я ’ ”:LOCATE 6,17
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 PRINT ’’Клавиатура ПЭВМ моделирует клавиши фортепьяно.” IF N$<>”MCKPA 1030” AND N$o”ISKRA 1030” THEN 21 ELSE LOCATE 7,21:PRINT ’’(используется нижний русский регистр)" LOCATE 10.281PRINT "Клавиши I октава I ряд”;ЕОСАТЕ 11,28 PRINT ”I I”:LOCATE 12,28 PRINT ”1 + 01-1= I Большая PRINT ”й + ъ I Малая PRINT ” +э Г I Первая PRINT "я + ё 1,1/ I Вторая PRINT "Ноты: до до# pe pe# I 1 "LOCATE 13,28 I 2 ”.LOCATE 14,28 I 3 ":LOCATE 15,28 I 4 ”:LOCATE 17,15 фа фа# соль соль# ля ля# си” LOCATE 20,27:PRINT "Приступайте к музицированию1” LOCATE 22,25:PRINT "Выход из программы - по клавише <*> A$=INKEY$:IF AS="” THEN 23 ELSE SOUND N(ASC(A$)),3 IF A$=”*” THEN 25 ELSE GOTO 23 CLS.LOCATE 10,25:INPUT "Игру на фортепьяно продолжить (Y I N)”, XS IF XS=”Y" OR X$=”y” THEN LOCATE 20,25:GOTO 21 ELSE NEW CLS.'OPEN "0",1,D$+”:PIANO.DAT”:LOCATE 10,15: PRINT "Имитируются 4 октавы: Большая, Малая, Первая и Вторая” LOCATE 12,20:PRINT "Ноты в каждой октаве следуют в порядке:” PRINT ТАВ( 18); "до до# ре ре# ми фа фа# соль соль# ля ля# си” PRINT "Вводите коды клавиш пооктавно (Большая + Вторая)”; PRINT "ив каждой октаве понотно (до + си)”:Р(1)=65.4 Р(2)=69.3:Р(3)=73.4:Р(4)=77.7:Р(5)=82.4:Р(6)=87.3:Р(7)=92.5 Р(8)=98:Р(9)=103.9:Р(10)=110:Р(11)=116.5:P(12)=123.5:L=0 FOR 1=1 ТО 4:FOR J=1 ТО 12JNPUT ;T:PRINT #1,T,P(J)*2 Ч NEXT J:L=L+1:NEXT I.CLOSE 1:CLS:LOCATE 22,25 PRINT "Настройка фортепьяно ”+NS+” закончена” :RETURN DIM N(256), P(12):FOR K=1 TO 256:N(K)=22589:NEXT:RETURN В начале своей работы программа PIANO запрашивает, назва- ние ПЭВМ для оформления заставки экрана и вывода информа ции о соответствии клавиатур ПЭВМ и имитируемого фортепья- но (для ПЭВМ ИСКРА 1030). После этого запрашивается имя (А, В, С, ...) УВВ, содержащего том с программой-имитатором По ответу ”Y” на запрос о настройке фортепьяно считывается файл PIANO.DAT, на основе которого устанавливается соответ- ствие между клавиатурами ПЭВМ и имитируемого фортепьяно Принцип имитации следующий. С помощью функции INKEYS идентифицируется нажатая кла- виша и вычисляется значение ее кода, на основе которого из Массива N выбирается частота звучания соответствующей ноты Для оператора SOUND. Длительность звучания определяется Длительностью фиксации самой клавиши. По клавише можно выйти из программы-имитатора. Программа PIANO имитирует Фортепьяно в диапазоне октав от Большой до Второй включи- тельно. После вывода сообщения о готовности программы поль-
зователь может приступить к музицированию на ПЭВМ. Выход из программы PIANO осуществляется либо по клавише либо по клавишам 'CTR' + 'S/B'. При первом использовании программы PIANO на ПЭВМ, отлич- ной от ИСКРА 1030, необходимо осуществить ее настройку, т. е. сформировать файл PIANO.DAT, содержащий 48 записей. Каждая запись этого файла содержит код клавиши и частоту звучания ноты, которой приписана данная клавиша. Коды клавиш форми- рует сам пользователь, вводя их согласно выбранному соответ- ствию пооктавно (Большая-^Вторая) и в каждой октаве понотно (до-си). Частоты звучания соответствующих нот вычисляются автоматически. Пример соответствия клавиатур ПЭВМ ИС- КРА 1030 и фортепьяно можно найти в строках 11+20 листинга программы PIANO. После завершения настройки об этом выдается сообщение, и пользователь может приступить к музицированию на ПЭВМ. Как правило, настройка программы на конкретную ПЭВМ осу- ществляется один раз. Текст листинга программы PIANO доста- точно прозрачен и особых пояснений не требует. Следует отметить, что для работы с музыкальными операто- рами SOUND и PLAY у пользователя предполагается наличие определенной музыкальной культуры. Однако в целом ряде слу- чаев при наличии определенных музыкальных памяти и слуха пользователь может с успехом использовать эти средства язы- ка БЕЙСИК для создания несложных музыкальных композиций. Оператор PLAY Х$ служит для генерации последователь- ности звуков (мелодии), определенной значением СВ Х$. Сим- волы (музыкальные команды), составляющие значение СВ Х$, интерпретируются следующим образом. Команда (А I В I С I D I Е I F I G [# I + I -]} задает ноту (от ”до” до ”сй”) текущей октавы; {#!+} определяет ’’диез” (понижение ноты на 1/2 тона), а (-} - ’’бемоль” (повышение ноты на 1/2 тона). Символ допустим с нотами ”до”, ”ре”, "фа”, ’’соль” и ”ля”, а с нотами ”си”, ”ля”, "соль”, ”ми”, ”ре”. Команда 'Ок' определяет текущую октаву при к=0+6. Каждая октава начинается А (звук "до") и кончается G (звук ”си”); по умолчанию принимается октава 4. Нумерация октав следую- щим образом соответствует принятой в музыке: 0 - большая, 1 - малая, 2 - первая, 3 - вторая и 4 - третья октава. Для перехода к новой октаве используются команды ”>” (переход на октаву выше; не действует для четвертой октавы) и ”<” (переход на октаву ниже; не действует для октавы 0). Команда 'Nk' (k=0+84) задает абсолютный номер ноты, кото- рый соответствует порядковому номеру звука в последователь- ности, полученной сквозной нумерацией звуков в семи октавах (0+6) с интервалом в полутон. Нулевой номер обозначает звуко- вую паузу. Команда 'Рк' (к=1 +64) задает длительность паузы. Символ точки ( . ) за нотой или паузой увеличивает их длительность
в полтора раза. Использование нескольких подряд идущих то- чек увеличивает в соответствующее число раз длительность звуковой паузы или ноты. Команда 'Lk' (k=1+64) определяет длительность звучания следующих за ней нот. Длительность звучания ноты равняется [1/к]. При этом число <к> можно указывать и сразу за нотой, длительность звучания которой определяется. Отсутствие явно- го задания длительности эквивалентно команде 'L1'. Эквива- лентными являются следующие записи: <нота> [L] [<длительность^ и 1_<длительность><нота> Например, записи G, G16, GL16, L16G эквивалентны также, как и записи вида <нота> {0111 пробел). Команда'Тк' (к=32-ь255) задает темп исполнения (число чет- вертей нот в минуту). По умолчанию принимается величина к= 120. Индекс 'к' во всех вышеуказанных командах параметра Х$ оператора PLAY представляет собой числовые константу или переменную, целочисленные значения которых использу- ются. При использовании в качестве 'к' числовой переменной после нее должна кодироваться точка с запятой (;). Команды 'MN', 'ML' и 'MS' обозначают манеру исполнения мелодии. Команда 'MN' определяет обычное исполнение (так называемое ”нон легато”). Длительность звучания каждой ноты в этом случае равна 7/8 длительности, указанной в команде 'L'. Команда 'ML' определяет исполнение ’’легато”, когда длитель- ность звучания каждой ноты определяется командой 'L'. Коман- да 'MS' определяет ’’стаккато”, когда длительность звучания каждой ноты равна 3/4 от длительности, заданной в команде 'L'. Команда 'MF' определяет основную мелодию, когда в систе- ме выполняется только генерация звуковой последовательнос- ти, определенной в операторах PLAY и SOUND. Иными словами, в БЕИСИК-среде выполняются музыкальные операторы, и прог- рамма ждет их завершения. Для выхода из музыкальной прог- раммы можно использовать клавиши 'CTR' + 'S/В'. Такой ре- жим предусмотрен по умолчанию. Команда 'МВ' определяет фоновую музыку, т. е. мелодию, создающую музыкальный фон для выполняемой основной БЕЙСИК-программы. В данном режиме каждая нота помещает- ся в буфер фоновой музыки (БФМ) емкостью на 32 ноты, чтобы дать возможность выполняться основной программе. Так как БФМ вмещает только 32 ноты, то при необходимости длитель- ного по времени музыкального фона следует обеспечить ’’под- качку” буфера новыми порциями нот. Режим фоновой музыки распространяется и на работу с оператором SOUND. Команда 'YY$;' указывает на необходимость выполнить стро- ку, определенную символьной переменной YS. Данная возмож- ность позволяет создавать разнообразные комбинации из му- зыкальных фраз, т. е. своего рода музыкальные фантазии. Разделителями подпараметров в параметре 'Х$' оператора PLAY могут быть точка с запятой (обязательна после подпара-
метра 'YY$' и индекса 'к' и недопустима после подпараметро 'MF', 'MB', 'MN', 'ML' и 'MS'), а также пробелы. В качестве при- мера приведем фрагмент оформления музыкального фона для выполняемой основной БЕЙСИК-программы: 10 PLAY ON:ON PLAY (5) GOSUB 5046:Х$=”МВ01 MN ” 20 FOR K=1 TO 11:X$=X$+”B46G41C21A1”:NEXT:PLAY XS 30 '.......................................... 40 FOR L=1 TO 10000:NEXT:' Тело основной программы 5045 PRINT ”L=”;L:END 'Конец фрагмента программы 5046 PLAY X$:RETURN:' Обработка прерываний от фона В данном фрагменте устанавливается условие прерывания от фоновой музыки (УПФМ) и указывается обработчик такого типа прерываний. Затем формируется символьная переменная Х$ для оператора PLAY, заполняющего БФМ и запускающего фоно- вую мелодию. После этого начинает выполняться основная БЕЙСИК-программа на фоне определенной в XS мелодии. После завершения каждого оператора БЕЙСИК-программы происходит проверка УПФМ и в случае его выполнения управ- ление получает обработчик прерываний данного типа, который производит дозагрузку БФМ и обеспечивает непрерывное вос- произведение музыкального фона. Следует отметить, что использование музыкального фона для целого ряда программ существенно повышает внешний эффект от их выполнения (игровые программы, оформление различного рода 'меню' и заставок), однако требует определенных времен- ных затрат, что следует учитывать при разработке программ. Следующие примеры демонстрируют использование опера- тора PLAY для воспроизведения на ПЭВМ известных мелодий П. Маккартни ’’Yesterday” и В. А. Моцарта ’’Турецкий марш” (последняя мелодия воспроизводилась буквально на всех ЭВМ, начиная с ЭВМ МИНСК-22) . 0 KEY OFF:CLS:TIMER ON:ON TIMER (147) GOSUB 10 1 SCREEN 2:LOCATE 8,33:PRINT ”P. MacCarthny”:LOCATE 12,31 2 PRINT ”Y E S T E R D A Y ”:LOCATE 16,10.PRINT ’’(Orangered"; 3 PRINT ”by V. Z. Aladyev * 11th May 1989 * Tallinn * PTI)’’ 4 A$=”L8CC4P4P8”:BS=”L4AB>C<B8A8BA8” 5 PLAY ”ML T11003”:PLAY ”XA$;EF#G#AB>C<B4.AA4.P8” 6 PLAY ”L8P4P8AGFEDF4.EL4EDCED<A>CL8EE.P4P8.XAS;” 7 PLAY ”L8P8P8EF#G#AB>C<B4.AA4.P8’’:LOCATE 25,30 8 PLAY ”L8P8P4AGFEDF4.E8L4EDCED<A>CE8E8.P4P8.E2E2” 9 PLAY ”XBS;GAE1E2E2”:PLAY ”XB$;GB>C<GFEXA$;”:GOTO 5 10 INPUT "Continue music (Y I N)"; R$:IF R$="Y" THEN О ELSE NEW 1 KEY OFF:CLS:REM В. А. Моцарт <Турецкий марш> 2 SCREEN 2:LOCATE 10,33:PRINT "Турецкий марш" 3 AS="03AB>C#4<AB>C#<BAG#F#”:B$="03AB>C<BAG#AEFD”
4 PLAY ”T120 ML L16 O2BAG#A>C4DC<B>CE4Q3FED#E” 5 PLAY ”BAG#ABAG#A>C4 L8 XB$;C4<B4A4 XA$;AG#” 6 PLAY ”ABG#EXA$;BG#EA..P16 XA$; ABG#E XA$;G#EA4” Листинги фрагментов достаточно просты и пояснений не тре- буют. В заключение настоящего раздела авторы выражают благо- дарность Аладьевой Г. Н. за консультации и помощь в получе- нии основ музыкальной грамоты, без которых данные матери- алы были бы не столь полными и корректными. Переходим теперь к рассмотрению последней группы опе- раторов языка БЕЙСИК, обеспечивающих работу с различного рода графическими объектами. 5. 7. 8. Операторы работы с графической информацией В разделе рассматриваются средства языка БЕЙСИК по рабо- те с графическими объектами и обработке информации в гра- фическом режиме. Прежде всего напомним основные сведения по графическому режиму, которые будут использоваться на протяжении всего раздела. Перевод экрана дисплея в графический режим осуществляет оператор SCREEN К, который при К=1 устанавливает режим средней разрешающей способности (320x200 точек) и при К=2 - режим высокой разрешающей способности (640x200 точек). В дальнейшем мы эти режимы для краткости будем соответст- венно называть 'графика-1' и 'графика-2'. Наряду с этим по оператору SCREEN можно указывать для графических режи- мов и разрешение на использование цвета. Об этом подробно написано в разделе 5.7. 1. В графическом режиме не рекомендуется выводить листинги на принтер, так как, невзирая на весьма хорошее их оформле- ние, вывод требует значительных временных затрат. В графическом режиме можно выводить на экран отдельные точки, линии, различные геометрические фигуры и так далее. Это обеспечивается возможностью адресации любой точки экра- на. Экран в зависимости от режима 'графика-К' имеет 320*К точек по горизонтали и 200 точек по вертикали, при этом верх- ний левый угол экрана имеет координаты (0,0), а нижний пра- вый - координаты (320*К-1,199) (К=1,2). Координаты точки экрана для операторов графики можно за- давать как в абсолютной форме (X,Y) (X - горизонталь, Y - вер- тикаль), так и относительно последней точки, которая устанав- ливается каждым оператором графики: STEP (G,V) - G и V представляют собой смещения относи- тельно последней точки соответственно по го ризонтали и вертикали. В графическом режиме 'графика-К' можно выводить и текс- товую информацию по 40*К символов в строке (К=1,2). Наряду
с этим средства БЕЙСИКа позволяют определить прямоуголь- ные области экрана (окна) и задавать в них свои локальные координаты. В табл. 42 представлена сводка операторов языка, используемых при работе с графической информацией. Таблица 42 Оператор Назначение оператора CIRCLE Начертить на экране заданный эллипс DRAW Вывести на экран указанный рисунок GET Чтение графической информации с экрана и запись ее в указанный дисковый файл LINE Начертить на экране заданную линию PAINT Заполнить область экрана с точкой цветом PSET Вывести на экран точку заданного цвета PRESET Аналогичен pset с небольшим отличием PUT Вывод графической информации на экран из указанно- го дискового файла VIEW Задать указанное окно экрана дисплея WINDOW Задать локальные координаты в окне экрана Все перечисленные в табл. 42 операторы можно использовать только в графическом режиме работы экрана дисплея. Переходим теперь к детальному описанию вышеперечислен- ных операторов работы с графической информацией. Оператор CIRCLE имеет формат CIRCLE (M,N),A [,С [,Н,К, [Е]]] и предназначен для вывода на экран эллипса с указанными параметрами. Оператор имеет смысл только в графическом режиме, и последней точкой, устанавливаемой по CIRCLE, яв- ляется центр эллипса, т. е. точка (M.N). Координаты (M,N) в абсолютной или относительной форме задают центр эллипса, а значения для параметра А' определя- ются в точках графического экрана. Для отношения ZE* по умол- чанию принимаются значения Ех=5/6 (режим графика- f) и Е2=5/12 (режим графика-2'). Коэффициент сжатия 'е' есть отношение размеров окружности по вертикали к размерам по горизонтали. При сделанных предположениях для указанных двух режимов графики имеют место следующие правила выво- да эллиптической фигуры: Графика-1 (2) = А определяет Х-полуось , если Е<=ЕХ(Е2) чертится круг радиуса А , если Е=1 (1 12) А определяет Y-полуось , в противном случае Параметр 'с' определяет цвет эллипса и может принимать значения 1+3 (в режиме графика-1'), соответствующие одному
из цветов палитры, определяемой оператором COLOR (по умол- чанию полагается цвет символов), и значения 0 (черный цвет) и 1 (белый цвет; по умолчанию) для режима 'графика-2'. Параметры 'Н' и 'К' задают соответственно углы в радианах начала и конца выводимой дуги эллипса. Значения для обоих параметров могут находиться в диапазоне - 2л -е- 2л, а углы с этими значениями отсчитываются против часовой стрелки, начиная от А-полуоси эллипса. Если ненулевые значения для параметров 'Н' и 'К' отрицательны, то используются их абсо- лютные величины, а крайние точки дуги эллипса при этом сое- диняются с его центром прямыми линиями. Пример иллюстри- рует использование оператора: 1 Y=1:M=160:N=100:P=6:A=100:SCREEN 0,0,0:CLS 2 PRINT Демонстрация вычерчивания эллипсов:”:PRINT 3 PRINT ,”в режимах 'графика-1' (1); 'графика-2' (2);” 4 PRINT ,’’вывод 1-го и 3-го квадрантов эллипсов (3)” 5 INPUT ’’Задать режим (1,2,3)”;F:ON F GOTO 6,7,8:END 6 SCREEN 1:F0RK=1 TO 20*.Y=1 .GOSUB 11:NEXT:G0T0 5 7 SCREEN 2.F0R K=1 TO 20:Y=2:GOSUB 11:NEXT:G0T0 5 8 CLS:P1=3.141593:B=-.0001 :C=-PI/2:F0R K=1 TO 10 9 GOSUB 12:NEXT:B=-PI:C=-3/2*PI:FOR K=1 TO 10 10 GOSUB 12:NEXT K:GOTO 5 11 CIRCLE (Y*M,N),A„„K/(Y*P):RETURN 12 CIRCLE (Y*M,N),A,,B,C,K/(Y*P):RETURN В примере предоставляется возможность выводить на экран семейство эллипсов в режимах трафика-1' и трафика-2'. Семейство эллипсов характеризуется общими центром и раз- мером наибольшей полуоси и определяется параметрическим изменением отношения 'Е'. Третья возможность примера поз- воляет вывести дуги семейства эллипсов, расположенные в 1-м и 3-м квадрантах декартовой системы координат. При этом концы дуг соединяются прямыми линиями с центром эл- липсов. Для компактности программы обращения к операто- рам CIRCLE оформлены на уровне подпрограмм. Оператор LINE имеет формат LINE [(M1,N1)]-(M2,N2) [,[С][,В[F]]] [,М] и служит для вывода на экран прямой линии или прямоугольни- ка с заданными параметрами. Координаты (M1,N1), (M2.N2) определяют в абсолютной или относительной форме точки экра- на, через которые проходит отрезок ОТ искомой прямой. Если дополнительно указан параметр 'В', то выводится прямоуголь- ник с диагональю ОТ. По умолчанию для параметра (M1.N1) по- лагаются координаты точки последней ссылки. Использование параметра 'BFZ позволяет заполнить выведен- ный на экран прямоугольник цветом, определенным парамет-
ром 'С'. Параметр 'С задает цвет выводимой графической ин- формации в соответствии с оператором COLOR. При этом по умолчанию полагается цвет выводимых символов (цвет перед- него плана). Параметр 'М' задает АВ с целочисленным значением, которое используется как 16-битовая маска для выводимой линии: парал- лельно сравниваются циклически побитно слева направо мас- ка и выводимые точки линии, если бит маски равен1, то соответ- ствующая ему точка линии выводится на экран, в противном случае - нет. По умолчанию используется маска &HFFFF, т е. выводятся все точки линии. Тогда как маска &Н1111 позволяет выводить пунктирную линию. Следует помнить, что параметры М' и 'BF' несовместимы. Совместно с CIRCLE оператор LINE позволяет выводить на экран различного рода многоугольные и эллиптические геомет- рические (1+3)-мерные объекты как в отдельности, так и в их сочетаниях. Приведем пример использования оператора LINE: О SCREEN 2JNPUT ’’Задать ребро куба < 133”;P:CLS 1 A=0:B=0:C=2*P:D=0:GOSUB 9:B=-P:D=B:GOSUB 9 2 B=0:C=0:GOSUB 9:A=2*P:C=A:GOSUB 9:A=0:B=-P 3 C=P:D=-3/2*P:GOSUB 9:A=2*P:C=3*P:GOSUB 9 4 B=0:D=-.6*P:GOSUB 9:A=0:B=0:C=P:GOSUB 10 5 A=P:B=D:C=3*P:GOSUB 10:A=3*P:D=-3/2*P 6 GOSUB 9:A=P:B=D:GOSUB 9:C=P:D=-.6*P:GOSUB 10 7 INPUT ’’Еще (1-A/2-H)”;T:LOCATE 25,50 8 ON T GOTO 0:END 9 LINE (10+A, 199+B) - (10+C,199+D):RETURN 10 LINE (10+A,199+B) - (10+C,199+D),,,&H1111:RETURN В данном примере запрашивается размер ребра куба и на его основе на экран посредством операторов LINE (строки 9-5-10) выводится трехмерный куб с указанным ребром. На экране вос- производятся как видимые (сплошные), так и невидимые (пунк- тирные) ребра куба. После вывода куба пользователь может либо повторить работу с программой, либо завершить ее. Обра- щения к операторам LINE оформлены на уровне подпрограмм. Операторы PSET и PRESET имеют общий формат ( PSET I PRESET) (M,N) [,С] и служат для вывода на экран дисплея точки с указанными коор- динатами (M,N) и цветом. Координаты (M.N) могут задаваться как в абсолютной, так и в относительной форме. Параметр 'С .определяет цвет выводимой точки согласно оператора COLOR и по умолчанию совпадает с цветом палитры. Целочисленные значения для параметра 'С должны находиться в диапазо- не 1+3.
Оператор PSET отличается от PRESET только значением по умолчанию для параметра 'С: PSET полагает цвет палитры, a PRESET - цвет фона. Указание точки вне пределов экрана не вызывает никаких действий и диагностики. Использование операторов CIRCLE, LINE, PSET и PRESET позволяет выводить на экран достаточно сложные (1 + 3)-мерные графические объекты, состоящие из дуг окружностей, эллипсов, прямых и точек. При- ведем пример использования оператора PSET: 1 CLS: 'Вывод на экран графика функции К*(Х/46)"2 2 PRINT ”Y=K*(X/46) ~2”:LOCATE 2:SCREEN 2:А=100 3 LINE (10,100)—(600,100):LINE (305,0)-(305,199) 4 INPUT ’’Задать К”, K:LOCATE 2:FOR L=-295 ТО 295 5 PSET (305+L,A-K*(L/46)~2):NEXT:INPUT ’’Еще (Y/N)”, A$ 6 IF A$=”y” OR A$=”Y” THEN LOCATE 2.GOTO 3 ELSE END В данном примере оператор PSET используется совместно с оператором LINE для вывода семейства графиков функции Y=K*(X/46)2 в зависимости от задаваемого значения для коэф- фициента 'К', лежащего в пределах - 750+750. Оператор PAINT имеет формат PAINT (M,N) [,С] [,Г] [,Ф] и служит для заполнения области экрана, содержащей точку (M,N) и ограниченной параметром Т', указанным в параметре 'С', цветом. Координаты (M,N) точки экрана можно задавать в абсолютной или относительной форме. Параметр 'С' определяет АВ или СВ, при этом значение АВ задает признак цвета для заполнения области согласно опера- тора COLOR, а значение СВ задает шаблон вывода цвета на экран дисплея. Параметр Т' задает признак цвета границы области, допустимые значения для которого зависят от режима экрана и соответствуют последнему оператору COLOR. Пара- метр 'Ф' можно использовать только при СВ в качестве парамет- ра 'С'. В качестве параметра 'Ф' используется СВ, из значения которого выбирается только первый символ для определения цвета фона экрана. В зависимости от формы задания параметра 'С' оператор PAINT имеет следующие два режима выполнения. Если пара- метр 'С' представлен АВ или опущен, то, начиная с точки (M.N), определяется область точек экрана с цветом, отличным от цве- та, заданного параметром Т', и данная область заполняется цветом согласно параметра 'С. Так как в режиме 'графика-2* допускается только два цвета, то значения параметров 'С' и Т' должны совпадать, иначе цвет изображения на экране не меня- ется. Если же параметр 'С' задан СВ, то значение символьного выражения рассматривается как последовательность байтов,
каждый из которых определяет цвета четырех точек экрана в режиме 'графика-Г или восьми точек в режиме 'графика-2'. При этом длина (Т) значения СВ не должна превышать 64 байта. Таким образом, параметр 'С' определяет прямоугольный шаблон размером 4хТ или 8хТ точек экрана, который наклады- вается на экран, и точки области экрана, определенные тем же условием, что и в предыдущем режиме заполняются цве- том, соответствующим указанному шаблону. Байты шаблона используются циклически и при отсутствии параметра Г' цвет- ным шаблоном покрывается весь экран дисплея. Приведем простой пример использования оператора PAINT: 1 CLS.SCREEN 2.CIRCLE (320|100)>100„>>.95 2 PAINT (320,100),1: 'Заполнение эллипса В данном фрагменте оператором CIRCLE выводится на экран эллипс с заданными характеристиками и после этого операто- ром PAINT область экрана, ограниченная этим эллипсом, за- полняется белым цветом. Оператор GET имеет формат GET (M1,N1) - (M2.N2), <ИМ> и служит для помещения копии буфера экрана в заданный па- раметром 'ИМ' числовой массив. Параметр '(M1.N1) - (M2.N2)' задает диагональ прямоугольной области экрана, копия со- держимого которой помещается в числовой массив с именем <ИМ>. Для размера М этого массива требуется следующее ми- нимальное число байтов: М = INT ((А+9)/8)*В+4 для режима 'графика-Г INT ((А+8)/8)*В+4 для режима 'графика-2' А - число точек области по горизонтали; В - по вертикали. Таким образом, для помещения копии всего экрана в числовой массив требуется в режиме 'графика-Г и 'графика-2' соответ- ственно 8604 и 16204 байтов. Размерность и тип числового массива <ИМ> при этом не ограничиваются, однако с точки зрения уменьшения времени выполнения программы рекомен- дуется использовать целочисленные числовые массивы. Основным назначением оператора GET является сохранение копии указанной прямоугольной области экрана в числовом массиве, информация которого затем может быть использована для восстановления содержимого экрана. Следует отметить, что числовой массив, содержащий копию экрана, не доступен для записи в дисковый файл с последующим его восстановле- нием в памяти. Для такой цели следует использовать команды
BSAVE и BLOAD языка БЕЙСИК, описанные в разделе 5. 6., кото- рые позволяют в бинарной форме записать содержимое буфе- ра экрана в дисковый файл с последующим его восстановлени- ем в памяти ПЭВМ. Оператор PUT имеет формат PUT (M,N) ,<ИМ> [,Р] и служит для восстановления содержимого экрана, ранее поме- щенного оператором GET в числовой массив <ИМ>. Параметры '(M.N)' и 'ИМ имеют тот же смысл, что и аналогичные им пара- метры в соответствующем операторе GET. При этом значения параметров 'ИМ' в операторах GET и PUT должны совпадать, а значение параметра '(M,N)' оператора PUT может отличаться от аналогичного ему параметра соответствующего оператора GET, определяя точку экрана, куда выводится левый верхний угол восстанавливаемой прямоугольной области экрана дисплея. Параметр 'Р' указывает режим восстановления содержимо- го области экрана и принимает следующие значения: PSET, PRE- SET, XOR, OR и AND (по умолчанию полагается значение XOR). Значение PSET предполагает полное восстановление содержи- мого области экрана или всего экрана, ранее помещенного оператором GET в числовой массив <ИМ>. В данном случае оператор PUT является полной противоположностью опера- тора GET. Значение PRESET производит действия подобно PSET, но приз- наки цвета восстанавливаемой на экране области меняются на противоположные: 0 -> 3, 1 -> 2, 2 -> 1, 3 -> 0 (см. оператор COLOR). Значения же AND, OR и XOR параметра 'Р' изменяют признаки цвета восстанавливаемой на экран из числового массива области согласно следующей схеме (табл. 43) Значение признака цвета в числовом массиве Таблица 43 Э К Р А Н 0123 0123 0123 0 0 12 3 0 12 3 0 12 3 1 110 1 113 3 10 3 2 2 2 0 2 2 2 3 2 3 2 3 0 1 3 0 12 3 3 3 3 3 3 2 10 AND OR XOR 'р' Следует отметить, что режим восстановления с XOR позволя- ет упростить вывод на экран различного рода цветные движу- щиеся объекты. Если же цвет не имеет значения, то это же Удобнее делать с использованием значения PSET.
Операторы GET и PUT используются в основном для смены изображений или объектов на экране, и здесь существенным фактором выступает время. Поэтому для уменьшения времени выполнения указанных операторов рекомендуется соблюдать следующие условия для значений первого подпараметра пара- метров '(M1,N1)','(M,N)': {Ml I М} = 0 (mod 4) для режима 'графика-1' { М1 I М} = 0 (mod 8) для режима'графика-2' Следующие два примера иллюстрируют совместное использова- ние операторов GET и PUT: 1 CLS:DIM AVZ% (41,20,10):SCREEN 2:В$=”Стирание” 2 С$=”Создание”:А$=” эллипса”:РР1МТ С$+А$ 3 CIRCLE (320,100),95„„1:K=0:LOCATE 1 4 PAINT (320,100),1:GET (0,0)-(639,199),AVZ% 5 TIMER ON:ON TIMER (3) GOSUB 8:PRINT B$+A$ 6 В$=”Восстановление”.^НИЕ 46:WEND 7 CLS.PRINT B$+A$:PUT (0.0),AVZ%, PSET:END 8 K=K+1:IF K=1 THEN CLS.GOTO 5 ELSE GOTO 7 В данном примере оператором CIRCLE выводится на экран эл- липс с заданными характеристиками и по оператору PAINT заполняется белым цветом. Затем оператор GET помещает ко- пию всего экрана в 3-мерный целочисленный массив AVZ% раз- мера 2x41x20x10=16400 байтов. После этого содержимое эк- рана стирается по оператору CLS и затем с помощью операто- ра PUT снова восстанавливается из массива AVZ%. 1 REM Пример с движущимся прямоугольником 2 INPUT "Задать длину диагонали”;Р:СЕВ 3 DIM AGN%(INT((P+8)*P/16)+4):SCREEN 2 4 LINE (0,0)-(P,P),1,B:GET (0,0)-(P,P),AGN% 5 FOR K=0 TO 637-P STEP 20:FOR J=0 TO 197-P 6 PUT (K,J),AGN%,PSET:CLS:NEXT J:NEXT К Во втором примере по запросу программы задается длина диа- гонали прямоугольника и на ее основе вычисляется размер целочисленного массива AGN%, куда предполагается помес- тить копию области экрана, ограниченную данным прямоуголь- ником. Затем экран переводится в режим 'графика-2' и по опе- ратору LINE формируется на экране прямоугольник с заданной диагональю. После этого оператором GET копия области экрана, ограниченная этим прямоугольником, помещается в целочис- ленный 1-мерный массив AGN%. Последующее использование в двойном цикле оператора PUT совместно с оператором CLS приводит к визуальному эффекту движения по экрану сверху вниз и слева направо вышеуказанного прямоугольника.
Оператор DRAW Х$ служит для вывода на экран рисунка, определенного символьным параметром Х$, который содержит команды управления работой с графическим экраном. В качест- ве параметра оператора DRAW можно использовать и символь- ное выражение, значение которого содержит команды. Команды перемещения начинают движение и вычерчивание линий с ко- нечной точки предыдущего перемещения. Приведем команды перемещения, допустимые в параметре Х$: Uk - перемещение вверх на расстояние к точек; Dk вниз » Lk влево » Rk вправо » » > Ek - перемещение по диагонали вверх и вправо на к точек; Ek - » > вниз и вправо » » ; Gk > » » вниз и влево » » ; Нк » » > вверх и влево > » ; Мх.у - абсолютное или относительное перемещение до точ- ки с координатами (х,у); если координате 'х' не пред- шествуют знаки {+I-}, то (х,у) абсолютные коорди- наты точки перемещения, в противном случае - ко- ординаты относительно последней точки ссылки. С командами перемещения можно использовать два спе- циальных модификатора 'В' и 'N', которые на следующую за ни- ми команду перемещения действуют следующим образом: В - переместиться в указанную позицию без рисования; N - переместиться с рисованием и возвратом обратно. Команда 'Sk' позволяет установить коэффициент шкалы экрана со значением <к> (1 <к>255; по умолчанию <к>=4). Ко- эффициент шкалы равен [к/4] и действует на все команды пе- ремещения, кроме команды Мх,у абсолютного перемещения. Ве- личина перемещения Р в командах этого типа определяется как Р=к2/4. Команда 'Ак' позволяет установить угол 'к', который при <к>=0,1,2,3 принимает соответственно 0, 90, 180 и 270 градусов. При этом положительному значению <к> соответствует направ- ление вдоль Х-оси. Команда 'ТАк' определяет поворот на угол в <к> градусов (-360 <= <к> <= 360). При этом положительное значение <к> соответствует повороту против часовой стрелки. Команда 'Ск' устанавливает признак <к> цвета рисуемой фигу- ры. Для режимов трафика-1' и трафика-2' <к> может принимать соответственно значения {0 I 1 I 2 I 3} и (0 I 1). Для выбора цвета следует руководствоваться описанием оператора COLOR. По умолчанию <к>=1 определяет белый цвет и <к>=3 - цвет перед- него плана. Команда 'Рк,п' устанавливает цвета рисуемой на экране фигуры и ее границы. При этом параметры 'к' и 'п' команды должны быть АВ целого типа и их значения соответ- ствовать режиму экрана аналогично команде 'Ск'.
Во всех перечисленных командах управления работой графи- ческого экрана параметры 'к', 'х и 'у' могут задаваться как це- лыми константами, так и конструкциями вида 'В=Х;', где В=(kIх I у} и X - числовая переменная любого типа (целая, обычной или двойной точности), целочисленное значение кото- рой присваивается параметру команды. Команды в параметре Х$ оператора DRAW можно разделять точкой с запятой (;), кото- рая обязательна после переменных. Наконец, команда 'ХА$;' позволяет выполнить набор из выше- перечисленных команд, содержащихся в значении символьной переменной А$. При этом, значение AS, в свою очередь, также может содержать команду 'ХА1$;' и так далее. Команда этого типа должна обязательно завершаться точкой с запятой (;). Следует отметить, что в командах типа 'В=Х;' и 'XAS;' нельзя использовать вместо переменных 'X* и 'А$' соответственно АВ и СВ, так как это в большинстве случаев приводит к ошибке с диагностикой 'Смешение типов' или 'Синтаксис'. Хотя в от- дельных случаях и возможно безаварийное завершение опера- тора DRAW с указанными конструкциями, но результат выполне- ния будет неправильным. Первый оператор DRAW, если до него не использовались опе- раторы графики, начинает свою работу с центра экрана, т. е. с точки с координатами (к*160,100) (к=1 для режима 'графика-Г и к=2 - 'графика-2'). Как следует из приведенного описания, оператор DRAW явля- ется наиболее общим оператором вывода на экран различного рода графических объектов и рисунков. При использовании опе- ратора DRAW следует учитывать, что значения координат точек экрана, выходящие за допустимые пределы, заменяются пре- дельными. Однако, в режиме 'графика-Г при значении >319 координаты по Х-оси происходит переход к следующей У-линии. Таким образом, оператор DRAW задает последовательность команд движения и управления, определяя своего рода язык графического вывода информации. С его помощью можно строить сложные графические объекты. Использование оператора DRAW совместно с операторами CIRCLE, LINE, PSET, PRESET и PAINT позволяет выводить на эк- ран практически любые рисунки и геометрические объекты, тогда как операторы GET, PUT и PLAY позволяют эффективно ввести движение на экране и музыкальное сопровождение. Совместно с операторами графики в целом ряде случаев удоб- но использовать системные функции POINT (К), POINT (M,N) и РМАР (М,К), которые допустимы только в графических режи- мах работы. Сначала мы опишем первые две функции. Системная функция POINT (К) вычисляет координаты теку- щей точки графического экрана в зависимости от значения аргумента 'К' следующим образом (табл. 44): Таблица 44 Значение <К> Значение функции point (К) 0 1 2 3 Физическая координата точки по х-оси Физическая координата точки по у-оси Локальная координата точки по х-оси Локальная координата точки по у-оси
Локальные координаты точки функция POINT (К) возвращает только в том случае, если использовался оператор WINDOW, иначе при <К>=2,3 возвращаются физические координаты. Системная функция POINT (M,N) вычисляет признак цвета точки экрана, заданной абсолютными координатами (M,N). В ре- жиме 'графика-Г функция принимает значения {-1 10111213}, а в режиме 'графика-2' - значения {-1 10 11), при этом значе- ние '-Г в обоих режимах определяет отсутствие точки с ука- занными координатами, а остальные значения определяют цвет точки согласно оператора COLOR. Приведем теперь пример на использование оператора DRAW и системных функций POINT (К) и PAINT: 1 SCREEN 2:А$=”ВМ320,100”:D=SQR(2):CLS 2 TIMER ON:ON TIMER (5) GOSUB 10 3 X$=”XA$;BL=Y;E=A;R=P;F=A;G=A;L=P;H=A;” 4 K=(D/2+1):FOR A=10 TO 80 STEP 5:P=D*A 5 Y=K*A:DRAW X$:NEXT A:WHILE 46:WEND 6 CLS:A=150:K=36:DRAW A$+”BU50”:GOSUB 11 7 DRAW A$+’’BD50”:GOSUB 11:DRAW A$+”BL150” 8 GOSUB 11:DRAW A$+”BRT50”:GOSUB 11 9 LOCATE 10,40:PRINT ’’The End”:END 10 RETURN 6: 'Обработка прерываний 11 FOR F=0 TO 360 STEP K:DRAW ”TA=F;R35”:NEXT 12 PAINT (POINT (0)+2,POINT (1)-2),1:RETURN В данном примере используются основные команды операто- ра DRAW, оператор PAINT и системная функция POINT (К). В пер- вой части программы с помощью оператора DRAW в цикле на экран выводится семейство вложенных шестиугольников со стороной размера SQR(2)* А (А=10+5*d; d=0-12) с общим цент- ром в точке (320,100) - центре графического экрана режима 'графика-2'. Для вывода используются все команды перемеще- ния, включая их модификации, и команда выполнения цепочки. После этого с помощью бесконечного цикла типа WHILE - WEND и средства обработки прерываний от таймера организуется задержка полученного изображения экрана на заданный про- межуток времени. По истечении указанного промежутка опе- ратором CLS содержимое экрана стирается и начинает выпол- няться вторая часть программы. Во второй части операторами DRAW строятся четыре копии 10-ти угольника, которые оператором PAINT, использующим в качестве аргументов значения функции POINT (К), заполняют- ся белым цветом. Обращение к операторам DRAW, PAINT и функции POINT (К) реализовано на уровне подпрограммы. Вторая часть иллюстрирует использование СВ в качестве па- раметра оператора DRAW, а также команд вращения. В конце выполнения программы на экран между 10-ти угольниками вы- водится сообщение 'The End'. Ряд других примеров на использо- вание операторов трафики будет рассмотрен в гл. 6.
Для организации синхронного вывода графической и тексто- вой информации на экран в целом ряде случаев возникает необ- ходимость вычисления позиции текущей точки экрана в терми- нах 'строка/столбец'. В решении этого вопроса может оказаться весьма полезной вышеописанная функция POINT. Каждая пози- ция экрана, в которой установлен курсор, состоит из квадрат- ного блока размера 8x8 точек. Поэтому в графическом режиме координаты (X.Y) текущей точки экрана в терминах 'строка/ столбец' определяются формулами X=CINT (POINT (k)/8) Y=CINT (POINT (k+1)/8), где k=0 для абсолютных и k=2 для локальных координат теку- щей точки экрана. Следующий пример иллюстрирует сказанное. 10 SCREEN 2.CLS.LINE (320,150)-(320,50) 20 GOSUB 1001PRINT CHR$(248)+”Y” 30 LINE (200,100)-(470,100):GOSUB 100 60 PRINT CHR$(246)+”X”:PSET (320,100) 70 GOSUB 100:LOCATE Y+1,X+2:PRINT ”o”:END 100 Y=CINT (POINT (1)/8):X=CINT (POINT (0)/8) 110 LOCATE Y,X:RETURN RUN В данном примере на графический экран выводится декартова система координат. В заключение настоящего раздела рассмотрим последние два оператора графического режима экрана VIEW и WINDOW, которые позволяют определять прямоугольные окна на экране графического дисплея и вводить локальные системы координат в заданной области экрана. Оператор VIEW имеет формат VIEW [[SCREEN] (Nf1,N1)-(M2,N2) [, [С] [,Г]]]
и служит для определения на графическом экране прямоуголь- ного окна, с которым будут работать последующие операторы графики. Параметр '(M1,N1)-(M2,N2)' задает диагональ прямо- угольного окна с координатами в абсолютной форме. Для под- параметров данного параметра допустимы любые соотноше- ния, кроме соотношений М1=М2 и N1=N2. Параметр 'С' задает АВ с целочисленными значениями в диа- пазоне 0-3 для режима 'графика-1' и 0-1 - для режима 'гра- фика-2'. Указанные значения определяют цвет согласно опе- ратора COLOR. По умолчанию окно экрана цветом не заполня- ется. Параметр Т' задает АВ с целочисленными значениями совершенно аналогично параметра 'С' и служит для указания цвета границы окна. По умолчанию и в случае указания в ка- честве окна всего экрана граничные линии окна не отобража- ются на экране. Параметр 'SCREEN' определяет режим досту- па к окну экрана следующим образом. При наличии данного параметра координаты выводимых операторами графики точек полагаются абсолютными и точки, не попадающие в окно, на экран не выводятся. По умолчанию же координаты выводимых точек рассматриваются относительно активного окна экрана. Оператор VIEW без параметров в качестве окна определяет весь экран. Если в программе используется несколько опера- торов VIEW, то активное окно определяется последним операто- ром VIEW. Весь вывод графической информации может идти только в активное окно экрана. Активность окна можно изме- нить оператором VIEW, задающим новое активное окно экрана. Действия оператора VIEW отменяют команда RUN или оператор SCREEN, изменяющий характеристики экрана. Оператор CLS может очистить только активное окно экрана и для очистки всего экрана следует использовать либо клави- ши 'CTR'+'\', либо оператор VIEW без параметров совместно с оператором CLS. Для определения локальных координат в окне экрана совместно с VIEW используется оператор WINDOW, ко- торый будет описан ниже. Пример использования оператора VIEW: 10 SCREEN 2:VIEW:CLS:P=0 20 VIEW (0,0)-(320,100):GOSUB 200 40 VIEW (321,0)-(639,100):GOSUB 200 60 VIEW (0,100)-(320,199):GQSUB 200 80 VIEW (320,100)-(639,199):GCSUB 200 100 INPUT ’’Еще (1-A/2-H)”;T:ON T GOTO 10:END 200 LINE (0,100)-(639,100):LINE (320,0)-(320,199) 300 P=P+1:CIRCLE (160,50),60:PAINT (160,50),1 400 LOCATE 2*7"INT (P/3),43*(SGN(INT(P/2)-P/2)+1) 500 PRINT "Window”;P:RETURN В данном примере операторами VIEW создаются четыре окна ЭкРана. После создания Р-го (Р=1 +4) окна управление переда- ется подпрограмме (строка 200), которая:
- выводит на экран систему взаимно перпендикулярных линий с центром в точке (320,100), определяющих границы окон экрана; - формирует эллипс и заполняет его белым цветом; данный эллипс помещается в текущее Р-е окно экрана; - вычисляет координаты вывода сообщения 'Window Р' и вы- водит данное сообщение в текущее окно экрана. После формирования и заполнения всех четырех окон экрана пользователь получает возможность либо повторить работу с программой, либо завершить ее. Оператор WINDOW имеет формат WINDOW [[SCREEN] (M1,N1)-(M2,N2)] и служит для определения локальной прямоугольной системы координат, заданной параметром '(M1,N1)-(M2,N2)'. Значения для 'Mk,Nk' (k= 1,2) задаются как числа обычной точности и опре- деляют локальную прямоугольную систему координат. Физиче- ские (абсолютные) координаты вершин прямоугольника локаль- ных координат определяются в последнем операторе VIEW. Если оператор VIEW в программе не использовался, то верши- ны прямоугольника локальных координат совпадают с соответ- ствующими углами экрана дисплея. На использование подпа- раметров 'Mk,Nk' (k= 1,2) накладываются те же ограничения, что и в случае оператора VIEW. Параметр 'SCREEN' задает направление осей прямоуголь- ных координат в локальной системе следующим образом: при наличии параметра оси локальных координат совпадают с ося- ми физической (абсолютной) системы (Х-ось направлена впра- во; У-ось направлена вниз), в противном случае используется обычная декартова система координат. В период действия оператора WINDOW координаты каждой точки, выводимой на экран операторами графики, преобразуют- ся из локальных в абсолютные. Абсолютная система координат экрана восстанавливается операторами WINDOW без парамет- ров, SCREEN и RUN в программной или командной строке. Совместно с оператором WINDOW в целом ряде случаев це- лесообразно использовать системную функцию РМАР (М,к)« которая преобразует координату М точки графического экрана из локальной системы в абсолютную и наоборот согласно табл. 45. Таблица 45 < к> Перевод координаты М точки, лежащей 0 1 2 на х-оси из локальной формы в абсолютную на y-оси из локальной формы в абсолютную на х-оси из абсолютной формы в локальную на y-оси из абсолютной формы в локальную
функция РМАР позволяет осуществлять переход из абсолютной системы координат в локальную, установленную последним оператором WINDOW, и наоборот. Рассмотрим два примера ис- пользования оператора WINDOW и системной функции РМАР: О SCREEN 2:CLS:WINDOW (46,46)-(5,5) 1 X=CINT (PMAP(320,2)):Y=CINT (РМАР(100,3)) 2 CIRCLE (X,Y),X/2:PAINT (X,Y),1 3 PRINT PMAP (46,0);PMAP (46,1);PMAP (5,0);PMAP (5,1); 4 PRINT” - Физические координаты” 5 PRINT РМАР (РМАР (46,0),2);PMAP (РМАР (46,1),3); 6 PRINT РМАР (PMAP(5,0),2);PMAP (РМАР (5,1),3); 7 PRINT” - Локальные координаты” 8 PRINT ’’Локальные координаты центра” 9 PRINT”3Kpana: X=”;X;”Y”=”;Y В данном примере оператором WINDOW задаются локаль- ные координаты для всего экрана в режиме 'графика-2', после чего посредством функции РМАР сразу же вычисляются коор- динаты (X.Y) центра экрана в заданной локальной системе координат. Используя локальные координаты (X,Y) посредст- вом операторов CIRCLE и PAINT, строим эллипс с центром (X,Y) и X-полуосью равной Х/2, заполненный белым цветом. В завер- шение выполнения программы на экран выводятся физические, соответствующие им локальные координаты вершин прямо- угольника и локальные координаты центра экрана при данном операторе WINDOW. Для простоты локальные координаты удобно вводить в виде '(0,0)-(А,А)' либо '(-А,-А) - (А,А)'. Второй пример является модификацией примера, приведен- ного при рассмотрении оператора VIEW: О SCREEN 2:VIEW:CLS:P=0 1 VIEW (0,0)-(320,100):GOSUB 6 2 VIEW (321,0)-(639,100):GOSUB 6 3 VIEW (0,100)-(320,199):GOSUB 6 4 VIEW (320,100)-(639,199):GOSUB 6 5 INPUT ’’Еще (1-A/2-H)”;T:ON T GOTO O:END 6 WINDOW (-46,-46)-(46,46) 7 LINE (0,-46)-(0,46):LINE (-46,0)-(46,0) 8 P=P+1:CIRCLE (0,0), 18:PAINT (0,0), 1 9 LOCATE 2*7 ~INT (P/3),43~(SGN (INT (P/2)-P/2)+1) Ю PRINT ’’Window”; PiRETURN $ отличие от примера применения оператора VIEW данный Фрагмент посредством оператора WINDOW в каждом окне эк- рана определяет декартову локальную систему координат, в которой строится эллипс с центром в начале этой системы и°ординат. Наряду с этим данный пример иллюстрирует по- давление действия оператора PAINT, который в предыдущем нодобном примере заполнял контур эллипса белым цветом.
На этом завершается описание операторов и системных функций языка БЕЙСИК, обеспечивающих графический режим работы экрана дисплея ПЭВМ, а вместе с ним и описание всего языка в целом. Как следует из материалов настоящей главы, изложение языка БЕЙСИК проводилось достаточно детально, что позволит читателю свести к минимуму необходимость пользования технической литературой по ПЭВМ ИСКРА 1030 [17]. Приведенные в настоящей главе примеры иллюстрирова- ли использование операторов, команд и функций языка БЕЙ- СИК как в обычном их применении, так и основные особен- ности их использования. В следующей главе описываются более сложные примеры использования основных конструкций языка БЕЙСИК, которые не только призваны проиллюстрировать особенности и наибо- лее типичные приемы программирования в среде БЕЙСИКа, но и предоставить читателю ряд сервисных средств для его практической работы с ПЭВМ ИСКРА 1030.
6 ПРИМЕРЫ ОФОРМЛЕНИЯ БЕЙСИК-ПРОГРАММ И СЕРВИСНЫЕ ПРОГРАММНЫЕ СРЕДСТВА ДЛЯ ПЭВМ ИСКРА 1030 В настоящей главе приводятся примеры оформления БЕЙ- СИК-программ и описывается ряд сервисных средств для ис- пользования в среде языка БЕЙСИК ИСКРА 1030. Приводимые примеры БЕЙСИК-программ, как правило, преследуют следую- щие четыре основные цели: - иллюстрацию применения основных операторов, команд и функций при создании часто используемых БЕЙСИК- конструкций; - иллюстрацию особенностей использования и выполнения основных операторов, команд и функций языка БЕЙСИК; - предоставление пользователю ряда наиболее часто исполь- зуемых сервисных процедур; - демонстрацию методики и методологии разработки при- кладного программного обеспечения в среде БЕЙСИКа. Описываемые сервисные средства представляют собой от- дельные БЕЙСИК-программы для обеспечения пользователя часто используемыми процедурами и системами работы с дан- ными. Приводится краткое описание средства с приложением его листинга на языке БЕЙСИК. Перед рассмотрением пере- численных программных средств представим рекомендации по структуре прикладных БЕИСИК-программ, которые позво- ляют создавать хорошо структурированные многомодульные программы, удовлетворяющие ряду основных критериев по оптимальности и эффективности (использование оперативной памяти, время выполнения, адаптация к изменениям и т. д.). Рекомендуемая структура БЕЙСИК-программы приведена на рис. 10. Назначение основных из перечисленных десяти областей БЕЙСИК-программы, а также основные приемы их организации будут рассмотрены на протяжении настоящей главы. Здесь же кратко описывается назначение этих областей. Области 1+3 особых пояснений не требуют и их основное назначение следу- ет из их названий. Область 4 содержит ядро БЕЙСИК-гтрограм- Мы. находящееся в рабочей области БЕЙСИКа на весь период Функционирования задачи пользователя. Области 5 и 6 содер- жат соответственно, резидентные обработчики прерываний, особых и аварийных ситуаций, а также подпрограммы, вызы- ваемые по операторам GOSUB. Область 7 служит для динами- ческой загрузки подпрограмм, вызываемых по оператору HAIM MERGE, а область 8 сжатия представляет собой остаток свободной памяти программных строк после динамической
Описания переменных, массивов, функций Определение функции пользователя Н О м Е Описание режимов прерывании, особых и аварийных ситуаций Резидентная часть программы (ядро) А Резидентные обработчики прерываний С Р О К Резидентные подпрограммы, вызываемые no GOSUB Область динамических подпрограмм П Р О г Р А М м ы 1 Область сжатия Область транзитных обработчиков прерываний и особых ситуаций Область связи с транзитными обработчиками прерывании особых и аварийных ситуаций Рис 10. Рекомендуемая структура БЕЙСИК-программ загрузки подпрограммы. Область 9 служит для загрузки тран- зитных обработчиков прерываний, особых и аварийных ситуа- ций, область 10 связи с транзитными обработчиками - для ор- ганизации интерфейса механизма прерываний (область 3) с загрузкой транзитных обработчиков этих прерываний. Данную область можно расширить средствами по анализу частоты использования того или иного обработчика с последующим присвоением ему статуса 'резидентный', если результаты анализа приведут к такому заключению. Приведенная выше принципиальная организация рамяти БЕЙСИК-программы хорошо отвечает задаче организации ра- боты с библиотекой БЕЙСИК-программ (БибПрог). Механизм БибПрог позволяет создавать достаточно обширные библиоте- ки программ (подобно, например, ФОРТРАН-системе) и зна- чительно повысить степень автоматизации разработки ПО в среде языка БЕЙСИК. Одна из реализаций механизма БибПрог состоит в следующем. Каждая БЕЙСИК-программа из БибПрог начинается строкой с номером 65000 и естественный выход из программы осу- ществляется через строку с номером 65529 следующего вида 65529 CHAIN MERGE ”C:PRG”,P#,AU- В БибПрог включается и программа PRG.BAS, содержащая единственную строку вида: 65529 REM [<text>], которая служит для организации возврата в основную программу после вы-
пОлнения подпрограммы. Все программы в БибПрог помеща- ются в исходном виде, т. е. в формате листинга, и в них нельзя попользовать переменную Р#. Основная БЕЙСИК-программа занимает строки с номерами Q4-65499, но этот диапазон можно изменять в зависимости от конкретных условий применения. Для вызова программы из БибПрог в основной программе кодируется строка вида <нс> P#=<hcb>:CHAIN MERGE ”<путь>”, 65000,ALL,DELETE 65000- 65529, где: <нс> - номер строки вызова, <нсв> - номер строки возврата после выполнения подпрограммы и <путь> - путь к искомой подпрограмме из БибПрог. При этом первое исполь- зование такой конструкции не должно содержать параметра "DELETE”. Схема распределения памяти на момент выполне- ния подпрограммы из БибПрог имеет принципиальный вид: 10 REM Основной модуль БЕЙСИК-программы 20 REM ============================= 50 P#=60:CHAIN MERGE ”C:SubProg”, 65000!, ALL 60 REM Следующая программная строка основного модуля 70 REM ============================= 80 P#=90:CHAIN MERGE ”C:SubProg”,65000!,ALL,DELETE 65000-65529 90 REM Следующая программная строка основного модуля 100 REM ============================= 64954 INPUT ’’Работу продолжить (у I n)”, XSJF Х$=”у” THEN 80 ELSE 64955 END:REM Конец основного модуля БЕЙСИК-программы Исходя из вышеизложенного, приведенная схема особых пояснений не требует. 6. 1. ПРИМЕРЫ ОФОРМЛЕНИЯ СЕРВИСНЫХ БЕЙСИК-ПРОГРАММ В настоящем разделе приводятся небольшие по объему БЕЙ- СИК-программы, иллюстрирующие использование основных операторов языка и некоторых особенностей их выполнения. В большинстве случаев приводимые примеры могут оказаться полезными в практической работе читателя с ПЭВМ ИСКРА 1030 при создании прикладных программных средств. Каждый при- водимый пример представлен листингом и кратким описанием его функционирования и назначения. Пример 1. Программа предназначена для вывода на экран содержимого указанных байтов оперативной памяти (MEMORY) ° REM Вывод содержимого байтов памяти на экран (MEMORY) 1 INPUT "Адресация в НЕХ-виде (1) или десятичная (2)”; L 2 !R L=1 THEN GOSUB 11 ELSE
3 INPUT ’’Адрес в виде XXXXiYYYY и число байт (Р)”; А,В,Р 4 INPUT ’’Вывод в CHR (1) или в цифровом (2)”; N 5 DEF SEG=A:FOR К=В ТО В+Р 6 IF РЕЕК (К)> 126 OR РЕЕК(К)<46 THEN 9 ELSE 7 IF N=2 THEN PRINT PEEK (K); :GOTO 9 ELSE 8 PRINT CHR$ (PEEK (K)); :GOTO 9 9 NEXT K'.INPUT ’’Работу продолжить (1-Да/2-Нет)”; P 10 IF P=1 THEN 1 ELSE END 11 INPUT ’’Адрес в виде XXXXiYYYY и число байт (Р)”; А$,Р 12 FOR К=1 ТО 9:M=ASC (MID$ (А$,К, 1)) 13 IF М>60 THEN В (К)=М-55 ELSE В(К)=М-48 14 NEXT:A=0:B=0: FOR К=1 ТО 4:А=А+В (К) * 16 ~(4-K):NEXT 15 FOR К=6 ТО 9:В=В+В (К) * 16 ~(9-K):NEXT:RETURN 4 В примере использованы среди других: оператор DFF SEG, IF-конструкции нескольких видов и функции PEEK, ASC и MID$ языка. Программа на основе запрошенного адреса и длины области памяти выводит ее содержимое (в цифровом или сим- вольном виде) на экран дисплея. Адрес области задается в виде XXXX:YYYY (база+смещение), принятом в документации по системе IBM PC. В частности, программа позволяет : ыво- дить на экран дату создания версии базовой системы вво- да/вывода (БСВВ I BIOS) ОС ПЭВМ (16-ричная адресация FOOO:FFF2,10) и перевод 16-ричных чисел в десятичные. Пример 2. Программа динамической модификации функции пользователя (FUNCTION) 1 REM Динамическое изменение функций (FUNCTION) 2 DEF FNA(T)=46*T~3 3 PRINT FNA(5): 'Вычисления с функцией 4 INPUT ’’Новая (1-Д/2-Н)”; T:ON Т GOTO 5:END 5 INPUT ’’Функция: ”, X$:X$=”2 DEF FN”+X$ 6 OPEN ”O”,1,’’B:FN.bas”:PRINT #1,XS 7 CLOSE:CHAIN MERGE ”B:FN”,2,ALL В данном примере предлагается один простой подход для динамической модификации функции пользователя, использую- щий загрузку в память по оператору CHAIN MERGE определе- ния новой функции с передачей ему управления. Подобный подход может быть положен в основу динамической модифи- кации программ пользователя в процессе их выполнения. Пример 3. Программа вывода всех допустимых символов на экран дисплея (SYMBOLS) OCLS: Т=5: D=19: REM Вывод на экран допустимых символов (SYMBOLS)! 1 KEY OFF:SCREEN 2:LOCATE 2,31:PRINT "Таблица символов экрана”
2 g=-16:F0R K=0 TO 255 STEP 16:T=T+1:G=G+16:D=LEN(STR$(G)) 3 LOCATE T,17-D:PRINT G;CHR$(165);” :FOR J=0 TO 15 4lFK+J=11 OR K+J=12 OR K+J=1O THEN PRINT ” .GOTO 6 ELSE 5 IF K+J=13 THEN PRINT ” .GOTO 6:ELSE PRINT CHR$ (K+J)+” 6 NEXT SPRINT TAB (68): CHR$(165):NEXT KiLOCATE 5,18:FOR K=0 TO 49 7 PRINT CHR$(164); :NEXT:LOCATE 22,18:FOR K=0 TO 49:PRINT CHR$ (164); 8 NEXT.LOCATE 4,20:FOR K=0 TO 15:PRINT HEX$(K)+” :NEXT 9 LOCATE 25,22:INPUT ’’Символ в клетке (К,J) таблицы = CHR$(K+J) ",Х$ Программа SYMBOLS выводит на экран все допустимые изображения символов с кодами от 0 до 255. Многие пользо- ватели ПЭВМ, как это ни удивительно, никогда не видели пол- ного набора символов, так что это может представить опре- деленный интерес. Программа выводит символы в виде табли- цы по 16 символов в каждой из 16 строк. Строки таблицы нумеруются от 0 до 240 с шагом 32, а столбцы - от 0 до F. Символ С$, стоящий в клетке (А,В) таблицы, имеет код А+В, т. е. C$=CHR$(A+B). В программе использованы средства языка по управлению курсором и выводом на экран. Пример 4. Программа для контекстного редактирования ис- ходных модулей программ (CONTEXT) 1 REM ’’Контекстное редактирование программ” (CONTEXT) 2 INPUT ’’Задать имя тома с программой (A*B):”,A$:D=1 3 INPUT ’’Задать имя исходного модуля прог-мы:”,В$ 4 INPUT ’’Редактировать автоматически (1-Д/2-Н):”,Т:С=0 5 OPEN ”l”,1,A$+”:”+B$:OPEN А$+”:Х” AS 2 LEN=254;GOSUB 36 6 IF EOF (1) THEN CLOSE 1;GOTO 8 ELSE LINE INPUT #1,W$ 7 LSET Y$=W$:PUT #2:D=D+1:GOTO 6 8 FOR K=1 TO 100:CLS:LOCATE 10:LINE INPUT ”Context:”:X$ 9 LOCATE 16:LINE INPUT ’’Text for substitution:”;Z$:G=G+1 Ю AG$(K,1)=X$:AG$(K,2)=Z$ 111F X$=”FFF” OR X$=”fff” THEN 12 ELSEiNEXT К 12 CLSiLOCATE 10,20:PRINT ’’ONE MOMENT, PLEASE...” 13 G=G-1:FOR K=1 TO D:GET #2,K:GOSUB 37-.FOR L=1 TO G:Z=1 14 Q=INSTR(Z,W$,AG$(L,1)):IF Q>0 THEN 15 ELSE GOTO 28 15 IF T=1 THEN 18 ELSE CLS:LOCATE 10:PRINT ’’Замену ’’; 16 PRINT AG$(L,1);” ->”;AG$(L,2);” в строке: ”:PRINT W$ 17 INPUT ’’делать (1-Д/2-Н): ”;W:0N W GOTO 18 18 IF LEN(AG$(L,2))=0 THEN S$=AG$ (L,1): GOTO 19 ELSE GOTO 21 19 W$=LEFT$(W$, INSTR (W$,S$)-1)+MID$ (W$, LEN (S$) + INSTR (W$,S$)) 20 Z=Q:GOTO 14 21 IF LEN(W$) + LEN(AG$(L,2)) - LEN(AG$(L,1))<=254 THEN 26 ELSE
22 PRINT ’’Замена”; AG$(L,1);” ->; AG$(L,2);” в строке # 23 PRINT MID$(W$,1,INSTR(W$,” ”)-1);” невозможна из-за” 24 INPUT ’’Превышение длины в 254 Б. Продолжить (1-Д/2-Н)”; F# 25 IF F=1 THEN 28 ELSE PRINT ’’Конец редактирования”: END 26 F$=MID$(W$, 1 ,Q-1)+AG$(L,2)+MID$(W$,Q+LEN(AG$(L, 1))) 27 W$=F$: Z=Q+LEN(AG$(L,1)): GOTO 14 28 Z=1:NEXTL 29 LSET Y$=W$:PUT #2,K:GOTO 30 30 NEXT K:OPEN ”0”,1,A$+”:”+MID$(B$,1,INSTR(B$,”.”))+”AAA” 31 FOR K=1 TO D:GET #2,K;GOSUB 37.PRINT #1,W$:NEXT KiCLOSE 32 KILL A$+”:X”:CLS:LOCATE 10,20;PRINT ’’Результат редактиро” 33 PRINT ’’вания в A$+”:”+MID$(B$,1,INSTR(B$,”.”))+”AAA” 34 LOCATE 19,20: INPUT ’’Работу c <Context> пов-ть (1-Д/2-Н):”;Т 35 CLS:ERASE AG$:ON T GOTO 2: PRINT ’’Конец редактирования”: END 36 DIM AG$(100,2):Y$=SPACE$(254):FIELD #2,254 AS Y$:RETURN 37 FOR LL=254 TO 1 STER - 1 38 IF MID$(Y$,LL,1) <> ” ” THEN 39 ELSE:NEXT LL 39 W$=MID$(Y$,1,LL):RETURN При отладке исходных модулей программ на ПЭВМ ИС- КРА 1030 пользователь часто сталкивается с необходимостью контекстного редактирования исходных модулей программ, т. е. замены отдельных элементов программы (идентификато- ров переменных и массивов, операторов, параметров опера- торов, значений символьных выражений и т. п.) некоторыми другими элементами. Данная процедура достаточно трудоемка для больших исходных модулей, так как язык БЕЙСИК не со- держит специальных средств, предназначенных для этих целей. Приведенная выше программа позволяет автоматизи- ровать метод контекстного редактирования исходных оду- лей программ в языковой среде БЕЙСИКа. Работа ^осуществля- ется в диалоговом режиме, и прозрачная структура программы не требует ее детального описания. Следует отметить, что исходные модули программ можно также контекстно редак- тировать с помощью строкового редактора EDLIN и Редактора текстов. Однако описанная в настоящем примере программа наряду с иллюстрацией средств языка БЕЙСИК для решения подобных задач выполняет указанную функцию эффективнее. Пример 5. Программа символьного умножения полиномов с действительными коэффициентами (POLYNOM) 1 REM Символьное умножение полиномов (POLYNOM) 2 DIM А(30,2), В(30,2), С(900,2), U(900,2) 3 INPUT ’’Ввести полином P(X)=AnX "n+...+Ao:”,P$:S$=” ” 4 INPUT ’’Ввести полином R(X)=BpX ~p+...+Bo:”,R$ 5 X$=MID$(P$,INSTR(P$,”(”)+1, INSTR (P$,”)”) - INSTR (P$,”(>1 2 3 4 5 6) 6 F$=”+”: J$=”-”:G$=P$: GOSUB 21:M=Q:FOR K=1 TO 30
7 FOR J=1 TO 2:B (K,J)=A(K,J):A(K,J)=O:NEXT J:NEXT K:1 =0 8G$=R$:GOSUB 21:N=Q:R=M*N;FOR K=1 TO M:FOR J=1 TO N:l=l+1 9 C(l, 1 )=A(J, 1)*B(K, 1):C(I,2)=A(J,2)+B(K,2): NEXT J:NEXT:D=1 Ю FOR K=D TO R:FOR J=K+1 TO R:IF C(K,2)oC(J,2) THEN 12 ELSE 11 C(K, 1 )=C(K, 1 )+C( J, 1): C( J+1 )=0: C( J,2)=0 12 NEXT J:NEXT K:IF K>R-1 THEN D=0: GOTO 13 ELSE D=D+1 : GOTO 10 13 FOR K=1 TO R:IF C(K,1)=0 THEN 15 ELSE 14 D=D+1: U(D, 1 )=C(K, 1):U(D,2)=C(K,2) 15 NEXT К 16P=0:FOR K=1 TO D-1:IF U(K,2)>= U(K+1,2) THEN 18 ELSE 17P=P+1:SWAP U(K,1), U(K+1,1):SWAP U(K,2), U(K+1,2) 18 NEXT K:IF P=0 THEN PRINT:GOSUB 34 ELSE GOTO 16 19 INPUT "Работу повторить (1-Д/2-Н): ”;T:ON T GOTO 20:END 20 CLS:ERASE A,B,C,U:GOTO 2 21 S$=MID$(G$,INSTR(G$,”=”)+1): P=LEN (S$):D=1:Q=0:K=1:Z$=” ” 22 FOR J=K TO P:V$=MID$(S$,J,1):IF V$=F$ OR V$=J$ THEN 24 ELSE 23 Z$=Z$+MID$(S$,J, 1):NEXT J 24 IF K=1 THEN 25 ELSE Z$=” ”+MID$(S$,J-LEN(Z$),1)+MID$(Z$,2) 25 T=INSTR (Z$,X$):IF T >0 THEN 27 ELSE 26 A(D,1)=VAL (MID$(Z$,2)): A(D,2)=0:GOTO 32 27 L=INSTR (T,Z$, ” "”):A(D,1)=VAL (MID$(Z$,2,T-2)) 28 IF L >0 THEN 29 ELSE A(D,2)=1:GOTO 32 29 C=INSTR (MID$(Z$,L+1), ”#”): IF C>0 THEN 31 ELSE 30 A(D,2)=VAL (MID$(Z$,L+1)): GOTO 32 31 A(D,2)=VAL (”-”+MID$(Z$,L+2)) 32 Q=Q+1: D=D+1: K=J+1 : Z$=” ” : IF К <=P THEN 22 ELSE 33 RETURN 34 PRINT "Вывод результата умножения полиномов:” :PRINT ”S=”; 35 FOR K=1 TO D:IF U(K,1) >0 THEN 39 ELSE 36 PRINT U (K,1); :IF U(K,2)=0 THEN 40 ELSE 37 IF U(K,2)=1 THEN PRINT X$; :GOTO 40 ELSE 38 PRINT X$; ” U(K,2); :GOTO 40 39 PRINT :GOTO 36 40 NEXT K:PRINT:RETURN Приведенная программа позволяет осуществлять символь- ное умножение полиномов от одного аргумента. Полиномы вво- дятся в виде F(X)=AnX ~п +... + А1Х + Ао, где коэффициенты Ак должны быть числовыми и их общее число для каждого полино- ма не должно превышать 30. При вводе полиномов должны ко- дироваться и единичные коэффициенты, а отрицательные сте- пени при аргументе должны кодироваться через символ Например, Р(Х)=5Х ~3+1Х ~#2-45Х+19.88. Алгоритм функцио- нирования программы весьма прост и сводится к следующему. На основе входных данных формируются два двумерных мас- сива А и В, содержащих коэффициенты (первый столбец) при соответствующих степенях (второй столбец) переменной поли-
номов. После этого процедурами умножения (второй столбец) и сложения (первый столбец) данных массивов формируется двумерный массив С, содержащий в промежуточном виде ре- зультат умножения исходных полиномов. Перед получением окончательного результата в массиве U производятся действия, эквивалентные приведению подобных членов и упорядочению в порядке возрастания степеней элементов результирующего полинома. Данная программа может быть расширена на другие операции в поле полиномов с рациональными коэффициентами. Приведенная программа представляет один простой пример организации вычислений с полиномами на символьном уровне. Можно использовать и более сложные реализации алгоритмов для символьных операций с полиномами, что позволит в целом ряде случае вовсе отказаться от программирования при реше- нии математических и инженерных задач. Оставляем это чи- тателю в качестве очень интересного упражнения. Пример 6. Программа_ пооператорного представления ис- ходных БЕЙСИК-текстов (STRUCTUR) О CLS:REM Пооператорное представление программ (STRUCTUR) 1 SCREEN 2:LOCATE 10,25:PRINT ’’Пооператорное представле- ние” 2 LOCATE 12,31:PRINT ”БЕЙСИК-программ”:КЕУ OFF'.LOCATE 25,10 3 INPUT ’’Задать путь к исходной программе”, A$:CLS:SCREEN 0 4 LOCATE 25.25JNPUT ’’Работа с программой впервые (Y/N)”, Х$ 5 IF X$=”N” OR X$=”n” THEN P$=A$:GOTO 16 ELSE:CLS‘.SCREEN 2 6 LOCATE 10,20:PRINT ’’Идет преобразование БЕЙСИК-прог- раммы !” 7 A=INSTR(A$,”:”):B=INSTR(A$,”.”): IF A=0 THEN 9 ELSE 8 D$=MID$(A$,1,A) 9 IF B<>0 THEN 10 ELSE P$=D$+MID$(A$,A+1)+”.STR” : GOTO 11 10 P$=D$+MID$(A$,A+1,B-A)+”STR” 11 ON ERROR GOTO 27:OPEN ”l”,#1, A$:OPEN ”0”,#2,P$:X=1 12 PRINT #2,” ”:LINE INPUT #1,W$:Z=1 :L=1:FOR K=1 TO LEN(W$) 13 G=1:IF ASC(MID$(W$,K,1))=58 THEN GOSUB 25 ELSE 14 NEXT K:IF L >= LEN(W$) THEN 15 ELSE GOSUB 25 15 IF EOF (1) THEN 16 ELSE L=0:X=1 :GOTO 12 16 CLS:CLOSE:LOCATE 10,23:PRINT ’’Структурированный файл *”; P$ 17 LOCATE 12.24JNPUT ’’Вывести данный файл на печать (Y/N)”,X$ 18 IF X$=”Y” OR X$=”y” THEN 21 ELSE LOCATE 14,24 19 INPUT ’’Работу с программой продолжить (Y/N)”, X$ 20 IF X$=”N” OR X$=”n” THEN NEW ELSE RUN 21 CLSrLOCATE 10,26:INPUT ’’Приготовить принтер - <ПУСК>”,Х$
22 ON ERROR GOTO 27WIDTH ”LPT1;”,255:OPEN P$ FOR INPUT AS #1 23 G=2:LINE INPUT #1,C$:LPRINT C$:GOTO 23 24 CLOSE:CLS:GOTO 19 25 L=K:S$=SPACE$(X):PRINT #2,S$+MID$(W$,Z,K-Z) 26 X=INSTR(W$,” ”) +1:Z=K+1:RETURN 27 IF ERR=62 AND G=1 THEN 16 ELSE IF ERR=62 AND G=2 THEN 24 ELSE 28 IF ERR=53 THEN CLS:PRINT ’’Отсутствует файл A$; P$:GOTO 19 29 PRINT ’’Ошибка ERR=”; ERR;” в строке ERL:GOTO PRE- SUME В процессе работы с ПЭВМ часто приходится не только ис- пользовать уже готовое или разрабатывать оригинальное ПО, но и адаптировать или модифицировать те или иные програм- мные средства, написанные на языке БЕЙСИК. Такая ситуация предполагает, в первую очередь, работу с листингами исходных текстов БЕЙСИК-программ. Однако при больших размерах программ, сложной структуре и сильно упакованном представ- лении (многооператорные программные строки) работа с ли- стингами весьма затруднительна и трудоемка. Предлагаемая в данном примере простая программа позволяет представить любой исходный БЕЙСИК-модуль в пооператорном виде, когда каждому оператору отводится своя строка и все операторы сгруппированы по программным строкам. Программа работает в режиме диалога с подсказками и в начале своего функционирования запрашивает путь к файлу с исходным БЕЙСИК-модулем. После получения ответа запра- шивается режим работы ’’Впервые (Y/N)”, определяющий соз- дание (Y) файла с пооператорным представлением исходного текста или использование (N) ранее созданного пооператорно- го представления. В первом случае на диске, содержащем исходный БЕЙСИК-текст, создается его пооператорное пред- ставление, файл с которым получает имя исходного текста, но расширение имени принимает вид ”.STR”. После этого пользователь получает возможность либо вы- вести пооператорный БЕЙСИК-текст на принтер, либо продол- жить/завершить работу с программой STRUCTUR. В примере используется ряд интересных возможностей языка БЕЙСИК: обработка ситуации ’’Конец файла” средствами обработки пре- рываний (строка 27), использование оператора GOSUB в теле оператора IF и другие. Пример 7. Программа упаковки и распаковки текстового файла (PROCPACK). О CLS.SCREEN 2:REM Упаковка/распаковка файлов (PROCPACK) 1 LOCATE 10,22:PRINT ’’Упаковка/распаковка текстовых фай- лов”
2 LOCATE 14,25:INPUT ’’Задать путь к искомому файлу”, А$ 3 LOCATE 16,25:INPUT ’’Упаковка (Р)'распаковка(и) файла?”,Х$ 4 KEY OFFzIF X$=”U” OR X$=”u” THEN 25 ELSE:CLS:SCREEN 2 5 LOCATE 10,24:PRINT ’’Идет упаковка текстового файла !” 6 GOSUB 35:A=INSTR (A$,”:”) :B=INSTR(A$,”.”):IF A=0 THEN 8 ELSE 7 D$=MID$(A$,1,A) 8 IF B< >0 THEN 9 ELSE P$=D$+MID$(A$,A+1)+”.PAK” GOTO 10 9 P$=D$+MID$(A$,A+1,B-A)+”PAK” 10 ON ERROR GOTO 21: OPEN ”I”,#1,A$:OPEN ”0”, #2, P$ 11 LINE INPUT #1,W$:L=LEN(W$):D=1 12 FOR K=D TO L:X=0:FOR J=K TO L 13 IF MID$(W$,J,1)<>MID$(W$,K,1) THEN 15ELSEZ=Z+1 14 NEXT J 15 IF Z<4 THEN R$=R$+MID$(W$,K,Z):D=K+Z:GOTO 12 ELSE Z$=STR$(Z) 16 R$=R$+MID$(W$,K,1)+CHR$(LEN(Z$)-1)+MID$(Z$,2):D=K+Z :GOTO 12 17 NEXT K:PRINT #2,R$:R$=SPACE$(0):GOTO 11 18 CLOSE:LOCATE 10,24:PRINT ’’Ваш файл”; P$;” упакован 19 LOCATE 12,22:INPUT "Работу с программой продолжить (Y/N)”, X$ 20 IF X$=”Y” OR X$=”y” THEN RUN ELSE CLS:NEW 21 IF ERR=62 AND ERL=11 THEN GOSUB 35:GOTO 18 ELSE 22 IF ERR=62 AND ERL=28 THEN GOSUB 35:GOTO 34 ELSE 23 IF ERR=53 THEN CLS:PRINT ’’Нет файла ”:A$;”/”;P$:GOTO 19 ELSE 24 CLS:PRINT ’’Ошибка ERR=”; ERR;” в строке ”; ERL:GOTO 19: RESUME 25 CLS:LOCATE 10,24:PRINT ’’Идет распаковка текстового файла!” 26 ON ERROR GOTO 22.OPEN ”I”,#1,A$:GOSUB 35 27 OPEN ”O”,#2,MID$(A$,1,INSTR(A$,”.”))+”UPK” 28 LINE INPUT #1,W$:L=LEN(W$):D=1:R$=SPACE$(0) 29 FOR K=D TO L:S$=MID$(W$,K,1) 30 IF ASC(S$) >3 THEN R$=R$+S$:GOTO 33 ELSE 31 FOR J=1 TO VAL (MID$(W$,K+1, ASC(S$)))-1 32 R$=R$+MID$(W$,K-1,1):NEXT J:D=K+ASC(S$)+1:GOTO 29 33 NEXT K:PRINT #2,R$:GOTO 28 34 CLOSE.LOCATE 10,30:PRINT ’’Ваш файл распакован !”:GOTO 19 35 LOCATE 25:TM=TM+1:IF TM>1 THEN LOCATE 25,44:GOTO 37 ELSE 36 PRINT ’’Начало упаковки/распаковки - ”; TIME$:RETURN 37 PRINT ’’Конец упаковки/распаковки - ”; TIMES: TM=O:RETURN Компактное представление информации в ЭВМ всегда явля- лось актуальной проблемой. В случае же класса ПЭВМ, имею- щих сравнительно небольшие ресурсы внешней памяти, данная проблема становится еще более актуальной. Для ее решения существует целый ряд методов и подходов, по которым су-
шествует достаточно много литературы. Приведенная в на- стоящем примере программа PROCPACK реализует один простой подход к решению задачи упаковки/распаковки тексто- вых файлов. Суть подхода состоит в следующем. Читается по логическим записям исходный символьный файл, и в каждой записи отыскиваются все вхождения симво- лов X кратности К >3 и в выходную упакованную запись вместо каждого такого вхождения помещается группа символов XCHR$(L)A$ длиной не более 5, где K=VAL(A$), LEN(A$)=L, L=1*3 и X есть любой допустимый символ, для которого ASC(X)>3. При распаковке производится операция, обратная описанной. Длина логических записей файла, обрабатываемо- го программой PROCPACK, не должна превышать 255 байтов, а сам файл должен быть символьным (исходный модуль, текст и т. д.). В начале своей работы программа запрашивает путь к фай- лу и режим его обработки: упаковка (Р) или распаковка (U). В первом режиме упаковываемся заданный файл, и результат упаковки помещается в файл на том же диске и с тем же име- нем, что и исходный файл, но расширение его имени имеет вид ”.РАК”. Во втором режиме происходит распаковка задан- ного файла и ее результат помещается в файл с расширением имени ”.UPK”. После завершения каждого режима пользователь получает возможность либо повторить работу с программой, либо завершить ее. Применение программы PROCPACK особенно эффективно для текстовых файлов, содержащих различного рода вхожде- ния кратных символов: таблицы, диаграммы, схемы и так да- лее. Так, применение данной программы к подобному файлу размера 15 Кбайт потребовало 12 мин для его упаковки на дискете до 6 Кбайт и 4 мин для обратной операции распаковки. Полученная статистика показывает, что для упаковки 1 Кбайта требуется в среднем 1 мин, а для его распаковки в 4 раза меньше времени. При написаний программы PROCPACK ис- пользован ряд интересных возможностей языка: конструкции из числовых и символьных функций и выражений, обработка всех особых ситуаций только посредством специального об- работчика прерываний, использование оператора GOSUB в те- ле оператора IF, хронометрирование времени работы и др. Пример 8. Программа сортировки символьных и числовых файлов по логическому условию (PROCSORT) О CLS-.SCREEN 2:DIM G(60),S$(60): REM Сортировка файлов (PROCSORT) 1 LOCATE 10,20:PRINT ’’Сортировка символьных и числовых файлов” 2 LOCATE 14.25JNPUT ’’Задать путь к искомому файлу?”,A$:CLS 3 A=INSTR(A$,”:”):P$=MID$(A$,1,A)+”PARCELLA.S88”:LOCATE 8, 18
4 INPUT "Сортировать числовой (1) или символьный (2) файл?”,Z 5 KEY OFFilF Z=1 THEN CLS:GOTO 54 ELSE CLS:LOCATE 10,19 6 PRINT "Ввести логическое условие сортировки файла”: LOCATE 11,19 7 FOR К=1 ТО 42:E$=E$+CHR$(172):NEXT:PRINT E$:LOCATE 14,24 8 INPUT "Позиция, длина ключа сортировки?” ,A,B:D=D+1:LO- САТЕ 16,24 9 INPUT "Указать условие сортировки (<l>)?”, U$:LOCATE 18,21 10 INPUT "Логическое условие сформулировано (Y/N)?”,X$:T= =Т+1 11 G (T)=A:G(T+1)=B:S$(T)=U$:IF X$=”Y” OR Х$=”у” THEN 14 ELSE 12 LOCATE 20,21:INPUT "Указать логическую связку (AND I OR I NOR)?”,X$ 13 S$(T+1)=X$:T=T+1:CLS:LOCATE 14,24:GOTO 8 14 R$=R$+”28 IF M$=”MID$(W$,”:N$=”MID$(V$,”:FOR K=1 TO 60 STEP 2) 15 ON ERROR GOTO 39.IF G(K)=0 THEN 18 ELSE U1$=MID$ (STR$(G(K)),2) 16 U2$=”,”+MID$(STR$(G(K+1 )),2)+”)”:R$=R$+M$+U 1 $+U2$+ S$(K)+”=” 17 R$=R$+N$+U1$+U2$+ ” ” +S$(K+1)+ ” ”:NEXT К 18 OPEN ”0”, #1, P$:PRINT #1,R$+”THEN 30 ELSE" : CLOSE 19Q=0:CHAIN MERGE P$,20,ALL 20 KILL P$:CLS:KEY OFF:GOSUB 42.LOCATE 10,24 21 PRINT "Идет сортировка файла”; A$:F=0:OPEN ”I”,#1,A$ 22 LINE INPUT #1,W$:L=LEN(W$):Q=Q+1:IF EOF (1) THEN 24 ELSE 23 IF L<F THEN 22 ELSE F=L:GOTO 22 24 CLOSE:OPEN ’T',#1,A$:OPEN P$ AS 2 LEN=F:GOSUB 44:FOR K=1 TO Q 25 LINE INPUT #1,U$:LSET W$=U$:PUT #2,K:NEXT:CLOSE 1 26 IF VG=25 THEN 27 ELSE GOSUB 45 27 C=0:FOR K=1 TO Q-1:GET 2,K:V$=W$:GET 2,K+1:LOCATE 10:PRINT К 29 C=C+1:C$=V$:PUT 2,K:LSET W$=C$:PUT 2,K+1:LOCATE 10,75:PRINTK 30 NEXT K:IF 00 THEN 27 ELSE KILL A$:OPEN ”0”,#1,A$ 31 IFVG=25 THEN 57 ELSE FOR K=1 TO Q 32 GET #2,K:FOR J=F TO 1 STER-1:IF MID$(W$,J,1) <>” ” THEN 34 ELSE 33 NEXT J:PRINT #1,” ”:GOTO35 34 PRINT #1,MID$(W$,1,J) 35 NEXT K: GOSUB 43:LOCATE 18,25:PRINT "Файл ”;A$; "отсортирован!” 36 LOCATE 20,19:INPUT "Работу с программой продолжить (Y/N)?”,X$ 37 CLOSE:IF X$=”Y” OR X$=”y” THEN RUN ELSE KILL P$:NEW
38 REM Обработчик прерываний * ПТИ Госстроя ЭССР * Таллинн * 1988 39 IF ERR=15 THEN PRINT "Длина условия >255”:GOTO 36 ELSE 40 IF ERR=53 THEN CLS:PRINT "Нет файла ”;A$:GOTO 36 ELSE 41 CLS:PRINT ” Ошибка ERR=”;ERR;” в строке ”;ERL:GOTO 36- RESUME 42 LOCATE 25:PRINT "Начало сортировки файла -”;TIME$:RE- TURN 43 LOCATE 25,46:PRINT "Конец сортировки файла - ”;TIME$: RETURN 44W$=SPACE$(F):FIELD #2,F AS W$:RETURN 45I=2*D-1:FOR K=1 TO l:IF G(K)+G(K+1)>F THEN 52 ELSE NEXT К 46 FOR J=1 TO I STEP 2:T$=S$(J) 47 IF T$=”<" OR T$=”>” THEN 48 ELSE GOTO 52 48 NEXT J:FOR K=2 TO 1-1 STEP 2:Z$=S$(K):IF Z$=”AND” THEN 53 ELSE 49 IF Z$=”and” THEN 53 ELSE IF Z$=”OR” THEN 53 ELSE 50IFZ$=”or” THEN 53 ELSE IF Z$=”NOR” THEN 53 ELSE 51IFZ$=”nor” THEN 53 ELSE PRINT "Ошибка в лог-м условии”: GOTO 36 52 PRINT "Ошибка в условии сортировки. Ключи сортировки”: GOTO 36 53 NEXT K:RETURN:REM Сортировка числового файла * Lasnamae 200038 54 LOCATE 8,25:INPUT "Ввести условие сортировки (<!>)”, U$ 55 OPEN ”0”,1,P$:R$=”28 W=VAL (W$):V=VAL (V$): IF W”+U$+”=” 56R$=R$+”V THEN 30 ELSE”: PRINT #1,R$:CLOSE: CHAIN MERGE P$,57,ALL 57 OPEN ’T’,#1,A$:OPEN ”0”,#2,P$:ON ERROR GOTO 61:WHILE 42*47 58 INPUT #1,G:W$=STR$(G):PRINT #2,W$:WEND:CLOSE:GOTO 20 59 FOR K=1 TO Q:GET #2,K:PRINT #1,VAL (W$):NEXT K:GOSUB 43 60LOCATE 18,25:PRINT "Файл ”;A$;” отсортирован !”:GOTO 36 61 IF ERR=62 AND ERL=58 THEN CLOSE.GOTO 20 ELSE RESUME Сортировка является одной из самых массовых процедур обработки информации. Существует целый ряд алгоритмов раз- личного рода сортировок, многие из которых реализованы на ЭВМ. Как правило, стандартное ПО ЭВМ любого класса содержит средства сортировки информации в оперативной и/или внешней памяти (НМЛ, НГМД, НМД). Так, ОС АДОС 2.0 или любая версия MS DOS содержит внешнюю команду SORT, позволяющую сор- тировать по одному ключу данные, поступающие со стандарт- ного устройства ввода. Однако, для целого ряда применений данное средство оказывается неприемлемым. Например, си- стемная команда SORT не позволяет сортировать числовые файлы. В данном примере приводится программа PROCSORT,
позволяющая сортировать дисковые символьные и числовые файлы по сложному логическому условию. В начале своей работы программа запрашивает путь к сор- тируемому файлу и его тип: числовой (1) или символьный (2). Во втором случае программа требует определить полное логи- ческое условие сортировки: - позиции в записи файла и длины ключей сортировки; - условие сортировки для каждого ключа (<1>); - логическая связка между ключами сортировки (AND I OR I NOR). В общем виде логическое условие и алгоритм сортировки име- ют вид: IF К\ А1 К12 ^...К^ An Kn2 THEN <Нет> ELSE <Сортировка>, где K'j - значения соответствующих ключей двух любых записей сортируемого файла, А, - условие сортировки по j-му ключу и Up есть логическая связка между условиями сортировки по j-му и 0+1)-му ключам сортировки (i,j=1 + n; р=1+(п-1)). Дан- ное логическое условие говорит о том, что если оно справедли- во для какой-либо пары записей сортируемого файла, то записи этой пары остаются на своих местах, в противном случае они меняются местами. Сама же принципиальная схема сортировки состоит в сле- дующем. На основе сортируемого последовательного файла создается промежуточный файл PARCELLA.S88 произвольного доступа, который и сортируется согласно заданному логиче- скому условию, и результат сортировки помещается на место исходного файла. При этом промежуточный файл удаляется, а возникающие основные особые ситуации и проверка вводи- мой пользователем управляющей информации обрабатываются программно. Программа PROCSORT позволяет сортировать символьные файлы, длина записей которых не превышает 255 байтов, а раз- меры файлов ограничены только доступной внешней памятью гибкого, жесткого или виртуального дисков. Программа не яв- ляется быстрой и для сортировки 1 Кбайта в среднем требуется около минуты. В случае числового файла программа запрашивает только условие сортировки: ”<” - сортировка по убыванию и ”>” - сор- тировка по возрастанию значений записей файла, как и в слу- чае символьного файла. Общая схема сортировки состоит в следующем. Динамически генерируется программная строка (строка 28), определяющая логическое условие сортировки, заданное пользователем, и на основе числового файла форми- руется промежуточный символьный файл. На основе получен- ного символьного файла формируется файл произвольного до- ступа, записи которого и подвергаются сортировке по опреде-
ленному алгоритму. Наконец, записи отсортированного файла произвольного доступа преобразуются обратно в числовую фор- му и образуют отсортированный числовой файл, замещающий исходный файл. При написании программы использовался ряд интересных возможностей языка БЕЙСИК: программная обработка особых ситуаций, преобразование файла из одного типа в другой, дина- мическая модификация программы и др. Предложенная органи- зация программы может быть положена в основу средств сор- тировки более универсального назначения: другие более быстрые алгоритмы сортировки, снятие ограничения на длину записей сортируемого символьного файла и т. д. Оставляем решение этих интересных практических задач читателю в ка- честве весьма полезного упражнения. Пример 9. Программа форматирования текстового файла (FORMTEXT) О SCREEN 2:KEY OFF:CLS:REM Программа форматирования (FORMTEXT) 1 LOCATE 25,20:PRINT ”*** Программа форматирования текста ***” 2 LOCATE 10,25:INPUT ’’Задать путь к текстовому файлу”; F$ 3 LOCATE 14,25:INPUT ’’Задать путь к выходному файлу”; Y$:CLS 4 LOCATE 10,22:PRINT ’’Идет формирование выходного файла !” 5 OPEN ”I”,1,F$:L=0:GOSUB 27:OPEN ”I”,1>$:OPEN ”0” ,2, Y$ 6 LINE INPUT #1, S$:GOSUB 12:IF E0F(1) THEN 7 ELSE GOTO 6 7 CLOSE:CLS:LOCATE 10,20:PRINT "Отформатированный текст помещен 8 PRINT "в файл Y$:LOCATE 14,29:INPUT "Файл на принтер (Y I N)”;X$ 9 IF X$=”Y” OR X$=”y” THEN GOSUB 29 ELSE LOCATE 16,22 10 INPUT "Работу с программой продолжить (Y I N)”; X$ 11IFX$=”Y” OR X$=”y” THEN CLS:RUN ELSE CLS:NEW:END: REM Конец *** 12C$=SPACE$(0):REM Блок форматирования очередной строки файла 13 DIM A(3,50):A=0:T=LEN (S$):IF T=0 THEN 26 ELSE GOSUB 33 14 IF T=L OR L-T>INT (L/6) THEN C$=S$:GOTO 26 ELSE FOR K=1 TO T 15 IF MID$(S$,K,1)<> ” ” THEN 16 ELSE NEXT К 16 A=K:M=1:D=0:B=L-T:W=B:IF A=T THEN C$=S$:GOTO 26 ELSE 17 FOR K=A+1 TO T:IF MID$(S$,K,1) <> ” "THEN 20 ELSE A(1,M)=K 18F0RJ=K TO T:IF MID$(S$,J,1)<> ” "THEN 19 ESLE D=D+1:NEXT J 19 A(2,M)=D:M=M+1: A=J-1 :D=0:GOTO 17 20 NEXT K:U=1:FORK=1 TO M-1:A(3,K)=A(2,K):NEXT К 21 FOR K=1 TO M-1:A(3,K)=A(3,K)+1:B=B-1:IF B=0 THEN 23 ELSE
22 NEXT K:IF B>0 THEN 21 ELSE 23Z=1:FOR K=1 TO M-tW=A(1,K)-1 24 FOR J=Z TO W:C$=C$+MID$(S$,J 1) NEXT J:C$=C$+SPACE$ (A(3,K)) 25 Z=A(1,K)+A(2,K):NEXT K:C$=C$+MID$(S$,A(1,M-1)+A(2,M-1)) 26 PRINT #2 C$:ERASE A:RETURN:REM PTI Gosstroj ESSR * Tallinn 27 LINE INPUT #1,W$JFLEN(W$)<L THEN 28 ELSE L=LEN(W$) 28IFEOF(1) THEN CLOSE:RETURN ELSE GOTO 27 29 LOCATE 10,22:CLS:INPUT ’’Подготовить принтер - <ПУСК>" x$ 30LPRINT CHR$(27);”1”:WIDTH ”LPT1”,LCLS:REM Файл -> принтер 31 LOCATE 14,26:PRINT ’’Идет вывод файла на принтер T OPEN ”I”,1,Y$ 32LINE INPUT #1,W$:LPRINT W$:IFE0F(1) THEN RETURN ELSE GOTO 32 33 IF ASC(MID$(S$,T,1))<> 32 THEN 34 ELSE T=T-1:GOTO 33 34RETURN:REM Блок установки действительной длины строки Для работы с текстовой информацией ПО ПЭВМ располагает большим набором средств различного назначения. Одним из примеров служит описанный в гл. 8 пакет ’’Редактор текстов”. Приведенная в данном примере небольшая программа FORM- TEXT предназначена для форматирования текстового файла, состоящего в выравнивании по правой границе всех его запи- сей. При этом предполагается, что форматируемый файл со- держит логические записи-предложения длиной не более 255 символов, состоящие из слов, разделенных символами пробела. В результате форматирования каждая строка текста выравнивается по правой максимальной для данного текста границе, не изменяя своего положения относительно левой границы. Суть алгоритма форматирования состоит в следую- щем. Определяется длина максимальной строки файла, и все остальные его строки раздвигаются вправо до этой длины путем увеличения промежутков (пробелов) между словами. Промежутки увеличиваются равномерно слева направо на один пробел за каждый проход до полного выравнивания строки по правой границе. Для пользователя может пред- ставить интерес реализация данного алгоритма с помощью специального массива А(3,50), в первой строке которого фор- мируются номера позиций начала промежутков в строке, во второй - длины этих промежутков и в третьей - новые длины с учетом раздвижки строки. После формирования дан- ного массива легко организуется простой и быстрый алгоритм форматирования строк текста. В начале своей работы программа FORMTEXT запрашивает пути к форматируемому и выходному файлам. После формати- зации результат помещается в выходной файл, о чем пользова- тель получает сообщение. После этого имеется возможность
вывести выходной файл на печать, повторить работу с прог- раммой или прекратить ее. Приведенная программа может оказаться хорошим дополнением к Редактору текстов для оформления на печать различного рода текстовых материалов. При написании программы использован ряд интересных средств и возможностей языка БЕЙСИК: совместное исполь- зование операторов ERASE и DIM для обнуления массивов, функции символьных аргументов, управление печатью, при- менение операторов GOSUB,NEXT и RETURN в теле оператора IF и др. возможности языка. Пример 10. Программа свертки БЕЙСИК-программ (RARTUR89) 0 CLSrSCREEN 2:U=999:DIM S$(U), 0$(30):REM Свертка прог- рамм (RARTUR89) 1 O$(1)=”RUN":O$(2)="GOSUB”:O$(3)=”THEN”:O$(4)=”GOTO"- O$(5)=”ERL” 2 O$(6)=”RESTORE”:O$(7)=”RESUME”:O$(8)=”RETURN”:LOCATE 10,20 3 INPUT "Задать путь к исходной БЕЙСИК-программе”; A$:T=1:KEY OFF 4 LOCATE 14,23:INPUT "Список операторов перехода расши рить (Y I N)”;T$ 5 D1=9:IF T$o”Y” AND T$<>”y” THEN 8 ELSE CLS 6 INPUT "Ввести оператор - конец (*)”;L$:IF L$=”*” THEN 8 ELSE 7 O$(D1)=L$:D1=D1+1:GOTO 6 8 D=INSTR(A$,”.”):L=D+(LEN(A$)+1 )*ABS((SGN(D)~ 1))-1 :OPEN ”I”,1,A$ 9 CLSzLOCATE 10,22:PRINT "Идет свертка Вашей программы:”; А$ 10 LINE INPUT #1,W$:N=N+1:FOR 1=1 TO D1-1 11 IF INSTR(W$,0$(l))=0 THEN 12 ELSE N$=0$(I):GOSUB 22 12 NEXT l:IF E0F(1) THEN CLOSE:GOTO 13 ELSE GOTO 10 13 OPEN ”I”,1,A$:B$=MID$(A$,1,L)+”.ART”:OPEN ”0”,2,B$:T1=T 14 ON ERROR GOTO 34:LINE INPUT #1,W$:GOSUB 42:Y$= W$:GOSUB 38 15 IF R=0 THEN 16 ELSE GOSUB 36 16 LINE INPUT #1,W$:GOSUB42:GOSUB38:IFR=1 THEN GOSUB 37:GOSUB 36 ELSE 17 IF LEN(W$)+LEN(Y$)>254 THEN GOSUB 37:GOSUB 36 ELSE 18 Y$=Y$+”:”+MID$(W$,INSTR(W$,” ")+1):GOTO 16 19 LOCATE 10,17:PRINT "Свернутая программа помещена в файл:”; В$ 20 LOCATE 14,22:INPUT "Работу с программой <RARTUR89> кончить (Y I N)”;X$ 21 IF X$=”Y” OR Х$=”у” THEN CLS:NEW ELSE RUN 22 D=LEN(N$):C=1:Q=1:REM Блок идентификации программных строк
23 ON ERROR GOTO 31:P=INSTR(C,W$,N$):IF P=0 THEN 30 ELSE C=P+1 24S=P+LEN(N$)+1:FOR K=S TO LEN(W$):D$=MIDS(WS,K,1) 25IF D$<>”:” AND D$<>” ” THEN R$=R$+D$:NEXT К ELSE 26FORJ=QTO LEN(R$):IF MID$(R$,J,1)=” ” THEN 28 ELSE 27AR$=AR$+MID$(R$,J,1):NEXT J 28 IF ASC(AR$) < 48 OR ASC(AR$) > 57 THEN 29 ELSE GOSUB 32 29 IF J<LEN(R$) THEN Q=J+1:GOTO 26 ELSE R$=SPACE$(O):AR$= R$:GOTO 23 30RETURN-.REM Ращупкин Артур * Таллинн* Окса 4-6* 13.02.1989 31 RESUME NEXT:REM Блок обработки особых ситуаций 32 FOR Z=1 ТО T:IF S$(Z)=AR$ THEN 33 ELSE NEXT Z:T= T+1:S$(T)=AR$ 33 AR$=SPACE$(O):IF T>U-2 THEN GOSUB 40 ELSE:RETURN 34IF ERR=62THEN CLOSE:CLS:GOTO 19 ELSE RESUME1REM Обработчик 35 N$=MID$(W$,1,INSTR(W$,” ”)-1):RETURN:REM Вычисление номера строки 36 PRINT #2,W$:RETURN 14:REM Запись очередной строки в выходной файл 37 PRINT #2,Y$:RETURN:REM Запись опорной строки в выходной файл 38 GOSUB 35:FOR К=1 ТО T1:IF S$(K)=N$ THEN R=1:GOTO 39 ELSE NEXT:R=0 39RETURN:REM Проверка помеченности строк входной программы 40 DIM G$(U):FOR К=1 ТО T:G$(K)=S$(K):NEXT:ERASE S$:DIM S$(INT(3.5*U)) 41 FOR K=1 TO T:S$(K)=G$(K):NEXT:ERASE G$:RETURN:REM Размерность S$ 42 VG=INSTR(W$,”:REM”):IF VG>0 THEN W$=MID$(W$,1,VG-1) ELSE 43 RETURN:REM Блок удаления REM-операторов из программных строк При рассмотрении в гл. 5 вопросов разработки ПО в среде язы- ка БЕЙСИК в качестве одного из средств повышения произво- дительности БЕИСИК-программ и уменьшения их объемных характеристик предлагалось создавать многооператорные программы, т. е. программы, строки которых максимально насыщены операторами. Естественно, что БЕЙСИК-программы, состоящие из малооператорных строк, более прозрачны для их чтения и анализа, что существенно облегчает их отладку. Однако, отлаженные программы в ряде случаев целесообразно ’’сворачивать” в многооператорные аналоги. В случае больших программ такая процедура представляется достаточно трудо- емкой. Приведенная в настоящем примере простая программа RARTUR89 позволяет автоматизировать данную операцию по свертке БЕЙСИК-программ. Предполагается, что БЕИСИК-
программа находится в исходном виде в дисковом файле, все ее служебные слова языка закодированы заглавными буквами и в качестве основных разделителей полей в опера- торах использованы однократные символы пробела. В начале своей работы программа RARTUR89 запрашивает путь к файлу, содержащему исходный модуль БЕЙСИК-прог- раммы. После этого пользователь получает возможность до- определить операторы или функции языка, содержащие ссыл- ки на строки программы. Получив необходимую информацию, программа начинает процесс свертки, о чем на экрай выводит- ся соответствующее сообщение, сохраняющееся в течение всего времени свертки. По завершении работы на экран выво- дится имя файла, содержащего свернутую БЕЙСИК-программу, и пользователю предоставляется возможность либо продол- жить работу с программой RARTUR89, либо завершить ее. Имя свернутой программы образуется из имени исходного файла с добавлением расширения '.ART'. Реализованный в программе RARTUR89 алгоритм свертки достаточно прост и сводится к следующему. В исходной прог- рамме определяются все программные строки, на которые имеются ссылки по операторам GOTO, GOSUB, RUN, RESTORE, RESUME, RETURN, IF - THEN и системной функции ERL. В нача- ле работы программы пользователь имеет возможность рас- ширить данный набор служебных слов языка до 30 наимено- ваний. После этого исходный файл читается построчно. Прог- раммные строки, на которые имеются вышеуказанные ссылки, переносятся в выходной файл без изменений, а любая другая строка дополняется следующими за ней строками (если на них нет ссылок) на всю допустимую длину в 255 байтов. Свертка реализована с точностью до строки, а не отдельного операто- ра, чтобы излишне не усложнять программу RARTUR89. Остав- ляем читателю в качестве интересного практического упраж- нения задачу расширения функциональных возможностей дан- ной программы. При написании программы RARTUR89 исполь- зован ряд возможностей и средств, которые могут представить интерес при практической работе в среде языка БЕЙСИК. Пример 11. Программа перенумерации строк текста (RE- NUMSTR) 0 CLS:KEY OFF:SCREEM 2:REM Перенумерация строк файла (RENUMSTR) 1 LOCATE 10,27-.PRINT’’Перенумерация строк файла”:ЕОСАТЕ 14,17 2 INPUT ’’Задать пути к входному и выходному файлам”, Х$,У$ 3 LOCATE 16,25:INPUT ’’Указать длину поля нумерации”,L.CLS 4 LOCATE 10,25:PRINT ’’Идет перенумерация строк файла:”;Х$ 5 OPEN ”I”,1,X$:OPEN ”0”,2,Y$:ON ERROR GOTO 12 6 LINE INPUT #1,W$:IFVAL(MID$(W$,1,L))=0 THEN 8 ELSE T=T+1
7 G$=SPACE$(L):RSET G$=STR$(T)WS=GS+MIDS(W$,L+1) 8 PRINT #2,W$:G0T0 6 9 LOCATE 10,25:PRINT ’’Перенумерованный файл:”; Y$:LOCATE 25,15 10INPUT ’’Работу с программой ^RENUMSTR^ продолжить (Y I N)”, Z$ 111F Z$=”y” OR Z$=”Y” THEN RUN ELSE NEW CLS 12 IF ERR=62 THEN CLOSE CLS GOTO 9 ELSE RESUME Программа RENUMSTR примера реализует собой простой алгоритм перенумерации строк заданного текстового файла. Предполагается, что входной файл содержит строки длиной 1не более 255 байтов каждая, все или часть из которых иден- тифицируются номерами, занимающими первые К байтов за- писи. В начале своей работы программа запрашивает пути к входному и выходному файлам, а также число позиций для номера записи. Выходной файл получается из входного путем придания последовательности <А> номеров записей вида А=1,2,3.... Программа RENUMSTR оказывается весьма полез- ной в случае необходимости восстановления естественного порядка нумерации строк текстового файла (например, списка литературы) после его модификации, изменяющей естествен- ный порядок нумерации строк (см. пример 12). В процессе разработки модульного ПО или упорядочения его использования часто возникает задача создания различного рода программ-диспетчеров, управляющих ходом выполнения комплекса модулей. Подходов к их разработке достаточно много и определяются они в значительной мере используемой системой программирования и спецификой функционирования ПО. В настоящем примере приводится одна простая программа- диспетчер SERVIS, позволяющая в системе программирования БЕЙСИК организовать управление ходом выполнения комплек- са из не более чем 23-х БЕЙСИК-программ в режиме ’’меню”, т е. формировать простые пакеты программ. В начале своей работы диспетчер SERVIS запрашивает имя УВВ, содержащего пакет с самим диспетчером, модулем SERVIS.PRG и все БЕЙСИК-программы (в исходном виде), которые им управляются. После этого пользователь должен определить, работал ли он с пакетом ранее. Если работа с па- кетом впервые, то пользователю предоставляется возможность определить состав БЕЙСИК-программ, которые должны вхо- дить в состав формируемого пакета SERVIS. Осуществляется это вводом строк меню пакета в виде <номер>.Характеристика модуля - функция пакета>1< <имя модуля> и длиной не более 80 байтов каждая. Например: 21. Сортировка файлов на диске I PROCSORT I BAS Концом формирования пакета служит ввод набора ”FFF”. После этого на дисплей выводится меню сформированного пакета
cppVIS, И пользователь имеет возможность вызвать любую прОграмму-функцию пакета по ее номеру. После выполнения пункции управление возвращается диспетчеру (строка 65514), пользователь получает возможность либо продолжить рабо- ту либо перед завершением ее расширить функции пакета SERVIS. В следующем разделе демонстрируются возможности языка БЕЙСИК для задач моделирования на примере программ-ими- таторов работы универсальной машины Тьюринга и одномер- ных однородных структур, являющихся соответственно фор- мальными моделями последовательных и параллельных вы- числений. 6.2. МОДЕЛИРОВАНИЕ АБСТРАКТНЫХ ВЫЧИСЛИТЕЛЬНЫХ МАШИН ПОСЛЕДОВАТЕЛЬНОГО И ПАРАЛЛЕЛЬНОГО ДЕЙСТВИЯ Использование языка БЕЙСИК для задач моделирования в ряде случаев встречает существенные затруднения. Объяс- няется это, в первую очередь, интерпретативным характером языка и отсутствием в нем целого ряда средств, ориентирован- ных на задачи моделирования. На примере моделирования в среде языка БЕЙСИК двух известных абстрактных моделей вычислений: машин Тьюринга (формальная модель последова- тельных вычислений) и однородных структур (формальная мо- дель параллельных вычислений) демонстрируются не только возможности языка для решения подобного типа задач, но и скрытые особенности выполнения ряда его основных опе- раторов. Для теоретического исследования вопросов вычислимости используется ряд формальных моделей, из которых наиболее известной и популярной является машина Тьюринга (МТ) [162-165]. Она представляет собой чрезвычайно простое аб- страктное устройство, которое, тем не менее, может вычислять любую функцию или реализовать любой алгоритм. В настоя- щее время существует ряд модификаций МТ, эквивалентных между собой. Будем иметь дело с модификацией МТ, состоя- щей из конечного автомата (КА), внутренние состояния кото- рого являются элементами алфавита A={ai,a2,...,an,’}, беско- нечной в обе стороны ленты, разделенной на ячейки, и скани- рующей головки, соединяющей КА и ленту. В каждой ячейке ленты сканирующей головкой могут записываться или счи- тываться символы из некоторого алфавита ленты €={0,0!, с2,...,ср,’}. В алфавите С выделяются два специальных симво- Ла ”о” (пустой символ) и заключительный или финальный сим- вол Описанная выше модель МТ функционирует в дискрет- ные моменты времени Т=0,1,2,3,... по программе, команды ко- т°рой представляют собой упорядоченные пятерки вида aicp>akctU, выполняемые машиной следующим образом.
и X се се со СМ ю ю со о Z со СО — со ш СЕ СМ ш X ш ш СС о Пример 12. Программа-диспетчер пакета программ (SERVIS) ш со 5 5 СО 5 CD со о СП н S СО ф ф о СО СО со ш со см ш см Ю Ю Ю Ю со со ст> со СО со со со ш со ю о СМ см о ш со со — СМ О *о со ф со О. СО ф о 3 X ш си * о ш со о II см со Z СС о ш со со со •и 0 см Z сс СО ф СО II см ш со ш ф 2 СМ со со о ш со ю <о со ш со ф S II 2$ ф ш со со со ф со е со ш со СО см ш о ш ю ю со со о СО СО СО ю см СП о со со со ш ш со ш со СО СО со о X д см СО со ш со со а: ф S Ъ ь- со ю со со ш см LU о ф ш со СМ II см £ to со II см см СО со со со СО » - LLI о СЕ со ш со о ш СМ ш ш со ш СО СО СМ ш со ф СМ ш со со со со СО СЕ II О X ОС со см см СМ X см ш со СЕ ш со со ф ф II о со * со со ш со со UJ ф со 2 ф сс со см ф ф ф СО ф II см CD LLJ сс iu о bQ см см 4fc о. Z 0 о со" О см - Ш X ю = см со II СО со СО ю СМ со ш со см СО со со со ш о ш о ш см II см <Чй СО CD см со" см см со сО со см ш ш о ° О со X II ш СЕ ш со Z LU II о ю ю со со X со ю Ю со ЙХ О со -I о со о см со Й о о со X со 00 ш со сс — о ? 0 LU со о р uJ СП со со со со со со со Ю Ю СО со со со СО СО со со со со со со со со со со со со со со со со со со СО со СО со со см СО со со т- CJ см см со Ю со со со со со сП СО СР см ю сП СР
Если в момент времени Т>0 КА находится в состоянии а*, головка сканирует на ленте ячейку, содержащую символ ср и в следующий момент времени Т+1 головка записывает в эту Le ячейку символ сн КА переходит в новое состояние ак и ска- ниРУющая головка подвергается сдвигу U(R - сдвиг на ячейку вПраво, L - сдвиг на ячейку влево и S - остается на месте), работа МТ считается законченной, если КА переходит в фи- нальное состояние ”!” или головка на очередном шаге скани- рует символ В самом начале функционирования МТ (мо- мент Т=0) следует определить состояние КА из алфавита А и начальную конфигурацию ленты, содержащую конечное множество символов из алфавита С\{о,!}. В последующие дискретные моменты времени Т>0 функционирование МТ определяется согласно заданной программе. МТ, работающая по некоторой конкретной программе, на- зывается частной МТ, а МТ, моделирующая любую частную МТ, - универсальной (УМТ). Можно показать, что описанная выше модификация МТ эквивалентна УМТ. Учитывая чрезвы- чайную простоту и минимальный набор средств МТ, можно представить себе, насколько трудоемка и громоздка задача вычисления на ней достаточно сложных функций. Однако мы займемся значительно более простой задачей - моделиро- ванием УМТ на ПЭВМ ИСКРА 1030 в среде языка БЕЙСИК. Следует отметить, что данная задача моделирования пред- ставляет собой именно тот случай, когда языки интерпрети- рующего типа являются не совсем подходящим инструментари- ем по причине малой глубины внутреннего стэка. На конкретной реализации иллюстрируются приемы программирования, поз- воляющие сделать язык БЕЙСИК вполне приемлемым сред- ством моделирования подобных задач. Приводимый ниже листинг программы моделирования UMTURING снабжен необходимыми комментариями и вместе с приведенным опи- санием позволяет легко разобраться в программе и ее эксплуа- тации на ПЭВМ. О REM Моделирование универсальной машины Тьюринга (UMTURING) 1 SCREEN 2:CLS:D1=3000:DIM R$(D 1), A$(80), S$(80), P$(2500): KEY OFF 2 LOCATE 10,20:PRINT ’’Подождите, идет инициализация прог- раммы” 3 FOR К=1 ТО D1:R$(K)=”o”:NEXT:V$=CHR$(22):C$=SPACE$(80): CIS 4 AS=”Моделирование универсальной машины Тьюринга (УМТ)” 5 locate 10,15:PRINT A$:LOCATE 11,15.KEY OFF:FOR К=1 TO 49 6 RS=R$+CHR$(172):NEXT:PRINT R$:P=1:U=1:T=1:LOCATE 14,17 PRINT ’’Задать алфавит внутренних состояний КА для УМТ:” . 8 LOCATE 15,T:INPUT ;A$(T):IF А$(Т)=”!” THEN 9 ELSE T=T+1:GOTO8
9 LOCATE 17,23:PRINT "Задать алфавит символов на ленте:” 10 LOCATE 18,P:INPUT;S$(P):IFS$(P)=”!” THEN 11 ELSE P=P+1:GOTO 10 11 CLS:PRINT ”A=”; :FOR K=1 TO T-1:PRINT A$(K); :NEXT:PRINT >J . 12 PRINT ”S=”; .FOR K=1 TO P-1:PRINT S$(K); :NEXT:PRINT: LOCATE 3 13 INPUT ’’Алфавиты A,S правильны (у I n)”, L$:IF L$<>”y” THEN RUN ELSE 14 INPUT ’’Ввод УМТ-программы с консоли (1) или из файла (2)” р 15 ON F GOTO 17JNPUT ’’Путь к УМТ-программе”; X$:OPEN ”|”, I 1 Х$ 16 U=U+1:LINE INPUT #1,P$(U):IF E0F(1) THEN 19 ELSE GOTO 16 17 LOCATE 25:INPUT "Ввести очередную команду УМТ-програм- мы”; P$(U) 18 IF P$(U)=”!” THEN GOSUB 68 ELSE GOSUB 33:GOTO 17 19 LOCATE 5JNPUT "Задать начальные состояния KA и ленты”; А$, S$ 20 H=INT ((D1-LEN(S$))/2):FOR K=H TO H+LEN(S$)-1:Z=Z+1 21 R$(K)=MID$(S$,Z,1):NEXT:J=H+LEN(S$)-1:GOSUB 41:KEY (1) ON:F=F+1 22 ON KEY (1) GOSUB 62:IF R$(J)=”!” OR A$=”l” THEN 49 ELSE 23FORK=1 TO U:IF R$(J)=”!” OR A$=”!” THEN 49 ELSE 24 IF R$(J)+A$=MID$(P$(K),1,2) THEN 28 ELSE NEXT К 25 CLS:LOCATE 1O,25:PR1NT "Неопределенность в КА+ЛЕНТА=”; R$(J)+A$ 26 LOCATE 14,25:INPUT "Работу с УМТ продолжить (YI N)”, X$ 27 IF X$=”y” OR X$=”y” THEN RUN ELSE CLS:NEW:END 28 R$(J)=MID$(P$(K),5,1):A$=MID$(P$(K),6,1):X$=MID$(P$(K),7,1) 29 IF X$=’T” THEN J=J+1:Z=Z+1 ELSE IF X$=”l” THEN J=J-1: Z=Z-1 ELSE 30 IF Z>1 AND Z<80 THEN 31 ELSE H=J-39:Z=40 31 IF H<1 THEN GOSUB 63 ELSE IF J>1 AND J<D1 THEN 32 ELSE GOSUB 63 32 GOSUB 41:GOTO 23:REM Переход к выполнению новой команды 33 V$=CHR$(22):REM Блок синтаксического контроля УМТ-прог- раммы 34 FOR К=1 ТО P:IF MID$(P$(U),1,1)=S$(K) THEN 35 ELSE NEXT:GOTO 39 35 FOR K=1 TO P.IF MID$(P$(U),5,1)=S$(K) THEN 36 ELSE NEXT:GOTO 39 36 FOR K=1 TO T:IF MID$(P$(U),2,1)=A$(K) THEN 37 ELSE NEXT:GOTO 39 37 FOR K=1 TO TJF MID$(P$(U),6,1)=A$(K) THEN 38 ELSE NEXT:GOTO 39 38 Y$=MID$(P$(U),7,1):IF Y$=”r” OR Y$=”1” OR Y$=”s” THEN 40 ELSE 39 PRINT "Ошибка в кодировании команды: ”;P$(U):GOTO 17
LOCATE 24,33:PRINT U; ” ";P$(U):U=U+1:RETURN 41 g$=SPA'CE$(O):CLS:REM "Вывод очередного состояния УМТ на экран” _ LOCATE 25:PRINT ’’Очередной шаг УМТ = ”;F:LOCATE 22,26 1т PRINT ’’Текущее состояние ленты УМТ”:А=Н:1_ОСАТЕ 20 71FORK=A ТО A+79:G$=G$+R$(K):NEXT:PRINTG$:LOCATE 19.Z /«PRINT V$:LINE (261,25)-(339,63)„B:LINE (300,25)-(300,63) /«LINE (300,63)-((Z-1)*8+4,150):LOCATE 6,35:PRINT ”KA” 47 LOCATE 6,40:PRINT A$:LOCATE 2,22:PRINT ”УМТ работает по Вашей”; 48PRINT "программе!” :FOR К=1 ТО 2000:NEXT:F=F+1:RETURN 49 LOCATE 2,16:REM Блок завершения выполнения УМТ-прог- раммы «О PRINT ’’Программа выполнилась - финальное состояние УМТ’” 51 LOCATE T.INPUT "Результат УМТ на принтер (2-N)”, T ON Т GOTO 26 52 A=0:B=0:FOR К=1 ТО D1:IF R$(K)o”o” THEN А=К ELSE NEXT 53FORK=D1 TO 1 STEP-T.IF R$(K)o”o” THEN B=K ELSE NEXT 54 IF A=0 THEN LOCATE 25:PRINT "Лента УМТ пуста !”:GOTO 26 ELSE 55 CLSJNPUT "Включить принтер - <ПУСК>”Х$:У/ЮТН ”LPT1:”,128 56 LPRINT TAB(46); "Результат вычисления УМТ-программы;” 57 LPRINT ТАВ(10);”Шаг УМТ=”;Р;ТАВ(50); "Состояние КА=”; A$:LPRINT 58 LPRINT ТАВ(49); "Финальное состояние yMT:”:LPRINT C$= SPACES (0) 59FORK=A ТО B:C$=C$+R$(K):IF LEN(C$)<127 THEN 61 ELSE 60 LPRINT C$:C$=SPACE$(0):REM Lasnamae * Partisan! 13-75 61 NEXT K:LPRINT C$:CLS::GOTO 26:REM Выход из состояния печати 62 INPUT’’Работу программы продолжить (1-N)”;X:ON X GOTO 26:RETURN 63 CLS:LOCATE 10,18:REM Реорганизация и удлинение УМТ-ленты 64 print ’’Исчерпана УМТ-лента - Идет ее реорганизация и удлинение” 65 D2=D1+500:DIM R1$(D1):FOR К=1 ТО D1:R1$(K)=R$(K):NEXT: erase r$ 66 DIM R$(D2):FOR K=1 TO D2:R$(K)=”o”:NEXT:FOR K=1 TO D1 67 R$(250+K)=R1$(K):NEXT:ERASE R1$:J=J+250:H=H+250:D1= 02:RETURN 22 68 CLSrLOCATE 10,20:REM Блок записи МТ-программы на диск 69 INPUT ’’Вашу МТ-программу записать на диск (1-N)”;X:ON X GOTO 19 70 LOCATE 12,25:INPUT "Задать путь к файлу с программой”;Х$ 41 IF INSTR (Х$,”.”)=0 THEN X$=X$+”.UMT” ELSE 72 OPEN ”O”,1,X$:FOR K=1 TO U:PRINT #1,P$(U);NEXT:CLOSE: RETURN
Приведенная программа UMTURING представляет собой ими. татор УМТ. Входными данными для него являются: алфавиты состояний КА и ленты, программа работы МТ, а также аналь- ные состояние КА и конфигурация ленты. Результатом выпол- нения имитатора является пошаговая трассировка на экране работы УМТ, представляющая собой графическую модель машины, состоящую из КА, ленты и сканирующей головки. ди. намика трассировки хорошо иллюстрирует принцип работы УМТ, выводя на экран наряду с моделью машины текущие номер шага, конфигурацию ленты, местоположение сканирую, щей головки и состояние КА, т. е. текущее состояние УМТ. При работе УМТ выход сканирующей головки за пределы экрана невозможен, так как имитатор контролирует расположение окна обзора состояния УМТ относительно центра экрана. Проб- лема останова УМТ также решена достаточно просто. При не- обходимости приостановить или прекратить работу имитатора достаточно нажать функциональную клавишу ”F1”. В общем же случае проблема останова УМТ, как известно, алгоритми- чески неразрешима. В начале функционирования имитатор запрашивает алфа- виты А внутренних состояний для КА и С состояний ячеек ленты УМТ. Оба алфавита формируются посимвольно, а кон- цом формирования служит ввод символа С целью визуаль- ного контроля оба алфавита выводятся на экран, предоставляя возможность исправить ошибки. Алфавит С должен содержать пустой символ ”о” и финальный символ который может вхо- дить и в алфавит А. Затем запрашивается ввод МТ программы, состоящей из конечного числа упорядоченных пятерок опи- санного выше вида. Вводить МТ-программу можно как из дискового файла, так и с консоли. В первом случае требуется задать к ней путь, тогда как во втором МТ-программа вводится покомандно, осуществляется синтаксический контроль каждой команды и при отсутствии ошибок она выводится на экран, формируя текст программы. Ввод МТ-программы завершается по символу При возникновении ошибки пользователь по- лучает возможность ввести ошибочную команду заново. По- сле завершения ввода программы имитатор предоставляет возможность записать введенную МТ-программу на диск и затем продолжить работу по ней. После получения всей МТ-программы имитатор запрашива- ет начальные состояние КА и конфигурацию ленты, длина ко- торой не должна превышать 80 символов из алфавита С\(о,!}. Получив данную информацию, имитатор начинает собственно процесс моделирования пошаговой работы УМТ по заданной МТ-программе и начальным условиям с выводом модели УМТ и ее текущего состояния на экран дисплея. Рабо- та имитатора прекращается, и УМТ переходит в финальное состояние в случае сканирования на ленте символа и/или перехода КА в состояние Результат вычисления можно вывести как на экран, так и на принтер. После завершения
яботы с очередной МТ-программой пользователь получает %зможность либо повторить работу УМТ с другой программой, Вцбо завершить ее. Описанная программа-имитатор UMTURING представляет собой своего рода инструментальное средство и среду разработки и выполнения МТ-программ и может пред- ставить определенный интерес при изучении основ теории алгоритмов и рекурсивных функций. При написании данной программы использовался ряд ин- тересных возможностей языка БЕЙСИК: динамическое изме- нение размерности массивов (при необходимости оперативно- го удлинения ленты УМТ), графическое оформление модели уМТ, использование оператора NEXT в теле операторов IF, использование оператора ON KEY, управление печатью и др. средства языка. Однородные структуры (ОСТ) являются дискретными си- стемами параллельной обработки информации. ОСТ можно интерпретировать не только как абстракцию различного рода динамических клеточных систем, но также как теоретические модели параллельной обработки информации, дискретных вычислительных устройств параллельного действия и т. д. С логической точки зрения ОСТ являются бесконечными ав- томатами со специфической внутренней структурой. Теория ОСТ (ТОС) может рассматриваться как структурная и дина- мическая теория бесконечных автоматов. В настоящее время ТОС составляет самостоятельную ветвь современной киберне- тики и служит теоретической основой моделирования многих дискретных процессов и объектов в различных областях [2, 18, 28, 31, 53, 54, 100, 119, 145, 166-171]. Дополнительная инфор- мация по ТОС и ее приложениям может быть найдена в прило- жении 10. Значительное внимание ряда исследователей было уделе- но вопросу исследования ТОС и ее приложений с помощью моделирования различного типа ОСТ на ЭВМ. В этом направле- нии получен целый ряд интересных прикладных и теоретиче- ских результатов. Подробнее о данной проблематике читатель может найти в вышеперечисленных работах. Здесь же в соот- ветствии с нашими целями рассматривается значительно более простая задача - моделирование в среде языка БЕЙСИК к-мерных параллельных алгоритмов (к-ПА), определяемых к-ОСТ для одномерного случая (к=1). Модель 1-ПА неформаль- но может быть определена следующим образом. В целочисленных точках z, (i=0,±, ±2,...) пространства Z помещается копия автомата Мура с алфавитом внутренних Состояний А={0,1,2,...,а-1). Конфигурацией (КФ) или словом 1-ПА называется любое отображение КФ: Z -> А. Множество всех таких КФ обозначим через CF. Для наших целей интерес бУдут представлять только конечные КФ, содержащие конеч- ное число символов из алфавита А\{0}. Состояние ”0” называ- йся состоянием покоя и его смысл прояснится несколько
ниже. Индекс соседства X={x1,x2,...,xrJ определяет для ажд0. го автомата z, структуры соседние ему автоматы, т. е авто' маты, которым zs непосредственно передает или от который получает информацию за один такт структуры. Координаты соседей ггавтомату определяются как i+Xj(j=1+n). Описанные выше компоненты определяют статическую часть 1-ПА. Функционирование же структуры определяется локаль- ной функцией перехода (ЛФП). ЛФП представляет собой любое отображение LF:An -> А и определяет состояние в момент времени Т+1 любого автомата z, в зависимости от состояний в момент Т всех его непосредственных соседей согласно индекса соседства X. Состояние покоя "О” связано для каждой ЛФП соотношением LF(O,O,...,O)=O и является своего рода ог- раничением на скорость передачи информации в однородных структурах. Одновременное применение ЛФП на всей области Z определяет глобальную функцию перехода (ГФП), представ- ляющую собой отображение GF:CF -> CF. Таким образом, ГФП за один такт (шаг) преобразует текущую КФ структуры в последующую, а 1-ПА представляет собой высокопараллель- ную систему переработки КФ, определяемую одновременным применением к текущей КФ системы подстановок a1a2...an-> элементы а'^а, (i=1*n) которых принадлежат множеству А. В отличие от УМТ под результатом вычисления 1-ПА некоторой конечной КФ естественно принять стабильную КФ, т. е. КФ, ко- торая под действием ГФП остается без изменения с точностью до сдвига. Для простейшего моделирования 1-ПА ниже предлагается программа-имитатор 1-PADHS, листинг которой хорошо обоз- рим, снабжен необходимыми комментариями и с учетом крат- кого описания особых пояснений не требует. О SCREEM 2:CLS:KEY OFF1REM Моделирование 1-мерных ОСТ * 13.02.89 1 LOCATE 25,19:PRINT ’’Моделирование 1-мерных однородных структур” 2 LOCATE 14,30:INPUT ’’Задать алфавит A”;A:LOCATE 16,27 3 INPUT ’’Задать индекс соседства”;N:LOCATE 18,25:DIM S1% (1000) 4 INPUT ’’Задать начальную конфигурацию”,-KF$:D=LEN(KF$): Q=0 5 FOR К=1 ТО D:S1%(K+N-1)=VAL(MID$(KF$,K,1)):NEXT:DIM S2% (1000) 6 LOCATE 20,18:PRINT ’’Ввести локальную функцию перехода с консоли” 7 FOR К=1 ТО 23:LOCATE K:PRINT SPACE$(80):NEXT:LOCATE 23,23 8 PRINT ’’Вводить функцию в виде a1...aN-a1 '”:DIM L%(A N,N+1) 9 LOCATE 22,23:INPUT ’’Ввести очередной набор для функции”;Ь$ 10 IF MID$(L$,1,1)=”!” THEN 12 ELSE GOSUB 25:P=P+1:FOR K=1 TO N
11 l%(P,K)=V-AL(MID$(L$,K,1)):NEXT:L%(P,N+1)=VAL (MID$(L$, N+2)):G0T0 9 12 ip p=A "N THEN 14 ELSE LOCATE 24,18:PRINT ’’Функция задана частично”; 13 INPUT ” - дополнить ее (Y I N)”;X$:IF X$=”Y” OR X$=”y” THEN 9 ELSE 14 DIM M%(P,N+1):FOR K=1 TO P 15 FOR J=1 TO N+1:M%(K,J)=L%(K,J):NEXT J:NEXT K:ERASE L%:CLS 16 LOCATE 10,19:PRINT ’’Идет моделирование определенного Вами 1-Па” 17 LOCATE 20,26:PRINT ”На шаге”;О;” 1-ПА длина КФ =”;D:KEY (1) ON 18 ON KEY (1) GOSUB 47:FOR K=1 TO D+N-1.FOR 1=1 TO P:FOR 1=1 TO N 19 IF S1%(K+J-1)=M%(I,J) THEN NEXT J:GOTO 21 ELSE 20 NEXT LPRINT ’’Недоопределение локальной функции” :GOTO 35 21 S2% (N-1+K) = M%(l, N+1):NEXT K:GOSUB 31 :IF D=B THEN 24 ELSE 22 ERASE S1%:DIM S1:(1000):FOR 1=1 TO B:S1%(N-1+I)=S2% (K-1+I):NEXT 23 ERASE S2%:DIM S2%(1000):D=B:GOTO 16 24 FOR 1=1 TO D:IF S1%(N-1+l)<> S2%(K-1+1) THEN 22 ELSE NEXT:GOTO 37 25 FOR K=1 TO N:W$=” ”+MID$(L$,K,1):REM Контроль локальной функции 26 FOR J=0 TO A-1:IF W$=STR$(J) THEN 27 ELSE NEXT J:GOTO 30 27 NEXT K:FOR J=0 TO A-1:IF MID$(L$,N+1,2)=STR$(J) THEN 29 ELSE 28 NEXT J:GOTO 30 29 RETURN:REM Tallinn * Mustamae * Artur * 13.02.89 * 2850-48 30 PRINT ’’Ошибка определения функции”:LOCATE 22,23:GOTO 9 31 Q=Q+1:M=D+2*N-2:IF M>10"3 THEN 42 ELSE.FOR K=N TOM 32 IF S2%(K)<>0 THEN 33 ELSE NEXT К 33 FOR J=M TO 1 STEP-1:IF S2%(J)<>0 THEN 34 ELSE NEXT J 34 IF K=M OR J=1 THEN D=1:G0T0 37 ELSE B=J-K+1:RETURN 35 LOCATE 1,22:INPUT ’’Работу с программой продолжить (Y I N)”,X$ 36 IF X$=”Y” OR X$=”y” THEN RUN ELSE NEW:REM Заверше- ние программы 37 CLS:LOCATE 10,20:PRINT ’’Ваш 1-ПА достиг финальной конфи- гурации!” 38 LOCATE 14,22:INPUT ’’Финальную КФ вывести на принтер (Y I N)”;X$ 39 IF X$o”Y” AND X$<>”y” THEN 43 ELSE LOCATE 16,27:CLS 40 INPUT ’’Подготовить принтер - <ПУСК>”;Х$:Ь/ЮТН ”LPT1:”,255 41 LPRINT ”CF:”:FOR 1=1 TO D:LPRINT S1%(N-1+1);'.NEXT l:CLS:GOTO 35
42 LOCATE 14,19:PRINT ’’Длина текущей КФ больше допустимой (1000)” 43 LOCATE 16,23:INPUT ’’Работать с новой начальной КФ (Y I N)”;X$ 44IFX$<>”Y” AND Х$<>”у” THEN CLS:GOTO 35 ELSE:LOCATF 18,31:0=0 45 INPUT ’’Задать начальную W”;F$:D=LEN(F$):ERASE S1 <DIM S1%(1000) 46 FOR K=1 TO D:S1%(K+N-1)=VAL(MID$(F$,K,1)):NEXT:CLS :GOTO 16 47 LOCATE 23,21:INPUT ”Choice:CF->PRN(1), SCRN(2), Conti- nue(3)”,Z 48 ON Z GOTO 49,51,52:CLS:GOTO 43 49 INPUT ’’Подготовить принтер - <ПУСК>”; X$:WIDTH ”LPT1:”, 255 50 LPRINT ”CF no.”; Q:FORZ=1 TO D:LPRINT S1%(Z);:NEXT :GOTO 52 51 CLS:FOR Z=1 TO DiPRINT S1%(Z);:NEXT:INPUT; B$ 52 CLS:RETURN:REM Конец обработки прерывания по клавише <F1> В начале своего функционирования имитатор запрашивает алфавит А состояний единичного автомата 1-ПА, ичдекс со- седства X и просит ввести с консоли параллельные под танов- ки av..an-a/, определяющие локальную функцию перехода. Для определения алфавита А={0,1,2,...,а-1} и индекса со- седства Х=(0,1,2,...,п} (а< 11) вводятся соответственно зна- чения для а и п. Ввод подстановок имитатор отслеживает и в случае обнаружения синтаксических ошибок требует по- вторить ввод. Если локальная функция задана полным набо- ром своих параллельных подстановок, то имитатор приступает к моделированию заданного 1-ПА, в противном случае пользо- ватель получает возможность либо дополнить описание ло- кальной функции, либо работать с частично-определенной ЛФП. В процессе моделирования на экране отображается инфор- мация о номере моделируемого шага 1-ПА и длине конфигура- ции на этом шаге. Пользователь имеет возможность по клави- ше <F1> прервать процесс моделирования с последующими возможными действиями: вывод текущей КФ на принтер (1) или экран (2), продолжить моделирование (3) или перейти к новой работе. После вывода КФ имитатор автоматически продолжит моделирование заданного 1-ПА. В случае перехода к новой работе пользователь получает возможность продол- жить моделирование 1-ПА с новой начальной КФ, новым 1—ПА либо завершить работу с имитатором 1-PADHS. При достижении финальной КФ имитатор предоставляет воз- можность вывести конфигурацию на принтер, продолжить ра- боту с новой начальной КФ по заданному 1-ПА либо с новым 1-ПА. В процессе моделирования 1-ПА имитатор отслеживает возможные особые ситуации: превышение длины 1-ОСТ. ошиб-
определения локальной функции и другие. Несмотря на не- большие размер и возможности приведенный имитатор ppADHS предоставляет простейшие инструментальные сред- ства разработки и выполнения 1-ПА в среде языка БЕЙСИК. основе данного имитатора можно разработать достаточно развитые инструментальные средства, обеспечивающие в сре- де языка БЕЙСИК работу с к-ПА (к=1,2). Рекомендуем заинте- ресованному читателю это в качестве весьма интересного упражнения. Несмотря на простоту понятия к-ОСТ, динамика поведения историй КФ, в общем случае, чрезвычайно сложна и современ- ные методы ТОС не позволяют полностью решить целый ряд важных проблем. Следовательно, в ряде случаев методы мо- делирования на ЭВМ могут оказаться весьма эффективными. И действительно, такой подход позволил найти ряд интерес- ных динамических свойств к-ОСТ и решить некоторые теоре- тические и прикладные задачи ТОС. Для этих целей был разра- ботан ряд программных интерактивных систем [2, 54, 100, 145, 167, 168, 172, 173], позволяющих проводить многофункциональ- ные экспериментальные исследования теоретических и при- кладных аспектов к-ОСТ. Более того, разработка подобного ПО позволила прояснить целый ряд важных вопросов модели- рования параллельных динамических систем (ПДС) на компью- терах последовательного действия, так же как рассмотреть ряд проблем разработки параллельного ПО для ОСТ-подобных вычислительных моделей. При написании имитатора 1-PADHS использован ряд инте- ресных возможностей и средств языка БЕЙСИК: динамическое изменение размеров массивов, совместное использование операторов ERASE и DIM для обнуления больших массивов, уп- равление печатью, вложенные циклы, работа с встроенными функциями и другие средства языка. Рассматривая примеры использования языка БЕЙСИК для моделирования, мы должны в то же самое время ясно представ- лять, что БЕЙСИК-программы в режиме интерпретации не ори- ентированы на работу в режиме реального времени, что очень существенно для задач моделирования. Поэтому язык БЕЙСИК, как правило, не используется для задач подобного типа. В этом отношении предпочтение следует отдавать таким языкам прог- раммирования как ПАСКАЛЬ, АДА или ФОРТ. В заключение сформулируем одну весьма актуальную за- дачу, решение которой не только потребует хорошего знания возможностей языка БЕЙСИК и явится отличной школой по Формированию навыков программирования в БЕЙСИК-системе, н° и создаст весьма нужное программное средство широкого назначения. В книгах [1-3] описывается пакет программ А-ИНТЕРПРЕ- 'АТОР, одна из функций которого позволяет осуществлять пе- ревод БЕЙСИК-программ, разработанных для микро-ЭВМ ЭЛЕ- кТР0НИКА-60 и ДВК, в БЕИСИК-программы для ПЭВМ ИС-
KPA 226. Принимая во внимание большой парк ПЭВМ ИСКРА 226 и значительную наработку ПО для них, подобная разработка помогла бы существенно упростить процесс перевода много- численных программных средств ПЭВМ ИСКРА 226 на ПЭВМ ИСКРА 1030. В основу создания такого средства можно было бы положить подходы и принципы, использованные для соз- дания упомянутого пакета А-ИНТЕРПРЕТАТОР, или описан- ные в настоящей книге для решения других задач, например, для реализации пакета PARCELLA. Предполагается, что для опытного пользователя создание такого средства потребует от двух до трех месяцев. На этом завершается рассмотрение конкретных БЕЙСИК- программ. Читателя, интересующегося другими примерами БЕЙСИК-программ отсылаем к литературе, содержащей различ- ного рода примеры использования языка БЕЙСИК. Из подобных работ можно отметить книги [39, 42], содержащие много БЕЙ- СИК-программ научного и технического характера, [230], по- священную игровым БЕЙСИК-программам, и книгу [219], ко- торая наряду с интересными примерами содержит полезные сведения о различных диалектах БЕИСИКа. Рассмотрев использование ряда интересных средств и воз- можностей языка БЕЙСИК для написания программных средств различного назначения, переходим к описанию системы MINI- DOS, предназначенной для широкого круга пользователей ПЭВМ ИСКРА 1030.
7 РАСШИРЕНИЕ ВЫРАЗИТЕЛЬНЫХ СРЕДСТВ ЯЗЫКА БЕЙСИК ИСКРА 1030 Диалект языка программирования БЕЙСИК - БЕЙСИК ИС- КРА ЮЗО обладает достаточно развитыми выразительными средствами и является одним из наиболее развитых диалектов языка данного класса. Однако для определенных групп поль- зователей выразительных средств настоящего языка может оказаться недостаточным. Например, в языке БЕЙСИК ИС- КРА 1030 отсутствуют матричные операторы, операторы дина- мической модификации программ, операторы вычисления определенных интегралов и так далее. Вопросы расширения выразительных средств одного из диалектов языка БЕЙСИК - БЕЙСИК ИСКРА 226 достаточно подробно рассмотрены в [1+3], где, в частности, предложен достаточно простой и эффектив- ный практический подход к решению данной проблемы. Дан- ный подход может быть использован и в среде языка БЕЙСИК ИСКРА 1030 для решения подобных задач. Однако следует отметить, что БЕЙСИК ИСКРА 1030 в целом ряде случаев уступает языку БЕЙСИК ИСКРА 226, особенно в плане работы со сложными программными^ конструкциями в среде самого языка. Так, наличие в языке БЕЙСИК ИСКРА 226 развитых средств по работе с дисковыми УВВ и выгрузке (за- грузке) программ из(в) памяти(ь) в(из) символьные(х) пере- менные(х) позволяет достаточно эффективно разрабатывать различного рода программные средства интерпретирующего типа в среде самого языка БЕЙСИК [1+3]. В целом, в среде язы- ка диалект БЕЙСИК ИСКРА 1030 более развит для проблемного пользователя, тогда как БЕЙСИК ИСКРА 226 - для системных приложений. Подход к расширению выразительных средств языка БЕЙСИК ИСКРА 226, описанный в [1+3], можно использовать и в среде языка БЕЙСИК ИСКРА 1030. Однако в этом случае средства операторов LOAD (загрузка программы в память из символь- ной переменной) и SAVE (выгрузка программы из памяти в сим- вольную переменную) языка БЕЙСИК ИСКРА 226 следует заме- нить функционально эквивалентными конструкциями языка БЕЙСИК ИСКРА 1030, позволяющими выгружать текущую прог- рамму (или ее часть) в дисковый программный файл с после- дующей загрузкой этого (или модифицированного) файла в па- мять по оператору CHAIN. Оставляем реализацию данного под- хода читателю в качестве весьма полезного практического примера, позволяющего использовать наиболее выоазительные средства языка БЕЙСИК ИСКРА 1030.
В настоящей же главе приводится другой подход к расшире- нию выразительных средств языка БЕЙСИК ИСКРА 1030, кото- рый также можно использовать для создания в среде самого языка достаточно развитых средств интерпретирующего типа, а также прикладных многомодульных программных средств со сложной структурой взаимосвязей. Данный подход иллю- стрируется на примере организации пакета PARCELLA, позво- ляющего расширить выразительные средства языка БЕЙСИК ИСКРА 1030 на десять дополнительных операторов-процедур. 7.1. ОПИСАНИЕ ДОПОЛНИТЕЛЬНЫХ СРЕДСТВ ЯЗЫКА БЕЙСИК Пакет программ PARCELLA позволяет пользователю исполь- зовать в своих программах десять дополнительных операто- ров-процедур, общая характеристика которых при едена в сводной табл. 46. Сразу же отметим, что в настоящее время эксплуатируются две версии пакета <PARCELA1> и <PARCELA2>, отличающиеся программной реализацией и возможностями. Однако общим для них является один и тот же набор дополнительных выра- зительных средств, т. е. APROC-операторов. В табл. 46 коди- рование APROC-операторов дается для первой версии пакета, тогда как вторая версия требует обязательного наличия в каж- Таблица 46 a proc - оператор языка Назначение оператора APROCO1 {Н1},А$, В$,{Н2} Динамическая модифи ация текущей программы APROCO2 Г(Х)=<фуНКЦИЯ>,А,В,Е Вычисление определенного интеграла от F(X) APROCO3 А$, В$ Помещение 16-ричного пред- ставления А$ в в$ APROCO4 Г(Х)=<фуНКЦИЯ> Вывод графика функции на экран дисплея APROCO5 А$, В$, LL Преобразование последова- тельного файла в файл произ- APROCO6 А$,{ Yl), N1, М1,{ Y2} N2, М2,(OR 1 AND 1 NOR) вольного доступа Сортировка файла по 2-м по- лям согласно заданного логи- ческого условия APROCO7 F(X)=< фуНКЦИЯ>, А, В, E Вычисление корня функции APROCO8 <AB> F(X) на [А,В] Передача управления на стро- ку ABS (INT(AB)) APROCO9 0,A,B,C,D RR,II Операции над комплексными числами APROC10 # <Нф> Вывод содержимого блока уп- равления файлом #<нф>
м APROS-операторе перед полем параметров указания номе- ра строки, которой будет передано управление (даже если Ртого и не произойдет) после его выполнения, например APROCO9 250,0, А, В,С, D RR,II. Подробно опишем первую версию пакета <PARCELLA> (<PARCELA1>), а затем дадим ее отличия оТ второй версии. Приведем подробное описание дополнительных операторов языка и способ их использования в программе пользователя, а также те условия, которым должна удовлетворять БЕЙСИК- программа, использующая перечисленные средства в зависи- мости от используемой версии пакета <PARCELLA>. Оператор APROCO1 {Н1),А$,В$,(Н2} предназначен для дина- мической модификации текущей программы. По данному опе- ратору контекст, указанный переменной А$, в строке с номе- ром <Н1> заменяется на текст из переменной В$ и управление передается строке с номером <Н2> текущей программы. В ка- честве параметров Н1 и Н2 должны кодироваться конкретные значения. Оператор APROCO2 Р(Х)=<функция>,А,В,Е предназначен для вычисления определенного интеграла от функции F(X) на отрезке [А, В] с точностью Е. Результат помещается в перемен- ную F. Вычисление интеграла производится по методу трапеций. Оператор APROCO3 А$,В$ преобразует значение символь- ной переменной или выражения в 16-ричный (НЕХ) вид и поме- щает результат в символьную переменную В$. Оператор APROCO4 Р(Х)=<функция> предназначен для вы- вода на экран дисплея графика функции F(X) в декартовой си- стеме координат. Значения переменной X находятся в диапа- зоне [-295,295] и переменной Y - в диапазоне [-99,99]. Оператор APROCO5 А$,В$ LL служит для преобразования последовательного файла, определенного параметром А$, в файл произвольного доступа, путь к которому указан в па- раметре В$. В переменную LL возвращается максимальная длина записи созданного файла произвольного доступа. При определении исходного последовательного файла следует указывать полный путь к нему в виде [УВВ:]<имя[.расширение имени]>. Если в качестве параметров А$ и В$ используются символьные константы, то они кодируются без кавычек (”). Оператор APROCO6 А$, {Y1I, N1, М1, {Y2I, N2, М2, (OR I AND I NOR} предназначен для сортировки последовательного файла, определенного полным путем к нему в параметре А$, по двум полям подбора согласно заданного логического условия. Поля подбора задаются номерами Nk их начальных позиций и длинами Мк (к=1,2) в записях сортируемого файла. Парамет-
ры Y1.Y2 и (OR I AND I NOR} определяют логическое усло- вие сортировки файла следующим образом. В качестве па- раметров Y1 и Y2 можно использовать операции отношения {= |<>|<|>|<=|>-}> которые кодируются без ограничителей. При сделанных предположениях логическое условие ₽! {Y1} Р/ {OR I AND I NOR} P2 {Y2} P2' сортировки определяет порядок в каждой паре записей файла относительно соответствующих пар (Р1,Р1') и (Р2,Р2') их полей подбора. Так, оператор APROCO6 A$,<,1,3,>,8,2,AND осуществля- ет сортировку файла 'пузырьковым' методом путем замены местами двух соседних записей файла только при условии истинности логического условия Р11 < Р12 AND Р21 > Р22, где Pi j (i,j=1,2) значения соответствующих полей подбора. В конце сортировки отсортированный файл помещается на место исходного. Оператор APR0C07 Р(Х)=<функция>,А,В,Е позволяет вы- числять нулевой корень функции F(X) на отрезке [А,В] с задан- ной точностью Е. Результат вычисления помещается в пере- менную F. При задании значений для параметров А и В следует убедиться в выполнении условия F(A)*F(B)<0. Оператор APROCO8 <АВ> служит для организации передачи управления строке с номером <АВ> текущей программы, где <АВ> есть положительное целое значение арифметического выражения. Оператор APROCO9 0,A,B,C,D RR,II предназначен для вы- полнения операций (0) над двумя или одним комплексными числами, значения действительных и мнимых частей которых определяются соответственно параметрами А,В и C,D. Значе- ние параметра 'о' определяет саму операцию следующим об- разом: 1 - сложение и/или вычитание двух комплексных чисел; 2 - произведение двух комплексных чисел; 3 - деление двух комплексных чисел; 4 - вычисление модуля комплексного числа; 5 - вычисление квадрата комплексного числа; 6 - вычисление квадратного корня из комплексного числа. Результат операций 1-3 и 5 помещается в переменные РР(дей- ствительная часть) и II (мнимая часть); операции 4 - в пере- менную RR и операции 6 - в переменные RR,RR1 (действитель- ные части) и 11,111 (мнимые части), определяющие два значе- ния корня квадратного из числа A+Bi. Оператор АРРОС10#<нф> служит для вывода на экран наи- более важной для пользователя информации из блока управ- ления файлом, определенным его логическим номером <нф>- Перед использованием данного оператора следует открыть
искомый дисковый файл (программа или данные). В результате выполнения данного оператора на экран выводится следующая информация: - полный путь к искомому файлу и режим его открытия; - содержимое системного блока управления файлом; - число обработанных секторов для последовательного или на единицу больший номер записи прямого файла; - число обработанных в буфере ввода-выводов символов данных; - размер буфера ввода-вывода для данного файла; - логическое имя активного дискового УВВ; - длина строки дисплея и/или принтера; - номер позиции сканирования по PRINT # в буфере ввода- вывода; - номер очередной позиции табуляции в буфере ввода-вы- вода; - содержимое буфера последовательного обмена между операционной системой и БЕЙСИКОМ; - размер логической записи, установленной в OPEN; - текущие номера физической и логической записей данных; - номер позиции сканирования для PRINT #, INPUT #, WRITE #. Кодирование аналогичных APROC-операторов в случае ис- пользования БЕЙСИК-программы со второй версией пакета требует обязательного наличия перед полем параметров но- мера программной строки, которой передается управление по- сле его выполнения. Из представленного описания APROC-операторов языка БЕЙСИК ИСКРА 1030 нетрудно убедиться, что пользователь получает в свое распоряжение существенное расширение выразительных средств. Однако для их использования БЕЙ- СИК-программа должна удовлетворять следующим простым требованиям (версия 1): 1. Минимальный номер программной строки должен быть 10, а максимальный - не превышать величины 65000; 2. Для возможности реализации пакетной обработки прог- рамм посредством PARCELLA рекомендуется в послед- ней строке БЕЙСИК-программы кодировать оператор END, являющийся к тому же логическим концом програм- мы; 3. В БЕЙСИК-программе не рекомендуется использовать идентификаторы переменных любого типа, оканчиваю- щиеся на „42”, а идентификаторы Т42, D42$, С42$, AG42$ и AL42$ вообще нельзя использовать в исходной прог- рамме; 4. Для файлов данных не рекомендуется использовать ло- гические номера в диапазоне 1*3; 5. Каждый APROC-оператор кодируется в отдельной прог- раммной строке в полном соответствии с его описанием и может использоваться только на последовательных участках программы, т. е. он не может быть элементом
подпрограммы или циклической конструкции любого типа. В остальном БЕЙСИК-программа, использующая вышеопи- санные дополнительные APROC-операторы, кодируется в пол- ном соответствии с синтаксисом и семантикой языка БЕЙСИК ИСКРА 1030. В качестве примера оформления приведем листинг исходной программы, использующей все вышеописанные до- полнительные средства языка БЕЙСИК: 10 PRINT ”16-23.10.88:”; :A$=”ERROR 255:”:B$=’’REM” 20 PRINT ’’Stadt Berlin 32/35 ”;:Z$=”INTERFLUG” 30 APROCO1 50,AS,B$,40 40 PRINT ’’Mitropa :L$=”LLLLLLL”:T$=”PRINT” 50 ERROR 255:PROC1 60 APROCO1 70,L$,T$,70 70 LLLLLLL ’’PARCELLA-88” 80 APROC02 F(X)=X"4+X "3+46,0,1„1 90 PRINT ’’Значение интеграла от F(X) равно ”;F 100 APROCO2 T(Y)=»Y/2,1,2,.01 110 PRINT ’’Значение интеграла от T(Y) равно ”;T 120 APROCO3 Z$,D$ 130 PRINT ”НЕХ-значение ”;Z$;” есть D$ 140 APROCO4 F(X)=.004146*(X+25)"2+21.5 150 APROCO6 C:KIEV.118,<,1,2,<,4,2,OR 160 PRINT ’’Файл <KIEV.118> отсортирован на <C>” 170 APROCO7 Y(X)=SIN(X)-X+3,3,4,.001 180 PRINT ’’Корень функции Y(X) есть ”;Y 190 APROCO5 C:KIEV.118,C:DIR LL 200 OPEN "C:DIR” AS #5 LEN=LL:G=46 210 FIELD #5,LL AS W$:GET #5,6:PRINT W$:CLOSE 5 220 APROCO8 INT(SQR(G))*40 230 PRINT ’’Пропуск строки из-за оператора в <220>” 240 APROCO9 6,46,-47,С,D RR.II 250 PRINT ’’Квадратные корни из 46-47i: ”;RR;ll;”i” 260 PRINT TAB(31);RR1;ll1;”i” 270 APROCO9 5,RR,II,M,N RR,II 280 PRINT ’’Квадрат предыдущего рез-та : ”;RR;ll;”i” 290 OPEN ”I”,5,”C:PARCELLA.HLP” 300 APROC10 #5 310 END Для обеспечения работы с БЕЙСИК-программами, содержа- щими APROC-операторы, служит пакет PARCELLA, описание которого приведено в следующем разделе. В заключение опи- шем сам принцип использования данного пакета на примере обработки БЕЙСИК-программы его первой версией. Предпола- гается, что исходная БЕЙСИК-программа подготовлена и оформ- лена в виде дискового файла под именем PARCELA1.TSK. Перед началом работы рекомендуется переписать пакет PARCELLA и исходные БЕИСИК-программы на виртуальный
диск, что позволит существенно уменьшить время обработки. Сделать это можно, например, системной командой COPY. После перезаписи на виртуальный диск (логическое имя 'С:” для ПЭВМ без винчестерских дисков) всех необходимых программных файлов можно приступать к работе с пакетом PARCELLA. Для большей наглядности в качестве исходной БЕИСИК-программы будем использовать тест-программу PARCELA1.TSK, листинг которой приведен выше. Данная прог- рамма предназначена как для иллюстрации оформления подоб- ных программ, так и для проверки работоспособности пакета PARCELLA версии 1. Так как пакет PARCELLA реализован в среде языка БЕЙСИК, то для работы с ним необходимо загрузить интерпретатор языка системной командой BAS /F:K, где значение <К> должно быть не меньше максимального логического номера файлов данных, используемого программами, выполняющимися под управлением пакета. В нашем конкретном случае следует принять К=5. После загрузки интерпретатора БЕЙСИКа вводит- ся команда LOAD ”C:PARCELLA”, по которой осуществляется загрузка пакета, а запуск его на выполнение осуществляет команда RUN. В начале работы пакета на экран выводится справочная ин- формация с последующими запросами на указание дискового тома, содержащего пакет PARCELLA, и вид обслуживания: ра; боты с пакетом первой или второй версии. Введя ответ 'К' (к=1,2), пользователь получает возможность использовать од- ну из версий пакета. Выполнение каждой версии пакета начина- ется с предоставления возможности либо вывести информа- цию на экран о пакете и его назначении, либо перейти к обра- ботке очередной БЕЙСИК-программы. Информация на экран выводится постранично и для перлю- страции описания пакета следует нажимать клавишу 'ПУСК'. После перлюстрации имеется возможность либо повторить вывод описания, либо перейти к выполнению в избранной вер- сии пакета очередной БЕЙСИК-программы. В режиме обработки очередной БЕЙСИК-программы пакет требует определить путь к файлу с исходным текстом прог- раммы. Путь указывается полностью в виде [УВВ:]<имя.рас- ширением После этого пользователю предоставляется возмож- ность осуществить обработку БЕЙСИК-программы полностью (выполнение ее впервые) или только выполнить программу, предварительно проинтерпретированную пакетом. Во втором случае предполагается, что на дисковом томе, определенном под пакет PARCELLA, уже находятся файлы PROG1942.BAS и А1942, содержащие всю необходимую информацию для вы- полнения ранее проинтерпретированной БЕЙСИК-программы. В режиме выполнения проинтерпретированной (ранее или не- посредственно перед ее выполнением) программы в 25-й стро- ке экрана идентифицируется полное имя программы. В период выполнения возникающие особые и аварийные ситуации,
связанные со стандартными средствами языка БЕЙСИК, об- рабатываются (если в программе не предусмотрено против- ного) самим интерпретатором, а связанные с APROC-операто- рами г- пакетом PARCELLA. После завершения выполнения оче- редной БЕИСИК-программы пользователю предоставляется возможность либо повторить работу с пакетом PARCELLA, либо завершить ее. В режиме полной обработки БЕЙСИК-программы после полу, чения информации о пути к файлу с программой пакет начи- нает интерпретацию исходного модуля с идентификацией режима и хронометрированием времени для выполнения дан- ного этапа. После завершения интерпретации программы поль- зователь получает возможность либо сразу же выполнить проинтерпретированную программу (данный этап был описан выше), либо завершить с ней работу. Во втором случае на эк- ран дисплея выводятся рекомендации по сохранению ф йлов PROG1942.BAS и А1942, содержащих всю необходимую инфор- мацию для возможности последующего выполнения проинтер- претированной программы. После этого пользователь имеет возможность либо продолжить работу с пакетом, либо завер- шить ее. В качестве иллюстрации сказанного приведем пример протокола обработки пакетом программы PARCELA1 TSK (ее текст приведен выше): Пакет <PARCELLA> для расширения возможностей языка БЕЙСИК ПЭВМ ИСКРА 1030 Разработан в ПТИП Госстроя ЭССР в ноябре 1988 Таллинн 200006, Мустамяэ теэ 55, тел: 527-664 Для продолжения работы нажать клавишу <ПУСК> Задать УВВ (A+F) с томом, содержащим <PARCELLA> С Для вывода описания нажать <1> иначе <ПУСК> С какой версией <PARCELLA> работать (1/2) 1 Пакет <PARCELA1> для расширения возможностей языка БЕЙСИК ПЭВМ ИСКРА 1030 - Для вывода описания нажать <1> иначе <ПУСК> Обработка БЕЙСИК-программы впервые (Y/N) Y Задать путь к БЕЙСИК-программе C:PARCELA1.TSK Идет интерпретация программы: C:PARCELA1.TSK Begin= 16:00:34 End= 16:00:38 Выполнить программу-(Y) Y 16-23.10.88:Stadt Berlin 32/35 Mitropa PARCELLA-88 Значение интеграла от F(X) равно 46.44999 Значение интеграла от T(Y) равно 0.7499997 НЕХ-значение INTERFLUG есть 494Е544552464С5547 Вывод графика функции F(X)=0.004146*(X+25)~2+21.5 Для продолжения работы нажать <ПУСК> <На экране дисплея отображается график функции>
После просмотра нажать <ПУСК> Файл <KIEV.118> отсортирован на <С> Корень функции Y(X) есть 3.070761 G1947GRODNO Квадратные корни из 46—47i: 7.475452 -3.143623 i -7.475474 3.14357 i Квадрат предыдущего рез-та ; 46.00002 -47.00001 i <На экране отображается содержимое блока управления файлом C:PARCELLA.HLP> После просмотра нажать клавишу <ПУСК> Работу с <PARCELLA> повторить (Y/N) N После приведения общей характеристики пакета, описания дополнительных средств языка БЕЙСИК (APROC-операторы) и метода использования возможностей пакета обсудим сам принцип программной реализации <PARCELLA> обеих версий. 7.2. ПРИНЦИП ПРОГРАММНОЙ РЕАЛИЗАЦИИ ПАКЕТА <PARCELLA> Пакет <PARCELLA> реализован в языковой среде БЕЙСИК ИСКРА 1030 и предназначен для обеспечения возможности рас- ширения выразительных средств языка. Реализация пакета <PARCELLA> представляет интерес с практической точки зре- ния как пример организации многомодульных программных систем в среде языка БЕЙСИК и использования целого ряда интересных возможностей самого языка при разработке прог- раммного обеспечения. Программная реализация пакета представляет собой много- модульную систему динамической структуры, состоящую из 16 модулей с общим объемом исходного текста (включая файл документации) порядка 48 Кбайтов. Полные листинги исходных текстов всех программных модулей пакета в его настоящей реализации приводятся в приложении 9. В настоящее время пакет <PARCELLA> находится в промышленной эксплуатации на ПЭВМ ИСКРА 1030 и совместимых с нею ЭВМ. Общий принцип обработки пакетом БЕЙСИК-программы, использующей допол- нительные средства языка и удовлетворяющей требованиям, описанным в разд. 7.1, заключается в следующем (версия 1). После загрузки и запуска <PARCELLA> начинает выполнять- ся первый модуль пакета с именем PARCELLA.BAS. Данный модуль осуществляет* вывод рекламной информации о пакете, определяет дисковый том с программным обеспечением паке- та и предоставляет пользователю возможность выбрать вер- сию пакета (1/2), с которой он собирается работать. После выбора первой или второй версии пакета загружается соответственно модуль PARCELA1.BAS или PARCELA2.BAS пакета, каждый из которых выполняет всю необходимую рабо- ту по подготовке исходной БЕЙСИК-программы к выполнению. Основные функции каждого из двух модулей:
(1) инициализация модуля <PARCELA.k> (к=1,2); (2) обеспечение диалога с пользователем; (3) обеспечение пользователя справочной информацией по работе с пакетом (HELP - функция); (4) поддержание режима пакетной обработки программ; (5) формирование двух файлов (PROG1942.BAS и А1942), содержащих всю необходимую информацию для выпол- нения проинтерпретированной БЕЙСИК-программы. Приводить описание всех перечисленных функций особого смысла не имеет, так как они достаточно легко просматрива- ются из приведенных листингов модулей (приложение 9). Отме- тим только, что, в частности, в результате реализации функций (1)-(2) модули получают информацию о расположении модулей самого пакета (УВВ1:) и пути (УВВ2:<имя.расширение^ к фай- лу, содержащему исходный модуль БЕЙСИК-программы, пред- назначенной к обработке версией <PARCELAk> (k=1,2). Для дальнейшего понадобится рассмотреть алгоритм реализации функции (5) модулей PARCELA1.BAS и PARCELA2.BAS. Прежде всего рассмотрим программную реализацию первой версии пакета. Схематично алгоритм реализации функции (5) модулем PARCELA1.BAS первой версии представлен на рис. 11\ Открываются три файла данных: файл с исходной БЕЙСИК-прог- раммой (только для чтения), новые последовательный файл PROG1942.BAS и файл произвольного доступа А1942. Первой записью в файл PROG1942.BAS помещается строка 0, содер- жащая оператор CHAIN MERGE загрузки в память модуля BERLINGO.1 пакета с передачей управления на строку S5001 и с сохранением значений всех переменных модуля PAR- файл исходной программы файл А1942 Рис 11 Схема формирования файлов пакета <PARCELLA>
CEL A1.BAS. Модуль BERLINOO.1 является резидентным на все время выполнения проинтерпретированной БЕИСИК-программы и отслеживает весь ход ее выполнения. После этого осуществ- ляется построчное чтение строк исходной программы и анализ их на наличие в них APROC-операторов. Если очередная строка не содержит APROC-оператора, то она полностью переписыва- ется в файл PROG1942.BAS. В противном случае на основе стро- ки с APROCXX-оператором формируются три записи следую- щей структуры: (1) <нс> CHAIN MERGE ”yBB1:BERLINXX”, 65001, ALL (2) <параметры оператора APROCXX> (3) <нс> Первая запись помещается очередной программной строкой в файл PROG1942.BAS и служит для вызова модуля BERLINXX. BAS пакета, реализующего алгоритм APROCXX-оператора в пе- риод выполнения проинтерпретированной программы. Записи (2)-(3) содержат соответственно полную копию поля парамет- ров APROCXX-оператора и номер <нс> строки исходной прог- раммы с данным оператором. Они помещаются соответствен- но К-й и (К+1)-й записями в файл А1942 произвольного доступа, где К - порядковый номер APROC-оператора в интерпретируе- мой программе. Встретив последнюю строку исходной программы, содержа- щую только оператор END, модуль PARCELA1.BAS вместо нее в файл PROG1942.BAS помещает сгенерированные копии трех строк с номерами <М>, <М+1> и <М+2>, которые служат для завершения выполнения проинтерпретированной программы и выбора дальнейшего режима работы: продолжения или за- вершения работы с пакетом <PARCELLA>. После завершения формирования файлов PROG1942.BAS и А1942 все ранее открытые файлы закрываются и последова- тельный файл РРОС1942гВАЭ содержит исходный модуль про- интерпретированной БЕЙСИК-программы. Теперь уже можно приступать к выполнению программы, находящейся в PROG1942. BAS. Для иллюстрации структуры указанных файлов приведем листинги файлов PROG1942.BAS и А1942, соответствующих исходной программе (ее листинг приведен в предыдущем раз^ деле главы): Файл PROG1942.BAS 1 CHAIN MERGE ”C:BERLIN00.1”, 10, ALL 10 PRINT ”16-23.10.88:”;:A$=”ERROR 255:”:B$=”REM” 20 PRINT ’’Stadt Berlin 32/35 :Z$=”INTERFLUG” 30 CHAIN MERGE ”C:BERLINO1”,65001, ALL 40 PRINT ’’Mitropa ;L$=”LLLLLLL” : T$=”PRINT” 50 ERROR 255:PROC1 60 CHAIN MERGE ”C:BERLINO1”,65001, ALL 70 LLLLLLL ”PARCELLA-88”
80 CHAIN MERGE ”C:BERLINO2”,65001, ALL 90 PRINT ’’Значение интеграла от F(X) равно ”;F 100 CHAIN MERGE ”C:BERLIN02”,65001, ALL 110 PRINT’’Значение интеграла от T(Y) равно ”;T 120 CHAIN MERGE ”C:BERLINO3”, 65001, ALL 130 PRINT "HEX-значение Z$;’’ есть ”;D$ 140 CHAIN MERGE ”C:BERLINO4”,65001,ALL 150 CHAIN MERGE ”C:BERLINO6”,65001,ALL 160 PRINT ’’Файл <KIEV. 118> отсортирован на <C>” 170 CHAIN MERGE ”C:BERLINO7”,65001,ALL 180 PRINT ’’Корень функции Y(X) есть ”;Y 190 CHAIN MERGE ”C:BERLINO5",65001,ALL 200 OPEN ”C:DIR” AS #5 LEN=LL:G=46 210 FIELD #5,LL AS W$:GET #5,6:PRINT W$:CLOSE 5 220 CHAIN MERGE ”C:BERLINO8”, 65001, ALL 230 PRINT ’’Пропуск строки из-за оператора в <220>” 240 CHAIN MERGE ”C:BERLINO9”, 65001, ALL 250 PRINT ’’Квадратные корни из 46-47I : ”;RR;ll;”i” 260 PRINT TAB(31);RR1;ll1;”i” 270 CHAIN MERGE ”C:BERLINO9”, 65001, ALL 280 PRINT ’’Квадрат предыдущего рез-та : ”;RR;II; ”i” 290 OPEN ”l”,5, ”C:PARCELLA.HLP” 300 CHAIN MERGE "C:BERLIN10”, 65001, ALL 310 END 310 LOCATE 25,20:INPUT ’’Работу повторить (Y/N)”, Q42$ 311 IF Q42$=”Y” OR Q42$=”y” THEN 312 ELSE CLS.END 312 CHAIN ”C:PARCELLA”, 10 Файл A1942 50, AS, B$, 40 30 70, L$, T$, 70 60 F(X)=X'’4+X"3+46,0,1,.1 80 T(Y)=Y/2,1,2,.O1 100 Z$, D$ 120 F(X)=. 004146*(X+25)" 2+21.5 140 C.KIEV.118,<,1,2,<,4,2,OR 150 Y(X)=SIN(X)-X+3,3,4,.OO1 170 C:KIEV.118,C:DIR LL 190 INT (SQR(G))*40 220
6,46,-47,C,D RR,II 240 5, RR, II, M, N RR, II 270 #5 300 Приведенные листинги файлов служат хорошей иллюстраци- ей описанного алгоритма интерпретации исходной программы (рис. 11). Рассмотрим распределение памяти при выполнении прог- раммы из файла PROG1942.BAS. По мере готовности проинтер- претированной БЕЙСИК-программы к выполнению модуль PARCELA1.BAS загружает ее в память и передает ей управле- ние. Результатом выполнения первой строки (0-строка) загру- женной БЕЙСИК-программы из файла PROG1942.BAS является загрузка в память модуля BERLINOO.1 пакета и передача управ- ления снова БЕЙСИК-программе. Данный модуль становится резидентным на весь период выполнения БЕИСИК-программы и поддерживает следующую структуру памяти (в терминах номеров программных строк, рис. 12). Область памяти с номерами строк 0+65000 отводится под проинтерпретированную БЕЙСИК-программу, выполняемую под управлением пакета. Строки 65001+65004 (часть А) и стро- ки с номерами 65518+65529 (часть В) отводятся под резидент- ный модуль BERLINOO.1 пакета, управляющий выполнением транзитных модулей BERLINXX, реализующих функциональные алгоритмы соответствующих APROCXX-операторов. Програм- мные строки с номерами 65005+65516 отводятся под область загрузки транзитных модулей BERLINXX.BAS (ХХ=01 + 10) па- 0 Область загрузки проинтерпретированной 65000 БЕИСИК-программы 65001 Начало области APROC-модулей ...................Резидентная часть А модуля .......... 65004 BERLINOO1 65005 Модуль реализации APROC-оператора Транзитная область загрузки APROC модулей 65516. . • ......... .... 65518 Резидентная часть В модуля BERLINOO 1 65529 Конец области APROC-модулей Рис 12 Структура памяти, определяемая пакетом « PARCELLA>
кета. Размер транзитной области вполне достаточен для раз- мещения модулей реализации достаточно сложных АР^ОС- операторов. Часть А резидентного модуля BERLINOO.1 предназначена для формирования в переменной D42$ содержимого поля парамет- ров APROCXX-оператора, модуль BERLINXX.BAS реализации которого должен выполняться. Затем в переменной С42$ фор- мируется номер программной строки, содержащей оператор CHAIN MERGE загрузки транзитного модуля BERLINXX.BAS (см. прилож. 9). Часть В резидентного модуля предназначена для обработки завершения транзитного модуля BERLINXX.BAS и организации продолжения^ выполнения БЕИСИК-программы. На этом этапе в строке БЕЙСИК-программы <нс> CHAIN MERGE ”YBB:BERLINXX”, 65001, ALL слово 'CHAIN' заменяется на 'REM', очищается транзитная область загрузки APROC-модулей от программных строк (стро- ки с номерами 65005+65516) и управление получает модифи- цированная строка БЕЙСИК-программы с номером <нс>, т. е. реально продолжается естественное выполнение очередной строки БЕИСИК-программы. Наряду с перечисленным, модуль BERLINOO.1 производит обработку особых ситуаций, возникаю- щих в процессе формирования информации для выполнения APROC-модулей. Как правило, причина возникновения таких ситуаций связана с неверным синтаксисом или принципом ис- пользования APROC-операторов в исходной БЕЙСИК-програм- ме. Обработку особых ситуаций, возникающих в процессе вы- полнения самих APROC-модулей, следует предусмотреть при их разработке в зависимости от специфики их реализа- ции и выполнения. В заключение описания первой версии пакета <PARCELLA> приведем соглашения по структуре вновь включаемых допол- нительных средств языка БЕЙСИК, которые будут поддержи- ваться пакетом. Прежде всего, новые средства должны коди- роваться в исходной БЕЙСИК-программе APROC-операторами следующего вида: APROCXX <параметры>, где XX > 10. Соответствующий оператору APROCXX модуль должен иметь имя BERLINXX.BAS и занимать программные строки в диапа- зоне 65005+65516, при этом строки с номерами 65005 и 65516 обязательны. В частном случае они могут иметь вид: 65005 REM <произвольная информация> 65516 REM <произвольная информация> Для реализации алгоритма APROCXX-оператора соответствую- щему ему модулю BERLINXX.BAS доступна информация сог- ласно табл. 47.
Переменная Содержимое переменной AG42S AL42S 042$ С42$ Логическое имя УВВ с пакетом < parcellа> Полное имя исходной БЕЙСИК-программы Копия поля параметров APROCXX-оператора Номер строки с оператором aprocxx исходной БЕЙСИК-программы Т42 Порядковый номер APROCXX-оператора в исходной БЕЙСИК-программе Перечисленные в данной табл. 47 общие переменные мож- но использовать только в качестве входной информации, не изменяя их значений. Указанной информации вполне до- статочно для программной реализации BERLINXX-модулей. Обработку особых ситуаций, возникающих в процессе выпол- нения каждого модуля BERLINXX.BAS, следует предусмотреть в самом модуле. Тогда как для обработки особых ситуаций, связанных с синтаксисом и семантикой использования в ис- ходной программе APROC-операторов, достаточно организо- вать в модуле выход на программную строку с номером 65004. В остальном модуль BERLINXX.BAS представляет собой обычную БЕЙСИК-программу, реализующую тот или иной алгоритм обработки информации, вычисления или управления, определенный соответствующим ему APROCXX-операто- ром. В качестве примеров рекомендуется рассмотреть орга- низацию BERLINXX-модулей, листинги которых приведены в приложении 9. Используя вышеперечисленные соглаше- ния по разработке BERLINXX-модулей, пользователь имеет возможность относительно легко расширять функциональные возможности пакета <PARCELLA> первой версии по дальней- шему развитию выразительных средств языка БЕЙСИК ИС- КРА 1030. Несложная модификация описанной процедуры поз- воляет проводить расширение функциональных возможностей и второй версии пакета. Описанная программная реализация первой версии пакета <PARCELLA> наряду с простотой и достаточно высокой эф- фективностью накладывает ряд ограничений на использование дополнительных средств языка БЕЙСИК в программах пользо- вателя. Данные ограничения хотя и не являются столь суще- ственными, однако создают ряд неудобств при разработке программных средств. В связи с этим была разработана вторая версия, использующая несколько другой подход и составившая совместно с первой собственно сам пакет <PARCELLA>. Суть второго подхода в общих чертах сводится к следующему. Модули BERLINXX.BAS реализации APROCXX-операторов па- кета и соглашения по их разработке остаются без изменения. Сами же APROCXX-операторы в исходной БЕЙСИК-программе
должны кодироваться в формате APROCXX <нсп>, <параметры>, где <нсп> определяет номер строки для передачи управления после выполнения данного дополнительного оператора. Этот элемент формата APROCXX-оператора обязателен. Изменениям подверглись только модули PARCELA1.BAS и BERLINOO.1 па- кета <PARCELLA> первой версии следующим образом. В отли- чие от первой во второй версии пакета модуль PARCELA2.BAS интерпретирует исходную программу (файл с именем PROG1942. BAS) иным образом. Строки исходной программы, содержащие операторы <нс> APROCXX <нсп>,<параметры>, помещаются в файл PROG1942.BAS в виде <нс> ON ERROR GOTO <M+3>:ERROR OiCHAIN MERGE nYBB1:BERLINXX”, 65001, ALL и дополнительно генерируется программная строка с номе- ром <М+3>, имеющая вид <М+3> T42=ERL:RESUME NEXT, где <М> - номер последней строки исходной БЕЙСИК-програм- мы. В остальном файл PROG1942.BAS, содержащий проинтер- претированную исходную программу, оформляется аналогич- но первой версии пакета. Во второй версии пакета файл А1942 является последова- тельным, а не произвольного доступа, и содержит записи вида <нс> <нсп>,<параметры>, соответствующие строкам <нс> исходной программы, содер- жащим APROC-операторы. Таким образом, во второй версии пакета на стадии интерпретации исходной программы также формируются модулем PARCELA2.BAS два файла PROG1942.BAS и А1942, однако содержание и организация их в общем случае несколько отличны (см. приложение 9). Алгоритм выполнения проинтерпретированной исходной программы под управлением второй версии пакета <PARCEL- LA> сводится в общих чертах к следующему. В результате выполнения первой (0-строка) строки программы PROG 1942 в память загружается резидентный модуль BERLINOO.2 и управ- ление получает следующая строка программы. В результате выполнения программной строки, содержащей вызов BERLINXX- модуля, активируется обработка аварийных ситуаций (ON ER- ROR), инициируется аварийная ситуация (ERROR 0) и управ- ление получает обработчик прерываний, который присваивает переменной Т42 номер текущей строки программы и передает управление следующему оператору строки, т. е. оператору
CHAIN MERGE, загружающему модуль BERLINXX обработки APROCXX-оператора исходной БЕЙСИК-программы. Перед началом выполнения BERLINXX-модуля резидентный модуль BERLINOO.2 (его А часть) по значению общей перемен- ной Т42 из файла А1942 выбирает соответствующую запись и на ее основе формирует значения двух символьных пере- менных: D42S - поле параметров APROCXX-оператора и С42$- адрес <нс> перехода в программе после выполнения модуля BERLINXX. Часть В резидентного модуля BERLINOO.2 завершает выпол- нение модуля BERLINXX, очищает транзитную область от его программных строк и передает управление строке с номером <нс> программы PROG1942. В отличие от первой во второй версии пакета не происходит модификации программной стро- ки, содержащей вызов модуля BERLINXX. В остальном функцио- нирование обоих версий в рамках единого пакета <PARCELLA> и оформление выполняемых под их управлением БЕЙСИК-прог- рамм совпадают в основных чертах. Относительно программы пользователя вторая версия па- кета отличается от первой двумя основными чертами. Для ин- терпретации и выполнения БЕИСИК-программы требуются несколько большие временные затраты. Обеспечивается су- щественно большая гибкость применения дополнительных APROC-операторов в исходной БЕЙСИК-программе. Данные операторы можно использовать в любом месте исходной прог- раммы, кроме конструкций типа FOR - NEXT, WHILE - WEND и подпрограмм различных типов, а именно там, где использова- ние оператора CHAIN MERGE не нарушает естественный по- рядок выполнения программы. В зависимости от условий применения может использоваться любая из двух вышеописан- ных версий пакета <PARCELLA>. Для иллюстрации сказанного в конце приложения 9 помещены листинги модулей PARCE- LA2.BAS и BERLINOO.2 второй версии пакета <PARCELLA>. Описанные выше подходы к расширению выразительных средств языка БЕЙСИК являются весьма простыми, эффектив- ными и для своей реализации не требуют значительных ресур- сов пользователя и ПЭВМ. Наряду с этим подобные подходы могут быть с успехом использованы при разработке различно- го рода программных систем интерпретирующего типа в сре- де самого языка БЕЙСИК и многомодульных систем пользова- теля с достаточно сложной структурой управления.
8. ОПИСАНИЕ И РАБОТА С ПАКЕТОМ ПРОГРАММ <РЕДАКТОР ТЕКСТОВ> 8.1. ОБЩАЯ ХАРАКТЕРИСТИКА ПАКЕТА Пакет программ <Редактор текстов> (в дальнейшем именуе- мый просто Редактор) входит в состав стандартно поставляемо- го ПО ПЭВМ ИСКРА 1030 и работает под управлением опера- ционной системы АДОС. Редактор предназначен для работы с различного рода текстовыми документами и позволяет созда- вать текстовые файлы на дисках, вызывать их в память ПЭВМ на редактирование, выводить текст на заданное устройство выво- да в требуемом пользователю формате, формировать собствен- ные форматы печати, изменять имя файла или удалять его из каталога заданного тома, выводить оглавление каталога тома и др. Прототипом для Редактора послужил хорошо известный за- рубежный пакет WORDSTAR для работы с текстовой информа- цией. Режим редактирования текстовой информации обеспечен широкими возможностями, значительно перекрывающими воз- можности рассмотренного выше строкового редактора EDLIN. В этом режиме, например, можно построчно и постранично просматривать на экране и в широких пределах редактирое »ть текст. На принтер можно выводить в заданном формате весь текст или какую-то его часть. Форматы печати, создаваемые пользователем, можно хранить на диске и обращаться к ним по мере надобности, При редактировании в текст можно включать управляющие слова, определяющие специальные режимы пе- чати: нумерация страниц, вывод заголовков, подчеркивания фраз, печать двойной плотностью и так далее. Редактор обеспе- чивает работу как со всеми символами АЦК, так и с любыми символами кодовой таблицы ПЭВМ ИСКРА 1030, включая сим- волы псевдографики. Редактор можно использовать и для редактирования исход- ных модулей программ, для чего необходимо в формате (по кла- више F9') правое поле перевести на самую правую псзицию и при работе использовать этот формат. При редактировании исходных модулей не рекомендуется использовать клавишу табуляции. Текст, редактируемый или создаваемый Редактором, идентичен тексту, обрабатываемому строчным редактором EDLIN. Ввиду же значительно более широких функциональных возможностей именно Редактор рекомендуется использовать вместо EDLIN для работы с исходными модулями программ.^ Работа с Редактором достаточно проста и особых сведений по ПЭВМ ИСКРА 1030 и ее программному обеспечению не требу- ет. Достаточно усвоить несколько простых команд системы
АДОС, получить навык работы с клавиатурой и необходимые сведения по самому Редактору в объеме данной главы. Все это позволяет использовать Редактор широкому кругу непрофес- сиональных пользователей. Опыт показывает, что несколько дней работы с Редактором вполне достаточны для большинства пользователей, чтобы приступить к использованию его в своей практической деятельности. Редактор поставляется на отдельной односторонней 8О-тре- ковой дискете, его резидентная часть имеет имя <R1>, по кото- рому осуществляется его загрузка в память на выполнение. 8.2. РАБОТА С ПАКЕТОМ В РЕЖИМЕ МЕНЮ Предполагается, что операционная система АДОС загружена, и ПЭВМ находится в ожидании ввода команд, т. е. на экране идентифицируется метка системы. На свободный дисковод устанавливается дискета с Редактором и с клавиатуры вводит- ся команда [ИУ:] R1 где <ИУ> определяет имя дискового устройства с Редактором. В процессе загрузки Редактора в нижней части экрана высвечи- вается служебная строка, в которой в процессе всего функцио- нирования пакета отображается различного рода служебная информация: выполняемые модули Редактора, диагностические сообщения, активный дисковод, имена редактируемых файлов, результаты выполнения команд Редактором и т. д. Например, в служебной строке отображается версия Редактора. После загрузки пакета на экран выводится заголовок <РЕДАКТОР ТЕКСТОВ>, размер свободной области памяти для создаваемого или редактируемого текста и меню, содержащее команды Редактора, приведенные в табл. 48. Таблица 48 Команда Назначение команды D R Е S F с Вывод имен всех файлов на указанном диске Вызов заданного файла в память Редактирование файла в памяти ПЭВМ Запись файла с указанным именем на диск Задание формата печати файла Создание нового файла на указанном диске (представляет собой очистку памяти] N Z Р н X Замена имени указанного файла Удаление указанного файла с диска Вывод указанного файла на печать Вывод информации о возможностях Редактора Завершение работы с Редактором
Работу с Редактором на уровне выше перечисленных 11 команд будем называть работой в режиме меню. В данном режиме в левой части служебной строки указывается активный диско- вод (после загрузки Редактора активным устанавливается ди- сковод 'В'). Если пользователь в какой-либо команде Редактора затем укажет другой дисковод, то после выполнения команды именно этот дисковод становится активным. Все команды Редактора работают в диалоговом режиме и запросы на действия пользователя весьма просты и особой подготовки с его стороны не требуют. В случае ошибки пользо- вателя Редактор в служебной строке выводит диагностическую информацию с последующим переходом к запросу вида об- служивания. Если же ошибка обнаружена до начала выпол- нения команды, то нажатием любой клавиши ЦК отменяется ввод команды и осуществляется возврат к запросу вида обслу- живания. В качестве символов имени файла, с которыми работает Редактор, можно использовать только латинские буквы, цифры, знаки '+\ ',', '.', '[', Т> Y, '(', ')'. В имени файла не допускают- ся обобщающие символы. После вывода меню Редактор запра- шивает у пользователя вид обслуживания, на что пользователь отвечает вводом одной из перечисленных 11 команд (табл. 48). Рассмотрим,эти команды подробнее. Команда 'D' запрашивает имя дисковода с дискетой и после получения ответа выводит на экран список имен всех файлов дискеты, после чего выдается запрос на вид обслуживания. Команда 'R' запрашивает спецификатор файла и после полу- чения ответа загружает в память искомый файл. После загрузки в служебную строку выводится сообщение 'ФАЙЛ ЗАГРУЖЕН' и объем свободной памяти в процентах. Эту часть памяти можно использовать для расширения редактируемого текста. Пользо- вателю рекомендуется следить за этой информацией, чтобы не превысить объема выделяемой памяти. Максимальный объем памяти для текста составляет 50 Кбайт, т. е. примерно 1,3 авторских листа или 30,5 стандартных машинописных страниц. Команда 'S' осуществляет запись на заданный диск файла из оперативной памяти под указанным (в ответ на запрос коман- ды) именем. Если редактируемый файл был считан с диска, то перед его возвращением на диск пользователю предоставляет- ся возможность сохранить старое имя или записать файл в дру- гое место диска под новым именем. Такая возможность весьма полезна при необходимости сохранения исходного файла. Команда С' служит для создания на указанном пользовате- лем диске пустого файла с именем, определенным в специфика- торе создаваемого файла. Однако в поставляемой версии 1.0 Редактора эта команда не реализована в полной мере. Следует помнить, что по команде 'С' не только не создается какой-либо файл на диске, но и очищается память от находящегося в ней текста. Поэтому команду С* рекомендуется использовать перед
Формированием с консоли системы нового файла, который впо- следствии предполагается сохранить на диске по команде 'S' иЛи по клавишам 'ALT' + 'F2'. В свете сказанного, данную команду более правильно определить как команду очистки памяти от редактируемого текста. Перед дальнейшим изложением сделаем одно замечание. Как уже пояснялось выше, под 'спецификатором' файла в общем случае понимается конструкция вида [ИУ:][путь]<ИФ>[.РФ]. Однако используя данное понятие при изложении настоящей главы, мы должны помнить, что для Редактора элемент <путь> не допустим, т. е. файлы, с которыми работает Редактор, должны располагаться в главном каталоге тома. Следовательно, при изложении Редактора под 'спецификатором' файла будет пони- маться конструкция [ИУ:]<ИФ>[.РФ]. При вводе команды осу- ществляется обращение к указанному спецификатором созда- ваемого файла дисководу, но сам файл при этом не создается. Для создания нового файла можно воспользоваться либо стро- ковым редактором EDLIN, либо в режиме печати использовать команду S' (выбор устройства печати) для вывода в дисковый файл. Эта возможность будет рассмотрена несколько ниже. По команде 'N' запрашивается спецификатор файла, который следует переименовать, и новое его имя. В результате выполне- ния команды старое имя файла заменяется новым. По команде Z' удаляется с диска указанный пользователем файл. Перед его удалением требуется санкция пользователя на проведение/такой операции. Команда 'Н' позволяет вывести на экран информацию о воз- можностях Редактора. Однако в поставляемой версии 1.0 Редак- тора данная команда не объявлена и отсутствует в перечне команд меню.' Команда F' служит для выбора или модификации формата печати. Команда 'Р' предназначена для вывода текстового фай- ла на заданное устройство печати в указанном формате. Воз- можности обоих команд Редактора будут подробно описаны в последнем разделе настоящей главы. Команда 'Е предназначена для перевода Редактора в режим редактирования вновь создаваемого или находящегося в памя- ти файла. В этом режиме можно редактировать как вновь созда- ваемый файл, так и файл, предварительно считанный для этого в память с указанного диска. Пользователь имеет возможность в любое время вернуться в режим меню и записать отредакти- рованный файл на диск под его старым или новым именем. Под- робное описание работы в режиме редактирования будет рас- смотрено в следующем разделе. По команде X' завершается работа Редактора с выходом в состояние системы (идентификация на экране метки сис- темы *А> ). Перед выходом в состояние системы пользователь получает возможность записать на диск отредактированный файл, находящийся в памяти ПЭВМ. Такая возможность предо- ставляется в том случае, если перед выдачей команды 'X осу-
ществлялось редактирование файла (т. е. применялась пользо- вателем команда *Е') без последующей записи его на диск. 8.3. РАБОТА С ПАКЕТОМ В РЕЖИМЕ РЕДАКТИРОВАНИЯ Для перехода к режиму редактирования необходимо ввести команду Е', предварительно загрузив по команде 'R' в память редактируемый файл. После выполнения команды 'Е' на экра е отображается начало редактируемого текста, который можно дополнять или редактировать. Если перед выдачей команды 'Е' не производилась загрузка файла или был загружен пустой файл, то экран остается чистым и можно приступить к формиро- ванию текста. В оооих случаях курсор находится в левом верх- нем углу экрана. В режиме редактирования служебная строка содержит две буквы С' и 'п' с цифрами, которые определяют соответственно номер строки и номер позиции в ней, где установлен в данный момент курсор. Курсор по экрану можно двигать клавишами ЦК с нанесенными на них стрелками и цифрами 2, 4, 6, 8. Смысл этих клавиш ясен и особых пояснений не требует. Нажатие кла- виши Г перемещает курсор в первую позицию последней стро- ки экрана, а каждое нажатие клавиши '2' поднимает текст на экране на одну строку вверх. Нажатие клавиши '7' перемещает курсор в первую позицию первой строки экрана. Клавиша '3' поднимает текст на пол-экрана вверх и выводит на экран поло- вину следующей экран-страницы. В свою очередь клавиша '9' проделывает обратную операцию. Клавиша табуляции (левая крайняя клавиша °о второй строке АЦК сверху) перемещает курсор сразу на несколько позиций вправо. Последовательное нажатие клавиши 'CTR' и клавиш 7, 1,6,4,3,9 ЦК позволяет выполнять действия согласно табл. 49. Формирование текста осуществляется нажатием клавиш АЦК подобно обычной пишущей машинки. В процессе формиро- вания текста можно в рамках всей страницы-экрана переме- Таблица 49 Клавиши Действие Редактора ctr + 7 Перемещение курсора в начало редактируемого текста ctr + 1 Перемещение курсора в конец редактируемого текста ctr + 6 Перемещение курсора на следующее слово строки CTR + 4 Перемещение курсора на предыдущее слово строки ctr + а Вывод следующей страницы-экрана; последняя строка те- кущего экрана располагается вверху ctr + э Вывод предыдущей страницы-экрана; первая строка теку- щего экрана располагается внизу
щать курсор, редактируя текст. По мере заполнения текстом строки экрана он автоматически переносится в следующую строку. При переходе к новому абзацу нажимается клавиша 'ПУСК , курсор перемещается в начало следующей строки экрана, а в конце введенного абзаца появляется специальный зНак (греческая буква 'ПИ'). Этот знак является служебным символом Редактора и не печатается при выводе текста. При формировании текста пользователь получает возмож- ность предусмотреть подчеркивание, зачеркивание или двойную печать отдельных фраз строки, а также работать с верхними и нижними индексами. Для последующего вывода фраз строки с подчеркиванием, зачеркиванием или двойной печатью необ- ходимо в конце набранной строки нажать не клавишу 'ПУСК', а клавиши 'CTR + ПУСК*. В результате этого в конце строки уста- навливается символ 'музыкальная нота' и курсор перемещает- ся на следующую строку экрана. В этой строке под фразами, требующими подчеркивания или зачеркивания, вводятся соот- ветственно символы (подчеркивание) или символы ' - (дефис), а под фразами, печатаемыми дважды, эти фразы дубли- руются. После этого нажимается клавиша ПУСК'. В одной стро- ке можно сочетать все перечисленные приемы, как показано в следующем простом примере: Математическая теория однородных структур - подготов- Математическая _________________ ленный текст Математическая теория однородных структур - результат -------------------------------- вывода на печать При необходимости сдвинуть элементы строки текста отно- сительно текущей строки вверх или вниз необходимо перед вво- дом этих символов нажать клавиши 'CTR + X' (на экране появля- ется стрелка вверх), ввести эти символы, а затем нажать клави- ши 'CTR + Y' (появившаяся на экране стрелка вниз говорит о возврате к уровню текущей строки). Для ввода символов со смещением вниз относительно текущей строки все вышепе- речисленные операции производятся в обратном порядке: пе- ред их вводом нажимаются клавиши 'CTR + Y', а после их вво- да - клавиши 'CTR + X'. Например, подготовленный согласно вышесказанному текст: Структура есть упорядоченная четверка [A,tr(n)l,Xtnl,d] при выводе на принтер принимает вид: Структура есть упорядоченная четверка [A,t(n),Xn d] Следует отметить, что совместное использование возможно- стей подчеркивания, двойной печати, верхних и нижних сим-
волов в общем случае не допускается. Например, использова* Wne в предыдущем примере дополнительно двойной печати и подчеркивания приводит к невозможности установки н 1жнего индекса: Структура есть упорядоченная четверка [A,t(n),Xn,d] Для помещения в текст любых символов кодовой таблицы ПЭВМ (см. приложение 1) следует нажать клавишу 'ALT' и ввести с порядковый номер нужного символа. Такой способ применяется для ввода символов, отсутствующих на клавиатуре, в частнос- ти, символов псевдографики. Именно эти символы весьма по- лезны при формировании в тексте различного рода таблиц, схем, диаграмм и т. д. Редактор дает возможность ввода в редактируемый или фор- мируемый текст специальных символов, используя клавишу 'ALT' совместно с другими клавишами (табл. 50). Приведенные в табл. 50 символы можно вводить в текст и с по- мощью их порядковых номеров в таблице кодов ПЭВМ (см. при- ложение 1). Однако настоящая таблица в ряде случаев пред- ставляется более удобной для практической работы. Клавиша в правом верхнем углу АЦК осуществляет воз- врат курсора на шаг с одновременным стиранием символа. Следует отметить, что фиксация той или иной клавиши произ- водит непрерывное повторение действия, определяемого одно- кратным нажатием этой клавиши. Например, фиксация клавиши ' ' производит непрерывное посимвольное стирание симво- лов справа налево с соответствующим перемещением курсора. Таблица 50 Клавиши 'ALT'+Y Y Символ Клавиши 'ALT'+Y Y Символ Клавиши 'ALT'+Y Y Символ J F С Л и тг К IF Е т N 1 G <1 Z 41 Н 1к F II Y □и W т А T1 Р 1 R J 0 - L JL D F V — О Г S F М JL I -Л. т L X к В 1 4 2 IL 3 d 4 lb чк 5 тг 6 7 8 & т 9
Клавиша удаления в нижней строке ЦК удаляет символ, пОд которым установлен курсор, и сдвигает часть строки (от курсора до ее правого конца) на шаг влево. Данная клавиша ^ожет использоваться для уплотнения строк. Клавиша'*—' в нижней строке ЦК служит для вставки текста в строку. Для этого курсор подводится к позиции в строке, где нужно сделать вставку, нажимается клавиша '*—' (курсор при этом расширяется) и набирается текст вставки, раздвигая стро- ку и весь следующий за ней текст на требуемое число позиций. После завершения вставки снова нажимается клавиша '*—', кур- сор принимает свои обычные размеры и редактирование текста можно продолжить в обычном режиме. Если в процессе редактирования правые стороны строк абза- ца оказываются невыровненными, то выравнивание можно сде- лать в любое время. Для этого достаточно установить курсор в начало абзаца и нажать клавишу 'F8'. Для выравнивания необ- ходимо наличие в строках абзаца пробелов, в противном случае выравнивания не происходит. Выравнивание происходит от того места, где устанавливается курсор, до конца абзаца, т. е. пер- вого нажатия клавиши 'ПУСК . В режиме редактирования можно использовать функциональ- ные клавиши F1+F1O либо самостоятельно, либо совместно с клавишей 'ALT*. Рассмотрим эти возможности отдельно (табл. 51). По клавише F1' на экран выводится информация о назначе- нии функциональных клавиш 'F1-J-F1O' самих по себе и совмест- но с клавишей 'ALT'. Если эта информация накрыла часть редак- тируемого текста, то его можно сдвинуть вниз клавишей ЦК '9'. Для стирания информации с экрана о функциональных клавишах достаточно еще раз нажать клавишу 'F1 . Клавиша 'F2' позво- ляет записать выделенный блок текста на диск, для чего в ответ на запрос следует ввести спецификатор файла. Если блок не был выделен, то на диск записывается часть текста, начиная со строки с курсором до конца. Клавиша 'F3' перемещает курсор в Таблица 51 Клавиша Назначение клавиши F1 Вывод информации о назначении клавиш F1+ fio F2 Вывод редактируемого файла на диск F3 Перемещения курсора к концам строки F4 Удаление указанного слова в строке F5 Установка метки начала выделенного блока F6 Установка метки конца выделенного блока F7 Поиск заданного слова в редактируемом тексте F8 Выравнивание строк абзаца по правой стороне F9 Установка макета табуляции строк текста F10 Возврат к исходному тексту (клавиша сброса)
концы текущей строки - первое нажатие клавиши перемещает курсор в начало строки, следующее - в конец строки, потом опять в начало и т. д. Клавиша 'F4' позволяет удалять сло- во или его часть (от курсора до конца слова), на котором уста- новлен курсор. Остаток строки при этом сдвигается влево Клавиши 'F5' и 'F6' позволяют соответственно отмечать нача- ло и конец выделенного блока в тексте. Блок представляет со- бой набор подряд идущих строк текста. Метками начала и конца выделенного блока служат светящиеся треугольники. Выделен- ные блоки можно удалять, копировать, перемещать в тексте и записывать их на диск. Для манипуляций с выделе ным блоком курсор следует установить на метку начала блока или в определенное место текста. Случаи того или иного места ус- тановки курсора будут рассмотрены несколько ниже. В каждый момент текст в памяти может содержать только один выделен- ный блок. Несколько выделенных блоков создать одновременно нельзя. При , выделении блоков возможны ошибки: нажатие клавиши F5' вместо 'F6' и т. д. Следует помнить, что при любых ошибках, допущенных в режиме редактирования, можно выполнить сброс клавишей *F10* и привести текст в исходное состояние. Клавиша *F7' позволяет отыскать в редактируемом тексте первое вхождение указанного контекста. После нажатия клави- ши в служебной строке высвечивается слово 'НАЙТИ', после которого следует указать искомый контекст. Поиск производит- ся от местоположения курсора до конца текста. Если контекст не найден, то в служебной строке высвечивается сообщение 'НЕ НАЙДЕН'. В противном случае - сообщение 'НАШЕЛ' и мес- тоположение этого контекста в виде номера строки и позиции его начала в ней. При этом осуществляется переход в режим вставки и перед найденным контекстом можно поместить любой текст., Для отмены режима вставки следует нажать кла- вишу ЦК **"*’, а отмены поиска, контекста - клавишу 'F10' По- следующие нажатия клавиши 'F7' отыскивают все остальные вхождения искомого контекста по принципу кольца: к последне- му вхождению и от него снова к первому. Об использовании клавиши F8' для выравнивания правых концов строк абзаца говорилось выше. Клавиша 'F9' служит для определения линии установки табуляции, которая позволяет ограничивать строки формируемого текста справа и слева по- добно ограничителям обычной пишущей машинки. При нажатии клавиши F9* вверху экрана высвечивается информация о табу- ляции с текущей линией табуляции, которую можно оставить без изменения или изменить согласно требованиям пользователя. Линия табуляции имеет вид: V — +---+-------1---+-------/• На этой линии символами V и 7' отмечены границы левого и правого полей формируемого текста, а символом ' + ' отмече- ны метки табуляции, связанные с,клавишей табуляции. Эти мет- ки не обязательны. Символом ': * отмечается граница, по кото- рой можно выравнивать справа отдельные абзацы текста. Сле-
дует быть внимательным при изменении линии табуляции, чтобы не выйти за пределы экрана. В этом случае Редактор не сможет правильно форматировать текст и возможны непредсказуемые результаты. В случае любых осложнений следует нажать клави- шу сброса "F10" и вернуться к режиму редактирования. для ограничения левой и правой сторон строк текста следует поставить в нужных позициях линии табуляции символы 'V при этом предыдущие ограничители могут оставаться на своих местах, если они включают в себя новые ограничители. Теперь после нажатия клавиши 'F9' и возвращения к режиму редактирования вводимый или форматируемый текст будет ограничиваться в соответствии с новыми ограничителями линии табуляции. Если в линии табуляции передвинуть символ то текст три формировании будет ограничиваться согласно ограничителям \ и 7', а при форматировании любого абзаца его правая грани- ца выравнивается по символу Метки табуляции '+' влияют только на перемещения курсора при нажатии клавиши табуля- ции. Эти метки бывают очень удобны, например, при вводе раз- личного рода таблиц, в которых цифры должны располагаться по графам - одна под другой. Тогда, установив метки в линии табуляции согласно требуемой разметке граф, можно переме- щаться от одной графы к другой, нажимая клавишу табуляции. Клавиша табуляции может выполнять еще одну полезную функцию. Если при формировании текста необходимо распола- гать какой-либо абзац с отступом от левого края, то можно установить курсор на первую позицию начала абзаца, затем на- жать клавишу "верхний регистр" и, не отпуская ее, нажать кла- вишу табуляции. После этого до нажатия клавиши ПУСК' дейст- вует новое значение для крайней левой позиции формируемого абзаца текста. При форматировании абзацев текста, сформированных с от- ступом от левого края, следует также сначала установить кур- сор на нужную позицию, затем нажать клавиши 'верхний ре- гистр' и табуляции, а после этого - клавишу 'F8'. Клавиша F10 (сброс) позволяет отменить все ошибочные изменения текста, привести текст в исходное состояние, отме- нить режим редактирования и вернуться в режим меню. Рассмотрим теперь использование функциональных клавиш вместе с клавишей "ALT". Возможности редактирования текста в этом случае приведены, в табл. 52. По клавишам ALT + F1' отредактированный в памяти текст можно вывести на принтер. Подробно данная возможность бУдет рассмотрена в следующем разделе. Клавиши "ALT + F2' позволяют в качестве вставки в редакти- руемый текст поместить указанный файл (или его часть), счи- танный с диска. Файл помещается в текст перед строкой, в кото- рой установлен курсор. После нажатия клавиш ALT + F2' на экране высвечивается сообщение о загрузке с диска в текст и запрос на определение вводимого файла. Ответ следует ввес-
Клавиши Назначение клавиш ALT + F1 ALT + F2 ALT + F3 ALT + F4 ALT + F5 ALT + F6 ALT + F7 ALT + F8 ALT + F9 ALT + F10 Вывод отредактированного текста на принтер Чтение файла с диска в редактируемый текст Раздвижка текста на одну строку Удаление заданной строки текста Перемещение выделенного блока строк текста Копирование выделенного блока строк текста Автоматическая замена заданных слов текста Удаление выделенного блока строк текста Центровка указанной строки текста Выход в режим меню Редактора ти в виде [ИУ:]<ИФ>. После этого запрашивается, с какой строки осуществлять ввод файла. После получения ответа в редакти- руемый текст загружаются строки файла, начиная с указанной и до конца файла. Если в ответ на запрос строки начала води- мого файла нажать клавишу 'ПУСК*, то загрузки файла с диска не происходит; то же самое действие будет, если указан номер строки, больший максимального номера строки в загружаем; м файле. Клавиши ALT + F2' очень эффективны при компоновке текста из уже готовых отдельных его частей. Клавиши 'ALT + F3' раздвигают редактируемый текст на одну строку. Пустая строка помещается выше той строки, на которой установлен курсор. Каждое новое нажатие указанных клавиш раздвигает текст на одну строку, а курсор остается на прежнем месте. Клавиши 'ALT + F4' позволяют удалить строку текста, на кото- рой установлен курсор. Остающиеся строки текста при этом уплотняются на одну строку. Если курсор установлен на первой позиции пустой строки, то клавиши ALT + F4' уплотняют екст на пустую строку. Это свойство бывает весьма полезным при необходимости уплотнить текст. Если курсор стоит в середине строки, то клавиши 'ALT + F4' удаляют часть строки от курсора до ее конца. Клавиши ALT + F5' позволяют переместить выделенный блок строк (посредством клавиш 'F5' и 'F6') перед строкой текста, на которой установлен курсор. Занимаемое блоком место осво- бождается без уплотнения текста. Для перемещения какой-то части текста следует пометить его начало и конец соответст- венно клавишам F5' и 'F6', установив курсор на строку, перед которой будет осуществлена вставка, и нажать клавиши 'ALT + F5'. Вставка выделенного блока внутрь самого себя не допускаедся. Клавиши 'ALT + F6' действуют подобно клавишам 'ALT + F5 , но с тем отличием, что оригинал выделенного блока стается на месте, а переносится его копия. После переноса выделен- ного блока он перестает существовать в тексте как блок и ста- новится обычным набором строк.
Клавиши 'ALT + F7' аналогичны клавише 'F7', но отличие сос- тоит в том, что первый найденный контекст автоматически за- меняется на новое содержимое. После нажатия указанных кла- виш в служебной строке высвечивается сообщение 'ЗАМЕ- НИТЬ', на которое следует ввести заменяемый контекст и на- жать клавишу 'ПУСК'. После этого в служебной строке появляет- ся сообщение 'НА', требующее определить новое содержание для замены. Ввод нового содержания приводит к появлению сообщения 'BCE(Y/N)'. Ответ Y' приводит к замене всех вхож- дений заменяемого контекста на новое содержание, в против- ном случае Редактор останавливается после каждой произве- денной замены и переходит в режим вставки. В этом случае можно вставить любой текст за измененным контекстом или продолжить поиск и замену дальше по тексту. В процессе про- ведения замены контекстов пр всему тексту можно чередовать использование клавиш 'F7' и 'ALT + F7'. Режим замены контек- стов можно, прекратить по клавише 'F10'. Клавиши 'ALT + F8' удаляют выделенный блок строк из тек- ста, уплотняя при этом весь оставшийся текст. По клавишам 'ALT + F9' текст строки, на которой установлен курсор, располагается строго по центру (центруется). Этот при- ем эффективен для центровки различного рода заголовков, фор- мул или специальных выделенных абзацев. Каждое нажатие клавиши F9' (при фиксированной клавише 'ALT') центрует стро- ку, на которой установлен курсор, и после этого переводит кур- сор на следующую строку текста. Следующее нажатие клавиш. 'F9' центрует очередную по порядку строку текста и так далее По клавишам ALT + F10r осуществляется выход в режим меню. Если после этого пользователь введет какую-либо коман- ду, то Редактор сделает напоминание об исчезновении редакти- рованного файла, если пользователь не запишет его на диск. Пользователь получает возможность записать файл на диск либо проигнорировать предупреждение Редактора. Подробно обсудив вопросы создания и редактирования тек- стовых файлов, переходим к рассмотрению возможностей Редактора при выводе текстовой информации на печать. 8.4. РАБОТА С ПАКЕТОМ В РЕЖИМЕ ПЕЧАТИ Редактор дает возможность выводить текст как в стандарт- ных, так и задаваемых пользователем форматах. Их можно записывать на диск как файлы с заданными именами, корректи- ровать и загружать в память перед выводом на принтер того или иного текстового файла. Следовательно, на диске можно создавать целые наборы форматов печати для вывода различно- го рода текстовой информации. Стандартный формат печати Редактора находится в файле F-80'. Этот формат используется Редактором всякий раз, если пользователем не указано про- тивного.
Доступ к формату печати пользователь получает в двух слу. чаях: использование в режиме меню команд F' (формат) и р' (печать). Во втором случае при выборе режима печати можно указать ответ 'F' и получить возможность проверить или изме- нить формат печати. По команде 'F' сразу же осуществляет- ся выход на выбор формата печати. С этой целью на экран выводится таблица с параметрами стандартного формата печати (файлы F-80 и VW.FMT) и запрашиваются действия пользователя: U - использовать данный формат печати; М - изменить формат печати; R - считать формат печати с диска; S - записать формат печати на диск. Формат печати содержит 13 параметров, назначение которых приведено в табл. 53. В первой графе таблицы приведено название параметра фор- мата печати, в третьей - его назначение, а во второй графе - значения параметров, применяемых в качестве дополнитель- ного формата печати в операционной системе MINIDOS. Такой Таблица 53 № п/п 1 2 3 1 Тип принтера (1*3) 1 1 - стандартный 2 Сброс принтера (Y/N) N n - стандартная печать 3 По страницам (Y/N) Y y-разделение текста по страницам; n - без разделе- ния страниц 4 Строк на странице (2*255) 29 Число строк 5 Первая строка текста 1 Номер строки, с которой выводится текст на стра- нице 6 Последняя строка текста 29 Номер последней строки страницы 7 Левое поле 6 Число позиций отступа от левого края страницы 8 Интервал между строками 0 Допустимо 0,1,2 9 Печать без останова (Y/N) N Y - автоматическая печать следующей страницы; N-останов после каждой страницы текста 10 Число строк на дюйм 3 Плотность печати 11 Символов в строке 80 80-обычная печать; 40-транспарантный шрифт; 66-двойная печать вразряд- ку, 132-печать мелким шрифтом 12 BOLD PRINT (Y/N) N Печать знаков двойной ширины 13 SHANDOW PRINT (Y/N) N Двойная печать
Формат печати ориентирован на подготовку материалов к пу- бликации, когда текст рукописи выводится на листы формата д4 по 29 строк на лист и 58-60 символов в строке. Данный формат печати в системе MINIDOS оформлен в виде файла VW.FMT'. В системе АДОС принятый формат печати (файлы р80 и VW.FMT) соответствует требованиям ЕСПД и информа- цию о нем можно найти в [17]. Большинство перечисленных параметров формата печати особых пояснений не требуют и их назначение ясно из приведенной таблицы. Параметр 11 задает режим печати и может принимать сле- дующие значения: 40 - печать текста транспарантным шрифтом; 66 - двойная печать текста вразрядку; 80 - стандартная печать текста; 132 - печать текста мелким шрифтом. Параметры 12 и 13 формата печати задают специальные режимы печати: печать двойной ширины и с двойной пропечаткой соот- ветственно. Двойная пропечатка состоит в двойной печати каж- дой строки текста и используется, как правило, при плохого качества красящей ленты принтера. Можно этот режим печати использовать и для выделения фраз в тексте. Скорость печати текста при этом уменьшается, в два раза. Четыре команды 'U', 'М', 'R' и 'S' используются для работы с форматом печати. По команде 'U' в качестве формата печати используется формат, приводимый в таблице в верхней части экрана. Редактор после выполнения данной команды переходит в режим меню и пользователь получает возможность выводить свои текстовые файлы согласно выбранного формата. По команде 'М можно модифицировать все параметры фор- мата печати. Принцип модификации весьма прост и приводится тут же в правой части экрана. В таблице приводятся значения параметров текущего формата печати. Нажимая клавишу ПУСК', переходим от значения одного параметра к другому. При необходимости любое значение можно заменить новым. После просмотра и/или изменения значений параметров формата печати пользователь получает возможность снова выполнить любую из перечисленных четырех команд, обслуживающих формат печати. По команде 'S' пользователю предоставляется возможность записать формат печати на диск, для чего у него запрашивается имя файла и его местоположение. После записи формата печати на диск осуществляется выход на меню формата. По команде R* с диска загружается формат печати и его со- держимое выводится на экран. Для загрузки формата в ответ на запрос Редактора необходимо указать имя файла, содержащего искомый формат, и, возможно, имя дискового устройства. После загрузки формата печати пользователь получает возможность выводить свои текстовые файлы согласно выбранного формата печати.
После выполнения команды 'U' или нажатия клавиш ’ALT + F10' Редактор переходит в режим меню. Используя те- перь команду Р’, можно вывести на печать требуемый тексто- вой файл. После ввода команды 'Р' Редактор предоставляет пользователю возможность выбора режима печати: N - печать в формате файла; Р - печать в заданном формате; F - проверка или изменение формата печати; S - выбор устройства печати; X - возврат в режим меню Редактора. При выборе режима 'N' печать осуществляется в формате файла. После записи формата печати на диск его можно вызывать для печати требуемых текстовых файлов согласно этого форма- та. Однако гораздо удобнее связывать с файлом или группой файлов свой формат печати, записанный на том же дисковом томе, что и текстовые файлы. Редактор ассоциирует с форматом печати текстовой файл на уровне их имен: имя файла печати совпадает с именем текстового файла и имеет расширение .FMT, либо имеет имя VWFORMAT и расширение ассоциирован- ного с ним текстового файла. Например, для текстового файла BOOK1.TXT полное имя файла с форматом печати должно быть BOOK1.FMT, либо VWFORMAT.TXT. При выводе файла <ИФ.РФ> на печать по команде ’N' производится поиск ассоциированного с ним формата печати: сначала по имени <ИФ>.РМТ, затем - по имени \МРОАМАТ.<РФ> и только в случае их отсутствия ис- пользуется текущий активный формат печати или стандартный формат VW.FMT. При выборе режима 'Р' на экран выводятся рекомендации по подготовке принтера к работе и запуску печати. Печать фай- ла осуществляется с того места, где был установлен курсор в процессе редактирования. Это позволяет выводить на пе- чать любые фрагменты файла. Приостановить вывод файла на печать можно по клавише 'F10' и прекратить - по клавишам ’ALT + F10'. В первом случае печать возобновляет нажатие любой клавиши, во втором - Редактор переходит в режим меню. При выборе режима ’F' осуществляется переход к меню фор- мата печати, работа с которым была описана выше. Производя необходимые, действия с форматом печати на основе четырех команд 'U', 'м', 'R’ и ’S’, пользователь может вновь вернуться к режиму печати. Режим ’S’ позволяет выбрать устройство для ♦выводимого текстового файла: Р - стандартный принтер; S - нестандартный принтер; V - вывод файла на экран; W- вывод текста в дисковый файл.
При выборе нестандартного принтера Редактор просит спецйЛи- цировать параметры порта ввода-вывода: скорость передачи в бодах, паритет, стоповые биты и число бит в байте. После это- го пользователю предоставляется возможность выводить файл на печать. Вывод текста в дисковый файл (W) позволяет запи- сать выводимый файл на диск под заданным именем. Этим спо- собом, в частности, можно создавать пустые файлы на дисках. В состав ПЭВМ ИСКРА 1030 входит стандартный принтер, автоматически устанавливаемый при загрузке Редактора. Поэ- тому, как правило, выбора устройства печати не требуется. На- конец, нажатие клавиши 'X переводит Редактор в режим меню. Выход на режим печати возможен непосредственно из режи- ма редактирования по клавишам 'ALT + F1'. В этом случае не производятся ни установка формата печати, ни выбор режима печати. Осуществляется вывод на стандартный принтер в стан- дартном или предварительно определенном формате печати. Наряду с перечисленными возможностями по выводу файлов на печать Редактор позволяет организовать ряд специальных режимов печати: нумерацию страниц, печать титульных заголов- ков, пропуск строк печати. Специальные режимы печати задают- ся управляющими командами, помещаемыми, в выводимый текст. Эти управляющие команды помещаются внутрь редакти- руемого текста, и их действие начинается с момента вывода строк, содержащих эти команды. Сами команды при этом не выводятся-, а только содержат информацию для Редактора в режиме печати. Управляющая команда может вводиться отдельной строкой в любом месте текста и начинается двумя точками (..) в первых двух позициях строки. Редактор позволяет использовать две управляющие команды: вывод справочной информации по стра- нице и пропуск выводимых строк страницы. Первая управляющая команда имеет формат ..ТТТТССВ {<текст> I -##-}, где: ТТТТ - принимает значения 'head/ или 'foot', позволяющие выводить информацию соответственно вверху или внизу страницы; СС - число, определяющее номер строки вывода, начиная сверху; В - значения L', 'R' или 'С' определяют соответственно вывод информации слева, справа или в самом цент- ре строки; значение А' позволяет выводить инфор- мацию попеременно то справа, то слева (при этом значения параметра 'В' должны вводиться заглав- ными буквами); <текст> - произвольная текстовая строка; ## - вывод номера страницы.
Например^ управляющая команда '..foot40C-##-' говорит о" том, что на каждой странице внизу в 40-й строке будет вы- водиться номер страницы в виде' -кк-. Нумерация страниц всегда начинается с единицы и нумерация с произвольного номера не допустима. Управляющие команды можно исполь- зовать группами. Например, помещенная в начале текста группа команд ..ЬеасЮНеория однородных структур ..Ьеаб02Справочное пособие ..foot50C-##- позволяет на каждой странице выводимого текста в первых двух его, строках сверху выводить текст 'Теория однородных структур* и 'Справочное пособие*, а в строке 50 - порядковый номер данной страницы в виде *-кк-'. Подобный подход можно успешно использовать для оформления различного рода техни- ческой документации, отчетов, рукописей и т. д. Вторая управляющая команда имеет формат ..PAGEp (р=1,2,3,...) и предназначена для пропуска *р* следующих за ней строк текста. Смысл ее состоит в том, что если следующие за ней *р* строк текста не помещаются на текущей странице, то сле- дует пропустить оставшуюся часть страницы до конца и начать печать с начала новой страницы. Эту команду рекомендуется использовать перед заголовками разделов, глав и т. п., чтобы в конце страницы не мог оказаться один заголовок без текста. Дополнительно к команде, PAGE можно использовать символ параграфа (клавиши *CTR* + 'U'), который при выводе на пе- чать служит указанием Редактору пропустить одну чистую страницу бумаги на принтере. Следует отметить, что действие рассмотренных управляю- щих команд проявляется только при выводе текстов посред- ством Редактора. Другие способы вывода текста на печать не воспринимают этих команд, и они выводятся на печать как обычные текстовые строки. К сожалению, Редактор версии 1.0 имеет ограниченные возможности для специальных режимов печати из-за отсут- ствия таких управляющих команд как: ..PGNO - указание начального номера страниц текста; ..PAUSE - приостановка вывода текста до нажатия лю- бой клавиши; ,. PRINT - печать указанного дискового файла; ..FORMAT - задание формата печати файла; ..VERM - установка режима передачи устройству пе- чати специальных символов; ..NORM - отмена режима, установленного по ..VERM.
Наличие перечисленных управляющих команд позволяет су- щественно расширить возможности управляемого вывода текста на печать. Например, с помощью команды ..PRINT можно в выводимый текст помещать отдельные части из других фай- лов или организовать непрерывную печать подряд идущих отдельных текстовых файлов; по команде ..FORMAT имеется возможность разные части текста выводить на печать в разных форматах. Следует отметитьг что в аналогичном редакторе НЕЙРОН-ТЕКСТ для ПЭВМ НЕЙРОН И9.66 данные возможности имеются, хотя оригиналом для обоих пакетов послужил один и тот же зарубежный пакет. Это еще раз акцентирует внима- ние пользователя на отсутствии программной совместимости вышеупомянутых отечественных ПЭВМ, имеющих своим про- тотипом одну и ту же зарубежную систему IBM PC/XT. На этом завершается рассмотрение пакета программ 'Ре- дактор текстов', которое вполне достаточно для самостоятель- ной работы с пакетом. Возможности пакета позволяют широ- кому кругу пользователей организовать эффективную работу с различного рода текстовой информацией: оформление доку- ментации, подготовка рукописей к публикации, деловая и лич- ная переписка и так далее. Следует отметить, что рукопись настоящей книги была также подготовлена с помощью данно- го пакета. В настоящее время для IBM РС/ХТ/АТ и совместимых с ней моделей ПЭВМ существуют более развитые средства работы с текстовой информацией как общего, так и специаль- ного характера. Некоторая информация о таких средствах при- ведена в гл. 10, а также в многочисленных фирменных ма- териалах по моделям IBM РС/ХТ/АТ и в сборнике [31].
9. МИНИМАЛЬНАЯ БАЗОВАЯ СИСТЕМА MINIDOS 9.1. ОБЩАЯ ХАРАКТЕРИСТИКА СИСТЕМЫ MINIDOS Поставляемое в настоящее время с ПЭВМ ИСКРА 1030 си- стемное ПО в условиях массового использования ПЭВМ дан- ного типа и их внешней памяти не является достаточно эффек- тивным. Связано это со следующими моментами: - основные системные файлы (интерпретаторы с языков программирования, Редактор текстов и т. д.) располагают- ся на разных дисковых томах, что в целом ряде случаев требует реконфигурации томов; особенно это становится актуальным при наличии одного НГМД; - использование таких системных средств, как интерпрета- тор Макроассемблера, редактор связей LINK, строковый редактор EDLIN и т. д. относительно редко в связи с мас- совым использованием языков программирования высо- кого уровня (напр., БЕЙСИК, ПАСКАЛЬ, ФОРТ и т. д.); - использование дискет (в нынешних условиях их острого дефицита) при стандартных поставках системного ПО весьма неэкономно; - целый ряд важных системных средств широкого назначе- ния отсутствует в стандартно поставляемом с ПЭВМ ПО. В связи с этим была создана версия базовой системы MINI- DOS для ПЭВМ ИСКРА 1030 и совместимых с нею ПЭВМ, которая базируется на основе операционных систем АДОС версии 2.0 и MS DOS версии 3.3. В общих чертах создание системы MINI- DOS состояло из четырех основных этапов: ( 1) перекомпановка системных файлов с целью размеще- ния всей системы на одном дискетном томе типа ЕС-5287; ( 2) замена ряда модулей системы АДОС 2.0 соответствую- щими модулями системы MS DOS 3.3; ( 3) настройка системных файлов, определяющих основные параметры функционирования системы и прикладного ПО, на наиболее массовые режимы эксплуатации; ( 4) включение в систему ряда новых средств широкого наз- начения с предварительной их адаптацией. В результате проделанной работы была создана и сдана в про- мышленную эксплуатацию базовая система MINIDOS, имею- щая следующие основные характеристики;
- система MINIDOS размещается на одной стороне диске- ты типа ЕС-5287, ЕС-5288, ЕС-5281 или совместимых с ними; - реактивность системы MINIDOS практически совпадает с аналогичной характеристикой системы АДОС 2.0; - из средств системы АДОС в MINIDOS отсутствуют коман- ды EDLIN и EXE2BIN; - системные файлы CONFIG.SYS и AUTOEXEC.BAT имеют новое содержание; - дополнительно к собственно системным файлам включены в MINIDOS интерпретатор с языка БЕЙСИК, Редактор текстов, компиляторы с языков программирования FORTH и TURBO-PASCAL, три внешние команды и программа вы- вода текстовых файлов. Приведенный состав основных компонент показывает, что система MINIDOS наряду с поддержкой всех основных функций собственно операционной системы АДОС предоставляет поль- зователю возможность работать в средах языков БЕЙСИК, ПАСКАЛЬ и ФОРТ, а также пакета Редактор текстов, что делает ее достаточно эффективной программной средой для широко- го круга пользователей. 9.2. ОПИСАНИЕ ОСНОВНЫХ ХАРАКТЕРИСТИК И КОМПОНЕНТ СИСТЕМЫ MINIDOS В разделе приводятся значения характеристик системы, отличающихся от аналогичных характеристик системы АДОС 2.0. Прежде всего в системе MINIDOS не поддерживают- ся внешние команды EDLIN, EXE2BIN и средства работы с ка- налами связи. Средства строкового редактора EDLIN в MINIDOS перекрываются средствами Редактора текстов, a EXE2BIN и ка- налы связи в настоящее время не имеют массового приме- нения. Системный пакетный файл AUTOEXEC.BAT определяет в отличие от аналогичного файла системы АДОС системную метку вида MD <имя активного УВВ>, а также делает резидентными системные файлы GRAPHICS и GRAFTABLE. Такая организация позволяет автоматически использовать средства графики и псевдографики. Например, в графическом режиме пользователь может использовать буквы русского алфавита, тогда как в противном случае рус- ский текст оказывается замазанным', скажем, в среде языка БЕЙСИК. Посредством нового наполнения файла CONFIG.SYS в си- стеме MINIDOS определяется виртуальный диск (ВД) с логи- ческим именем <ИВД>:
г С, если ПЭВМ имеет винчестерский диск <ИВД>= LD , в противном случае Емкость ВД составляет 128 Кбайт, размер сектора ВД 512 бай- тов и главный каталог диска может содержать до 64 элементов. Максимальное число буферов ввода-вывода полагается равным 20, что позволяет эффективно работать с различного типа СУБД, например, СУБД dBase, а также в среде компилято- ра с языка TURBO-PASCAL. Максимальное число одновремен- но используемых файлов данных пользователя полагается Ю. Следует отметить, что в зависимости от модели ПЭВМ для команды BUFFERS рекомендуются параметры Тип IBM Значение параметра PC (без ’’Винчестера”) 4 XT (’’Винчестер” 10 Мб) 16 АТ (’’Винчестер” 20-40 Мб) 32 Для команды FILES рекомендуется значение 20 для эффектив- ной работы с различными системами программирования и СУБД. При функционировании системы MINIDOS оперативная память ПЭВМ используется следующим образом: резидентная часть (ядро) системы занимает 42 Кбайта, под виртуальный диск отводится 128 Кбайтов и остальная часть памяти предо- ставляется пользователю. Так, в случае ПЭВМ с 512 К оператив- ной памяти пользователь получает в свое распоряжение 342 Кбайта. Система MINIDOS пополнена двумя новыми внешними командами COLOR и DIRSORT. Команда COLOR выполняется в режиме меню и служит для изменения цвета символов, фона и рамки экрана дисплея. Работа с командой полностью со- ответствует работе оператора COLOR языка БЕЙСИК и особых пояснений не требует. Команда DIRSORT служит для вывода информации о файлах каталога в отсортированном по тому или иному признаку виде. Команда имеет формат DIRSORT [<путь>] [<параметры вывода>] где параметр ’’путь” задает путь к искомому каталогу (под- каталогу) тома. В команде допускается использование обоб- щающих символов. Параметры команды DIRSORT управляют выводом информации о содержимом каталога тома на экран дисплея (табл. 54). При работе с командой DIRSORT допускается совместное использование нескольких вышеперечисленных параметров. Например, по команде DIRSORT С: /L /Н осуществляется по-
Параметр Смысловая нагрузка /с Вывод файлов каталога в отсортированном виде (толь- ко по именам файлов) /D Вывод файлов каталога в отсортированном виде (в по- рядке убывания дат файлов) /Е Вывод файлов каталога в отсортированном виде (по расширениям имен файлов) /S Вывод файлов каталога в отсортированном виде (по возрастанию размеров файлов) /Н Подобно случаю И/С”, но с выводом скрытых файлов тома 7L Подобно случаю "/С", но вывод осуществляется постра- нично путем нажатия клавиши "ПУСК” /0 Быстрый вывод всего каталога в отсортированном виде без пауз для просмотра /т Выводятся: метка тома, число файлов на томе, их об- щий объем, свободное место на томе и текущие дата и время /и Аналогично обычной команде dir системы АДОС /V Подобно случаю ”/С”, но с каждым выводимым файлом ассоциируются первые три символа метки тома — Команда без параметров аналогична случаю "/С" страничный вывод отсортированного главного каталога тома на УВВ °C”, включая скрытые файлы каталога. Команда HARDWARE позволяет вывести на экран информа- цию о типе процессора и сопроцессора ПЭВМ, на которой эксплуатируется система MINIDOS. Например, по команде HARDWARE для ПЭВМ ИСКРА 1030.11 выводится сообщение Your PC uses 8088 or 8086 without 8087, говорящее о том, что ПЭВМ использует в качестве основного процессора Intel 8088 или 8086 и не использует сопроцессора Intel 8087. Такая информация представляется весьма актуаль- ной, так как целый ряд различного рода оригинальных програм- мных средств, разработанных для IBM РС/ХТ/АТ, существенно используют сопроцессор, в частности, Intel 8087. Система MINIDOS содержит 50 файлов, из которых 9 файлов (ANSI.SYS, AUTOEXEC.BAT, BOOT, CONFIG.SYS, IBMBIO.COM, IBMDOS.COM, ROOT, FAT, VDISK.SYS) являются скрытыми. Пол- ный перечень файлов системы MINIDOS приведен в табл. 55. Из стандартно поставляемых программных средств систе- ма MINIDOS содержит интерпретатор с языка БЕЙСИК и пакет Редактора текстов. Пакет Редактор текстов включен в систему в несколько модифицированном виде, что, однако, не сужает его функциональных возможностей. Описание работы с обоими
Имя файла Размер, байт Дата и время создания файла BOOT 512 14-Jun-88 12:46 FAT 2048 14-Jun-88 14:41 ROOT- 3584 14-Jun-88 16:21 ANSI .SYS 1664 14-Jun-88 13:01 ASSIGN COM 896 14-Jun-88 13:05 AUTOEXEC : BAT 119 14-Jun-88 13:04 BACKUP COM 3687 14-Jun-88 13:07 BAS COM 58752 14-Jun-88 4:46 CHKDSK COM 6400 14-Jun-88 13:08 COLOR COM 2882 14-Jun-88 13:10 COMMAND COM 17664 14-jun-88 13:00 COMP COM 2523 14-Jun-88 13:10 CONFIG SYS 69 14-Jun-88 13:02 DIRSORT COM 1738 14-jun-88 13:40 DISK COM 2544 14-Jun-88 13:07 DISKCOMP COM 2074 14-Jun-88 13:11 DISKCOPY COM 2444 14-Jun-88 13:13 EDIT COM 5927 14-Jun-88 13:03 FDISK COM 6177 14-Jun-88 13:14 FIND EXE 5888 14-Jun-88 13:15 FORMAT COM 6016 14-Jun-88 13:16 FORTH COM 20339 14-Jun-88 13:03 GEDIT 13118 14-Jun-88 13:18 GRAFTABL COM 1091 14-Jun-88 13:17 GRAPHICS COM 789 14-Jun-88 13:19 HARDWARE COM 211 14-Jun-88 13:48 IBMBIO COM 4608 14-Jun-88 2:42 IBMDOS COM 17152 14-Jun-88 1:12 KEYBD INT 153 14-Jun-88 13:32 MODE COM 3139 14-Jun-88 13:21 MORE COM 384 14-Jun-88 13:23 PRINT COM 4608 14-Jun-88 13:24 PRINT INX 253 14-Jun-88 13:31 PRINTER1 TBL 341 14-Jun-88 13:30 PRN10 EXE 2578 14-Jun-88 13:04 PRNTFILE COM 13513 14-Jun-88 13:38 PWPWPWPW PWP 12532 14-jun-88 15:27 R1 EXE 56961 14-Jun-88 13:56 RECOVER COM 2304 14-Jun-88 13:25 RESTORE COM 4003 14-Jun-88 13:26 SORT EXE 1280 14-Jun-88 13:27 SYS COM 1396 14-Jun-88 13:12 T-PASCAL COM 39675 14-Jun-88 13:45 TAB BS 1280 14-Jun-88 13:33 TREE COM 1513 14-Jun-88 13:29
Продолжение табл. 55 Имя файла Размер, байт Дата и время создания файла TURBO MSG 1572 14-Jun-88 14:43 VDISK :SYS 3309 14-Jun-88 13:04 VW FMT 116 14-Jun-88 13:18 vwo EXE 14 14-Jun-88 13:38 WORKFILE 46 14-Jun-88 13:05 MINIDOS AVZ <A:> 50 файлов 362496 байтов указанными средствами приводится соответственно в гл. 5 и 8, тогда как описание собственно операционной среды полностью соответствует гл. 4 с очевидными изменениями. 9.3. ОПИСАНИЕ РАБОТЫ С КОМПИЛЯТОРОМ TURBO-PASCAL Разработанный Н. Виртом в 1971 г. язык программирования Паскаль по простоте освоения вполне сравним с БЕЙСИКОМ, но в отличие от него позволяет удовлетворить основные требо- вания как прикладных, так и системных программистов. От- носительно БЕЙСИКа ПАСКАЛЬ имеет ряд существенных пре- имуществ. Так, ПАСКАЛЬ хорошо отвечает принципам струк- турного программирования и на его основе можно создавать эффективные программные средства. Более того, ПАСКАЛЬ яв- ляется языком программирования реального времени, что позволяет использовать его для задач реального времени (моделирования, инженерных, технологических и др.). В настоящее время язык ПАСКАЛЬ используется для прог- раммирования почти всех типов задач практически на всех типах ЭВМ и считается одним из лучших языков программиро- вания высокого уровня. Система TURBO-PASCAL содержит развитые средства по обеспечению режимов диалога, трансля- ции и выполнения ПАСКАЛЬ-программ пользователя. В системе TURBO-PASCAL используются основные опреде- ления стандартного ПАСКАЛя, установленные в [111]. Допол- нительно к стандартному ПАСКАЛЬ система TURBO-PASCAL содержит целый ряд дополнительных средств, описанных в [115,116]. С целью повышения уровня универсальности в си- стему TURBO-PASCAL включено множество внешних стандарт- ных процедур и функций. Система программирования TURBO-PASCAL, включенная в базовую ОС MINIDOS, содержит два файла T-PASCAL.COM и TURBO.MSG. Первый файл содержит собственно систему TURBO-PASCAL, а второй - текстовый файл с диагностически- ми сообщениями. В целях экономии памяти на дискете в систе- ме TURBO-PASCAL не предусмотрены расширенные средства редактирования и создания исходных модулей ПАСКАЛЬ-прог-
рамм, т. е. отсутствуют следующие файлы: TLIST.COM (вывод текстов исходных модулей на печать), TINST.COM И TINST.MSG (средство встроенного редактора). Для редактирования исход- ных модулей ПАСКАЛЬ-программ в системе MINIDOS преду- сматривается Редактор текстов, либо ограниченные средства встроенного ПАСКАЛЬ-редактора, которые можно использо- вать по команде ”Е” (Edit) системы TURBO-PASCAL. Языку ПАСКАЛЬ посвящено достаточно много литературы различного уровня и назначения, среди которой можно выде- лить превосходные книги [110, 111, 151], а также целый ряд книг по ПАСКАЛе-подобным языкам реального времени Modula и ADA [104, 109, 112], знакомство с которыми безусловно поз- волит значительно глубже освоить и сам язык ПАСКАЛЬ. Опи- сание собственно системы программирования TURBO-PAS- CAL можно найти в фирменных руководствах [115, 116, 263- 265]. Поэтому в данном разделе будут рассмотрены только во- просы запуска и использования системы TURBO-PASCAL в операционной среде MINIDOS. Читателю, интересующемуся вопросами использования в своей практической деятельности системы программирова- ния Turbo-PASCAL, рекомендуется новый прикладной журнал [266], который будет рассматривать следующие основные во- просы программирования в среде Turbo-PASCAL: - использование вызовов функций DOS и BIOS; - управление базами данных и знаний; - использование средств Turbo-Assembler и Turbo-Debugger; - оптимизация ПАСКАЛЬ-программ; - использование лазерных принтеров; - работа с графической информацией. Данный журнал предполагается сделать практическим руковод- ством для массового пользователя системы Turbo-PASCAL [263-265]. Запуск системы TURBO-PASCAL осуществляется по команде MD A-.T-PASCAL в ответ на которую на экране дисплея появляется сообщение: TURBO PASCAL System 1988 MINIDOS 1*AVZ Adapted for PC ISKRA 1030 Tallinn (C) PTI Gosstroj ESSR * telex 527-664 * Color display 80x25 Inlude error messages (Y/N)? Ввод символа ”Y” в ответ на запрос системы определяет загрузку в память файла TURBO.MSG, содержащего диагности-
ческие сообщения системы. В этом случае в период компиля- ции исходного ПАСКАЛЬ-модуля на экран выводятся диагно- стические сообщения с рекомендациями в полном объеме. В противном случае файл TURBO.MSG не загружается, в па- мяти экономится 1.5 Кбайтов и в период компиляции на экран выводится только сокращенная диагностика, содержащая информацию о местонахождении ошибки и ее коде. Для даль- нейшего использования полученной диагностики пользователь должен обратиться к текстовому файлу диагностики TUR- BO.MSG. После получения ответа ”Y” или ”N” на экран выводится полное меню системы TURBO-PASCAL: Logged drive: А Active directory: \ Work file: Main file: Edit Dir Text: Free: Compile Run Quit compiler 0 bytes Save Options 62024 bytes Рассмотрим возможности, предоставляемые пользователю системой TURBO-PASCAL. Меню указывает поддерживаемые системой TURBO-PASCAL команды. Каждая команда вводится первой своей буквой, которая идентифицируется в меню более яркой подсветкой и размером. После ввода команды она сразу же выполняется системой TURBO-PASCAL. Команда ”L” (Logged) используется для переопределения текущего активного дискового УВВ. После ввода команды на экран дисплея выводится сообщение "NEW DRIVE: ”, на которое следует ответить логическим именем УВВ в виде Х[:], где X принимает значения из диапазона букв А+Р; знак двоеточия (:) необязателен. Для сохранения старого состояния следует просто нажать клавишу ’’ПУСК”. По команде ”L” выполняется восстановление дисковой системы. Поэтому команду рекомен- дуется использовать в случае смены дискет. Команда ”L” ав- томатически не обновляет меню и для его актуализации следу- ет нажать клавишу ’’ПУСК”. Следует помнить, что во многих случаях при работе с TURBO-PASCAL клавиша ’’ПУСК” ис- пользуется для выхода в режим меню системы. Команда “A” (Active) предназначена для переназначения активного каталога или подкаталога дискового тома. По коман- де ”А” в ответ на сообщение ’’NEW DIRECTORY:” следует ввести путь к новому активному каталогу (подкаталогу). Даль- нейшие действия пользователя аналогичны случаю коман- ды ”L”.
Команда ”W” (Work file) задает рабочий файл с ПАСКАЛЬ- программой для режимов компиляции, редактирования и вы- полнения. В ответ на ввод команды выдается следующее со- общение ’’WORK FILE NAME:”, в ответ на которое следует ввести путь к искомому файлу, например: ”B:GRODNO.GPI”. По умолчанию для рабочего файла предполагается расшире- ние ”.PAS”. Однако при кодировании после имени файла точки (.) расширение имени не используется. В качестве расшире- ния имени файлов запрещены комбинации ’’.ВАК”, ”.CHN” и ”.CMD”, так как определяемое ими файлы используются в си- стеме TURBO-PASCAL особым образом. В случае отсутствия указанного рабочего файла выдается сообщение ’’NEW FILE” и система выходит на свою метку ”>”. После нажатия клавиши ’’ПУСК” осуществляется возврат к меню системы. Команда ”М” (Main file) определяет главный файл с програм- мой на языке ПАСКАЛЬ. На запрос системы ’’MAIN FILE: ” сле- дует ввести путь к искомому файлу подобно случаю команды ”W”. Если ПАСКАЛЬ-программа содержит директивы ”@1” ком- пилятора для подключения других ПАСКАЛЬ-программ, то ее обязательно следует определять через главный файл системы TURBO-PASCAL. Как правило, с главного файла (если он ука- зан) начинается компиляция ПАСКАЛЬ-программы. После нача- ла компиляции при условии различных рабочего и главного файлов текущий рабочий файл автоматически сохраняется, а главный файл загружается в память. Если во время компи- ляции возникает ошибка, то файл (главный или подключаемый) автоматически становится рабочим, управление получает встроенный ПАСКАЛЬ-редактор и курсор устанавливается в программную строку с ошибкой. Пользователь получает возможность отредактировать ошибочный файл и сохранить его в качестве рабочего. Команда ”Е” (Edit) используется для запуска встроенного ПАСКАЛЬ-редактора и редактирования рабочего файла или создания нового исходного модуля ПАСКАЛЬ-программы. В связи с вышесказанным в настоящей TURBO-PASCAL систе- ме данная команда в полной мере не используется, однако и с помощью ее можно достаточно эффективно создавать и ре- дактировать исходные тексты ПАСКАЛЬ-программ. В общих чертах работа по команде ”Е” сводится к следующему. Если до этого был определен рабочий файл, то он вызывается на ре- дактирование и курсор устанавливается в его начало. В про- тивном случае пользователь получает возможность создавать текст новой ПАСКАЛЬ-программы. Редактирование осуществ- ляется клавишами редактирования, расположенными в правой части клавиатуры. Во время редактирования в первой строке экрана постоянно идентифицируется информация о текущем положении курсора, режиме редактирования и пути к редакти-
руемому файлу. Выход из ПАСКАЛЬ-редактора осуществляет- ся последовательным нажатием клавиш ’’CTR+K” и ’’CTR+D”. Читателю, знакомому с работой Редактора текстов (гл. 8), использование ПАСКАЛЬ-редактора особых затруднений не представит. Более подробное описание работы в полном объеме со встроенным ПАСКАЛЬ-редактором читатель сможет найти в [115]. Редактирование и создание ПАСКАЛЬ-программ можно осуществлять также посредством описанного в гла- ве 8 Редактора текстов. Команда ”С” (Compile) определяет режим компиляции программы, находящейся в главном или рабочем файле. Ком- пиляция начинается с главного файла, а в его отсутствие - с рабочего. В случае наличия главного файла и редактирования рабочего пользователю выдается запрос о необходимости сохранения рабочего файла перед загрузкой и компиляцией главного файла. Компиляция может быть прервана путем нажатия любой клавиши. В случае возникновения ошибки уп- равление получает встроенный ПАСКАЛЬ-редактор и пользова- тель получает возможность отредактировать ошибочный файл. Результатом компиляции является файл, размещаемый в за- висимости от используемых опций компилятора (команда ”0”) в памяти (по умолчанию), в .СОМ- или .CHN-файле. Подробнее об опциях компилятора речь будет идти ниже. Команда ”R” (Run) запускает на выполнение ПАСКАЛЬ-прог- рамму, находящуюся в памяти или в указанном .СОМ-файле (при включенном переключателе ”С” из меню опций компиля- тора). Если команда ”R” применяется к некомпилированной программе, то программа автоматически перед выполнением компилируется. Команда ”S” (Save) используется для сохранения текущего рабочего файла в указанном файле на дисковом томе. Старая версия этого файла сохраняется и получает расширение ’’.ВАК” подобно случаю использования системной команды EDLIN. По команде ”D” (Dir) можно вывести на экран дисплея со- держимое указанного каталога тома. После ввода команды выдается сообщение ”DIR MASK: ”, позволяющее указать режим вывода каталога путем использования обобщающих симво- лов и ”?” как это делается в системной команде DIR. На- пример, по команде ”DIR MASK:B:*.PAS” на экран выводятся все файлы каталога, имеющие расширение имени ”.PAS”, а так- же размер в Кбайтах свободного места на данном томе. Команда ”Q” (Quit) используется для выхода из системы TURBO-PASCAL. Если при этом редактировался рабочий файл, то система запрашивает пользователя о необходимости его сохранения в дисковом файле. Выход из TURBO-PASCAL осу- ществляется в систему MINIDOS.
Команда ”0” (compiler Options) дает возможность просмот- реть и/или модифицировать ряд значений режима компилято- ра, принимаемых системой по умолчанию. Данная команда работает в режиме меню (0-меню), имеющего следующий вид Compile —> Memory Com-file cHn-file command line Parameters: Find run-time error Quit Команды ”M”, ”C” и ”H” 0-меню определяют режим сохране- ния скомпилированной программы и ее последующего исполь- зования. По умолчанию (команда ”М”) программа размещает- ся в памяти и ее можно выполнить по команде ”R” меню си- стемы. По команде "С” компилятор создает программный .COM-файл с именем рабочего или главного (если он указан) файла. Этот файл содержит объектный модуль программы, ис- полняющую систему ПАСКАЛя и может быть использован либо на уровне обычных системных внешних команд MINIDOS, либо из ПАСКАЛЬ-программ процедурой EXECUTE. Команда ”Н” 0-меню позволяет оформлять скомпилирован- ные программы в виде .CHN-файлов, имена которых определя- ются аналогично случаю команды ”С”. Данные файлы, в отли- чие от .COM-файлов, не содержат исполняющую систему ПА- СКАЛя и могут использоваться только через процедуру CHAIN ПАСКАЛЬ-программы. Подробнее о команде ”Н” можно най- ти в [115]. Команда ”Р” 0-меню позволяет организовать передачу зна- чений для формальных параметров программы, скомпилиро- ванной в режиме ”М”, т. е. при использовании команды ”М” 0-меню. Программа получает эти значения посредством ПА- СКАЛЬ-функции ParamCount или ParamStr. При возникновении ошибок в программе, скомпилирован- ной в режиме ”М”, автоматически вызывается встроенный ПАСКАЛЬ-редактор и курсор устанавливается в начало прог- раммной строки с ошибкой. При выполнении же .СОМ- и CHN- программ встроенный ПАСКАЛЬ-редактор не вызывается, а вы- водится диагностическое сообщение: Run-time error 01, РС=ХХХХ Program aborted
где ХХХХ - значение счетчика ПАСКАЛЬ-программы с ошибкой, для идентификации ошибки следует выполнить команду ”F” 0-меню и в ответ на запрос ’’Enter PC: ” ввести указанное зна- чение "ХХХХ” счетчика ПАСКАЛЬ-программы с ошибкой. По команде ”Q” 0-меню осуществляется возврат в главное меню TURBO-PASCAL системы. Наконец, в предложениях ’’Text” и ’’Free” главного меню системы указываются соответственно размеры в байтах теку- щей ПАСКАЛЬ-программы и свободной памяти в разделе TURBO-PASCAL системы. С учетом сказанного, общую технологию работы с системой TURBO-PASCAL в операционной среде MINIDOS можно предста- вить следующим образом. ПАСКАЛЬ-программа оформляется в виде исходного модуля и помещается в текстовый файл с по- мощью системной команды COPY CON <путь к файлу> или Ре- дактора текстов. В оперативном режиме для создания ПА- СКАЛЬ-программ может использоваться и встроенный ПА- СКАЛЬ-редактор. После этого запускается система TURBO-PA- SCAL и в ее среде пользователь производит необходимые действия (компиляция, отладка, выполнение и т. д.) с исход- ной ПАСКАЛЬ-программой (файлом). В случае необходимости редактирование программ можно проводить либо оперативно с помощью ПАСКАЛЬ-редактора, либо с помощью Редактора текстов, описанного в гл. 8. Приведенная в настоящем разделе информация вполне достаточна, чтобы читатель, знакомый с языком ПАСКАЛЬ и основными сведениями по TURBO-PASCAL [115], мог начать работать с системой TURBO-PASCAL в операционной среде MINIDOS. 9.4. ОПИСАНИЕ РАБОТЫ С FORTH-СИСТЕМОЙ Язык программирования FORTH, появившись в США в начале 70-х годов, быстро завоевал популярность в качестве одного из основных языков пользователей ПЭВМ. По целому ряду оце- нок язык FORTH для ПЭВМ занимает третье место после таких языков как БЕЙСИК и ПАСКАЛЬ [120]. Весьма широкое рас- пространение получили коммерческие программные средства, разработанные в среде языка FORTH. Язык FORTH представля- ет собой новый унифицированный подход к разработке ЛО, позволяющий эффективно создавать разнообразные средства - от игровых и демонстрационных программ до сложных прог- раммных систем реального времени [114, 120]. В 1983 году был опубликован стандарт языка FORTH [121, 122], а уже с 1978 года начал регулярно выходить специальный журнал для массового пользователя языка FORTH и с 1983 года - журнал [123] по FORTH для профессиональных программистов. Первой массовой отечественной публикацией по языку FORTH
является книга [114], дающая простое и достаточно полное введение в данную проблематику. Книга [203] является пре- восходным практическим введением в язык FORTH, тогда как [204] вводит читателя в методику и методологию программи- рования в среде FORTH. В работе [205] приводится подробное описание внутренней структуры системы FORTH-83. Перио- дическое издание FORTH Dimensions, издаваемое FORTH-rpyn- пой [206], содержит последнюю информацию по новым разра- боткам и литературе в области FORTH-системы программи- рования. Интересующимся данным разделом рекомендуется ознакомиться с указанными работами. Усилиями энтузиастов создан ряд отечественных реализаций языка FORTH для серий- но выпускаемой вычислительной техники. Краткое описание отечественных разработок можно найти в книге [114]. В даль- нейшем для названия языка FORTH будет использоваться рус- ская мнемоника ’’ФОРТ”. Учитывая популярность языка, его возможности при раз* работке прикладного и системного ПО для ПЭВМ, а также достаточно большую библиотеку ФОРТ-программ различного назначения, ФОРТ включен в систему MINIDOS, расширяя ее среду программирования до трех наиболее популярных языков ПЭВМ: БЕЙСИК, ПАСКАЛЬ и ФОРТ. В настоящей реализации MINIDOS используется адаптированная версия известного гра- фического пакета GraFORTH, созданного П. Лутусом для IBM PC/XT в 1983 году [128]. В настоящем разделе будут опи- саны компоненты ФОРТ-системы, включенной в состав MINI- DOS, основы работы с ними и их возможности. О собственно разработке ПО в среде языка ФОРТ можно прочесть в [114, 121-128]. Система программирования FORTH - MINIDOS состоит из трех основных компонент: интерпретатор с языка ФОРТ (файл FORTH.COM), редактор ФОРТ-программ (файл EDIT.COM) и графический редактор (файл GEDIT). Вспомогательный файл с именем WORKFILE предназначен для упрощения работы с редактором EDIT в среде MINIDOS. Перечисленные компо- ненты представляют собой базовое подмножество ядра выше- упомянутого графического пакета GraFORTH и обеспечивают пользователя следующими основными процедурами: - создание, редактирование и выполнение программ; - редактирование трехмерной графической информации; - просмотр трехмерных графических объектов в различных проекциях и сохранение его в дисковом файле. Файловая концепция MS DOS полностью распространяется и на ФОРТ-систему. Кратко рассмотрим работу с компонентами системы ФОРТ, включенными в состав MINIDOS, и их возмож- ности. Интерпретатор с языка ФОРТ запускается на выполнение по команде FORTH из файла FORTH.COM и сразу же выводит
на экран дисплея сообщения GraFORTH MINIDOS Tallinn 1988 Error: DOS File Access (Press any key), идентифицирующие соответственно версию ФОРТ-системы и отсутствие на активном устройстве других компонент си- стемы. Следует сразу же отметить, что данное диагностическое сообщение имеет место для большинства особых и аварийных ситуаций при работе с ФОРТ-системой. Недостаточная диф- ференцировка особых и аварийных ситуаций объясняется весьма слабой системой диагностики исходного пакета GraFORTH. После этого пользователь нажатием любой клави- ши приводит интерпретатор в состояние готовности (метка - READY_) восприятия управляющих слов языка. Общий словарь языка ФОРТ составляет 200 слов, полный перечень которых пользователь может получить по слову LIST. Значительная часть управляющих слов относится к режиму графики и подробно описана в [127]. Часть из этих слов в нашей версии ФОРТ-системы не поддерживается. Базовый набор уп- равляющих слов языка в основном соответствует стандарту FORTH-83 и их описание можно найти в [114, 125-128]. Отме- тим только те управляющие слова языка, с которыми поль- зователь работает наиболее часто при освоении ФОРТ-систе- мы и которые в той или иной мере отличаются от стандарта: CLS - очистка экрана; та же реакция на клавиши 'CTR'+'L'; COLOR SCREEN - цветовое оформление экрана дисплея; - установка режима экрана дисплея (текст I гра- фика); LIST ERASE ABORT - вывод содержимого словаря ФОРТ-системы; - очистка памяти от ФОРТ-программы; - аварийное завершение работы с выходом в на- чало языка ФОРТ; та же реакция по клавишам 'CTR'+ '{@ I С I В}'; READ - чтение заданного файла с ФОРТ-программой и запуск ее на выполнение; SAVEPRG - сохранение ФОРТ-программы на диске с воз- можностью присвоения характеристики авто- матического последующего ее выполнения; EDIT GEDIT - вызов и запуск на выполнение ФОРТ-редактора; вызов и запуск на выполнение графического ре- дактора; READLN WRITELN - чтение с консоли строки ФОРТ-текста; - вывод на экран строки ФОРТ-текста. Следует помнить, что при вводе слова, отсутствующего в ФОРТ-словаре, система, в первую очередь, пытается нпйти и загрузить файл с таким именем с активного устрг
И только после этого выдает соответствующее диагностическое сообщение. Для эффективного использования ФОРТ-системы читателю рекомендуется изучить основы языка ФОРТ в объеме работ [114, 125-128]. Пользователь в среде языка ФОРТ работает в диалоговом режиме. После готовности ФОРТ-системы (метка READY ) пользователь вводит строки ФОРТ-текста, завершая их нажатием клавиши 'ПУСК'. Система сразу же анализирует введенный текст, выделяет и выполняет управляющие слова. После успешной обработки система снова переходит в состоя- ние готовности и цикл обработки ФОРТ-текста повторяется. При возникновении ошибки во время обработки текста (неиз- вестное управляющее слово, отсутствие указанного файла и т. д.) система выдает соответствующее сообщение, обработка введенного текста прекращается и ФОРТ-система переходит в состояние готовности. Для завершения работы с ФОРТ-систе- мой следует использовать следующий простой прием. Устрой- ство 'В приводится в состояние неготовности и вводится текст ”В:В” с последующим ответом 'A' (Abort) на запрос системы. После чего осуществляется возврат в операционную среду MINIDOS. Вводить с консоли большие ФОРТ-тексты весьма неудобно, поэтому их следует хранить в дисковых файлах и вызывать на обработку по мере необходимости. Для создания и редактиро- вания ФОРТ-текстов предназначен специальный ФОРТ-редак- тор, находящийся в файле EDIT.COM и вызываемый из среды ФОРТ по слову EDIT. Так как редактор оформлен в виде .СОМ- файла, то его можно вызывать и как обычную внешнюю команду системы MINIDOS. ФОРТ-редактор работает в режиме меню и для управления им используются все функциональные кла- виши (F1^-F10). По клавише 'F1' (Load) осуществляется загрузка файла на редактирование, которое выполняется клавишами редактиро- вания совместно с другими клавишами., Для задания файла указывается путь к нему. По клавише 'F2' (Save) пользователь получает возможность сохранить отредактированный ФОРТ- текст на диске. Клавиша 'F3' (Find) позволяет производить поиск заданного контекста с возможностью его последующей замены. Поиск осуществляется от курсора до конца редактируемого текста. Например, по директиве FIND (/Search/Replace/): /LASNAMAE/ последовательно отыскиваются все вхождения в текст слова LASNAMAE, а по директиве FIND (/Search/Replace/): /LASNAMAE/PARCELLA/ получаем возможность осуществлять замену LASNAMAE->PAR- CELLA.
По клавише 'F4' (Size) выводятся: размеры в байтах редакти- руемого текста, свободной области памяти в разделе ФОРТ- редактора, позиция (от начала текста) курсора, а также число произведенных удалений. Общий размер памяти для редакти- руемого текста не, должен превышать 58567 байтов. По клавише 'F5' (Сору) осуществляются различного типа копирования в редактируемом тексте, а по клавише 'F6' (Purge) устанавливается (У) или отменяется (N) режим раздвижки (клавиша 'ПУСК') и/или сжатия (клавиша '<- возврата на шаг) редактируемого текста. По клавише 'F7' (Erase) память можно очистить (У) от ре- дактируемого текста, а по клавише 'F8' (Quit) можно выйти из ФОРТ-редактора, если до этого был сохранен редактируемый текст в дисковом файле WORKFILE на активном УВЦ. В услови- ях MINIDOS для выхода из ФОРТ-редактора следует очистить память,(клавиша 'F.7') и затем использовать клавишу 'F8' с от- ветом 'У' на запрос Quit (Y/N)?. Если редактор вызывался из ФОРТ-системы, то управление возвращается системе, в про- тивном случае,управление получает MINIDOS. Клавиша 'F9' (Color) позволяет изменять цветовое оформле- ние экрана, а клавиша 'F10' (->) служит для специального ре- дактирования. Читателю рекомендуется практически апробиро- вать различные варианты редактирования, используя описан- ные выше функциональные и другие клавиши в среде ФОРТ- редактора. На этом пути читатель найдет много интересных возможностей редактирования, описывать которые здесь не- целесообразно. Следует отметить, что ФОРТ-редактор (в отличие от тексто- вых редакторов) можно использовать для перлюстрации и ре- дактирования файлов любого типа, включая .СОМ- и .ЕХЕ-фай- лы, размер которых не превышает 58567 байтов. В этом случае весьма полезной может оказаться таблица представления русских букв (прилож. 8). При этом следует помнить, что для ввода представлений большинства русских букв достаточно нажать на русском регистре соответствующие им клавиши. Тогда как для ввода представлений, совпадающих с ”F1+F9,Ft”, следует при нажатой клавише 'ESC' нажать соответствующую функциональную клавишу. Например, для ввода представления ”F2” русской буквы ”М” следует использовать клавиши ESC + F2'. ФОРТ-редактор существенно использовался при создании самой системы MINIDOS, а также для адаптации целого ряда оригинальных программных средств, разработанных для ПЭВМ, совместимых с моделями IBM РС/ХТ/АТ. В отличие от ФОРТ-редактора графический редактор GEDIT можно использовать только в среде ФОРТ-системы, вызывая его по слову GEDIT. Графический редактор также работает в режиме меню и позволяет создавать, редактировать, просмат- ривать с различных позиций и сохранять на диске графические объекты. Для файлов, содержащих графическую информацию,
редактор GEDIT по умолчанию подразумевает расширение име- ни .IMG . При загрузке графического редактора автоматически происходит обращение к файлу BJMAGE.IMG, содержащему ре- дактируемый графический объект (ГО). В случае отсутствия такого файла выдается диагностическое сообщение: ERROR: DOS File Access (Press any key) на которое следует ответить нажатием любой клавиши. После чего редактор переходит в режим меню. При наличии же файла BJMAGE.IMG он считывается и содержащийся в нем ГО отобра- жается на экране совместно с меню редактора GEDIT. Основ- ное меню редактора постоянно отображается в нижней части экрана. Управление работой графического редактора также осуще- ствляется посредством, функциональных клавиш следующим образом. По клавише 'F1 (Load) осуществляется загрузка в память из указанного файла ГО. Клавиша 'F2' (Save) предо- ставляет возможность сохранить (частично или полностью) отредактированный ГО в заданном дисковом файле. Клавиша F3' (Jump) позволяет осуществлять перемещения по строкам графического экрана для подробной перлюстрации ГО и возможности изменения его характеристик в этих строках. По клавише 'F4' (Edit) можно изменять характеристики ГО в строке, указанной клавишей 'F3'. Тогда как клавиша 'F5' (Insert) позволяет вставить новую строку в описание ГО. Для перлюстрации строк ГО используются клавиши редактирования. Клавиша F6' (Spec) позволяет произвести специальные действия над значениями характеристик ГО в пределах задан- ных строк графического экрана. Редактор GEDIT поддерживает пять специальных функций масштабирования ГО: * I / I + I Swap. Клавиша F7',(Erase) дает возможность удалить из памяти ГО. Клавиша 'F8' (View) предоставляет возможность изменить цветовое оформление ГО и его окружения, а также рассмот- реть ГО в различных проекциях путем его вращения и переме- щения относительно осей координат X, Y, Z. С помощью клавиши 'F9' (Files) можно вывести на экран информацию о файлах заданного каталога тома подобно си- стемной команде DIR. Наконец, по клавише 'ESC' можно выйти из графического редактора с возможностью сохранения от- редактированного ГО в файле BJMAGE.IMG. После завершения работы с редактором GEDIT осуществляется выход в ФОРТ- систему. Как показал опыт использования графического редактора, он представляет собой достаточно мощное средство работы с трехмерной графической информацией и может с успехом использоваться для автоматизации различного рода проектно- конструкторских работ с использованием ПЭВМ ИСКРА 1030. Следует отметить, что система MINIDOS, не взирая на свою компактность, полностью совместима со стандартно поставляе-
мой АДОС 2.0 и расширена рядом сервисных функций. Наряду с этим собственно управляющая часть системы настроена на наиболее эффективный режим эксплуатации в условиях исполь- зования баз данных и систем программирования, включенных в состав MINIDOS. Включенные в MINIDOS системы программи- рования на базе таких популярных языков как БЕЙСИК, ПА- СКАЛЬ и ФОРТ позволяют удовлетворить весьма широкий круг пользователей ПЭВМ ИСКРА 1030. В настоящее время система MINIDOS находится в промышленной эксплуатации на ПЭВМ ИСКРА 1030 в целом ряде организаций и предприятий страны. 9.5. ПРОГРАММА ВЫВОДА ТЕКСТОВЫХ ФАЙЛОВ Включенная в систему MINIDOS программа PRNTFILE вы- полняется в режиме меню и предназначена для вывода на прин- тер или дисплей указанного текстового файла. Программа на- ходится в файле с именем PRNTFILE.COM и запуск ее на вы- полнение осуществляется из среды MINIDOS по имени PRNTFILE. В качестве принтера допускается любое печатающее устрой- ство, совместимое по стандарту с EPSON ESC/-80 (/-81). Для вывода файла программа запрашивает следующую инфор- мацию: - путь к искомому текстовому файлу; - тип символов (русские буквы - М, латинские - L); - устройство вывода (принтер/экран дисплея); - число выводимых на страницу строк; - номер первой страницы вывода; - число пустых строк с начала страницы; - начало нумерации выводимого текста; - текст, воспринимаемый как заголовок страниц; - разделитель страниц выводимого текста; - режим вывода текста (непрерывный или постранично). В ответ на запрос той или иной характеристики пользователь вводит либо необходимое значение, либо нажатием клавиши ’’ПУСК” сохраняет для нее значение по умолчанию, которое идентифицируется в меню программы. Для выхода из програм- мы в систему MINIDOS достаточно на запрос имени файла на- жать клавишу ’’ПУСК”, к такому же результату приводит и нажа- тие клавиш ”CTR” + ”S/B”. По клавишам ”CTR” + ”S” пользова- тель имеет возможность приостановить выполнение программы с последующим продолжением ее по любой клавише. Выключе- ние принтера во время вывода на него файла приводит к преры- ванию выполнения программы. Программа PRNTFILE позволяет в удобном виде и достаточно оперативно осуществлять вывод на принтер или экран различного рода текстовой информации.
На этом завершается описание основных характеристик и' компонент системы программирования MINIDOS, отличаю- щих ее от описанной в предыдущих главах ОС АДОС 2.0 и ряда ее составляющих компонент. В следующей заключи- тельной главе представлена характеристика наиболее по- пулярных программных средств ПЭВМ, совместимых с моде- лями IBM РС/ХТ/АТ.
10. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНЫХ ЭВМ. В заключительной главе приводится краткий обзор ПО ПЭВМ, который позволит читателю легче ориентироваться в обилии разработанных к настоящему времени программных средств. В первую очередь ПО ПЭВМ характеризуется разнообразием системных и прикладных программных средств. Наряду с этим, сам принцип использования ПЭВМ, многие модели которых реализованы на единой элементной базе, ставит задачу уни- фикации программных средств и простоту их использования, включая и непрофессионального пользователя. Простота и удобство использования ПО достигается за счет широкого применения режимов диалога и меню, табличного и графического представления информации, многооконных интер- фейсов и т. д. Унификация ПО в настоящее время базируется на интеграции программных средств, предполагающей использо- вание единых способа представления данных и технологии ра- боты пользователя, а также простоты переключения с одного вида работы на другой. Несмотря на все многообразие, ПО ПЭВМ можно сгруппиро- вать в три основные группы: (1 ) операционные системы ПЭВМ; (2 ) инструментальные средства и системы программирова- ния; (3 ) пакеты прикладных программ. При дальнейшем изложении будем придерживаться данной классификации. Ввиду большого разнообразия программных средств даже в рамках одной группы будут рассматриваться только те из них, которые функционируют на моделях ПЭВМ, сов- местимых с IBM РС/ХТ/АТ и которые в настоящее время в зна- чительной мере доступны массовому пользователю ПЭВМ ИСКРА 1030. Читателя, интересующегося более обширной и де- тальной информацией по ПО ПЭВМ, отсылаем к работам [1-6,14, 27, 31-38, 51, 69,. 73, 79-85, 87, 89, 91, 100-104, 107-116, 120-150, 189], содержащим, в свою очередь, многочисленные ссылки на другие отечественные и зарубежные источники. 10 .1. ОПЕРАЦИОННЫЕ СИСТЕМЫ ПЭВМ Операционные системы (ОС) явились естественным следст- вием развития вычислительной техники и ее программного
обеспечения^ предназначенного для управления ресурсами Эё*М, включая и самого пользователя. В настоящее время ЭВМ любого класса обязательно поставляется с той или иной ОС. В данном разделе не ставится цель дать развернутый анализ са- мого понятия ’’операционная система” и основных типов ОС. Этому вопросу посвящено достаточно много литературы [18, 19, 52, 64, 68, 69, 120]. Здесь же будут кратко охарактеризованы только основные ОС, ориентированные на работу с моделями IBM РС/ХТ/АТ, совместимыми с ними ПЭВМ, а также перспек- тивными ПЭВМ фирмы ИВМ. Если первые ОС для ПЭВМ (ввиду ограниченности основных ресурсов) были достаточно простыми и по уровню соответство- вали управляющим программам типа монитор, то с развитием ПЭВМ их ОС по сложности не уступают аналогичным средствам ЭВМ более старших классов. Например, ОС UNIX фирмой Micro- soft непосредственно адаптирована для нескольких типов ПЭВМ. В развитии ОС для ПЭВМ выделяют три поколения, обзор развития которых можно найти в перечисленной выше литера- туре. В настоящее время наиболее массовыми являются ОС так называемого 2-го поколения, с которых и начинаем наш обзор. Среди эксплуатируемых ОС можно выделить три признанных стандарта: СР/М, MS DOS и UNIX. ОС СР/М, разработанная фирмой Digital Research, стала одним из стандартов для многих изготовителей 8- и 16-разрядных ПЭВМ. ОС СР/М является дос- таточно компактной и простой системой, поддерживающей работу в однопрограммном режиме и файловую организацию данных с последовательным и произвольным доступами. Не- смотря на простую организацию, СР/М имеет средства динами- ческой отладки программ, что облегчает разработку ПО при- кладных задач. Адаптированная версия СР/М поставляется под названием ДОС-1 с ПЭВМ НЕЙРОН И9.66. Это позволяет ис- пользовать большинство программных средств, разработанных в среде ОС СР/М. Из других ОС этого типа можно отметить СР/М-86 и Concurrent СР/М. Вторым и наиболее массовым стандартом являются системы MS DOS, разработанная фирмой Microsoft для ПЭВМ IBM PC, и PC DOS, разработанная самой фирмой IBM. Обе системы эквивалентны по функциональным возможностям, совместимы и в дальнейшем для них будет использоваться общий термин ”MS DOS”. В связи с большим числом моделей IBM РС/ХТ/АТ и совмес- тимых с ними ПЭВМ стандарт на MS DOS сохранится длитель- ное время. Система MS DOS имеет ряд версий, отличающихся возможностями. Версии MS DOS 1.0 и MS DOS 2.0 по функцио- нальным возможностям очень близки и в значительной мере совпадают по возможностям с системой СР/М. Основными чер- тами этих систем являются: иерархическая файловая органи- зация программ и данных, функции перенаправления и конвейе- ра данных, системные утилиты-команды, загружаемые драйве- ры устройств и другие. Начиная с версии 2.0, система MS DOS
(PC DOS) наследует ряд UNIX-подобных черт, часть из которых перечислена выше. Адаптированные версии MS DOS приняты в качестве основы системного ПО и для отечественных ПЭВМ НЕЙРОН И9.66 (система ДОС-2) и ИСКРА 1030 (система АДОС 2.0). Следует отметить, что MS DOS версии 2.0 является доста- точно общей системной средой для ПЭВМ, совместимых с IBM РС/ХТ/АТ, так как большинство разработанных зарубежных программных средств ориентированы на работу в среде MS DOS версии не ниже 2.0. В ряде стран-участниц СЭВ также адаптированы и адаптиру- ются различные версии системы MS DOS для выпускаемых ими ПЭВМ. Так, в ГДР фирмой Robotron выпускается ряд интересных моделей ПЭВМ (СМ 1910, А 7150, ЕС 1834), использующих, в частности, операционную систему DCP (ПП ДОС) с большим набором стандартных программных средств, включая системы программирования и пакеты прикладных программ различного назначения. Система DCP совместима с MS DOS 3.2 и поддер- живает работу с языками программирования: АССЕМБЛЕР, БЕЙ- СИК, ПАСКАЛЬ, ФОРТРАН-77, КОБОЛ, СИ, МОДУЛА-2. Система MS DOS 3.1 совместно с пакетом MS-Net обеспе- чения сетевой обработки реализует функции сетевой ОС, под- держивающей индустриальный стандарт США. MS DOS 3.3 в настоящее время является наиболее массовой базовой ОС моделей IBM ХТ/АТ и совместимых с ними ПЭВМ. Отличитель- ными чертами ОС MS DOS 3.3 являются: независимость от ап- паратных средств, прозрачность для прикладного ПО, разви- тый командный язык работы с системой, большой набор инструментальных средств и систем программирования, разде- ленное использование дисковых УВВ и принтеров, поддержка монопольного режима работы с файлами и данными, организа- ция санкционированного доступа, поддержка большого числа внешних устройств и другие. Система MS DOS 3.3 с опреде- ленными допущениями может использоваться и на отечествен- ных ПЭВМ ИСКРА 1030. НЕЙРОН И9.66 и ЕС-1840. Новая вер- сия системы MS DOS 4 обеспечивает развитую графическую среду для пользователей различного уровня. Мультипрограммная система MS DOS 4.1 совместно с паке- том MS-Windows позволяет использовать виртуальную память объемом до 16 Мбайтов и работать в различных режимах, перек- лючаясь с одного режима на другой посредством манипулятора типа ’’мышь”. В’Мастоящее время в обращении находятся и дру- гие версии системы MS DOS. Следует отметить, что подобно другим развитым ОС в MS DOS соблюдается принцип совме- стимости "снизу-вверх”, когда программные средства млад- ших версий системы могут функционировать под управлением более старших версий. Обратное, в общем случае, не имеет места. Операционная система UNIX является третьим стандартом базового ПО для ПЭВМ. Исходным языком системы является
язык программирования СИ, обеспечивающий ее переносимость на ЭВМ других классов - от супер-ЭВМ до ПЭВМ. Основными чертами ОС UNIX являются: поддержка многопользовательское го и мультипрограммного режимов работы; идентичность про- граммных интерфейсов для файлов данных, УВВ и ряда основ- ных процессов; иерархическая файловая структура; поддержка большого числа программных подсистем, нескольких языков программирования и другие. Ядро системы UNIX включает средства управления файлами, памятью, процессами, УВВ и требует в зависимости от версии и условий генерации от 100 до 500 Кбайтов, т.е. система UNIX ориентирована на ПЭВМ с оперативной памятью объема не менее 512 Кбайтов. Одна из версий системы UNIX - REGULUS предназначена для работы в реальном масштабе времени на ПЭВМ, базирующихся на мик- ропроцессоре Intel 80386. Имеющее сейчас место противопоставление систем UNIX и MS DOS для ПЭВМ не совсем оправдано. ОС UNIX не решает всех проблем, с которыми сталкиваются различные пользова- тели, она лишь ключ к стандартизации основных блоков вычис- лительных систем и транспортабельности ПО. Именно поэтому, ряд ведущих фирм-разработчиков ПО для ПЭВМ ищет пути к объединению систем UNIX, с одной стороны, и MS DOS, OS/2, с другой стороны. Так, фирма ALTOS Computer Systems (США) разработала новейшую телекоммуникационную систему ло- кальной сети связи, обеспечивающую взаимодействие ОС MS DOS и UNIX. А фирма Sun Microsystems Inc. (США) поста- вила на рынок АРМы серии 3861, объединяющие операционные системы MS DOS и UNIX. Интересный сравнительный анализ систем MS DOS и UNIX можно найти в работе [185]. В настоящее время наряду с версиями UNIX имеется ряд UNIX-подобных систем, из которых можно отметить системы XENIX и VENIX. Так, система XENIX, разработанная фирмой Microsoft, отличается от UNIX следующими основными харак- теристиками: развитые средства восстановления аппаратных сбоев, автоматическое восстановление файлов после сбоев системы, использование разделяемых сегментов данных, более развитые средства обеспечения взаимодействия выполняемых процессов. Поставляемая система XENIX включает в свой сос- тав собственно саму ОС, ряд систем программирования и текстовых редакторов. Для создания локальных сетей ПЭВМ, работающих под управлением XENIX, используется пакет Microsoft Network, не требующий дополнительных аппаратных средств сопряжения. Большое распространение наряду с перечисленными получил ряд других операционных систем для ПЭВМ, совместимых с IBM РС/ХТ/АТ и другими сериями ПЭВМ фирмы IBM. Много- пользовательская ОС виртуальной памяти PICK ориентирована, в первую очередь, на распределенную обработку данных, не- профессиональных пользователей и в ряде случаев даже пред- почтительнее MS DOS. ОС PICK представляет собой файловую
систему, базирующуюся на реляционной СУБД. Управление файлами осуществляется посредством набора иерархически* словарей данных. Система допускает несложную модификацию словарей, что позволяет без изменения самих данных опре- делять между ними довольно сложные зависимости. ОС PICK снабжена непроцедурным языком запросов ACCESS. Из других многопользовательских ОС можно отметить системы МР/М-86 и PC-NET. Резидентная мультипрограммная ОС Side Kick Plus обеспечи- вает работу с широким набором аппаратных средств ПЭВМ: дисплеи, клавиатуры, принтеры, дисковые УВВ, микропроцессо- ры и так далее. Характерной особенностью системы является реентерабельность составляющих ее программных компонент, что позволяет использовать их одновременно несколькими задачами. Система Side Kick Plus располагает развитыми средствами управления памятью, экранным редактором, реля- ционной СУБД, файловыми структурами, пакетом обработки строк и арифметическим пакетом. Появление 32-разрядных ПЭВМ на базе процессора Intel 80386 вызвало к жизни четыре новые операционные системы: PS MOS, Concurrent DOS 386, Windows 386 и DESQview. Система PS MOS функционирует на моделях IBM АТ с типами процессо- ров Intel 8086/80286/80386 и с некоторыми ограничениями сов- местима с MS DOS. В виртуальной памяти процессора Intel 80386 объемом 16 Мбайтов система PS DOS выделяет отдель- ные зоны, в которых имитируются функции процессора Intel 8086. При этом, в каждой такой зоне используется ПО, функ- ционирующее в среде MS DOS. Такой подход позволяет легко организовывать многопользовательский (до 25 пользователей) и мультипрограммный (до 99 задач) режимы работы с ПЭВМ. Работая под управлением ОС Concurrent DOS 386, процессор Intel 80386 постоянно функционирует в виртуальном режиме процессора Intel 8086, имитируя работу нескольких процес- соров Intel 8086, снабженных своей независимой областью виртуальной памяти. Система Concurrent DOS 386 допускает многопользовательский (до 10 пользователей) и мультипро- граммный (до 4 задач) режимы работы с ПЭВМ. Система Windows 386 во многом напоминает Concurrent DOS 386. Операционная система DESQview функционирует на процес- сорах Intel 8086/8088/80286/80386 и также может функциони- ровать в виртуальном режиме процессора Intel 8086, снабжен- ного памятью объемом в 640 Кбайтов. Система является много- пользовательской и1 мультипрограммной и позволяет макси- мально использовать целый ряд основных преимуществ 32-разрядных ПЭВМ: 43-строчный формат видеоадаптера EGA, 50- и 60-строчные форматы адаптера VGA и ряд других. Следует отметить, что ОС PS MOS, Concurrent DOS 386, Windows 386 и DESQview, функционируя на 32-разрядных ПЭВМ, скорее имитируют режим работы 16-разрядных персональных компьютеров, чем являются управляющими системами, макси-
мально использующими возможности процессора Intel 80386. В^евязи с этим фирмой Microsoft разрабатываются три версии новой многопользовательской мультипрограммной ОС, полу- чившей название OS/2, которая планируется в качестве перс- пективного стандарта для 32-разрядных ПЭВМ на базе процес- сора Intel 80286/80386. Система OS/2 обеспечивает совмести- мость нового ряда ПЭВМ PS/2 как с большими ЭВМ фирмы IBM, так и с ПЭВМ серии IBM PC, что значительно повышает ее шансы на роль нового стандарта ОС для ПЭВМ. Система OS/2 версии 1.0 обеспечивает работу с оперативной памятью объемом до 16 Мбайтов и виртуальной памятью до 1 Гбайта. Данная версия системы функционирует, начиная с модели IBM PC/AT с памятью не менее 1.5 Мбайтов, при этом само ядро системы занимает 250 Кбайтов. Система OS/2 1 0 поддерживает мультипрограммный режим (до 15 задач) и часть памяти объемом 640 Кбайтов может использоваться в режиме эмуляции MS DOS 3.3. ОС OS/2 версии 1.0 предоставляет пользователю системы программирования на основе языков БЕЙСИК, ПАСКАЛЬ, СИ, ФОРТРАН-77 и КОБОЛ. Версию 1.1 системы OS/2 предполагается дополнить средст- вами развитого графического интерфейса с пользователем, реляционной СУБД типа DB2 и эмуляторами терминалов для подключения к большим ЭВМ фирмы IBM. При этом, минималь- ный требуемый объем памяти ПЭВМ возрастет до 4 Мбайтов. Кратко охарактеризовав существующие и перспективные операционные системы ПЭВМ, совместимых с моделями серий IBM РС/ХТ/АТ и новыми системами серии PS/2, переходим к рассмотрению двух других групп программных средств, пред- ставляющих особый интерес для массового пользователя ПЭВМ. 10 .2. ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА И СИСТЕМЫ ПРОГРАММИРОВАНИЯ Для обеспечения пользователя ПЭВМ средствами разработки ПО с операционными системами, как правило, поставляется набор инструментальных средств и систем программирования. Так, с ПЭВМ ИСКРА 1030 в настоящее время наряду с ОС АДОС 2.0 поставляются интерпретаторы с языков про- граммирования АССЕМБЛЕР, БЕЙСИК и ЯМБ. Обычно набор по- ставляемых средств программирования значительно шире и включает такие языки как БЕЙСИК, ПАСКАЛЬ, ФОРТ, СИ, ФОРТ- РАН-77, ЛИСП, ПРОЛОГ и целый ряд других. Анализ зарубеж- ного опыта поставки стандартного ПО для ПЭВМ показывает, что оно достаточно стабильно независимо от типа ПЭВМ. Суще- ствующие различия касаются, как правило, только диалектов языков программирования высокого уровня, а также форматов объектных и загрузочных модулей, получаемых после компи- ляции и редактирования исходных модулей программ.
Язык АССЕМБЛЕРа является машинно-зависимым и постав-. ляется с ПЭВМ любого типа. Он обеспечивает высокие7 эксплуатационные характеристики разрабатываемого ПО: про- изводительность компактность, эффективность управления аппаратными ресурсами ПЭВМ. Как правило, язык АССЕМБЛЕРа используется системными программистами для разработки ПО реального времени, систем управления УВВ и работы с графи- ческой информацией, а также при разработке системного ПО. Эффективное использование языка АССЕМБЛЕР предполагает высокую квалификацию пользователя, а сама разработка и отладка больших программных систем требует значительных временных затрат. С целью избежать затруднений при создании и отладке подобного типа ПО был разработан язык програм- мирования высокого уровня ФОРТ, получивший очень широкое распространение. Подробнее о нем будет идти речь несколько ниже. Система программирования фирмы Borland на базе языка Ассемблер представлена новым интегрированным пакетом, включающим Turbo-Assembler и Turbo-Debugger. При этом Turbo-Assembler полностью поддерживает процессор Intel 80386, по основным параметрам превосходит версии 4.0, 5.0 и 5.1 языка Microsoft Assembler (MASM) и имеет развитый интерфейс с языками программирования высокого уровня, включая Turbo-C и Turbo-Pascal. В настоящее время в качестве стандарта для всех 8-, 16- и 32-разрядных ПЭВМ предложен универсальный язык CALM, разработанный Швейцарским технологическим институтом. Язык CALM содержит 48 основных команд, описывающих поряд- ка 95% команд любого микропроцессора. Остальные представ- ляют собой специальные команды, присущие тому или иному типу микропроцессора (Intel 80286/80386, Motorola 68000/68020 и так далее). При этом обозначения операндов, кодов условий, адресов и данных соответствуют стандарту языка CALM. Как уже отмечалось выше, основными языками програм- мирования массового пользователя являются БЕЙСИК, ПАСКАЛЬ, ФОРТ и ряд других. Язык БЕЙСИК очень прост в освоении, удобен для описания различного рода вычислитель- ных алгоритмов, а диалоговая ориентация языка делает БЕЙСИК-программы достаточно простыми в отладке. В зави- симости от диалекта языка БЕЙСИК с успехом может быть использован и для разработки различного рода интерпретиру- ющих программных систем [1+3], игровых, графических про- грамм и т.д. Существует ряд версий систем программирования на основе диалектов языка БЕЙСИК, ориентированных на тот или иной круг применений. При этом, средства языка БЕЙСИК имеются как на интерпретирующем, так и на компилирующем уровнях реализации. Наиболее массовыми являются интерпретаторы и компиляторы с языка БЕЙСИК, разработанные фирмой Microsoft для операционной системы MS DOS. Системы про-
граммирования Quick-BASIC фирмы Microsoft и Turbo-BASIC фирмы Borland Inc. обладают развитыми средствами по созда- нию, редактированию и отладке ПО и наряду с этим позволяют создавать высокоэффективное независимое ПО,_ которое впоследствии может использоваться вне среды БЕЙСИК-сис- темы. Наряду с этим интерактивная обучающая система Quick-BASIC служит для более быстрого освоения работы с языком БЕЙСИК. С системой Turbo-BASIC поставляется ряд библиотек программ, среди которых можно отметить средства создания баз данных (Database) и развитые средства редак- тирования (Editor). Система программирования Turbo-BASIC совместима с расширенным БЕИСИКом и GW-BASIC и поддер- живает работу с математическим со-процессором Intel 8087. Turbo-BASIC позволяет осуществлять компиляцию БЕЙСИК- программ со скоростью до 15000 строк/мин и создавать высокоэффективное программное обеспечение. Язык программирования GW-BASIC, разработанный фирмой Microsoft для ПЭВМ типа Olivetti, включает расширенные средства по работе с графической информацией. Язык Business BASIC ориентирован на решение различного рода деловых, коммерческих и финансовых задач. Система программирования на языке БЕЙСИК для ОС DCP фирмы Robotron (ГДР) реализует новейший (1986 г.) Американ- ский стандарт языка со значительно более расширенными воз- можностями по работе с данными, встроенного редактора, средств отладки и т. д. Однако наряду с присущими им преимуществами, системы программирования и инструментальные средства на основе языка БЕЙСИК имеют и ряд недостатков, основными из которых являются свойственные БЕИСИКу структурные ограничения и невозможность создания строго структурированных (в смыс- ле теории структурного программирования) программных средств. И в этом отношении преимущества получают языки, подобные ПАСКАЛЮ. Системы программирования на основе языка ПАСКАЛЬ позволяют эффективно создавать ПО в полном соответствии с требованиями структурного программирования. ПАСКАЛЬ- системы включают средства создания, отладки, редактирования и документирования ПО. В отличие от БЕЙСИК-систем пользователь получает возможность создания ПО реального времени, что делает ПАСКАЛЬ незаменимым языком высокого уровня для разработки ПО автоматизации различного рода научных исследований, технологических процессов, моделиро- вания и тому подобное. Требования обычного прикладного ПО обеспечиваются хорошо развитыми средствами определения типов данных языка ПАСКАЛЬ. В освоении ПАСКАЛЬ незначи- тельно сложнее языка БЕЙСИК. Тогда как по средствам управ- ления ресурсами ПЭВМ ПАСКАЛЬ-системы в значительной мере конкурентноспособны с языками класса АССЕМБЛЕР. В насто- ящее время наиболее популярными системами данного типа
являются компилятор PASCAL фирмы Microsoft и система Turbo-PASCAL 5.0 фирмы Borland Inc. С созданием фирмы Borland Inc. (1983 г.) тесно связано широ- кое коммерческое использование языка ПАСКАЛЬ. В настоящее время Borland International Inc. является одним из лидеров раз- работки дешевого ПО для различного типа ПЭВМ, а целый ряд программных средств этой фирмы стали всемирно известными. В первую очередь, это относится к системе программирования Turbo-PASCAL и наиболее известным библиотекам подпро- грамм для нее; Graphics - поддержка широких графических возможностей; Numerical Methods - широкий набор численных методов; Editor - развитые средства редактирования; Database - средства создания баз данных пользователя; Gameworks - программы игр в шахматы, бридж и Го; Tutor - обучающая система и руководство по ПАСКАЛЮ В настоящее время фирма Borland объявила о создании новой версии 5.5 системы Turbo-PASCAL [26.3-265], полностью совместимой с системами версий 4.0 и 5.0. Система програм- мирования Turbo-PASCAL 5.5 Professional предоставляет пользо- вателю развитые средства объектно-ориентированного про- граммирования и наследует лучшие черты объектно-ориентиро- ванного языка PASCAL Apple и возможности языка С ++. Систе- ма поставляется в виде пакета, включающего кроме средств собственно системы Turbo-PASCAL, также Turbo-Debugger 1.5 и Turbo-Assembler 1.0. Пакет ориентирован на работу с моделя- ми ПЭВМ, совместимыми с IBM PS/2 и IBM РС/ХТ/АТ, с памятью не менее 448 Кбайт и операционной системой MS DOS (PC DOS) версии не ниже 2.0, а также поддерживает работу с со-процес- сорами Intel 8087/80287/80387 и весьма широким набором периферийных устройств. Язык программирования ФОРТ занимает на сегодня по по- пулярности третье место после БЕЙСИК и ПАСКАЛЬ в качестве средства программирования для различного типа ПЭВМ. Разви- тые ФОРТ-системы, как правило, обеспечивают пользователя полным набором средств для разработки, отладки и выполнения ПО и содержат следующие основные компоненты: интерпре- татор для диалогового режима работы, компилятор, АССЕМБЛЕР, текстовый редактор и сервисные средства. Все компоненты ФОРТ-системы обычно пишутся на самом языке ФОРТ. Ряд ФОРТ-систем позволяет создавать независимое ПО для прикладных задач пользователя. ФОРТ-системы по средст- вам управления ресурсами ПЭВМ не уступают языкам класса АССЕМБЛЕР, допуская значительно более высокий уровень инструментальных средств программирования. Наряду с этим используемый в языке ФОРТ способ введения определяющих слов предоставляет пользователю практически неограниченную свободу в создании новых понятий
и удобных инструментальных средств программирования, настоящее время широкое распространение получили коммерческие программные ФОРТ-средства: пакеты обработки текстовой и графической информации, компиляторы с языков программирования, игровые и музыкальные программы, систе- мы реального времени. Наиболее популярными ФОРТ-систе- мами являются PolyFORTH фирмы FORTH Inc. и графический пакет GraFORTH, достаточно подробно описанный в предыдущей главе. Система PolyFORTH поддерживает многозадачный режим работы и реализована на целом ряде ЭВМ, включая ПЭВМ, сов- местимые с IBM РС/ХТ/АТ. Учитывая вышеизложенное, описан- ная в предыдущей главе базовая система MINIDOS для ПЭВМ ИСКРА 1030 содержит средства программирования на языках БЕЙСИК, ПАСКАЛЬ и ФОРТ-83. Это позволяет исполь- зовать ее широкому кругу пользователей для решения разно- образных прикладных задач. Для решения инженерно-технических и научных задач по- прежнему популярным остается язык программирования ФОРТРАН, а экономических задач - язык программирования КОБОЛ. Наибольшую известность здесь получили FORTRAN- и COBOL-системы фирмы Microsoft. В последние годы все боль- шее значение при использовании ПЭВМ приобретают языки СИ и АДА. Системы программирования на базе языка СИ оказыва- ются весьма эффективными для разработки системного ПО и ПО, переносимого на другие типы и классы ЭВМ. Однако язык СИ уступает ПАСКАЛю по возможностям описания данных и работе в режиме реального времени. Из данных средств наиболее известными являются компиляторы C-Compiler и Quick C-Com- piler фирмы Microsoft, а также система программирования Microsoft-C версии 5. Однако уместно несколько подробнее остановиться на системе Turbo-C 2.0 фирмы Borland Inc. [236-237], как наиболее эффективном средстве данного типа. Turbo-C 2.0 фирмы Borland является новым шагом на пути развития систем программирования на базе языка СИ и превос- ходит остальные подобные ей системы по всем основным пока- зателям. Данная интегрированная система включает новый оптимизирующий компилятор Turbo-C версии 2.0, мощный редактор и эффективный отладчик. Компиляция исходных про- грамм осуществляется со скоростью не менее 16000 строк в минуту и является самой быстрой среди других компиляторов с языка программирования СИ. Компилятор снабжен много- уровневой системой диагностики С-программ. Наряду с этим система содержит библиотеку из более чем 450 оптимизиро- ванных подпрограмм, включая развитые графическую и матема- тическую библиотеки. Система Turbo-C 2.0 предоставляет пользователю развитый интерфейс с Turbo-Pascal и Turbo- Prolog. По всем основным показателям Turbo-C 2.0 превосходит хорошо известную систему Microsoft-C 5.1. Система Turbo-C 2.0 функционирует под управлением MS DOS версии 2.0 и выше и требует для своей работы не менее 448 Кбайт памяти. Пример
использования данной системы для создания высокоразвитого текстового процессора Sprint позволяет судить о ней, как о перспективном средстве разработки ПО для ПЭВМ, совмести- мых с IBM РС/ХТ/АТ. Из отечественных адаптированных средств этого типа можно отметить пакеты "ИНТЕРСИ-Конструктор”, предназначенный для автоматизации разработки программных средств на языке программирования СИ, а также "МИКРО-СИ”, обеспечивающий выполнение программ в среде языка СИ. Язык программирования АДА разработан в качестве универ- сального языка создания больших программных систем, ориен- тированных на работу в режиме реального времени. Однако, несмотря на целый ряд его достоинств (прозрачность программ, эффективность и простота объектных модулей, развитые средства восстановления, поддержка специальных УВВ, сред- ства описания параллельных процессов, режим реального времени и так далее), АДА пока не стал достаточно популярным языком программирования для ПЭВМ ввиду его чрезмерной сложности. Из других языков программирования для ПЭВМ можно отме- тить АПЛ, ПЛ, ЛИСП, ПРОЛОГ и МОДУЛА-2. Язык АПЛ ориенти- рован на решение инженерно-технических задач и особенно удобен для описания задач, связанных с операциями над матри- цами и векторами. На основе языка АПЛ реализован целый ряд программных систем машинной графики. Язык программирова- ния ПЛ/1 достаточно хорошо известен по ЭВМ серии ЕС, для которых он стал одним из основных (если не основным) языков программирования и не требует сколь-нибудь детальной харак- теристики. Для решения задач искусственного интеллекта используются языки программирования ЛИСП и ПРОЛОГ. Особенностью языка ЛИСП является возможность динамического создания новых объектов, в качестве которых могут выступать сами програм- мы. Другой существенной особенностью языка ЛИСП является функциональный способ записи программ, стимулирующий, в частности, создание рекурсивных алгоритмов, отличающихся высокими выразительностью и компактностью представления. В настоящее время существует ряд интересных реализаций ЛИСП-компиляторов для ПЭВМ, включая совместимые с IBM РС/ХТ/АТ. Из их числа отметим ЛИСП-интерпретатор фирмы Livien Instruments (США) и ЛИСП-компилятор корпорации Modula Corp. (США). В основу языка программирования ПРОЛОГ, предназна- ченного для разработки систем искусственного интеллекта (ИИ), положен аппарат математической логики. На основе языка ПРОЛОГ разрабатываются экспертные системы, базы знаний, системы обработки естественных языков и так далее. В настоящее время для создания экспертных систем все шире используется язык МОДУЛА-2, наиболее популярной реализацией которого является компилятор с конвертором
для перевода ПАСКАЛЬ-программ в среду языка МОДУЛА-2. Из наиболее популярных реализаций языка ПРОЛОГ можно отметить несколько. Так, интерпретатор PROLOG-86 включает пример достаточно развитой экспертной системы. Система PROLOG V Pius фирмы Chalcedony Software (США) хоть и требует ПЭВМ с большой памятью, но включает более 100 предопреде- ленных предикатов, средства работы с графическим и алфавит- но-цифровым дисплеем, встроенный редактор. Реализация дан- ной системы для ПЭВМ с небольшой памятью допускает исполь- зование 70 предикатов и целочисленную арифметику. В то же время самой популярной является система програм- мирования Turbo-PROLOG фирмы Borland Inc. Система включает средства создания, отладки, редактирования и выполнения ПРОЛОГ-программ. Пользователь работает с системой Turbo- PROLOG в режиме меню и имеет возможность использовать файлы данных, созданные такими известными пакетами, как LOTUS 1-2-3, REFLEX, dBase 3 и SYMPHONY. Наряду с этим по- следняя версия содержит расширение, включающее средства коммуникации, более 80 новых сервисных средств, свыше 8000 строк исходного текста для работы с деловой графикой, раз- витые средства реализации интерфейса с пользователем. Вместе с тем последняя реализация системы позволяет созда- вать высокоэффективное ПО, организовывать прямой доступ к памяти и портам ввода-вывода ПЭВМ, вызывать функции MS DOS, работать с графикой высокой разрешающей способ- ности и так далее. Поставляемая с Turbo-PROLOG библиотека подпрограмм позволяет легко осуществлять интерфейс с язы- ками Turbo-C и Ассемблером. Для своего функционирования система Turbo-PROLOG требует не менее 512 Кбайтов опера- тивной памяти на моделях IBM РС/ХТ/АТ. Здесь же уместно отметить такой примечательный момент, что в рамках развития систем программирования для ПЭВМ, совместимых с IBM РС/ХТ/АТ, фирмой Borland создана про- фессиональная серия высокоэффективных, надежных и деше- вых программных средств класса ’’Turbo”: Turbo-Assembler, Turbo-Debugger, Turbo-C, Turbo-Pascal, Turbo-Prolog и Turbo- Basic. Это определило новый этап в развитии базового про- граммного обеспечения ПЭВМ и расширило область применения ЭВМ этого класса. Наряду с системами программирования на основе выше- упомянутых языков программирования большое развитие полу- чили так называемые объектно-ориентированные системы про- граммирования, позволяющие не только достаточно эффективно решать задачи из некоторой конкретной области, но и создавать для этих целей свои проблемно-ориентированные языки. Среди таких средств можно отметить систему программирования МИКРОПРИЗ, разработанную в Институте кибернетики АН ЭССР [152]. Данная система ориентирована, в первую очередь, на разработку программ и ППП для конкретных областей приме- нения. Наиболее эффективно применение системы МИКРОПРИЗ
в тех областях, где взаимосвязи объектов могут быть описаны в виде различного типа уравнений. Такими облартями мог^ут быть: вычислительная математика, электротехника, моделиро- вание и так далее. МИКРОПРИЗ содержит и систему МИКРО- ЭКСПЕРТ, предназначенную для создания и использования экспертных систем. Система МИКРОПРИЗ работает под управ- лением ОС СР/М и MS DOS и может функционировать на ПЭВМ, совместимых с IBM РС/ХТ/АТ и имеющих оперативную память не менее 512 Кбайтов. Дальнейшим развитием данного средст- ва явился пакет ЭКСПЕРТПРИЗ. Из объектно-ориентированных языков программирования можно отметить такие как С ++, SmallTalk, Object PASCAL, Objective-C, Eiffel, Actor и другие. Читателя, интересующегося вопросами использования и перспективного развития объектно- ориентированных систем программирования, отсылаем к ново- му специальному журналу [267]. На этом завершается краткий обзор инструментальных средств и систем программирования и переходим к рас- смотрению наиболее многочисленной группы программных средств - пакетам прикладных программ (ППП). 10 .3. ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ В настоящее время пакеты прикладных программ (ППП) яв- ляются наиболее обширной областью программных средств ПЭВМ. Обилие ППП не позволяет сделать даже их краткий обзор, поэтому в данном разделе приводится краткая характеристика тех пакетов, которые уже используются в нашей стране на ПЭВМ, совместимых с IBM РС/ХТ/АТ, и к которым массовый отечественный пользователь имеет относительно несложный доступ. Для удобства рассматриваемые пакеты будем подразделять на десять основных групп: (1) обработка текстовой информации (текстовые редакторы); (2) обработка графической информации (графические редак- торы); (3) средства обработки различного рода электронных таблиц; (4) системы управления базами данных (СУБД); (5) коммуникационные пакеты для работы ПЭВМ в сетях связи; (6) пакеты, ориентированные на специальное применение; (7) пакеты для обеспечения наиболее важных сервисных функ- ций; (8) интегрированные пакеты; (9) средства поддержки интеграции пакетов программ; (10) экспертные системы и базы знаний, САПРы. Рассмотрим каждую из перечисленных групп пакетов отдельно.
Большой интерес для массового пользователя представляет группа ППП, служащих для работы с различного рода текстовой информацией. В настоящее время данные пакеты представляют собой одну из самых популярных групп программных средств для ПЭВМ. Пакеты этой группы позволяют проводить следующие основные процедуры работы с текстовой информацией: различные виды корректировок, вывод текстов на устройства печати в заданных форматах, встроенные функции калькуляции и ведения таблиц, ведение автоматических календарей, запис- ных книжек и т. д. К наиболее популярным пакетам обработки текстов можно отнести текстовые редакторы типа Word. Так, редакторы WordStar и Word Perfect ориентированы на работу с текстовой информацией и послужили основой для целого класса текстовых редакторов. Например, принцип рабо- ты редактора WordStar использован в таких системах как Turbo-PASCAL и FRAMEWORK, а также MicroStar фирмы Borland Inc., PC-File2 PC-Write, редактор текстов для ПЭВМ ИСКРА 1030 и НЕЙРОН И9.66, текстовом процессоре ВЦ АН СССР и т.д. Особое место среди текстовых редакторов занимают пакеты Sprint фирмы Borland Inc. и Software Bridge, DOC-Exchange, DEX Document Exchange, SoftScan фирмы Systems Compatibility (США). Они предназначены для переноса текстовых файлов из среды одного текстового процессора и/или типа ПЭВМ в дру- гую. Так, пакет Sprint фирмы Borland [238-240] наряду с функ- циями обычного текстового редактора предоставляет пользова- телю набор интерфейсов для работы с текстовыми файлами, подготовленными пакетами Perfect Writer 1.0, FinalWord 2, Micro- soft Word 4.0, SideKick, Word Perfect 4.2 и WordStar 4.0. Следует отметить, что значительная часть превосходно оформленной программной документации готовится фирмой Borland именно с помощью пакета Sprint. Пакет Software Bridge представляет собой программный конвертор для текстовых файлов, подготов- ленных 16-ю наиболее популярными текстовыми редакторами. Пакет DOC-Exchange позволяет использовать на IBM РС/ХТ/АТ полностью отредактированные текстовые файлы, под- готовленные на PC WANG OIS/VS, или передавать непосредст- венно в PC WANG текстовые файлы в форматах одного из 17 наиболее популярных текстовых редакторов для серии IBM РС/ХТ/АТ. Пакет DEX Document Exchange позволяет осуще- ствлять обмен и использование текстовых файлов между IBM РС/ХТ/АТ, мини-ЭВМ VAX и PC WANG OIS/VS. В настоящее время данный пакет поддерживает работу с 18 форматами текстовой информации. Наконец, пакет SoftScan поддерживает работу с 16 различными форматами текстовых файлов и на основе кода ASCII готовит полностью готовый текстовой файл, который можно непосредственно использовать для редактирования, печати или в телеобработке. Все перечисленные пакеты данной группы требуют для своей работы не менее 384 Кбайт памяти на моделях IBM РС/ХТ/АТ или совместимых с ними ПЭВМ.
Большой интерес представляет пакет NEWMASTER фирмы Unison Inc., предназначенный для редактирования различного рода деловой и коммерческой переписки с использованием гра- фического оформления: большой набор оригинальных шрифтов, орнаменты, рисунки и т. д. Пакет снабжен богатой библиотекой стандартных рисунков для оформления различного рода рек- ламных материалов. Текстовый процессор EasyFlow фирмы Haven Tree Software Ltd. (США) предназначен, в первую очередь, для документирова- ния различного рода материалов, подготовленных технически- ми специалистами. Материалы могут содержать различные таб- лицы, карты, диаграммы и рисунки. Интересным представляет- ся и популярный текстовый процессор VEDIT. В этом же направ- лении можно отметить интересный пакет InterWord фирмы Kaabex (ФРГ), предназначенный для многоязычной обработки текстовой информации. Наконец, пакет ТЕХ, созданный под руководством Д. Кнута из Стэнфордского университета (США), предназначен для под- готовки различного рода научных материалов к печати. Данный пакет весьма эффективен при подготовке материалов матема- тического характера и представляет собой уникальный тексто- вый процессор. В настоящее время на базе пакета ТЕХ создана издательская система AMS-ТЕХ, с помощью которой издается международный математическиай журнал ’’Applied Mathematical Letters” издательства Pergamon Press. В качестве примера ис- пользования ПЭВМ в издательском деле можно привести рекорд по скоростному выпуску книги, когда сборник стихов объемом в четыре печатных листа был издан за восемь часов. В девять утра автор принес рукопись в издательство, а в пять вечера уже давал автографы на первых экземплярах книги. Данный рекорд был установлен в одном и-j французских издательств с по- мощью ПЭВМ IBM АТ. Большую группу ППП составляют в настоящее время графиче- ские системы, предназначенные для работы с различного рода графической информацией. В значительной мере их можно охарактеризовать как графические процессоры. Такие пакеты играют весьма важную роль при научных исследованиях и авто- матизации инженерных и проектно-конструкторских работ, а также в системе образования. Так, интересным представ- ляется пакет IRRAD для решения задач компьютерной томогра- фии (реконструкция и обработка изображений) [141]. В настоя- щее время пакет IRRAD реализован в среде языка СИ для IBM РС/ХТ/АТ. Графический пакет GEM обладает развитыми средствами ра- боты с различными типами графики и постоянно расширяется новыми интересными средствами. Весьма популярным являет- ся графический пакет GraFORTH, разработанный в среде языка FORTH П. Лутусом. Пакет имеет расширенные возможности по работе с трехмерной графикой, содержит мощный графиче- ский редактор и позволяет проводить эффективный визуальный
контроль графических объектов как в различных проекциях, так и в сечениях. Наряду с этим пакет GraFORTH имеет развитые средства по созданию „музыкальных” и FORTH-программ. В предыдущей главе описана адаптированная часть пакета GraFORTH для системы MINIDOS. Пакет GRAF Lotus Freelance Plus фирмы Lotus Development Corp. (США) представляет собой весьма мощное средство для работы с деловой и коммерческой графикой. Среди средств данной группы можно отметить также графические пакеты GRAFORT, написанные на языке ФОРТРАН, и Grafix Partner. Большой интерес для отечественного пользователя может представить объектно-ориентированный пакет AutoSketch фир- мы AUTODESK Ltd. (Англия), предназначенный для работы с гра- фической информацией самого различного характера. Данный пакет успешно используется в архитектурном проектировании, дизайне, планировании, графических работах, топографии, тех- нических иллюстрациях, чертежных работах в электронике, химии, механике и так далее. Пакет поддерживает работу с уст- ройствами типа „мышь”, графическим принтером, плоттером, джостиком и другими. Пакет AutoCAD АЕС этой же фирмы слу- жит для обеспечения программных проектов по промышленной графике в архитектуре, технике и конструирований. Достаточное развитие с появлением ПЭВМ получила группа пакетов обработки электронных таблиц, калькуляторов, кален- дарей, записных книжек и так далее. В этом направлении хоро- шо зарекомендовали себя SuperCalc, VisiCalc, Multiplan и подоб- ные им пакеты. Так, SuperCalc 3 является мощным и вместе с тем легкоосваиваемым пакетом работы с электронными таб- лицами. Его возможности позволяют решать все типы финансо- вых, деловых, инженерно-технических и научных задач таблич- ного характера. Пакет SuperCalc 3 работает в режиме меню и допускает использование таблиц, содержащих до 2000 строк и 128 столбцов. Принцип пакета SuperCalc был использован при создании подобных ему программ MicroCalc с ограничен- ными возможностями для систем программирования Turbo- PASCAL и Turbo-BASIC. Пакет ExpressCalc обладает повышен- ным быстродействием по сравнению с аналогичными пакетами работы с таблицами. В настоящее время в эксплуатации на- ходится SuperCalc 5. К данной группе относится и пакет TABCALC фирмы Robotron для решения задач табличного харак- тера. Особую группу пакетов, представляющих большой интерес для непрофессионального пользователя, составляют системы управления базами данных (СУБД). В настоящее время за рубе- жом в среде MS DOS и PC DOS функционирует порядка 20 раз- витых СУБД, из которых особый интерес для пользователей ПЭВМ ИСКРА 1030 представляют СУБД класса dBase, отечест- венными аналогами которого являются пакеты ”Нейрон-база” и ’’Ребус”. Популярный пакет СУБД dBase 3 plus работает под управлением MS DOS, начиная с версии 2.0, и требует
для своего функционирования не более 350 Кбайтов оператив- ной памяти. В настоящее время находятся в эксплуатации СУБД dBase 4 и dBase 4 plus, поддерживающие работу ПЭВМ в сети передачи данных. Наряду с самим пакетом dBase 3 хорошо раз- вито и его окружение, включающее: различного назначения утилиты; компилятор для dBase-языка; систему The Documentor фирмы WallSoft Systems Inc. (США), позволяющую осуществлять высококачественное документирование любых применений СУБД dBase, и другие. Из dBase-подобных СУБД можно отметить системы DB TAS4- фирмы Business Tools Inc. и DB Clipper фирмы Naturcket Corp, (обе США). Целый ряд пакетов группы служат для поддержания работы с базами данных (БД) и в первую очередь с БД знаний. Среди других пакетов данной группы можно отметить СУБД Rbase System фирмы Microsoft и интересный пакет Paradox-2. Популярность СУБД dBase 3 настолько велика, что по образцу данного пакета разработаны системы ПО Compiler-Clipper фир- мы Nantucket и Foxbase фирмы Fox Software для проектирования ПЭВМ. Для начинающих пользователей разработана СУБД Super-DB фирмы Computer Assosiates (США). Пакет Reflex фирмы Borland является одной из наиболее мощных СУБД реляцион- ного типа на западном рынке. Он может использовать файлы из хорошо известных пакетов Lotus 1-2-3, Symphony, dBase 3, PFS, File, DIF и любые текстовые файлы в коде ASCII. Данный пакет работает на ПЭВМ, совместимых с IBM РС/ХТ/АТ, под управлением MS DOS 2.0 и выше и требует память не менее 384 Кайт. Средства управления базами данных, как правило,, являются обязательной составной частью интегрированных пакетов. СУБД REDABAS-3 DCP, разработанная фирмой Robotron, реа- лизует реляционную модель банка данных с возможностью про- стой адаптации к^ информационным нуждам пользователя.. Наиболее эффективным оказывается использование системы в тех областях, в которых информация представляется в форме списков или различного рода таблиц. К данной группе средств можно отнести и многочисленные информационно-поисковые системы (ИПС), используемые так- же для создания и ведения баз данных различного назначения. Из отечественных адаптированных средств данной группы можно отметить также комплексную автоматизированную реля- ционную систему КАРС-МИКРО управления базами данных, предназначенную для решения разнообразных информацион- ных задач, и компилирующую систему ПЭВМ-БАЗА управ- ления реляционными базами данных для создания АСУ и инфор- мационных систем. Пакет ПЭВМ-БАЗА предоставляет пользова- телю развитую среду, содержащую собственно СУБД реляцион- ного типа, библиотеки графических и математических функций, широкий набор утилит, а также СУБД реляционного типа МИКРО-РС. К этой же группе можно отнести СУБД реляционного типа СУД-МИКРО, поддерживающей организацию и обслужива-
ние данных из программ пользователя, написанных на языках программирования БЕЙСИК, ПАСКАЛЬ, СИ, и КОБОЛ-МИКРО, а также пакет СУД-АПМ-ППЭВМ, предназначенный для авто- матизации ведения баз данных для АРМов управленческого персонала предприятий, организаций и ведомств. Коммуникационные пакеты предназначены, в первую оче- редь, для организации работы ПЭВМ в сетях обработки и пере- дачи информации. Типичным примером коммуникационного пакета является MS-Net. В связи с широким использованием ПЭВМ в сетях обработки информации все большее число паке- тов включает в себя средства коммуникации, например: Multiplan, Chart, Excel, Project, Rbase System, Word и другие. Большой интерес представляет телекоммуникационный пакет DFV DCP фирмы Robotron, предназначенный для организа- ции дистанционной передачи данных между ЕС ЭВМ, СМ 1910, ЕС 1834 (выбранными в качестве вышестоящей или имеющей тот же иерархический уровень ЭВМ) и ПЭВМ СМ 1910, ЕС 1834 (работающими под управлением ОС DCP) в качестве интеллек- туального терминала, диалогового абонентского пункта (ЕС 7920/7925) или терминала пакетной обработки при передаче данных. Пакет CCS этой же фирмы предназначается для обеспе- чения коммуникации ЕС ЭВМ и ПЭВМ, совместимых с IBM РС/ХТ/АТ. Фирмой VIDEOTON (ВНР) для массового пользователя предлагаются локальные сети на базе ПЭВМ VT 160 и VT 180, являющиеся соответственно аналогами IBM РС/ХТ/АТ и IBM PC/AT. Поддержка функционирования таких сетей (аналогичных сетям Ethernet и Arcnet) обеспечивается сетевыми пакетами, из которых можно отметить LOCAL-286. К коммуникационным пакетам можно отнести и средства эмуляции внешних устройств, позволяющие существенно рас- ширить логическую номенклатуру технических средств ПЭВМ. Для отечественного пользователя может представить опреде- ленный интерес пакет PROCOMM Plus фирмы DataStorm Technologies Inc., основной функцией которого является эмуля- ция следующих видеотерминалов: TTY. DES VT102. ANSI Х3.64, IBM 3101. TeleVideo 900 series. Wyse 50. Wyse 100. Heath/ Zenith 19. ADDS Viewpoint 60, Lear Siegler, ADM3/5, IBM 3270 и ряда других видиотерминалов. Наряду с пакетами перечисленных четырех групп, ориенти- рованными на массового пользователя, существует большое число пакетов более специального назначения: для различного рода расчетов, финансовых операций, моделирования в различ- ных областях, автоматизации проектирования, научных иссле- дований, обучения и так далее. Среди пакетов данной группы можно отметить REDUCE, предназначенный для алгебраических символьных преобразований. В отличие от REDUCE, пакет EUREKA фирмы Lotus Development Corp. (США) предназначен для численного решения широкого класса математических и коммерческих задач: системы линейных и нелинейных урав- нений, интерполяция, вычисление определенных интегралов
и производных, решение дифференциальных уравнений, матрич- ные операции, метод наименьших квадратов, преобразование Фурье и другие. Пакет ориентирован на работу с IBM РС/ХТ/АТ и требует для своего функционирования не менее 384 Кбайтов оперативной памяти. Новая версия пакета Turbo-EUREKA дополнительно к пере- численному включает экранный редактор, развитую систему меню, HELP-функцию, электронный калькулятор, средства для проведения разнообразных коммерческих расчетов, реше- ние минимаксных задач, а также возможность выводить различ- ные результаты как на экран, так и на принтер и/или плоттер. В значительной мере к пакету EUREKA примыкают и пакеты NUMAT-1/NUMAT-2 DCP фирмы Robotron для решения задач вычислительной математики. Пакеты STAVE DCP и OPTI-LO DCP той же фирмы представляют собой диалоговые системы реше- ния задач соответственно математической статистики и линей- ной оптимизации в различных областях применения. Пакет MAtCad предоставляет более широкие возможности, чем EURECA. Пакеты CSS фирмы StatSoft (США) и StatGraf предоставляют пользователю широкие возможности по обработке статистиче- ских данных самого разного характера. Пакет программ PHASER [208] предназначен для проведения различного рода экспериментов на ПЭВМ IBM РС/ХТ/АТ с дифференциальными и разностными уравнениями, а также динамическими система- ми в интерактивном режиме с использованием графического режима на дисплеях типа CGB, EGA, VGA. Ширится использование ПЭВМ в издательском деле. Так, на- пример, для ПЭВМ, совместимых с IBM РС/ХТ/АТ, создан пакет Page Planner, позволяющий автоматизировать фотонаборный процесс с использованием печатающих устройств типа Compugraphic, Linotron и Monotype Lasercomp. Существует целый ряд пакетов повышения выразительных средств систем программирования, автоматизации конторских операций, работы с блок-схемами, работы с регулярными выражениями, игровые, обучения, музыкальные, обучения рабо- ты с ПО ПЭВМ, моделирования в различных областях, САПРы, АРМы и так далее. Перечислим ряд пакетов данного направле- ния, разработанных в операционной среде DCP, совместимой с MS DOS 3.2, фирмой Robotron для ПЭВМ СМ 1910, А 7150 и ЕС 1834, а также другими фирмами: AUTOTECH-NCM - разработка ПО для станков с ЧПУ; AUTRA DCP - комплексная САПР для строительства, включая машиностроение, станкострое- ние, судостроение и другие типы про- мышленности; TEXTDOK DCP - автоматизация делопроизводства в раз- личных областях науки, культуры, народ- ного хозяйства;
SWS DCP - технологическая подготовка производст- ва в машиностроении; TESYS-3 DCP - проектирование и разработка ПО для ПЭВМ; LIST DCP - разработка ПО для работы со списочными структурами; DIALOG DCP - разработка ПО для ПЭВМ диалогового типа; GRAMOS DCP PARCELLA BAS - графическая система моделирования* - расширение выразительных средств языка Бейсик; ПРИНН - рациональное решение многокритериаль- ных задач с использованием электрон- ных таблиц; МИКРО-ЛП - решение задач линейного программиро- вания; ИНТЕРПЛАН - автоматизация разработки управления проектом; ДЕЛОГРАФ - графическое представление данных раз- личного типа в виде определенных диа- ДОКУМЕНТ-16 грамм; - автоматизация ввода и редактирования ВАРИТАБ-86 текстовых файлов; - интегрированная система вариантных табличных расчетов; ЦВЕТОГРАФ - автоматизация разработки иллюстриро- ванных рекламно-информационных ма- териалов; ОФИС-ИНФО - автоматизация разработки учрежденче- ских информационных систем; СТАТАН - автоматизация решения технико-эконо- мических задач статистического харак- тера; МИКРО-ИНФО/16 - информационно справочная система; МАГИСТР . КАРТ-ПЛЮС -обучение пользователя работе на ПЭВМ; - ведение электронных картотек различ- ного назначения; ИСОД СПЕКТР/2 - создание АРМов административно-уп- равленческого персонала; РУКОВОДИТЕЛЬ - создание АРМов руководителей и их по- , A-SVEGAL мощников; - моделирование параллельных дискретных динамических систем клеточного типа. Из сервисных пакетов можно выделить пакеты типа Tools, Norton Utilities и Norton Commander, которые предоставляют массовому пользователю широкий набор различного рода сервисных функций: просмотр и редактирование дисковых фай- лов (включая скрытые и системные), анализ состояния диско- вых томов и корректировка их содержимого, различные виды
.копирования и вывода информации, управление устройствами ПЭВМ, получение информации о состоянии системы и так далее. Пакет утилит Q-DOS 2 фирмы Gazelle System (США) предназна- чен для многофункционального обслуживания жестких дисков разного типа. В качестве великолепного справочника по важ- нейшим компонентам и управляющим блокам системы MS DOS может служить пакет TECH-Help [207], позволяющий получать в диалоговом режиме интересующие пользователя (в первую очередь программиста в среде языка Ассемблер) разнообраз- ные справки по MS DOS 3.2. Пакет программ PCPAINT предназ- начен для обеспечения широких функций при работе пользова- теля с устройством типа „мышь”. К пакету PCPAINT непосредственно примыкает и пакет InfoMouse, обеспечивающий работу с устройством типа „мышь” (MUS-02) и наиболее эффективный при работе с графи- ческой информацией. Следует отметить, что InfoMouse сов- местим с такими известными пакетами как AutoCAD, GEM, Lotus 1-2-3, dBase 3, PCPAINT, WordStar, Symphony, Microsoft Window, PE, PCAD и другими. Пакет снабжен программным интерфейсом, позволяющим легко переходить от одного устройст- ва типа „мышь” к другому, включая широко распространенное устройство Microsoft Mouse. В настоящее время пакеты данной группы весьма разнообразны и многочисленны. Описанные выше пакеты носят в значительной мере автоном- ный характер и ориентированы на определенный (хоть и массо- вый ) тип работ на ПЭВМ. Широкое распространение получили интегрированные пакеты, поддерживающие наиболее часто используемые функции. Лучшие пакеты данной группы, как пра- вило, включают в себя следующие возможности: - обработка текстовой и графической информации; - работа с различного типа электронными таблицами; - СУБД и средства коммуникации ПЭВМ. Пакеты данной группы предоставляют на сегодня максимум удобств пользователям ПЭВМ и пользуются повышенным спро- сом. Среди интегрированных пакетов большую популярность завоевали пакеты FRAMEWORK, LOTUS 1-2-3, Excel и WORKS. Пакет FRAMEWORK предназначен для решения прикладных за- дач, включает СУБД dBase и работает под управлением MS DOS и PC DOS. Пакет LOTUS 1-2-3 содержит средства работы с электронными таблицами, БД, деловой и коммерческой графи- кой и является эталоном для пакетов типа ’’электронные таб- лицы”. Для своего функционирования LOTUS 1-2-3 требует только 192 Кбайта памяти. Пакет постоянно модернизируется и ряд фирм разрабатывают пакеты, альтернативные LOTUS 1-2-3. Здесь можно отметить пакет QUATTRO фирмы Borland Inc. [241-243]. Пакет Excel фирмы Microsoft по всем основным харак- теристикам превосходит LOTUS 1-2-3 и снабжен развитыми СУБД и средствами вывода информации в графическом виде. Обрабатываемые пакетом таблицы могут иметь до 16384 строк
и 256 столбцов. Пакетом поддерживается одновременная рабо- та с большим количеством БД и таблиц в многооконном режиме. Пакет WORKS фирмы Microsoft включает обработку тек- стов, развитую СУБД, обработку таблиц, графиче- ское представление результатов и поддерживает работу в се- тях передачи данных. Пакет допускает: использование устрой- ства типа ’’мышь”, математическую и статистическую обработ- ку записей и элементов таблиц, управление структурой данных и таблиц, многооконный графический интерфейс с пользо- вателем. Являясь шагом вперед по пути автоматизации прикладных задач, интегрированные пакеты все же не могут удовлетворить любого пользователя. Поэтому ряд фирм, производящих ПО для ПЭВМ, выпустили пакеты поддержки систем интеграции. Пакеты этого типа предоставляют средства интеграции соглас- но требованиям пользователя и поддерживают две основные функции: возможность подключения новых пакетов и организа- ция их взаимодействия, а также организация многооконного интерфейса с пользователем. Типичным представителем данного класса является дц,- кет WINDOWS фирмы Microsoft,, получающий дальнейшее раз- витие для обеспечения работы пользователя с рабочими станциями DRS PWS, созданными фирмой ICL (Англия) на базо процессора Intel 80286 и сопроцессора Intel 80287. Пакет MS WINDOWS совместно с MS DOS 4.1 предоставляет пользо- вателю адресуемую память в 16 Мбайтов и позволяет работать с таблицами, текстами, БД и так далее. Переключение с одного режима на другой осуществляется манипулятором типа ’’мышь”. Наряду с перечисленным, пакет MS WINDOWS обеспе- чивает стандартный интерфейс на уровне ПО для графическо- го ввода/вывода информации пользователя. В настоящее время создано и поставляется на рынок большое разнообразие экспертных систем и систем представления знаний, ориентированных на различные типы ПЭВМ. Это явилось одним из основных практических выходов исследовательских работ по теме искусственного интеллекта, которой занимается целый ряд ведущих зарубеж- ных фирм [73, 90]. Из программных средств данного направле- ния можно отметить пакет TOPSI для принятия решений фирмы Dynamic Master System (США), пакет EXPERT CHOICE для созда- ния экспертных систем фирмы Decision Support Software Inc. (США), а также экспертные системы EXPERT-Ease фирмы Thorn EMI Comp. Software Inc. (Англия) и METHODS фирмы Digitalk Inc. (США). Пакет txpert Choice [222-225] базируется на теории аналити- ческих иерархических процессов, разработанной Т. Саати, и предназначен для принятия оптимальных решений в сложных многокритериальных ситуациях. Данный пакет весьма эффек- тивен для задач распределения ресурсов, стратегического пла- нирования, а также принятия решений в таких областях как;
- управление финансами, маркетинг и торговля; - страховая и кадровая политика; - исследование и развитие ресурсов. Информация пакета Expert Choice может использоваться инте- грированным пакетом Lotus 1-2-3. Пакет функционирует под управлением MS DOS 2.1 и выше и требует для своей работы не менее 320 Кб памяти и графический дисплей. Интересными представляются также экспертные системы SYLLOG и PLANTDOC, реализованные на языке IBM-PROLOG, который отличается от Standard-PROLOG некоторыми обозначениями для встроенных предикатов. Наконец, пакет программ EXPERT System Consultation Environment фирмы IBM предлагает разви- тые инструментальные средства для разработки экспертных систем, ориентированных на ПЭВМ серии IBM РС/ХТ/АТ. Обзор коммерческих экспертных, систем, разработанных в Европе и США, можно найти в [90, 156, 201, 202, 226]. Из отечественных адаптированных средств данной группы можно отметить экспертную систему РЕСУРС-ЭКСПЕРТ для про- гнозирования и метрологии программных разработок. Данная система предназначена для автоматизации процесса принятия решений руководителями разработки программных проектов при оценке трудоемкости разработок, а также систематизации и формирования базы знаний о трудоемкости разработок в этом направлении. Пакет ИНТЕР-ЭКСПЕРТ предназначен для раз- работки прикладных программных средств с базами данных и знаний главным образом экономического характера. Наряду с этим данный пакет можно использовать для создания конкрет- ных интерпретирующих, прогнозирующих и обучающих програм- мных систем. Эффективность применения экспертных систем определяет- ся, с одной стороны, использованием специальных знаний, ха- рактерных для конкретной предметной области, и, с другой стороны - структуризацией этих знаний и выявлением в них существенных, возможно более общих связей. Быстрая реали- зация экспертных систем того или иного назначения может быть решена путем использования макетов экспертных систем, имеющих достаточно широкий диапазон применения. Важней- шим этапом построения экспертной системы является выбор соответствующих инструментальных средств, которые в насто- ящее время можно условно подразделить на четыре группы: - макеты экспертных систем (GoldWorks, GURU, RULE Master и др.),’ - специализированные программные системы (POPLOG, ART); - языки программирования, ориентированные на решение задач искусственного интеллекта (LISP, PROLOG, SMAL- LTALK); - алгоритмические языки (БЕЙСИК, Фортран 77, СИ и др.). Целый ряд оценок указывают на особое место макетов эксперт- ных систем среди других типов инструментальных средств.
Возникшие первоначально на основе идеи о возможности применения уже готовых экспертных систем для создания новых систем путем изменения базы знаний и текстов поясне- ний, макеты получили дельнейшее развитие в мощных пакетах программ, не ориентированных на конкретную предметную область и работающих путем формирования знаний на основе метазнаний. В макете обычно уже фиксированы способ форма- лизации представления знаний и механизм вывода решений со встроенными поисковыми стратегиями, а также типы воз- можных пояснений и их программная поддержка. Что же касаеъ ся базы знаний и текстов пояснений, то они заполняются спе* циалистами в конкретной предметной области применения про- ектируемой экспертной системы. Большой диапазон возможностей привлекает внимание поль- зователей экспертных систем к пакету GoldWorks, ориентиро- ванному на работу с ПЭВМ IBM РС/ХТ/АТ. Данный пакет может настраиваться как на работу с неопытным пользователем, так и на диалог с экспертом. Пакет GoldWorks имеет интерфейс с такими известными пакетами как LOTUS 1-2-3, dBase 3 plus и развитую HELP-систему, хорошо документированную и обес- печивающую быстрое изучение языка LISP и приобретение необ- ходимых навыков работы с ним. Пакеты САПР составляют достаточно обширный подкласс и здесь не представляется возможным дать сколь-нибудь под- робную его характеристику. Отметим в этом плане САПР типа ECS фирмы Aries Technology (США), включающий средства моде- лирования трехмерных объектов и аппарат кинематического анализа. Данная система проектирования ориентирована на ПЭВМ типа Compaq 386 с оперативной памятью не менее 10 Мбайт и операционной системой SCO Xenix. Более полная информация о программных средствах САПР может быть найде- на в [228, 229] и последующих периодических тематических изданий данной серии. Вопросам разработки САПР с использованием экспертных и диалоговых систем, баз знаний и данных, элементов искусст- венного интеллекта, специальных языков программирования, а также организации обеспечения качества пакетов программ для САПР и тенденциям развития САПР на базе персональных компьютеров посвящены специальные серии [268,269]. Завершая обзор наиболее популярных программных средств для ПЭВМ, совместимых с IBM РС/ХТ/АТ, следует отметить, что проведенная в ПТИ Госстроя ЭССР апробация большинства рас- смотренных в настоящей главе средств показала, что они с успехом могут быть использованы и на выпускаемых отечест- венной промышленностью ПЭВМ ИСКРА 1030, ЕС 1840/41 и НЕЙРОН И9.66. Бурное развитие вычислительной техники и широкое приме- нение ее в различных сферах человеческой деятельности вызва- ло к жизни появление целого ряда зарубежных и отечественных периодических изданий, ориентированных на различные круги
пользователей. Поэтому для успешного ориентирования в данной области рекомендуется постоянно следить, в пер- вую очередь, за такими журналами, как Chip, Online (ФРГ) и Datamation (США), регулярно публикующих разнообразные материалы по разработанным и разрабатываемым програм- мным средствам для различного типа ПЭВМ. Наряду с этим, читателю настоятельно рекомендуется ознакомиться с биб- лиографией [226] книг фирмы Borland (США) по программному обеспечению ПЭВМ, широко охватывающей такие важные раз- делы, как: системы программирования Turbo-Pascal, Turbo- Basic, Turbo-C, Turbo-Prolog, СУБД Reflex, Paradox, эксперт- ные системы и другие. Книги данной серии хорошо оформлены и ориентированы на широкий круг пользователей различного уровня. Подробную информацию о программных средствах для ПЭВМ, имеющихся в ГОСФАП СССР, читатель может по- лучить из [227] и последующих подобных каталогов.
ЗАКЛЮЧЕНИЕ Компьютеризация многих направлений человеческой дея- тельности - это настоящее, но еще в большей мере - будущее развития человеческого общества в целом. Многоаспектносль практического влияния компьютеризации на общество - науки, образования, производства, медицины, управления, вклад в решение многих глобальных проблем обусловливает значи- тельные перспективы данного направления, позволяя отнести его к наиболее приоритетным направлениям настоящего вре- мени. С полной уверенностью можно сказать, что будущее развитие того или иного общества или системы во многом будет зависеть от его информационного обеспечения, реали- зованного, в первую очередь, на основе новейших вычисли- тельных средств и технологий. И в этом отношении особая роль отводится вычислительной технике (ВТ) персонального назна- чения, позволяющей вовлечь в процесс компьютеризации об- щества самые широкие круги как профессиональных, так и непрофессиональных пользователей вычислительной техники. Одним из важнейших направлений компьютеризации явля- ется массовое освоение основ компьютерной грамотности, в первую очередь связанное с освоением и практическим ис- пользованием персональной ВТ. Данная проблема предполагает наличие различного уровня литературы, доступной самым ши- роким кругам потенциальных пользователей ВТ и, в первую очередь, ПЭВМ. Вступив на путь широкой компьютеризации позже развитых компьютерных стран (США, Япония, Англия, ФРГ, Франция и другие), наша страна испытывает в решении данной проблемы целый ряд существенных затруднений: недо- статок и низкое качество персональной ВТ, отсутствие в нуж- ном количестве специальной литературы, недостаточные уро- вень и методология подготовки массового пользователя и так далее. Предложенная читателю книга делает попытку восполнить имеющийся в настоящее время пробел в литературе для одной из наиболее массовых отечественных ПЭВМ - пер- сональной профессиональной ЭВМ ИСКРА 1030. В предложенной читателю книге рассмотрены вопросы ра- боты с ПЭВМ ИСКРА 1030, совместимой с хорошо известной системой IBM PC/XT. Появление IBM PC знаменовало собой фактическое введение нового и очень высокого стандарта ка- чества и производительности ПЭВМ. Те, кто уже знал, испопь- зовал и понимал возможности ПЭВМ, увидели в системе IBM PC новое мощное средство, превосходящее все то, что существо-
вало до него в этой области. Те же, кто рассматривал ПЭВМ в качестве своего рода интеллектуальных игрушек, начали постепенно понимать действительную ценность этих средств для широкой автоматизации интеллектуального труда в различ- ных сферах человеческой деятельности. Началась массовая компьютеризация общества. Однако на этом пути возник целый ряд проблем самого раз- личного характера. Так, существенным тормозом в деле компьютеризации страны на сегодня является неспособность промышленности сколь-нибудь существенно насытить оте- чественный рынок дешевыми и надежными ПЭВМ. На этом фоне значительное развитие получил „компьютерный бизнес” - пе- репродажа кооперативами отечественным организациям за- рубежной (в целом ряде случаев далеко не самой лучшей) ВТ. Кооперативы, приобретая за рубежом в обмен, как пра- вило, на сырье или полуфабрикаты дешевые модели ПЭВМ, реализуют их по баснословным ценам. Авторам изве- стен целый ряд примеров приобретения организациями моде- лей ПЭВМ по 110-120 тыс. рублей, стоимость которых на за- падном рынке не превышает 700-800 долларов. Естественно, что подобный ’’бизнес” не имеет ничего общего с решением проблемы компьютеризации страны и наносит непоправимый ущерб во многих отношениях. Предпринятые правительством шаги для прекращения подобного ’’бизнеса” особого резуль- тата не дали, так как кооперативы переориентировались и ста- ли продавать те же ПЭВМ под видом разработки ПО, которое они также сами не разрабатывают и приобретают за рубежом вместе с ПЭВМ. Существует целый ряд и других путей неуправ- ляемого поступления ВТ в страну. Все это вносит значитель- ный элемент хаоса в решение столь важной государственной задачи. И чем скорее данная государственная задача будет действительно решаться на государственном уровне, тем ско- рее наше общество ощутит ее результаты. Предложенная книга отличается от большинства книг, зна- комящих читателя с ПЭВМ. Она рассчитана на тех читателей, которые не желают останавливаться на сведениях для начи- нающего, а хотят получить хорошее представление о возмож- ностях ПЭВМ ИСКРА 1030, ее программном обеспечении, уг- лубленном использовании языка программирования БЕЙСИК и средств операционной системы MS DOS, дополнительных возможностях программных средств и особенностях их при- менения, а также наиболее популярных программных сред- ствах для ПЭВМ, совместимых с IBM РС/ХТ/АТ. И в этом плане книга представляет интерес как начинающим и опытным поль- зователям ПЭВМ, так и непрофессиональному пользователю. Детально рассмотренный в настоящей книге алгоритмиче- ский язык БЕЙСИК А (или БЕЙСИК-ИБМ) является наиболее распространенным диалектом языка на ПЭВМ различных типов. Так, он послужил прототипом диалекта Альфа-БЕЙСИК для ПЭВМ ЕС 1840/41, японского стандарта MSX-BASIC, а также
для отечественного госстандарта БЕЙСИКа. Это позволит ис- пользовать материалы книги весьма широкому кругу пользо- вателей, работающих как с отечественными, так и зарубежны- ми ПЭВМ. Книга позволяет лучше понять не только принцип функцио- нирования ПЭВМ, совместимых с IBM РС/ХТ/АТ, но и предлага- ет дополнительный и более глубокий материал по техническим и программным средствам ПЭВМ ИСКРА 1030. Наряду с этим, книга содержит множество полезных советом, примеров и практических рекомендаций, касающихся разработки прог- раммного обеспечения для ПЭВМ ИСКРА 1030. Опыт апробации материалов данной книги показал пригодность ее в качестве справочного и учебно-методического пособия для широкого круга специалистов, использующих в своей профессиональной деятельности возможности ПЭВМ. Еще в одном отношении может оказаться полезной настоя- щая книга. В последние годы в рамках создания новых поколе- ний ВТ привлекли внимание работы по использованию в этом направлении результатов биотехнологии. Из промышленных разработок следует отметить в этом плане сопроцессоры для ПЭВМ IBM АТ, созданные на основе искусственных нейронных сетей. Предполагается, что именно биопроцессоры (биочипы) или молекулярные ЭВМ к 2000 году будут определять развитие и применение перспективной ВТ. И в этом плане именно однородные структуры привлекают все большее внимание как со стороны разработчиков перспек- тивных средств ВТ, так и специалистов по математической био- логии, биотехнологии, синергетике и кибернетике. Так, в част- ности, при подведении итогов 7-й Международной конференции по математическому и компьютерному моделированию (США, август 1989) было отмечено, что именно наши работы и работы коллег из США и Японии по разработке теории однородных структур и ее приложений в математической биологии и вычи- слительной технике параллельного действия позволяют на- деяться на создание своего рода мостов между этими до сих пор различными областями современной науки и техники. В этом плане читателю могут представить интерес материалы приложения 10 настоящей книги. Более того, в настоящее время готовится к изданию монография „Математическая теория од- нородных структур и ее приложения”, подводящая итог наших 20-летних исследований в этой перспективной области.
ПРИЛОЖЕНИЯ Приложение 1. Кодовая таблица ПЭВМ ИСКРА 1030 Приложение 2. Структура информации на магнитных дискетах и форматы дискет Приложение 3. Различия в описаниях системы АДОС, Редакто- ра текстов и интерпретатора языка БЕЙСИК с их реализациями Приложение 4. Перечень команд операционной системы АДОС Приложение 5. Служебные слова языка БЕЙСИК ПЭВМ ИС- КРА 1030 Приложение 6. Перечень функциональных конструкций, бази- рующихся на встроенных функциях языка БЕЙ- СИК Приложение 7. Основные коды функций управления печатью Приложение 8. Таблица представления в ПЭВМ ИСКРА 1030 букв русского алфавита при работе с редакто- ром ФОРТ-системы программирования Приложение 9. Листинги пакета программ <PARCELLA> Приложение 10. Справочная информация по однородным струк- турам, параллельной обработке информации и программному обеспечению Приложение 1 Кодовая таблица ПЭВМ ИСКРА 1030 В настоящем приложении приводятся таблица кодов всех используемых ПЭВМ символов и правила ее применения. Каж- дому допустимому символу ПЭВМ соответствует определен- ный 16-ричный код, приведенный в таблице кодов (табл. 56). В левой части таблицы указано значение второго полубайта (О^-F), а в верхней части - значение первого полубайта (O^F) символа. Например, символу '[' соответствует 16-ричный код 5В, а букве G' - код 47. Самая верхняя строка таблицы ко- дов определяет порядковый номер первого символа каждого столбца, считая от начала таблицы., Например, порядковый номер символа равен 250, а буквы S' - 83. Знание порядко- вых номеров символов позволяет использовать их для ввода с клавиатуры всех символов, допустимых, ПЭВМ ИСКРА 1030. Для этого следует при нажатой клавише 'ALT' ввести с АЦК порядковый номер искомого символа. Этот способ позволяет
легко вводить символы ПЭВМ, которые нельзя ввести непосред- ственно с клавиатуры, в частности, символы псевдографики. Символы с порядковыми номерами (кодами) 128^-175, 242*254 можно использовать для построения типичных графических объектов: различного рода графики, схемы, рисунки, таблицы, чертежи, диаграммы и т. д. Таблица 56 Приложение 2 Структура информации на магнитных дискетах и форматы дискет Магнитные гибкие мини-диски (дискеты) являются наиболее популярными и массовыми внешними носителями информации различного типа ПЭВМ. Физическая конструкция дискет пред- ставляет собой гибкий диск на майларовой основе с нанесен- ным на нее магнитным покрытием. В центре диска находится отверстие для шпинделя (рис. 13), а на некотором удалении от центра индексное отверстие, которое служит в качестве точки отсчета при записи/чтении информации. Гибкий диск
помещен в квадратный конверт, также имеющий шпиндельное и индексное отверстия. Дополнительно к ним на конверте име- ются продолговатая прорезь для головки считывания/записи и квадратный вырез для обеспечения, защиты дискеты от запи- си. Когда дискета устанавливается в'НГМД, шпиндель проходит через центральное отверстие, диск сцепляется со шпинделем и вращается в своем конверте со скоростью 360 об/мин. Голов- ка считывания/записи через прорезь на конверте позиционирует на требуемый трек диска, после чего вращение диска застав- ляет все секторы выбранного трека проходить под сканирую- щей головкой устройства, обеспечивая тем самым доступ к отдельным секторам трека. Рис. 13. Конструкция односторонней дискеты типа ЕС - 5288 Логически весь диск разбит на концентрические треки, на которых располагаются сектора. В некоторых НГМД имеется одна сканирующая головка, в других - две головки. В первом случае информация хранится на одной стороне дискеты, во вто- ром - на обоих ее сторонах. Во втором случае пары треков с одинаковыми расстояниями от центра диска называются цилиндрами. Треки (цилиндры) нумеруются, начиная с внеш- ней стороны дискеты. Первый трек имеет нулевой номер. В рамках каждого трека сектора нумеруются, начиная с номе- ра 1, и первым является сектор, стоящий за индексным отвер- стием. Т^к, дискета типа ЕС-5288 имеет две рабочие поверх- ности диаметром 133 мм, на которых располагается 80 (0+79)
треков по 9 секторов емкостью по 512 байт в каждом. Такая дискета допускает два типа разметки по 80 и 40 треков на од- ной стороне, соответственно емкостью 360 и 180 Кбайтов. Дискеты типа ЕС-5288 можно использовать в НГМД с одной и двумя сканирующими головками. Структура информации на каждом треке дискеты представ- лена на рис. 14. Рис. 14. Структура информации на треке дискеты Между смежными секторами на треке находятся промежут- ки (П), и сигнал от индексного отверстия появляется в проме- жутке между последним и первым сектором на каждом треке. Каждый сектор содержит поле идентификации и поле данных, каждое из которых начинается полем синхронизации (ПС). Между двумя полями имеется промежуток (П), необходимый для коммутации сканирующей головки на выполнение задан- ной операции. Поле идентификации начинается с маркера ад- реса (МАИ), после которого следуют байты, содержащие номер сканирующей головки (НГ), номер сектора (НС), число байтов данных в секторе (МВД), байты контроля (2 байта). Поле данных содержит маркер адреса данных или удаленных данных (МАД), байты с непосредственно данными и 2 байта контроля. Маркер адреса в поле идентификации первого сектора обычно отлича- ется от маркера в других секторах трека, а маркеры адреса в полях идентификации отличаются от маркеров в полях данных. Маркеры адреса в полях данных различаются в зависимости от того, содержит поле полезную информацию или занято бай- тами-заполнителями.
В ПЭВМ ИСКРА 1030 допускается использование дискет двух форматов: 40 и 80 треков на одной стороне дискеты. При под- готовке дискет по первому формату используется команда FORMAT [ИУ:]/1, по второму - команда FORMAT [ИУ:] без остальных параметров. Система АДОС допускает совместное использование обоих форматов дискет. Однако ядро самой системы АДОС можно загружать только с дискеты второго формата. В целях унификации с MS DOS и PC DOS система АДОС 2.0 рассматривает 80-трековые дискеты как двухсторон- ние по 40 треков на стороне. При этом треки с четными номе- рами логически рассматриваются системой как сторона 0, а с нечетными номерами - как сторона 1. Все эти моменты следует учитывать при работе с дискетами в системе АДОС 2.0. Приложение 3 Различия в описаниях системы АДОС, Редактора текстов и интерпретатора языка БЕЙСИК с их реализациями В настоящем приложении приводятся основные отличия описаний операционной системы АДОС 2.0, Редактора текстов и интерпретатора языка БЕЙСИК, представленные в техниче- ской документации, поставляемой вместе с ПЭВМ ИСКРА 1030 от их конкретных реализаций, обнаруженные в период практи- ческой эксплуатации программного обеспечения ПЭВМ ИСКРА 1030. Наряду с этим приводится ряд особенностей программного обеспечения, не нашедших отражения ни в оте- чественной, ни в зарубежной специальной и массовой лите- ратуре. Приводится ряд практических рекомендаций по ис- пользованию этих средств. Естественно, имея дело с такой сложной программной системой как MS DOS, при стремлении выявить особенности или тонкости функционирования ее или работающих под ее управлением программных компонент, пользователь при определенных квалификации, навыках и временных затратах, по всей вероятности, обнаружит до- статочно интересных особенностей, не нашедших отражения ни в соответствующей технической документации, ни в настоя- щем приложении. Нами такая цель, переходящая порой в свое- го рода болезнь программистов, не ставилась. Поэтому опыт эксплуатации широкого круга пользователей позволит продол- жить приведенный здесь перечень особенностей программно- го обеспечения, что позволит повысить эффективность ис- пользования ПЭВМ ИСКРА 1030. 1. В командах системы в качестве разделителей парамет- ров не всегда можно использовать знаки запятой (,), точки с запятой (;) и равенства (=). Поэтому в качестве разделителей параметров системных команд рекомендуется использовать символ пробела или знак табуляции.
2. В команде FORMAT можно использовать комбинации па- раметров 7S/B' и 78/S/B', но недопустимо использовать сов местно параметры '/В' и 7V'. В качестве разделителей пара метров команды нельзя использовать запятую, точку с запятой и знак равенства. 3. В команде СОМР при несовпадении длин файлов сравне- ние прекращается и выдается соответствующее сообщение. 4. В командах REM и PAUSE в параметре 'сообщение' не допускается использование символов '<' и '>'. 5. В команде ASSIGN дисковые УВВ, на которые переопреде- ляются операции ввода-вывода, должны физически существо- вать и быть работоспособными, в противном случае действия системы непредсказуемы. В общем случае допускается сов- местное использование команд ASSIGN и PRINT. 6. Перезагрузку системы АДОС можно выполнить, перезагру- зив системный пакетный файл AUTOEXEC.BAT. 7. Большинство системных команд допускает использование необязательного ключевого параметра 'комментарий', не со- держащего вхождений символов '<' и '>'. При описании команд системы (гл. 4), там, где это допустимо, в форматах команд указывался параметр 'комментарий'. 8. Для создания с помощью команды СОРУ пустых файлов на дисках нельзя использовать псевдоустройство с логическим именем NUL. 9. Описание процедуры изменения даты и времени создания файлов посредством команды СОРУ представлено неверно. Делать это следует на основе пустых файлов и команды СОРУ (операция сложения файлов). 10. Не работает средство прямой связи стандартных ввода и вывода. В ряде фирменных руководств по MS DOS дан- ное средство идентифицируется символом ”1”. 11. В описании Редактора текстов отсутствует перечень диагностических сообщений. 12. Параметр '/С' в команде FIND не подавляет действия па- раметра /V'. 13. В Редакторе текстов не реализована команда 'С'. При ее вводе осуществляется обращение к указанному дисковому УВВ, определенному в спецификаторе создаваемого файла, но сам файл при этом не создается. При использовании данной команды текстовая информация, находящаяся в памяти, сти- рается, что позволяет использовать команду для очистки па- мяти перед формированием нового текста. 14. Команда 'Н , позволяющая вывести на экран дисплея информацию о возможностях Редактора текстов, в поставляе- мой версии 1.0 Редактора не задействована. 15. С текстовым файлом, обрабатываемым Редактором, мож- но ассоциировать формат печати, записанный в файл на том же диске, что и сам файл. При этом форматный файл должен иметь имя текстового файла и расширение .FMT, либо имя VWFORMAT с расширением имени текстового файла.
16. В Редакторе не реализованы такие важные команды уп- равления печатью, как: ..PGNO, ..PAUSE, ..PRINT, ..FORMAT, ..VERB и ..NORM. 17. Дополнительно к команде ..PAGE управления печатью можно использовать символ параграфа (клавиши 'CTR'+'U'), при выводе на печать который служит указанием Редактору пропустить одну чистую страницу бумаги на принтере. 18. В состоянии БЕЙСИК нажатие клавиши 'NLK' присваива- ет клавишам ЦК цифровые значения, а не функции редактиро- вания. 19. В параметрах '<IN' и ">OUT" команды BAS можно исполь- зовать только логические имена устройств: CON (ввод и вы- вод), PRN, LPT1:, LPT2:, LPT3: (вывод), СОМ1:, COM2: (ввод и вывод). 20. При указании в команде AUTO в качестве первого пара- метра точки (.) осуществляется генерация номеров програм- мных строк, начиная с нуля. 21. В командах редактирования БЕЙСИК-программы LIST, RUN формата 2 и SAVE параметр "спецификатор файла" должен кодироваться в кавычках (”)• Это же имеет место и для других случаев использования "спецификатора файла" в среде языка БЕЙСИК. ’ 22. В именах файлов, с которыми работает интерпретатор БЕЙСИКа, недопустимо использование символов <" и ">. 23. Диапазон изменения индексов массива любого типа и размерности можно указывать, начиная с единицы (нуля) и до максимального значения М (М-1) при условии использова- ния в программе оператора OPTION BASE 0 или при его отсут- ствии. В этом случае по умолчанию создается только одномер- ный массив-вектор длиной в 11 или 10 элементов соответствен- но с нумерацией индексов элементов в диапазонах 0*10 или 1*11. В случае использования оператора OPTION BASE 1 карти- на существенно меняется и нумерация элементов массивов может начинаться только с единицы. 24. Числовые функции символьных аргументов CVI (Х$), CVS(X$) и CVD(X$) преобразуют в числовой вид соответственно первые 2, 4 и 8 символов аргумента Х$, длина которого не должна быть меньше этих значений, в противном случае идентифицируется ситуация Неверный вызов, функции". 25. В случае возникновения особой ситуации "Деление на нуль при вычислении арифметического выражения выдается указанное сообщение, такое выражение получает максималь- но допустимое в данной системе значение 1.701412Е+38 и вы- полнение программы продолжается. В случае возникновения особой ситуации "Переполнение в <номер строки>" выдается данное сообщение и выполнение программы прекращается. 26. Если в команде MERGE языка БЕЙСИК указанный в ее параметре файл не содержит исходного модуля программы, то выдается сообщение Неверный режим и программа в па- мяти, если такая имеется, не изменяется.
27. Недопустимо использование команды CONT языка БЕЙ- СИК в программном режиме. 28. Наряду с закрытием файлов команда RESET языка БЕЙ- СИК обеспечивает работу с файлами данных после смены дискет на УВВ, вследствие че/-о данную команду следует ис- пользовать после каждой смены дискет, а оператор CLOSE пе- ред их сменой с целью актуализации таблицы адресов дискет, с которыми работает программа. 29. В команде NAME - AS языка БЕЙСИК в качестве обоих параметров следует использовать спецификаторы файлов, если УВВ с, файлами отлично от активного, иначе выдается сообщение Ошибка переименования*. 30. Если в программном режиме используется команда TRON языка БЕЙСИК без команды TROFF, то трассировка (от- слеживание) программы производится со следующего за ней оператора и до логического конца программы. В случае же использования только команды TROFF трассировки программы не производится. 31. При необязательности параметров операторов COLOR, LOCATE, SCREEN и WIDTH использование их без параметров вызывает ошибку с диагностикой Пропущен операнд . 32. Представленное в документации [17] описание исполь- зования параметров оператора LOCATE, управляющих формой курсора, не соответствует действительности и для правильного понимания вопроса следует обратиться к разделу 5.7.1 настоя- щей книги. Там же можно найти и другие уточнения описания оператора LOCATE. 33. По оператору CLS в графическом режиме дисплея сти- рается экран и его буфер, а курсор устанавливается в начало второй строки экрана. 34. Использование оператора CLS в командной строке после оператора NEW или LIST не приводит к очистке экрана. 35. Описание оператора IF, соответствующее его реализа- ции, приводится в разделе 5.7.2. 36. Использование оператора LINE INPUT в командном и прог- раммном режимах имеет отличие, описанное в разделе 5.7.2 настоящей книги. 37. В операторе вывода на печать LPRINT допускается в ка- честве необязательного параметра использовать функцию прог- раммно-управляемого вывода. 38. В операторах форматированного вывода на печать PRINT USING и LPRINT USING допускается использовать в качестве параметра формат вывода символьную функцию. 39. При использовании оператора CHAIN управление полу- чает указанная программная строка в памяти после загрузки программы; по умолчанию управление получает после загруз- ки программы программная строка в памяти с наименьшим номером. Действие параметра DELETE* оператора CHAIN от- личается от действия команды DELETE языка и описано в раз- деле 5.7.3. Если в операторе CHAIN отсутствует параметр
'MERGE', то оператором мож<но загружать в память и БЕЙСИК- программы в загрузочном виде. 40. Допускается дублирование имен переменных и масси- вов как в одном, так и в нескольких операторах COMMON. 41. В операторе ERROR К языка БЕЙСИК значение параметра 'К' не допускает нулевого значения, иначе возникает ошибка с диагностикой 'Неверный вызов функции*. 42. При работе с файлами данных в среде языка БЕЙСИК (в отличие от программных файлов) по умолчанию для расши- рения имени файла не используется значение '.BAS'. 43. При описании работы с файлами данных произвольного доступа изложение принципов использования группы операто- ров FIELD для организации буферов ввода/вывода файла в до- кументации [17] некорректно. Подробное описание операторов FIELD приводится в разд. 5.7.5. 44. В отличие от последовательных файлов файлы данных произвольного доступа сразу же после их создания допускают без повторного переоткрытия корректный доступ к записям. 45. Имеется возможность использования последовательных файлов данных в качестве файлов данных произвольного досту- па, и наоборот. 46. Описание системной функции SCREEN в технической литературе [17] некорректно и уточнение его приводится в разд. 5.7.2 настоящей книги. 47. При нахождении экрана дисплея в режиме 'графика-Г (SCREEN 1) невозможен непосредственный перевод экрана в текстовой режим (SCREEN 0). Это можно сделать через режим 'графика-2' (SCREEN 2). 48. В командах и операторах BSAVE, BLOAD, MERGE, RUN, MKDIR, RMDIR, CHDIR, KILL, LOAD, SAVE, NAME - AS, CHAIN и OPEN языка БЕЙСИК в качестве параметров 'путь' и 'специфи- катор файла' (СФ) можно использовать предварительно опре- деленные символьные переменные, а в ряде случаев и сим- вольные выражения. 49. В качестве параметра 'номер строки' оператора CHAIN языка БЕЙСИК можно использовать числовую переменную, принимающую неотрицательные целочисленные значения. 50. При определении массивов оператором DIM допускает- ся использование в качестве их элементов числовые пере- менные, функции и элементы массивов, что позволяет орга- низовать динамическую реконфигурацию размерностей массивов. Приложение 4 Перечень команд операционной системы АДОС В приводимой таблице дается полная сводка команд опера- ционной системы АДОС с краткой их характеристикой и клас- сификацией по группам. Символом (*) в таблице 57 отмечены
внутренние команды системы, символом (#) - команды, вклю- ченные в систему MINIDOS и символом (7), отсутствующие в системе MINIDOS Для удобства пометки (7) относящиеся к системе MINIDOS, помещены в графе имени команды. Таблица 57 № п/п Группа Команда Краткая характеристика 1 Сервисные FORMAT Инициализация дисковых томов 2 FDISK Обслуживание жесткого диска 3 BACKUP Сохранение файлов жесткого диска на дискетах 4 RESTORE Восстановление файлов с диске- ты на жесткий диск 5 DISK Обеспечение работы с 40- и 80- трековыми дискетами 6 DISKCOMP Сравнение двух дискет 7 ' DISKCOPY Полное копирование дискет 8 COMP Сравнение двух файлов 9 • DEL Удаление файлов тома 10 • ERASE Синоним команды del 11 RECOVER Восстановление данных тома 12 SYS Копирование файлов системы 13 DEBUG ? Работа с монитором отладки ас- семблерных программ 14 EDLIN ? Работа с редактором edlin 15 Информаци- TREE Вывод списка всех каталогов онные и файлов на диске 16 • DIR Вывод файлов заданного тома 17 • VER Вывод версии системы 18 • VOL Вывод метки заданного тома 19 • REM Вывод сообщений на экран 20 PAUSE Состояние ожидания системы 21 Управления ASSIGN Переопределение запросов на системой дисковые устройства системы 22 • BREAK Установка ситуации break 23 * BUFFERS Задание числа системных буфе- ров ввода-вывода 24 * COMMAND Вызов вторичного процессора команд 25 * CHOIR Замена активного каталога 26 • PROMPT Установка новой метки системы 27 * CLS Стирание экрана дисплея 28 * SET Расширение процессора команд 29 • DATE Установка системной даты 30 • TIME Установка системного времени 31 * SHELL Задание вторичного процессора команд 32 • DEVICE Включение в систему драйверов новых устройств ввода-вывода 33 • EXIT Выход из вторичного процессо- ра команд 34 • FILES Задание максимального числа файлов с системными номерами 35 * PATH Задание каталогов для поиска команд и пакетов команд
№ п/п Группа Команда Краткая характеристика 36 37 Управления вводом-вы- водом GRAFTABL GRAPHICS Загрузка дополнительной таб- лицы для графического режима дисплея Обеспечение вывода на принтер содержимого экрана дисплея в режиме графики 38 • VERIFY Установка режима записи на дисковый том 39 40 * CTTY MODE Замена главной консоли систе- мы на вспомогательную Установка режимов работы пе- чати, адаптера графического монитора и асинхронного адап- тера связи 41 PRINT Вывод файлов с одновременным выполнением программ 42 43 44 SORT FIND MORE • Сортировка данных стандартно- го устройства ввода системы Выборка из файлов строк с за- данным контекстом Постраничный вывод информа- ции на стандартное устройство системного вывода 45 Пакетные * BATCH Запуск пакета команд 46 • ECHO Управление выводом на экран выполняемых команд пакета 47 * FOR Циклическое выполнение команд пакета 48 • GOTO Организация передачи управле- ния в пакете команд 49 • IF Условное выполнение команд пакета 50 * SHIFT Расширение числа формальных параметров в пакете команд 51 52 Работы с файлами CHKDSK EXE2BIN ? Анализ файлов, каталогов и таб- лицы fat на дисках Преобразование .ЕХЕ-файлов в .сом- и .BIN-файлы 53 « MKDIR Создание подкаталогов на томе 54 * RMDIR Удаление каталогов на томе 55 * RENAME Переименование файлов тома 56 * TYPE Вывод файлов на стандартное устройство вывода системы 57 • COPY Широкие функции по копирова- нию и объединению файлов 58 MINIDOS # COLOR Управление цветом экрана 59 DIRSORT Упорядоченный вывод каталога тома на экран дисплея 60 PRNTFILE Форматный вывод текстовых файлов на экран или принтер 61 HARDWARE Вывод информации о процессо- ре и сопроцессоре ПЭВМ ИСКРА
Служебные слова языка БЕЙСИК ПЭВМ ИСКРА 1030 Служебные слова языка БЕЙСИК предназначены для обозна- чения команд, операторов и функций языка и не могут исполь- зоваться в качестве имен переменных. В БЕЙСИК-программах служебные слова должны отделяться от других конструкций языка пробелами или другими разделителями, допустимыми синтаксисом языка БЕЙСИК. Ниже приводится полный перечень служебных слов языка БЕЙСИК ПЭВМ ИСКРА 1030: ABS DATA GET LPOS POKE SQR AND DATA$ GOSUB LPRINT POS STEP ASC DEF GOTO LSET PRESET STICK ATN DEFDBL HEXS MERGE PRINT STOP AUTO DEFINT IF MIDS PRINT# STRS BEEP DEFSNG IMP MKDS PSET STRING BLOAD DEFSTR INKEYS MKDIR PUT STRINGS BSAVE DELETE INP MKIS RANDOMIZE SWAP CALL DIM INPUT MKSS READ SYSTEM CDBL DRAW INPUT# MOD REM TAB CHAIN EDIT INPUTS MOTOR RENUM TAN CHDIR ELSE INSTR NAME RESET THEN CHR$ END INT NEW RESTORE TIMES CINT EOF KEY NEXT RESUME TIMER CIRCLE EQV KILL NOT RETURN TO CLEAR ERASE LEFTS OCTS RIGHTS TROFF CLOSE ERL LEN OFF RND TRON CLS ERR LET ON RSET USING COLOR ERROR LINE OPEN RUN USR COM EXP LIST OPTION SAVE VAL COMMON FIELD LLIST OR SCREEN VARPTR CONT FILES LOAD OUT SGN VARPTRS COS FIX LOC PAINT SIN VIEW CSGN FNxxxxxxx LOCATE PEEK SOUND WAIT CSRLIN FOR LOF PEN SPACES WEND CVD FRE LOG PLAY SPC WHILE CVI CVS POINT PMAP WINDOW WIDTH WRITE WRITE# XOR Приложение 6 Перечень функциональных конструкций, базирующихся на встроенных функциях языка БЕЙСИК В настоящем приложении приводятся функциональные кон- струкции, которые построены с использованием только встро- енных функций языка БЕЙСИК и арифметических операций. Дан-
Функциональная конструкция на основе встроенных функций Назначение или эквивалент- ная ей функция ABS (FIX (Х*10 “К)—FIX (FIX (X* FIX (FIX (Х*10“КУ10)*10 1/COS (X); 1/SIN (X); 1/TAN (X) ATN (X/SOR (1 -X “2)) — ATN (X/SOR (1-X “2))+1.5702 ATN (X/SOR (X‘2-1)) + SGN (SGN (X)—1 )• 1.5708 ATN (X/SOR (X‘2-1)) + (SGN (X)—1 )* 1.5708 ATN (X)+1.5708 EXP (X)/2-EXP (—X)/2 EXP (X) /2 + ЕХР (-X) /2 (EXP (X)-EXP (-X))/ (EXP (X) + EXP ( —X)) 2/ (EXP (X)+EXP (-X)) 2/ (EXP (X)-EXP (-X)) (EXP (X)+EXP (-X))/ (EXP (X) - EXP (-X)) LOG (X + SOR (1+X‘2)) LOG (X + SOR (X‘2-1)) LOG ((1+X) / (1 —X))/2 LOG ((SOR (1-X *2)+1)/X) LOG ((SGN (X)*SOR (1 4-X “2)+1 )/X) LOG ((X+ 1) / (X-1)) / 2 0.43429*LOG (X) CINT (SOR (6.2831 85*N)* (N/2.71 8282) “ N) HEXS (ASC (MIDS (XS, K, 1))) Вычисление значения К-й десятичной цифры числа X секанс; косеканс; котангенс арксинус арккосинус арксеканс арккосеканс арккотангенс гиперболический (Н) синус Н-косинус Н-тангенс Н-секанс Н-косеканс Н-котангенс ареа-синус ареа-косинус ареа-тангенс ареа-секанс ареа-косеканс ареа-котангенс десятичный логарифм X > 0 приближенное значение для факториала N! НЕХ-представление К-го сим- вола переменной х$ LEFTS (XS, INSTR (XS, Y$)-1)+MID $ (XS, LEN (Y$) + INSTR (X$, Y$) INT (X) + SGN (ABS (INT (X)-X)) ][A]/[B][ A-][a]/[b][*B or А-(А\В)*В удаление из строки х$ от- резка y$ с уплотнением х$ целое число, большее X значение величины а\в значение a (mod в) ные конструкции реализуют наиболее часто используемые про- цедуры вычислений и обработки символьной информации, и мо- гут быть использованы в программах, например, в качестве функций пользователя (табл. 58). Приложение 7 Основные коды функций управления печатью В настоящем приложении приведены основные коды функций управления выводом информации на печать с их краткой ха- рактеристикой. Данные коды можно использовать для орга-
Код функции вывода CHRS (27),'CHRS (14) CHRS (20) CHRS (27),-CHRS (15) CHRS (18) CHRS (27);”E” CHRS (27);”F” CHRS (27),-"G" CHRS (27);”H,‘ CHRS (27);"M” CHRS (27);”P” CHRS (27),”S”;K CHRS (27);”T” CHRS (27);”WM;CHR$ (K) CHRS (27),•••!••,-CHRS (K) CHRS (27);”—CHRS (K) CHRS (27),-CHRS (M) ;CHR$ (K1);CHR$ (K2) CHRS (10) CHRS (1 1) CHRS (12) CHRS (27);”J*’;CHR$ (K) CHRS (27);"j”;CHR$ (K) CHRS (27);”N"; CHRS (K) CHRS (27); ”0” CHRS (0) CHRS (8) CHRS (9) CHRS (13) CHRS (27); ”B”; CHRS (K) ;CHR$ (0) CHRS (27); "C”; CHRS (K) CHRS (27),*CHR$ (K); CHRS (0) CHRS (27),”0",CHRS (K) CHRS (24) CHRS (127) CHRS (7) CHRS (27);’’9" CHRS (27);"8” CHRS (27);'’R’’,CHR$ (K) CHRS (27),"U";CHRS (K) Краткая характеристика функции Включение шрифта вразрядку Выключение шрифта вразрядку Включение сжатого шрифта Выключение сжатого шрифта Включение жирного шрифта Выключение жирного шрифта Включение двойной печати Выключение двойной печати Включение шрифта <Элита> Включение шрифта <Пика> Включение печати в верхней (К=0) или нижней (К=1) части строки Выключение печати в верхней (К=0) или нижней (К=1) части строки Включение (К=0), выключение (К=1) шрифта вразрядку Выбор вида шрифта (К=(Н32) Включение (К=1), выключение (К=0) ре- жима подчеркивания символов Выбор точечного режима печати; М=0ч’6 - режим; К1, К2=0-г-255 Построчная подача бумаги Вертикальная табуляция Подача формуляра на устройстве Построчная подача бумаги на К/216 дюйма (К= 1-255) Построчная подача бумаги назад Установка конечной строки формуля- ра (К=1-5-127) Выключение конца формуляра Конец установки табуляции Вывод содержимого буфера печати Горизонтальная табуляция Установка на начало строки Установка до 8 меток вертикальной та- буляции (К=1 - 254) Установка длины формуляра в К строк (К=1-М27) Установка до 12 меток горизонтальной табуляции (К= 1-5-132) Установка режима К=1-132 символов на строку Гашение буфера печати Гашение последнего знака буфера Подача звукового сигнала Включение контроля конца бумаги Выключение контроля конца бумаги Выбор основного (К=0) или второго (К=1) набора символов lpti Установка печати в одном (К=1) или двух (К=0) направлениях
низации программно-управляемого вывода на печать в среде языка БЕЙСИК посредством операторов LPRINT и LPRINT USING (табл. 59). Подробное описание функций управления печатью с многочи- сленными примерами можно найти в [70]. Однако даже приве- денный перечень функций управления позволяет говорить о ши- роких возможностях программно-управляемого вывода в среде языка БЕЙСИК ИСКРА 1030. Приложение 8 Таблица представления в ПЭВМ ИСКРА 1030 букв русского алфавита при работе с редактором ФОРТ-системы программирования В настоящей таблице приводятся представления прописных и строчных букв русского алфавита, используемые в ПЭВМ ИСКРА 1030 при работе с ФОРТ-редактором. Табл. 60 может оказаться весьма полезной при работе с объектными модулями программ и содержимым оперативной или внешней памяти ПЭВМ в среде ФОРТ-системы программирования. Таблица 60 Буква Представление Буква Представление А а АО ЕР Р р F6 СЗ Б б А1 ЕО С с F7 C4 В в А2 ER Т т F8 С5 Г г F) ES У У F9 С6 Д д F* U1 ф ф - > С7 Е е F + U2 X X ЕЕ С8 Ж ж F, из Ц ц EF С9 3 3 F — U4 ч ч EG С t и и F. U5 ш ш ЕН А1 й й F/ U6 щ Щ EI А2 к к FO U7 ъ ъ EJ АЗ л л F1 U8 ы ы ЕК А4 м м F2 U9 ь ь EL А5 н н F3 и г э э ЕР Аб 0 О F4 С2 ю ю EN А7 п п F5 С2 я я ЕО А8
Листинги пакета программ <PARCELLA> В настоящем приложении программ <PARCELLA>. приводится полный набор листингов всех функциональных модулей пакета модуль PARCELLA.BAS 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 KEY OFF:SCREEN 2:CLS:LINE (0,0) - (619,199) „B:LINE (10,10) - (609,189) В 5>20:PR,nJ ’’Пакет <PARCELLA> для расширения возможностей” LOCATE 7,28:PRINT языка БЕЙСИК ПЭВМ ИСКРА 1030”:ЮСАТЕ 8,28 ------------------------------------------------------- 10,19:PRINT ’’Разработан LOCATE 10,37:PRINT "Госстроя ЭССР в ноябре 1988”:LOCATE 12,20 PRINT "Таллинн 200006, Мустамяэ теэ 55, тел: 527-664”:LOCATE 15,20 INPUT "Для продолжения работы нажать клавишу <ПУСК> ”,X:LOCATE 17,20 ImhHZ ”3адать yBB(A-F) с томом, содержащим <PARCELLA> ”,AG42$:LOCATE 18 20 INPUT Для вывода описания нажать <1> иначе <ПУСК> ”,X:IF Х<>1 THEN 180 ELSE F1$=AG42$+”:PARCELLA.HLP”:CLS:GOSUB 170:OPEN F1$ FOR INPUT AS 1-P4=1 LOCATE 2,68:PRINT ”стр.”;Р4 LOCATE T+3,5:INPUT #1,A$:PRINT A$:IF EOF (1) THEN 140 ELSE:T=T+1 IF T=20 THEN T=O:PAINT (100,100) ,O:GOTO 160 ELSE GOTO 120 LOCATE 25,5:INPUT ’’Конец вывода. Повторить (1-Д/2-Н)”,Х:1Р Х>1 THEN 180 ELSE CLOSE 1-.PAINT (100,100),O:T=O:P4=0:GOTO 100 LOCATE 25,5:INPUT "Для продолжения <ПУСК> ”,X:T=0:P4=P4+1-CLS-GOSUB 170-GOTO 11П LINE (0.0)-(619,199) ,,B:LINE (10,10) - (609,189),, B:PAINT(5,5) ,1:RETURN ^O.GOTO 110 LOCATE 25,5:INPUT ”C какой версией <PARCELLA> работать (1/2)” GV$ CLOSEJF GV$=”1” OR GV$=”2” THEN 200 ELSE CLS:GOTO 180 7 447 200 OPEN AG42$+”:X42.BAS” FOR OUTPUT AS 1:W$=”230 CHAIN ”+CHRS(34)+AG42S 210 W$=WS+”:PARCELA”+GV$+CHR$(34)+”,10,ALL”:PRINT #1,W$:CLOSE #1 220 CHAIN MERGE AG42$+”:X42”,230, ALL модуль PARCELA1.BAS 10 KEY OFF-.SCREEN 2:CLS:LINE (0,0) - (619,199)„B:LINE (10,10) - (609,189)„B 20 PAINT (5,5),T.LOCATE 5,20:PRINT ’’Пакет <PARCELA1> для расширения возможностей” 30 LOCATE 7,28:PRINT ’’языка БЕЙСИК ПЭВМ ИСКРА 1030”10САТЕ 8,28 40 PRINT ”._______________________________________________________’’ LOCATE 10,19:Т42=0 90 INPUT "Для вывода описания нажать <1> иначе <ПУСК> ”,X:IF Х<>1 THEN 180 ELSE 100 F1$=AG42$+”:PARCELLA.HLP":CLS:GOSUB 170:OPEN F1$ FOR INPUT AS 1:P4=1 110 LOCATE 2,68:PRINT ”стр.”;Р4 120 LOCATE T+3,5:INPUT #1,A$:PRINT A$:IF EOF (1) THEN 140 ELSE:T=T+1 130 IF T=20 THEN T=0:PAINT (100,100),0:GOTO 160 ELSE GOTO 120 140 LOCATE 25,5:INPUT ’’Конец вывода. Повторить (1-Д/2-Н)”,Х:1Е Х>1 THEN 180 ELSE 150 CLOSE 1.PAINT (100,100) ,0:T=0 P4=0:GOTO 100 160 LOCATE 25,5:INPUT ’’Для продолжения <ПУСК> ”,X T=0:P4=P4+1:CLS:GOSUB 170 GOTO 110 170 LINE (0,0)-(619,199)„B:LINE (10,10) - (609,189)„B:PAINT (5,5),1:RETURN 180 LOCATE 25,5:INPUT ’’Обработка БЕЙСИК-программы впервые (Y/N)”,GV$ 190 IF GV$=”Y” OR GV$=”v” THEN 200 ELSE CLOSE:GOTO 430 200 CLOSE:CLS:GOSUB 170:LOCATE 10,20:INPUT ’’Задать путь к БЕЙСИК-программе ”,AL42$ 210 LOCATE 10,20:В$=”Идет интерпретация программы ”:PRINT B$+AL42$+SPACE$(10) 220 LOCATE 13,20:PRINT ”Begin=”;TIME$;:PRINT ” END=”’B$=”260 open ”+CHR$(34) 230 B$=B$+AL42$+CHR$(34)+” for input as 1”:L$=AG42$+”:A42.BAS”:OPEN "0",1,L$ 240 PRINT #1,B$:CLOSE 1:P$=AG42$+’’:A42”:CHAIN MERGE P$,250,ALL 250 P$=AG42$+”:PROG1942.BAS”:Z$=AG42$+”:A1942” 260 OPEN ”c:parcella.tsk" FOR INPUT AS 1 270 OPEN P$ FOR OUTPUT AS 2:OPEN Z$ AS 3 LEN=80:W$=”1 CHAIN MERGE”
448 280 W$=W$+CHR$(34)+AG42$+”:BERLINOO.1”+CHR$(34)+”.10,ALL”:PRINT #2 W$ 290 LINE INPUT #1,A$:L=INSTR (A$,”APROC”):GOSUB 470 300 IF L<>0 THEN 320 ELSE PRINT #2,AS 310 IF EOF (1) THEN 480 ELSE GOTO 290 320 BUFFER$=A$:D$=LEFT$(A$,L-1)+”CHAIN MERGE ”+CHR$(34)+AG42$+”:BERLIN” 330 D$=D$+MID$(A$,L+5,2)+CHR$(34)+”,65001,ALL”:PRINT #2,0$ 340 FIELD 3,80 AS V42$:LSET V42$=MID$(A$,L+8):PUT 3:LSET V42$=LEFT$(A$ L-1) 350 PUT #3:GOTO 290 ’ 360 370 380 390 400 410 420 422 424 426 430 440 450 460 470 480 490 500 510 520 530 LOCATE 13,40:PRINT TIME$:LOCATE 15,20:INPUT ’’Выполнить программу (Y)” X$ IF X$o”Y” AND X$o”y” THEN 380 ELSE GOSUB 450:GOTO 430 CLS:GOSUB 170:LOCATE 10,20:PRINT ’’Системной командой <COPY> сохраните” LOCATE 12,9:PRINT ’’файлы <PROG1942.BAS> и <A1942> на гибком/жестком томе” LOCATE 14,20:PRINT ’’для последующего их использования!”±ОСАТЕ 16,20 INPUT ’’Работу с <PARCELA1> продолжить (Y/N)”,X$:LOCATE 25,20 IF Х$= Y OR Х$=”у” THEN 10 ELSE PRINT ’’Работа с версией 1 завершена” LOCATE 18,20:INPUT ’’Работу с пакетом <PARCELLA> продолжить (Y/N)”,X$ IF X$=”Y” OR X$=”y” THEN 426 ELSE CLS:PRINT ”<PARCELLA> ENDED”:END CHAIN AG42$+”:PARCELLA”,10,ALL CLS:SCREEN 0:LOCATE 25,15:PRINT ”*** Идет выполнение программы ”;AL42$- PRINT ” ***”:ROLL$=AG42$+”:PROG1942”:CHAIN ROLLS,1,ALL X=0:T=0:L=0:F1$=” ”:B$=” ”:L$=” ”:P$=” ”:Z$=” ”•№$=” ”-A$=” ” BUFFERS$=” ”:D$=” ”:X$=” ”:ROLL$=” ”:RETURN ’ GS$=MID$(A$,1,INSTR(A$,” ”)-1:AV=VAL (GSS)'.RETURN W$=GS$+” ”+”LOCATE 25,20:INPUT ”+CHR$(34) W$=W$+”Pa6oTy c <PARCELLA> повторить (Y/N) ”+CHR$(34)+”,q42$”:PRINT #2W$ GS$=STR$(AV+1):SV$=STR$(AV+2):W$=GS$+” ”+”IF Q42$=”+CHR$(34)+”Y”+CHR$ (34) W$=W$+” OR Q42$=”+CHR$(34)+”y”+CHR$(34)+” THEN ”+SV$+” ELSE CLS’END” PRINT #2,W$:F1$=AG42$+”:PARCELLA”:W$=SV$+” ”+”CHAIN ”+CHR$(34)+F1$+CHR$(34) W$=W$+”,10”;PRINT #2,W$;CLOSE #1,#2,#3:GOTO 360 модуль PARCELA2.BAS 10 KEY OFFSCREEN 2:CLS:LINE (0,0) - (619,199)„B:LINE (10,10) - (609,189)„B 20 PAINT(5,5), 1-.LOCATE 5,20:PRINT ’’Пакет <PARCELA2> для расширения возможностей” 30 LOCATE 7,28:PR!NT ’’языка БЕЙСИК ПЭВМ ИСКРА 1030”:LOCATE 8,28 40 PRINT ”_____________________________________________________”:LOCATE 10,19 90 INPUT ’’Для вывода описания нажать <1> иначе <ПУСК> ”,X:IF Х<>1 THEN 180 ELSE 100 F1$=AG42$+”:PARCELLA.HLP”:CLS:GOSUB 170:OPEN F1$ FOR INPUT AS 1:P4=1 110 LOCATE 2,68:PRINT ”стр.”;Р4 120 LOCATE T+3,5:INPUT #1,A$:PRINT A$:IF E0F(1) THEN 140 ELSE:T=T+1 130 IF T=20 THEN T=0:PAINT (100,100),0:GOTO 160 ELSE GOTO 120 140 LOCATE 25,5:INPUT ’’Конец вывода. Повторить (1-Д/2-Н) ”,X:IF X>1 THEN 180 ELSE 150 CLOSE 1:PAINT (100,100),0:T=0:P4=0:GOTO 100 160 LOCATE 25.5-.INPUT ’’Для продолжения <ПУСК> ",X:T=0:P4=P4+1:CLS:GOSUB 170:GOTO 110 170 LINE (0,0) - (619,199)„B:LINE (10,10) - (609,189)„B:PAINT (5,5), 1:RETURN 180 LOCATE 25,5:INPUT ’’Обработка БЕЙСИК-программы впервые (Y/N)”,GV$ 190 IF GV$=”Y” OR GV$=”y” THEN 200 ELSE CLOSE:GOTO 430 200 CLOSE:CLS:GOSUB 170.LOCATE 10,20:INPUT ’’Задать путь к БЕЙСИК-программе ”,AL42$ 210 LOCATE 10,20:В$=”Идет интерпретация программы ”:PRINT B$+AL42$+SPACE$ (10) 220 LOCATE 13.20:PRINT ”Begin=”;TIME$,"PRINT ” End=”:B$=”260 open ”+CHR$(34) 230 B$=B$+AL42$+CHR$(34)+” for input as 1”:L$=AG42$+”:A42.BAS”:OPEN ”0”,1,L$ 240 PRINT #1.B$:CLOSE 1:P$=AG42$+”:A42”:CHAIN MERGE PS,250,ALL 250 P$=AG42$+”:PRIG1942.BAS”:Z$=AG42$+”:A1942” 260 OPEN ”C:LASNAMAE.BAS” FOR INPUT AS #1 270 OPEN PS FOR OUTPUT AS 2:OPEN Z$ FOR OUTPUT AS 3:W$=”1 CHAIN MERGE” 280 W$=W$+CHR$(34)+AG42$+”:BERLINOO.2”+CHR$(34)+”,10,ALL”:PRINT #2,W$:GOSUB 600 282 W$=ML42$+” T42=ERL:ML42$=STR$(T42):RESUME NEXT”:PRINT #2,W$ 290 LINE INPUT #1,A$:L=INSTR (A$,”APROC”):GOSUB 470 6 300 IF L<>0 THEN 315 ELSE PRINT #2,AS
450 310 IF EOF (1) THEN 480 ELSE GOTO 290 315 BUFFER$=A$:D$=LEFT$(A$,L-1)+”ON ERROR GOTO ”+ML42$+’’:ERROR 0:” 320 A1$=LEFT$ (A$,L-1):D$=D$+”CHAIN MERGE ”+CHR$(34)+AG42$+”:BERLIN" 330 D$=D$+MID$(A$,L+5,2)+CHR$(34)+”,65001,ALL”:PRINT #2,D$ 340 D$=A1$+MID$(A$,L+8)-.PRINT #3,D$:GOTO 290 360 LOCATE 13.40-.PRINT TIME$:LOCATE 15.20JNPUT ’’Выполнить программу (Y)”,X$ 370 IF X$o”Y” AND X$o”y” THEN 380 ELSE GOSUB 450:GOTO 430 380 CLS:GOSUB 170:LOCATE 10,20:PRINT "Системной командой <COPY> сохраните” 390 LOCATE 12,9:PRINT ’’файлы <PROG1942.BAS> и <A1942> на гибком/жестком томе" 400 LOCATE 14,20:PRINT "для последующего их использования!":ЕОСАТЕ Л6,20 410 INPUT "Работу с <PARCELA2> продолжить (Y/N)”,X$:LOCATE 25,20 420 IF X$=”Y” OR X$=”y” THEN 10 ELSE PRINT "Работа с версией 2 завершена” 422 LOCATE 18,20JNPUT "Работу с пакетом <PARCELLA> продолжить (Y/N)",X$ 424 IF X$=”Y” OR X$=”y” THEN 426 ELSE CLS'.PRINT "<PARCELLA> ENDED '”:END 426 CHAIN AG42$+”:PARCELLA”,10,ALL 430 CLS:SCREEN O'.LOCATE 25,15:PRINT ”*** Идет выполнение программы ”;AL42$; 440 PRINT ” ***”:ROLL$=AG42$+”:PROG1942”:CHAIN ROLLS,1,ALL 450 X=0:T=0:L=0:F1$=” ”:B$=” ”:L$=” ”:P$=” ”:Z$=” ”:W$=” ”:A$=” ” 460 BUFFERS$=” ”:D$=” ”:X$=” ”:ROLL$=" ”:RETURN 470 GS$=MID$(A$,1,INSTR(A$,” ”)-1):AV=VAL (GS$):RETURN 480 W$=GS$+” ”+”LOCATE 25,20:INPUT ”+CHR$(34) 490 W$=W$+"Pa6oTy c <PARCELLA> повторить (Y/N) ”+CHR$(34)+’’,q42$”:PRINT #2,W$ 500 GS$=STR$(AV+1):SV$=STR$(AV+2):W$=GS$+” ”+”IF Q42$=”+CHR$(34)+”Y”+CHR$(34) 510 W$=W$+” OR Q42$=”+CHR$(34)+”y”+CHR$(34)+” THEN ”+SV$+” ELSE CLS:END” 520 PRINT #2,W$:F1$=AG42$+”:PARCELLA”:W$=SV$+"”+”CHAIN ”+CHR$(34)+F1$+CHR$(34) 530 W$=W$+".10”:PRINT #2,W$:CLOSE #1,#2 #3:GOTO 360 600 LINE INPUT #1,A$:ML42$=MIDS(A$,1,INSTR(A$,” ”)-1) 605 IF EOF (1) THEN 630 ELSE GOTO 600 630 ML42$=STR$(VAL(ML42$)+3):CLOSE 1:OPEN AL42S FOR INPUT AS 1 RETURN модуль BERLINOO.1 65001 REM Начало области интерпретации модулей APROC-операторов 65002 T42=T42+1:U42$=AG42$+”:A1942”:OPEN U42$ AS 1 LEN=80:FIELD 1,80 AS C42S 65003 FIELD 1,80 AS C42$:GET 1,2*T42-1:D42$=C42$:GET 1,2*T42:CLOSE 1:GOTO 65005 65004 PRINT ”ERR in ";MID$(C42$,1,6);”*ERR=”;ERR;”*ERL=”;ERL:RESUME 65516 65005 REM Начало транзитной области для модулей APROC-операторов 65516 REM Конец транзитной области для модулей APROC-операторов 65518 U42$=AG42$+”:PROG1942.BAS”:V42$=AG42$+”:X42.BAS”:T42$=AG42$+”:X42” 65519 ON ERROR GOTO 65529-.OPEN U42S FOR INPUT AS #1:OPEN V42S FOR OUTPUT AS #2 65520 LINE UNPUT #1,W42$:P42$=LEFT$(W42$,INSTR (W42S,” ”)-1) 65521 S42$=LEFT$(C42$,INSTR (C42S,” ”)-1):IF S42$ <> P42$ THEN 65524 ELSE 65522 MID$(W42$,INSTR(W42$,’’CHAIN”),5)=”REM ’’-.PRINT #2.W42$:CLOSE #2 65523 CLOSE #1:CHAIN MERGE V42$,65525!,ALL 65524 IF EOF (1) THEN PRINT ”ERR: In creation-of <PROG1942>”:END ELSE GOTO 65520 65525 OPEN V42S FOR OUTPUT AS #1:W42$=”65528 GOTO” 65526 W42$=W42$+C42$:PRINT #1,W42$:CLOSE #1 65527 CHAIN MERGE V42S.65528!,ALL,DELETE 65005-65516- 65529 PRINT ”ERR=”;ERR;” in ”;ERL:END:REM Конец области APROC-операторов модуль BERLINOO.2 65001 U42$=AG42$+”:A1942’’:OPEN ”I”,1,U42$ 65002 LINE INPUT #1,C42$:IF ” ”+MID$(C42$,1,LEN(ML42$)-1)=ML42$ THEN 65004 ELSE 65003 IF EOF (1) THEN PRINT "ERR in line ”;ML42$:END ELSE GOTO 65002 65004 T42=INSTR (C42S,” ”):L42=INSTR (C42$,”,”):D42$=MID$(C42$,L42+1):C42$=MID$(C42$,T42+1,L42-T42-1): CLOSE 1 65005 REM Начало транзитной области для модулей APROC-операторов — 65516 REM Конец транзитной области для модулей APROC-операторов
5 65518 CLOSE 1:V42$=AG42$+”:X42.BAS”:T42$=AG42$+”:X42”:0N ERROR GOTO 65529 M 65525 OPEN V42$ FOR OUTPUT AS #1:W42$=”65528 GOTO” 65526 W42$=W42$+C42$:PRINT #1,W42$:CLOSE #1 65527 CHAIN MERGE V42$,65528!,ALL,DELETE 65005-65516 65529 PRINT ”ERR=”;ERR;” in ”;ERL:END:REM Конец области APROC-операторов модуль BERLINO1.BAS 65005 REM Модуль интерпретации APROCOI-оператора 65007 U42$=AG42$+”:PROG1942.BAS”:OPEN ”I’’,1,U42$:T42$=AG42$+”:X42.BAS” 65008 ON ERROR GOTO 65025:G42=INSTR (D42$,”,”):K42$=LEFT$(D42$,G42-1) 65009 LINE INPUT #1,W42$:P42$=LEFT$(W42$,INSTR(W42$," ”)-1) 65010 IF INSTR(P42$,K42$)<>1 THEN 65020 ELSE S42=INSTR(G42+1,D42$,",”):CLOSE 1 65011 M42=INSTR(S42+1,D42$,”,”):U42$=”65014 F42$=”+MID$(D42$,G42+1,S42-G42-1) 65012 U42$=U42$+”:”+”E42$=’’+MID$(D42$,S42+1,M42-S42-1):OPEN ”O’’,1,T42$ 65013 PRINT #1,U42$:CLOSE 1:CHAIN MERGE T42$,65014!,ALL 65014 F42$=A$:E42S=B$ 65015 A42=INSTR (W42$,F42$):L42=LEN (F42$):O42$=LEFT$(W42$,A42-1)+E42$ 65016 Q42$=O42$+MID$(W42$,L42+A42):OPEN "0”,1,T42$:PRINT #1,Q42$:CLOSE #1 65017 CHAIN MERGE T42$,65018!,ALL 65018 W42$=”65528 goto ”+MID$(D42$,M42+1): OPEN ”0”,1,T42$:PRINT #1,W42$ 65019 CLOSE 1:CHAIN MERGE T42S,65528!,ALL,DELETE 65005-65516 65020 IF EOF (1) THEN PRINT ’’Line ”;K42$;’’ is absent ”:GOTO 65025 ELSE GOTO 65009 65025 PRINT ”ERR in <APROCO1> in ”;MID$(C42$,1,6):RESUME 65516 65516 REM Модуль динамической модификации Бейсик-программы модуль BERLINO2.BAS 65005 REM модуль интерпретации APROCO2-onepaTopa 65007 ON ERROR GOTO 65100:X42S=AG42S+”:X42.BAS”:L42=INSTR(D42S,”(”) 65008 S42=INSTR(D42$,”)”):G42=INSTR(D42$,”=”):V42=INSTR(D42$,”,”) 65009 Z42=INSTR(V42+1,D42$,”,”):U42=INSTR(Z42+1,D42$,”,”) 65010 H42= 01:I142=0:1242=0:OPEN ”0”,1,X42$ 65011 W42$=”65090 FOR K42=’’+MID$(D42$,V42+1,Z42-V42-1) 65012 W42$=W42$+” TO ”+MID$(D42$,Z42+1,U42-Z42-1)+”-H42 STEP H42:” 65013 J42$=MID$(D42$,L42+1,S42-L42-1):W42$=W42$+J42$+”=K42” 65021 PRINT #1,W42$:W42$=”65091 l142=l142+(”+MID$(D42$,G42+1,V42-G42-1) 65031 W42$=W42$+”)*H42/2:"+J42$+”=”+J42$+”+H42”:PRINT #1,W42$ 65032 W42$="65092 H42=l142+(”+MID$(D42$,G42+1,V42-G42-1) 65033 W42$=W42$+”)*H42/2:NEXT K42”:PRINT #1,W42$:P42=INSTR(U42+1,D42$,” ”) 65035 IF P42=0 THEN P42=LEN (D42$)+1:GOTO 65041 ELSE 65041 W42$=”65093 IF ABS(I142-I242)<=”+MID$(D42$,U42+1,P42-U42) 65051 W42$=W42$+”THEN 65095 ELSE 65094”:PRINT #1,W42$ 65061 W42$="65095 ”+MID$(D42$,1,L42-1)+”=l142:GOTO 65516”:PRINT #1,W42$ 65071 CLOSE #1:CHAIN MERGE X42S,65090!, ALL 65094 I242=I142:H42=H42/2:I142=0:GOTO 65090 65100 PRINT ”ERR in <APROCO2> in string ”;MID$(C42$,1,6):RESUME 65516 65516 REM Модуль вычисления интеграла по методу трапеций модуль BERLINO3.BAS 65005 ON ERROR GOTO 65019.REM Модуль интерпретации АРРОСОЗ-оператора 65007 V42$=AG42S+”:X42.BAS”:OPEN ”0”,1,V42$:M42=INSTR(D42$,”,’’) 65009 W42S=”65020 FOR K42=1 TO LEN(”+MID$(D42$,1,M42-1)+”)”:PRINT #1.W42S 65011 P42=INSTR(M42-1,D42$,” ”):IF P42=0 THEN P42=LEN(D42$)+1:GOTO 65012 ELSE 65012 U42$=MID$(D42$,M42+1,P42-M42) £ 65013 W42$=”65021 "+U42$+”=”+U42S+”+”+’’HEX$(ASC(MID$(” w 65015 W42S=W42$+MID$(D42$,1,M42-1)+”,K42,1))):NEXT K42:GOTO 65516"
£ 65017 PRINT #1,W42$:CLOSE #1:CHAIN MERGE V42$,65020'..ALL *> 65019 PRINT "ERR in <APROCO3> in string ”;MID$(C42$,1,6):RESUME 65516 65516 REM Вычисление НЕХ-лредставления символьного значения модуль BERLINO4.BAS 65005 ON ERROR GOTO 65033:REM Модуль интерпретации АРРОСО4-оператора 65007 P42=INSTR (D42$,”(”):M42=INSTR (D42$,”)”):U42=INSTR (D42$,” ”) 65008 IF U42=0 THEN U42=LEN (D42$)+1:GOTO 65009 ELSE 65009 V42$=MID$(D42$,1,U42-1):L42=INSTR (D42$,”=”):CLS:LOCATE 12,22 65011 PRINT ’’Вывод графика функции ”;V42$:LOCATE 14,25 65013 INPUT "Для продолжения работы нажать <ПУСК> ;В42$ 65015 T42$=AG42$+”:X42.BAS”:OPEN ”0”,1,Т42$ 65017 LOCATE 2.SCREEN 2:A42=100:LINE (10,100) - (600,100) 65019 LINE (305,0)-(305,199):LOCATE 2:W42$=’’65O3O ” 65021 W42$=W42$+MID$(D42$,P42+1,M42-P42-1)+”=L42:PSET (305+L42.A42-” 65023 W42$=W42$+MID$(D42$,L42+1,U42-L42-1)+”):NEXT L42’’:PRINT #1,W42$ 65025 CLOSE #1:CHAIN MERGE T42$,65029!,ALL 65027 PRINT "ATT: function ”;V42$;” cannot be presented":RESUME 65031 65029 ON ERROR GOTO 650271FOR L42=-295 TO 295 модуль BERL1NO5.BAS 65005 CLOSE 1,2:REM Модуль интерпретации APROCOS-оператора 65007 ON ERROR GOTO 65050:L42=INSTR(D42$,”,”):S42=INSTR(L42,D42$,” ”) 65009 M42=S42-L42-1:T42$=AG42$+”:X42.BAS”:OPEN T42$ FOR OUTPUT AS 1 65011 W42$=”65015 S42$=”+CHR$(34)+MID$(D42$,1 ,L42-1)+CHR$(34)+”:L42$=” 65012 W42$=W42$+CHR$(34)+MID$(D42$,L42+1,M42)t-CHR$(34) 65013 PRINT #1,W42$:CLOSE 1:CHAIN MERGE T42S,650151,ALL 65017 ON ERROR GOTO 65004:OPEN S42$ FOR INPUT AS #1:LL=1:S42=1 65019 INPUT #1,B42$:IF LEN(B42$)<=LL THEN 65021 ELSE LL=LEN(B42$) 65021 IF EOF (1) THEN CLOSE 1:GOTO 65023 ELSE S42=S42+1:GOTO 65019 65023 CLOSE 1,2:OPEN L42$ AS 2 LEN=LL:OPEN ”1”,1,S42$:FIELD #2,LL AS W42$ 65025 FOR R42=1 TO S42JNPUT #1,L42$:LSET W42$=L42$:PUT #2,R42:NEXT:GOTO 65516 65050 PRINT "ERR in <APROCO5> in string ";MID$(C42$,1,6):RESUME 65516 65516 CLOSE 1,2:REM Преобразование последовательного файла в прямой модуль BERLINO6.BAS 65005 ON ERROR GOTO 65100:REM Модуль интерпретации APROCO6*onepaTopa 65007 L42=INSTR (D42$,”,”):D42=INSTR (L42+1,D42$,”,”):V42=INSTR (D42+1,D42$,”,”) 65009 W42=INSTR (V42+1,D42$,”,”):J42=INSTR (W42+1,D42$,”,") 65011 N42=INSTR (J42+1,D42$,”,”):C42=INSTR (N42+1,D42$,’’,”) 65013 M42=INSTR (042$,” "):A42$=MID$ (D42$,1,L42-1):OPEN ”I”,1,A42$:Q42=1:H42=1 65014 IF M42=0 THEN M42=LEN (D42$)+1:GOTO 65015 ELSE 65015 INPUT #1,W42$:IF EOF (1) THEN 65019 ELSE 042=042+1 65017 IF LEN (W42$) > H42 THEN H42=LEN (W42$):G0T0 65015 ELSE GOTO 65015 65019 CLOSE #1:OPEN ”I”,1,A42$:B42$=AG42$+”:X42” 65021 OPEN B42$ AS #2 LEN=H42:GOSUB 65072 65023 FOR K42=1 TO Q42:INPUT #1,W42$:LSET V42$=W42$:PUT #2,K42:NEXT K42 65025 CLOSE #1,#2:T42$=AG42$+”:T42.BAS’’:OPEN ”0’’,1,T42$ 65027 W42$=’’65O5O V142$=MID$ (Y42$’’+MID$ (D42$,D42,W42-D42)+”)”:PRINT #1,W42$ 65029 W42$=”65052 V242$=MID$ (Y42$’’+MID$ (D42$,J42,C42-J42)+”)”:PRINT #1,W42$ 65031 W42$=”65054 V342$=MID$ (V42$”+MID$ (D42$,D42,W42-D42)+")”:PRINT #1,W42$ 65033 W42$=”65056 V442$=MID$ (V42$”+MID$ (D42$,J42,C42-J42)+”)’’:PRINT #1,W42$ 65035 W42$=”65058 IF V142$”+MID$ (D42$,L42+1,D42-L42-1)+”V342$’’ £ 65037 W42$=W42$+MID$ (D42$,C42+1,M42-C42-1)+” V242$’’+MID$ (D42$,W42+1,J42-W42-1) 8 65039 W42$=W42$+’’V442$ THEN 65062 ELSE ”:PRINT #1,W42$
5 65040 CLOSE #1:CHAIN MERGE T42S,65042!,ALL ° 65042 ON ERROR GOTO 65004:CLOSE #2:OPEN B42S AS #2 LEN=H42:GOSUB 65072 65044 VG42=0:FOR K42=1 TO Q42-1 65049 GET #2,K42:Y42$=V42$ 65053 GET #2,K42+1 65060 VG42=VG42+1:PUT #2,K42:LSET V42S=Y42$:PUT #2K42+1 65062 NEXT K42JF VG42 >0 THEN 65042 ELSE CLOSE #2 65064 OPEN ”0”,1,A42$:OPEN B42S AS 2 LEN=H42:GOSUB 65072:FOR K42=1 TO Q42 65066 GET #2,K42:PRINT #1,MIDS (V42$,1,LEN (V42$)) 65068 NEXT K42:CLOSE #1,#2:KILL B42$:GOTO 65516 65072 FIELD #2,H42 AS V42$:RETURN 65100 PRINT ”ERR in <APROCO6> in string ”;MID$ (C42$,1,6):RESUME 65516 65516 REM Сортировка символьных файлов по двум полям подбора модуль BERLINO7.BAS 65005 ON ERROR GOTO 65400:REM Модуль интерпретации APROCO7-onepaTopa 65007 L42=INSTR (D42$,”(’’):P42=INSTR (D42$,”)”):K42=INSTR (D42$,”=”) 65009 B42=INSTR (D42$,”,”):C42=INSTR (B42+1,D42$,”,”):M42=INSTR (C42+1,D42$” ”) 65011 J42=INSTR (M42+1 ,D42$,” ”):A42$=AG42$+”:X42.BAS”:OPEN "0” .1 A42S 65012 IF J42=0 THEN J42=LEN (D42$)+1:GOTO 65013 ELSE 65013 W42$=”65050 ON ERROR GOTO 65004:A42=”+MIDS (D42$,B42+1,C42-B42-1)+”:” 65015 W42$=W42$+”B42=’’+MID$ (D42$,C42+1,M42-C42-1)+”:”:Z42=P42-L42-1 65017 W42$=W42$+”E42=”+MID$ (D42$,M42+1,J42-M42-1)+”:GOSUB 65100”PRINT #1 W42S 65019 W42$=”65100 ”+MID$ (D42$,L42+1,Z42)+"=A42:FA42=”+MID$ (D42$,K42+1,B42-K42-1) 65021 W42$=W42$+”:”+MID$ (D42$,L42+1,Z42)+"=B42:FB42=”+MIDS (D42S K42+1 B42-K42-1) 65023 W42S=W42$+”:RETURN”:PRINT #1,W42$ 65025 W42$=”65200 ”+MID$ (D42$,L42+1,Z42)+”=U42:F42=”+MID$ (D42$,K42+1,B42-K42-1) 65027 W42$=W42$+”:RETURN":PRINT #1,W42$:CLOSE #1:CHAIN MERGE A42S,65050',ALL o- 65052 X42=(B42*FA42-A42*FB42)/(FA42-FB42):u42=X42:GOSUB 65200 о 65054 IF ABS(F42) <=E42 THEN 65060 ELSE 5* 65055 IF F42 <0 THEN B42=X42:GOSUB 65100:GOTO 65052 ELSE 65056 A42=X42:GOSUB 65100:GOTO 65052 65060 W42$=”65080 ”+MID$ (D42$,1,L42-1)+”=X42:GOTO 65516”:OPEN ”0”,1,A42$ 65062 PRINT #1,W42$:CLOSE #1:CHAIN MERGE A42S,65080!,ALL 65400 PRINT "ERR in <APR0C07> in string ”;MID$ (C42S.1.6) 65410 PRINT ’’Ошибка c KOflOM=”;ERR;”* в CTpoKe=;ERL:RESUME 65516 65516 REM Вычисление действительного корня функции на отрезке модуль BERLINO8.BAS 65005 ON ERROR GOTO 65100-.REM Модуль интерпретации APROCOS-оператора 65007 L42=INSTR (D42S,” ”):A42$=AG42$+”:X42.BAS”:OPEN ”0”,1,A42$ 65008 IF L42=0 THEN L42=LEN (D42$)+1:GOTO 65009 ELSE 65009 W42$=’’65O12 Y42=ABS (CINT (”+MID$ (D42$,1,L42-1)+”))” 65011 PRINT #1,W42$:CLOSE #1:CHAIN MERGE A42S,65012!,ALL 65013 OPEN ”0”,1,A42$:S42=INSTR (C42S,” ”):IF S42=0 THEN 65015 ELSE 65014 W42$=MID$ (C42$,1,S42)+”REM CALC -> GOTO”:GOTO 65016 65015 W42$=C42$+”REM CALC -> GOTO" 65016 PRINT #1,W42$:CLOSE #1:CHAIN MERGE A42$,Y42,ALL 65100 PRINT ”ERR in <APROCO8> in string ”;MID$ (D42$,1,6):RESUME 65020 65516 REM Вычисляемый безусловный переход no <GOTO> модуль BERLINO9.BAS 65005 ON ERROR GOTO 65100.REM Модуль интерпретации АРНОСОЭ-оператора * 65007 L42=INSTR (D42$,”,’’):P42=INSTR (L42+1,D42$,”,”):N42=INSTR (D42$,” ”) ч 65009 U42=INSTR(P42+1,D42$”,”):W42=INSTR(U42+1,D42$,”,”)
& 65011 ® 65013 65014 65015 65031 65032 65040 65042 65044 65046 65048 65050 65052 65056 65057 65060 65062 65100 65516 65005 65007 65008 65010 65013 65014 65015 65016 65017 65018 65019 65021 65022 65023 65031 65034 65037 65038 65040 65043 65046 65049 65052 65055 65058 65061 65064 65067 65070 65073 65076 65079 65082 65085 65088 3 65091 A42$=AG42$+”:X42.BAS”:W42$="65030 A42=”+MID$ (D42$,L42+1 P42-L42-1)+”-B42~” W42$=W42$+MID$ (D42$,P42+1,U42-P42-1)+”:O42=”+MID$ (D42$ 1 L42-1)+” C42=” W42$=W42$+MID$ (D42$,U42+1,W42-U42-1)+”:D42=”+MID$ (D42$ W42+1 N42-W42-1) OPEN ”0”,1,A42$:PRINT #1,W42$:CLOSE #1:CHAIN MERGE A42$,65030 !,ALL ON ERROR GOTO 65004:REM Обработка ошибок <APROCO9>-onepaTopa ON 042 GOTO 65040,65042,65044,65048,65052,65057:GOTO 65056 RR=A42+C42:II=B42+D42:GOTO 65516 RR=A42*C42-B42*D42:II=A42*D42+C42*B42:GOTO 65516 M42=C42~ 2+D42* 2:MA42=A42*C42+B42*D42 MB42=C42*B42-A42*D42:RR=MA42/M42:II=MB42/M42:GOTO 65516 IF U42-P42=1 THEN 65056 ELSE GOTO 65050 RR=SQR (A42*2+B42~2):II=SQR (C42'2+D42‘2):GOTO 65516 IF U42-P42=1 THEN 65056 ELSE RR=A42*2-B42*2:II=2»A42*B42:GOTO 65516 PRINT "ERR in ”;MID$ (C42$,1,INSTR (C42$,-"program ”;AG42$:GOTO 65516 IF L)42-P42=1 THEN 65056 ELSE M42=SQR (SQR (A42~2+B42~2)):F42=ATN (B42/A42) RR=M42*COS (F42/2):II=M42*SIN (F42/2):RR1=M42*COS (F42/2+3.1416) II1=M42*SIN (F42/2+3.1416):GOTO 65516 PRINT "ERR in <APROCO9> in string ”;MID$ (C42$,1,6):RESUME 65516 REM Арифметические операции с комплексными числами модуль BERLIN 10.BAS REM Модуль интерпретации APROCIO-оператора ON ERROR GOTO 65023:P42=INSTR (D42$,” ”):A42$=AG42$+”:X42.BAS” IF P42=0 THEN P42=LEN (D42$)+1:GOTO 65010 ELSE W42$=”65014 A42=VARPTR (”+MID$ (D42$,1,P42-1)+”)”:OPEN ”0”,1 A42$ PRINT #1,W42$:CLOSE 1,2:Z42$=SPACE$(3):CHAIN MERGE A42$,65014! ALL A42=VARPTR (#5) M42$=" ”:FOR K42=A42 TO A42+12:M42$=M42$+CHR$ (PEEK (K42)):NEXT Y42$=SPACE$(8):LSET Y42$=MID$ (M42$,4,8):LSET Z42$=MID$ (M42$,12,3) CLS:P42=INSTR (Y42$,” ”):IF P42=0 THEN 65019 ELSE N42$=Y42$ Y42$=SPACE$ (P42-1):LSET Y42$=N42$:R42$=CHR$ (64+PEEK (A42+1))+”:’’ R42$=CHR$ (64+PEEK (A42+1))+”:”:IF Z42$=” ” THEN 65022 ELSE R42$=R42$+Y42$+”.”+Z42$:GOTO 65031 R42$=R42$+Y42$:GOTO 65031 PRINT "ERR in <APROC10> in ”;MID$ (C42$,1,6):RESUME 65516 PRINT TAB (5);”Содержимое блока управления файлом ”;R42$:PRINT PRINT ”1. Режим открытия файла: ”;:PRINT НЕХ$ (PEEK (А42)) PRINT ”2. Системный блок управления файлом;”:РР1НТ ” ”; FOR К42=А42+1 ТО А42+38 PRINT НЕХ$ (PEEK (K42));:NEXT:PRINT ”3. Число обработанных секторов для PRINT "последовательного ’’-.PRINT ” или (номер+1) записи для прямого файла: ; V42$=” ”:FOR К42=А42+39 ТО A42+40;V42$=V42$+HEX$ (PEEK (K42)):NEXT;PRINT V42$ PRINT ”4. Число символов данных, обработанных в буфере В/В:”; PRINT STR$ (PEEK (A42+41)):PRINT ”5. Число символов в буфере В/В:”; PRINT STR$ (PEEK (A42+42)):PRINT ”6. Логическое имя активного УВВ:”; P42$=STR$ (PEEK (A42+46)):IF Р42$ <="F” THEN 65073 ELSE IF P42$=”248" THEN PRINT ”LPT3” ELSE IF P42S=”249” THEN PRINT ’’LPT2” ELSE IF P42$=”250” THEN PRINT "COM2” ELSE IF P42$=”251” THEN PRINT ”COM1” ELSE IF P42$=”255” THEN PRINT ”KYBD” ELSE PRINT ’’Ошибка в блоке управления ”; PRINT ”файлом”:СОТО 65516 PRINT ” Дисковое УВВ <”;CHR$ (65+VAL (Р42$));”>” PRINT ”7. Ширина устройства печати(дисплей/принтер): ”; PRINT (PEEK (A42+47)):PRINT ”8. Позиция сканирования PRINT # в буфере В/В: ’’; PRINT PEEK (А42+48) PRINT ”9. Очередная позиция табуляции в буфере В/В: ”;:PRINT PEEK (А42+50) PRINT ”А. Буфер последовательного обмена между системой и БЕЙСИКом:” FOR К42=А42+51 ТО A42+177-.PRINT CHRS (PEEK (K42));:NEXT K42:PRINT
С\| со со СО О S о ф о (— СО CL X )Х S в СО X ф CI О О Приложение 10 ш С\| ш ш ш g п ° «а «2 О? Ф L2 II сс сс ш X С\| ш ш о со о С\1 ф race "сс со LU =»h ш ш - ш S II II О со со 5 OU о m ф II Ф (X в s ф СП СО * * о со Т U. S CXJ = 5 О ’ LU ф ОО-»— Ч—Т— т-ч— t— Т— Ц-) C£>CXJC0OC0C£)tDCOCDCD X О. Ф 2 <5 Справочная информация по однородным структурам, параллельной обработке информации и программному обеспечению В настоящем приложении приводится сводная библиография работ Таллиннского творческого коллектива (ТТК) по однород- ным структурам, параллельной обработке информации и прог- раммному обеспечению. Состав ТТК периодически меняется (как количественно, так и содержательно) в зависимости от рассматриваемой в конкретный период проблематики. Библи- ография включает работы по теории однородных структур и ее приложениям в вычислительной технике параллельного действия, а также математике, кибернетике, математической биологии и моделировании дискретных параллельных систем и программному обеспечению ЭВМ. Рассматриваются вопросы разработки АСУ, подготовки специалистов по информатике и вычислительной технике и ряд других вопросов. Наряду с перечисленным приведен дополнительный список литерату- ры, оказавшей наибольшее влияние на развитие теории одно- родных структур и ее многочисленных приложений, а также перечень наиболее активных исследовательских групп в этом направлении, идентифицируемых их ведущими научными руководителями. Работы, связанные с информатикой и вычислительной техни- кой, могут представить читателю определенный интерес в све- те вступления страны на путь массовой компьютеризации, которая ставит перед обществом целый ряд серьезных проб- лем. Тогда как тематика по однородным структурам представ- ляет интерес несколько в ином аспекте. Однородные структуры в целом ряде случаев представляют собой превосходную среду для моделирования различных дискретных параллельных процессов и феноменов и в этом плане оказываются весьма интересными с точки зрения моделирования их на ЭВМ. С дру- гой стороны, целый ряд проблем собственно теории однород- ных структур (ТОС) и ее многочисленных приложений решен или предполагается решить посредством моделирования на ЭВМ. Таким образом, привлечение к данной проблематике широкого круга пользователей ПЭВМ не только предполагает определенный прогресс в данной области, но и позволит сфор- мировать определенные навыки „параллельного” мышления, которое в самое ближайшее время будет определять основное направление развития высокопараллельной вычислительной техники новых поколений. Приведенная ниже библиография является достаточно доступной и в свою очередь содержит большое число ссылок на отечественные и зарубежные источ- ники в данных областях. Наряду с этим она достаточно широко охватывает современную проблематику теории однородных структур и ее многочисленных приложений.
1. Аладьев В. 3. Задача о матрицах, возникающая в теории са мовоспроизводящихся автоматов II Изв. АН ЭССР. Физ.-мат., 1970,19, № 2. С. 159-165. 2. Аладьев В. 3. Некоторые вопросы, возникающие в теории сотообразных структур II Изв. АН ЭССР. Биология, 1970, 19, № 3. С. 266-277. 3. Аладьев В. 3. Одна теорема теории сотообразных струк- тур//Изв. АН ЭССР. Физ.-мат., 1970, 19, № 3. С. 365-368. 4. Аладьев В. 3. Вычислимость в однородных структурах. Ч. 1-2. № 2850, 3023гМ.:ВИНИТИ, 1971. 120 с. 5. Аладьев В. 3. К теории однородных структур. № 4204-М.: ВИНИТИ, 1971.40 с. 6. Аладьев В. 3. Об одном асимптотическом свойстве стохас- тических сотообразных структур И Изв. АН ЭССР. Физ.- мат., 1971, 20, № 2. С. 205-208. 7. Аладьев В. 3. Некоторые оценки для структур Неймана- Мура//Изв. АН ЭССР. Физ.-мат., 1971, 20, № 3. С. 335-342. 8. Аладьев В. 3. Две модели, решающие проблему французско- го флага // Изв. АН ЭССР. Физ.-мат.,1971, 20, № 3. С. 360-362, 9. Аладьев В. 3. К устойчивости некоторых оптимальных диф- ференциальных систем II Автоматика и вычислительная техника, 1971, № 14. С. 124-148. 10. Аладьев В. 3., Ефимов Н. И. О некоторых свойствах структур Мура//Изв. АН ЭССР. Физ.-мат., 1971, 20, № 2. С. 208-210 11. Аладьев В. 3., Орав Т. А. Числовая модель регуляции осевой структуры//Изв. АН ЭССР. Физ.-мат., 1971, 20, № 3. С. 276- 278. 12. Аладьев В. 3., Полуэктов Р. А. О моделях регуляции прост- ранственной структуры II Изв. АН ЭССР. Биология, 1971, 20, № 4. С. 360-363. 13. Аладьев В. 3. К теории однородных структур II Изв. АН ЭССР. Физ.-мат.,1972, 21, № 2. С. 224-228. 14. Аладьев В. 3. К теории однородных структур.-Таллинн: Изд-во АН ЭССР, 1972. 235 с. 15. Аладьев В. 3., Орав Т. А., Орав И. Т. Об эффективности от- бора в пострадиационных популяциях ярового ячмечя II Изв. АН ЭССР. Биология, 1972, 21, № 4. С. 340-347. 16. Аладьев В. 3. Некоторые алгоритмические вопросы мате- матической биологии // Изв. АН ЭССР. Биология, 1973, 22, №1. С. 68-76. 17. Аладьев В. 3. Таи(п)-грамматики и порождаемые ими язы- ки // Изв. АН ЭССР. Биология, 1974, 23, № 1. С. 67-87. 18. Аладьев В. 3., Орав Т. А. Проблема кибернетического моде- лирования процессов развития II Изв. АН ЭССР. Биология, 1974, 23, № 3. С. 197-200. 19. Аладьев В. 3., Осипов О. Б. Об одном методе моделирования в однородных структурах//Изв. АН ЭССР. Физ.-мат., 1974, 23, № 4. С. 414-417. 20. Аладьев В. 3., Осипов О. Б. Введение в операционную систе- му ЕС ЭВМ.-Таллинн: Валгус, 1975. 180 с.
21. Аладьев В. 3. О сложности параллельных алгоритмов, опре- деляемых однородными структурами II Изв. АН ЭССР. Физ.- мат., 1975, 24, № 2. С. 267-272. 22. Аладьев В. 3. К вопросу реализации операционных систем в вычислительных структурах и средах #Тр. 4-й Всесоюз. конф, по однородным вычислительным системам и средам.- К., 1975. С. 125-130. 23. Аладьев В. 3., Осипов О. В. Введение в архитектуру моде- лей ЕС ЭВМ.-Таллинн: Валгус, 1976. 310 с. 24. Аладьев В. 3. Характеристика одномерных однородных структур в терминах стэковых автоматов II Там же. С. 244- 276. 25. Аладьев В. 3. К понятию однородных структур//Там же. С. 186-197. 26. Аладьев В. 3., Осипов О. Б., Ефимов Н. И. Содержание тео- рии однородных структур II Там же. С. 198-213. 27. Аладьев В. 3., Осипов О. Б. Моделирование операционных систем на однородных структурах II Там же. С. 214-243. 28. Аладьев В. 3. Об одной конфигурации ОС/ЕС, ориентиро- ванной на АСУ Минторга ЭССР: Вопр. создания АСУ торго- влей // Тр. ВНИИЭТ-систем.-М., 1977. С. 80-87. 29. Математическое обеспечение ЕС ЭВМ и АСУ / Под ред. В. 3. Аладьева.-Таллинн: Валгус, 1978. 190 с. 30. Аладьев В. 3. Индустрия программирования II Там же. С. 145-158. 31. Аладьев В. 3., Осипов О. Б. Опыт подготовки проблемных программистов для ЭВМ третьего поколения//Там же. С. 104-117. 32. Аладьев В. 3., Клюшников В. Т. Сравнительный анализ опе- рационных систем ДОС/ЕС и ОС/ЕС//Там же. С. 118-127 33. Аладьев В. 3., Фишман Я. И. Один подход к созданию уп- равляющих систем программным обеспечением АСУ на основе ОС/ЕС II Там же. С. 128-144. 34. Аладьев В. 3., Клюшников В. Т. Некоторые свойства конфи- гураций И Там же. С. 158-178. 35. Аладьев В. 3., Фишман Я. И. Конфигурация операционной системы, ориентированная на минимальный комплект обо- рудования моделей ЕС ЭВМ (МИНИОС)//Там же. С. 6-104. 36. Система управления базами данных на основе операцион- ной системы МИНИОС и СУБД ОКА/Под ред. В. 3. Аладьева.- Таллинн: Валгус, 1980. 180 с. 37. Параллельная обработка информации и параллельные ал- горитмы/Под ред. В. 3. Аладьева.-Таллинн: Валгус, 1981. 298 с. 38. Аладьев В. 3., Лукаш Н. А., Мазуренко В. И. Проблемы реали- зации ОВС на базе ЕС ЭВМ II Там же. С. 8-166. 39. Аладьев В. 3., Осипов О. В., Ваганов В. А. Проблемы внедре- ния технологии параллельной обработки информации при решении задач бухгалтерского учета# Там же. С. 167-176. 40. Аладьев В. 3. Некоторые перспективы развития теории
однородных структур как формального аппарата исследо- вания вычислительной техники параллельного действия I Там же. С. 177-210. 41. Аладьев В. 3. Кибернетическое моделирование биологии развития И Там же. С. 211-280. 42. Аладьев В. 3., Осипов О. Б. Параллельная система обработки информации // Система управления базами данных на ос- нове операционной системы МИНИОС и СУБД ОКА. Таллинн: Валгус, 1980. С. 109-153. 43. Аладьев В. 3. Перспективы развития теории однородных структур #Тр. 3-й Венгерской конф, по вычислительной технике. - Будапешт, 1981. С. 17-34. 44. Аладьев В. 3., Ваганов В. А. Проблемы внедрения техноло- гии параллельной обработки при решении задач бухгалтер- ского учета/'Тр. 2-й Всесоюз. конф. ’’Бухгалтерский учет в условиях совершенствования хозяйственного механиз- ма’.’-Баку, 1981. С. 132-135. 45. Аладьев В. 3., Блиндер Б. С. Об одном подходе к созданию высокоэффективных систем обработки информации на базе вычислительной техники ВЦКП#Тр. Всесоюз. конф. ’’Основ- ные направления развития программного обеспечения ЭВМ, комплексов и сетей ЭВМ”-Севастополь, 1981. С. 125-135. 46. Параллельные системы обработки информации / Под. ред. В. 3. Аладьева-Таллинн: Валгус, 1983. 340 с. 47. Аладьев В. 3., Баринов В. В., Бойко В. К. Параллельная уп- равляющая система ОВС И Там же. С. 3-140. 48. Аладьев В. 3. Избранные вопросы теории однородных струк- тур И Там же. С. 141-341. 49. Аладьев В. 3. и др. Математическая биология развития.-М.: Наука, 1982. 250 с. 50. Аладьев В. 3. Об одном подходе к созданию высокопроиз- водительных систем информационного поиска на основе информационного распараллеливания в однородных вы- числительных системах #Тр. Всесоюз. симпоз. ’’Высоко- производительные системы информационного поиска и уп- равления базами данных’.’-Кишинев, 1982. С. 39-42. 51. Аладьев В. 3. Описание параллельной системы обработки информации для ЕС ЭВМ в терминах систем алгоритмиче- ских алгебр // Материалы Всесоюз. семинара „Параллель- ное программирование и высокопроизводительные вычи- слительные системы!’-Киев, 1982. С. 75-77. 52. Аладьев В. 3. Архитектура и программное обеспечение СМ ЭВМ / ВЦ ЭРК Госбанка CCCR-Tаллинн, 1983. 80 с. 53. Аладьев В. 3. Сервисные программные средства для пер- сонального компьютера ИСКРА-226 / СКБ МПСМ ЭССР.-Тал- линн, 1986.140 с. 54. Аладьев В. 3. Курс лекций по персональному компьютеру ИСКРА-226 / СКБ МПСМ ЭССР.-Таллинн, 1986.180 с. 55. Аладьев В. 3., Пэбре Т. Э. Программное обеспечение ПЭВМ ИСКРА-226. Контроль исполнительской дисциплины ЦНИИ- проект Госстроя СССР. - М., 1988. 50 с.
56. Аладьев В. 3. Программное обеспечение ПЭВМ ИСКРА-226. Измерение расхода жидкостей и газов методом стандарт- ных диафрагм / СКБ МПСМ ЭССР-Таллинн, 1987. 75 с. 57. Аладьев В. 3. Теоретические и прикладные аспекты одно- родных структур И Методы и средства аналоговой и цифро- вой обработки информации / Ин-т кибернетики АН ЭССР. - Таллинн, 1988. С. 76-90. 58. Аладьев В. 3., Мартыненко Я. Г., Шиленко В. Ф. Персональный компьютер ИСКРА-226. Архитектура и программное обес- печение. - К.: Гл. ред. УСЭ, 1988. 150 с. 59. Аладьев В. 3., Краснопрошина А. А., Крижановский В. В., Мартыненко Я. Г. Проектирование программного обеспе- чения персональной ЭВМ ИСКРА-226.-К.: Техника, 1989. 255 с. 60. Аладьев В. 3., Сироджа И. Б. Программирование и решение инженерных задач в операционной среде БЕЙСИК персо- нальной ЭВМ ИСКРА-226.~Харьков: Изд-во ХАИ, 1988. 87 с. 61. Aladyev V. Z. Computability in Homogeneous Structures# Изв. АН ЭССР. Физ.-мат.,1972,21, № 1. С. 79-83. 62. Aladyev V. Z. Some Questions Concerning Nonconstructibility and Computability in Homogeneous Structures # Изв. АН ЭССР. Физ.-мат.,1973,22, № 2. С. 210-214. 63. Aladyev V. Z. Operations Over Languages Generated by Tau(n)- Grammars. Comment. Math., Univ. Carolinae Praga. 1974, 15, No. 2. P. 211-220. 64. Aladyev V. Z. About the Equivalence of Tau(n)-Grammars and Sb(m)-Grammars. Comment. Math., Univ. Carolinae Praga, 1974, 15,No. 4. P. 717-726. 65. Aladyev V. Z. Survey of Research in the Theory of Homoge- neous Structures and Their Applications. Math. Biosci. Winter 1974, Vol. 22. P. 156-184. 66. Aladyev V. Z. The Behavioural Properties of Homogeneous Structures. The First Intern. Symp. on USAL. Tokyo, Japan, (August 1975). P. 28-39. 67. Aladyev V. Z. The Behavioural Properties of Homogeneous Structures. Math. Biosci. Spring 1976, Vol. 24. P. 225-245. 68. Aladyev V. Z. Some New Results in the Theory of Homogeneous Structures. The Proc. Intern. Symp. on Math. Topics in Biology. Kyoto, Japan (September 1978). P. 193-206. 69. Aladyev V. Z. Theory of Homogeneous Structures and Their Applications. Proc. Second Intern. Conf, on Math. Modelling, St.-Louis, USA (July 1979). P. 40-45. 70. Aladyev V. Z. To Nonconstructibility in Homogeneous Structu- res, in [35]. P. 154-171. 71. Aladyev V. Z., Veetyusme R. On Composition Problem in Homo- geneous Structures, in [35] P. 172-178. 72. Aladyev V. Z.: Mathematical Theory of Homogeneous Structu- res and Their Applications. Tallinn. Valgus Press. 1980, 268 p.
73. Aladyev V. Z. Nagy Teljesitokepessegu Rendszerek uj Med- kozelitese, Szamitas Technika, Budapest, October 1981. P. 4- 12. 74. Aladyev V. Z. Homogeneous Structures in Engineering Scien- ces. Proc. 19-th Annual Meeting Society of Engineering Scien- ce, Inc., University of Missouri-Rolla (October 1982). P. 45-56. 75. Aladyev V. Z. The General Modern Problems in the Mathema- tical Theory of Homogeneous Structures. Abstracts Intern. Workshop. PARCELLA-82. -Berlin, 1982. P. 1-2. 76. Aladyev V, Z. Homogeneous Structures in Mathematical Mo- delling. The 4-th Intern. Conf, on Math. Modelling, Zurich (Au- gust 1983). P. 10-15. 77. Aladyev V. Z. New Results in the Theory of Homogeneous Structures. Beitrage zur Theorie der Polyautomaten. Informatik- Skripten, No. 8, Braunschweig, 1984. P. 3-15. 78. Aladyev V. Z. New Results in the Theory of Homogeneous Structures. MTA Szamitastechnikai es. Autom. Tanulmanyok, 158. - Budapest, 1984. P. 3-14. 79. Aladyev V. Z. A Criterion of Nonconstructibility in Homogeneo- us Structures. PARCELLA-84rBerlin, 1984. P. 1-3. 80. Aladyev V. Z. A Few Results in the Theory of Homogeneous Structures. Mathematical Research. Band 25. Akademie-Ver- lag. - Berlin, 1985. P. 168-175. 81. Aladyev V. Z. Solutions of a Number of Problems in the Theory of Homogeneous Structures. TR-040684.P/A Silikaat-Tallinn, 1985. 80 p. 82. Aladyev V. Z. Recent Results on the Theory of Homogeneous Structures. TR-041285. P/А Silikaat.-Tallinn,1985. 25 p. 83. Aladyev V. Z., Zinkevich T. G. Homogeneous Structures. TR-1285. P/А Sitikaat.-Tallinn, 1985. 30 p. 84. Aladyev V. Z. Recent Results in the Theory of Homogeneous Structures. Mathematical Research. Band 28. PARCELLA-86. Akademie-Verlag. - Berlin, 1986. P. 30-48. 85. Aladyev V. Z. Recent Results in the Theory of Homogeneous Structures. MTA Szamitastechn. es Autom., 185.-Budapest, 1986. P. 261-280. 86. Aladyev V. Z. Recent Results on the Theory of Homogeneous Structures. Lecture Notes in Computer Science, Band 281, Springer-Verlag. Heidelberg, 1986. P. 110-128. 87. Aladyev V. Z. Homogeneous Structures in Mathematical Mo- delling. The 6-th Intern. Conf, on Math. Modelling. Book of Ab- stracts. Washington University-St.-Louis, 1987. P. 326-330. 88. Aladyev V. Z. Survey on Some Theoretical Results and Ap- plicability Aspects in Parallel Computation Modelling. J. New Generation Comp. Sys., 1988, 1, No. 4. P. 307-317. 89. Aladyev V. Z. A Solution of the Steinhays’s Combinatorical Problem. Appl. Math. Letters, 1988, No. 1. P. 11-12. 90. Aladyev V. Z. Recent Results in the Homogeneous Structures / New Trends in Computer Science.-Amsterdam, 1988. P. 3-54.
91. Aladyev V. Z. Recent Results on the Theory of Homogeneous Structures / New Approaches to Parallel Processing. Akade- mie-Verlag. - Berlin, 1988. P. 128-147. 92. Aladyev V. Z., Krasnoproshina A. A., Kryschanovskii V. V. Un- solved Theoretical Problems in Homogeneous Structures. The Intern. Workshop PARCELLA-88.-Berlin, 1988. P. 33-49. 93. Aladyev V. Z. An Algebraical System for Polynomial Represen- tation of К-Valued Logical Functions. Appl. Math. Letters, 1988, 1, No. 3. P. 207-209. 94. Aladyev V. Z. Survey on Homogeneous Structures. Tech. Rept, No. 3005/89, MTI.”Massachusetts, Cambridge, 1989, 100 p 95. Aladyev V. Z. The Complexity Problem in Homogeneous Struc- tures. The Intern. Conf. Comp. Sci.-Praga, 1988. P. 42-47. 96. Aladyev V. Z. Computer Investigation of Homogeneous Struc- tures. The Intern. Conf. IMYCS-88, Bratislava, 1988. P. 31-41. 97. Aladyev V. Z. Modelling of Homogeneous Structures, The 7-th Intern. Conf, on Math, and Comp. Modelling. - Chicago, 1989. P. 121-131. 98. Aladyev V. Z., Kryschanovskii V. V., Sirodscha I. B. Homoge- neous Structures and Their Applications, Intern. Conf. PAR- CELLA-90. Berlin, 1990. 99. Баринов В. В., Мартыненко Я. Г., Ковалев Г. Б. К проблеме Улама-Аладьева / Параллельные системы обработки ин- формации. - Таллинн: Валгус, 1983. С. 341-346. 100. Мазуренко В. И., Основина Л. В. Итоги научной деятельно- сти группы по параллельной обработке информации и па- раллельным алгоритмам за 1979-1982 годы / Там же. С.347-357. Дополнительная литература 101. Варшавский В. И. Однородные структуры.-М.: Энергия, 1973. 100 с. 102. Чадеев В. М. Самовоспроизведение автоматов.-М.: Маши- ностроение, 1973. 70 с. 103. Бандман О. Л., Ачасова А. А., Пискунов В. В. Методы парал- лельного микропрограммирования.-Новосибирск: Наука, 1981. 120 с. 104. Кудрявцев В. Б., Алешин С. В., Подколзин А. С. Введение в теорию автоматов. М.: Наука, 1985. 250 с. 105. Rozenberg G., Penttonen М., Salomaa A. Bibliography of L-Sy- stems. Theor. Comp. Sci. 1977, 5. P. 339-354. 106. Von Neumann J Theory of Self-Reproducing Automata (Ed. A. W. Burks), University of Illinois Press, Urbana, 1966. 400 p. 107 Apter M. J. A Formal Model of Development II Изв. АН ЭССР. Физ.-мат., 1973, 22, №3 C. 84-94. 108. Essay on Cellular Automata (Ed. A. W. Burks), University of Illinois Press, Urbana,1970 320 p.
109 Codd E. F Cellular Automata, Academic Press. - N.-Y..1968. 210 p. 110. Ulam S. A Collection of Mathematical Problems. Interscience Publishers.- N.-Y..1960. 186 p. 111. Smith A. R. Cellular Automata Theory. Tech. Rept, No. 2, Stanford University-Stanford, 1970. 112. Ostrand T. J. Property Preservation by Tessellation Automata. Tech. Rept. No. 17, The State Univ, of New Jersey, 1972. 113. Lieblein E. A Theory of Pattern in Two-Dimensional Tessel- lation Space. Ph. D. Thesis. University of Pennsylvania, 1968. 114. Yamada H., Amoroso S. Structural and Behavioural Equiva- lences of TessellatioiV/Automata. Inf. and Contr., 1971, 18. P. 121-142. 115. Banks E. R. Information Processing and Transmission in Cel- lular Automata. Ph. D. Thesis. MIT.-Massachusetts, 1971. 116. Proceedings of the First Intern. Symp. on USAL.-Tokyo, 1975. 400 p. 117. Studies on Cellular Automata. Research Institute of Electri- cal Communication-Tokyo, 1975. 328 p. 118. Cole S. N. Real-Time Computation by Iterative Arrays of Fini- te-State Machines. Ph. D. Thesis. Harvard University, 1964. 119. Proceedings of Conf, on Formal Languages, Automata and Development. Amsterdam, The Netherlands (March-April, 1975). 240 p. 120. Bellman R. Can Machine Think? Pergamon Press.- N.-Y..1978. 228 p. 121. Bellman R. An Introduction to Artificial Intelligence. Boyd and Fraser Publ. Co., 1978. 246 p. 122. Vollmar R. Algorithmen in Zellularautomaten. B. G.Teubner. - Stuttgart, 1979. 180 p. 123. Wunsch G. Zellulare Systeme. Academie-Verlag.-Berlin, 1977. 316p. 124. Automata, Languages, Development (Ed. A. Lindenmayer and G. Rozenberg), Amsterdam, The Netherlands, 1976. 412 p. 125. Theory and Application of Cellular Automata (Ed. S. Wolfram), World Scientific. - N.-Y.J986. 246 p. 126. Cellular Automata (Ed. D. Farmer, T. Toffoli, S. Wolfram), North-Holland, 1984. 286 p. 127. Toffoli T., Margolus N. Cellular Automata Machines. MIT Press, 1987. 255 p. 128. Wolfram S. Computation Theory of Cellular Automata, Com- mun. Mathem. Phys., 1984, 96. P. 15-57. 129. Parallel Processing by Cellular Automata and Arrays (Ed. T. Legendi, D. Parkinson, R. Vollmar and G. Wolf), North-Hol- land, 1988. 346 p. 130. PARCELLA-84. Mathematical Research. Band 25. Akademie- Verlag.- Berlin, 1984. 334 p. 131. PARCELLA-86. Mathematical Research. Band 29. Akademie- Verlag - Berlin, 1986. 420 p.
132. PARCELLA-86. Mathematical Research. Band 48. Akademie- Verlag.- Berlin, 1988. 512 p. Исследовательские группы по TOC и ее приложениям 1. Аладьев В. 3.: Проектно-технологический институт Госстроя ЭССР, Таллинн 200038, Партизани 13-75 2. Бандман О. Л.: Вычислительный центр СО АН СССР, Новоси- бирск 3. Барздинь Я. М.: Латвийский государственный университет, Рига 4. Варшавский В. И.: Электротехнический институт, Ленин- град 5. Каляев А. В.: Радиотехнический институт, Таганрог 6. Кудрявцев В. Б.: Московский государственный университет, Москва 7. Lindenmayer A.: University of Uttrecht, Utrecht, The Nether- lands 8. Yamada H.: University of Tokyo, Tokyo, Japan 9. Burks A. W.: University of Michigan, Ann Arbor, USA 10. Apter M. J.: University College, Cardiff, Great Britain 11 Wolf G.: Zentralinstitut fur Kybernetik, Berlin, DDR 12. Butler J. T.: Northwestern University, Evanston, USA 13. Vollmar R.: Technischen Universitat, Braunschwieig, FRG 14. Wunsch G.: Technische Universitat, Dresden, DDR 15. Legendi T.: Cellware Compam Ltd., Budapest, Hungary 16 Nishio H.: Kyoto University, Kyoto, Japan 17 Salomaa A.: University of Turku, Turku, Finland 18. Maruoka A.: Tohoku University, Sendai, Japan 19 Toffoli T.: Massachusetts Institute of Technology, USA 20 Kobayashi K.: Tokyo Institute of Technology, Tokyo, Japan 21 Smith A. R.: Stanford University, Stanford, USA 22. Boghosian B.: Thinking Machines Corporation, Cambridge, USA 23. Wolfram S.. Los Alamos National Laboratory, Los Alamos, USA 24 Honda N.: Toyohashi University of Technology, Toyohashi, Japan 25. Mukhopadhyay A . The University of Iowa, Iowa City, USA
ЛИТЕРАТУРА 1. Аладьев В. 3., Краснопрошина А. А., Крижановский В. В., Мартыненко Я. Г. Проектирование программного обеспече- ния персональной ЭВМ ИСКРА 226.-К/. Техника, 1988. 255 с. 2. Аладьев В. 3., Мартыненко Я. Г., Шиленко В. Ф. Архитектура и программное обеспечение персонального компьютера ИСКРА-226~К/. Украинская Советская Энциклопедия, 1988. 150 с. 3. Аладьев В. 3., Сироджа И. Б. Программирование и решение инженерных задач в операционной среде БЕЙСИК персо- нальной ЭВМ ИСКРА-226: Учеб. пособие.-Харьков: ХАИ, 1988. 100 с. 4. Бигдай Л. К., Захаров В. Г. Программное обеспечение пер- сональных компьютеров//Измерения, контроль, автомати- зация, 1986, № 1.С. 17-34. 5. Персональные ЭВМ//ВИНИТИ. Сер. Вычислительная техника, 1986, № 6.120 с. 6. Дудников Е. Е. Развитие персональных компьютеров//При- боры и системы управления, 1986, № 1. С. 34-44. 7. Коммуникационные возможности современных персональ- ных ЭВМ. ТС-2. Средства вычислительной техники и орг- техники. Вып. 5. ИНФОРМПРИБОР-М., 1987. 40 с. 8. Геворкян Г. X., Семенов В. Н. БЕЙСИК - это просто.-М/. Ра- дио и связь, 1989.120 с. 9. Дьяконов В. П. Применение персональных ЭВМ и програм- мирование на языке БЕИСИК.-М.: Радио и связь, 1989. 220 с. 10. Арисава М. Что такое компьютер.-Киев: Выща школа, 1988. 90 с. 11. Соломатин В. В., Матвеева И. Г., Пертечас Э. В. Персональ- ные компьютеры и их использование в непромышленной сфере. ТС-2. Вып. 3. ИНФОРМПРИБОР.-М., 1985. 63 с. 12. Флинт Д. Локальные сети ЭВМ.-М.: Финансы и статистика, 1986. 360 с. 13. Ги К. Введение в локальные вычислительные сети.-М.: Ра- дио и связь, 1986. 176 с. 14. Пакет программ, снижающий затраты на сетевые програм- мы для персональных ЭВМ//Электроника, 1987, т. 60, № 1. С 95-120. 15. Матвеева И. Г., Соломатин В. В. Коммуникационные возмож- ности современных персональных ЭВМ. ТС-2. Вып. 5. ИН- ФОРМПРИБОР-М., 1987. 40 с.
16. Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/ 8088: Архитектура, программирование и проектирование микрокомпьютерных систем.-М.: Радио и связь, 1987, 512 с. 17. Комплект технической документации по персональному профессиональному компьютеру ИСКРА 1030. Министер- ство приборостроения, -средств автоматизации и систем управлениягРязань, 1987. 18. Аладьев В. 3., Осипов О. Б. Введение в архитектуру моде- лей ЕС ЭВМ.-Таллинн: Валгус, 1976. 310 с. 19. Аладьев В. 3., Осипов О. Б. Введение в операционную си- стему ОС/ЕС.-Таллинн: Валгус, 1975. 180 с. 20. Горин В. И. Система отладки программно-аппаратных средств микропроцессорных устройств//Средства связи, 1987, №2. С. 38. 21. Строителев А. Ф., Перееозкина М. В. Резидентное програм- мное обеспечение персональной ЭВМ//Средства связи, 1987, №2. С. 33-38. 22. Маклауд Дж. Трехкратное повышение производительности персональной ЭВМ фирмы DAISY II Электроника, 1987, № 6. С. 59-60. 23. Мануэль Т. Средства векторных вычислений для настоль- ных ЭВМ. Электроника, 1987, № 6. С. 38-40. 24. Новый персональный компьютер MACINTOCH фирмы Ap- ple - конкурент IBM II Электроника, 1987, № 5. С. 9-11. 25. Вулф А., Коул Б. Самый быстродействующий микропроцес- сор в мире II Электроника, 1987, № 5. С. 19-22. 26. Меньшикова Л. А., Тинина Н. В. Отказоустойчивые ЭВМ за рубежом. ТС-2. Вып. 6. ИНФОРМПРИБОР.-М., 1987. 34 с. 27. Киреев Л. Н., Потемкина Т. Е., Чесаков Д. М. Применение баз данных на персональных компьютерах в учреждениях. ТС-2. Вып. 2. ИНФОРМПРИБОР-М., 1988. 45 с. 28. Аладьев В. 3. Однородные структуры: Модель перспектив- ных параллельных вычислительных систем. Докл. Республ. научно-техн. конф. ’’Применение микропроцессоров в на- родном хозяйстве”, Секция 2-Таллинн, 1988. С. 76-78. 29. Пыхтин В. Я. ЕС-1840 - базовая персональная ЭВМ единой системы//Микропроцессорные средства и системы, 1986, № 4. С. 15-16. 30. Погорелый С. Д., Слободянюк А. И., Суворов А. Е., Юра- сов А. А. Персональная ЭВМ НЕЙРОН И9.66//Микропроцес- сорные средства и системы, 1986, № 4. С. 16-19. 31. Books of Abstracts. Sixth Intern. Conf, on Mathematical Mo- delling. Washington University. St.-Louis. USA. 1987. 600 p. 32. Saigal R. An integrated mathematical programming package for personal computers #Там же.С. 120-132. 33. Magel К., Hall M.: Using microcomputers to prototype of mathematical models #Там же.С. 80-87. 34. Rodin L., Salamone D.: The development of a microcomputer based system for vehicle routing and scheduling and its use for solving spatial and temporal problems# Там же.С. 90-95.
35. Shoup T. E. Applied Numerical Methods for Microcomputers.- Prentice-Hall, 1984. 480 p. 36. Chapra S. C., Canale R. P. Numerical Methods for Engineers with Personal Computers-McGraw-Hill, 1985. 386 p. 37 Sihna N. K., Kuszta B. Modeling and Identification of Dynamic Systems.-Van Nostrand-Reinhold, 1983. 512 p. 38. Young P. C. Recursive Estimation and Time Series Analysis.- Springer-Verlag, 1984. 285 p. 39. Косневски Ч. Занимательная математика и персональный компьютер.-М.: Мир, 1987. 192 с. 40. User’s Guide. MS DOS 3.30. IBM Corp, and Microsoft Inc., 1987. 180 p. 41. DOS Referense. Abridged. MS DOS 3.30. IBM Corp, and Micro- soft Inc., 1987, 155 p. 42. Дьяконов В. П. Справочник по алгоритмам и программам на языке БЕЙСИК для персональных ЭВМ.-М.: Наука, 1987. 280 с. 43. Рафаэл Б. Думающий компьютер.-М.: Мир, 1979. 407 с. 44. Мичи Д., Джонстон Р. Компьютер-творец.-М.: Мир, 1987. 300 с. 45. Иоффе А. Ф. Массовые персональные ЭВМ серии АГАТ. Микропроцессорные средства и системы, 1984, № 1.С. 56. 46. Дьяконов В. П. Персональные ЭВМ в аппаратуре и технике эксперимента//Приборы и техника эксперимента, 1986, № 1.С.7. 47. Персональные ЭВМ//ТИИЭР, 1984, № 3. С. 72. 48. Сергеева Т. О. НР-85 - настольная ЭВМ индивидуального пользования Ц Зарубежная радиоэлектроника, 1981, № 10. С. 86. 49. Иванов В, И., Иванов Е. А., Муренко Л. П. Малогабаритные вычислительные комплексы индивидуального пользования II Радиотехника, 1983, № 1. С. 24. 50. Клингман Э. Проектирование микропроцессорных систем.- М.: Мир, 1980.426 с. 51. Krutch J. Experiments in Artificial Intelligence for Small Com- puters.-lndianapolis: Howard Sams,1981. 200 p. 52. Norton P. PC-DOS. Introduction to High-Performance Compu- ting. Prentice Hall. Brady Communication Company, Inc., 1985. 420 p. 53. Параллельная обработка информации и параллельные ал- горитмы (под ред. В. 3. Аладьева).-Таллинн: Валгус,1981. 54. Параллельные системы обработки информации (под ред. В. 3. Аладьева).-Таллинн:Валгус,1983. 340 с. 55. Советов Б, Я., Кутузов О. И., Головин Ю. А., Аветов Ю. В. Применение микропроцессорных средств в системах пере- дачи информациигМ.*. Высшая школа, 1987. 256 с. 56. Гибсон Г., Лю Ю.-Ч. Аппаратные и программные средства микро-ЭВМ.-М/. Финансы и статистика, 1983. 520 с. 57. Микро-ЭВМ (под ред. А. Дирксена)гМ.: Энергоиздат, 1982. 240 с.
58. Уорли Дж. Архитектура и программирование микро-ЭВМ.- М/. Мир, 1984.370 с. 59. Хильбурн Дж., Джулич П. Микро-ЭВМ и микропроцессоры.- М/. Мир, 1979. 120 с. 60. DOS Technical Reference. MS DOS 3.30. IBM Corp and Micro- soft Inc., 1987 210 p. 61. Описание языка БЕЙСИК BASC (SCPX). НП Роботрон. Бюро- машиненверк.-Дрезден, 1984. 200 с. 62. Меньшикова Л. А., Орлова М. А. Интеллектуальный интер- фейс SCSI. ТС-2. Вып. 5, ИНФОРМПРИБОР.—М., 1988. 20 с. 63. Кулаков А. Г., Меньшикова Л. А., Тинина Н. В. Современное состояние и тенденции развития накопителей на оптических и гибких магнитных дисках. ТС-2.Вып. 4, ИНФОРМПРИБОР.- М., 1988. 55 с. 64. Майерс Г. Надежность программного обеспечения-М/. Мир, 1980.360 с. 65. Майерс Г. Искусство тестирования программ.-М.: Финансы и статистика, 1982. 176 с. 66. Муса Дж. Измерение и обеспечение надежности програм- мных средств//ТИИЭР, 1980, 68, № 9. С. 113-128. 67. Кавалерчик Б. Я. Надежность программного обеспечения и условия эксплуатации// Микропроцессорные средства и системы, 1987, № З.С. 20-23. 68. Липаев В. В. Надежность программного обеспечения ACY" М.: Энергоиздат, 1981, 241 с. 69. Norton Р. Inside the IBM PC: Access to Advanced Features and Programming. Prentice-Hall Publishing Comp., 1984. 187 p. 70. Печатающее устройство CM 6329. Инструкция по эксплуа- тации. Комбинат РОБОТРОН, Семмерда, ГДР, 1986. 65 с. 71. Одноплатные микро-ЭВМ за рубежом. ТС-2. Вып. 7. ИН- ФОРМПРИБОР-М., 1988. 19 с. 72. Мелихова Н. А. Новые средства вычислительной техники и оргтехники за рубежом. ТС-2. Вып. 6. ИНФОРМПРИБОР.- М., 1988. Юс. 73. Martorelli W. Р. PC-Based Expert Systems Arrive#DATAMATION, 1988, 1. С. 56-66. 74. Мануэль Т. Активные поиски путей повышения быстродей- ствия компьютеров II Электроника, 1987, № 18. С. 18-22. 75. Скоредов О. Б. Тенденции развития персональных компью- теров в США//Зарубежная электронная техника, 1988, № 2. С. 65-70. 76. Бронин В. Н. Тенденции и прогноз развития микроЭВМ И Электронная техника, 1987, вып. 4. С. 34-46. i 77. Шадрин А. Б. 32-разрядные микросистемы и сети с откры- той архитектурой. ТС-2. Вып. 5. ИНФОРМПРИБОР-М., 1988. 42 с. . 78. Paulin G. Programmieren mit PASCAL. Akademie-Verlag.-ber- lin,1986. 240 p. 79. Standard Software for 16-Bit Microcomputers. VEB Robotron- ProjectrDresden,1988. 60 p.
80. Bongartz K.t Borho W., Mertens D., Steins A. Farbige Parkette - Mathematische Theorie und Ausfuhrung mit dem Computer. Birkhauser-VerlagrBerlin-Boston,1988. 310 p. 81. Magnenat-Thalmann N., Thalmann D. New Trends in Compu- ter Graphics. Springer-Verlag.-Berlin,1988. 215 p. 82. Hall R. Illumination and Color in Computer Generated Imagery. Springer-Verlag.-Berlin,1988. 307 p. 83. Computer Graphics Forum. North-Holland-Amsterdam, 1988. 480 p. 84. Microcomputer Decision Support Systems (Ed. by S. J. Andrio- le). QED Information Science, Wellesley, MA., 1988. 428 p. 85. Carroli D. Advanced MODULA-2. Programming for the IBM PC, XT and AT. North-Holland.-Amsterdam,1989. 315 p. 86. Nicond J. D., Wagner F. Major Microprocessors. North-Holland.- Amsterdam,1987. 200 p. 87. The Software Catalog: Microcomputers. North-Holland.-Am- sterdam,1987. 900 p. 88. Microcomputer Systems: A Compendium (Ed. by T. S. Dillon and К. E. Forward), North-Holland.-Amsterdam, 1989. 620 p. 89. Computer Publications. Catalogue, 1988. North-Holland.-Am- sterdam,1988. 80 p. ' 90. Hewett J., Timms S., d'Aumale G. Commercial Expert Systems in Europe. Ovum Ltd.-London, 1986. 200 p. 91. De Saram H. Programming in micro-PROLOG. Halsted Press.* New-York,1986. 307 p. 92. Работа с компьютером - вторая профессия//Chip, 1988, 8. С. 14-18. 93. Роль компьютеров в современных фантастических филь- Max//Chip, 1988, 8. С. 30-32. 94. 13 недорогих персональных компьютеров типа АТ. Сравне- ние технических характеристик/'СЫр, 1988, 8. С. 54-60. 95. Кунц Р. Сверхкомпактная модель ЭВМ, совместимая с из- делиями фирмы IBM/'Chip, 1988, 8. С. 62-66. 96. Высокопроизводительные микро-ЭВМ фирм IBM и Compaq //Chip, 1988, 8. С. 77-78. 97. Усовершенствованные версии серии Personal System/2 фирмы IBM#Chip, 1988, 8. С. 42-48. 98. Leaflet of Al WARE Inc., Cleveland, Ohio,1987. 400 p. 99. Miklosko J. Specialized parallel computers for artificial intel- ligence: Algorithms and Architectures. J. New Generation Comp. Sys., 1,No. 3. P. 229-241. 100. Aladyev V. Z. Survey on Some Theoretical Results and Appli- cability Aspects in Parallel Computation Modelling. J. New Generation Comp. Sys., 1,No. 4, P. 3-11. 101. Погорелый С. Д., Слободянюк T. Ф. Программное обеспече- ние микропроцессорных систем.-К/. Тэхника,1989. 120 с. 102. Днепровская Т. С. Применение микропроцессоров и микро- ЭВМ в народном хозяйстве. Аналитический обзор.-М.’. ВИНИТИ,1981. 123 с. 103. Бронштейн И. Н., Семендяев К. А. Справочник по матема-
тике,-М.: Наука, 1981.718 с. 104. Amoroso S., Ingargiola G. ADA: An Introduction to Program Design and Coding. Pitman Publishing Inc., Mass., 1985. 353 p. 105. Mac-Allister D. Video-controller VGA transform system PC/AT into desk video-system. Mini-Micro Systems, 1988, No. 3. P. 87-98. 106. Переносная ЭВМ, совместимая с ПЭВМ системы IBM PC. Datamation, 1988, No. 13, 34. P. 80-83. 107. АРМы на базе ОС UNIX и MS DOS, Datamation, 1988, No. 11, vol. 34. P. 100-108. 108. Schmid E. IV., Spitz G., Losch IV. Theoretical Physics on the Personal Computer. Springer-Verlag.-Berlin, 1988. 200 p. 109. Янг С. Алгоритмические языки реального времени.-М.: Мир, 1985.300 с. 110. Форсайт Р. Паскаль для всех.'М.: Машиностроение, 1986. 210 с. 111. Йенсен К., Вирт Н. Паскаль. Руководство пользователей и описание языка.-М.: Финансы и статистика, 1982. 120 с. 112. Вегнер П. Программирование на языке АДАгМ.: Мир, 1983. 310 с. 113. Агамирзян И. Р., Баранов С. Н., Кириллин В. А., Ноздру- нов Н. Р. Язык ФОРТ. Учебное пособие.-Ленинград: ЛГУ, 1984. 40 с. 114. Баранов С. Н., Ноздрунов Н. Р. Язык ФОРТ и его реализа- ции. - М.: Машиностроение, 1988. 160 с. 115. TURBO Pascal. Version 3. User Manual. Borland Inc., 1987. 400 p. 116. TURBO Pascal Tutorial. Borland Inc., 1987. 320 p. 117. Мак-Кракен Д., Дорн У. Численные методы и программиро- вание на ФОРТРАНе. -М.: Мир, 1977. 520 с. 118. Уэзерелл Ч. Этюды для программистов.-М.: Мир, 1982. 225 с. 119. Аладьев В. 3. Теоретические и прикладные аспекты одно- родных структур. В кн.: Методы и средства аналоговой и цифровой обработки информации. - Таллинн: Изд-во АН ЭССР, 1988. С. 76-90. 120. Вулф А. Операционные системы реального времени // Электроника, 1985, 17. С. 46-56. 121. FORTH-83 Standard. Mountain View. Forth Standards View. USA, 1983. 82 p. 122. McCabe С. K. FORTH-83. Evolution Continues. BYTE, 1984, 9, No. 8. P. P. 137-138, 412-415, 418-421. 123. The Journal of FORTH Application and Research, USA. 124. Harris K. The FORTH Philosophy. Dr. Dobb’s J., 1981, 6, No. 59. P. 6-11. 125. Tello E. PolyFORTH and PC/FORTH. BYTE, 1984, 9, No. 12. P.P. 303-310,312,314. 126. Walker R. V., Rather E. D. PolyFORTH. II Reference Manual. FORTH Inc., 1983. 524 p. 127. Lutus P. GraFORTH. User Manual.Borland Inc., 1983. 346 p. 128. Баранов С. H. Стандарты языка ФОРТ.-Л.: ЛИИАН, 1987. 88 с.
129. Боянов К. Л. и др. Професионални компютри.-София: Техни- ка,1986. 224 с. 130. Даниляк Г. Н., Майстренко Л С. Прикладное программное обеспечение персональных ЭВМ.— К.*. УкрНИИНТИ, 1988. 17 с. 131. Microkomputer - Zeitschrift no 5-Munchen, 1986. 150 p 132. Microworld: Software. Application Software. Auerbach Publ 1985. 340 p. 133. PC Magazine, 1986, 5, No. 8. 295 p. 134. PC User All You Need to Know About IBM PC, No 48-London, 1986. 226 p 135. PC Report* A Publication of the Boston Computer Society 5, No 4.-Boston,1986. 51 p 136. Ottensmann J. R. IBM PC SHAREWARE PC-File, PC-Write PC-Talk and ExpressCalc. Blue Ridge. TAB Books, 1987 256 p. 137 Watanabe T., Masada E., Jada K. The Microcomputer Hand- book.-Tokyo.1985 1079 р. 138. Temps Micro* PC and PS et Compatibles. Paris, 1987 106 p 139. Flores J., Tenerman M The Professional Microcomputer Hand- book. Van Nostrad Co.-N. Y., 1986. 881 p. 140. Yasuda P, Frederick V USINY Computers. IBM Version. The Benjamin Publ. Co., Menso Park,1986 428 p. 141 Nowinski W L Image Reconstruction Methods and a Tools, for Their Investigation/^ New Generation Comp. Sys., 1988, 1,No 4. P 327-352. 142. Structured Programming. Springer-Verlag. The Netherlands, 1988.322 p 143 Springer Newsletter Springer-Verlag. The Netherlands, 1980-1988. 144. Stauffer D. et al Computer Sumulation and Computer Algeb- ra. Springer-Verlag.-Berlin,1988. 410 p. 145. Aladyev V. Z. An Algebraical System for Polynomial Represe- ntation of К-Valued Logical Functions. Appl. Math. Lett., 1988 1,No. 3. P. 207-209. 146. IBM PC Software on Course for the 1990s#lnf. and Software Technolog, 1987, 29, No. 7. 147 Die Computer des Jahres 1987 # Chip, 1987, 10. P. 24-32 148. Тинина H. В. Новые средства вычислительной техники за рубежом. ТС-2. Вып. 1. ИНФОРМПРИБОР.-М., 1988. 15 с. 149. Программное обеспечение. НП „Роботрон’.’-Дрезден, 1988. 124 с. 150. Журнал по обработке информации. Ферлаг Техник-Бер- лин,1988. 151. Грогоно А. Программирование на языке ПАСКАЛЬ. - М.: Мир, 1982. 300 с. 152. Тыугу Э. X., Коов М. И., Минц Г. Е. Система программирова- ния МИКРОПРИЗ. - Таллинн: Ин-т кибернетики АН ЭССР, 1987 95 с
153. Supercomputing EUROPE-89. Royal Netherlands Industries Fair. Utrecht. The Netherlands, February, 1989. 220 p. 154. Information and Software Technology. 1988, 30, No. 6. 155. Mosley J. D. Plug-in Boards Let Your Personal Computer Per- form Parallel-Processing Tasks. EDN, 1988, 33, No. 3. P. 89-96. 156. Havranek T., Kouba Z. On Expert System EPROB#J. New Ge- neration Comp. Sys., 1988, 1,No. 1. P. 87-96. 157. Futo I. New Trends in PROLOG Developments and Applica- tions in Hungary//J. New Gen. Comp. Sys, 1988, 1, No. 2. P. 107-132. 158. Knowledge Systems and Prolog: A Logical Approach to Expert Systems and Natural Language Processing (Ed. by A. Walker, M. McCord, J. Sowa and W. Wilson). Addison Wesley Publ. Comp., Reading . Mass., 1987. 475 p. 159. Semik V. P., Filinov E. N. Programming Technology Concept of New Generations Professional Personal Computers//! New Generation Comp. Sys., 1988, 1,No. ! P. 41-47. 160. Zakharov V. G., Landau I. Ya. Future Developments of Perso- nal Computers#! New Gener. Comp. Sys., 1988, 1, No. 1. P. 20-25. 161. The Science of Fractal Images (Eds. by Peitgen H.O and Sav- pe D.). Springer VerlagrNew-York, 1988. 600 p. 162. Davis M. Computability and Unsolvability. McGraw-Hill-New- York, 1958. 226 p. 163. Hopsroft J. E., Ullman J. D. Formal Languages and Their Re- duction to Automata. Addison-Wesley, Reading. MA. 1969. 300 p. 164. Minsky M. L. Computation: Finite and Infinite Machines. Pren- tice-Hall. Englewood Cliffs. N. J. 1967 310 p. 165. Мальцев А. И. Алгоритмы и рекурсивные функции. - М.: Наука, 1965. 400 с. 166. Аладьев В. 3. К теории однородных структур.-Таллинн: Изд-во АН ЭССР, 1972. 250 с. 167. Aladyev V. Z. Mathematical Theory of Homogeneous Struc- tures and Their Applications.-Tallinn: Valgus Press, 1980. 268 p. 168. Aladyev V. Z. et al. Unsolved Theoretical Ptoblems in Homo- geneous Structures. Mathematical Research. Band 48. PAR- CELLA-88. Akademie-Verlag.-Berlin, 1988. P. 33-49. 169. Aladyev V. Z. Homogeneous Structures in Mathematical Modelling. Sixth Intern. Conf, on Mathem. Modelling. Book of Abstracts. Washington University. —St.-Louis, 1987. P. 326-348. 170. Аладьев В. 3. и др. Математическая биология развития. - М.: Наука, 1982. 250 с. 171. Математическая энциклопедия, том 1. - М.: Изд-во Совет- ская Энциклопедия, 1977. С. 50-52. 172. Аладьев В. 3. Теоретические и прикладные аспекты од- нородных структур. Методы и средства аналоговой и циф- ровой обработки информации.-Таллинн: Ин-т кибернети- ки АН ЭССР, 1988. С. 76-90.
173. Aladyev V. Z. A Solution of the Steinhaus’s Combinatorial Problem. Appl. Mathem. Letters. 1988, 1,No. 1, P 11-12. 174. Advanced Programmer’s Guide in dBase III. Ashton-Tate Software Support Center. Culver City. USA,1985. 680 p. 175. Norton P. Inside the IBM PC. Bowie MD. Robert Bradly Co., 1983, 400 p. 176. Short Kenneth L. Microprocessors and Programmed Logic. Englewood Cliffs. Prentice-Hall,1981. 320 p. 177. Dahmke M. Microcomputer Operating Systems. Peterborough. Byte Books, 1982. 228 p. 178. Brown P. J. Writing Interactive Compilers and Interpreters. John Wiley & SonsrN. Y.,1979. 240 p. 179. Zaks R. Introduction to PASCAL. Sybex Inc., Berkeley, 1981 120 p. 180. Zarrella J. Language Translators. Microcomputer Applicati- ons. Suisun City, 1982. 280 p. 181. Ejiogu Lem O. Effective Structured Programming. Petrocelli Books.-N. Y.,1983. 224 p. 182. Date C. J. Database: A Primer Reading. Addison-Wesley, 1983. 300 p. 183. Merrett T. H. Reletional Information Systems. Reston Publi- shing Co., 1984. 200 p. 184. Supercomputers. SARA.~Amsterdam,1984-1989. 185. Li K. System UNIX in Real World#Mini-Micro Systems, 1988, 22, No. 11.P. 22-32. 186. Строителев А. Ф., Перевозкина M. В. Резидентное програм- мное обеспечение персональной ЭВМ#Средства связи, 1987, № 2. С. 33-38. 187. Мюллер Д., Вестфаль Н. Программное обеспечение для персональной ЭВМ СМ 1910 // ВТ социалистических стран, 1987, вып. 22. С. 187-191. 188. The Software Microcomputer Catalog. Elsevier.-N. Y., 1987. 700 p. 189. McCroskey M., Mellin M. The Book of IBM Software. Van Nuys. Arrays, 1986. 658 p. 190. Computers Today, 1987, 4, No. 5. 191. A Symposium on PCs. Geophys. Leading Edge Explor., 1988, 7, No. 11. 192. Rodarmor W. How the PC Changed My Life, PC World, 1988, 6, No. 1.P. 44-50. 193. Held G. IBM PC and PC XT. User’s Reference Manual. Hayden Booksrlndianapolis,1987. 479 p. 194. Byers T. J. Surprise Cheak 386s Deliver. PC World, 1988, 6, No. 2. P. 126-137. 195. Knorr E. Deskpro Pushes the Limit. PC World, 1988, 6, No. 2. P. 120-125. 196. Кокорин В. С., Попов А. А., Шишкевич А. А. Персонал ные ЭВМгМ.: Высшая школа, 1988. 158 с. 197. Иоффе А. Ф. Персональные ЭВМ в организационном управ- лении.-М.: Наука, 1988. 207 с.
198. Морисита И. Аппаратные средства микро-ЭВМ.-М.: Мир, 1988. 280 с. 199. Пыхтин В. Я. Профессиональная ПЭВМ ЕС-1841#Механиза- ция и автоматизация упр., 1988, № 4. С. 3-7. 200. Лопато Г. П. Микро-ЭВМ, кн. 5.-М/. Высшая школа, 1988. 143 с. 201. Pham D. Т. Expert Systems in Engineering. University of Birmingham Press,1988. 450 p. 202. Expert Systems. Online, 1988. No. 11.P. 6-8. 203. Brodie L. Starting FORTH. Prentice Hall, 1981. 200 p. 204. Brodie L. Thinking FORTH. Prentice Hall, 1984. 180 p. 205. Ting С. H. Inside F83, Of fete Press, 1306 South B. St., San Ma- teo, CA 94402, USA,1989. 206. FORTH Interest Group, P. O. Box 8231, San Lose, CA, USA, 1989. 207. TECH Help. The Electronic Manual. Flambeaux Software, 1147 East Broadway Street Suete 56, CA 91205, USA, 1987 208. Kocak H. Differential and Difference Equations through Com- puter Experiments. Springer-Verlag, Heidelberg, 1988. 305 p. 209. Хеннинг Г. Персональная ЭВМ сверхвысокого быстродей- ствия//СОМ, 1988, 23, No. 5. Р.45-47 210. Lieuwe Sytse de Jong: Engineering of Expert Systems#lnf. and Software Technology, 1988, 30, No. 7. P. 418-426. 211. Computer Design, 1988, 27, No. 21. P. 102-106. 212. Chip, 1988, 47, No. 7. 213. ML-Cellprocessors. Cellware Ltd., Csalogany u. 30-32, 1015 Budapest, Hyngary, 1989. 214. Halpern P., Deiw J. Use of Workstation IBM PS/2 Model 80 for Interactive Computations//IBM Systems Journal, 1988, 27, No. 4. P. 561-569. 215. Gurevich Yu. Algorithms in the World of Bounded Resources. The Universal Turing Machine - A Half-Century Survey, 1988, P. 407-416. 216. Абинов А. Г. Человек или машина? Возможности вычисли- тельных машин.-М.: Знание, 1989.48 с. 217. Кучура Н. А., Хорош М. B.L Цагельский В. И. Персональные ЭВМ Единой системы. БЕЙСИК.-М.: Финансы и статистика, 1988. 207 с. 218. Современный компьютер.-М.: Мир, 1986. 300 с. 219. Морилл Г. БЕЙСИК для ПК ИБМ.-М.: Финансы и статистика, 1987. 228 с. 220. Пул Л. Работа на персональном компьютере.-М.: Мир, 1986. 383 с. 221. Запольский А. П. Персональные компьютеры Единой систе- мы ЭВМгМ.: Финансы и статистика, 1988. 143 с. 222. Saaty Т. L. Decision Making for Leaders. Van Nostrad Rein- hold, 1988. 291 p. 223. Saaty T. L. The Analytic Hierarchy Process. McGraw-Hill.- N.Y.,1987. 296 p. 224. Dyer R. F. et al. Marketing Decisions Using Expert Choice.
DSS Inc.-Pittsburgh, 1988, 248 p. 225. Expert Choice. Trial Version. DSS Inc.-Pittsburgh, 1988. 248 p. 226. Borland International Book Bibliography. Borland intern. Inc., Scotts Valley, CA, January, 1989. 5 p. 227. БАНК программных средств. Каталог. НПО Центрпрограм- мсистемгКалинин, 1989. 50 с. 228. Научные исследования в САПР. НПО Центрпрограммси- стем.~Калинин,1988. 45 с. 229. САПР в машиностроении. НПО Центрпрограммсистем.-Ка- линин, 1987. 72 с. 230. Гнездилова Г. Г. Персональный компьютер в играх и зада- чахгМ.: Наука» 1988. 192 с. 231. Hearn D., Bal М. Р. Computer Graphics. Englewood Cliffs. Prentice-HallrN. Y., 1986. 380 p. 232. Ahl D. H. More Basic Computer Games.-New Jersey, 1979 185 p. 233. Sawuch M. R., Summers T. A. 1001 Things To Do With Your IBM PC. TAB Books Inc., 1984. 400 p. 234. Sproul! R. F. et al. Device Independent Graphics with Exam- ples from IBM PC. McGraw-Hill Book Co., 1985. 320 p. 235. Quotation on PC Compatible with IBM PC/XT/AT. Beifang Comp. Co.-Hong Kong, 1988. 12 p. 236. Turbo-C. Reference Guide. Borland Inc., Scotts Valley, 1988. 612 p. 237. Turbo-C. User’s Guide. Borland Inc., Scotts Valley, 1988. 425 p. 238. Sprint. Alternative User Interface. Borland Inc., Scotts Valley, 1988. 34 p. 239. Sprint. Reference Guide. Borland Inc., Scotts Valley, 1988. 388 p. 240. Sprint. Advanced User’s Guide. Borland Inc., Scotts Valley, 1988, 504 p. 241. Getting Started With QUATTRO. Borland Inc., Scotts Valley, 1987. 120 p. 242. QUATTRO. Reference Guide. Borland Inc., Scotts Valley, 1987. 333 p. 243. QUATTRO. User’s Guide. Borland Inc., Scotts Valley, 1987 437 p. 244. The PC CAD/CAM, CAE Software and Systems Directory. Management Rountable, Inc., Chestnut Hill, 1988. 142 p. 245. MathCAD. Quick Reference. MathSoft Inc.-Cambridge, 1987, 420 p. 246. Lockwood R. The Genealogy of BASIC//Creative Computing, 1984, 10, No. 11. P. 44-50. 247. Крамм P. СУБД dBase 2 и dBase 3 для персональных ком- пьютеров.-М.: Финансы и статистика, 1988. 320 с. 248. Симпсон Г. Профессиональная работа на персональном компьютере. - М.: Финансы и статистика, 1988. 222 с. 249. Лэнгсам И. Структуры данных для персональных ЭВМ. - М/. Мир, 1989.400 с.
250. ГОСТ 27787-88. Язык программирования БЕЙСИК (Срок действия с 1.07.89 до 1.07.94.). 251. Balazs /. Random Number Generation on Personal Computers. Mat. Laook 33. 1986, No. 1-3. P. 123-141. 252. Jancar S. BASIC. Gewohnliche Differentialgleichungen. Hrsg. von Hansrobert KohlerrBraunschweig,1987. 237 p. 253. Harding R., Quinney D. A Simple Introduction to Nuberical Analysis. A Computer Illustrated Text. Adam Hilder —Bristol, 1986. 125 p. 254. Schulze K., Crver C. NAXPERT - A Prototype Expert System for Numerical Software. SIAM J. Sci. Stat. Comput. 1988, 9, No. 3. P. 503-515. 255. AUTOSKETCH. User Guide. AutoDesk Inc.-London, 1987. 115 p. 256. TURBO Languages. Borland Inc., Scotts Valley, 1988. 11 p. 257. InfoMouse. User Manual. U. S. Government Printing Office.- Wachington,1989. 312 p. 258. MM 1812 Data Tablet. Technical Reference. SummaGraphics Corp., Fairfield,1985. 234 p. 259. AutoCAD. AutoDesk Ltd.-London,1987. 345 p. 260. Personal Computer PC-4501. Operational Manual. Sharp Corp., MahwahrN. Y„ 1987. 125 p. 261. Program of the Seventh Intern. Conf, on Math, and Comput. Modelling. lllinoisrChicago,1989. 32 p. 262. Lochner H. APL2 Handbuch. Springer Verlag,1989. 331 p. 263. Turbo-Pascal 5.5 Object-Oriented Programming Guide. Borland International Ind., Scotts Valley, 1989. 124 p. 264. Turbo-Pascal 5.5. User’s Guide. Borland International Ind., Scotts Valley, 1989. 360 p. 265. Turbo-Pascal 5.5. Reference Guide. Borland International Inc., Scotts Valley, 1989. 500 p. 266. Inside Turbo Pascal. The Cobb Group’s Journal. Louisville. Kentucky, 1990. 267. Journal of Object-Oriented Programming. Suite 503. New-York. N.Y. 10017. 268. Автоматизированные системы проектирования и управле- ния. Зарубежный опыт. Вып. 1-24. ВНИИТЭМР-М., 1989. 269. Автоматизированные системы проектирования и управле- ния. Обзорная информация. Вып. 3. ВНИИТЭМР-М., 1989. 270. Constantinides A. Applied Numerical Methods with Personal Computers. McGraw-Hill Book Company. N. Y., 1987. 626 p. 271. Fiebel W. Turbo Pascal Disk Tutor. Osborne/McGraw-Hill,1989. 250 p. 272. Stroustrup B. The C++ Programming Language. Addison- Wesley, 1986. 320 p. 273. Broad W. Star Warriors. New-York,1985. 289 p. 274. Вычислительная техника. Терминология. - M.: Изд-во Стан- дартов, 1989. 168 с. 275. Paradox 3.0. The Relational Database Management System. Borland International Inc., Scotts Valley, 1989.
276. SideKick Plus. The Professional Desktop Manager. Corland International Ind., Scotts Valley, 1989. 277. SuperKey. Keyboard Utility and Macro Processor. Borland In- ternational Ind., Scotts Valley,1989. 278. Turbo Lightning. Electronic Spelling Checker and Thesaurus. Borland International Inc., Scotts Valley, 1989. 279. Borland’s Debugger Outshines Microsoft’s Codeview. PC Week, May 15, 1989. 280. Backgrounder. Borland International Inc., Scotts Valley. Sep- tember,1989. 15 p. 281. Supercomputer European Watch. ASERA. The Netherlands. September, 1989. 16 p. 282. Turbo Assembler. User’s Guide. Borland International Inc., Scotts Valley, 1989. 574 p. 283. Turbo Assembler. Reference Guide. Borland International Inc., Scotts Valley, 1988. 288 p. 284. Turbo Debugger. User’s Guide Borland International Inc., Scotts Valley, 1988, 356 p. 285. Kaltofen £, Watt S. M. Computers and Mathematics. Springer- Verlag. Berlin,1989, 326 p. 286. Johansson A. L. et al. Prolog Versus You. An Introduction to Logic Programming. Springer-Verlag. Berlin 1989, 297 p. 287. Thomson N. D. APL Programs for the Mathematics Classroom. Springer-Verlag. Berlin,1989. 185 p. 288. Developer’s Toolboxes and Tutorials for Turbo Language Series. Barland International Inc., Scotts Valley 1988. 289. Fortran-87 User’s Guide. Version 3.4. Microsoft Corp., 1988. 524 p. 290. Math CAD. Version 2.5. User’s Guide. Math Soft Inc., Canbrid- ge, 1989. 263 p. 291. Math CAD. Version 2.5. Reference. Math Soft Inc., Cambridge, 1989. 50 p. 292. Math Soft User’s Journal. Math Soft Inc., Cambridge, 1989. 47 p. 293. Math CAD. Version 2.5. Quick Reference. Math Soft Inc., Cam- bridge, 1989. 12 p. 294. Math CAD. Version 2.5. Release Notes. Math Seft Inc., Cam- bridge, 1989. 5 p. 295. Super Computing Europe. Second European Exhibition and Conperence on Supercomputing. University of London Compu- ter Centre. London, 1990.
Предисловие ................................................. 3 Список сокращений ........................................... 7 1. ВВЕДЕНИЕ................................................. 10 2. АРХИТЕКТУРА СЕМЕЙСТВА ПЭВМ ИСКРА 1030................... 19 2. 1. Назначение и основные технические данные ПЭВМ ИСКРА 1030 . 19 2. 2. Основные внешние устройства ПЭВМ ИСКРА 1030........... 21 2. 3. Принципиальная архитектура ПЭВМ ИСКРА 1030 .......... 29 2. 4. Структура и функционирование центрального процессора. 30 2. 5. Структура и функционирование памяти.................. 36 2. 6. Системный интерфейс ПЭВМ ИСКРА 1030. Сопроцессор арифме- тических вычислений......................................... 38 2. 7. Система ввода-вывода ПЭВМ ИСКРА 1030 ................ 41 □.АРХИТЕКТУРА И ФУНКЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПЭВМ ИСКРА 1030 44 3.1. Состав программного обеспечения ПЭВМ ИСКРА 1030 ..... 46 3.2. Системное программное обеспечение ПЭВМ ИСКРА 1030 ... 46 3.3. Сервисные программные средства ПЭВМ ИСКРА 1030......... 52 3. 4. Обслуживающие программные средства ПЭВМ ИСКРА 1030 . . 54 3. 5. Прикладное программное обеспечение. Пакеты программ ... 55 4. ОПЕРАЦИОННАЯ СИСТЕМА АДОС ДЛЯ ПЭВМ ИСКРА 1030 ........... 59 4. 1. Характеристика и загрузка системы АДОС............... 59 4. 2. Работа с клавиатурой ПЭВМ в режиме АДОС.............. 61 4.3. Файловая структура системы АДОС........................ 63 4. 4. Описание команд, обеспечиваемых системой АДОС......... 67 4. 4. 1. Основные сведения о командах системы АДОС...... 67 4. 4. 2. Сервисные команды системы АДОС................. 72 4. 4. 3. Информационные команды системы АДОС............ 85 4. 4. 4. Команды управления системой АДОС............... 89 4. 4. 5. Команды управления вводом-выводом.............. 98 4. 4. 6. Пакетные команды системы АДОС..................107 4.4.7. Команды работы с файлами........................113 4. 5. Работа со строковым редактором edlin.................122 4.6. Структура операционной системы АДОС....................130 5. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ БЕЙСИК ПЭВМ ИСКРА 1030................................................ 140 5. 1. Общие сведения о языке БЕЙСИК ПЭВМ ИСКРА 1030 ...... 140 5. 2. Загрузка интерпретатора языка БЕЙСИК и работа с клавиатурой ПЭВМ ИСКРА 1030 ............................................141 5. 3. Ввод и редактирование БЕЙСИК-программ................147 5. 4. Общее описание основных понятий и возможностей языка БЕЙСИК......................................................154 5.5. Описание основных элементов языка БЕЙСИК.............157 5. 6. Описание команд языка БЕЙСИК.........................173 5.7. Описание операторов языка^ БЕЙСИК....................181 5.7. 1. Операторы языка БЕЙСИК для управления системой . . 183 5.7.2. Базовые операторы языка БЕЙСИК..................195
5.7.3. Операторы создания многомодульных БЕЙСИК-прог- рамм ...................................................232 5.7.4. Операторы языка для обработки прерываний, особых и аварийных ситуаций в БЕЙСИК-программах..................246 5. 7. 5. Операторы работы с файлами данных на дисковых томах. . 260 5. 7. 6. Операторы работы с коммуникационными файлами и дру- гие операторы ввода-вывода..............................290 5. 7.7. Операторы генерации звуковых сигналов..........294 5. 7. 8. Операторы работы с графической информацией....301 6. ПРИМЕРЫ ОФОРМЛЕНИЯ БЕЙСИК-ПРОГРАММ И СЕРВИСНЫЕ ПРОГРАММНЫЕ СРЕДСТВА ДЛЯ ПЭВМ ИСКРА 1030 ............................... 317 6.1. Примеры оформления сервисных БЕЙСИК-программ..........319 6. 2. Моделирования абстрактных вычислительных машин последова- тельного и параллельного действия............................ 337 7. РАСШИРЕНИЕ ВЫРАЗИТЕЛЬНЫХ СРЕДСТВ ЯЗЫКА БЕЙСИК ИСКРА 1030.349 7. 1. Описание дополнительных средств языка БЕЙСИК..........350 7.2. Принцип программной реализации пакета <parcella>.......357 8. ОПИСАНИЕ И РАБОТА С ПАКЕТОМ ПРОГРАММ <РЕДАКТОР ТЕКСТОЕО..366 8. 1. Общая характеристика пакета..........................366 8. 2. Работа с пакетом в режиме меню........................367 8. 3. Работа с пакетом в режиме редактирования..............370 8. 4. Работа с пакетом в режиме печати...................... 377 9. МИНИМАЛЬНАЯ БАЗОВАЯ СИСТЕМА MINIDOS......................384 9. 1. Общая характеристика системы minidos..................384 9. 2. Описание основных характеристик и компонент системы minidos...........................•.....................385 9. 3. Описание работы с компилятором Turbo-Pascal...........389 9. 4. Описание работы с FORTH-системой......................395 9. 5. Программа вывода текстовых файлов.....................401 10. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНЫХ ЭВМ................403 10.1. Операционные системы ПЭВМ.............................403 10.2. Инструментальные средства и системы программирования . . .408 10.3. Пакеты прикладных программ............................415 Заключение..................................................428 Приложения..................................................431 Приложение 1. Кодовая таблица ПЭВМ ИСКРА 1030..............431 Приложение 2. Структура информации на магнитных дискетах и форматы дискет..............................................432 Приложение 3. Различия в описаниях системы АДОС, Редактора тек- стов и интерпретатора языка БЕЙСИК с их реали- зациями .................................................... 435 Приложение 4. Перечень команд операционной системы АДОС . . 439 Приложение 5. Служебные слова языка БЕЙСИК ПЭВМ ИСКРА 1030. 442 Приложение 6. Перечень функциональных конструкций, базирую- щихся на встроенных функциях языка БЕЙСИК...................442 Приложение 7. Основные коды функций управления печатью......443 Приложение 8. Таблица представления в ПЭВМ ИСКРА 1030 букв русского алфавита при работе с редактором ФОРТ- системы программирования....................................445 Приложение 9. Листинги пакета программ <parcella>...........446 Приложение 10. Справочная информация по однородным структурам, параллельной обработке информации и програм- мному обеспечению...........................................461 Литература..................................................470
ДЛЯ ЗАМЕТОК
ДЛЯ ЗАМЕТОК
Справочное издание ПРОФЕССИОНАЛЬНЫЙ ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР „ИСКРА-1030” АРХИТЕКТУРА И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Справочное руководство Аладьев Виктор Захарович Шиленко Владимир Федорович Издано по авторскому оригиналу Художественный редактор О. Д. Васильева Репродуцируемый оригинал-макет Н. В. Бойко Операторы: М. А. Михеева, Н. В. Шей ко Корректоры: Г. Д. Лазаренко, Н. В. Полищук, В. я. Резник, М. К. Рудницкая
ИБ № 111 Сдано в набор 20.07.89 г. Подписано в печать 07.02.90. БФ 03014. Формат 84Х1081/э2 Бумага тип. № 1 Гарнитура Цюрих Печать высокая Усл. печ. л. 25,62. Усл. кр-отт. 25,83. Уч.-изд. л. 31,1 Тираж 100000 экз. (I завод 1-50000) Заказ 0-76. Цена 2 р. 20 к. Издательство „Украинская Советская Энциклопеди им. М. П. Бажана, 252601, ГСП, Киев-30, ул. Ленина, 51 Напечатано с оригинала-макета, подготовленного в издательстве „Украинская Советская Энциклопедия" им. М. П. Бажана, на Киевской книжной фабрике, 252054, Киев-54, ул. Воровского, 24.

ПРОФЕССИОНАЛЬНЫЙ ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР КШШ юзо АРХИТЕКТУРА» И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СПРАВОЧНОЕ РУКОВОДСТВО