Текст
                    н. н. Смирнов
ПРОГРАММНЫЕ
СРЕДСТВА
ПЕРСОНАЛЬНЫХ
ЭВМ
Ленинград «Машиностроение»
Ленинградское отделение, 1990


никакого значения не вводится и процесс загрузки продолжается. Один из вопросов к пользователю в процессе инициализации операционной системы может быть связан с определением объема виртуального диска в Кбайт: Туре virtual disk size in Kbytes: Виртуальный диск — это прообраз обычного накопителя на магнитном диске, но как бы созданного в оперативной памяти. Смысл создания виртуального диска состоит в значительном ускорении работы за счет сокращения времени на чтение и запись файлов, поскольку доступ к информации в ОЗУ происходит значительно быстрее, чем доступ к реальному диску. Из практических соображений использование виртуального диска позволяет продлить срок службы дисководов и дискет. Однако надо иметь в виду, что любой сбой питания или процессора разрушает содержание виртуального диска. В качестве «платы» за скорость выступает объем ОЗУ, оставшейся свободной для загрузки программ и размещения данных. Для создания виртуального диска требуется специальная программа, обеспечивающая его работу (драйвер). В большинстве случаев, как показано выше, драйвер запрашивает объем оперативней памяти для виртуального диска у пользователя. Это число можно оценить приближенно. Определяющими факторами являются: ебщий объем оперативной памяти, из которого вычитаются объем памяти операционной системы (приблизительно 60 Кбайт) и объем памяти для прикладных программ (оценивает пользователь). Остальная часть ОЗУ может быть использована иод вир- туалы.ый диск. При нажатии клавиши ВВОД виртуальный диск не создается. В некоторых ПЭВМ внутренние часы и календарь не работают после выключения питания. Поэтому операционная система при каждом запуске устанавливает текущее время и дату по желанию пользователя. Как было сказано, можно игнорировать установку времени и даты, нажимая клавишу ВВОД. Если же установка указанных параметров необходима, то следует придерживаться формата, который можно определить из сообщения операционной системы. Напоминаем, что при вводе даты нужно отличать европейский стандарт [день ], [месяц], [год] от американского [месяц], [день], [год]. В большинстве версий ОС, известных у нас в стране, используется, как правило, европейский стандарт. 16
Операционная система располагается на диске, на 0,1,..., 5 дорожках, называемых системными. Они недоступны для пользовательских программ, что гарантирует сохранность операционной системы. По завершении загрузки операционная система переходит в ожидание ввода команд с клавиатуры, помещая на экране приглашение А >. Оно показывает готовность к приему команд, причем активным дисководом, т. е. дисководом, к которому будет обращаться операционная система, является левый дисковод. Правый дисковод можно активизировать с помощью ввода с клавиатуры команды В: (двоеточие является отличительным признаком для системы, по которому она «понимает», что В — это адрес дисковода, а не имя программы). После отработки этой команды па дисплее появляется сообщение В >. Набор команд на клавиатуре можно выполнять на любом регистре, так как после нажатия клавиши ВВОД строчные буквы будут преобразованы в прописные. Для стирания символа в позиции курсора можно использовать клавишу «*-». Одновременное нажатие клавиши CTRL (в дальнейшем будет обозначаться символом ~) и некоторых других вызывает следующую реакцию системы: ~Н—стирание знака в позиции курсора; " J — перевод курсора на следующую строку без окончания ввода команды, рекомендуется для набора длинных команд; ~С — отмена текущей команды; "Р — вывод терминальных сообщений на печатающее устройство; для отмены режима следует повторное нажатие клавиши; ~S — приостанавливает вывод на экран дисплея, повторное нажатие клавиши, отменяет режим. После нажатия клавиши ВВОД ввод команды считается законченным, введенная команда проверяется системой на правильность и затем выполняется. Некоторые команды могут иметь параметры. Следует иметь в виду, что общая длина командной строки не должна превышать 127 символов. Команда отделяется от параметров одним пробелом. Как правило, команды операционной системы вызывают обращение к дисководу для считывания и/или записи файлов с дискеты или на дискету. Поэтому необходимо подробнее остановиться на понятии файла. 17
1.3. Файлы и команды операционной системы Файл — это именованная область внешней памяти для хранения программ и данных. В файле могут содержаться текстовые документы, числовые данные, закодированная табличная, графическая и другая информация. Файл для ПЭВМ — это основной информационный объект («видимый» для пользователя), с которым работает операционная система. Все файлы каждой дискеты регистрируются операционной системой в справочнике (directory), который можно иначе представить как оглавление дискеты. .Минимальный объем файлов на дискете — одна зона, максимальный — объем всей дискеты. Объем памяти на дискете и величина зоны (сектора) определяются в байтах и зависят от форматизации (разметки) дискет. Подробнее эти вопросы рассматриваются в гл. 2. Обозначение файла состоит из имени файла и типа файла (расширения), которые отделяются точкой. Имя файла — произвольная комбинация не более восьми символов, тип файла — произвольная комбинация не более трех символов. Запрещается использовать в обозначении файла, то есть в его имени и типе, следующие символы: <>.:; = ?#. Обозначение файла должно быть уникальным для каждого файла. Как правило, файлы, относящиеся к одной задаче, имеют одинаковые имена, но разные типы, например: PROG.COM — программный файл в машинных кодах; PROG.OBJ — программный файл в объектных кодах; PROG.BAS — программный файл на исходном языке; PROG.DBF — файл данных для обработки программой. Тип файла может отсутствовать, однако необходимо учитывать, что некоторые программы предполагают определенные стандартные обозначения типов файла, что позволяет опускать эти символы при наборе команд. В случае применения нестандартных комбинаций символов для обозначения типа файла набор этих символов является обязательным. Стандартные обозначения типов файлов позволяют определять характер файлов чисто визуально. Используются следующие стандартные обозначения типов файлов: СОМ — файл-программа в машинных кодах, готовая к загрузке и выполнению; такие файлы формируются, 18
как правило, из файлов типа OBJ в результате работы программы редактора связей; OBJ — файл-программа в объектных кодах; эти файлы формируются в результате работы компиляторов; BAS — файл-программа на исходном языке Бейсик; FOR — то же, на языке Фортран; MAC — то же, на языке Макроассемблер; С — то же, на языке Си; PRX — файл-листинг; формируется, например, при работе компилятора при задании дисковода в качестве устройства для вывода; ТХТ — текстовые файлы-документы; OVR — оверлейные файлы (загружаются в оперативную память в процессе работы программы); ВАК — файл-копия; формируется в результате записи на дискету файла с именем, которое уже есть в справочнике; расширение ВАК присваивается старому файлу. Примеры обозначения файлов: FORMAT.COM — фай л-программа форматизации дискет; PR.BAS — файл-исходный текст программы на языке Бейсик; REFOR.TXT — текстовый файл. В обозначении файлов могут использоваться символы «?» и «*». Символ * может использоваться на месте имени файла или типа для обозначения группы файлов с любыми именами или ti пами. Например: *.СОМ — идентифицирует все файлы с типом СОМ; ВВ1.* — идентифицируются все существующие файлы с именем ВВ1 и любыми расширениями (это могут быть файлы BB1.COM, ВВ1.ВА, ВВ1.ТХТ и др.); *.* — идентифицируются все файлы на дискете. Знак «?» в определенных позициях в имени файла или тина допускает наличие в этой позиции любого символа, например: ABC?.СОМ — идентифицируются файлы ABC1.COM, ABCD.COM и т. д.; ???.ВА — идентифицируются все файлы с типом ВА, у которых имя файла состоит из любых трех символов. Таким образом, для точного задания файлов в операционной системе необходимо указать: тип-устройства : имя-файла.тип-файла При создании файла можно задать атрибуты R/W (чтение и запись) или R/0 (только чтение). Первый атри-
бут означает возможность чтения, изменения и удаления файла. Файлы с атрибутом R/О могут только читаться, удаление и изменение такого файла невозможны без смены атрибута. Стандартным а!рибутом файлов (значением по умолчанию, задаваемым операционной системой) является R/W. Изменение атрибута R/W чтения (записи) можно выполнить, например, с помощью утилит. Устройство, на котором располагается файл, можно не указывать, если файл расположен на активном устройстве. Существенным отличием операционной системы MS- DOS, начиная с версии 2.0 и старше, от более ранних версий, а также от ОС СР/М является расширение понятий файла и директория, что позволяет поддерживать иерархическую структуру хранения файлов на дисках. Такой подход хорошо зарекомендовал себя в системе UNIX и позволяет составлять дерево каталогов, которые находятся на разных уровнях. В соответствии с этим «деревом» дисковое пространство также разбивается на несколько областей. При этом достигается несколько целей: выделяются все файлы, относящиеся к какой-либо программной среде, например, к системе Lotus; распределяется дисковое пространство между разными пользователями, которые становятся полностью не связанными при манипуляциях файлами, выборе имен и т. д.; выделяются в отдельные группы логически однородные файлы, например: файлы- документы или файлы-исходные тексты программ и т. д. На практике такой подход дает эффект только при наличии жесткого диска большой емкости. Гибкие диски, как правило, являются индивидуальными носителями для каждого пользователя. Команды пользователя можно разделить на команды ОС и команды вызова исполняемых программ. Для работы с файловой системой в MS-DOS используются следующие команды операционной системы: DIR — вывод содержимого директория на экран (принтер); COPY — копирование файлов; REN — переименование файла; DEL — удаление файлов; TYPE — печать на экран (принтер) содержимого файла; MKDIR (MD) — создание нового директория; CHDIR (CD) — смена текущего директория; RMDIR (RD) — удаление директория; PATH — установка возможных маршрутов для поиска файлов. DIR является наиболее часто используемой командой ОС. В общем случае она задается следующим образом: DIR [Y:] [имя файла] [/Р] [/W ] 20
В формате этой команды все параметры являются необязательными. Если команда имеет вид DIR без параметров, на экран выводится перечень файлов, находящихся на активном дисководе в текущем директории. Имя каждого файла занимает отдельную строку, в которой указываются занимаемый им объем дисковой памяти, дата и время создания. Если диск и (или) директорий имеют имена, то они выводятся перед информацией о состоянии каталога. Если какой-либо файл в директории не имеет расширения, но не отмечен DIR , этот файл является подкаталогом. Параметр Y позволяет получить информацию о главном директории указанного диска. Параметр «имя файла» используется для вывода содержимого указанного поддиректория или информации об указанных файлах. Параметры /Р и /W управляют форматом вывода на экран. При задании параметра Р экран будет останавливаться каждый раз при заполнении всех строк экрана. Параметр IW меняет формат вывода — список файла содержит только имена, которые располагаются по шесть на строке. При выводе директория без задания параметров управления экраном можно остановить «бегущий экран» комбинацией клавиш CTRL (УПР) и S. Повторное нажатие этих клавиш приведет к продолжению вывода. Нажатие клавиш CTRL и Р приведет к дублированию вывода на принтер, повторное нажатие комбинации отключает вывод на принтер. По команде COPY можно скопировать указанный файл на заданный диск с любым именем. Для копирования нескольких файлов возможно применение так называемого шаблона. При этом файлы копируются на заданное устройство с исходными именами. Для вызова этой команды используется формат: COPY [Yl:l [имя-1 ] [Y2:] [имя-2] [V I Здесь Y1 и Y2 — необязательные параметры, определяющие соответственно источник и приемник файла. По умолчанию вместо Y1 и Y2 понимается активный дисковод. Если ни Y1, ни Y2 не указаны, то следует обязательно указать имя-2, что будет означать копирование файла на то же устройство, но с другим именем. Имя-2 также необязательный параметр, однако, имя-1 имя исходного файла должно быть задано или точно, или с помощью шаблона. Если имя-2 не указано, то файл копируется с исходным именем, в противном случае копия файла имя-1 будет иметь имя-2. 21
Другая цель использования оператора COPY состоит в соединении нескольких файлов и записи полученного результата в новый файл. В этом случае имя-1 представляется как совокупность имен соединяемых файлов, перечисленных со знаком «-г». Если имя-2 в таком варианте спущено, соединенные файлы будут записаны в файл, указанный в перечне первым. Допускается в качестве шаблона имени использовать знак «#». Например, LOTUS.* — означает все файлы с именем LOTUS; *.DCC — означает все файлы с типом DOC; *.* —означает все файлы активного дисковода текущего директория. Параметр V (верификация) вызывает контроль совпадения скопированных файлов с исходными. Время обработки команды в этом случае заметно увеличивается. В качестве второго устройства допускается использование символического имени любого внешнего устройства. Чаще всего используется имя PRN, что приведет к выводу содержимого на принтер. Команда REN используется для переименования файлов, она имеет следующий формат: REN [Y: ] [старое имя 1 [новое имя] В этой команде тоже можно использовать шаблоны при задании имен файлов. Однако необходимость модификации группы имен на практике возникает очень редко. Заметим, что команда не работает собственно с файлами, — меняются имена только в директории. Удаление файлов выполняется командой DEL (или ERASE). В качестве имени удаляемого файла можно использовать шаблон. При работе с этой командой операционная система «не спешит» обрабатывать команду и просит подтвердить уверенность пользователя в правомерности действий по удалению файлов. При обработке этой команды содержимое файла не разрушается, происходит лишь вычеркивание его имени из директория. Существуют специальные программы, которые позволяют восстановить удаленные файлы. Однако, если сразу после удаления эта операция не была выполнена и на диске были созданы новые файлы, восстановление стертых файлов может не состояться из-за физического их разрушения новым файлом (то есть из-за выделения под новый файл участка памяти, занятого ранее «удаленным» файлом). 22
Команда TYPE используется для вывода содержимого файла на экран и принтер. В качестве аргумента должно быть указано полное имя файла (шаблон в этой команде использовать нельзя). Необходимо отметить, что эта команда применима только к текстовым файлам. Файлы II па COM, EXE, OBJ, распечатанные по этой команде, представляют собой нечитаемый набор символов, поскольку информация в них хранится в несимвольной форме. В некоторых командах допускается задавать устройства в виде: A:DIR>PRN Вывод нескольких файлов на принтер можно выполнить по команде: A:COPY PROG.- PRN Заметим, что альтернативным именем для PRN является LPT1 с соответствующим номером, чаще всего 1. Следует остановиться на специальной группе так называемых командных файлов — особой разновидности исполняемых программ. От файлов СОМ и ЕХЕ командные файлы отличаются как типом файла (ВАТ), так и содержанием. В отличие от СОМ и ЕХЕ файлы ВАТ представляют собой текстовые файлы, которые могут быть созданы или текстовыми редакторами, или по команде COPY следующего формата: A:COPY CON: имя файла.ВАТ текст II А> Содержание командного файла последовательно интерпретируется командным процессором. Текст в файле может содержать: команды ОС (как резидентные, так и транзитные); обращения к другим командным файлам; специальные команды процессора; метки. Таким образом, командные файлы могут быть использованы для достижения следующих целей: объединения команд ОС и запуска различных исполняемых п юграмм в определенную последовательность, то есть выполнения команд без ввода их с клавиатуры; управления последовательностью Еыполнения команд в ВАТ-файле (переход на метку, организация циклов, проверка условии), выполнения командных файлов для различных значений параметров (например, имен файлов), задаваемых с клавиатуры. Примером командного файла является файл AlJTOEXEC.BAT, который автоматически загружается и выполняется при выполнении загрузки операционной 23
системы. С помощью текстового редактора можно откорректировать указанный командный файл, например, дополнить его вызовом системы dBASE III PLUS, если пользователь дальнейшую работу проводит в этой системе. Выполнение любого командного файла можно прервать одновременным нажатием клавиш УПР (CTRL) и С. Прерывание файла сопровождается сообщением: Terminate Batch Job (y/n)? Ответ Y приводит к завершению выполнения командного файла, N — к продолжению выполнения с места прерывания. Последняя команда ВАТ-файла может быть именем другого командного файла. При этом рекурсивные ссылки, то есть обращения к имени текущего файла, не разрешены. В каждом выполняемом файле может использоваться до десяти замещаемых параметров. Рассмотрим простейший пример командного файла с именем START. Подготовить такой файл можно любым текстовым редактором, в данном случае — по команде COPY: A:COPYCONrBEGIN.BAT —копирование в файл BEGIN.BAT информации с клавиатуры; DIR>PRN — вывод каталога на принтер; PROG1 — вызов программы PROG1; DEL FIL1.0LD — удаление файла FIL1.0LD; REN FIL1.NEW FIL1.0LD — переименование файлов. По команде ~Z (Упр/Z) завершается процесс формирования файла BEGIN.BAT. Для запуска необходимо выполнить команду: A:BEGIN При выполнении командного файла каждая команда будет выводиться на терминал, как если бы ее вводили с клавиатуры. Результаты отработки команд также выводятся на экран. Для подавления вывода команд и результатов на терминал используется команда ECHO OFF. Если эта команда не приведена, предполагается действие команды ECHO ON (то есть режим вывода включен). Команда ECHO с форматом ECHO [текст] приводит к выводу указанного текста на терминал. Последние две команды позволяют рационально построить диалог, избавляя от лишних нажатий клавиш или назойливых сообщений. Остальные функции операционной системы — форматизация дискет, копирование (слияние) файлов, перезапись операционной системы на другую дискету, перенастройка параметров операционной системы — выполняются транзитными командами (системными программами-утилитами). 24
Транзитные команды являются, по существу, утилитами операционной системы и рассматриваются в следующей главе. 1.4. Недостатки MS-DOS и пути развития операционных систем ПЭВМ Как видно, MS-DOS представляет пользователю большие, но далеко не безграничные возможности. Рассмотрим принципиальные недостатки этой ОС, учитывать которые необходимо при разработке систем, ориентированных на работу с конечным пользователем и поддерживающих большие объемы данных. Природа этих недостатков заключается в том, что эта ОС морально устарела. Если сказать одним словом, то эта ОС «тупая». В какой-то степени это связано с тем, что MS-DOS не использует всех богатых аппаратных возможностей архитектуры микропроцессора. Похоже, что ОС делалась наспех — из восьми имеющихся уровней прерываний анализируются только нулевой и первый, поэтому непродуманные попытки встроить в ОС ассемблерные программы приводят к непредсказуемым результатам. Необходимо сказать, что ОС Unix лишена этого недостатка, поскольку в ней контролируются все уровни прерываний. Однако основная причина недостатков кроется в некритичном заимствовании концепции ее построения, выразившемся в изначально принятом поверхностном взгляде на функции ОС ПЭВМ. Нетрудно заметить, что прообразом MS-DOS, а тем более СРМ и М86, явились ОС больших ЭВМ. Как говорили римляне: «quod licet jovi, not licet bovi». Простой перенос идеологии построения ОС больших машин на класс ПЭВМ оказался не эффективным. Постараемся на трех примерах показать это с точки зрения конечного пользователя и разработчика прикладных систем. Пример 1. Рассмотрим достаточно типичный случай. Рукопись этой книги объемом почти 500 Кбайт подготовлена текстовым редактором в среде MS-DOS. Предположим, что в каком-то месте необходимо поставить запятую. Что делает нормальный человек, работая с практически готовым текстом? Он берет ручку и ставит запятую. Времени одна секунда. Даже известная своим трудолюбием супруга Льва Николаевича Толстого не стала бы из-за этой мелочи в девятый раз переписывать «Анну Каренину». А как поступает ПЭВМ с быстродействи- 25
ем в сотни тысяч операций в секунду? Машина сначала добросовестно читает, а затем после корректуры переписывает весь файл. Итак, из-за одной запятой размером 1 байт пришлось затратить десятки секунд времени и запять дополнительно 0,5 Мбайт памяти. Конечно, было бы разумно, если бы машина анализировала объем работы, в данном случае корректировки, и самостоятельно планировала бы свою работу. В такой постановке эта проблема требует решения одного из главных вопросов кибернетики: что такое информация с точки зрения машины? Пример 2. Рассмотрим работу службы, обрабатывающей большие объемы информации, — это может быть бухгалтерия, канцелярия, конструкторский или технологический отделы и т. п. Если поступил нестандартный запрос, то для ответа на него находятся по описи нужные папки и бумаги и готовится справка. Как поступает машина? Никак, поскольку она знает только одну или две дискеты, которые в нее вставлены в данный момент. Все остальные дискеты для нее не существу ют, с какими дискетами машина работала, она не помнит. Поэтому разработка прикладных систем, ориентированных на обработку значительных объемов информации, размещаемой на большом количестве дискет, сопряжена с необходимостью детальной проработки технологии ведения базы данных и решения целого ряда организационных Еспрссов. Простое физическое увеличение памяти ПЭВМ эту проблему не решает — найти, скажем, в винчестере объемом 70 Мбайт забытый файл ничуть не легче, чем просмотрев 60 дискет. Остроту этой проблемы отчасти снимает включение ПЗВМ в локальные, с мощными файл-серверами (устройства для хранения и разделения данных в сетях), и глобальные вычислительные сети, располагающие практически неограниченными совокупными ресурсами памяти. Однако, даже если не рассматривать экономический аспект, сети проектируются и создаются, как правило, ориентированными на вполне конкретные информационные потребности. Во всех случаях любая память, как бы велика она ни была, все-таки конечна и в соответствии с законом Пар- кинсона будет рано или поздно заполнена. Вопрос что хранить, а что стереть, на время забытый, возникнет вновь. Если в мегабайтах человеку трудно разобраться, 26
то б гигабайтах это тем более сложно. Поэтому было бы желательно, чтобы ОС представляла средства для организации надежного ведения баз данных, подчеркнем, во времени. В терминах уже \помянутой «недоброй» памяти кпСернетпки решение этой проблемы ссяошэ с понятием sinрс пни. Пример 3 Недостаток, который здесь будет про- гл-чосчрнрев^н, почти также неведсм программистам, как и предыд\ LL.ru, однако он непосредственно влияет на надежность и живучесть систем. В общем сл\чае ПЭВМ располагает следующими ресурсами памяти: виртуальный диск, жесткий диск, гибкий диск, стриммер (устройство для записи на магнитную ленту). Рассмотрим и качественно оценим nl (t), n2 (t), n3 (t) п4 (t) — соответственно вероятности потери информации на каждом из названных устройств как функции времени. По опыту, при увеличении времени работы >3nt будет выполняться неравенство: nl (t)>n2 (t) >n4 (t). Рассмотрим вероятность потери информации, как полную вероятность, обусловленную физическими и механическими свойствами носителей и устройств, так и возможностью наступления случайных — фатальных событий, например, отключение электропитания, разметка по неосторожности или преднамеренно дисков и т. п. Учитывая, что время поиска информации на устройствах существенно различно, системы должны проектироваться так, чтобы при минимальном времени доступа к информации вероятность ее потери была бы мала. Решение этой проблемы, которое напрашивается само собой, состоит в своевременной перекачке информации с менее надежных, но быстрых устройств на более надежные, но медленные, т. е. с виртуального диска на жесткий, загем на дискеты пли стример. В связи с этим возникает вопрос: можно ли надеяться, что ОС самостоятельно распорядится своими ресурсами памяти с тем, чтобы минимизировать вероятность потери информации при заданном времени реакции? Ответ отрицательный. С появлением последних моделей ПЭВМ, имеющих оперативную память, измеряемую мегабайтами, жесткие диски на 100 и более Мбайт, стириммер с касетами по 60 Мбайт, оказывается, что по своим возможностям такие ПЭВМ в состоянии обеспечивать информационные потребности крупных служб. Однако рационально организовать работу 27
всех устройств в соответствии с общей целью системы без вмешательства специалиста-системщика или администратора базы данных оказывается невозможно. В какой-то степени повторяется ситуация с большими ЭВМ. Необходимо сказать, что разработчики базовых программных средств и даже различных методо- и предметно- ориентированных систем стараются этой проблемы не замечать. Хотя что-то можно было бы сделать в рамках существующей ОС. Работа с программными средствами рассматривается как «работа на час»: загрузил систему, вставил дискету, отработал и ушел. Представляется, что при разработке эффективных и надежных систем необходимо углубить методологию проектирования путем специального исследования не только традиционных вопросов выбора структуры базы данных, разработки алгоритмов, построения диалогов, но и анализа функционирования систем на длительных интервалах времени. Речь идет о создании нового класса систем, которые в отличие от систем реального времени можно назвать системами неограниченного времени. Но, разумеется, комплексное решение проблемы создания систем неограниченного времени должно опираться на более совершенную операционную среду. В чем с точки зрения пользователя видится отличие будущей ОС от существующих? Вернемся еще раз к примерам и проанализируем причины, вызвавшие рассмотренные ситуации. В первом примере машина бездумно переписывала файл, так как не соотнесла объемы корректуры и файла, т. е. ОС, зная объемы файлов, тем не менее использует эти знания только для того, чтобы делить память па заданном устройаве. Во втором — ОС, имея средства для задания имени носителя, в частности дискеты, тем не менее не храпит ни их имена, ни директории. В третьем — ОС, располагая средствами для задания даты и времени, создания файла, также с этим не работает. Представляется, что самый естественный выход из этого положения можно найти расширив понятие основного информационного объекта, с которым работает ОС файла. Сохраняя прежний термин «файл» достаточно для решения выявленных проблем сделать допустимым, например 28
следующее описание имени файла: [имя носителя I . [имя файла! . [объем! . [дата и время создания) . [поле примечаний ] . Здесь все параметры, кроме существующего имени файла, не обязательны. Если бы при этом ОС взяла на себя ту работу, которую пользователь каждодневно выполняет, просматривая оглавления, анализируя номера дисков, имена файлов, их объемы и время создания, это могло бы явиться большим достижением. Даже если не использовать термины «искусственный интеллект» и «самообучение», можно представить, как упростилась бы работа, если бы машина знала содержание всех дискет, с которыми она работала, а в программах можно было бы многократно использовать файлы с одинаковыми именами и ОС различала бы их по месту размещения, объему, дате и времени создания; если бы, наконец, ОС сама решала, что и где хранить, подсказывала бы с каким именем дискета необходима ей для работы. Интересно, что все эти идеи так или иначе опробованы и частично реализованы, но они находятся в зародышевом состоянии и не получили законченного развития. В самом деле, существуют понятия «каталог», путь в каталоге, «подкачка» и т. д., но места их применения локализованы в конкретных устройствах и не распространяются ни па машину, ни тем более на внешнюю среду, в которую эта машина как расширитель интеллекта встроена. Конечно, реализация этих идей потребует, в свою очередь, выделения ресурсов памяти и также со временем обнаружится порог «мыслительных» способностей новой ОС, однако бурное развитие схемотехники делает это опасение непринципиальным. Кстати, создается впечатление, что темп, заданный схемотехникой, оказался не под силу информатике, которая едва успевает производить «на скорую руку» программы, хоть как-то обеспечивающие возможность работы на все новых и новых устройствах. Хочется надеяться, что время компьютерной «эйфории» минует и разработчики общесистемных средств предложат нам действительно удобную и умную ОС. Это совсем не значит, что труд по освоению современных программных средств будет напрасен. Без сомнения, все накопленное программное обеспечение будет поддерживаться и новыми операционными системами.
Глава 2. УТИЛИТЫ 2.1. Утилиты базового состава DOS Утилита — это отдельная независимая сервисная программа. Сервисные программы разрабатываются для широкого спектра применений. В зависимости от назначения утилшы условно можно классифицировать следующим образом: базового состава DOS; общесистемные: для разработки программ (отладчики); табличных процессоров; баз данных; интегрированных деловых пакетов; многооконные интерфейсы; конечного пользователя; обслуживания устройств ПЭВМ. Как видно, понятие «утилита» трактуется очень широко. В зарубежных каталогах к утилитам относят даже средства конечного пользователя, шпример пакет записная книжка — калькулятор — Side Kick. Мы же для удобства изучения б^дем использовать этот термин только применительно к базовому составу DOS и общесистемным средствам. Сведения о некоторых других утилитах как программных средствах, расширяющих возможности некоторых известных крупных пакетов программ, будут даны в соответствующих разделах. В отличие от встроенных пли «внутренних» команд DOS, реализуемых подпрограммами трех основных модуле}!, <внешние» команды, которые обычно входят в стандартный комплект DOS, реализуются посредством авю- пгмрых сервисных программ (утилит). При практической работе наиболее часто используются утилиты PRINT COM, FORMAT COM, CHKDSK.COM, M0DH.COM. Другие ггогргммы используются реже. Ниже приведен список утилит, входящих в базовый состав DOS: ASSIGN COM, D1SKC0MP.COM, MODE COM, SYS.COM, BACKl P.COM, DISKC0PY.COM, PRINT.COM, TREE COM, CHKDSK. COM, rORMAT.COM, RECOVER.COM, COMP COM, GRAPMICS.COM, RESTCRE.COM. Рассмотрим работу этих утилит. 30
ASSIGN. COM. Утилита позволяет заменить временно имя устройства. DOS всегда будет использовать новое имя устройства, если в некоторой команде встретится старое имя. ASSIGN создана для работы с программами, которые предполагают наличие файла на конкретном устройстве Утилита поддерживает работу этих программ с жестким диском. BACKUP. COM и RESTORE. COM. Эти утилиты используются для архивации файлов с жестких дисков на дискеты и их восстановления с дискет. BACKUP.COM переносит файлы с жесткого диска на дискету. Формат обращения следующий: BACKUP [С:] [ПУТЬ] [ИМЯ ФАЙЛА] [D: ] [/S] [Mi [/А] [/0:ММ-ДД-ГП Здесь [С: 1 — имя твердого диска, который архивируется; !П>ТЬ] — путь к каталогу, файлы которого будут архивироваться ^понятие «путь к каталогу» — см. [16], стр. 23); [ИМЯ ФАЙЛА ] — имена файлов, которые архивируете; [D: ] — имя устройства, в котором находится дискета для записи файлов (куда будете архивировать); [/S] — архивирует файлы из всех подкаталогов текущего каталога, несмотря на степень вложения; [/Ml — указывает DOS архивировать только файлы, измененные после предыдущей работы BACKUP; отметим, что при записи файла DOS делает отметку, a BACKUP ее стирает; [/А] — архивируемые файлы будут добавлены к уже хранящимся на лискете; 1/D ] — указывает архивировать только файлы, созданные не ранее заданной даты. Когда одна дискета заполнится до конца, DOS запросит другую. Утилита REST0RE.COM восстанавливает файлы с дискеты на жесткий диск. Формат обращения к ней следующий: RESTORE [D:| [С: 1 [ПУТЬ] [ИМЯ ФАЙЛА] [/S] [/Р1 Здесь [D: ] — имя гибкого диска; [С: ] — имя восстанавливаемого твердого диска; [ПУТЫ — имя каталога, в котором будут размещаться восстанавливае!мые файлы; если путь не специфицирован, все файлы пойдут в главный каталог; [ИМЯ ФАЙЛА ] — имена файлов, которые необходимо восстанавливать; [/S I — восстанавливает все архивированные каталоги, подкаталоги и файлы; [/Р] — дает указание DOS спросить перед восстановлением о 31
файлах, которые были изменены после последнего архивирования или отмечены «только для чтения». Например: RESTORE А: С: //S Все файлы и каталоги с архивной дискеты на устройстве А восстанавливаются на устройство С. CHKDSK. СОМ. Утилита производит проверку диска Она просматривает FAT (таблицу распределения файлов — см. п. 2.2) и каталоги, проверяя их на соответствие. Информация о размещении файла находится в FAT (об этом ниже), кроме того, в каталоге указаны начальный кластер файла и общий размер файла. Если в результате просмотра CHKDSK выявила несоответствие между FAT и информацией каталога, то она выдаст сообщение о «потерянных» кластерах. По желанию пользователя эти кластеры могут быть объединены в файлы FILEnnnn.CHK, где число nnnn — номер файла, начиная с 0000. Утилита CHKDSK используется для проверки качества записи информации на диске (формат обращения: CHKDSK/F). Для обеспечения более полной информации о ходе проверки служит Формат обращения с ключом V (верификация): CHKDSK/V. В общем случае файл на диске может быть размещен не непрерывно, а фрагментами, что замедляет операции с файлом. Для устранения фрагментации можно, задав имя файла для CHKDSK, осуществить проверку файла на наличие фрагментации. Если фрагментация обнаружена, ее можно устранить копированием файла. СОМР. СОМ. Утилита СОМР служит для сравнения двух и более файлов, но не целых дискет. Формат обращения СОМР [СПЕЦИФИКАЦИЯ-! 1 [СПЕЦИФИКАЦИЯ-2]. Если утилита обнаружит разницу между файлами, то она укажет ее место и выведет несовпадающие байты в шестнадцатеричном виде. Если сравниваемые файлы окажутся разной длины или число несовпадений превысит 10, то СОМР прекратит работу. Для сравнения и копирования дискет используются утилиты DISKCOMP.COM и DISKCOPY СОМ. При выполнении DISKCOPY производится предварительное форматирование диска-копии, например: DISKCOMP 4: В: I сравнение дискеты А: и В: DISKCOPY В: D: | копирование дискеты В: на D: FORMAT. COM и SYS. COM. Эти утилиты служат для форматирования дискет и подготовки их к использованию. 32
FORMAT производит инициализацию чистого диска в qopMare MS-DOS. Параметр /S позволяет подтовить дискету для копированияфайлов операционной системы сразу после завершения форматирования диска (FORMAT Ь./S). Утилита SYS производит копирование системных файлов из устройства, принятого по умолчанию» на указанный диск TREE. COM. Утилита показывает каталоги устройства (по умолчанию или заданного). Формат обращения: TREE ID: I I/F]. Здесь D: — имя устройства* /F — задает вывод всех файлов из подкаталогов. PRINT. СОЛ». Сервисная программа PRINT. COM. обеспечивает постановку текстовых файлов в очередь на печать. Печать производится на фоне любой другой задачи. Формат обращения к этой программе имеет следующий вил: PRINT [спецификация файла 1] [спецификация файла 2]... При таком обращении все указанные файлы ставятся в очередь на печать и, если принтер свободен и готов к печати, сразу же начинается печать первого файла. Умолчание для максимального числа файлов в очереди равно 10, но оно может быть изменено. Обращение к программе PRINT может быть снабжено параметрами, которые вводятся вслед за именем файла через слэш (/). Предусмотрено использование следующих параметров: /Q:ff(ff — максимальное число файлов в очереди); /D:pp (pp — имя принтера или другого устройства для вывода данного файла); /B:bb (bb — размер буфера в байтах (по умолчанию 512)); /С — признак исключения данного файла и всех последующих из очереди; /Р — отмена действия /С; По команде PRINT /T все файлы исключаются из очереди. MODE. COM. Многофункциональная утилита имеет четыре режима работы, которые обеспечивают: настройку принтера; изменение формата вывода на экран; настройку на работу с последовательными устройствами типа модемов; перенаправление выхода принтера. В режиме 1 MODE позволяет управлять максимальной длиной строки и расстоянием между строками на стандартном принтере, обслуживая до трех принтеров. Начиная работу с утилитой, необходимо указать, на какой принтер будет осуществляться печать. После имени 2 Смирнов Н. Н. 33
принтера через двоеточие следует задать максимальное число знаков в строке. Выбирать можно между 80 и 132. Например, для получения восьмидесяти знаков в строке следует задать MODF LPT1 : 80 Последний параметр MODE для режима принтера, задаваемый через запятую, определяет расстояние между стоками, которое задается количеством строк ыэ один дюйм по вертикали. Шесть строк на дюйм, например, можно получить, задав MODE LPT2 : 132,6 В режиме 2 утилита MODE позволяет увеличить обычный размер каждого знака в два раза. Стандартно на экране размещается 80 знаков в одной строке. Расширенный в два раза текст более ясен и легок для чтения; при этом в строке помещается 40 знаков. Кроме установки размера, MODE можно использовать для перемещения изображения па экране вправо и влево. Это необходимо, если теряются некоторые знаки на границах экрана. Пример обращения: MODE 40, L — сдвиг влево на два расширенных знака; MODE 80, R — сдвиг вправо на два обычных знака. В этом режиме, если добавить запятую и Т после L или R, будет показан примерный ряд символов, которые займут целый экран. С помощью этого приема удобно центрировать текст на экране. Существуют еще способы использования MODE для управления экраном. В общем случае формат обращения к MODE в режиме 2 следующий: MODE [N], М [, Т] Здесь N — может принимать следующие значения; 40. 80, MONO, BW80, СО80, BW40, СО40,; М — значения, указанные в примере обращения; задание параметра Т (опытный образец) позволяет предварительно вывести мзкс1 па экран; квадратные скобки означают необязательный параметр Действия некоторых значений параметра N были рассмотрены, поэтому остановимся на оставшихся: MONO — переключает черно белый адаптер; количество символов в строке всегда 80; BW80 — переключает плату для цветной графики на черно-белое изображение, 80 символов в строке; СО80 — переключает плату для цветной графики и цветного изображения, 80 символов в строке;
BW40 — переключает цветной графический адаптер на «ерно-белое изображение, 40 символов в строке; СОЮ — переключает плату для цветной графики и цветною изображения, 40 символов в строке. В режиме 3 MODE позволяет управлять асинхронным коммуникационным адаптером, посредством которого осуществляется связь ПЭВМ с внешним миром. MODE инициализирует адаптер и устанавливает протокол. Формат обращения к MODE e этом режиме. MODE СОМп: бод [, четность [, бит-данные 1, стоп- биты [, Р]]]| Здесь бод—скорость передачи данных; четность — способ проверки символа на правильность; бит-данные — длина символов в битах; стоп-биты—сигнализируют о конце передачи. В этом формате допускаются следующие возможные значения параметров: Вод ПО, 150, 300, 600, 1200,2400, 4800, 9600. Четность: N — нечетное, Е — четное (по умолчанию). Бит-данные: 7 или 8 (по умолчанию 7). Стоп-биты: 1 или 2 (если бод-110, по умолчанию 2). Например: MODE COM1 : 300, N, 8, 1, Р Здесь Р — указывает, что будет использоваться асинхронный адаптер для связи с принтером; если принимающее устройство не отвечает, то попытка продолжить пересылку символов будет повторена. В режиме 4 утилита MODE направляет параллельные выходные данные для принтера к адаптеру. Это требуется в случае, если необходимо использовать не параллельный IBM-принтер, а последовательный принтер. Для его подсоединения используется асинхронный коммуникационный адаптер-стык С2 (RS-232C). Затем MODE в режиме 3 с параметром Р инициализирует асинхронный адаптер, uoc.it чего выполняется MODE в режиме 4 MODE LPT1 :СОМ1. GRAPHICS. COM. Сервисная программа GRAPHICS используется для выдачи на принтер графической копии экрана. Для ее использования необходимы следующие специальные устройства: плата для цветной графики; грл фпческий монитор; матричный принтер типа IBM. 2* 35
После вызова этой утилиты нажатие клавиш Shift и PrtSc вызывает вывод на принтер графической копии экрана. При этом возможны три варианта: 1) если экран находится в текстовом режиме, то копирование происходит точно так же, как и без команды GRAPHICS; 2) если экран находится в режиме 320x200 точек, то на принтер копируются текст и графические изображения, причем закрашенные цветные области отображаются на бумаге в оттенки серого цвета, если принтер не цветной; 3) если экран находится в режиме 640x200 точек, то изображение копируется на принтер повернутым на 90 градусов (правый верхний угол экрана отображается в левый верхний угол на бумаге), при этом изображение как на экране, так и на принтере одноцветное. После вызова программы GRAPHICS при копировании изображения с экрана точки черного цвета отображаются на бумаге в белый цвет, и наоборот. Чтобы инвертировать цвета печатаемого на бумаге изображения, необходимо обратиться к GRAPHICS с параметром /R. После этого черные точки экрана будут становиться черными и на бумаге. Используя Esc-последовательности, можно легко составить собственную удобную программу для вывода на принтер графических изображений или файлов. Полученные таким образом файлы могут содержать графические иллюстрации к текстовым документам и статьям. Вывод на печать файла с изображением, соответствующим одному экрану, занимает несколько секунд. Отметим, что утилита GRAPHICS может работать совместно с программой MODE. 2.2. Общесистемные утилиты DOS Помимо сравнительно простых утилит, входящих в базовый состав DOS, существует достаточно много отдельно поставляемых мощных сервисных программ. В этом разделе будут описаны утилиты, которые получили наибольшее распространение и могут быть рекомендованы для использования. Этот материал было бы естественно поместить в раздел «Операционная система», однако он оказался здесь, поскольку предназначен для квалифицированных пользователей. Прежде чем мы перейдем к рассмотрению общесистемных утилит, необходимо дать определения терминам, 36
которые встретятся в тексте, а также сказать несколько слов об организации хранения информации на диске и размещении ее в памяти ПЭВМ. В рассматриваемой операционной системе информация на гибком диске размещается блоками по 512 байт. При двойной плотности записи на диске помещается 720 блоков; блоки нумеруются от 0 до 719 и носят названия физических секторов или просто секторов. Структура размещения информации на гибком диске представлена на рис. 2.1. Цифрами на рисунке обозначены номера секторов, в которых размещаются соответствующие области. Файлы размещаются в области данных порциями (кластерами), начиная с физического сектора 12. Физический сектор Логический сектор 0 1 707 0 12 3 4 5 6 7 8 9 10 11 12 13 719 Диск В | FAT | ROOT DIRECTORY AREA | DATA 1— Область данных —Область корневого каталога ¦Таблица распределения файлов —Область начального загрузчика Рис. 2.1 Кластером называется группа из нескольких последовательных секторов (от 1 до 8); для гибкого диска разхмер кластера образуется из двух секторов. Сектора, в которых размещается область данных, называются логическими секторами. Таким образом, нулевой логический сектор соответствует двенадцатому физическому сектору. Нулевой физический сектор содержит область начального загрузчика. Таблица FAT является таблицей переменной длины и состоит из элементов по 1,5 байт каждый. Первый и второй элементы стандартны для всех дисков с одинаковой разметкой. Например: FDF FFF (для формата девять секторов на дорожку при двусторонней разметке). Первый файл в таблице FAT описывается, начиная с третьего элемента таблицы. Для первого файла начальный кластер 2, а элемент, начиная с которого он описан в таблице, находится со смещением 2 * 1,5 байт. 37
Следовательно, смещение в таблице (S) может быть опрелелено по формуле: S = Е A,5 * N), где N — номер стартового кластера; Е — целая часть от числа. Каждому файлу на диске соответствует цепочка элементов в таблице. В цепочке указаны кластеры, занимаемые файлом. Элемент 000 в таблице — свободный кластер. Элемент FFF — последний кластер в файле. Элементы FF0—FF7— зарезервированный кластер либо плохой кластер, если стоит вне цепочки. Любые другие значения элемента указывают на следующий кластер в цепочке. Номер следующего кластера в цепочке не обязательно последовательный, но обязательно больше предыдущего. Область корневого каталога занимает на диске сектора 5—11, на которых хранятся имена всех файлов и подкаталогов, находящихся на диске. Начиная с сектора 12, размещается область данных. В ней находится информация, содержащаяся в файлах. Вся информация о распределении файлов находится в таблице распределения файлов и дается в кластерной форме. Для вычисления номера физического сектора можно воспользоваться следующей формулой: (Номер сектора) = 12 + (Номер кластера) х 2 Информация заносится на диск на первое от начала свободное место. Первый кластер с данными при условии, что запись производится на чистый, отформатированный диск, имеет номер 2. Поэтому первый файл, записываемый на чистый диск, имеет стартовый кластер 2. Теперь необходимо немного сказать об организации оперативной памяти ПЭВМ. Оперативная память ПЭВМ разбита на маленькие «порции» (обычно 16 байт), называемые параграфами. Сегмент — это порция памяти длиной почти 64 Кбайт, начинающаяся на границе параграфа. Номер сегмента и смещение внутри сегмента вместе определяют место в памяти. Рассмотрим некоторые важные утилиты этой группы. Утилита DISK REPAIR (исправитель диска)фирмы IBM Corporation предназначена для редактирования информации или на диске, или прямо в оперативной памяти ПЭВМ. Disk Repair (DR) имеет следующие режимы: HELP — вывод на дисплей главного меню; EXPLAIN — описание 38
сообщений и полей; BIOS SECTOR — режим абсолютных (BIOS) секторов; DOS SECTOR — режим логических (DOS) секторов; FILE — режим файлов DOS; MEMORY — режим памяти; DIRECTORY — режим каталога; FAT — режим таблицы распределения файлов; PARAMETER — режим параметров диска; INTERRUPT/CALL — режим вызова и прерывания программ. Как и большинство других отдельно поставляемых утилит, DR снабжена удобным меню. Выбор нужного режима производится нажатием соответствующей функциональной клавиши. На рис. 2.2 показано оформление кадра, который появится на экране после нажатия клавиши F3 (режим BIOS Sector Mode). На рисунке в правой части экрана помещаются 256 байт информации в коде ASCII, в левой части — та же информация в шестнадцатеричном представлении. Здесь для иллюстрации выбран текстовый файл. Disk Repair BIOS Sector Mode Addr +0 +4 +8 +C ASCII 00000 20202020 20202020 20202020 20202020 00010 20202020 А2А0АЛА0 ADB1A8BF 0D0A2020 Вакансия 000F0 20202020 20202020 ' 20202020 20202020 Drive CiUnder Head Sector Cluster Bios Sector Mode 01 000 1 09 0004 Command: Fl Help F2 Explain F3/F4 Sector F5 File F6 Mem F7 Dir F8 FAT F9 Param F10 INT Рис. 2.2 Для получения описания какого-либо поля следует подвести курсор к желаемому значению и нажать клавишу F2. Для ввода команд используется специальная командная строка. Команды вызываются по первой букве. Список команд: WRITE [запись модифицированного буфера на диск]; SAVE [запись кластера в сохраняемый файл]; EBCDIC или ASCII [вывод на экран в кодах EBCDIC/ASCII]; DECIMAL или HEX [сменить основание системы счисления]; QUIT [конец программы и возврат в DOS ] Ош:сание полей в режиме BIOS SECTOR. Поля в режиме BIOS Sector Mode (пятая строка экрана снизу на рис. 2.2) имеют следующие значения. 39
Поле Drive содержит адрес дискового накопителя. Адреса начинаются с 00. Например, диск А имеет адрес 00, а диск В — 01. Жесткие диски имеют адреса, начиная с 80. Например, первый жесткий диск (С) имеет адрес 80, а второй жесткий диск (D) — 81. Поле Cylinder (цилиндр) — это набор дорожек на диске, которые могут быть использованы без передвижения головки диска. Это поле содержит шестнадцатерич- ный номер текущего цилиндра. Поле Head содержит номер головки, который показывает, какая головка используется для чтения данных. На односторонних дискетах используется только одна головка (головка 0). На двусторонних дискетах используются головки с номерами 0 и 1. Жесткие диски могут иметь более двух головок. Поле Sector содержит номер сектора на текущей дорожке. Номера секторов находятся в диапазоне 1—8 или 1—9. Поле Cluster содержит номер кластера, который связан с сектором, указанным в поле SECTOR. В нижней строке (рис. 2.2) указано, с помощью каких клавиш можно перейти в требуемый режим. Приведем некоторые особенности работы в этих режимах. В режиме Sector (переход по клавише F4) используемые поля содержат следующую информацию: FILESIZE— размер файла (байт); OFFSET — число, которое показывает, какие именно 256 байт файла необходимо вывести на дисплей; для движения по файлу используются клавиши PgUp («страница вверх») или PgDn («страница вниз»); FILE NAME — имя файла; DIRECTORY — имя каталога, в котором находится файл. В режиме Mem поле SEG : OFFSET указывает адрес. Он определяет каждые 256 байт памяти, которые будут отображаться на экране дисплея. В этом режиме возможно редактирование оперативной памяти ПЭВМ. Для перехода в режим FAT используется клавиша F8. В режиме FAT содержимое таблицы распределения файлов выводится на дисплей в удобной для анализа и редактирования форме. Этот режим позволяет системным программистам выполнять операции по восстановлению информации на диске. В режиме Parameter (переход по клавише F9) дается подробная справка о диске и об информации на диске. В режиме INT (Interrupt/Call) поле Interrupt Number 40
содержит число (вектор прерывания), которое будет использовано при выполнении команды INT. Поля верхней группы регистров представляют внутренние регистры. Их можно установить перед выполнением команд INT или CALL. После выполнения команд INT (или CALL) возвращаемые значения высвечиваются на экране дисплея в нижней группе регистров. Возврат в DOS по команде QUIT. PC-TOOLS. Эта утилита, разработанная фирмой Software, предоставляет пользователю наиболее полный набор сервисных услуг, необходимых для работы с дисками и файлами. PC-TOOLS имеет два меню: для работы с файлами и для работы с дисковыми и специальными функциями. Переход от первого меню ко второму осуществляется нажатием функциональной клавиши F3. Клавиша F10 позволяет изменить имя дискового устройства. При работе с файлами предоставляются следующие услуги: «С» — копирование файла или файлов; «М» — перемещение файла или файлов (файл-источник удаляется); «О» — сравнение содержимого файлов; «F» — поиск строки символов в файле или файлах; «R»— переименование файла или файлов; «D» — удаление файла или файлов; «V» — верификация файла или файлов; «Е» — редактирование файла или файлов; «А» — получение атрибутов файла или файлов и даты (времени) последнего обновления; «Р» — печать содержимого файла или файлов. Перечень услуг при работе со сменными дисками и специальные функции: «С» — копирование с одного диска на другой; «М» — снятие карты памяти (MAP) с диска и получение информации о расположении файлов на диске; «О» — сравнение содержания двух дисков; «F» — поиск строки символов на диске; «R» — переименование метки тома; «V» — верификация диска; «Е» — редактирование диска; «L»—получение директория, в котором файл или файлы размещаются; «N» — форматирование диска. Утилита снабжена многочисленными подсказками и постоянно поддерживает «дружественный» интерфейс с пользователем. Для выбора режима достаточно ввести соответствующую латинскую букву. COPY WRITE (автор Robert T. McQuait). Эта программа предназначена для копирования защищенных 41
дискет. Она обновляется каждый месяц, чтобы соответствовать последним разработкам в области защиты дискет. Поэтому качество ее работы зависит от месяца и года издания. COPYWRITE не может копировать дискеты, защищенные с помощью лазерной «дырки». COPY II-PC (Central Point). Эта программа позволяет снять только архивную копию с дискеты. Она не предназначается ни для каких других целей. Пакет NORTON UTILITIES фирмы «Питер Нортон Компьютин» (Peter Norton Computin) предназначается для редактирования информации на диске и восстановления стертых файлов. Norton Utilities предоставляет пользователю три меню. Выбор функции в меню осуществляется нажатием соответствующей функциональной клавиши. Главное меню предоставляет следующие возможности: F1 — изменение выбора (диска, директория, файла или сектора на диске); F2 — отображение информации на диске (просмотр и корректировка данных); F3 — восстановление стертых файлов; ESC — выход из программы. Второе меню предоставляет следующие возможности по отображению дисковой информации: F1 — изменение выбора; F2 — отображение технической информации о диске; F3 — карта распределения диска; F4 — отображение информации о выбранном элементе; F5 — чтение и корректировка содержания выбранного элемента; F6 — отображение информации каталога; ESC — возврат в главное меню. Третье меню предоставляет следующие возможности при восстановлении файлов: F1 — смена выбранного диска или каталога; F2 — выбор стертого файла для восстановления; F3 — отображение информации о стертом файле; F4 — поиск данных стертого файла; F5 — сохранение восстановленного файла; ESC— возврат в главное меню. Norton Utilities принадлежат, как и PC-Tools, к числу наиболее популярных утилит. В отличие от PC-Tools при работе с секторами Norton отображает целиком сектор, что представляется более удобным. Фирмы постоянно совершенствуют свои утилиты, практически ежегодно предлагая новые их версии. Из удачных разработок П. Нортона можно назвать также утилиту Qick-UnErase, которая позволяет быстро восстановить стертые файлы. С пользователем поддерживается минимальный диалог. Достоинство программы в простоте диалога и высокой скорости выполнения услуг. 42
SMAP. Эта программа совсем проста и не поддерживает интерфейса с пользователем, однако она позволяет увидеть размещение программ в оперативной памяти ПЭВМ. Видеокадр программы SMAP представлен ниже: * #IBM Internal Use only * * System Storage Map Version 1.3 (C) Copyright BJVi Corp. 1984 Addr (OC2E) (OD02) (ODOD) (OD78) (ODC9) (OE49) Program DOS E1840 K1840 EDISK DOSEDIT FX85 Free memory Next command adress: Parent UNKNOWN DOS DOS DOS DOS DOS E66 Sg 2 2 2 2 2 2 3 Bytes 3232 144 1680 1264 2016 368 4654472 22 23 09 21 17 Hooked Vectors 24 2E Как видно, использование рассмотренных утилит представляет большой интерес прежде всего для системных программистов. Пользователи, не ставящие перед собой задач создания сложных программных продуктов или модернизации существующих пакетов, могут вполне уверенно работать, даже не догадываясь о существовании этих программ. 2.3. Архиваторы Как бы ни была велика емкость «винчестера», она, как и все на свете, конечна. Рано или поздно ресурсы жесткого диска будут исчерпаны и для его освобождения потребуется создать архив программ и текстовых файлов на дискетах. Для таких целей более всего подходят специальные программы — архиваторы. Они обладают тем преимуществом перед обычными программами копирования, что позволяют «сжимать», и довольно значительно (в особенности текстовые), файлы. Большой популярностью среди архиваторов пользуется комплект программ PKARC FAST!, созданный фирмой PKWARE INC. Основу комплекта составляют программы PKARC (архиватор) и PKXARC (реархиватор). Программа записи в архив PKARC. Формат вызова этой программы следующий: PKARC [опция 1 (имя архива) [D:PATH] (спецификация файла (ов)> В табл. 2.1 приведено описание функций, выполняемых после задания опций. 43
Таблица 2.1 Опция Функция А U М X L G V Добавить файлы в существующий архив или создать новый архив с указанными файлами. Если файлы не указаны, то все файлы текущего каталога добавляются в архив Выполняются действия, как и в опции «А», за тем исключением, что если указанные в архиве файлы уже сущес1вуют, то будут заменены те из них, дата создания которых меньше, чем у записываемых файлов Просматриваются все файлы, указанные в спецификации. Опция работает так же, как «U», но Файлы в архиве могут лишь корректироваться, а новые файлы не добавляются в архив Работает^ как и опция «А», но оригинальные файлы после добавления в архив уничтожаются Добавить комментарий к архиву Вывести на дисплей информацию о лицензии на использование программы Засекречивание архива Выдать каталог архива Опции могут быть заданы списком, однако опция «G» должна быть последней в этом списке; за опцией «G» должен непосредственно следовать пароль. Например: i>PKARC AGPAROL DOC В: *. TXT, по этой команде будет создан архив DOC. ARC. В него будут добавлены все файлы с диска В:, имеющие расширение ТХТ. Архив будет защищен паролем PAROL. Программа выборки из архива PKXARC. Формат обращения к ней следующий: )PKXARC [опции] (имя архива) [D:PATH] {спецификация) В табл. 2.2 приведены используемые опции. Например: )PKXARCGPAROLDOC, по этой команде с помощью пароля PAROL выбираются все файлы из архива DOC. После того как архив создан, существует возможность преобразовать архив в так называемый самораскручивающийся ЕХЕ-файл. Это позволяет отказаться от использования PKXARC для выборки файлов из архива. Потребуется лишь дать команду на исполнение этого ЕХЕ-файла. Для создания самораскручивающегося архива нужно последовательно выполнить следующее: используя PKARC, создать архив; «слить» архивный файл 44
Таблица 2.2 Опция Функция с р т Е или X G (пароль) Обычно PKXARC спрашивает: «OVERWRITE? (Переписать?)» — если выбираемый из архива файл будет записываться на уже существующий файл. Данная опция позволяет переписать существующий файл без выдачи вопроса Вывод файлов из архива на экран То же на принтер Проверка целостности архива. PKXARC подсчитывает циклическую контрольную сумму для каждого архивного файла и сравнивает с тем значением, что уже хранится. После проверки каждого архивного файла выдается сообщение Получение каталога архива. В списке будут указаны имя файла, длина файла до сжатия, метод сжатия, процент сжатия и значение циклической контрольной суммы Выборка файлов из архива. Эти опции действуют по умолчанию. Они не могут использоваться совместно с другими Выборка файлов из архива по паролю с файлом PKKOPF.PK по команде >СОРY/B PKKOPF. РК + <имя архива). ЕХЕ. Эффективность работы архиватора можно оценить, используя опцию V (вывод каталога). Фрагмент получаемого каталога представлен ниже: PKXARC FAST! Archive Extract Utility Version 3.5 04—27-87 Copyright (C) 1986, 1987 PKWARE Inc. All Rights Reserved. PKXARC/h for help Searching: e:/arc/PCl.ARC Filename Lenght Method Size Ratio Date Time CRC 45T.DB 45t.DS 0067 896 Crunched 512 Crunched 326960 278 69% 05 — 12—89 01 : 50 : 14 C50B 153 71% 05 — 12—89 01 : 50 : 14 84D7 208108 37% В нижней строке архива PCI.ARC указан общий процент сжатия, составивший 37 %. Заголовок каталога на рисунке содержит кроме имени, объема и времени создания указание метода, с помощью которого осуществлялось сжатие, и циклическую сумму (CRC) — шестнадца- теричное число. 45
Следует сказать, что программы-архиваторы можно использовать и на ПЭВМ, не оснащенных жестким диском. 2.4. Знакогенератор дисплея Рассмотрим проблему, связанную с настройкой дисплея ПЭВМ на работу в требуемом алфавите. Настройка заключается в программировании гарнитуры знаков (знакогенератора). Поскольку принципы программирования знакогенератора дисплея ПЭВМ достаточно общие, рассмотрим случай монохромного псевдографического дисплея. Для обеспечения работы дисплея ПЭВМ обладает специальным модулем — адаптером дисплея. Адаптер монохромного псевдографического дисплея ПЭВМ типа IBM PC имеет перезагружаемый генератор знаков емкостью 8 Кбайт, который содержит точечные представления для 256 символов. Фактически эти 8 Кбайт памяти знакогенератора размещены в оперативной памяти ПЭВМ и занимают адреса с DC000 по DDFFF. Каждый алфавитно-цифровой символ представляет собой в максимальном случае матрицу 7x9 точек изображения, а каждый псевдографический — матрицу 9х 14 точек, причем, каждый символ кодируется с учетом межсимвольных и межстрочных пробелов. При загрузке генератора знаков на каждый символ отводится по 32 байта A6 слов), которые в дальнейшем будем называть матрицей символа. На рис. 2.3, а и б показано размещение областей для кодирования алфавитно-цифрового и V 1 слодо 15 9 спово fi СЛОВО 16 споЪо 1 О & 15 ( ш "* 1 О с Ш Рис. 2.3 46
псевдографического символов в матрице символа соответственно (А— область для кодирования алфавитно- цифрового символа Gx9); В — область для кодирования псевдографического символа (9x14); С — неиспользуемая область). При размещении существенным является лишь размер области для символа, относительное же ее расположение в матрице символа определяет лишь место символа внутри строки, т. е. символ может быть приподнят или опущен относительно условного уровня строки на экране, которому соответствует девятое слово в матрице символа. Неиспользуемая часть матрицы может быть заполнена как угодно. Пример кодирования буквы «Р» в области А показан на рис. 2.4. Значение бита, равное единице, соответствует точке на экране дисплея. Вид буквы на экране Слово 1 9 Биты (область Л) 6 5 4 3 2 10 1111110 110 0 111 110 0 111 110 0 111 110 0 111 1111110 110 0 0 0 0 1 10 0 0 0 0 1110 0 0 0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Рис. 2.4 Приведем алгоритм для программирования генератора знаков монохромного псевдографического дисплея: вывести в 8-разрядный порт управления дисплеем (адрес порта ЗВ8) константу ООН (шестнадцатеричное); загрузить матрицы соответствующих символов в область генератора знаков, размещенную в адресах DC000—DDFFF; вывести в порт ЗВ8 константу (например, 29Н), которая устанавливает требуемый режим работы дисплея. Режим «25*80» означает (единица в нулевом разряде), что на экране дисплея размещаются 25 строк по 80 символов. Режим «видео» (единица в третьем разряде) позволяет отобразить символы в соответствии с их атрибутами, в противном случае экран дисплея погашен. Режим 47
«разрешить мерцание» (единица в пятом разряде) разрешает мерцание символа на экране. Остальные разряды не используются. Для задания функции дисплея следует поместить единицу в соответствующем разряде. Указанный алгоритм реализован в программе на языке Макроассемблер, которая приведена ниже. TITLE CODE SEGMENT ASSUME ORG START: PUSH POP CLD MOV MOV PUSH POP ES MOV MOV MOV XOR OUT 48 Загрузка генератора знаков дисплея ЕС-1840 CS DS SI, GEN CS:CODE, DS:CODE, ES:CODE 100H ;регистр CS сохранен ;в стеке ;DS=CS ;флаг DF=0 указывает направление увеличения счетчика ;при выполнении оператора REPZ MOVSB ;SI = указатель блока .-матриц символов АХ DC00 ;АХ = DC00 АХ ;ES=DC00, с учетом механизма ад- ;ресации в ПЭВМ ;этому значению соответствует физический адрес DC000 ;DI=0 — смещение ;в области генератора знаков СХ, 2000Н ;СХ=2000Н — счетчик пересылаемых ;байтов DX=3B8 — адрес ;порта управления ;дисплеем ;AH=0, AL=0 ;установка дисплея в ;режим загрузки генератора знаков DI, О DX, 3B8 АХ, АХ DX, AL
REPZ MOV OUT XOR INT GEN CODE MOVSB AL, 29H DX, AL AX, AX 21 DB 2000 ENDS END ;загрузка генератора ;знаков DS : [SI ] = ;:= » ES: [DI] ;задание функций ;дисплея ;перевод дисплея в ;рабочий режим ;AL=0, АН=0 ;завершение программы DUP (?) В этом примере область матриц символов просто резервируется. Предполагается, что она будет заполнена в процессе редактирования средствами трассировщика АТ86 в режиме FONT. Этот процесс будет описан ниже. Если бы мы собирались использовать программу сразу, то вместо псевдооператора DB 2000 DUP (?) следовало бы поставить последовательность псевдооператоров вида DW IFF, 080, ..., 1F0, каждый из которых описывал бы матрицу определенного символа. Создание шрифта для дисплея. Если все это показалось слишком сложным, можно не писать свою собственную программу, а воспользоваться одной из многочисленных готовых программ, которые выполняют загрузку знакогенератора дисплея, например CYRFONT. СОМ, и выполнить ее редактирование с помощью трассировщика АТ86. Это позволит создать свой собственный вариант шрифта или даже перейти к другой кодовой таблице. Для этого, загрузив АТ86, необходимо выполнить следующую последовательность команд. 1. Загрузить в рабочую память АТ86 программу загрузки генератора шрифта (CYRFONT. COM): >N A : CYRFONT. COM >L 2. Перейти в режим восстановления ассемблерного текста программы: ?>U CS : 0100. Нажимая клавишу «пробел», просмотреть программу и обнаружить адрес, начиная с которого расположены матрицы символов (как правило, они располагаются или в начале, или в конце программы). 49
3. Перейти в режим FONT: >FONT **** : **** (например > FONT 1Е62 : 0123). В режиме FONT на экране дисплея справа будет размещаться карта изображений всех знаков той таблицы, которая загружена в настоящий момент, слевг.— таблица, наглядно и укрупненно показывающая вид программируемых символов. Таблица, в которой отображается верхняя часть буквы «Р», приведена на рис. 2.5. В таблице отображаются 16 1Е62:0256 .******. баЙТ' Т0 еСТЬ Р0ВН0 поло^»а 1Е62:0257 матрицы символа, что, ко- 1Еб2!о258 ! * * ! ! * * * нечно, снижает наглядность. 1Е62:0259 • . Для перемещения по карте 1F62-02SR ¦ * * • • • * * символов, расположенной на 1Е62-025С ".**!!*** экране справа, используют 1E62-025D ........ клавиши управления движе- 1Е62:025Е . * * . . * * * нием курсора. При этом в J^62:025F таблице слева последователь- 1Е62:0261 '.******! но отображаются матрицы 1Е62-0262 . * * . . .' ! '. соответствующих символов. 1Е62:0263 4. Выполнить редактиро- iF^-n9fi4 * * * вание символа. Кроме са- ^ мого символа в таблице зна- Рис 2 5 чком «белое лицо» (на рисунке он не показан) отмечается текущее положение курсора. Редактирование выполняется с помощью команд, приведенных в табл. 2.3. 5. Закончив редактирование символа, нажать клавишу «ввод». 6. Подготовив матрицы для требуемых символов, сохранить отредактированный файл на диске, например под именем CYRFONT: >W A : CYRFONT. COM 7. Выйти из трассировщика АТ86: >Q >QUIT AT86 (Y/N)? >Y Для последующей работы с созданным загрузчиком знакогенератора необходимо дать команду на его выполнение. Если работа в режиме нового знакогенератора будет производиться длительное время, то целесообразно команду запуска загрузчика генератора включить в ко- 50
Таблица 2.3 Команда «Пробел» F М R и H/V X/Y Т/Е С CTRL-S/D CTRL-A CTRL-G/Y/B/H Выполняемое действие Очистить (установить) ячейку таблицы Перевернуть символ «вверх ногами» Отразить символ относительно условной вертикальной центральной линии Инвертировать изображение Вернуть символ в исходное до начала редактирования состояние Вставить горизонтальную (вертикальную) линию Удалить горизонтальную (вертикальную) линию Определить блок копирования между «Т» или «Е» Копировать блок в положение текущего курсора Установить (удалить) ячейку таблицы Вернуть курсор в левый верхний угол таблицы Перемещение курсора: G — влево; Н — вправо; Y — вверх; В — вниз мандный файл загрузки ОС AUTOEXEC. BAT с тем, чтобы его загрузка производилась автоматически. 2.5. Программы для работы с ленточным стримером Ленточный стример (или просто стример) — это такое устройство персональной ЭВМ, которое позволяет вспомнить технологию работы на больших и мини-ЭВМ. Говоря точнее, стример — устройство хранения данных с последовательным методом доступа. Информация помещается на магнитной ленте, упакованной в кассету (Data cartrige). Кассета данных по размерам и внешнему виду напоминает магнитофонную компакт-кассету. Различают кассеты емкостью 40, 60 и более Мбайт. По габаритам стример примерно соответствует размерам дисковода для гибких дисков. Конструктивно стримеры выпускаются в виде отдельных (автономных) устройств или встраиваемых блоков. Скорость доступа к данным у стримера сравнима (вернее немного меньше) со скоростью обмена информации дисковода гибких дисков. Так, копирование 150 Кбайт с жесткого диска на гибкий (гибкий диск заполнен на 50 %) занимает 25 с; копирование 150 Кбайт g жесткого 51
диска на кассету данных (кассета емкостью 40 Мбайт заполнена на 50 %) занимает около 30с. Процесс форматирования и разметки ленты занимает около 35 мин. Сброс 20 Мбайт информации с жесткого диска на форматированную ленту занимает приблизительно 20 мин. Использование ленточного стримера позволяет не только хранить большие объемы информации на магнитной ленте, но и повысить надежность разрабатываемых прикладных систем. Применение стримера особенно необходимо в комплекте оборудования сетевого файл-сервера. В этом случае живучесть прикладной системы поддерживается регулярным копированием программ и данных с жесткого диска на стример. Копирование может производиться как в интерактивном режиме, так и в автоматическом, с помощью специальных программных средств. Для обеспечения работы стримера фирма «Талгрэс Текнолоджис» (Tal- lgrass Technologies Corp.) выпускает необходимое программное обеспечение. В комплект входят следующие программы: TMSINIT; TMS; PREPTAPE; ALARM; ALARMCLK; ТЕХ; XTREE; IMAGE; BACKTRACK; MMENU. В табл. 2.4 кратко перечислены функции, выполняемые этими программами. Порядок подготовки кассеты к работе: описать в файле CONFIG.SYS стример командой Device-TMSINIT. COM; вставить кассету данных в стример; загрузить программу TMS. EXE (после загрузки она остается резидентной в памяти, занимая около 150 Кбайт), эта программа поддерживает все операции по управлению кассетой данных (программа может быть также включена в файл AUTOEXEC. BAT); вызвать программу MMENU и выбрать режим PREPTAPE; форматировать кассету, если она новая; разбить кассету на тома после форматирования (допускается до пяти томов) или, если требуется, изменить прежнююю разбивку, однако при этом все данные на кассете будут потеряны. Работа со стримером. Для работы со стримером необходимо, еще раз напомним, чтобы устройство-стример было описано в файле CONFIG.SYS, а программа TMS — загружена. После этого можно приступать к работе. Заметим, что если использовать, например, утилиту Norton Commander, то работа с кассетой ничем не будет отличаться от работы с дисками. Точно так же, используя клавиши управления курсором или «мышь», можно двигаться 52
Таблица 2.4 Программа TMSINIT TMS PREPTAPE ALARM ALARMCLK TEX XTREE IMAGE BACKTRACK MMENU Функция (Назначение) Драйвер стримера Система управления кассетой данных Подготовка кассеты к работе: форматирование; разбивка на тома Установка времени начала архивации данных в автоматическом режиме Резидентная программа, активизируемая за 2 мин до времени, установленного программой ALARM, дасг звуковой сигнал, после чего в установленное время запускает командный файл TGALARM.BAT Файловые операции на стримере: архивирование каталогов; копирование файлов; снятие справки с гома Организация каталогов на дисках и кассетах Операция архивирования жесткого диска; архивирование жесткого диска целиком на кассету; восстановление всего архива с кассеты на диск; выборочное восстановление архива с кассеты на диск Автоматическая пофайловая архивация Интерфейс с пользователем для работы с программами BACKTRACK, ТЕХ, PREPTAPE, ALARM, XTREE, IMAGE по каталоговой структуре, создавать новые каталоги, копировать, переименовывать, редактировать и просматривать файлы. Для архивирования жесткого диска на стример лучше воспользоваться программой IMAGE. С ее помощью можно создать архивный образ жесткого диска на кассете данных либо выполнить автоматическую пофайловую архивацию. Программа ТЕХ — специальная программа, позволяющая выполнять различные файловые операции. Состав этих операций шире, чем в Norton Commander, так как добавлены операции: BACKUP (архивировать каталог); PRINT (печать); RESTORE (восстановить архив на диск); UNMOUNT (заменить кассету данных); ZAP (корректировать данные непосредственно на кассете). Программа ТЕХ работает не только с кассетой данных, но и с дисками. К недостаткам программы относится отсутствие поддержки «мыши». Архивация по «будильнику». Для обеспечения выполнения файловых операций в желаемое время следует 53
использовать программы ALARM и ALARMCLK. Для этого необходимо выполнить следующее: включить ALARMCLK в файл AUTOEXEC. BAT; установить путь (PATH) от программы ALARM к программе ALARMCLK; вызвать программу ALARM, при этом на экране появится меню, содержащее функции ADD/DELETE ALARMCLCCK IN AUTOEXEC.BAT SET ALARM TIME SNOOZE FOR 30 MINUTES ALARM ON/OFF Исцользуя клавиши управления движением курсора, выбрать функцию SET ALARM TIME и установить время (час и минуту) начала архивации, например 23 : 59; установить «будильник» в положение «включен» (ALARM ON); запустить программу ALARM.CLK. За две минуты до начала архивации программа исполнит короткую мелодию, что укажет пользователю ее готовность приступить к работе. Если потребуется отменить немедленную архивацию и перенести ее на другое время, необходимо вызвать функцию ALARMCLOCK и выбрать опцию SNOOZE, что позволит отложить операцию на 30 минут после мелодии. Это можно проделать любое число раз. Несколько рекомендаций: для того, чтобы программа «будильник» работала в заданное время, можно включить ее в файл AUTOEXEC. BAT (это можно сделать выбором функции ADD/DELETE ALARMCLOCK IN AUTUEXEC. BAT); непременным условием автоматического включения файловых операций является наличие командного файла TGALARM. ВАТ, который будет вызван для исполнения в заданное время. Этот файл для выполнения архивации мог бы выглядеть следующим образом: ECHO OFF CLS ТЕХ BACKUP (PATH) (PATH) IF ERRORLEVEL 1 GOTO FAIL ECHO Операция архивирования (PATH) на (PATH) завершилась успешно GOTO OKI :FAIL ECHO Операция архивирования не выполнена :ОК1 Автоматическое восстановление информации с кассеты на диск можно выполнить с помощью, например, следующего командного файла: 54
ECHO OFF CLS TEX RESTORE <PATH> (PATH) IF ERRORLEVEL 1 GOTO FAIL ECHO Операция восстановления (PATH) на <РАТН> завершилась успешно GOTO OKI :FAIL ECHO Операция восстановления не выполнена :ОК1 Следует отметить, что для работы программ ALARM и ALARMCLK не требуется никаких дополнительных аппаратных средств (имеются в виду встроенный таймер и CMOS-память). Рассмотренный способ сохранения информации обладает одним недостатком — отсутствует удобный интерфейс с прикладной системой. Забегая вперед, укажем способ организации архивирования и восстановления программного обеспечения и базы данных с помощью программы, созданной средствами Clipper. Прежде всего создаем экранное меню, содержащее все необходимые для работы администратора прикладной системы режимы. Функция INKEY () обеспечит наблюдение и срабатывание «будильника» в те интервалы времени, когда система «свободна», то есть не выполняет никаких заданий. Использование этой функции может незначительно (до 1 мин) задерживать срабатывание «будильника», что в общем несущественно. Функции собственно архивирования и восстановления могут быть реализованы с помощью общесистемных утилит (COPY, BACKUP и RECTORE) по команде RUN. Однако предпочтительнее использовать команду системы Clipper — COPY FILE ..., поскольку она работает быстрее, допускает обслуживание как гибких, так и жестких дисков и позволяет полностью контролировать процесс записи, оставляя возможность интерактивной работы с администратором. Практика показывает, что предложенный способ сохранения информации целесообразно использовать в длительно и непрерывно работающих системах. Экономически он оказывается более оправданным, чем ведение «горячих» копий базы данных (запись производится и в основную, и в резервную базы данных), использование специальных файлов — протоколов новых записей или ведение журнала регистрации контрольных точек.
Глава 3. ЯЗЫКИ ВЫСОКОГО УРОВНЯ И СИСТЕМЫ ПРОГРАММИРОВАНИЯ 3.1. Обзор языков высокого уровня Однозначно рекомендовать или спорить о достоинствах того или иного языка, в том числе и языка программирования, —довольно неблагодарное дело. Практически выбор языка программирования для персональной ЭВМ чаще всего определяется исходя из приобретенного ранее опыта работы на том или ином языке, имеющейся системы программирования и, конечно, сложности поставленной задачи и перспектив дальнейшего ее использования. Основные инструментальные языки высокого уровня для ПЭВМ — это в основном широко известные языки, используемые на «больших» ЭВМ, — Бейсик, Паскаль, Си, Фортран, Кобол, Лисп, Пролог, АДА. На учебных (школьных) ПЭВМ используются языки: Рапира, Робик, Лого. Не ' вдаваясь в детальные описания указанных языков, рассмотрим кратко их основные свойства и возможные области применения. Бейсик. Причина широкого распространения этого языка прежде всего в том, что Бейсик очень прост в освоении и использовании [10]. В Бейсик, как правило, встраиваются удобные функции для работы с экраном дисплея, клавиатурой, внешними накопителями, принтером, коммуникационными каналами. Это позволяет относиться к Бейсику как к «продолжению» аппаратуры ПЭВМ. Появление трансляторов, которые на этапе составления и отладки программы используют преимущества интерпретационного режима, а после завершения отладки компилируют программу, формируя эффективные машинные коды поставило Бейсик в ряд с другими языками высокого уровня и придало ему дополнительную популя- ность. Достаточно сказать, что Turbo-трансляторы большей 56
частью написаны на Бейсике, благодаря чему эффективно организованы работа с экраном, световая подсветка курсора и участков «окон». В настоящее время имеется довольно много реализаций этого языка, но наиболее популярна версия Бейсика для операционной системы типа MS-DOS. Ядром Бейсика является так называемая кассетная версия объемом 32 Кбайт, встроенная в ПЗУ машины. Термин «кассетная» связан, по-видимому, с первыми моделями мини-ЭВМ, загрузка в которые производилась с помощью кассеты с магнитной лентой. Дисковая версия, расширяющая возможности кассетой, является частью ДОС и имеет операторы доступа к дискетам. Самыми широкими разновидностями Бейсика являются расширенные версии под именем Basica, разработанная фирмой IBM, и GW-Basic, разработанная фирмой «Оливепи персонал компьютер» (Olivetti Personal Computer). Поставляемые другими фирмами версии этого языка мало чем отличаются друг от друга, программы на Бейсике могут быть сравнительно легко переработаны для любой модификации или версии, конечно за исключением тех случаев,когда нереализуемость тех или иных операторов может принципиально влиять на смысл и постановку задачи. Паскаль и Си. Эти языки являются более сложными языками и используются программистами-профессионалами. Трансляторы с этих языков работают в режиме компиляции, что позволяет создавать эффективные машинные программы. Важным для построения больших программных систем свойством этих языков является модульность. Особенности этих языков способствовали тому, что именно на Паскале и Си разрабатывается большинство крупных программных систем для персональных компьютеров. Следует отметить, что между указанными языками, несмотря на общее сходство, имеются существенные различия. Паскаль [13] является, так сказать, классическим языком программирования и наряду с Бейсиком считается также учебным языком; он принят во многих учебных заведениях как базовый язык для изучения программирования. Язык СИ [20 ] первоначально был ориентирован прежде всего на разработку системных программ. Этот язык, в частности, послужил главным инструментом для создания 57
операционных систем UNIX и MS-DOS. В этом языке имеются более гибкие средства для эффективного использования особенностей аппаратуры, чем в Паскале. С другой стороны, синтаксис Си сложнее, чем Паскаля. Однако в целом эти языки сравнимы. Широкое распространение получили созданные программные продукты для работы с этими языками: Turbo Pascal и Turbo С фирмы «Борланд Интернэшнл» (Borland International), Lattice С Compiler фирмы «Инновентив Софтвэа ЛТД» (Innovative Software LTD)y С Compiler и Pascal Compiler фирмы «Микрософт» (Micros). Фортран и Кобол. Эти языки имеют очень точно определенные области применения. Язык Фортран [21 ] в реализациях для ПЭВМ Fortran Compiler фирмы Microsoft, Fortran 77 для PC DOS и CP/P 86 фирмы «Диджитал Ресерч» (Digital Research) традиционно широко используется при разработке программ для решения инженерных задач. Кобол создан для решения экономических задач [12]. Особенно популярен Cobol Compiler фирмы Microsoft. По данным, представленным автору специалистами советско-болгарского института «Интерпрограмма», программы, составленные на Коболе, работают в 1,5—2 раза быстрее реализованных на Бейсике. Лисп и Пролог. Эти языки искусственного интеллекта тоже удобно представлять парой, поскольку они очень близки по своим возможностям. Что их существенно отличает, так это географические области распространения: Лисп популярен в Америке, Пролог — в Европе. Их реализации для ПЭВМ Turbo Prolog и Mu Lisp фирмы Microsoft На существующих ПЭВМ рассматривать эти языки как средства для создания серьезных, не игрушечных эрсспертных систем было бы наивно. Заканчивая этот обзор, следует упомянуть язык АДА, получающий все более широкое применение при проектировании систем реального времени, в частности ГПС. Фирмой «Вести» (Westi) разработаны компилятор с языка Janus/ADA, работающий в ОС СР/М 86, а также средство для моделирования таких систем — GPSS [22]. В последнее время появился новый класс языков, ориентированных на создание систем управления базами данных (широкоизвестный dBASE [7]), и распределенных систем. К последним относится непроцедурный структу- 58
рнрованный язык четвертого поколения SQL (Structured Query Language). По предеппи уже была высказана мысль, что так как ПЭВА\ — sto область активного бизнеса, то судьбой аппаратных, программных, н, конечно, языковых средств распоряжается не строгая наука, а, будем говорить, деньги, опосредованные в количестве разработок, выполненных на данном языке, и сопутствующей рекламе, поэтому целый ряд хороших, а может быть и лучших языков оказываются пока не доступными для широкого применения, поскольку не разработаны надежные трансляторы. Как признаются зарубежные разработчики, чтобы продвинуть программное средство на рынок, требуются условно 1 млн долларов на разработку и 3 млн долларов на рекламу, это, разумеется, энтузиастам-одиночкам не под силу.Крупные же фирмы неохотно идут на финансирование принципиально новых разработок, поскольку это связано с риском потерять влияние на сложившемся рынке традиционных программных средств. Поэтому в настоящее время развитие языковых средств происходит не столько за счет появления новых языков и трансляторов, сколько за счет совершенствования существующих. При этом можно отметить две тенденции. Первая — создание все более удобной среды для собственно программирования на языке, вторая — постепенное устранение явных недостатков языков за счет расширения их возможностей путем включения эффективных средств для быстрого создания меню, описания входных и выходных форм, представления данных, включая деловую графику и т. п. В какой-то степени наблюдается «стирание гранен» между языками. Возможности, представляемые последними версиями трансляторов, настолько велики, что лля их определения оказалось оправданным ввести новый термин — «системы программирования». 3.2. Системы программирования Средства программирования па языках высокого уровня ПЭВМ включают в себя встроенный интерпретатор языка Бейсик (здесь это не рассматривается, так как документация по Бейсику приходит с машиной) и трансляторы различных языков, работающие в интерпретирующем или компилирующем режиме. 59
Учитывая специфику ПЭВМ, современные трансляторы дают пользователю, как правило, следующие возможности: редактирование программ (функция Edit); загрузка, запуск программ (Load, Run); компиляция (Compile); отладка (Debug); сохранение файлов, результатов прогонки, протокола работы (Save). Несмотря на то, что во всякой операционной системе есть редактор текстов, трансляторы, тем не менее, включают и свои редакторы, которые имеют дополнительные возможности, необходимые для быстрого набора программы на конкретном языке. Например, в GW-трансляторах фирмы Olivetti Personal Computer для набора зарезервированного в языке слова достаточно нажать одновременно клавишу «Доп» и первую букву любого из слов: Width, Else, Run, Then, Using, Input, Open, Print Auto, Screen, Delete, For, Goto, Hexs, Key, Locate, Xor, Color, Val, Bsave, Next, Merve. Широко распространены трансляторы Turbo фирмы Borland International для языков Бейсик, Си, Пролог, Фортран, Ассемблер. Следует сказать, что фирма широко использует в своих трансляторах лучшие из имеющихся компиляторов и интерпретаторов. Так, в Turbo С используется компилятор фирмы Microsoft. Такой подход гарантирует высокое качество продукта. Работа с Turbo-трансляторами всех языков внешне совершенно одинакова, поскольку пользователю предоставляется стандартный набор функций, отображающихся в главном меню: FILE — работа с файлами; EDIT — редактор; RUN — запуск загруженной программы; COMPILE — компиляция; OPTIONS — задание опций компиляции; PROJECT — описание сегментирования программ; SETUP — расположение окон; WINDOW — режим окон; DEBUG — задание режима отладки. Разработчики построили Turbo-трансляторы по единой идеологии, что позволило: подключать компиляторы с любого языка к Turbo-оболочке, которая обеспечивает работу с пользователем (дисплеем); в некоторых случаях совместно отлаживать программы, написанные на разных языках (например, Си- и Пролог-программы); поддерживать единый стиль диалога с пользователем путем использования стандартного набора функциональных и управляющих клавиш (например «КЛЮЧ» — возврат в предыдущее состояние работы транслятора; F1 — подсказка; 60
«ВВОД» — выбор режима или вида работ; «-,-> — управление движением курсора по экрану или внутри «окна»). Turbo-трансляторы имеют мощную систему помощи, которая существенно упрощает освоение и работу с ними, однако большой набор предоставляемых пользователю возможностей делает необходимым снабдить это средство, так сказать, кратким путеводителем. Для знакомства с системами Turbo достаточно рассмотреть какой-либо один транслятор, мы это сделаем на примере системы Turbo-Basic. 3.3. Работа в Turbo-Basic Дискета с Turbo-Basic должна содержать следующие системные файлы: транслятор — ТВ.ЕХЕ; файл помощи — TBHELP. ТВН; файл конфигурации с расширением ТВ (обычно TBCONFIG.TB). Работа по созданию пакета программ включает следующие этапы: набор (редактирование) программы и сохранение ее на внешнем носителе (дискете); трансляция; отладка отдельных программ; сборка отдельных программ в пакет, включение макрокоманд; комплексная отладка; комплексная сборка и сохранение объектных кодов программ. Транслятор Turbo-Basic является удобным инструментом для выполнения всех перечисленных этапов и, кроме того, предоставляет пользователю многообразный сервис, позволяющий сделать процесс работы увлекательным. Для вызова Turbo-Basic достаточно набрать команду: А> tb. После запуска программы на экране дисплея проявляется первый кадр, содержащий главное меню (рис. 3 1). Перечень основных функций находится во второй строке, а в нижней строке, как и на любом этапе работы, Turbo Basic File Edit Run Compile Options Setup Window Debug Turbo Basic version 1.0 Copyright (c) 1987 by Borland International, Inc. Fl-Help F5-Zoom F6-Next F7-Goto SCROLL-Size/move AH-x-Exit Рис. 3.1 61
находится подсказка, поясняющая, какими функциональными клавишами можно воспользоваться. Для продолжения работы следует нажать клавишу «ВВОД». Середина экрана очистится, и курсор с подсветкой будет установлен на первой по порядку функции File. Выбор фхнкпии осуществляется подводом курсора на место с именем этой функции. Клавиша «ВВОД» позволяет зафиксировать выбор функции и перейти к следующему этапу — выбору опции этой функции (от английского option— элемент выбора). Рассмотрим функпии главного меню и соответствующие им опции. File —работа с файлами. Функция File служит для: указания рабочего директория; указания имен файлов, с которыми будет производиться работа и которые будут загружаться или сохраняться на диске; выхода из Turbo- Basic. \ Эта функция имеет следующие оппии: Load, New, Save, Write to ..., Main file, Directory, Change dir, Os shell, Quit. Load — используется для загрузки файла с целью компиляции, запуска, редактирования, сохранения, т. е. файлы должны иметь одно из расширений (ЕХЕ, ВАК, COM, BAT, BAS); по умолчанию — расширение BAS. Допускается вместо имени файла набирать символы «*» или «?» для вывода всего или части директория. Курсорами движения по экрану можно выбрать нужный файл. Нажатие клавиши «ВВОД» обеспечивает загрузку выбранного файла. New — очищает текущий редактируемый файл, сохраняя его имя. По умолчанию — имя NONAME. BAS. Save — используется для сохранения текущего файла на диске. Предыдущей версии этого файла будет присвоено расширение ВАК. Задать другое расширение позволяет опция Backup sourse file функции Setup (см. ниже). Write to ... — присоединение нового имени к директорию или переименование текущего файла при записи его на диск. Main file — задание имени главного файла. Используется при работе с большими программами на стадии компиляции, сборки или отладки. Directory — служит для получения на экране листинга текущего директория; выбора поддиректория; изменения маски просмотра директория. 62
Change dir — служит для задания нового текущего директория. Оз shell — используется для временного перехода в ОС. При этом Turbo-Basic сохраняет свое текущее состояние. Чтобы снова продолжить прерванную работу с транслятором, достаточно ввести команду «Exit». Quit — выход из Turbo-Basio. Чтобы снова продолжить с ним работу, необходимо заново загрузить программу tb. Существует альтернативный способ выхода — на любом этапе работы достаточно нажать клавиши «ДОП»-Х. Edit — редактирование файлов. Процесс редактирования в системе Turbo в основном соответствует принятому в текстовых редакторах, поэтому мы приведем здесь только команды редактирования, поддерживаемые системой: Команды управления движением Символ влево » вправо Слово влево » вправо Строка вверх » вниз Прокрутка вверх » вниз Страница вверх » вниз Режим вставки Вставить строку Удалить строку курсора Вставка » конец строки » левый символ » символ Клавиши или комбинации клавиш ~S или «- ~D или ->¦ ~А ~F ~Е или' стрелка вверх' ~Х или 'стрелка вниз* ~W ~Z ~R ~С и удаление ~V или 'ВСГ ~N ~Y ~Q~Y ~Н ~G или 'УДЛ* » правое слово ~Т Блоковые команды Пометить начало блока *КГВ или 'F7' » конец блока ~К~К или 'F8' » слово ЛК"Т 63
Копировать блок ЛК~С Переместить блок "KV Читать блок с диска ~К~1? Писать блок на диск ~K~W Спрятать блок ~К' Н Распечатать блок ~К~Р Прочие команды Окончание редактирования без "K~D, ~K~Q сохранения или Esc Сохранить и отредактировать 'K'S или 'F2' Задание нового файла F3 » режима таблицы ~СГТ Таблица ~1 Красная строка (вкл/откл) ~СГ1 Восстановление строки ~Q L Пометить место на экране ~К'N Найти помеченное место ~0'N Поиск по ключу ~Q~F Найти и переместить ' Q А Повторить предыдущий поиск ~L Проверить начальные буквы ЛР Отказ от команды ~U Восстановить ошибочные сооб- ~Q~W щени я По окончании редактирования для выхода в главное меню требуется нажать клавишу «КЛЮЧ». Run — инициализация объектного кода программы. Чтобы прервать программу, которая зациклилась, и вернуться в главное меню, достаточно нажать клавишу Ctrl-Break (замечание: прерывание возможно, если задан Keyboard Break в опциях компиляции, причем, если задан Auto save edit options в функции Setup, программа автоматически запишется на диск). Compile —компиляция текущей программы. Если файл Main не определен, то компилируется загруженный файл, в противном случае необходимо сохранить текущий рабочий файл, а потом уже начинать компиляцию. Результатом компиляции может быть Memory-файл (по умолчанию), ЕХЕ-файл или ТВС-файл в зависимости от того, включает ли текущая программа обращения к другим подпрограммам, определен ли Main-файл, надо ли сохранять объектный код. 64
В режиме Compile предусмотрены опции: Memory, EXE file, Chain. Компиляция в память используется в тех случаях, когда программа будет отлаживаться и редактироваться. Если программа окончательно отлажена и проверена, ее компилируют в операционной системе обычным порядком. Файлы с расширением ТВС не содержат библиотеку процедур, поэтому в отличие от ЕХЕ-файлов, они не могут быть инициированы операционной системой. Работа с ними возможна лишь под управлением Turbo Basic. Compile Options — опции компиляции. К ним относятся следующие: Compile to ...; Keyboard break; Overflow; Parameter line; 8087 required; Bounds; Stack test; Metastatements. Compile to ... —Memory, EXE file, Chain (см. функцию Compile). Keyboard break — эту опцию задают, если предвидят необходимость аварийного останова отлаживаемой программы. Останов программы задается символом Ctrl- Break (но не ~С). Отметим особо, что в случае аварийного останова операции ввода/вывода прерываются не сразу. Overflow — позволяет отслеживать ситуации переполнения в арифметических операциях. Parameter line — используется при отладке программы для того, чтобы сообщить выполняемой программе информацию, запрашиваемую ею по команде Commands. 8087 required — задается в случае использования арифметического сопроцессора. В этом случае транслятор генерирует более быстрый и компактный код, специально приспособленный для эффективных вычислений с плавающей точкой. Bounds — проверка границ массивов. Stack test — проверка стеков при включении в программу процедур или функций. Команда $Stack позволяет расширить стековую память. Metastatement — псевдокоманды компиляции. Они делятся на три класса: Stack size — переопределяют размеры стеков; Music buffer — определяют многообразие музыкальных нот; Communications — меняют размещение каждого буфера обмена данными (каждого порта). Эти команды включаются в текст программы, но они не являются программно-выполняемыми командами, а влияют на процесс компиляции программы. 3 Смирнов Н. Н« 65
Псевдокоманды компиляции: $ СОМ; $ INLINE; $DYNAMIC; $ SEGMENT; $ EVENT; $ SOUND; $ IF/$ ELSE/$ ENDIF; $ STACK; $ INCLUDE; $ STATIC. Рассмотрим синтаксис команд: $ COMn size, (n — указывает номер адаптера, size — размер буфера этого адаптера); $ DYNAMIC (указывает транслятору, что явно не описанные массивы нужно размещать динамически); $ EVENT {ON, OFF} (указывает, что программы могут обмениваться событиями); $ IF (выражение 1) [$ ELSE (выражение 2)] $ ENDIF (позволяет в зависимости от условия включать в текст программы во время компиляции либо выражение 1, либо выражение 2; допустима глубина вложения операций $ IF не более 256); $ INLINE [byte list J : (filespec literal] (позволяет включить в текст программы подпрограмму в машинных кодах); $ SEGMENT (указывает начало нового сегмента программы, используется, если программа превышает 64 Кбайт); $ SOUND buffer size (задание буфера фона в операторе PLAY; от 1 до 4096 нот). $ STACK COUNT (задание размера стека во время выполнения. COUNT — число в интервале от 1024 до 32 К, по умолчанию — 1024 бит); $ STATIC (размещение явно необъявленных массивов статически, память для них отводится во время компиляции). Setup-функция. Позволяет менять и запоминать конфигурацию Turbo-Basic в ТВ-файле (обычно CONFIG.ТВ). Задание функции производится с помощью следующих опций: Colors, Miscellaneous, Save Options/Window/ Setup, Directories, Load Options/Window/Setup. Colors — позволяет изменять подсветку окон, оформлять меню, удобно организовывать движение курсора по экрану. Чтобы запомнить измененную конфигурацию, нужно задать опцию Save Options/Window/Setup. Конфигурация запоминается в файле с расширением ТВ (по умолчанию TBCONFIG.TB). Directories — позволяют задать конфигурацию используемых системой директориев: Include — включение 66
директорий при компиляции; Executable — для ЕХЕ и ТВС (СЬат)-файлов; Turbo — для системных Turbo- файлов. Miscellaneous — имеет опции: Auto save edit, Backup sourse files (Auto save edit — автоматическое сохранение отредактированного текста программы в случае, если во время выполнения этой программы пришлось прибегнуть к аварийному останову; Backup sourse files — автоматическое сохранение предыдущей версии текста программы). Load Options/Window/Setup — позволяет задать имя нового файла конфигурации Turbo-Basic. Save Options/Window/Setup — сохранение текущей конфигурации Turbo-Basic (файл конфигурации имеет расширение ТВС; по умолчанию — TBCONFIG. ТВ). Window — управление окнами. Позволяет управлять размерами окон, цветом, открывать или закрывать их. Для задания окон используются опции: Open, Close, Next, Goto, Tile, Stack, Zoom (по умолчанию все окна открыты). Open — открыть окно. Предусмотрены окна: Run, Edit, Message, Trace. Выбранное окно становится активным, т. е. все команды движения по экрану, функциональные клавиши и помощь относятся к этому окну. Close — закрыть окно. Закрытое окно становится невидимым на экране. Next — сделать активным следующее по порядку окно. Предусмотрен следующий порядок окон: Run, Edit, Message, Trace. To же самое можно сделать нажатием клавиши F6. Goto — сделать активным ранее открытое окно. Используется в том случае, когда нежелательно возвращаться в главное меню. Tile — высветить на экран все открытые окна. Окна при этом будут иметь одинаковые размеры. Клавиша F6 позволяет активизировать следующее по порядку окно. Stack — сделать все открытые окна максимально большими по размеру. Zoom — увеличить размеры окон Run и Edit до максимально возможных, т. е. до размера экрана. При этом контурные рамки с главным меню не будут высвечиваться на экране. Повторение команды (или нажатие клавиши F6) вернет этим окнам первоначальные размеры. 3* 67
Debug — управление процессом отладки. Этот режим имеет опции: Trace, Run-time errors. Trace — позволяет проследить выполнение программы по командам. Run-time errors — выполнение программы до первой ошибки. Заметим, что кроме этого транслятор сообщает номер ошибки и курсор указывает ее место в исходной программе. При повторной трансляции Turbo-Basic, находя это место в исходной программе, не производит заново компиляцию, а заменяет команду в объектном коде на новую, то есть эта опция задает интерпретационный режим работы транслятора. В дальнейшем, когда программа будет полностью отлажена, необходимо еще раз компилировать программу с целью получения эффективного объектного кода. 3.4. Пример работы в системе Turbo-Basic. Универсальная программа перекодировки Работа с транслятором начинается с установки конфигурации, что включает задание размеров и подсветки системных окон, указание рабочих и системных директо- риев, режимов сохранения файлов и аварийного останова отлаживаемых программ. Для этого используются функции Setup и Window. Можно рекомендовать с самого начала увеличить размеры окон редактирования (Edit) и выполнения (Run) до максимального размера экрана и убрать рамку с главным меню, т. е. в функции Window задать опцию Zoom. «По вкусу» можно изменить также стандартные размеры других окон. Для этого используется опция Open. Клавиша «фсд-стоп» включает режим изменения размера окон, а само изменение производится клавишами управления движением курсора. Повторное нажатие клавиши «фсд- стоп» отключает режим изменения размеров окон, и в дальнейшем эти клавиши управления движением снова используются для передвижения курсора внутри окна меню. В результате такой установки при работе в режимах Edit и Run на экране не будет никакой информации, не относящейся к выполняемым функциям. Точнее: первая строка будет содержать имя дисковода, с которым производится работа, имя поддиректория, имя файла, номер строки и номер колонки, указывающей расположение курсора, остальная часть экрана будет содержать либо 68
текст программы, либо вводимые-выводимые программой сообщения. Заметим, что информация в окне Run сохраняется даже при переключении функций с целью, например, исправить ошибку, т. е. позволяет сравнивать, как изменилась работа с экраном при изменении программы. Отметим одну особенность: транслятор включает возможность автоматической активизации нужного окна в зависимости от выполняемой функции. Например, при компиляции программы активизируется окно Message, при отладке — Trace. Работу в системе Turbo-Basic мы рассмотрим на примере полезной программы, разработанной Р. В. Зайцевым, позволяющей перекодировать текстовые файлы, подготовленные в любой из распространенных в стране таблиц, в любую требуемую. Подробно на кодировочных таблицах, определяющих соответствие между клавишами и выводимыми на экран символами, мы остановимся в разделе 9.2. Здесь же рассмотрим краткую историю их появления. Распространение программного обеспечения ПЭВМ у нас первоначально связывалось с деятельностью советско-болгарского института «Интерпрограмма». Этим институтом для загрузки кириллицы была предложена таблица, которая здесь названа «старая» (болгарская). Одновременно институты АН СССР вели свои оригинальные разработки, используя таблицу, которая сейчас называется альтернативной. Эта таблица сохраняет многие символы псевдографики. И наконец, с началом массового производства отечественных ПЭВМ был принят ГОСТ, обязующий использовать третью таблицу, называемую основной. Следует сказать, что некоторые программисты для лучшей защиты своего программного продукта или с целью получения особых эффектов визуализации и увеличения быстродействия используют свои загружаемые таблицы. Расшифровка таких файлов требует разработки индивидуальных программ. Все используемые таблицы различаются лишь местом расположения символов кириллицы, что подсказывает очевидный алгоритм реализации программы перекодировки. Программа организована так, что после загрузки на экране выводятся сообщения на русском языке. Эти сообщения будут читаемы только в том случае, если таблица, в которой набирается текст программы, и таблица, 69
в которой эта программа будет работать, совпадают. Для того чтобы программа стала действительно универсальной, предлагаем самостоятельно сделать варианте сообщениями на английском языке, что, разумеется, гарантирует правильное воспроизведение сообщений программы в любой загруженной таблице. Весь процесс работы программы происходит в режиме диалога и ввода с пульта необходимой информации, первоначально следует указать имена входного и выходного файлов, после чего на выбор предлагаются три возможные таблицы кодировки: основная; альтернативная; старая болгарская и задаются вопросы, в какой таблице подготовлен входной текстовый файл и как должен быть закодирован выходной файл. Возможный вариант такой программы приведен ниже: 5 codi % = 0 : codo% = 0 : cod%=10 10 input «Имя входного файла:», inf $ 11 input «Имя выходного файла:», outf $ 20 print «Возможные номера таблиц перекодировки:» 40 locate, 10: print «l — Основная таблица» 50 locate, 10; print «2 — Альтернативная таблица» 60 locate, 10: print «3 — старая болгарская таблица» 70 print 80 print «Итак,» if cod%=10 then goto 90 else goto 110 90 locate, 20, 1: input «Номер таблицы исходного файла —», cod% 100 if cod%>3 or cod%<l then print «Номер неверен I»: cod%=10: goto 20 101 codi %=cod% 110 locate, 20, 1: input «Номер таблицы выходного файла — », cod% 120 if cod%>3 or cod%<l then print «Номер неверен !»: goto 20 121 codo%=cod% 130 open inf$ for input as#l 140 open outf$ output as#2 150 while not eof A) 151 line input #1, si$ 152 l% = len (si$) : if codi% = codo% then goto 320 160 for i%=l to 1% 170 sym$=mid$ (si$, i%, 1) 180 sym%=asc (sym$) : sm%=0 190 if sym%<128 or sym%>239 then 300 200 if codi%=l and codo% = 2 then 400 210 if codi%=l and codo%=3 tran 500 220 if codi% = 2 and codo%=l then 400 230 if codi%=2 and codo%=3 then 700 240 if codi%=3 and codo%=l then 800 250 if codi%=3 and codo% = 2 then 900 300mid$(si$, i%, l)=chr$ (sym%+sm%) 310 next i% 320 print #2, si$ 330 wend 333 close #2 70
340 end 400 if sym%<224 and sym%>175 then sm%=—48 410 if sym%<176 then sm%=+48 420 goto 300 500 if sym%<240 and sym%>175 then sm%=—48 else sm%=+64 510 goto 300 700 if sym%>223 and sym%<240 then sm%=-48 710 if sym%>175 and sym%<224 then sm%=+16 720 goto 300 800 if sym%<192 then sm%=+48 else sm%=—64 810 goto 300 900 if sym%<192 and sym%>175 then sm%=+48 910 if sym%<240 and sym%>191 then sm%=—16 920 goto 300 Зададим имя файла программы COD. bas и разместим программу на дисководе Ь:. После вызова транслятора для изменения имени дисковода воспользуемся опцией Change dir в функции File. В ответ транслятор запросит новое имя дисковода, причем курсор уже будет установлен в том месте экрана, где нужно ввести ответ. Достаточно ввести теперь букву b и нажать клавишу «ВВОД». Поскольку программа новая, необходимо в той же функции File задать опцию New. Набрав текст программы, используя функцию Edit, нужно переименовать файл (опция Rename to ...) и дать имя COD. Расширение bas будет присвоено автоматически по умолчанию. Для выполнения компиляции следует задать выполнение функции Compile. При этом компилируется «текущая» программа, т. е. та, которая только что редактировалась. После выполнения компиляции активизируется окно Message, содержащее: количество строк в программе или номер строки с ошибкой, диагностическое сообщение об ошибке, если она есть, код завершения компиляции, объем памяти, необходимой для объектного кода. В нашем примере допущена ошибка; в строке 50 — использован неправильный разделитель команд. По нажатии клавиши «КЛЮЧ» транслятор автоматически будет настроен на выполнение функции редактирования Edit. Клавиша «ВВОД» позволяет активизировать окно Edit, клавишами управления движения по экрану курсор подводится к нужному месту и исправляет ошибку — операторы программы разделяются символом «:». Для завершения функции редактирования нужно нажать клавишу «КЛЮЧ». Теперь снова компиляция и выполнение (функция Run).
Глава 4. ПАКЕТЫ ОБРАБОТКИ ТЕКСТОВ. УПРАВЛЕНИЕ РЕЖИМАМИ ПЕЧАТИ 4.1. Обработка текстов Пакеты обработки текстов, иначе текстовые редакторы, за рубежом Word Processing — текстовые процессоры, — являются одним из основных обязательных программных средств, которые должен освоить каждый пользователь ПЭВМ. Программные средства этого класса предназначены для облегчения подготовки различных документов и текстов, а в общем случае — файлов в символьном (текстовом) виде. В настоящее время для этого класса ПЭВМ создано большое количество пакетов обработки текстов (текстовых редакторов или текстовых процессоров), которые различаются объемом реализуемых функций. Простейшим редактором, поставляемым часто в составе DOS, является EDLIN. Этот редактор позволяет создавать, редактировать, записывать на диск, объединять произвольные текстовые файлы. Однако в нем отсутствуют средства форматизации текста, управления печатью, многие сервисные команды, что делает его пригодным в основном для набора текстов не очень сложных программ. Для подготовки больших объемов информации на ПЭВМ рекомендуется использовать универсальные текстовые редакторы, полностью перекрывающие возможности EDLIN. В данном разделе мы опишем ППП для автоматизированной обработки текстов «ДОКУМЕНТ», созданный на базе текстового редактора WORD STAR, поставляемый с ЕС-1840, а также кратко остановимся на текстовом редакторе BRIEF фирмы UNDERWARE INCORPORATED. Пакет прикладных программ ДОКУМЕНТ. Система ДОКУМЕНТ состоит из четырех функциональных частей, 72
поставляемых в виде загрузочных модулей, каждый из которых может быть использован как самостоятельное программное средство или совместно с остальными. Система имеет следующие составные части: текстовый редактор (TEXIP.EXE); программа печати документов (DOKUM.EXE); программа работы с адресным массивом (ADR. EXE); программа архивирования документов (ARHIW.EXE). Работа с системой начинается с создания нового или с корректировки уже существующего текста. Однако, прежде чем приступить непосредственно к редактированию, головная программа ТЕХ IP осуществляет диалог с пользователем, из которого узнает, какие именно действия ей предстоит выполнить и с файлом какого вида. Вызов текстового редактора: А > ТЕХ IP (ВВОД) — предполагается, что файл расположен на активном устройстве А. После этого начинается простейший диалог, поддерживаемый только на русском языке. Пользователь сообщает имя файла, с которым предстоит работать. В случае, когда файл с взеденным именем уже существует и не является документом, диалог прекращается и система переходит в режим редактирования. Если же имя новое, то диалог будет продолжен вопросом о типе файла. Пользователь может создать либо произвольный текстовый файл, либо документ. Если это не документ (необходимо ввести Н), то система переходит в режим редактирования (создания) файла. Если же файл будет документом, то можно ввести пароль и на следующий вопрос системы: «Будете работать с авторской информацией?» если в дальнейшем предстоит обработка документа программой ARHIW (необходимо ввести Д). После чего первое пользовательское меню, отвечая на вопросы которого пользователь задает характеристики документа: имя документа; автор документа; классификационный ключ (служит для поиска документов); отдел; должность. После этого может быть получено второе меню для задания форматных характеристик документа. Затем головная программа ТЕХ IP вызывает текстовый редактор и передает ему управление. Текстовый редактор TEXIP. Этот редактор предназначен для создания и последующей корректировки файлов, содержащих тексты произвольных документов (или их частей) или исходные коды программ. Редактор позволяет 73
Таблица 4.1 Команда Справочные команды Движение курсора Вставка (удаление) Блоковые Специальные Формагные Этот экран Управление движением курсора Символ налево » направо Слово направо » налево В начало строки В конец » Строка вниз » вверх Экран вверх » вниз В начало файла В конец файла На отмеченную позицию Вставка (удаление) Вставка ДА (НЕТ) Начать новую строку Вставить пустую строку Стереть предыдущий символ » текущий символ » слово » строку » до конца строки Блоковые команды Начало блока Конец » Копирование блока, отмеченного клавишами F1 начало, F2 — конец Перемещение Стирание Запись в файл Чтение из файла Вставка таблицы ВАРИТ АБ Специальные команды Отметить позицию Конец редактирования Установка табуляций Поиск (замена) 74
Продолжение табл. 4.1 Комбинация клавиш (F10) п ~U -w ~р ~о~р -0-N -o^s ~o~z ~0 ~А ~0~L ~0~С ~о~о ~0~F -0~D **¦ * *>. у Команда Следующий поиск | Ввод контрольного символа i Щелканье клавиш ДА (НЕТ) Форматные команды Выравнивание ДА (НЕТ) Перенос целых слов ДА (НЕТ) Выравнивание абзаца Новая страница Раздел (пункт, подпункт) Пропуск строк Строка «Содержание» Атрибуты Адресный массив Центрирование текста Место содержания Форматное меню Вывод точковых команд ДА (НЕТ) Левая граница влево » » вправо получать на экране терминала документ, с которым в настоящий момент работает пользователь, в том же виде, в каком этот документ будет впоследствии отпечатан. Таким образом, данный текстовый редактор работает по принципу «что видите — то и получаете». С его помощью можно подготавливать стандартные «шапки» и заготовки документов, а потом вставлять их в нужные места обрабатываемого текста. Кроме того, существует возможность включения в текст таблиц, подготовленных табличным процессором ВАРИТАБ. В текстах документов, обрабатываемых данным редактором, могут также встречаться ссылки на адресный массив, информация из которого впоследствии (при печати) включается в текст документов. Для удобства работы ТЕХ IP снабжен многочисленной справочной информацией и подсказками. В табл. 4.1 приводятся основные команды и назначение клавиш и их комбинаций, подробное описание которых содержится в фирменном руководстве по ТЕХ IP. После выполнения редактирования пользователь должен выйти из режима редактирования по команде ~С. 75
После ее ввода последует вопрос: «Сохранить или уничтожить?» В случае ввода С результаты редактирования будут записаны в файл и система запросит имя следующего файла. Для возврата в DOS необходимо нажать клавишу (КЛЮЧ) или (ВВОД). Печать подготовленных документов осуществляется программой DOKUM, которая производит форматирование и распечатку документов в окончательном виде с учетом управляющих форматных характеристик, вставленных в тексты документов на этапе их обработки текстовым редактором ТЕХ IP. Вывод может осуществляться как на принтер, так и на экран терминала. При желании пользователь может управлять начальными номерами страниц и параграфов в случае, если распечатывается, например, часть документа. Кроме того, допускается печать текстов в две колонки, если это позволяют физические размеры страницы. Вызов программы печати: A)DOKUM (ВВОД) На экране терминала будет получено меню программы печати, указав номер измененного параметра и его значение, можно задать требуемый формат. Программы ADR и ARHIW мы рассматривать не будем. Отметим лишь, что эти программы также ведут «прозрачный» диалог с пользователем, что, как правило, не вызывает особых затруднений. Текстовый редактор BRIEF. Текстовый редактор BRIEF является достаточно мощным средством, объединяющим свойства редакторов мини- и больших ЭВМ. BRIEF прост в использовании, обладает свойством отмены любого действия единственным нажатием клавиши «КЛЮЧ». Несмотря на то что встроенные команды выполняют все стандартные функции редактирования, BRIEF позволяет создавать дополнительные команды, изменять существующие команды и переопределять значения ключей. BRIEF снабжен подробной справочной информацией и подсказками на английском языке. В отличие от редактора ТЕХ IP текстовый редактор BRIEF может использовать до 15 буферов при редактировании текстовых файлов, поддерживает многооконный режим редактирования. Вызов текстового редактора BRIEF: А)В имя-файла «ВВОД» В табл. 4.2 приводятся встроенные команды редактора BRIEF. 76
Таблица 4.2 Комбинация клавиш (ДОП)-Ь (ДОП)-о (УДЛ) caon)-d фрпу-к (ДОП)-п (ДОП)-г (ДОПЬ-w (ДОП)-е •*-. -> (PgUp) (PgDn) (Home) (КОН) ~ (PgUp) ~ (PgDn) "• (Home) ~ (КОН) ^ •<— *** —>- (F1) (F2V (F3) (F4) (F7) (F8) (F9) (F10) (КЛЮЧ) (ВВОД) ~ (СТОП) (Shift)—F5 (F5), (flOn)-s (Shift)—F6 (F6), (ДОПЬ-t (ДОП)-с (ДОШ—m, (ДОП)—а {+\ (ВСТ) СДОП)-у (ДОП)—х <ДОП)-8 (ДОП)-Ь (ДОП)-р (ДОП)-г (ДОПН (*), (ДОП)-и Команда Список буферов Изменить имя выходного фарша Удалить символ (блок) » строку » до конца строки Просмотреть следующий буфер Прочитать файл в буфер Записать блок (буфер) на диск Прочитать файл в новый буфер Движение курсора Вверх на экран Вниз » » В верх окна В низ » В начало строки В конец » В верх буфера В низ » К предыдущему слову » следующему » Сменить окно Изменить размеры окна Создать окно Уничтожить окно Переключить память назначения ключей Воспроизвести то же Загрузить макрофайл Выполнить макрокоманду Отменить команду Выполнить » Закончить поиск Поиск назад » вперед Повторить поиск Замена Переключить цветочувствительность Пометить блок Удалить в память Скопировать в память Вставить из памяти Отобразить текущую версию Выход Переход к строке Помощь Печать блока Приостановить сеанс Вставка (замена) Отмена выполненной команды
В заключение отметим, что во многих пакетах обработки текстов при выводе текстовых файлов на печать не предусмотрено изменение некоторых параметров печати или предусмотрены лишь стандартные изменения. Так, средствами ППП «ДОКУМЕНТ» можно получить распечатку, содержащую 1, 2 и т.д. интервалов между строк, т. е. целое число. Для получения расстояния между строк в полтора интервала, можно предложить простую процедуру, реализованную на Бейсике: 10 REM Процедура изменения интервала между строками 20 LPRINT CHR$ B7) «A» CHR$ A4) Процедуру необходимо выполнить перед вызовом программы DOKUM, а при подготовке документа с помощью текстового редактора ТЕХ IP в форматном меню необходимо использовать значение расстояния между строками по умолчанию, т. е. 1. Если подготавливаемый текст содержит формулы, заданные стандартными математическими символами, целесообразно использовать текстовый редактор ABC [2]. 4.2. Управление режимами печати ПЭВМ рассматриваемого класса чаще всего комплектуются матричными печатающими устройствами (ПУ) фирм Японии. Одними из самых распространенных ПУ являются принтеры фирмы «Эпсон» (EPSON) — FX-850 («узкая» печать) и FX-1000 («широкая» печать), отличающиеся размерами каретки. Эти ПУ позволяют: печатать буквы, близкие по качеству к буквам пишущей машинки, или «черновиковые» буквы; выбирать один из многих вариантов типов букв и гарнитуры букв; запоминать в буфере объемом 8 Кбайт выводимую информацию; выводить текст со скоростью до 160 знаков. Проверка работоспособности ПУ производится автономно или под управлением процессора. Печатающее устройство выполнено в виде отдельного устройства. Перед началом его работы необходимо провести заправку бумаги в ПУ, подключить его к сети переменного тока напряжением 220 В, затем включить сетевой выключатель POWER (положение ON), который находится на левой боковой панели ПУ, при этом: загораются зеленые лампочки на панели управления POWER (питание), READY (готово) и ON LINE (неавтономно), 78
красная лампочка PAPER OUT (нет бумаги) загорается, если ПУ включено без бумаги или она подходит к концу; печатающая головка перемещается вправо, влево и останавливается на левой стороне ПУ; ПУ инициируется и переходит в режим «Комплекс», после чего может использоваться в работе. На панели управления кроме переключателя POWER расположены еще три сенсорных переключателя: ON LINE; FF; LF. Каждый из этих переключателей в зависимости от цвета панели выполняет одну из двух функций: с надписями на синей панели (ON LINE, NLQ, DRAFT) имеют силу действия, когда ПУ находится в неавтономном режиме (ON LINE); с надписями на серой панели (OFF LINE, FF, LF) имеют силу действия, когда ПУ находится в автономном режиме (OFF LINE). Рассмотрим работу этих переключателей. Переключатель OFF LINE/ON LINE. Положение ON LINE (неавтономно). При включении электропитания выключателем POWER загорается зеленая лампочка ON LINE, подтверждающая, что ПУ находится в положении ON LINE. Если ПУ находится в положении OFF LINE (зеленые лампочки ON LINE и READY не горят), то для перевода его в положение ON LINE необходимо нажать кнопку ON LINE (зеленые лампочки ON LINE и READY загораются). Следует отметить, что при печати текста лампочка READY мигает и кнопка ON LINE при нажатии на нее не срабатывает. Если кончается запас бумаги или возникает неисправность в механической части ПУ, то оно автоматически переходит в режим OFF LINE. Для продолжения печати необходимо загрузить новую порцию бумаги или устранить неисправность и перевести ПУ в режим ON LINE путем нажатия кнопки ON LINE. Если ON LINE не горит> это означает, что ПУ находится в режиме OFF LINE. Если зеленая лампочка ON LINE горит, то для перевода ПУ в режим OFF LINE необходимо нажать клавишу ON LINE, при этом погаснут лампочки ON LINE и READY. Переключатель FF/NLQ. FF (подача формата) —после нажатия на кнопку FF, если используется непрерывно подаваемая бумага, то она подводится к началу следующей страницы. В случае использования листовой бумаги один лист бумаги выталкивается и необходимо вставить 79
новый лист. Функция подачи бумаги (FF) действует только в автономном режиме (OFF LINE) работы ПУ. NLQ (буквы, близкие по качеству к пишущей машинке) — после нажатия на кнопку NLQ (в режиме ON LINE работы ПУ) выбирается образец шрифта, близкий по качеству к шрифту обычной пишущей машинки. ПУ выдает при нажатии на кнопку NLQ двукратную звуковую сигнализацию о подтверждении выбора стиля NLQ. Переключатель LF/DRAFT. LF (подача на строку) — после нажатия на кнопку LF (в режиме OFF LINE работы ПУ) бумага подается на одну строку. Если кнопка LF удерживается в нажатом состоянии, то бумага непрерывно подается вперед. DRAFT (черновик) — после нажатия кнопки DRAFT (в режиме ON LINE работы ПУ) выбирается стиль черновиковых букв, при этом ПУ выдает однократную звуковую сигнализацию о подтверждении выбора черновиковых букв. Встроенные переключатели печатающего устройства. В ПУ есть два встроенных блока переключателей, которые позволяют выбрать режим управления по умолчанию, необходимый пользователю. Переключатели расположены с правой стороны. Для доступа к ним необходимо снять ребристую крышку, используя для этого крестообразную отвертку. Для снятия крышки выкручивают один винт и, прижимая крышку внизу, направляя усилие ладони снизу вверх, снимают крышку. Перед снятием крышки необходимо отключить питание ПУ, так как любое изменение, сделанное при включенном электропитании, будет игнорироваться до тех пор, пока ПУ не будет выключено и включено один раз; снять статическое электричество с рук и стараться не прикасаться ни к каким компонентам на схемных платах, кроме переключателей. При отгрузке ПУ изготовитель, как правило, устанавливает переключатели в следующие положения: режим печати «пайка»; поле устанавливается на максимум (левое поле на 0, а правое — на 79); интервал между строками 1/6 дюйма,? длина страницы 12 строк; горизонтальные табуляции установлены через каждые восемь интервалов; набор интернациональных знаков; датчик расходования бумаги включен; сигнал возврата каретки выдается в конце строки без автоматической подачи строки; начало страницы устанавливается в позицию печатающей головки при сбросе печатающего устройства путем выключения элек- 80
тропитания или выдачи ESC-кода «@» или же при изменении длины страницы с помощью ESC-кода «С». Следует учесть, что первоначальная заводская установка переключателей является достаточно удобной для подавляющего большинства пользователей и без большой необходимости не следует изменять их положение. Задание новых параметров печати целесообразнее осуществлять программным путем. Однако бывают случаи, когда эти параметры приходится изменять. Функции переключателей первого и второго блоков приведены в табл. 4.3. На ПУ верхнее положение переключателей обозначено ON (включено), нижнее — OFF (выключено). Таблица 4.3 О) Номер пе ключател 1 2 3 4 5 6-8 1 2 3 4 Функция переключателя | Режим печати Начертание нуля Датчик конца бумаги Входной буфер Режим печати Используются для знаков Выбор печатающего устройства Допол нитель ный режим подачи бумаги выбран или нет Блокировка печати на расстоянии 2,54 мм от сгиба бумаги Автоматический перевод строк ON БЛОК 1 Уплотненный 0 (с косой чертой) Не действует Использует коды EPSON Выделенный выбора инте БЛОК 2 Действует Выбран Невозможна Действует OFF «Пайка» 0 Действует Использует коды IBM Обычный рнациональных Не действует Не выбран Возможна Действует только по команде процессора К а юдска а новк СО >, | OFF OFF OFF ON OFF ON ON OFF OFF OFF 81
Автономный контроль печатающего устройства. ПУ FX-850 позволяет в автономном режиме провести автоматическую распечатку всех букв и знаков его набора. Перед запуском на самопроверку необходимо загрузить бумагу в ПУ. Затем выключить электропитание выключателем POWER (положение OFF). Проверка производится путем одновременного нажатия одной из кнопок DRAFT (черновые буквы) или NLQ (качественные буквы) и включения выключателя POWER (положение ON). При этом будет распечатываться набор букв и знаков в одном из выбранных режимов DRAFT или NLQ. Самопроверка будет производиться до выключения электропитания или срабатывания датчика расходования бумаги. Например, если выбран режим DRAFT, то на ПУ будет выведено: Version U—1.0 ! «#$%&' ()*+, —.0123456789:; <==)? ©ABCDEFGHUKLMNOP QRSTUVWXYZ»#$%&' ()*+, —.0123456789:; <=>? ©ABCDE FGHUKLMNOPQRSTUVWXYZ[\ ] «#$% &'()*+, —.0123456789: ; <=)?@ABCDEFGHUKLMNOPQRSTUVWXYZ[\ 1 и т. д. Выбор гарнитуры печатающего устройства FX-850 позволяет загружать любой шрифт из имеющихся табл. 4.4). Таблица 4.4 Режим 1 2 3 4 5 6 7 8 9 1 Гарнитура Уплотненная Расширенная Элит Подчеркнутая Двойной удар С подчеркиванием Верхний индекс Нижний индекс Пропускание через перфорацию i Максимальное число знаков в строке 132 40 96 80 80 80 80 80 Зависит от гарнитуры 82
Получить любую из этих гарнитур можно путем последовательного нажатия кнопок OFF LINE, FF и LF. Рассмотрим последовательность операций при выборе шрифта. 1. Проверить включение электропитания ПУ и загорания всех лампочек POWER, READY и ON LINE. 2. Одновременно нажать на кнопки OFF LINE и FF, придерживая их в нажатом состоянии секунду. Если ПУ даст двукратную звуковую сигнализацию перед отпусканием кнопок, то это означает, что кнопка FF была нажата раньше кнопки OFF LINE и ПУ находится в режиме печати качественных букв (NLQ), который достигается путем двойного прохода печатающей головки. Для продолжения выбора необходимой гарнитуры следует нажать кнопку OFF LINE (для перевода ПУ в неавтономный режим ON LINE) и кнопку DRAFT, если не требуется печать качественных букв. Затем повторяют одновременное нажатие кнопок OFF LINE и FF. При отпускании кнопок OFF LINE и FF ПУ сигнализирует о включении функции выбора гарнитуры следующим образом: звуковой (один раз) сигнализацией ПУ; гашением лампочки READY; миганием лампочки ON LINE. 3. Нажать на кнопку OFF LINE столько раз, сколько указано в колонке «режим». Следует обратить внимание, что при каждом нажатии ПУ выдает звуковую сигнализацию. 4. Нажать на кнопку FF для установки стиля шрифта. 5. Нажать на кнопку LF для выключения режима выбора типа (при этом панель управления возвращается к своей нормальной функции, но ПУ остается в автономном режиме OFF LINE). 6. Нажать кнопку OFF LINE (загораются лампочки ON LINE и READY, и ПУ переходит в неавтономный режим ON LINE). Режим «Пропускание через перфорацию» (ПЧП) применяется при использовании непрерывно-подаваемой бумаги для печати листингов программ или другого материала, не управляемых прикладной программой. Этот режим позволяет не печатать по линии перфорации, по которой бумага будет разрезаться. При выборе этого режима ПУ пропускает шесть строк после печати каждых 60 строк. Так как стандартная страница состоит из 66 строк, то это позволяет оставлять примерно 25 мм свободного поля на нижней части каждой страницы. Если 83
необходимо оставлять половину свободного поля на верхней и нижней части страницы, то верхний край страницы следует установить примерно на 12 мм ниже линии перфорации. На этом выбор гарнитуры заканчивается и ПУ готово к работе. Следует отметить, что можно выбрать несколько гарнитур одновременно, например, расширенную гарнитуру с подчеркиванием. Для ее установки следует последовательно выбрать следующие гарнитуры: расширенную; подчеркнутую; с подчеркиванием. 4,3. Загрузка шрифтов для печати Многообразие используемых (поставляемых) с 16-разрядными ПЭВМ печатающих устройств (принтеров) и отсутствие отечественных принтеров порождают проблему печати букв русского и многих других алфавитов, используемых в СССР. Дело в том, что каждый принтер имеет стандартный набор печатаемых знаков. Этот набор, называемый кодовой таблицей символов ПУ или шрифтом печати, находится в ПЗУ принтера. Естественно, что в ПЗУ можно поместить любой набор знаков. Но поскольку для ПЭВМ международным стандартом является ASCII, то и кодовая таблица должна соответствовать коду ASCII. Код ASCII жестко фиксирует знаки с кодом от 32 до 127 (цифры, знаки препинания и латиница). Поэтому фирмы-изготовители принтеров, которые до недавнего времени не очень интересовались кириллицей, помещают, как правило, в ПЗУ изображения знаков, соответствующие первым 128 кодам ASCII (от 0 до 127) плюс дополнительные буквы европейских алфавитов, регулируемые ДИП-пере- ключателями, при этом оставшаяся часть кодовой таблицы либо дублирует первую (часто — курсивные изображения основных знаков), либо содержит знаки кодовой таблицы IBM, либо остается пустой. Конечно, при поставке ПУ в СССР русский алфавит заносится в ПЗУ, однако единой системы в этом пока нет. Так, в принтере FX-850, поставляемом с ЕС-1840.01, русским прописным буквам соответствуют коды от 161 до 193, а строчным — от 209 до 241. В принтере RAVI-8, поставляемом с ЕС-1840.05, коды русских букв — от 176 до 241, что соответствует основной таблице, принятой как стандарт у нас в стране. 84
Следует отметить, что в режиме высококачественной печати (NLQ) допускается лишь печать знаков кодовой таблицы ПУ. Поэтому при покупке ПУ выбор таблицы знаков имеет важное значение. К счастью, эту проблему, по-видимому, решает развитие техники: последние модели ПУ (например, FX-800/1000) допускают до восьми кодировочных таблиц в ПЗУ. Итак, перед пользователем могут возникнуть две задачи: 1) буквы требуемого алфавита загружены в ПЗУ, но не так, как хочется; 2) букв требуемого алфавита в ПЗУ нет. Поставим проблему несколько шире — обеспечить печать пользовательского набора знаков. Мы выделим три возможных решения проблемы. 1. Написание перекодировочного драйвера ПУ (если русский шрифт в ПЗУ есть), т. е. резидентной программы, перехватывающей коды, посылаемые на принтер, и преобразующей в коды соответствующие таблице знаков принтера. В этом случае мы сохраняем режим высококачественной печати (NLQ). Однако надо иметь в виду, что использование такого драйвера нарушает печать в графическом режиме, так как в этом случае посылаемые на принтер коды зависят лишь от печатаемого рисунка и могут быть в любом диапазоне и, следовательно, при перекодировке посылаемых кодов изображение нарушается. Поэтому более разумный путь — написание переключаемого, управляемого пользователем перекодировочного драйвера ПУ, то есть драйвера, перекодирующего посылаемые на принтер коды лишь при нажатии определенной комбинации клавиш. 2. Загрузка пользовательского шрифта при печати того или иного текста или рисунка. Эта возможность связана с тем, что помимо ПЗУ с определенным набором знаков многие принтеры, в частности Epson, имеют ОЗУ (RAM). Ряд команд принтера (Esc-последовательности) позволяют записать в ОЗУ альтернативный набор знаков для ASCII-кодов и переключать ПУ на использование построенного набора как целиком, так и посимвольно. Возможны также копирование содержимого ПЗУ в ОЗУ и заполнение в ОЗУ неопределенных знаков. Формирование пользовательских знаков и загрузку их в ОЗУ ПУ осуществляют специальные программы — 85
загрузчики шрифтов. При использовании пользовательского шрифта существуют ограничения. Так, например, нельзя печатать загруженным пользовательским шрифтом в режиме NLQ. Следует также отметить, что при выключении ПУ содержимое ОЗУ пропадает и пользовательский шрифт необходимо снова загрузить. 3. Формирование пользовательского шрифта в графическом режиме. Эту функцию осуществляют так называемые программы — знакогенераторы. Рассмотрим подробнее одну из таких программ — LETTRIX фирмы «Хэммерлаб» (Hammerlab Corp.), которая обладает еще и многими другими интересными возможностями. Программа LETTRIX является резидентной программой, позволяющей осуществлять печать текста в графическом режиме любым сформированным заранее шрифтом, управлять режимами печати как глобально, так и внутри текстового процессора. Шрифты для печати формируются программой LXDESIGN.COM. Вызов программы-знакогенератора в зависимости от типа принтера следующий: 1) Epson FX/RX или IBM А > LXDESIGN (шрифт1> <шрифт2> 2) Epson MX А > LXDESIGN/M (шрифт1) <шрифт2> 3) C.Itoh, А > LXDESIGN/C (шрифт1> <гарифт2> где (шрифт 1) — имя файла с формируемым или изменяемым шрифтом; (шрифт2> — файл вспомогательного шрифта (по умолчанию — расширение имени файла со шрифтом — LXH). Следует заметить, что с каждой новой версией список возможных типов принтеров и соответственно способов вызова становится шире. После вызова появляется экран, на котором слева располагается матрица 16x24 (пустая, если шрифт новый, или с первым по порядку символом, если шрифт старый), а справа перечисляются действия по формированию или изменению любого из 256 символов. Отметим, что допускается копирование любого символа как из формируемого, так и из вспомогательного файла со шрифтом. Таким образом, можно сформировать как шрифт с кириллицей 86
в любой кодировочной таблице, так и совершенно произвольный набор знаков. После формирования одного или нескольких шрифтов можно вызывать LETTRIX. Файл с программой LETTRIX называется LX.COM, вызов также зависит от типа ПУ: Epson FX/JX/RX/LQ A>LX/E <шрифт1) <шрифт2) Epson MX A>LX/M (шрифт1> (шрифт2) IBM Graphics A>LX/G <шрифт1> (шрифт2> IBM ProPrinter A>LX/P (шрифт1) <шрифт2> C.Itoh A>LX/C <шрифт1> (шрифт2> Допускается одновременное использование до семи шрифтов. Например, для принтера Epson FX-85/105, если мы хотим использовать заранее подготовленные в файлах RUS.LHX и ARTDECO.LXH шрифты, то необходимо набрать следующую команду: A>LX/E RUS ARTDECO Следует заметить, что LETTRIX загружается в память лишь один раз. Дополнить или изменить используемые шрифты можно лишь после перезагрузки ОС и повторного вызова программы. После загрузки LETTRIX размещается в памяти ПЭВМ и начинает перехватывать коды, посылаемые на принтер, преобразуя их в графические знаки в соответствии с указанными шрифтами. По умолчанию используется шрифт, указанный первым в команде загрузки программы LETTRIX. При одновременном нажатии клавиш (Right—Shift) и (Enter) на экране появляется меню, предлагающее изменить режимы печати. Выбор осуществляется по принципу переключателя нажатием определенных клавиш, а именно: Действие/отмена LETTRIX Пропорциональная печать Выравнивание строки Выравнивание цифр Двойной удар вкл L Р J N D выкл 1 р ] п d 87
вкл выкл Жирный шрифт Наклонный » Высокий » Широкий » Сжатый » Печать графических символов в том числе кириллицы (коды от 128 до 255) Печать команд LETTRIX В I н W с G Q b i h w с g q Выбранные режимы отображаются инверсно. По умолчанию включены следующие режимы: LETTRIX, пропорциональная печать, выравнивание строки, печать графических символов. Нажатием цифровых клавиш 1, 2, 3, 4, 5, 6, 7 выбираются шрифты из числа загруженных. Можно также изменять и другие параметры печати: количество знаков и строк на дюйм, дополнительная левая граница (в 1/12 дюйма), минимальная длина строки для выравнивания, количество пробелов, рассматриваемых как интервал, расстояние между знаками (в 1/240 дюйма). Изменения, вносимые через меню LETTRIX, управляют печатью глобально, т. е. действуют постоянно на протяжении печати всего файла или документа. Помимо этого LETTRIX предоставляет очень полезную возможность управления печатью «изнутри» распечатываемого текста. Для этого при создании файла (можно использовать практически любой текстовый редактор) в текст вставляются управляющие команды LETTRIX, а именно: знак \ плюс одна из описанных выше букв, цифр или специальных знаков. Например, включив в текст сочетание символов \ В, последующий текст при печати будет пропечатываться жирным шрифтом (если дальше, конечно, отсутствуют другие команды). Таким образом, LETTRIX позволяет совмещать режимы и шрифты в процессе печати одного файла.
Глава 5. СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ 5.1. Назначение и область применения СУБД В настоящее время при проектировании различного рода систем, обрабатывающих большие объемы сложно- организованной информации, значительное распространение на ПЭВМ получили реляционные базы данных [8]. Простота языка проектирования и манипулирования данными, удобство общения пользователя с подобными системами управления делают реляционные базы данных все более популярными при выборе программных средств, предназначенных для создания программных средств конечного пользователя. Одной из наиболее распространенных систем управления реляционными базами данных на рассматриваемом классе персональных ЭВМ является СУБД dBASE III PLUS. Эта система является развитием системы dBASE II для 8- и 16-разрядных ПЭВМ, [71. dBASE III PLUS работает в режиме интерпретации команд, что требует постоянного нахождения системы в ПЭВМ 111. В настоящее время широкую популярность приобрел компилятор с языка этой СУБД — Clipper, позволяющий создавать ЕХЕ-файлы программ, работающие в три—четыре раза быстрее созданных dBASE III PLUS. Программный комплекс dBASE III PLUS функционирует в среде операционной системы MS-DOS и располагается на двух дистрибутивных дискетах. Первая дискета (SYSTEM DISK#1) содержит основные файлы dBASE III PLUS: DBASE.COM (загрузчик системы), DBASE. LD1, CONFIG.DB, DBASE.MSG, DBASEINL.OVL. Кроме того, на этой дискете располагаются программы и командные файлы инсталяции системы на жесткий диск. Вторая дискета (SYSTEM DISK#2) содержит файлы DBASE.OVL, ASSIST.HLP и HELP.DBS 89
Отметим, что файл CONFIG.DB (файл конфигурации системы) является необязательным. Он служит лишь для изменения некоторых параметров системы по умолчанию при загрузке dBASE III PLUS (назначение функциональных клавиш, цветов и т. д.). Файл CONFIG.DB можно создавать и изменять с помощью любого текстового редактора. При отсутствии в комплекте ПЭВМ накопителя на жестком магнитном диске применение данного программного комплекса затруднительно, так как само программное обеспечение занимает практически все свободное пространство на НГМД. И еще одно замечание. Некоторые организации в нашей стране провели адаптацию данного программного средства. Поэтому могут встретиться по существу такие же функциональные пакеты, но с другими именами. Наибольшее распространение у нас получили русифицированные версии с именами РЕБУС и Микро-РС-2. При работе с адаптированной версией желательно все же следовать требованиям эталонного dBASE HI PLUS с тем, чтобы в дальнейшем иметь доступ к широкому кругу пакетов, расширяющих возможности dBASE III PLUS или использующих эту СУБД. Так, например, не следует использовать буквы русского алфавита для задания имен полей файлов базы данных в системе Микро-РС-2 при проектировании программных средств, рассчитанных на совместную работу с программами из окружения dBASE III PLUS. 5.2. Общие характеристики и ограничения dBASE III PLUS Система dBASE III PLUS теоретически поддерживает файлы базы данных, имеющие следующие характеристики: число записей — до 1 млрд; объем в байтах — до 2 млрд; размер записи — 4000 байт в файле DBF и 512 Кбайт в файле DBT; количество полей — до 128. В фирменном руководстве по dBASE III PLUS деликатно указывается, что приведенные значения могут быть ограничены размером памяти конкретной ПЭВМ. Сразу следует сказать, что если бы в мире существовала ПЭВМ, способная достаточно быстро работать с файлами такого объема, то эта ПЭВМ называлась бы супер-ЭВМ. Допустимые размеры полей: символьные поля — до 254 байт; поля дат — 8 байт; логические поля — 1 байт* поля примечаний — до 4096 байт или максимальная 90
длина записи используемого текстового редактора; числовые поля — до 19 байт. При работе с системой можно иметь одновременно до 15 открытых файлов всех типов или 10 открытых файлов базы данных. Системой обеспечивается точность чисел в 15 знаков до и 9 знаков после запятой. Следует заметить, что точка, отделяющая дробную часть, не считается за знак при определении точности. Точность в 13 знаков обеспечивается при сравнении ненулевых чисел. В системе можно использовать до 256 активных временных переменных с общим размером до 6000 байт. Если память ПЭВМ превосходит 256 Кбайт, можно увеличить этот размер, назначив опцию MVARSIZE в CONFIG.DB. Размер временной переменной зависит от ее типа: символьная — назначенная длина строки плюс 2 байта; числовая — 9 байт; дата — 9 байт; логическая — 2 байта. Максимальная длина строки команды — 254 символа. Как видно, относительно технических возможностей ПЭВМ dBASE III PLUS, по существу, не имеет ограничений, но это, разумеется, не должно создавать у разработчика лишних иллюзий, поскольку легкость проектирования системы, рассчитанной на обработку большого числа файлов, значительных по объему, может закончиться полной неудачей уже при загрузке базы данных. Рискуя ошибиться на порядок, можно сказать, что программное средство, выполненное с помощью dBASE III PLUS или любой другой СУБД, будет показывать приемлемое время реакции при работе с базой, имеющей несколько тысяч записей. Десятки, а тем более сотни тысяч записей никакая из существующих ПЭВМ в разумное время не обработает. Типы файлов. Система хранит информацию в виде дисковых файлов различных форматов. Имена файлов задаются в соответствии с требованиями ОС, с той особенностью, что не могут начинаться с цифры. Пользователь назначает имя файла во время его создания. Тогда же следует назначать и расширение имени файла по умолчанию исходя из типа создаваемого файла. Однако пользователь может ввести свое расширение, отличное от системного, путем простого ввода расширения в момент ввода имени файла. Однако в этом случае при обращении к файлу 91
необходимо задавать его расширение. При системном формировании расширения это не требуется. В табл. 5.1 приведены все виды файлов и их расширения по умолчанию. Таблица 5.1 Вид файла Двоичный Каталог Базы данных Страховые копни * Примечаний Страховые копии примечаний Индексный Командный Формата Марок Временных переменных Запроса Описания экрана Выборки Формы отчета Текстовый Тип файла (расширение) BIN CAT DBF ВАК DBT твк NDX PRG , FMT 1 LBL MEM QRY SCR VUE FRM TXT * Файлы восстановления команд и процедур имеют это же расширение Рассмотрим эти файлы подробнее. Двоичные файлы (.BIN)—это программы, написанные на языке Ассемблер, откомпилированные, отредактированные и переведенные в двоичную форму, так что они могут загружаться в память с помощью команды LOAD и исполняться командой CALL. Двоичные файлы создаются, когда «ассемблированная» и отредактированная программа преобразуется из формата ЕХЕ в формат СОМ с помощью команды DOS EXE2BIN. Файл каталога (.CAT), или для краткости — каталог, прообраз журнала, помогающий пользователю отслеживать все свои файлы. Так, если файл базы данных регулярно используется вместе с файлом индекса, форматом экрана пользователя, формой отчета, файлом выборки и файлом запроса, можно запомнить имена всех этих файлов в каталоге. Тогда при «активизации» каталога будут открыты только эти файлы. Файл каталога создается и активизируется с помощью команды SET CATALOG TO. 92
Файлы базы данных (.DBF) содержат данные в записях и полях, соответственно в рядах и колонках. Подразумевается, что каждая запись содержит набор уникальной информации. Структура записей файла базы данных создается командой CREATE и изменяется командой MODIFY STRUCTURE. При каждом изменении пользователем структуры файла базы данных система создает страховую копию файла (.ВАК) и новый файл с новой структурой. Данные из страховой копии помещаются в одноименные поля нового файла. Страховые копии с расширением .ВАК создаются также при изменении файла, который был создан посредством MODIFY COMMAND. Файлы примечаний (.DBT) — это текстовые файлы, содержащие данные полей примечаний. Все поля примечаний файла базы данных хранятся в одном и том же файле примечаний, который создается в тот же момент, что и файл .DBF. В силу того что содержимое полей примечаний хранится в отдельном файле, поле примечаний в записи файла базы данных занимает всего 10 знаков. Страховые копии примечаний (.ТВК) — это также текстовые файлы, содержащие данные полей примечаний. Если изменяется структура файла базы данных, имеющих примечания, то создается и сохраняется новый файл базы данных с новой структурой, а также страховая копия файла примечаний. Данные из страховой копии добавляются в новый файл в одноименные поля примечаний. Индексные файлы (.NDX) обеспечивают средства использования базы данных в логическом, а не в физическом порядке. Физический порядок — это тот порядок, в котором записи были введены. Логический порядок представляет собой алфавитный, хронологический или числовой порядок в зависимости от типа поля. Индексные файлы связывают ключ — интересующий пользователя элемент, такой, например, как фамилия, с соответствующим номером записи базы данных. Если использовать базу данных с индексным файлом, то база данных выглядит как бы упорядоченной (отсортированной) по ключевому элементу. Ключ, который может состоять из одного или нескольких полей, также может быть использован для получения прямого доступа к конкретной записи. Индексные файлы создаются командой INDEX. 93
Командные файлы (.PRG) содержат наборы заданий системы, которые были сохранены как программы. Они являются файлами ASCII и могут быть созданы либо посредством MODIFY COMMAND, либо с помощью любого текстового редактора, который создает текстовые файлы ASCII. Файлы формата (.FMT) содержат подготовленные форматы экранов пользователя для ввода данных и вывода их на печать. Эти файлы создаются из SCR-файлов с помощью команды CREATE SCREEN или вводятся непосредственно с использованием MODIFY COMMAND. Кроме того, для их создания можно воспользоваться любым текстовым редактором, который создает текстовые файлы в коде ASCII. Файлы этикеток (.LBL) содержат информацию, которая нужна команде LABEL для печати этикеток. Этикетка — это информация пользователя для идентификации создаваемых им документов. Данные файлы создаются и изменяются с помощью команды CREATE/MODIFY LABEL. Файлы временных переменных (.MEM) содержат до 256 временных переменных или 6000 байт (по умолчанию). Они используются с целью сохранения значений временных переменных для последующего использования. Эти файлы создаются командой SAVE и считываются обратно в память командой RESTORE. Файлы запросов (.QRY) содержат условия запросов для выборки отображаемых записей с помощью команд, работающих с открытыми текущими файлами. Они создаются командой CREATE/MODIFY QUERY. Файлы описания экрана (.SCR) содержат информацию, которая используется командой CREATE/MODIFY SCREEN для создания или изменения файлов формата. При использовании этих команд создается соответствующий файл формата — FMT. Файл выборки (.VUE) содержит перечень отдельных имен полей из одного или более файлов базы данных — DBF. Файл выборки при работе с файлами базы данных позволяет просматривать лишь отдельные поля. Файлы выборки могут также сохранять соответствующие файлы индекса и отношения между файлами базы данных. Можно создать файл формата и условия выборки со ссылкой на определенные имена полей. Для создания файла выборки 94
используется CREATE/MODIFY VIEW. Файл выборки также можно сохранить в каталоге. Файлы формы отчета (.FRM) содержат информацию, необходимую для подготовки отчетов с помощью REPORT. Они могут создаваться и изменяться командой CREATE/ MODIFY REPORT. Текстовые файлы (.TXT) главным образом используются как средство осуществления интерфейса между системой и другими программными продуктами, которые считывают ASCII-файлы. Эти файлы являются ASCII- файлами и содержат только печатаемые символы ASCII. Текстовые файлы считываются в файл базы данных системы специальной формой команды APPEND FROM. Они создаются с помощью специальной формы команды COPY. Текстовый файл создается также при использовании команды SET ALTERNATE для хранения выходных данных экрана, таких, как введенные команды по запросу сточкой, их результат или выходные данные программного файла. Формирование структуры базы данных. Структура или «каркас» файла базы данных формируется путем определения каждого поля в базе данных, что осуществляется посредством команд CREATE и MODIFY STRUCTURE. Определение поля состоит в задании следующих его элементов: ИМЯ ПОЛЯ, ТИП ПОЛЯ, ШИРИНА ПОЛЯ ИМЕНА ПОЛЕЙ в dBASE III PLUS должны содержать только латинские буквы (пробелы не разрешены). В этих именах допускается использование цифр и символа подчеркивание; длина имени поля — не более 10 символов. В некоторых русифицированных версиях допускается использование символов кириллицы в имени поля. Это кажущееся удобство сделает невозможным дальнейшую компиляцию программы с помощью, например, компилятора Clipper. В системе предусмотрено пять типов полей: С — символьное, D — дата, L — логическое, М — примечание, N — числовое. Символьные поля могут использоваться для хранения любого печатаемого символа, который можно ввести с клавиатуры (включая пробелы). Это—печатаемые символы ASCII; максимальная длина (размер) символьного поля — 254. Поля дат используются для хранения дат, которые могут вводиться и отображаться в различных форматах, 95
используя опцию PICTURE команды @ ... SAY ... GET. По умолчанию формат вводимой или отображаемой даты ММ/ДД/ГГ (М — месяц, Д — день, Г — год). Длина поля даты—всегда восемь символов, даже если CENTURY (век) установлен в ON. Дата может быть добавлена к числу; ее можно вычесть из даты; из даты можно вычесть и число. Логические поля— в них помещаются отдельные символы, которые представляют значения «Истина» («Ложь»), Логическое «Истина» можно ввести как Y, у, Т или t. Логическое «Ложь» вводится как N, n, F или f. Поля примечаний созданы для размещения больших блоков текстовой информации. Они хранятся во вспомогательном файле (.DBT) и помечаются в .DBF файле Memo. Поля примечаний могут содержать информацию такого же типа, что и символьные поля, но они могут включать в себя 5000 символов и более, в зависимости от используемого текстового редактора. Каждое поле примечаний, если введены какие-то данные, требует минимум 512 байт на запись. В записи файла базы данных каждое поле примечаний занимает 10 байт, так как текст хранится в отдельном файле на диске. Числовые поля — это поля двух типов: целые и десятичные. Длина числового поля—это число цифр, которое оно может содержать. Десятичная точка и отрицательный знак также считаются за одну цифру каждый. Точность числовых полей составляет 9—15 знаков без учета точки. Это означает, что, по крайней мере, 15 первых значащих цифр любого числа будут точными. Ширина поля — это максимальное количество символов или цифр, которое может содержаться в поле. В случае числовых полей десятичная точка и знак (если они нужны) учитываются при подсчете ширины поля. Поля дат, логические поля и поля примечаний имеют фиксированную длину. Для хранения данных вне структуры файлов базы данных используются временные переменные. Они обеспечивают удобные средства временной памяти и создаются непосредственно с клавиатуры. Если поле и временная переменная имеют одно и то же имя, то имя поля имеет приоритет. Пользователь может обеспечить приоритет временной переменной, начав ее имя cm —>, например, m —> memvar. Другой способ — использование &- функции, которая применима только к временным переменным, например, & memvar. 96
5.3. Краткое описание команд dBASE III PLUS Команды системы могут быть разделены на группы в зависимости от выполняемых функций. Краткие характеристики команд, входящих в каждую из групп, перечислены ниже. Символом «*» помечены операторы, работающие и в системах dBASE II и dBASE III PLUS. Команды помощи пользователю. Приведенные ниже команды выводят на экран справочную информацию: ASSIST Обеспечивает выполнение команд системы в режиме выбора из меню. DIR Выводит список файлов, размещенных на заданном диске или в заданном оглавлении. DISPLAY MEMORY * Выводит информацию о временных переменных. DISPLAY STATUS * Выводит информацию об активных в данный момент файлах и о параметрах системы. DISPLAY STRUCTURE * Выводит структуру активного файла базы данных. HELP * Указывает порядок использования команд системы и выдает в режиме выбора из меню другую справочную информацию. Команды создания файлов. Команды этой группы создают файлы базы данных и другие файлы системы. COPY * Копирует активный файл базы данных в новый файл. COPY FILE * Дублирует закрытый файл любого типа. CREATE * Создает новый файл базы данных. IMPORT * Создает файл базы данных и файл формата экрана из файлов формата PFS, а также создает файл выборки, включающий файл базы данных и файл формата экрана. 5 Смирнов Н. Н. 97
INDEX JOIN CREATE LABEL CREATE QUERY CREATE REPORT CREATE SCREEN CREATE VIEW EXPORT MODIFY COMMAND MODIFY STRUCTURE SAVE SET CATALOG TO SORT TOTAL 98 * Создает индекс. * Объединяет заданные записи и поля из двух файлов базы данных в одном. Создает файл марок. Создает файл запроса. Создает файл формы отчета. Создает файл формата экрана и дополнительно файл базы данных. Создает файл выборки. Создает из файла базы данных системы файл формата PFS; при этом используется открытый файл формата экрана (если такой имеется). * Активизирует текстовый редактор системы, который используется для создания/модификации командных файлов (программ), файлов формата экрана, текстовых файлов и файлов процедур. * Модифицирует структуру файла базы данных; создает копию первоначального файла. Сохраняет значения временных переменных в файле временных переменных. Создает новый каталог или выбирает один из существующих каталогов. * Создает отсортированную копию активного файла базы данных. * Выполняет подсчет итогов числовых полей активного файла базы данных и заносит полученные результаты в новый файл.
Команды добавления данных APPEND BROWSE INSERT Добавляет данные в конец файла базы данных. Добавляет данные в конец файла базы данных. Включает данные в файл базы данных. Команды редактирования данных BROWSE * Обеспечивает полноэкранный режим редактирования данных с использованием «окон». CHANGE * Обеспечивает редактирование значений заданных полей и записей файлов базы данных. EDIT * Обеспечивает редактирование значений заданных полей и записей файлов базы данных. READ * Обеспечивает ввод значений полей или переменных, указанных в команде @...GET. REPLACE * Замещает значения полей новыми данными. UPDATE * Обеспечивает массовое обновление файла базы данных. Команды удаления данных DELETE PACK RECALL ZAP * Устанавливает признак исключенной записи. * Выполняет физическое удаление записей, помеченных как исключенные. * Сбрасывает признак исключенной записи. Выполняет физическое удаление всех записей активного файла базы данных. 5* 09
Команды вывода данных @ ... SAY ... GET * Выводит данные в заданном пользователем формате на экран или принтер. ? * Выводит список выражений. AVERAGE Обеспечивает подсчет и вывод среднего арифметического значения одного или более полей заданных записей базы данных. Если параметр SET TALK имеет значение OFF, результат подсчета не выводится. BROWSE * Обеспечивает поэкранный вывод 17 записей с соответствующим размеру экрана числом полей. COUNT * Обеспечивает подсчет и вывод количества записей, удовлетворяющих заданному условию. Если параметр SET TALK имеет значение OFF, результат подсчета не выводится. DISPLAY * Обеспечивает поэкранный вывод записей и полей в табличной форме. LABEL Обеспечивает вывод данных в виде марки. LIST * Обеспечивает вывод записей и полей в табличной форме. REPORT * Обеспечивает вывод данных в виде формы. SUM * Обеспечивает подсчет и вывод суммы значений заданных числовых полей. Если параметр SET TALK имеет значение OFF, результат подсчета не выводится. Команды установки указателя записи. Приведенные ниже команды устанавливают указатель текущей записи файла базы данных. Указатель текущей записи — это номер по порядку данной записи в базе данных. 100
CONTINUE * FIND * GO/GOTO * LOCATE * SEEK SKIP * Команды обработки APPEND FROM * CLOSE COPY * ERASE/DELETE FILE * MODIFY STRUCTURE * REINDEX * RENAME * Устанавливает указатель на следующую запись, удовлетворяющую заданному в команде LOCATE условию. Устанавливает указатель на первую запись, ключ индекса которой равен заданной строке символов или числу. Устанавливает указатель непосредственно на заданную запись, независимо от его текущей позиции. Устанавливает указатель на запись, удовлетворяющую заданному условию. Устанавливает указатель на запись, ключ индекса которой равен заданному выражению. Пропускает заданное число записей вперед или назад от текущей позиции указателя. файлов базы данных Добавляет запись из других, в том числе и внешних по отношению к системе файлов. Закрывает все файлы заданного типа. Копирует текущий файл базы данных в другой, в том числе и во внешний по отношению к системе файл. Удаляет файлы из оглавления. Обновляет структуру файла базы данных. Перестраивает существующий индекс. Переименовывает файл. 101
SELECT * Выбирает одну из 10 рабочих областей или один из 10 открытых файлов базы данных. SORT * Создает отсортированную по одному или нескольким полям копию файла базы данных. USE * Активизирует файл базы данных для обработки всех видов до появления следующей команды USE. Команды обработки файлов других типов. Приведенные ниже команды модифицируют программы и вспомогательные файлы системы: MODIFY COMMAND MODIFY LABEL MODIFY QUERY MODIFY REPORT MODIFY SCREEN MODIFY VIEW * Вызывает встроенный текстовый редактор для обновления программ, форматов экранов и других текстовых файлов формата ASCII. Редактирует файл марок. Редактирует файл запроса. Редактирует файл формы отчета. Редактирует файл системного формата экрана и дополнительно структуру базы данных. Редактирует файл выборки. Команды обработки временных переменных ACCEPT AVERAGE CLEAR ALL Запоминает во временной переменной строку символов, введенную с клавиатуры. Запоминает результат вычисления среднего арифметического значения числовых выражений во временной переменной. Удаляет все текущие временные переменные, закрывает все файлы базы данных и выбирает рабочую область I. 102
CLEAR MEMORY Исключает все текущие временные переменные. * Запоминает результат команды COUNT во временной переменной. * Выводит текущие значения временных переменных. * Запоминает во временной переменной любое введенное с клавиатуры выражение. Определяет дополнительные параметры для использования в программе. Запрещает использование временных переменных программам более высокого уровня. Определяет временную переменную как глобальную. * Обеспечивает ввод данных в переменные, указанные в команде @ ... GET. * Очищает заданные временные переменные. * Выбирает значения переменных, хранящихся в файле на диске. * Сохраняет текущие значения временных переменных в файле на диске. * Запоминает результат выражения во временной переменной. * Запоминает суммы числовых выражений во временных переменных. * Запоминает введенный с клавиатуры символ во временной переменной. Команды программирования. Приведенные ниже команды используются при создании командных файлов: ACCEPT * Обеспечивает запоминание символьных данных во временной переменной. COUNT DISPLAY MEMORY INPUT PARAMETERS PRIVATE PUBLIC READ RELEASE RESTORE SAVE STORE SUM WAIT 103
CANCEL * DO * DO WHILE * EXIT * LOOP * ENDDO * DO CASE * CASE * OTHERWISE * ENDCASE * IF * ELSE * ENDIF * INPUT * MODIFY COMMAND * PROCEDURE QUIT * RETRY 104 Прекращает выполнение программы системы. Выполняет программу или файл процедур. Организует в программе структурный цикл. Выполняет выход из цикла DO WHILE. Выполняет переход в начало цикла DO WHILE. Завершает цикл DO WHILE. Задает выполнение одной из нескольких возможных последовательностей команд. Отмечает последовательность команд для выполнения в структуре DO CASE. Задает альтернативу всем остальным последовательностям команд в структуре DO CASE. Завершает команду DO CASE. Обеспечивает выполнение команд по условию. Задает выполнение альтернативной группы команд в структуре IF. Завершает команду IF. Запоминает любое введенное с клавиатуры выражение во временной переменной. Вызывает встроенный текстовый редактор для обновления программ системы. Отмечает начало процедуры в файле процедур. Обеспечивает закрытие всех файлов и выход из системы. Обеспечивает возврат в вызывающую программу и повторное выполнение команды, запустившей вызываемую программу.
* Возвращает управление вызывающей программе и выполняет следующую команду. * Выводит блок текстовых данных, содержащихся в командном файле. * Задает конец блока текстовых данных в командном файле. * Приостанавливает выполнение программы до нажатия любого ключа клавиатуры. Для демонстрации возможностей СУБД сложились определенные традиции. Зарубежные авторы дают пример, в котором необходимо отыскать из адресного списка Джона Смита из Оклахомы, служащего фирмы «Надежный поставщик». Советские авторы, как правило, приводят пример составления штатного расписания — видимо это самая важная проблема. Мы тоже не будем отступать от традиций. Хотя смысла в этом не видно. Пример 5.1. Рассмотрим работу некоторых основных операторов на следующем примере. Предположим, нам необходимо создать базу PRIM кадрового состава какого-либо учреждения или его структурного подразделения со следующими характеристиками. ТАБНОМ — табельный номер; ФАМ — фамилия и. о. сотрудника; ОТДЕЛ — отдел; ДОЛЖ — занимаемая должность; ОКЛАД — установленный оклад; СЕМ — семейное положение; ДЕТИ — количество детей. Вызовем систему dBASE III PLUS с нужного устройства, введя команду DBASE. После загрузки системы в первой позиции на экране появится точка, что означает выход системы dBASE HI PLUS в режим ввода команд. Введем команду создания новой базы create prim. Описав структуру файла PRIM согласно описанным выше характеристикам, введем информацию в базу так, как показано ниже: ТАБНОМ ФАМ ОТДЕЛ ДОЛЖ ОКЛАД СЕМ ДЕТИ 234 Сергеев А. П. 24 зав. сектор 285 да 2 163 Иванов С. Л. 22 ст. инженер 185 да 2 431 Басков Н. Н. 23 вед, инженер 210 да RETURN TEXT ENDTEXT WAIT 105
ТАБНОМ ФАМ ОТДЕЛ ДОЛЖ ОКЛАД СЕМ ДЕТИ 265 Осипов А. П. 22 вед. инженер 220 да 1 343 Веригин Н. О. 23 зав. сектор 280 да 1 562 Сочнев Г. А. 22 н. с. 250 да 1 413 Прокопенко Ж. В. 22 инженер 165 нет нет Для того чтобы быстро просмотреть то, что мы ввели в базу, можно набрать оператор display all —на экране появляется следующая информация: ЗАПИСЬ #ТАБНОМ ФАМ ОТДЕЛ ДОЛЖ. ОКЛАД СЕМ ДЕТИ 1 234 Сергеев А. П. 24 зав. сектор 285 да 2 2 163 Иванов С. Л. 22 ст. инженер 185 да 2 3 431 Басков Н. Н. 23 вед. инженер 210 да 4 265 Осипов А. П. 22 вед. инженер 220 да 1 5 343 Веригин Н. О. 23 зав. сектор 280 да 1 6 562 Сочнев Г. А. 22 н. с. 250 да 1 7 413 Прокопенко Ж. В. 22 инженер 165 нет нет Предположим, мы хотим получить список сотрудников отдела 22. При этом нас будут интересовать только табельный номер, фамилия и оклад сотрудника. Введем оператор display табном, фам, оклад for отдел=22. На экран будет выведено: ЗАПИСЬЮ ТАБНОМ ФАМ ОКЛАД 2 163 Иванов С. Л. 185 4 265 Осипов А. П. 220 6 562 Сочнев Г. А. 250 7 413 Прокопенко Ж. В. 165 Пусть нас теперь интересует фонд заработной платы сотрудников отдела 22. Введем оператор sum оклад to fond for отдел = 22, тогда на экране получим: 4 записи сумм оклад 820. Эту же информацию можно одновременно получать на экране и на принтере, если в начале сеанса работы с базой ввести оператор set print on. Все, что мы сейчас делали, относится к интерактивному режиму работы оператора с базой данных, т. е., такому режиму, когда после ввода какого-либо оператора получаем результат его выполнения. Предположим, мы хотим получить подобную информацию в виде определенного документа или формы. Сделать это можно следующим образом: вводим оператор create report blank. 106
С помощью меню данного оператора формируем требуемую форму (со своими заголовком, графами, итогами и т. д.). Этим мы создадим файл формы отчета (blank, frm). Затем введем оператор report form blank for отдел = 22 plain to print. На принтере будет отпечатан следующий документ: Кадровый состав отдела 22 ТАБНОМ ФАМ И. О. ОКЛАД 163 Иванов С. Л. 265 Осипов А. П. 562 Сочнев Г. А. 413 Прокопенко Ж. В. 185 220 250 165 Итого: 820 Продолжим рассмотрение команд. Команды управления устройствами CLEAR Очищает экран. EJECT * Переводит страницу на принтере. SET * Обеспечивает установку параметров системы в режиме выбора из меню. Команды установки параметров системы. Приведенные ниже команды задают значения параметров системы (верхний регистр указывает значение, принятое по умолчанию): SET ALTERNATE on/OFF SET ALTERNATE TO SET BELL on/OFF SET CARRY on/OFF Задает(подавляет) запись команд и выходной информации системы в текстовый файл. * Задает имя текстового файла для записи команд и выходной информации системы (или закрывает этот файл). * Задает (подавляет) включение звукового сигнала при вводе данных, если достигнут конец поля или произошла ошибка. * Задает (подавляет) перенос содержимого последней записи в запись, добавленную командой APPEND. 107
SET CATALOG on/OFF SET CATALOG TO SET CENTURY on/OFF SET COLOR on/OFF SET COLOR TO SET CONFIRM on/OFF SET CONSOLE on/OFF SET DATE SET DEBUG on/OFF SET DECIMALS TO SET DEFAULT TO SET DELETED on/OFF 108 Задает (подавляет) добавление новых файлов в открытый каталог. Создает, открывает или закрывает каталог. Задает (подавляет) вывод первых двух цифр года. Задает тип монитора (черно-белый или цветной). По умолчанию принято значение, которое использовалось при запуске системы. Задает атрибуты экрана (цвет фона, символов, рамки и т. п.). * Задает автоматический или по нажатию клавиши «В ВОД» переход на следующее поле при вводе данных. * Задает (подавляет) вывод на экран результатов выполнения команд системы. * Задает формат для выражения типа даты. * Задает (подавляет) вывод результатов выполнения команд системы на принтер, когда значение параметра SET ECHO равно ON. Задает точность чисел при выводе результатов вычислений. Задает активный по умолчанию диск для поиска файлов. Задает обработку (пропуск) соответствующими командами записей, помеченных для исключения.
SET DELIMITERS on/OFF SET DELIMITERS TO SET DEVICE TO SCREEN (TO PRINT) SET DOHISTORY on/OFF SET ECHO on/OFF SET ESCAPE ON/off SET EXACT on/OFF SET FIELDS on/OFF SET FIELDS TO SET FILTER TO Задает использование системных (других) разделителей для ограничения поля ввода данных. Задает символ для использования в качестве разделителя, когда значение параметра SET DELIMITERS равно ON. Задает устройство (экран или принтер) вывода результатов команд ©...SAY. Задает (подавляет) при выполнении программы занесение команд в буфер HISTORY. * Задает (подавляет) вывод на экран команд программы перед их выполнением. * Задает (подавляет) приостановку выполнения команды при нажатии ключа (ESC). * Задает необходимость точного соответствия при сравнении строк символов. Задает обработку указанного списка полей (всех полей) записи. Задает список полей записи для обработки последующими командами. Задает условие отбора записей базы данных для обработки. Условие может быть задано файлом запроса (.qry) или указано в виде выражения непосредственно в данной команде. 109
SET FIXED on/OFF SET FORMAT TO SET FUNCTION TO SET HEADING ON/off SET HELP ON/off SET HISTORY ON/off SET HISTORY TO SET INDEX TO SET INTENSITY ON/off SET MARGIN TO SET MEMO WIDTH TO SET MENUS ON/off SET MESSAGE TO 110 Задает вывод фиксированного (произвольного) числа десятичных знаков. * Открывает заданный файл формата экрана для вывода данных. Задает значения функциональных ключей клавиатуры. Задает (подавляет) вывод имен полей перед значениями полей в командах LIST или DISPLAY. Задает (подавляет) вывод сообщения о необходимости помощи при возникновении ошибки. Задает (подавляет) занесение команд в буфер HISTORY. Задает число команд, сохраняемых в буфере HISTORY. * Открывает заданные индексы. * Задает (подавляет) использование дополнительных атрибутов экрана при вводе полей в полноэкранных операциях (APPEND, EDIT). * Задает ширину левого поля при выводе информации на принтер. Задает длину поля для вывода примечаний. Задает (подавляет) вывод на экран меню ключей управления при выполнении полноэкранных операций. Задает вывод на экран определенного пользователем сообщения, когда
SET ODOMETER TO SET ORDER TO SET PATH TO SET PRINT on/OFF SET PRINTER TO SET PROCEDURE TO SET RELATION TO SET SAFETY ON/off SET SCOREBOARD ON/off SET STATUS on/OFF SET STEP on/OFF SET TALK ON/off значение параметра SET STATUS равно ON. Задает интервал изменения счетчика записей. Присваивает любому открытому индексу статус главного или управляющего без закрытия и повторного открытия индексов. Задает маршрут поиска файла. * Задает (подавляет) вывод на принтер. Направляет выходную информацию на заданный принтер. Открывает заданный файл процедур. Связывает две базы данных по общему значению ключа. Выдача (подавление выдачи) на экран предупреждающего сообщения при перезаписи существующего файла. Выдача (подавление выдачи) сообщений системы на нулевой строке экрана. Задает (подавляет) вывод информационной строки. * Задает (подавляет) переход в состояние ожидания после выполнения каждой команды при обработке программ системы. Задает (подавляет) вывод на экран результатов выполнения команд. Ш
SET TITLE ON/off SET TYPEAHEAD TO SET UNIQUE on/OFF SET VIEW TO Задает (подавляет) запрос ввода описания файла при добавлении нового файла в каталог. Задает размер буфера для ввода данных с клавиатуры. Задает включение в индекс только первой (всех) записи с одинаковым значением ключа. Открывает файл выборки, связывающий несколько файлов базы данных. Команды связи с внешними программами. Приведенные ниже команды обеспечивают интерфейс системы с программами на других языках программирования: CALL Выполняет двоичный файл (модуль), загруженный в память командой LOAD. LOAD Загружает в память двоичный файл для последующего выполнения о помощью команды CALL. RUN Запускает на выполнение любую программу или команду операционной системы без выхода из системы. Команды отладки программ. Приведенные ниже команды помогают контролировать выполнение команд в программах системы: DISPLAY HISTORY LIST HISTORY RESUME Обеспечивает поэкранный вывод команд, сохраненных в буфере HISTORY. Обеспечивает вывод списка команд, сохраненных в буфере HISTORY. Продолжает выполнение программы, прерванное командой SUSPEND. 112
SET ECHO on/OFF SET HISTORY TO SET STEP on/OFF SET DEBUG on/OFF * Задает (подавляет) вывод на принтер результатов выполнения команд системы, когда значение параметра SET ECHO равно ON. SET DOHISTORY on/OFF Задает (подавляет) при выполнении программы занесение команд в буфер HISTORY. * Задает (подавляет) вывод на экран команд программы перед их выполнением. Задает число команд, сохраняемых в буфере HISTORY. * Задает (подавляет) переход в состояние ожидания после выполнения каждой команды при обработке программ системы. Приостанавливает выполнение командного файла или процедуры и обеспечивает, переход в режим интерпретации команд. Команды обработки прерываний. Приведенные ниже команды обеспечивают выполнение заданных действий при возникновении прерываний независимо от других команд системы. ON ERROR Обеспечивает выполнение заданной команды при возникновении ошибки. ON KEY Обеспечивает выполнение заданной команды при нажатии любого ключа клавиатуры. ON ESCAPE Обеспечивает выполнение заданной команды при нажатии ключа <Esc). SUSPEND из
5.4- Командные файлы Мощным средством работы с системой является возможность создания с помощью команд программирования, рассмотренных в п. 5.3, прикладных программ пользователя, называемых в среде системы dBASE III PLUS командными файлами. В командном файле можно использовать любую команду или функцию, вводимую по запросу с точкой на ввод, и записываются они в том же виде. Кроме того, система имеет команды, применяемые только в командных файлах и позволяющие более эффективно управлять данными. Командный файл можно использовать также для выполнения более сложной задачи, например разработки меню. Можно даже написать несколько командных файлов, выполняющих все задачи пользователя (пользователь будет лишь вводить свои данные). Команды программирования. В системе есть команды, аналогичные командам многих языков программирования, обеспечивающие управление данными. Эти команды позволяют программировать в системе, выполняя с помощью командных файлов более сложные операции, чем те, которые задаются простым набором команд по запросу с точкой на ввод. Это следующие команды: . DO WHILE... ENDDO . IF... [ELSE]... ENDIF . DO CASE... ENDCASE . ON В каждой из указанных команд имеется одно условие. Однако в конструкции DO WHILE система проверяет условие раз за разом до тех пор, пока оно не перестает выполняться. В конструкции IF ... ENDIF система проверяет условие один раз. Часто может потребоваться проверка нескольких возможных условий. DO CASE ... ENDCASE позволяет записать несколько различных условий. В более сложных случаях можно использовать любые математические, логические, строковые операторы и операторы отношения для объединения выражений в условии. Можно также вставить любую из этих трех команд внутрь другой, что называется вложением. При этом предложения должны целиком входить одно в другое. Обычно командный файл исполняется строка за строкой. Однако, используя команду DO <имя командного 114
файла), можно также перейти в другой программный файл и выполнить его, не возвращаясь к запросу с точкой на ввод. Программный файл, из которого происходит переход, является вызывающей программой, а тот файл, куда происходит переход, — подпрограммой. Выполняются команды подпрограммы, затем управление возвращается в вызывающую программу и выполняются оставшиеся команды. Полезно в качестве последней команды подпрограммы использовать RETURN. Команда ON позволяет перейти в подпрограмму при обнаружении системой ошибки. Командный файл системы dBASE III PLUS состоит из четырех основных частей: преамбулы, установочной области, тела программы, раздела закрытия. Преамбула содержит имя командного файла, описание того, что он выполняет, кто написал его и дату последнего исполнения или редактирования. Установочная область содержит команды, описывающие операционную среду командного файла. Есть ряд параметров системы, которые, возможно, потребуется изменить для варианта среды командного файла. Они устанавливаются командой SET и ее опциями. Тело командного файла содержит команды, которые выполняют работу программы. В этой части следует открывать файлы, выбирать рабочие области, изменять или отображать информацию базы данных, производить вычисления, формировать отчеты и т. д. с помощью тех же команд, что и по запросу с точкой на ввод. Раздел закрытия содержит команды, которые приводят в порядок рабочее пространство, использовавшееся командным файлом. К примеру, можно возвратить среду в установочное состояние, принятое по умолчанию, удалить временные переменные, закрыть все файлы и возвратиться к запросу с точкой на ввод. В командном файле можно применять любой тип временных переменных (символьная, числовая, дата, логическая). Обычно они инициализируются посредством команды STORE (значение) ТО (имя временной переменной) или (имя временной переменной) = (значение). Кроме того, для инициализации временных переменных можно использовать команды PARAMETERS, ACCEPT, AVERAGE, COUNT, INPUT, SUM и WAIT. Временные переменные используются для хранения в памяти значения, которое вычисляется или обрабатывается №
командным файлом. Содержимое временных переменных существует временно, пока его не изменят, или высвободят переменную, или выйдут по QUIT из системы. Между тем можно сохранить временные переменные в файле MEM с помощью SAVE, а позднее вызвать их по RESTORE. Временные переменные, инициализированные по запросу с точкой на ввод или вызванные по RESTORE, всегда имеют статус глобальных. Их значения доступны для любой операции по запросу с точкой на ввод, в том числе для исполнения командного файла. В то же время переменные, инициализированные в командном файле или вызванные в нем по RESTORE, имеют по умолчанию статус локальных, Их значения доступны лишь внутри командного файла и подпрограмм. С помощью команд PUBLIC и PRIVATE можно изменить или защитить статус переменной. Обычно временные переменные высвобождаются в разделе закрытия командного файла. Функции в командных файлах используются так же, как и по запросу с точкой на ввод. Создание командных файлов. Создать командный файл можно, введя MODIFY COMMAND (имя файла) по запросу с точкой на ввод. Ввод данной команды приводит к автоматическому вызову текстового редактора системы. Если требуется изменить файл, нужно также ввести MODIFY COMMAND {имя файла) по запросу с точкой на ввод, затем снова сохранить файл посредством Ctrl-W. По команде MODIFY COMMAND работает текстовый редактор системы. В первую очередь он используется для создаания и редактирования командных файлов, но его можно применять и для создания (модификации) стандартного текстового файла ASCII. Например, этой командой можно создать файл формата (.FMT). Исполнение командных файлов. Для открытия и исполнения командного файла по запросу с точкой на ввод нужно ввести DO (имя файла). Командный файл можно исполнить и при загрузке системы. По запросу операционной системы на ввод нужно ввести имя командного файла базы данных. Отладка командных файлов. При создании или написании командных файлов нередко возникают синтаксические и семантические ошибки. В системе есть ряд команд, позволяющих отладить командные файлы. Это: RESUME, SET DEBUG, SET DOHISTORY, SET ECHO, SET HISTORY TO, SET lie
STEP и SUSPEND. Выбор команды зависит от способа работы пользователя. Рассмотрим процесс создания командного файла COMPRIM для приведенного выше примера. Введем оператор modify command comprim. После загрузки редактора и выхода в режим ввода операторов введем следующие команды: erase use prim report form blank for отдел-22 plain to print returnAw Наш первый командный файл создан. Теперь можно, не выходя из системы, вызвать его оператором do comprim либо, если вы только начинаете сеанс работы с системой, то задать команду dBASE comprim. После выполнения любого из указанных операторов на принтер будет выведен документ, рассмотренный выше. 5.5. Использование функций Функции выполняют епециализованные операции, которые расширяют и усиливают команды системы. Они используются для анализа или преобразования данных и возвращают результат. Все функции имеют открывающие и закрывающие скобки после имени функции (за исключением макрофункции &). Данные внутри скобок могут указываться или не указываться. Классификация функций. Все функции системы dBASE III PLUS можно разбить на следующие группы: & Макроподстановка Функции, работающие с датами CDOW ( ) День недели. CMONTH ( ) Календарный месяц. CTOD ( ) Преобразование даты из символьного формата в формат D. DATE ( ) Системная дата. DAY ( ) Число месяца. DOW ( ) Номер дня недели. DTOC ( ) Преобразование даты из формата D в символьный формат. MONTH ( ) Месяц года. TIME ( ) Системное время. YEAR( ) Год. 117
Функции, работающие с символами АТ( ) LEFT( ) LOWER ( ) LTRIM( ) REPLICATE ( RIGHT ( ) RTRIM( ) SPACE ( ) STUFF( ) SUBSTR ( ) TRANSFORM ( TRIM( ) UPPER ( ) ABS( ) EXP( ) INT( ) LOG( ) MAX ( ) MOD ( ) ROUND ( J SQRT( ) ASC( ) CHR( ) CTOD( ) DTOC( ) LOWER ( J STR( ) UPPER ( ) VAL( ) 118 Поиск подстроки. Выбор подстроки слева направо. Переход с верхнего регистра на нижний. Удаление ведущих пробелов. Повторение символьного выражения. Выбор подстроки справа налево. Удаление хвостовых пробелов. Генерация пробелов. Замена части строки. Выбор подстроки. Представление символов (цифр) в формате PICTURE. Удаление хвостовых пробелов. Переход с нижнего на верхний регистр. Математические функции Абсолютная величина. Экспонента. Целое число. Логарифм. Определение большего из двух значений. Модуль. Округление числа. Квадратный корень. Функции преобразований Получение кода ASCII символа. Получение символа по коду ASCII. Преобразование даты из символьного формата в формат D. Преобразование даты из формата D в символьный формат. Переход с верхнего регистра на нижний. Преобразование числа в символ. Переход с нижнего регистра на верхний. Преобразование символа в число.
Функции специальных проверок BOF( ) COL( ) DELETED ( ) DISKSPACE( ) EOF( ) ERROR ( ) FILE( ) FOUND ( ) IIF( ) ISALPHA ( ) 1SCOLOR ( ) ISLOWER ( ) ISUPPER ( ) LEN( ) LUPDATE( ) MESSAGE ( ) PCOL( ) PROW ( ) RECCOUNT( ) RECNO( ) RECSIZE( ) ROW( ) TYPE ( ) Начало файла. Номер текущей колонки. Запись удалена или нет. Свободное место на диске в байтах. Конец файла. Код ошибки по условию ON ERROR, Файл существует или нет. Результат поиска файла базы дан НЫ X. Одно или другое выражение в зависимости от условия. Проверка на букву. Проверка на цветной режим. Проверка на нижний регистр. Проверка на верхний регистр. Длина строки символов. Последнее обновление файла базы данных. Сообщение об ошибке. Номер колонки на принтере. Номер строки на принтере. Количество записей в файле базы данных. Номер текущей записи. Размер записи. Номер текущей строки на экране. Проверка типа выражения. Функции идентификации DBF ( ) Имя текущего файла. FIELD ( ) Имя поля в файле базы данных. FKLABEL ( ) Названия функциональных ключей. FKMAX ( ) Максимальное количество программируемых функциональных ключей на терминале GETENV ( ) Переменная, содержащая информацию об операционной среде. NDX ( ) Имена открытых индексных файлов, OS ( ) Название операционной системы. VERSION ( ) Версия системы. 119
Функции ввода INKEY ( ) Код нажатого во время работы программы ключа. READKEY ( ) Определение ключа для выхода из полноэкранной команды. Большая популярность dBASE II, затем dBASE III и, наконец, dBASE III PLUS стимулирует разработку программных средств, облегчающих процесс отладки и расширяющих возможности системы. Можно упомянуть утилиту D UTIL, оказывающую помощь при отладке. Эта утилита заметно увеличивает быстродействие программ dBASE. Пакет D GRAPH позволяет строить графики по информации, подготовленной средствами dBASE. 5.6. Компилятор Clipper Команды СУБД dBASE III PLUS составляют язык программирования высокого уровня, называемый языком программирования dBASE, а сама система dBASE III PLUS фактически является интерпретатором этого языка. При программировании на языке dBASE мы имеем присущие любому интерпретатору как достоинства, связанные с ускорением процесса отладки программ, так и недостатки, связанные g низкой эффективностью исполнения уже отлаженных программ. Кроме того, при исполнении программ в режиме интерпретации необходимо иметь сам интерпретатор, то есть полную версию dBASE III PLUS, при этом в отсутствие «винчестера» неизбежно встает проблема использования дисководов, так как необходимо обеспечить одновременно доступ к оверлейным модулям dBASE III PLUS, к собственно текстам программ и к файлам базы данных. Частично указанные выше недостатки снимает семейство программ под общим именем RUN TIME+, в состав которого входят: dBCODE — псевдокомпилятор, dBLINKER — псевдоредактор связей, dBRUN III PLUS — загрузчик откомпилированных программ. Аналогичные программы есть и в системе МИКРО-РС-2. Псевдокомпилятор dBCODE осуществляет предварительную обработку и кодирование текста исходной программы (файла с расширением PRG). В результате получается исполняемый PRG-файл. Преобразованный программный файл запускается на выполнение либо самой системой dBASE III PLUS, либо загрузчиком dBRUN. 120
Программа dBLINKER объединяет отдельные подпрограммы в один модуль, выполняемый также с помощью dBASE III PLUS или dBRUN. Таким образом, ускоряя время исполнения dBASE-программ и сокращая объем внешней памяти для хранения программ, тем не менее мы все равно обязаны иметь либо полную систему dBASE III PLUS, либо загрузчик dBRUN III PLUS (именно поэтому употребляется термин «псевдокомпиляция»). Компилятор Clipper является удачной попыткой написания полного транслятора dBASE-программ, т. е. после компиляции программ с помощью Clipper получается загрузочный ЕХЕ-файл, для исполнения которого необходимо иметь лишь операционную систему MS-DOS. Компилятор Clipper является независимой от dBASE III PLUS системой, созданной фирмой «Нэнтакет» (Nantucket), В зависимости от времени создания имеются следующие версии компилятора Clipper: Clipper Winter'85; Clipper Autumn'86; Clipper Summer'87. Развитие системы Clipper идет по пути как достижения большей совместимости g dBASE III PLUS no входному языку, так и увеличения возможностей dBASE III PLUS. Так, в системе Clipper помимо существенного увеличения возможностей организации пользовательского интерфейса ускорены и многие операции обработки базы данных. Кроме того, существенным преимуществом системы Clipper является частичная открытость системы, т. е. возможность расширения языка Clipper специальным образом посредством Extend System системы Clipper. Extend System позволяет включать во входной язык Clipper новые процедуры, написанные на языках Ассемблер и Си. Мы опишем работу с последней, открытой для пользователей любой страны, версией Clipper Summer'87. Полная версия Clipper Summer'87 располагается на четырех дистрибутивных дискетах и содержит следующие основные файлы: CLIPPER.EXE — собственно компилятор Clipper; PLINK86.EXE — разработанный фирмой Phoenix Technology Limited специально для системы Clipper редактор связей (линкер), который позволяет редактировать программы с оверлейной структурой; CLIPPER.LIB — библиотека функций системы Clipper, подключаемая на этапе редактирования; EXTEND.LIB — библиотека дополнительных функций системы Clipper; OVERLAY.LIB —* 121
библиотека процедур для оверлейной поддержки редактора PLINK86; NDX.OBJ —объектный модуль, который необходимо подключить на этапе редактирования для обеспечения совместимости индексных файлов, подготовленных dBASE III PLUS, g Clipper. Помимо указанных выше файлов предлагается еще ряд программ: командный файл инсталяции системы Clipper на жесткий диск (CLIPCOPY.BAT); отладчик программ (DEBUG.OBJ), подключаемый на этапе редактирования; специальные утилиты для создания и редактирования файлов базы данных, индексных файлов, форм отчетов, этикеток (программы DBU, RL, INDEX); демонстрационные программы использования EXTEND SYSTEM, ERROR SYSTEM — появившейся в версии SUMMER'87 системы обработки ошибок в процессе исполнения программ, а также применения некоторых команд Clipper по организации пользовательского интерфейса и сетевых приложений (программы MENU, LOCKS, NETWORK); файлы документации. Clipper постоянно развивается. Поэтому в файлах документации содержится самая последняя информация об изменениях и дополнениях в системе. Версия SUMMER'87 содержит следующие файлы документации: READ ME. 1ST — содержит перечень всех файлов дистрибутивных дискет с их краткой характеристикой; ERROR.DOC— описывает ERROR SYSTEM; EXTEND.DOC — описывает интерфейс с языками Си и Ассемблер через EXTEND SYSTEM; ADDENDUM.DOC — содержит описания новых, по сравнению с предыдущей версией AUTUMN'86, команд и функций, изменения «старых» команд, а также изменения и дополнения к печатной документации. Компиляция программ в системе Clipper. Процесс подготовки исполняемого ЕХЕ-файла в системе Clipper, как и в других системах программирования, состоит из двух этапов — компиляции программ, то есть подготовки объектного модуля (файлы с расширением OBJ) и редактирования одного или нескольких объектных модулей — создания файла с расширением ЕХЕ, исполняемого в DOS. Рассмотрим первый этап — преобразование исходного кода программы, написанной на языке программирования dBASE, в объектный код. Clipper компилирует как программные и процедурные файлы, так и форматные файлы, т. е. файлы с расширениями PRG и FMT. Эти файлы могут создаваться с по- 122
мощью любого текстового редактора или текстового процессора, в том числе созданные по команде MODIFY COMMAND системы dBASE III PLUS. Вызов компилятора Clipper: C>[D:1 [\маршрут\ 1 CLIPPER [D:] [\маршрут\ ] имя файла. Здесь [D: 1 — имя дисковода. Расширение имени компилируемого файла (PRG) указывать не обязательно. Например, при работе с гибкими дисками при компиляции программного файла JOHN.PRG можно задать: A>CLIPPER B.-JOHN (Clipper.EXE находится на дискете в дисководе A, JOHN.PRG — на дискете в дисководе В). При работе с жестким диском: C>JOHN>C:CLIPPER JOHN (Clipper.EXE находится на «винчестере» в корневом каталоге, JOHN.PRG — в подкаталоге g именем JOHN). После компиляции в текущем каталоге создается объектный файл с тем же именем, что и указанный программный. Так, в приведенном примере создается объектный файл с именем JOHN.OBJ в первом случае на диске А, а во втором — в каталоге g именем JOHN. В случае, когда компилируемый программный файл содержит обращения к другим программным, процедурным или форматным файлам, все вызываемые программы также компилируются и становятся частью объектного файла. Таким образом, при вызове Clipper необходимо указывать лишь имя файла с головной программой. Вызываемые программы или процедуры Clipper ищет в текущем директории и, если не находит, то выдает сообщение: «Cannot open, assumed external» («Нельзя открыть, предполагается внешним»). Поэтому рекомендуется перед компиляцией собрать все программные файлы в одном каталоге. В процессе компиляции на экран последовательно выводятся сообщения и компиляции основного и вызываемых программных файлов, а в случае обнаружения ошибок — соответствующие сообщения. Сообщения об ошибках компиляции приводятся в печатной документации Clipper, однако, поскольку кроме сообщения на английском языке выводятся и номер строки в программе, и сама строка, содержащая ошибку, то необходимость обращаться к документации возникает достаточно редко. Подавляющее число ошибок интерпретируется пользователем, как правило, без затруднений. 123
Сообщения компилятора можно средствами переназначения MS-DOS вывести в отдельный файл или на печать, например: OCLIPPER JOHN >ERROR — сообщения об ошибках будут записаны в файл с именем ERROR; OCLIPPER JOHN>PRN —сообщения об ошибках будут выводиться на печать. Опции компилятора Clipper. При вызове компилятора Clipper можно в командной строке указывать до семи опций или параметров (используется и термин «переключатели»). Синтаксис: OCLIPPER <имя файла) [—11 [—ml [—о] [—р] l-ql l-sl [-t] Задание переключателей (помещены в квадратные скобки) предписывает следующие действия: 1 — не включать номера строк в объектный файл; использование этой опции сокращает объектный файл (на 3 байта для каждой строки программы, содержащей команду); при использовании отладчика Clipper эту опцию применять не рекомендуется; m — не включать вызываемые программные и процедурные файлы в результирующий файл, т. е. компилируется лишь один указанный в командной строке программный файл; о — создавать объектный файл не в текущем каталоге, а на устройстве и в каталоге, указываемом в командной строке непосредственно за параметром; р — сделать паузу после загрузки Clipper; эта опция полезна при работе с гибкими дисками, так как во время паузы можно сменить дискету с компилятором на дискету с исходными программными файлами; q — игнорировать номера строк исходных программ и отображение их на экране в процессе компиляции; s — провести лишь синтаксический анализ исходных программ без создания объектного файла; t — создать временный рабочий файл (с расширением $$$). на устройстве, указываемом сразу за параметром; временный рабочий файл создается во время компиляции и удаляется после окончания; эта опция полезна при использовании виртуального диска, так как ускоряет работу компилятора. Примеры использования переключателей. 1. A>CLIPPER A:TEST —Р —О В:. Такое задание переключателей позволит запустить компилятор Clipper, сделать паузу для смены дискеты, скомпилировать иро- 124
граммный файл TEST.PRG на устройство А и создать объектный файл TEST.OBJ на устройстве В. 2. OCLIPPER TEST —L —О C:\OBJ —Т Е:. По этому заданию Clipper будет компилировать файл TEST.PRG в корневом каталоге, создаст объектный файл TEST.OBJ в подкаталоге с именем OBJ, не включая в объектный файл номера строк исходной программы, и использует устройство Е для создания временного рабочего файла. Редактирование программ в системе Clipper. Для редактирования объектных файлов, созданных компилятором Clipper, можно использовать как системный редактор (линкер), поставляемый вместе с MS-DOS фирмой Microsoft, так и линкер PLINK86-Plus, поставляемый вместе с системой Clipper. Системный линкер — программа LINK.EXE — работает быстрее PLINK86-Plus, однако не позволяет создавать оверлейную структуру. Рассмотрим создание файла с расширение ЕХЕ с помощью системного линкера. Полное описание работы можно найти в руководстве по MS-DOS. Мы опишем лишь действия по созданию исполняемых файлов из объектных, подготовленных ком- • пилятором Clipper. Запустить системный линкер можно как в интерактивном режиме, так и вводом лишь одной командной строки. В интерактивном режиме после ввода C>LINK на экране последовательно запрашиваются: Object Modules [.OBJ 1:—имена объектных модулей (разделяются знаком «+»); Run File [имя файла.ЕХЕ 1:—(имя исполняемого файла с расширением ЕХЕ (по умолчанию — имя первого объектного модуля); List File [NUL.MAP1: (имя МАР-файла, то есть файла, содержащего карту распределения памяти ЕХЕ-файла; если МАР-файл создавать не нужно, то нажать клавишу (ВВОД»; Libraries [.LIB l: — имена подключаемых библиотек (разделяются знаком «+»; обязательно указывается библиотека Clipper, при необходимости — библиотека Extend, а также дополнительные библиотеки при использовании Extend System). Отметим, что расширения имен файлов указывать не нужно. Указываемые файлы могут находиться в различных каталогах, при этом перед именем необходимо ука- 125
зывать маршрут. При вызове системного линкера с помощью одной командной строки все вышеперечисленные файлы указываются (или пропускаются) через запятую в одной строке. Например: OLINK TEST+TEST1 + +TEST2,,, CLIPPER Здесь: TEST, TEST1, TEST2 — объектные модули, создается исполняемый файл TEST.EXE, МАР-файл не создается, подключается библиотека CLIPPER.LIB. Приведем еще один пример: OLINK TEST, \EXE \ JOHN., \CLIPPER\ CLIPPER+\CLIPPER \ \EXTEND Здесь редактируется файл TEST.OBJ, находящийся в корневом каталоге, в каталоге с именем ЕХЕ создается исполняемый файл JOHN.EXE, используются библиотеки CLIPPER.LIB и EXTEND.LIB, находящиеся в каталоге с именем CLIPPER. При редактировании больших программ системный линкер может выдать сообщение ТОО MANY SEGMENTS (слишком много сегментов). Эю связано с тем, что по умолчанию системный линкер обрабатывает не более 128 сегментов памяти редактирования любой программы. Опция /SEGMENTS (/SE) позволяет назначить требуемое количество сегментов памяти в диапазоне от 1 до 1024. Например: OLINK TEST,,, CLIPPER/SE:256 Здесь при редактировании программы TEST будет выделено 256 сегментов. Рассмотрим теперь редактирование программ с помощью линкера PLINK86-PLUS. PLINK86-PLUS, как и системный линкер, можно запустить в интерактивном режиме либо вводом командной строки, либо с помощью ввода заранее подготовленного файла, содержащего команды PLINK86-PLUS (файла с расширением LNK). В интерактивном режиме после вызова C>PLINK86 на экране появляется командная подсказка: = >, которая показывает, что PLINK86 готов принимать команды. После подсказки можно вводить либо одну, либо несколько команд. Затем необходимо нажать клавишу «ВВОД». Командная подсказка появится на следующей строке. Можно снова вводить одну или несколько команд. Для окончания ввода команд необходимо после командной подсказки ввести «;» и нажать (ВВОД). Полное описание всех команд, а также сообщений об ошибках PLINK86-PLUS приводится в печатной документации системы CLIPPER. Мы приведем лишь основ- 126
ные: FILE (FI) — определяет объектные файлы, имена объектных файлов разделяются запятыми; OUTPUT (OUT) — определяет имя исполняемого ЕХЕ-файла; LIBRARY (LIB) — определяет подключаемые библиотеки; BEGINAREA (BEGIN) — определяет начало оверлейной области памяти; ENDAREA (END)—определяет конец оверлейной области памяти; SECTION — определяет объектные модули, загружаемые в оверлейную область, включаемые в основной ЕХЕ-файл (внутренние оверлеи); SECTION INTO — определяет объектные модули, загружаемые в оверлейную область, включаемые в дополнительный оверлейный файл (с расширением OVL — внешние оверлеи). Ниже приводятся команды PLINK86-PLUS, необходимые для создания файла TEST.EXE: = >FI TEST,TEST1,TEST2 ->LIB CLIPPER,EXTEND = >; Если не указана команда OUTPUT, то создается ЕХЕ-файл с именем первого объектного модуля. Для запуска PLINK86 g помощью одной командной строки необходимо просто перечислить через пробелы все требуемые команды. Например: OPLINK86 FI TEST OUT JOHN LIB CLIPPER Наконец, третий способ запуска PLINK86 — создание текстового (с расширением LNK) файла, содержащего команды редактора. Файлу с командами редактора можно присваивать любое расширение имени, но в этом случае при запуске PLINK86 имя файла надо указать полностью. Например, создав файл с именем TEST.LNK, содержащий: FI JOHN BEGIN SECTION FI JOHN1 SECTION INTO TEST.OVL FI JOHN2 END LIB EXTEND PLINK86 запускается следующим образом: OPLINK86 ©TEST После редактирования создаются два файла JOHN.EXE и оверлейный TEST.OVL. 127
В заключение отметим, что PLINK86 обращается к библиотекам CLIPPER.LIB и OVERLAY.LIB по умолчанию, поэтому указывать их нужно лишь в случае, когда редактор и библиотеки находятся в разных каталогах. Совместимость Clipper Summer'87 с dBASE HI Plus. Синтаксис и логика языка Clipper настолько близки языку dBASE, что во многих случаях программы, написанные на языке dBASE, так сказать, без проблем компилируются компилятором Clipper. Однако отличия существуют, и поэтому перед компиляцией dBASE-программ необходимо просмотреть их и внести следующие изменения. Во-первых, команды dBASE III PLUS, не поддерживаемые Clipper, необходимо исключить из программы. Ниже приводится полный список функций и команд dBASE III PLUS, отсутствующих в Clipper: APPEND ASSIST BROWSE CHANGE CLEAR FIELDS CREATE LABEL CREATE QUERY CREATE SCREEN CREATE VIEW DISPLAY FILES DISPLAY MEMORY DISPLAY STATUS DISPLAY STRUCTURE DISPLAY USERS EDIT ERROR ( ) EXPORT TO HELP IMPORT FROM INSERT LIST FILES LIST HISTORY LIST MEMORY LIST STATUS LIST STRUCTURE LOAD LOGOUT MODIFY QUERY MODIFY REPORT MODIFY SCREEN MODIFY STRUCTURE MODIFY VIEW ON ERROR/ESCAPE/KEY RESUME RETRY RETURN TO MASTER SET SET CARRY SET CATALOG SET COLOR ON/OFF SET DEBUG SET DOHISTORY SET ECHO SET ENCRIPTION SET FIELDS SET HEADING SET HELP SET HISTORY SET MEMOWIDTH SET MENUS SET SAFETY SET STATUS SET STEP SET TALK 128
MESSAGE SET TITLE MODIFY COMMAND SET VIEW MODIFY LABEL Следует отметить, что большинство приведенных выше команд являются «чисто интерактивными» и практически не используются при написании прикладных dBASE-npo- грамм. Многие из этих команд реализованы утилитами (DBU, RL) и отладчиком системы Clipper. Во-вторых, в отличие от dBASE HI PLUS Clipper не поддерживает макроподстановки, содержащие команды или части команд (табл. 5.2). Таблица 5.2 Допустимое применение в Clipper FILE = 'JOHN' USE &FILE COMP='J2>Jl' LIST NAME FOR &COMP Недопустимое применение в Clipper, допустимое в dBASE III PLUS FILE='USE JOHN' &FILE COMP='NAME FOR J2>J1' LIST &COMP В-третьих, при использовании индексных файлов необходимо иметь в виду, что Clipper создает индексные файлы по своей схеме, отличающейся от принятой в dBASE HI PLUS. По умолчанию расширения имен индексных файлов в Clipper — NTX, в dBASE III PLUS — NDX. Для использования индексных файлов, подготовленных в системе dBASE HI PLUS, на этапе редактирования необходимо подключить объектный файл NDX.OBJ, поставляемый вместе с системой Clipper. Следует иметь в виду, что Clipper работает быстрее с NTX-файлами, поэтому вместо использования файла NDX.OBJ целесообразно на этапе редактирования создание вместо NDX-файлов аналогичных NTX-файлов. Для этого Clipper предоставляет специальную программу INDEX. Развитие языка dBASE в системе Clipper. В системе Clipper язык dBASE получил дальнейшее развитие. Помимо значительного ускорения выполнения dBASE-npo- грамм, связанного как собственно с компиляцией, так и с использованием новых схем обработки базы данных и полной закрытостью исходных текстов программ, Clipper существенно развивает как технические характеристики, 6 Смирнов Н. Н. 129
Таблица 5.3 Характеристики Максимальное количество записей в файле БД Максимальное число полей в записи Максимальный размер: символьных полей полей памяти (memo) Максимальное количество одновременно открытых файлов Максимальное число одновременно используемых временных переменных Максимальное количество процедур в одном программном файле Clipper 1 биллион 1024 32 Кбайт 64 Кбайт Зависит от версии MS-DOS; для версии 3.30 — 255 2048 Не ограничено dBASE HI PLUS 1 млрд 128 254 байт 4096 байт 15 256 32 (в процедурных файлах) так и командный язык dBASE III PLUS. В табл. 5.3 приведены основные характеристики системы Clipper Summer'87 в сравнении с dBASE III PLUS. Как видно, возможности Clipper ограничиваются практически лишь техническими характеристиками ПЭВМ и используемой версии MS-DOS. Наиболее важные усовершенствования языка программирования Clipper следующие. 1. Процедуры и функции можно размещать в одном файле с вызываемой программой. 2. Возможность определения собственных функций (UDF—user—defined functions) как с помощью языка Clipper, так и средствами языков Ассемблер и Си. 3. Предоставление функций, обеспечивающих доступ к файлам и устройствам на нижнем уровне (FCLOSE ( ), FWRITE( ), FERROR( ), FREAD ( ), FSEEK ( ), FREADSTR ( ), FCREATE ( )). 4. Предоставление команд и функций, значительно расширяющих возможности построения пользовательского интерфейса: две возможности построения пользовательского меню с помощью команд @...PROMT, SET MESSAGE, MENU TO, или функции ACHOICE ( ); сохранение, восстановление как всего экрана с помощью команд SAVE 130
SCREEN и RESTORE SCREEN, так и части экрана функциями SAVESCREEN ( ) и RESTSCREEN ( ); управление клавиатурой с помощью команд KEYBOARD, SET KEY ТО и функций LASTKEY ( ), NEXTKEY ( ); резервирование нажатия клавиши F1 для помощи пользователю, то есть при нажатии F1 исполняется процедура или программа с именем HELP (естественно, она должна быть написана); введение опции VALID в Команде @...GET, позволяющей осуществлять проверку ввода по READ; предоставление в дополнение к @...ТО команды @...ВОХ, позволяющей использовать при изображении рамок любые символы. 5. Введение массивов переменных. Каждый массив рассматривается Clipper как временная переменная, то есть максимальное число используемых массивов — 2048, причем каждый из них может содержать до 2048 переменных. Clipper предоставляет несколько функций для работы с массивами (ACOPY ( ), ADEL ( ), ADIR ( ), AFIELDS( ), AFILL( ), AINS ( ), ASCAN ( ), ASORT( )). 6. Расширение возможностей манипулирования с полями памяти (memo): поля памяти могут рассматриваться как символьные переменные, что позволяет выполнять операции поиска, объединения, замены полей памяти; возможность форматирования полей памяти с помощью функций MLCOUNT ( ), MEMOLINE ( ); предоставление развитой функции MEMOEDIT ( ) — фактически мини-текстового редактора полей памяти и длинных символьных строк. 7. Расширение возможностей передачи параметров: число передаваемых в программы, процедуры и функции, определяемые пользователем, параметров не обязательно должно совпадать с числом параметров, указанных в команде PARAMETERS; для контроля числа действительно передаваемых параметров предоставляется функция PCOUNT ( ); параметры могут передаваться и из командной строки MS-DOS, однако при этом они передаются только как символьные переменные. 8. Введение специальной общедоступной переменной (PUBLIC) с именем CLIPPER для обеспечения возможности выполнения программ, усовершенствованных средствами Clipper, в системе dBASE III PLUS. При объявлении имен переменных PUBLIC dBASE III PLUS до присвоения им значения создает логические переменные 6* 131
со значением «ложь» (.F.). Механизм объявления PUBLIC-переменных в Clipper аналогичен, за исключением лишь одного имени — CLIPPER. При объявлении PUBLIC-переменной с именем CLIPPER создается логическая переменная со значением «истина» (.Т.), поэтому, используя конструкцию IF .. ENDIF, можно выделять блоки программ Clipper-командами, что обеспечит выполнение программ в интерактивном режиме dBASE III PLUS. В заключение приведем новые по отношению к dBASE III PLUS команды и функции языка Clipper. Следует при этом отметить, что и многие «старые» команды и функции dBASE в системе Clipper расширены дополнительными возможностями. Новые команды Clipper @...ВОХ — рисует рамку на экране указанными символами (для каждой стороны и угла рамки) и заполняет внутренность рамки определенным символом; ©...PROMPT ... [MESSAGE! — определяет расположение и содержание пунктов меню на экране, а также соответствующие вспомогательные сообщения; @...SAY ... GET ... VALID — позволяет задавать выражения или процедуры для проверки ввода по READ, не выходя из команды; DECLARE — создает один или несколько одномерных массивов переменных, при этом допускается использование в одном массиве переменных различных типов; EXTERNAL — объявляет символы для редактора; используется для определения процедур, функций, вызываемых с помощью макроподстановки или находящихся в оверлейных модулях программ; FOR ... NEXT — организует цикл (аналогично команде языка Бейсик); полезна при работе с массивами; FUNCTION — объявляет определенную пользователем функцию, написанную на языке Clipper; KEYBOARD — заносит в буфер ввода с клавиатуры указываемую цепочку символов, т. е. по этой команде выполняются последовательно все указанные нажатия клавиш; MENU TO — активизирует пользовательское меню, определяемое текущим набором PROMPT; RESTORE SCREEN [TO ] —восстанавливает экран, сохраненный по команде SAVE SCREEN; 132
SAVE SCREEN [TO] — записывает текущий экран в буфер или переменную; SET CURSOR ON/off — позволяет скрывать (восстанавливать) изображение курсора на экране; SET KEY ... ТО — назначает выполнение процедуры по нажатию указанной клавиши в любом состоянии ожидания (при выполнении команд READ, MENU TO, ACCEPT, INPUT, WAIT); SET SOFTSEEK on/OFF — переключатель, позволяющий при поиске по команде SEEK просматривать следующее значение ключа в случае, когда запись с указанным значением не найдена (относительный поиск по ключу); SET WRAP on/OFF — переключатель, позволяющий циклически передвигаться по пользовательскому меню. Новые функции Clipper ACHOICE ( ) — строит пользовательское меню в указанном окне экрана, используя массив символьных выражений в качестве пунктов выбора; ACOPY ( ) — копирует элементы одного массива в другой; ADEL ( ) — стирает элемент массива; ADIR ( ) — заполняет набор массивов информацией из каталога диска; AFIELDS ( ) — заполняет набор массивов информацией из текущего файла базы данных; AFILL ( ) — заполняет массив указанным выражением; AINS ( ) — вставляет новый элемент в массив; ALIAS ( ) — возвращает алиасное имя указанной рабочей области; ASCAN ( ) — сканирует массив или часть массива по указанному выражению и возвращает номер элемента в массиве; ASORT ( ) — сортирует массив или часть массива в восходящем порядке; DBEDIT ( ) — редактирует записи в полноэкранном режиме в указанном окне экрана; DTOS ( ) — преобразует дату в формат ТГГГММДД' для использования в качестве ключа при индексации; EMPTY ( ) — возвращает .Т., если указанное выражение пусто; FCLOSE ( ) — закрывает DOS-файл; 133
FCOUNT ( ) — возвращает число полей в текущем файле базы данных; FCREATE ( ) — создает DOS-файл; FERROR ( ) — возвращает номер ошибки DOS; FOPEN ( ) — открывает DOS-файл; FREAD ( ) — чтение символов из DOS-файла во временную переменную; FREADSTR ( ) — чтение строки символов из DOS- файла; FSEEK ( ) — передвигает указатель в DOS-файле,' FWRITE ( ) — запись временной переменной в DOS- файл; HARDCR ( ) — замена символов CHR A41) на CHR A3) (возврат каретки) в полях памяти; INDEXEXT ( ) — возвращает расширение имени текущего индексного файла (NTX или NDX); INDEX KEY ( ) — возвращает выражение указанного ключа текущего индексного файла; INDEXORD ( ) — возвращает порядковый номер ключа, установленного по команде SET ORDER TO; LASTKEY ( ) — возвращает число, соответствующее ASCII-коду последней нажатой клавиши при выходе из состояния ожидания; MEMOEDIT ( ) — позволяет редактировать поля памяти, длинные символьные поля и выражения; MEMOLINE ( )—формирует текстовую строку в указанном формате из поля памяти или символьного выражения; MEMOREAD ( ) — чтение содержимого текстового файла с диска; MEMORY ( ) — определяет величину свободной памяти; MEMOTRAN ( ) — замена символов CHR A3) («возврат каретки») и CHR A0) («перевод строки») в полях памяти; MEMOWRITE ( ) —запись символьного выражения или поля памяти в файл на диск; MLCOUNT ( ) — возвращает количество строк символьного выражения или поля памяти в соответствии с указанным числом символов в строке; NEXT KEY ( ) — чтение следующего кода из буфера клавиатуры; PCOUNT ( ) — возвращает количество переданных параметров; 134
PROCLINE ( ) — возвращает номер текущей исполняемой строки исходного кода программы или процедуры; PROCNAME ( ) — возвращает имя текущей исполняемой программы или процедуры; READVAR ( ) — возвращает имя текущей GET- или MENU-переменной; SCROLL ( ) — скроллирование выделяемого окна экрана вверх, вниз или очистка; SECONDS ( ) — число секунд, прошедших с 12 часов; SELECT ( ) — возвращает номер текущей рабочей области; SETPRC ( ) — устанавливает строку и колонку начала печати текущей страницы; UPDATED ( ) — определяет, изменилось ли значение GET-переменной при вводе по последней или текущей команде READ.
Глава 6. ТАБЛИЧНЫЕ ПРОЦЕССОРЫ И ИНТЕГРИРОВАННЫЕ ПРОГРАММНЫЕ СРЕДСТВА 6.1. Возможные области применения табличных процессоров и интегрированных программных средств Как известно, в математике, впрочем и в других науках, использующих язык математики, где существует мера, для анализа зависимостей используются в основном три формы представления информации: табличная, графическая и аналитическая. В области вычислительной техники первым словом было число, затем таблица чисел, графика. Первоначально таблица чисел служила простым вместилищем данных, используемых программой, затем возникла идея помещать в таблицы одновременно с данными также формулы, позволяющие автоматически выполнять расчеты при изменении введенных данных. Постепенно набор формул расширялся, вводились правила формирования и обработки данных, т. е. появились так называемые средо-ориентированные языки программирования, развитие которых продолжается и в настоящее время. Проще всего работу с таблицами (на ЭВМ называемыми электронными таблицами) можно показать с помощью примеров. Интересно, что для иллюстрации возможностей электронных таблиц (Spreadsheet) в зарубежной литературе используются примеры из области бизнеса — считают доходы, а в немногочисленной пока отечественной литературе, с учетом, по-видимому, дефицитного состояния экономики, составляют калькуляции. Не хочется быть белой вороной, однако следует сразу сказать, что такая узко утилитарная подача невольно сократила область возможных применений и не привлекла внимание к этим средствам целой армии инженеров, конструкторов, научных работников, да практически любых специалистов, которым необходимо что-то быстро сосчитать и оформить. К счастью, положение меняется — начали появляться публикации, в которых даны рекомен- 136
дации по применению табличных процессоров для научных и инженерных расчетов. Любое программное средство, ведущее обработку электронных таблиц, после вызова помещает на экран пустую таблицу, колонки которой идентифицируются буквами, строки — цифрами, таким образом, что каждая ячейка таблицы получает уникальное имя. В активную ячейку, отмеченную или скобками, или инверсным свечением, можно помещать числа, текст, формулы, функции или команды. Перемещение по телу таблицы осуществляется клавишами управления движением курсора или командами, задаваемыми функциональными клавишами или комбинациями клавиш. Собственно этих формальных знаний достаточно, чтобы начать работать с электронной таблицей. Составим таблицу-заготовку для вычисления прибыли какого-либо предприятия. Для этого в ячейку А1, как в известной игре «Морской бой», помещаем слово (текст) «Показатель», в ячейку В1 — текст «1988» и т. д. Закончив ввод текста, вводим данные точно так же, как они выглядят ниже: A BCD 1 Показатель 1988 1989 Отклонение 2 Доход С2—В2 3 Расход СЗ—В3 4 Прибыль В2—ВЗ С2—СЗ С4-В4 Таблица-заготовка сформирована и готова для приема чисел. Теперь, как только в ячейки В2, ВЗ, С2, СЗ, называемые блоком В2.СЗ, будут помещаться данные, в строке «4» и колонке «D» на месте введенных формул будут отображаться результаты расчетов. Так работают программы обработки таблиц первого поколения. Программы обработки таблиц второго поколения, получившие широчайшее распространение на ПЭВМ, располагают средствами для быстрого создания таблиц путем копирования готовых блоков. Возьмем предыдущую таблицу и используем ее для подготовки таблицы, в которой будут подводиться итоги работы двух предприятий, входящих в объединение. Поступаем следующим образом. В первые две строчки таблицы помещаем заголовки. Затем в свободную ячейку ЕЗ копируем командой типа COPY блок A1.D4, а в ячейку 13 — блок F3.H6. Осталось заполнить колонку L, и таблица готова к работе. Особенность заключается 137
в том, что при выполнении команд типа копирования все формулы автоматически настраиваются на новые координаты клеток. На экране дисплея полученная таблица будет выглядеть следующим образом: Е F G Н 1 J Q L 1 Результаты работы объединения 2 Предприятие 1 Предприятие 2 3 Показатель 1988 1989 Откл. 1988 1989 Откл. ИТОГО 4 Доход F4 —G4 14 —J4 H4+Q4 5 Расход F5—G5 15—J5 H54-Q5 6 Прибыль F4—F5 G4-G5 F6—G6 14 — 15 J4-J5 16 — J6 H6 + Q6 Современные таблицы имеют достаточно широкий набор общих математических функций. Обработка таблиц (расчет по формулам) производится слева—направо и сверху—вниз. Поэтому естественно прежде всего применять таблицы для задач, решаемых методом прямого счета, или для построения математических моделей, работающих по схеме «источник-сток». Этим требованиям удовлетворяют многие задачи механики, электро- и радиотехники, гидроаэродинамики, теплотехники и т. п. Для численного решения более сложных задач математической физики, использующих рекурсивные процедуры, таблицы не предназначены. При известной настойчивости можно найти частичный выход, воспользовавшись искусственным приемом, основанным на принципе зеркального отражения, однако многие достоинства таблицы при этом теряются. Теперь, чтобы перейти к интегрированным программным средствам, изложим свой «краткий курс» истории их появления. Программы обработки таблиц второго поколения (их основные возможности мы рассмотрели) будем называть крупноформатными электронными таблицами. При создании программ третьего поколения разработчики обратили внимание, что данные, помещенные в таблицы, можно рассматривать как простейшую реляционную базу данных. В пакеты были включены режимы сортировки и выборки. Для более наглядного представления информации был предусмотрен режим деловой графики, также получил развитие и режим «макро», позволяющий создавать текстовыми редакторами файлы, содержащие команды формирования и обработки таблиц. Пакеты обработки таблиц, имеющие перечисленные средства, можно назвать табличными процессорами. Последние — четвертые вер- 138
сии табличных процессоров — имеют более удобный интерфейс с пользователем и ориентированы на работу в сети ПЭВМ. Так развивались и продолжают развиваться «чистые» табличные процессоры. Одновременно шло совершенствование текстовых процессоров и программных средств поддержки баз данных — систем управления базами данных (СУБД), что сразу обнаружило сравнительно слабые сто^ роны табличных процессоров: несовершенный текстовый редактор и ограниченные возможности СУБД. Так как работа с несколькими программными средствами сопря* жена со значительными трудностями, прежде всего при организации интерфейса между ними, возникла совершенно естественная мысль создать программное средство, объединяющее лучшие достижения в области табличных процессоров, текстовых процессоров и СУБД. Важнейшими требованиями к новому классу программных средств явились объем используемой памяти ПЭВМ и доступность для конечного пользователя. К реализации этой идеи приступили фирмы, имевшие опыт в разработке различных компонентов базовых программных средств. Это определило три подхода в идеологии построения нового класса программных средств, которые у нас получили абстрактное наименование интегрированных, а за рубежом более точное—Integrated Business Products. Первое направление, характеризующееся совершенным табличным процессором как ядром интегрированного программного средства, возглавила известная фирма «Лотус девелопмент» (Lotus Development) — автор классического табличного процессора Lotus 1-2-3 и текстового процессора Lotus Manuscript. Ее разработки — интегрированные пакеты Symphony и Jazz — отличаются ясностью построения, основанного на максимальном использовании всех достоинств табличного процессора. Это же направление поддержала фирма Computer Associates — разработчик табличного процессора Supercalc и текстового процессора Easy Writer, выпустив интегрированный пакет Executive, а также известная фирма Microsoft—автор популярного табличного процессора Multiplan и достаточно популярной СУБД RBASE 5000, которая предложила интегрированный пакет Excel. Второе направление возглавила мощная фирма «Аштон тейт» (Ashton Tate) — разработчик СУБД dBASE и тек- 139
стового процессора Multi Mate Plus. Результат ее работы — интегрированные пакеты Framework, версии I, II, III. Пакеты отличаются развитыми средствами введения базы данных, что в какой-то степени усложнило процессы освоения и работы. И, наконец, третье направление организовали фирмы, не имевшие собственных табличных процессоров или СУБД. Можно назвать фирмы «Самна корпорейшн» (Samna Corporation) — разработчика текстового процессора Samna Word, которая выпустила интегрированное программное средство Samna Plus III. В отечественной литературе пакеты Knowlegmen I и II фирмы «Микро дейта бейс систем» (Micro Data Base System) — автора текстового процессора K-Report — относят к интегрированным программным средствам, однако по широте предоставляемых возможностей эти пакеты правильнее отнести к СУБД. Для сравнительной оценки интегрированных пакетов используются десятки параметров, но судьбу пакетов часто, как уже говорилось» определяют не количество набранных баллов — все имеют достаточно близкие и высокие оценки, — а трудно формализуемые, однако умело формируемые, симпатии пользователей. Рассмотрим табличный процессор Supercalc-З — простой и удобный инструмент для* работы с таблицей, Lotus 1-2-3 — почти интегрированный пакет, ставший эталоном для организации дружественного интерфейса, и мощный интегрированный пакет Symphony, сохранивший достоинства табличного процессора 1-2-3. Такой выбор обосновывается тем, что пакет Super- calc-З может работать на машинах с оперативной памятью 256 Кбайт, например на Нейроне И9.66 первого исполнения, Lotus 1-2-3 будет хорош для ПЭВМ с памятью 512—640 Кбайт (ЕС-1840, Искра-1030), Symphony целесообразно использовать на ПЭВМ с памятью более 640 Кбайт, жестким диском и цветным дисплеем (в настоящее время это ПЭВМ пока только зарубежного производства). Таким образом, по мере роста технической оснащенности переход с пакета на пакет будет проходить совершенно естественно. Названные программные средства станут своего рода ключом к использованию специализированных методо-ориентированных программных средств, поскольку в последних, как правило, предусмотрен интерфейс с рассмотренными пакетами. 140
Рассмотренные программные средства предназначены, прежде всего, для индивидуального использования. Однако с их помощью можно проектировать и небольшие коммерческие системы. Именно на эту область применения, учитывая, что ПЭВМ у нас используются пока как профессиональные ЭВМ, и будем обращать внимание читателя. Сразу следует сказать, что фирмы — разработчики программных средств этого класса почему-то не приводят в пользовательской документации сведений о важнейших командах обработки баз данных и программирования, которые необходимы при разработке программных средств, ориентированных на тиражирование. В свою очередь, разработчики прикладных систем, работающих на базе этих пакетов, тоже почему-то стараются «спрятать» первоисточник. На наш взгляд, этого делать не следует — нужно уважать пользователя: если вы разобрались, например, в Lotus, то и многие другие поймут. Поэтому, если ПС какого-либо АРМ выполнено средствами табличного процессора или интегрированного программного средства, следует предоставить возможность и пользователю работать с этими базовыми средствами самостоятельно. На взгляд автора, лучшая защита программного продукта от нерегламентированного тиражирования — это своевременная разработка новой, более интересной версии. 6.2. Supercalc-3 Табличные процессоры строятся, как правило, на общих принципах, поэтому работа с пакетами различных фирм внешне похожа. Отличия могут состоять в количестве используемых команд и особенностей диалога. Для освоения основных приемов работы с табличными процессорами мы рассмотрим один из самых популярных табличных процессоров — Supercalc-З, последние версии (старше 3) которого, как содержащие большой набор функций, можно отнести к интегрированным программным средствам. Supercalc-З — это программа с большими возможностями. Она является достаточно мощной, оставаясь простой в освоении и использовании. Supercalc-З позволяет решать многие виды экономических, финансовых, инженерных и научных задач. Пакет имеет контекстуально- зависимую помощь (функция HELP). Кроме того, переведена на русский язык книга одного из авторов пакета 141
У. Дойла [41, где очень подробно описывается работа с этим пакетом. Таблица Supercalc-З может иметь 9999 строк и 127 колонок A 269 873 клетки). Строки идентифицируются числами от 1 до 9999, а колонки — буквами латинского алфавита: от А до Z (первые 26 колонок); от АА до AZ (вторые 26 колонок); от В А до BZ (третьи 26 колонок); от С А до CZ (четвертые 26 колонок); от DA до DW (последние 23 колонки). Размер таблицы может быть переопределен и ограничен только объемом памяти ПЭВМ. Границы таблицы устанавливаются автоматически в соответствии с объемом доступной памяти, которая предварительно очищается от «мусора». По умолчанию принимается размер таблицы 2000 строк на 127 колонок при объеме памяти не менее 192 Кбайт или 254 строки на 63 колонки при объеме памяти менее 192 Кбайт. Следует помнить, что число клеток, которые могут содержать данные, не равно числу доступных клеток. Это связано с тем, что максимальное число заполненных клеток зависит от физически доступной памяти ПЭВМ и суммарного объема данных в этих клетках. Тем не менее, фирмы-разработчики стараются в каждой следующей версии пакета расширить размер таблицы, следуя за постоянно возрастающими размерами памяти новых моделей ПЭВМ. Во всех случаях мы должны понимать, что речь идет не о физически доступных объемах памяти, а скорее о возможном адресуемом пространстве. Вызов функции HELP осуществляется нажатием клавиш «?» или «F1». При этом система даст пояснения или покажет допустимые варианты команды. Нажатие любой другой клавиши возвращает к программе в то место, откуда было обращение к помощи. Порядок вызова Supercalc-З следующий: ввести SC3 в ответ на приглашение ОС и нажать клавишу «ВВОД». Повторное нажатие на «ВВОД» загружает рабочую таблицу. Помощь вызывается клавишами «?» или «Fb, возвращение из режима помощи — по любой клавише. Первый кадр таблицы Supercalc-З приведен на с. 143. При работе с обычным дисплеем B5 строк на 80 символов) на экране помещаются 20 строк таблицы. При этом активная клетка А1 выделяется подсветкой, ее стандартная ширина — 9 символов. Командами форматирования она может быть изменена в диапазоне от 1 до 20 символов. 142
А В С D E F G I й 3 20 А1 Width: 9 Memory : 257 Last Col/Row : Al ? for HELP 1> Fl=Help; F2=Cancel: F9=Plot; F10=View За строкой 20 следуют еще четыре специальные строки. Самая нижняя строка содержит информацию о назначениях функциональных клавиш. Остальные три строки служат для организации диалога пользователя с пакетом. Строка состояния (STATUS LINE) — четвертая снизу. В ней отображается следующая информация: направление движения курсора; имя активной клетки; содержимое текущей клетки и ее атрибутов (латинская буква «Р» указывает на защиту данных клетки); строка символов после Text= показывает текст текущей клетки; числовое значение или выражение после Form= показывает формулу или результат вычислений в клетке; строка символов после Rtxt= 'показывает повторяющийся текст (используется для оформления таблиц). Строка подсказки (PROMPT LINE) — третья снизу. В ней приводятся сведения о ширине текущей клетки, о занятом текущей таблицей объеме памяти и о последней клетке (в правом нижнем углу) таблицы. В этой строке Supercalc подсказывает синтаксис текущей команды и выдает сообщение об ошибках. Строка ввода (ENTRY LINE) — предпоследняя строка экрана. В этой строке происходят ввод и редактирование данных. Справа от символа «>» начинается область ввода данных, слева помещено число, указывающее позицию курсора в строке. Существует три способа движения по таблице: прокрутка (scrolling); постраничный просмотр; прямой переход. Прокрутка — движение по связному набору клеток, которое осуществляется при непрерывно нажатой клавише со стрелкой в направлении, указываемом этой стрелкой (клавиша NUMLOCK — «ЦИФ»— отжата). Аналогичный результат получается при нажатии клавиши 143
CTRL («УПР») в комбинации с одной из символьных клавиш: Е (вверх), X (вниз), S (влево), D (вправо). Постраничный (покадровый) просмотр таблицы осуществляется с помощью клавиш PgUp (страница вверх), PgDn (страница вниз) и комбинаций клавиши CTRL с клавишами-стрелками «влево» и «вправо». Движение пр вертикали происходит порциями по 20 строк, а по горизонтали — в зависимости от ширины колонки. Для прямого перехода существует несколько возможностей, описанных в табл. 6.1. Таблица 6.1 Клавиша 1 НОМЕ (~ \) END (КОН) » Клавиша 2 НОМЕ «вверх» («вниз») «влево» RETURN («ВВОД») С5 (координата клетки) Действие Возвращение к клетке А1 Переход к последней заполненной клетке Перемещение в начало (в конец) колонки Перемещение в начало (в конец) строки Сдвиг таблицыз текущая клетка станет левой верхней С5 становится текущей клеткой Большинство команд SC-3 начинаются с символа «/» (слэш) и называются слэш-командами. Основные слэш-команды следующие: /А — сортирует клетки таблицы в порядке возрастания или убывания; ув — удаляет или очищает содержимое клетки или диаграммы; /С — дублирует диаграммы или содержимое и форматы отображаемых клеток; /D — удаляет ряды, колонки из памяти или таблицу с диска; /Е — предоставляет для редактирования содержимое клеток; /F — устанавливает форматы отображения; /G — меняет режимы отображения и пересчета таблицы; /I — добавляет пустые строки и колонки; /L — загружает всю таблицу или ее часть с диска в рабочую область; /М — передвигает ряд или колонку в новое место; /О — выводит отображе- 144
ние или содержимое клетки на АЦПУ, экран или диск; /Р — защищает содержимое клеток от изменения; /Q — завершает исполнение программы Supercalc; /R — размножает содержимое части колонок или рядов; /S — сохраняет текущую таблицу на диске; /Т — фиксирует верхние ряды и (или) левые колонки на экране; /U — снимает защиту клеток; /V — отображает данные в виде круговых, линейных, столбиковых и других диаграмм; /W — разделяет экран на окна; /X — принимает данные из файла .XQT; /Z — удаляет таблицу из памяти. Все начальные буквы команд выводятся на экран как подсказка после ввода «/», что упрощает выбор нужной команды. После задания начальной буквы требуемой команды пользователь получает на экране последовательно ряд вопросов, уточняющих режим работы (параметры) выполняемой команды. Если программа «удовлетворена» ответами, команда выполняется, в противном случае следует сообщение о допущенной ошибке. Примеры задания команд: /Save,B:PAYROLL,ALL (сохраняет файл PAYRALL.CAL на В); /Move,Column,C:F,T (размещает колонки С—F с колонки Т); /Global,Graphics,Layout (обновляет параметры в меню форм чертежа); /Format,Row,5:18,User-deffried 3 (устанавливает формат пользователя #3 на ряды 5—18); /View, (показывает текущую диаграмму). Таблицы, созданные SC-3, получают расширение CAL. Так как команды пакета обрабатываются в интерпретирующем режиме, нетрудно организовать с помощью любого текстового редактора командный файл, отражающий все этапы создания таблицы. Это позволяет существенно экономить внешнюю память, поскольку вместо целой таблицы можно хранить небольшой по объему командный (текстовый) файл. Кроме того, с помощью командного файла можно упростить работу с системой, избавляя пользователя от многократного ввода последовательностей одних и тех же символов или команд. Рассмотрим работу некоторых операторов и создание командного файла на традиционном примере. Составим 145
средствами табличного процессора следующее штатное расписание: А 1 ТАБНОМ 2 3 163 4 265 5 562 6 343 7 413 8 234 В ФАМ. И. О. Иванов С. Л. Грищенко В. И. Залыгин А. Е. Веригин Н. О. Аземша В. А. Сергеев А. П. С ОТДЕЛ 22 22 22 23 23 23 D должность Ст. инженер Вед. инженер Техник Зав. сектором Художник Зав. сектором Е ОКЛ; 190 250 120 280 185 285 Пусть требуется периодически получать справку о фонде заработной платы (например, отдела 22). Прежде всего подготовим нужную справку (разумеется тоже как таблицу), разместив ее по адресу А30. Все действия, которые были выполнены при подготовке справки, зафиксируем на листе бумаги. Затем выйдем из SC и вызовем любой имеющийся текстовый редактор. Средствами текстового редактора сформируем командный файл COMF.XQT, в котором в столбик помещены все действия и команды, выполненные ранее при подготовке справки: /ZY /Lb:KADRA =А30 'Справка о сумме заработной платы отдела 22 =; = Е30 sum (еЗ.еб) /Q Теперь, когда необходимо получить справку о заработной плате по отделу 22, можно в сеансе работы с SC-3 набрать всего один оператор /XCOMF. Командные файлы SC-3 имеют расширение XQT- В Supercalc-З имеется группа очень полезных команд управления базой данных. Почему-то, как уже говорилось, в технической документации и популярной литературе по этому пакету из них делают «тайну Полишинеля». Постараемся снять завесу таинственности. Команды управления базой данных. Для задания этих команд необходимо два раза нажать клавишу с символом слэш, а затем D — //D. В пакете предусмотрены следующие команды управления базой данных (достаточно набрать лишь первую букву имени). 146
Input — определяет блок данных таблицы как базу данных. Таблица может содержать более чем одну базу данных. Указанный входной блок задает текущую базу данных. Верхний ряд должен быть зарезервирован для имен полей данных каждой колонки. Criterion — задает критерии поиска и извлечения данных из входного блока базы данных. Верхний ряд блока критериев должен резервироваться для имен полей данных, при этом клетки верхнего ряда могут быть пустыми. Остальные клетки содержат условия выборки во входном блоке базы данных, при этом можно задавать как точное, так и селективное совпадение просматриваемых или извлекаемых данных (полей). Output — определяет место для размещения выбранных по заданным критериям данных. Верхний ряд резервируется для имен полей. Find — последовательно инверсно выделяет все записи (ряды входного блока данных), удовлетворяющие заданным критериям. Переход от найденной записи к следующей осуществляется клавишами «вверх» или «вниз». Просмотр полей найденных записей осуществляется клавишами «влево» или «вправо». Нажатие клавиши «ВВОД» сбрасывает действие команды Find и возвращает к подсказке команды //D. Если при просмотре необходимо отредактировать текущую клетку, то следует применить команду Remain, которая оставляет на месте указатель клетки. Если записей, удовлетворяющих заданным критериям, нет, то появляется соответствующее сообщение. Extract — копирует отвечающие критериям поиска данные в заданный командой Output выходной блок. Select — выполняет ту же функцию, что и команда Extract, однако позволяет выбрать среди найденных записей те, которые Вы хотите скопировать в выходной блок. Сначала выделяется первая подходящая запись и следует подсказка — Yes, No, т. е. копировать или нет. Yes — извлекает данные из выделенной записи в блок результатов, размещая их в соответствии с именами полей, после чего выделяется следующая подходящая запись. No — выделяет следующую подходящую запись, если таковая существует, в противном случае — переход к подсказке команды //D. Нажатие клавиши «ВВОД» прекращает действие команды Select и возвращает к подсказке //D. 147
Remain — удерживает указатель в текущей клетке и очищает строку ввода. Рассмотрим действие команд управления базой данных. Для этого слегка преобразуем использованную выше таблицу со штатным расписанием и внесем в нее условия выборки. А В С D Е 1 2 ТАБНОМ 3 163 265 562 343 413 234 ФАМ. И. О. Иванов С. Л. Грищенко В. И. Залыгин А. Е. Веригин Н. О. Аземша В. А. Сергеев А. П. ОТДЕЛ 22 22 22 23 23 23 10 Фамилия И. О. 11 Иванов С. Л. 12 С* 13 Залыгин ?. ?. ДОЛЖНОСТЬ Ст. инженер Вед. инженер Техник Зав. сектором Художник Зав. сектором ОТДЕЛ 23 ОКЛАД 190 250 120 280 185 285 ОКЛАД еЗ>=200 Зададим следующие команды: //D — входим в режим обработки базы данных; 1а2.е8 — определяем входной блок нашей базы данных; Са10.а13 — определяем блок критериев поиска по фамилии, удовлетворяющей любому из трех условий. Теперь, используя команду Find, мы можем последовательно просмотреть все записи с фамилией Иванов С. Л.» с фамилиями, начинающимися на букву С, а также с фамилиями Залыгин и любыми инициалами (в нашей базе данных таких записей 3). Если мы возьмем в качестве блока критериев блок dlO.ell (команда CdlO.ell), то по команде поиска найдем все записи по сотрудникам отдела 23 с окладом более 200 рублей. Определив в таблице выходной блок результатов (по команде Output), мы можем либо все, либо часть выбранных данных записать в отдельную часть таблицы. Как видно, работа с табличной базой данных не должна вызывать какие-то колоссальные трудности. Для завершения сеанса работы с SC-3 вводится команда /Q (Quit). В строке подсказки появится запрос: EXIT Supercalc 3? Y, N, or To. В строке ввода SC-3 будет ожидать ответа и выдаст на экран: 1>/Quit. Можно выбрать одну из следующих функций: F1 — вызов функции HELP; Y — немедленное завершение 148
сеанса работы с SC-3 (в этом случае, если не сохранили таблицу на диске, она будет потеряна); N — возврат к таблице; Т — завершение сеанса работы с указанием программного файла типа СОМ, который запускается сразу после прекращения работы SC-3. Файлы типа CAL указывать нельзя. В настоящее время разработана следующая версия этого табличного процессора — четвертая. В ней по сравнению с первыми версиями увеличен максимальный объем электронной таблицы, добавлена поддержка новых типов мониторов и принтеров, расширен интерфейс пользователя, основанный на меню команд, включен механизм использования имен клеток и их групп, предусмотрен сетевой режим работы. Все это существенно увеличило объем пакета. Институтом «Интерпрограмма» разработан табличный процессор ВАРИТАБ-86. По своим возможностям ВАРИТАБ-86 очень мало отличается от SC-3, более того, можно сказать, что эти табличные процессоры совместимы между собой. Таблица, подготовленная с помощью SC-3, может быть обработана ВАРИТАБ-86, и наоборот. Следует однако учитывать, что таблицы, созданные ВАРИТАБ-86, получают расширения TBL, а командные файлы — расширения ISP. Наборы команд этих табличных процессоров по смыслу полностью совпадают. Различие лишь в том, что имена команд ВАРИТАБ-86 русифицированы. Таблицы, подготовленные с помощью ВАРИТАБ-86, могут быть включены в файлы, созданные текстовым редактором «ДОКУМЕНТ». 6.3. Lotus 1-2-3 Lotus 1-2-3 — наиболее яркий представитель табличных процессоров, давший толчок к появлению интегрированных программных средств и оказавший большое влияние на формирование современного стиля организации диалога с конечным пользователем [11]. Уместно сказать, что Митч Кэйнор — руководитель работ по созданию программных средств фирмы Lotus Development—очень точно, хотя и несколько преувеличенно, отражает в названии суть пакетов (он также является автором пакета Simphony). Действительно, в классической мифологии (это описано в «Одиссее» Гомера) поеда- тели лотоса — народ, который жил в блаженном доволь- 149
стве и безразличии к окружающему, питаясь только плодами лотоса. Современные же «поедатели» — пользователи Lotus 1-2-3 — по замыслу автора могут весь рабочий день оставаться в среде этого пакета, не испытывая потребности в каком-либо ином программном средстве. В отличие от Supercalc-З в Lotus дополнительно реализовано следующее: используется не только командный язык, но и меню команд; расширенный состав команд обработки таблиц; предусмотрено использование имен диапазонов (блоков) ячеек; включены дополнительные возможности для работы с табличными файлами; применены команды программирования (/Х-команды); допускается работа с таблицей возможных значений выражений. Система Lotus занимает 192 Кбайт оперативной памяти и располагается на следующих дисках: 1-2-3 SYSTEM — системный диск (с основным модулем системы — 1-2-3); UTILITY —диск с утилитами; PRINTGRAPH — диск с программой печати графиков; TUTORIAL — самоучитель по системе. Фактически работа системы обеспечивается первым (SYSTEM) диском, который должен быть установлен на дисковод А. Остальные диски устанавливаются на смену основному диску также на дисковод А по мере отработки запросов пользователя. Установка производится по указаниям в соответствии с запрошенной функцией из главного меню. Такой подход к расположению системы на внешних носителях позволяет без особых трудностей использовать систему Lotus на ПЭВМ, не оснащенных «винчестером», в частности на ПЭВМ ЕС-1840. Главным элементом системы Lotus является таблица, состоящая из 2048 строк и 256 столбцов. Координаты клеток задаются аналогично Supercalc. В каждую клетку таблицы могут быть записаны числовая, символьная информация или выражение. В выражениях допускается использование ссылок на координаты других клеток, арифметические знаки, логические операторы и специальные функции. Функции, реализуемые табличным процессором пакета Lotus, во многом идентичны системе Super- calc-З. Таким образом, электронная таблица предназначена для накопления информации, установки взаимных ссылок, вычисления указанных выражений. Информация из таблицы может быть выведена на принтер, сохранена в файле и т. д., то есть обработана в соответствии с тре- 150
бованиями пользователя. В системе имеются графические средства отображения информации из таблицы в виде линейных графиков, гистограмм и круговых диаграмм. Система Lotus позволяет рассматривать таблицу как некоторую базу данных (таблично-ориентированную). В такой базе каждая строка является записью, а каждый столбец — полем в этой записи. Таким образом, Lotus допускает базу данных объемом 2048 записей, в каждой из которых до 256 полей. Поддерживаемая Lotus база данных допускает возможность использования критериев при поиске информации. Для программирования процессов обработки данных и создания собственных АРМ используются макросредства. Инсталяция (установка) системы на конкретный тип ПЭВМ и устройств заключается в выборе из предлагаемого перечня требуемых драйверов внешних устройств и записи их на все диски с системой Lotus. В табл. 6.2 приведены поддерживаемые Lotus типы устройств и названия драйверов, имеющихся в системе. Таблица 6.2 Устройство COMPAQ Text Display IBM Hercules Text Display IBM Monochrome Display IBM Color/Graphics Display IBM Color Screen Text Display IBM Graphics Display (Hercules) IBM Graphics Display IBM Keyboard IBM Printer Драйвер CPQOTD.DRV IBMOHERC.DRV IBMOMONO.DRV IBMOB&W.DRV IBMOCOLO.DRV IBMIHERC.DRV IBMIGI.DRV, IBM1G2.DRV IBM2KB.DRV IBM3PR.DRV В процессе инсталяции выбранные драйверы получают следующие имена: PR.DRV — драйвер для принтера; TD.DRV — драйвер видеотерминала; KB.DRV — драйвер клавиатуры; GD.DRV — драйвер для графического адаптера. В Lotus предусмотрены командные файлы, организующие перенос необходимых драйверов. С их помощью процесс инсталяции можно автоматизировать. Так, при инсталяции пакета Lotus на ЕС-1840 необходимо просто установить диск UTILITY в дисковод А и набрать команду: A)MONO В: 151
После этого, устанавливая в дисковод В по очереди диски с системой Lotus, все нужные для данной конфигурации ПЭВМ драйверы (IBMOMONO.DRV, IBM2KB.DRV и IBM3PR.DRV) будут переписаны автоматически под именами TD.DRV, KB.DRV и PR.DRV соответственно. Инсталяция Lotus на ПЭВМ, оснащенных жестким диском, производится простым вызовом из директория с системой соответствующего конкретной конфигурации командного (ВАТ) файла. Для запуска системы Lotus с выходом на главное меню необходимо установить системный диск на дисковод А и набрать команду: A>LOTUS Допускается прямой запуск табличного процессора 1-2-3, а также режима печати подготовленных графиков и системы обеспечения информационной совместимости. После считывания системы в оперативную память на экране появляется главное меню, содержащее перечень основных функций. Их выбор выполняется с помощью функций, из которых одна (выбранная) помечается голубым для цветного адаптера (CGA) фоном или инверсным свечением для монохромных терминалов. Выбор нужной функции производится клавишами управления движением курсора. Состав функций главного меню: 1-2-3 — работа в табличном процессоре 1-2-3, отображение информации графическими средствами, работа с базой данных; File-Manager — выход в систему управления файлами (требуется диск UTILITY); Disk-Manager — выход в систему обслуживания дисков; PrintGraph — выход в систему печати графиков, подготовленных в процессоре 1-2-3; Translate — выход в систему обеспечения информационной совместимости файлов, образованных различными программными средствами; Exit — выход из системы Lotus (для нормального выхода системный диск должен иметь файл COMMAND .COM). Работа системы Lotus в режиме 1-2-3. Этот режим является основным в системе Lotus. По этому режиму пользователь получает доступ к табличному процессору и электронной таблице, которую он может заполнять, обрабатывать и т. д. как в интерактивном (диалоговом) режиме, так и с помощью макрокоманд или макросов. 152
Режим характеризуется наличием мощной помощи, которая вызывается нажатием клавиши F1. Следует сказать, что помощь в Lotus организована более продуманно, чем в Supercalc; оставаясь контекстно-зависимой она, кроме того, снабжена собственным меню, позволяющим быстро находить любые требуемые разделы. Информация в помощи распределена по следующим разделам: как пользоваться помощью; как начать работу; ошибки и сообщения; как закончить работу; специальные ключи; передвижение указателя ячейки; контрольная панель; ввод в ячейку; режимы и индикаторы; очистка ячеек; формулы; операторы; ©-функции; форматы ячеек; ширина столбцов; команды 1-2-3; макросы; функциональные клавиши; командное меню; диапазоны; меню для имен файлов, диапазонов и графиков; указание диапазонов; имена файлов; ключи редактирования. Выбор раздела помощи производится с помощью клавиш управления движением курсора. Выход из помощи выполняется нажатием клавиши ESC. После вызова режима 1-2-3 на экране появляется таблица, в левом верхнем углу экрана находится координата текущей ячейки и ее содержимое, в правом верхнем углу — индикатор установленного режима (READY, WAIT, ERROR, EDIT, POINT и т.д.). Верхние три строки на экране образуют контрольную панель, на которой отображается текущее состояние табличного процессора, меню команд, подсказки и задаются необходимые опции. Занесение информации в таблицу выполняется непосредственно с клавиатуры, а обработка данных в таблице ведется с помощью специальных команд. В отличие от Supercalc-З команды 1-2-3 формируются и выполняются с помощью развитого командного меню (Highlighted menu), вызываемого нажатием клавиши /. Команды можно задавать с помощью первой буквы имени или выбирая из меню, пользуясь клавишами управления движением курсора. Командное меню многоуровневое, оно раскрывается подобно лепесткам лотоса. Многие из команд Lotus функционально соответствуют командам Supercalc-З, поэтому мы остановимся только на оригинальных и неописанных в руководствах командах. Команды 1-2-3 разбиты на девять групп: Worksheet — управления таблицей; 153
Range — управления ячейками и блоками (прямоугольниками, вырезанными из таблицы); Сору — копирования ячеек и блоков; Move — переноса ячеек и блоков; File — управления файлами; Print — вывода; Data — работы с базой данных; Graph — создания графиков; Quit — выхода в главное меню. После выбора, например, первой группы команд (Worksheet) предлагается меню, позволяющее выбрать конкретную команду из следующих: Global — установка параметров всей таблицы; Insert — вставка строки или столбца; Delete — удаление строки, столбца; Column-Width — установка ширины текущего столбца; Erase — удаление таблицы (очистка); Titles — установка (фиксация) горизонтальной или вертикальной шапки; Window — установка окон и синхронного перемещения; Status — выдача на экран основных параметров таблицы. Задание нужной команды заканчивается вводом в диалоге уточняющих параметров или опций. После завершения диалога команда выполняется. Команды второй группы Range включают: Format — установка формата в общем случае блока; Label-Prefix — установка признака выравнивания меток (символьной информации) в ячейках блока; Erase — очистка блока; Name — создание, удаление, корректировка имен блоков; Justify — выравнивание области текста внутри блока; Protect — запрет на ввод в ячейки блока; Unprotect — снятие запрета; Input — ограничение движения указателя ячейки только по незащищенным ячейкам. Отметим в этой группе команду Range Name, которая позволяет присваивать блокам ячеек (и просто любой ячейке) таблицы любые, не обязательно символьные, имена. Имена блоков можно использовать в любых командах 1-2-3 в режиме POINT, т. е. когда система требует указания адреса ячейки или блока. В этом режиме вместо явного указания адресов достаточно набрать имя ячейки 154
или блока. Кроме того, в режиме POINT, если нажать клавишу F3, то появится меню, содержащее все созданные имена блоков таблицы, из которого можно выбрать требуемое имя, пользуясь лишь клавишами управления движением курсора. Команды группы File включают в себя: Retrive — удаление таблицы из памяти и чтение заданной таблицы из табличного файла на диске; Save — сохранение таблицы в табличном файле на диске; Combine — объединение рабочей таблицы с таблицей из заданного табличного файла; Xtract — сохранение части таблицы (блока) в табличном файле; Erase — удаление табличного, печатного или графического файла A-2'3-файла); List — вывод списка всех 1-2-3-файлов; Import — чтение текста или чисел из текстового файла в табличный; Directory — печать и (или) установка текущего директория; используются расширения: WKS—табличные файлы; PIC — графические файлы; PRN — печатные (распечатки таблиц) файлы. Отметим команды File Combine и File Xtract. Команда File Combine либо перекрывает рабочую таблицу таблицей из заданного табличного файла (опция Сору), либо складывает данные из таблицы с данными из табличного файла (опция Add), либо вычитает данные из табличного файла из данных текущей таблицы (опция Subtract). Объединение данных начинается с ячейки, в которой находится указатель ячейки. Отметим, что объединяются только числовые данные. Команда File Xtract записывает в табличный файл на диске данные из указанного блока ячеек. Допускается запись либо формул (опция Formulas), либо только значений (опция Values). Отметим также, что при выполнении команд группы File система Lotus обращается к текущему директорию и выдает меню всех табличных файлов, позволяя клавишами управления движением курсора быстро выбрать необходимый. Команды обработки базы данных (Data) включают! Fill — заполнение строки или столбца последовательностью чисел; 155
Sort — сортировка БД по ключам; Query — поиск всех записей по критерию; Table — создание таблиц возможных значений; Distribution — подсчет частоты распределения значений в некотором диапазоне. Все команды выполняются в режиме диалога. При выборе команды, объединяющей несколько команд, например Worksheet, выводится меню-перечень команд, входящих в выбранную группу. При выборе конкретной команды выводится меню, содержащее опции, конкретизирующие выполнение выбранной команды. Программирование в режиме 1-2-3 заключается, как уже говорилось, в создании макросов, обеспечивающих выполнение задач. Макросы — это определенным образом записанные в ячейку или непрерывный столбец ячеек 1-2-3 таблицы любые допустимые в системе последовательности нажатий клавиш, определяющие команды, метки, функциональные клавиши, числа, текст, формулы и т. п. Для того чтобы создать макрос, необходимо запомнить выполненную последовательность действий при проектировании задачи и перенести ее в рабочую таблицу. После создания макроса записанная последовательность автоматически выполняется при нажатии клавиш ALT и любой из 26 буквенных клавиш. Идентификация макроса, вообще говоря, является частным случаем идентификации имени диапазона ячеек и заключается в следующем. 1. Необходимо записать в одну ячейку имя нескольких подряд идущих ячеек столбца в поле метки (текста) последовательностью нажатий клавиш. Например: /FRplan~ является записью последовательности нажатий клавиш, которая вызывает табличный файл plan.wks (знак ~ — тильда — означает нажатие клавиши «ВВОД», так принято в системе Lotus). Действительно, клавишами /, а затем F вызывается функция File, после чего нажимается клавиша R (команда Retrieve — запрос имени файла), ответ plan и нужный файл загружается. Отметим, что при записи последовательности нажатий клавиш функциональные клавиши, а также клавиши управления движением курсора и редактирования необходимо записывать специальным образом, указывая их уникальные имена, имеющиеся в системе 156
Lotus, и заключая их в фигурные скобки. Ниже приводится запись нажатий этих клавиш: F1 — F2 — F3 — F4 — F5- F6- F7 — F8 — Help}; Edit}; Name}; Abs}; Goto}; Wind}; Query}; Table}; F9 — {Сак}; F10 — {Graph}; ¦< -*• — t - 1 -1 [Left} < {BS} Right} Ins — {Ins} Up} Del — {Del} Down} Home — {Home} End — {End[ PgUp - {PgUp} PgDn — {PgDn} Знак тильда ~ используется для записи нажатия клавиши «ВВОД». Последовательность клавиш {?} будет? означать паузу во время исполнения макроса. 2. Используя команду Range Name Create или Range Name Labels, необходимо присвоить одно из следующих имен первой ячейке, содержащей макрос, то есть\А,\В, и т. д. По этому имени и будет вызываться макрос на выполнение. Например, если предыдущему макросу присвоено имя\А, то нажатием клавиш ALT и А будет загружена таблица plan.wks. Необходимо отметить, что макрос с именем \0 называется автоматически выполняемым. Он вызывается только после выполнения в интерактивном режиме команды загрузки таблицы, разумеется в том случае, если он в этой таблице определен. Помимо автоматического выполнения макросов предусмотрен режим пошагового выполнения, который вызывается клавишами ALT и F1. В этом режиме необходимо после выполнения очередной команды «подталкивать» макрос нажатием клавиши (ВВОД). Как видно, макросы Lotus сильно напоминают командные файлы Supercalc-З, однако они обладают замечательным свойством. Оно заключается в том, что в макросы можно включать дополнительные, не видимые в интерактивном режиме команды, называемые икс-командами (/Х-команды). Икс-команды являются, по существу, специальными командами программирования, т. е. можно говорить, что составление макросов превращается в написание программ на собственном языке программирования системы Lotus. Этот язык, хотя и очень простой (всего предусмотрено 157
восемь /Х-команд), достаточно своеобразен и может быть отнесен к средо-ориентированным языкам, поскольку он жестко привязан к таблице и оперирует только табличным понятием — место. Место — это или адрес ячейки, или имя блока. Рекомендуется пользоваться именами блоков, так как программа 1-2-3 автоматически преобразует адреса ячеек В имена, если они заданы, при выполнении команд Move, Insert и Delete. Приведем все /Х-команды: /XG(MecTo>~ — переход в указанное <место> и продолжение выполнения макроса (безусловный переход); /ХС<место)~ — продолжить выполнение макроса в указанном (месте), однако отметить выход и, когда встретится команда /XR, вернуться в отмеченную точку после команды /ХС (переход в «подпрограмму»); /XR — возврат из организованного предыдущей командой перехода в «подпрограмму» и продолжение макроса с указанной точки; /Х1(формула)~ — если (формула) истинна (ненулевое значение), продолжить выполнение макроса в этой же ячейке, в противном случае переход в нижнюю ячейку; /ХЬ(сообщение)~ (место)" — вывести (сообщение) на второй строке, сделать паузу для ввода метки и поместить введенную метку в указанное (место); /ХИ(сообщение)~, (место)" — вывести (сообщение) на второй строке^ сделать паузу для ввода числа и поместить введенное число в указанное (место); /ХМ(место)" — построить пользовательское меню, сделать паузу для выбора требуемой функции и продолжить выполнение макроса с выбранной ветви (место указывает на координаты левого верхнего угла кадра меню); /XQ — конец макроса и возвращение к управлению с клавиатуры. С помощью даже этого небольшого набора команд возможна организация достаточно современного диалога с конечным пользователем. Работа в системе Lotus выполняется в несколько этапов. На первом этапе устанавливаются параметры таблицы и ячеек. Затем таблица заполняется постоянной информацией, вносятся формулы и т. д. Постоянную информацию целесообразно защищать от случайного уни- 158
чтожения. На последнем этапе проектируются макросы* обеспечивающие решение конкретной задачи. Режим File-Manager. Этот режим выбирается для выхода в систему управления файлами, которая, по существу, является аналогичной системе, имеющейся в операционной системе. Отличительная черта этой си- стемы в Lotus — управление файлами происходит по* средством командного меню. Выбор этого режима прийо- дит к появлению сообщения о смене диска А на диск UTILITY в том же дисководе. После установки требуемого диска и нажатия клавиши «ВВОД» Lotus предлагает выбрать исходный дисковод: А В С D Е (и т. д., если операционная система определяет большее число логических устройств). Выбор осуществляется с помощью клавиш ->, ¦<-, после чего на экране появляется список всех файлов на выбранном диске и система предлагает выбрать команду из следующего перечня: Сору — копирование выбранных файлов; Erase — удаление выбранных файлов с текущего диска; Rename — переименование файла в текущем директории; Archive — архивная копия файла под новым именем на текущем диске; Disk-drive — изменение текущего дисковода; Sort — сортировка файлов в директории; Quit — возврат в главное меню. После выбора команд Copy, Erase, Rename, Archive необходимо отметить файлы для обработки. При нажатии клавиши «Пробел» (Space) выполняется отметка файла знаком #, как выбранного для обработки. При нажатии клавиши «ВВОД» команда выполняется, при нажатии ESC осуществляется выход в режим выбора команд (функция File-Manager). Функция Disk-drive состоит в смене текущего дисковода: А В С D Е ... Функция Sort позволяет выбрать ключи для сортировки списка файлов в директории по двум ключам, восстановить стандартное расположение, запустить сортировку и вернуться в меню выбора команд. При этом в качестве ключа предлагается выбрать: имя файла; расширение; дату создания и время; размер файла, а затем указать признак сортировки — возрастание или убывание. Режим Disk-Manager. Режим предназначен для обслуживания дисков посредством командного меню. Следуечг 159
отметить, что для работы в этом режиме необходимо иметь на жестком диске или на диске UTILITY системные утилиты DISKCOPY, DISKCOMP и FORMAT. Командное меню предлагает следующие функции: Disk-Copy — копирование диска; Compare — сравнение дисков; Prepare — подготовка нового диска (в дисководе В); Status — информация по диску; Quit — возврат в главное меню. Режим Print Graph. Предназначен для печати графиков, подготовленных в режиме 1-2-3 и записанных на диск. Следует отметить, что на ПЭВМ, не оснащенных графическим адаптером, подготовить и распечатать графики, можно так сказать, «вслепую», поскольку при попытке вывести их на экран будет дано сообщение, что ПЭВМ не оснащена графическим дисплеем. Напротив, в Supercalc-З, использующем режим псевдографики, возможно получение изображений и на экране. Работа в этом режиме организуется также с помощью меню команд, предлагающего широкий набор средств для построения различных графиков, выбора гарнитуры шрифтов. Предусмотрена возможность работы со всеми распространенными типами принтеров. Режим Translate. Этот режим предназначен для создания информационной совместимости файлов, созданных разными программными средствами. Предлагается выбрать один из режимов (работа ведется также с помощью меню): VC to WKS — VisiCalc в Lotus; DIF to WKS — с разделителями в Lotus; KSW to DIF — Lotus в файлы с разделителями; DBF to WKS — DBASE-II в Lotus; WKS to DBF —Lotus в DBASE-II. Допускается перевод в другой формат не только Lotus-табличного файла целиком, но и поименованного диапазона ячеек. Режим Exit. По режиму Exit осуществляется выход из системы Lotus в операционную систему. При этом выход в ОС завершается нормально при наличии на диске файла COMMAND. COM. Мы рассмотрели работу с версией 1А. В следующей версии 2.0 Lotus расширен состав интерактивных команд и команд программирования, предусмотрена возможность работы с расширенной памятью. 160
6.4. Symphony Интегрированный пакет Symphony занимает в зависимости от набора предоставляемых средств от 320 до 390 Кбайт оперативной памяти и располагается на следующих дискетах: SYSTEM — система Symphony; UTILITY — утилиты; PRINTGRAPH — программы печати графиков; TUTOR — самоучитель по системе; HELP — файлы помощи. Система Symphony может быть настроена для работы на ПЭВМ, не оснащенных жестким диском. В этом случае при загрузке пользователь должен выполнять соответствующие указания системы о замене дисков. Установка дисков производится только в дисковод А. Помимо возможностей, имеющихся в Lotus, Symphony предлагает пользователю средства телекоммуникации, текстовый редактор, мощный макроязык для разработки командных файлов, многооконный интерфейс. Начиная с версии 1.1, предусмотрена работа с расширенной памятью и арифметическим сопроцессором. Возможен выход в операционную систему для выполнения каких-либо действий, а затем возврат в Symphony без изменений, связанных с выходом в ОС. Ключевым понятием системы Symphony является среда — environment, которая отражает различный взгляд на форму представления информации. Имеется пять типов сред: DOC — текст; SHEET — таблица; GRAPH — график; FORM — форма; СОММ — телекоммуникационное окно. Тем не менее, основным информационным объектом Symphony остается привычная электронная таблица в отличие, например, от системы Framework, где вводится новое понятие универсального носителя информации — фрейма. Объем таблицы возрос до 8192 строк при 256 столбцах. Все команды и операторы Symphony обрабатывают информацию, расположенную в таблице, табличных файлах определенного формата, в табличных окнах и т. д. Необходимо отметить, что различные средства Symphony по-разному интерпретируют электронную таблицу в памяти. Так, например, текстовый редактор воспринимает таблицу как текстовую среду, в которой производятся набор и редактирование текста. Координатная сетка в этом случае заменяется на шапку, в которой фикси- 8 Смирнов Н. Н. 161
руется местоположение курсора по строкам и колонкам. Передвижение курсора выполняется с шагом один символ в строке. Средства работы с базой данных рассматривают таблицу как совокупность записей (каждая строка — запись), в которых полями записи являются колонки таблицы. При этом вводится понятие формы, через которую эти записи просматриваются. Работа с Symphony начинается с инсталяции системы. В процессе инсталяции создается специальный файл, содержащий набор драйверов внешних устройств ПЭВМ — видеотерминала, клавиатуры, печати, модема и т. д. Инсталяция выполняется программой INSTALL.EXE, которая в диалоговом режиме предоставляет пользователю выбрать подходящие для данной конфигурации ПЭВМ драйверы из библиотеки драйверов MASTER.LBR. Отметим, что существует возможность включения собственных, специально созданных драйверов устройств, не описанных в библиотеке Symphony. Выбранные драйверы записываются в файл с любым именем. По умолчанию создается файл LOTUS.SET. Если вы создали набор драйверов с другим именем, то его необходимо указывать как параметр командной строки каждый раз при запуске системы. В случае отсутствия «винчестера» созданный файл должен быть записан на каждый из дисков системы Symphony. Запуск системы. Вызов системы может быть выполнен двумя способами: A>ACCESS A>SYMPHONY Первый способ позволяет вызвать программу ACCESS (выбор) — главное меню Symphony, которое предложит для выбора следующие основные функции: Symphony (собственно система Symphony); Tutorial (самоучитель); PrintGraph (программа печати графиков); Install (процедуры инсталяции); Translate (утилиты преобразования файлов); Exit (выход из программы). Второй способ позволяет непосредственно вызвать систему Symphony. Отметим, что аналогично могут быть вызваны и остальные функциональные модули системы. Для выполнения команд системы в интерактивном режиме необходимо нажать клавиши F9 и/или F10, а затем с помощью клавиш ->, •*- выбрать команду для выполнения. В верхней строке появляется следующее меню, 162
процесс повторяется до тех пор, пока пользователь не определит все параметры выбранной команды. Команды системы Symphony. При нажатии клавиши F9 на верхней строке экрана появляется меню, которое содержит следующие общие для всех сред Symphony команды: Window — модификация текущего окна или использование другого; File — обмен данными между оперативной и дисковой памятью; Print — вывод данных; Configuration — конфигурация системы, т. е. установка значений основных параметров по умолчанию и общих процедур; Application — работа с дополнительными (add- in) программами Symphony; Settings — выбор и установка глобальных параметров таблицы; New — стирание содержимого и установка глобальных параметров таблицы; Exit — выход из системы. Список команд, предлагаемых по нажатию клавиши F10, зависит от того, в какой среде находится пользователь, т. е. от типа текущего окна, задаваемого командой Window Settings Type. Тип текущего окна инверсно отображается в правом верхнем углу экрана. Например, в режиме SHEET (таблица) при нажатии клавиши F9 предлагаются следующие команды для работы с таблицей: Сору — копирование диапазона ячеек; Move — перенос содержимого диапазона ячеек; Erase — очистка диапазона ячеек; Insert — вставка столбцов или строк; Delete — удаление столбцов или строк; Width — установка текущей ширины столбца ячеек; Format — установка формата отображения содержимого диапазона ячеек; Range — дополнительные команды работы с диапазонами ячеек; Graph — определение и построение графиков; Query — операторы таблично-ориентированной базы данных; Settings — установка параметров пересчета и отображения таблицы. Выбор команд из меню выполняется клавишами ->-, <- или указанием первой буквы команды. Большая часть команд является групповыми командами, объединяющими несколько команд, предлагающих выполнение определенных действий в рамках групповой команды. Например, команда File фактически предлагает выполнение следующих команд: Save — сохранение текущей таблицы в табличном файле на диске; Retrieve — загрузка таблицы из табличного файла на диске в память; Combine — включение части или целой таблицы из табличного файла на диске в текущую таблицу; Xtract — сохра- 8* 163
нение части текущей таблицы в табличном файле; Erase —* удаление файлов; Bytes — определение объема свободной дисковой памяти; List — отображение списка файлов в текущем директории; Table — включение системной информации о файлах в текущую таблицу; Import —¦ включение содержимого текстового файла в текущую таблицу; Directory — установка текущего директория. Некоторые групповые команды предлагают выбрать определенные команды в связи с предполагаемым использованием системы Symphony. Так, выбор одной из пяти возможных форм представления информации осуществляется по команде Window Settings, а создание требуемых для отображения информации окон — по команде Window Create. Как видно, в этой части пакета, которую можно назвать средствами конечного пользователя, работа с Symphony не должна — и это подтверждает практика — вызывать каких-либо затруднений. Если же Вы хотите использовать Symphony не индивидуально, а как инструмент для создания самостоятельного коммерческого программного средства, потребуется знакомство с правилами организации макросов. Макросы в системе Symphony. В Symphony аналогично Lotus можно записывать последовательности нажатий клавиш. Однако состав дополнительных команд (подобных Х-командам Lotus), а также ключевых слов существенно расширен. Введен и совершенно новый режим — Learn — обучение, с помощью которого можно последовательность нажатий клавиш автоматически помещать в указанный диапазон таблицы. Для записей макросов в отдельные файлы на диске и создания библиотеки макросов предусмотрена программа MacroManager. В макросах Symphony наименования клавиш имеют отличия по сравнению с Lotus, поэтому есть смысл привести весь перечень используемых наименований. ABS} — F3 BACKSPACE} или {BS} —Backspace BIGLEFT} — Ctrl+Left JBIGRIGHT} — Ctrl+Right {BREAK} — Ctrl+Break CALC} . — F8 CAPTURE} — F4 CENTER} — AU+F4 164
DELETE} DOWN I DRAW} EDIT} END} ERASE} ESCAPE} или {ESC} {GOTO} HELP} HOME} INDENT} INSERT} JUSTIFY} LEFT} MENU} или {М} PGDN} или {BIGDOWN} {PGUP} или {BIGUP} RIGHT} SERVICES} или {S} SPLIT} SWITCH} TAB} TYPE} UP} USER} (WHERE} WINDOW} ZOOM} — Del — Down (стрелка вверх) — AU+F8 — F2 — End — F4 — Esc (КЛЮЧ) — F5 — Fl — Home — F3 — Ins — F2 — Left (стрелка влево) — F10 PgDn -PgUp — Right (стрелка вправо) — F9 — AK+F3 — AH+F9 — Tab — Alt+FlO — Up (стрелка вниз) — F7 — AU+F2 — F6 — AH+F6 — Enter (ВВОД) Отметим также, что имена диапазонов ячеек, содержащих макросы (имена макросов), не обязательно должны начинаться с обратного слэша («\»), а могут быть любыми идентификаторами. В этом случае они вызываются нажатием клавиши F7 ([USER ]) с последующим набором имени. Кроме того, имена макросов могут иметь и такой вид: \0, \1, \2 и т. д. Например, для вызова макроса с именем \9 необходимо нажать клавишу F7, а затем F9. Мнемонические имена макросов используются для вызова макроса из другого макроса, т. е. для написания макроподпрограмм. Например, если мы хотим вызвать макрос с именем JOHN из другого макроса, то мы должны заключить это имя в фигурные скобки, т. е. написать {JOHN}. 165
Командный язык Symphony содержит ключевые слова или дополнительные команды, с помощью которых можно строить предложения. Синтаксис: [ключевое слово] или [ключевое слово аргумент 1, аргумент 2, ..., аргумент п]. Разделителем между ключевым словом и первым аргументом служит пробел, аргументы разделяются запятыми. Следует сказать, что разделители можно средствами Symphony переопределить. Допускаются три типа аргументов: NUMBER ((число)) — число или числовое выражение; STRING ((строка)) — любая строка символов, если в строку входит разделитель аргументов, то строка помещается в двойные кавычки; LOCATION ((место)) — адрес ячейки или имя диапазона, если имя содержит разделитель аргументов, то необходимо использовать двойные кавычки (" "). Пример указания типа аргумента: {LET A1, 12+13 : STRING}—метка 12+13 помещается в ячейку А1. Указывать тип необязательно, так как Symphony использует нужный тип по умолчанию. Так, при задании {LET А1, 12+13} число 25 помещается в ячейку А1. При записи ключевых слов регистр не имеет значения. Приведем описание ключевых слов. Квадратные скобки означают, что аргумент не обязателен: {ВЕЕР} — звуковой сигнал; {BLANK (место)}—стирает содержимое указанной ячейки или диапазона ячеек; {BRANCH (место)} — продолжение выполнения макроса с указанного (места) — безусловный переход; {BREAKOFF} —отменяет использование ключа [BREAK] (Ctrl+Break) для прерывания выполнения макроса; отмена сохраняется после окончания выполнения макроса до тех пор, пока не будет выполнен {BREA- KON}; {BREAKON} — разрешает использование ключа [BREAK] для прерывания макроса; {CLOSE} —закрывает файл, открытый {OPEN}; {CONTENTS (место 1), (место2), [значность], [формат]} — помещает содержимое (место2) в (место 1) с заданными (если указано) значностью и форматом (допустимые форматы: 0 ... 15 — фиксированный; 16 ... 31 — научный; 32 ... 47 — денежный; 48 ... 63 — процентный; 64 ... 79 — формат с разделителем; 112 1- /—; 113 — 166
общий; 114 — ДД—ММ—ГГ; 115 — ДД—ММ; 116 — ММ—ГГ; 117 — символьный; 118 — скрытый; 119 — ЧЧ:ММ г СС; 120 — ЧЧ : ММ; 121 — полная международная дата; 122 — частичная международная дата; 123 — полное международное время; 124 — частичное международное время; 125 — общий); {DEFINE ячейка 1: тип 1, ячейка 2: тип 2, ... ячейка п; тип п} — определяет ячейки для хранения аргументов, указываемых при вызове макроподпрограммы; должна быть первой командой в макроподпрограмме; тип — либо NUMBER, либо STRING; по умолчанию — STRING. {DISPATCH (место)} — переход в указанное место; {FOR (рабочее место), (число 1), (число 2), (число 3), (макрос-место)} — предложение, организующее цикл, выполняет команды в указанном (макрос-месте) столько раз, сколько указано в (число 1) и (число 2) с шагом (число 3), счетчик цикла отображается в (рабочем месте); {FORBREAK} — немедленный выход из цикла с выполнением следующего предложения макроса; {GET (место)}—ожидает нажатия клавиши и помещает введенный символ или имя ключа в указанное (место); {GETLABEL (строка-подсказка), (место)} —отображает на контрольной панели (строку-подсказку) и ожидает ввода метки, после нажатия клавиши ВВОД помещает метку в (место); {GETNUMBER (строка-подсказка), (место)} — выполняет аналогичные предыдущему предложению функции, но ожидает ввода числа, которое помещает в указанное (место); {GETPOS (место)} — записывает текущую позицию указателя в заданное (место); {HANDSHAKE (посылаемая строка), (получаемая строка), (время ответа), [(место ответа)]} — автоматический диалог с удаленной ПЭВМ, компьютером: передается (посылаемая строка) и ожидается (получаемая строка) в течение (время ответа), если указано, то (получаемая строка) помещается в (место ответа); {IF (логическое выражение)} —если (логическое выражение) истинно, то выполняется инструкция справа от данного предложения, в противном случае макрос продолжается в нижней ячейке; {INDICATE [(строка)]} — восстанавливает индикатор режима на контрольной панели или устанавливает 167
его равным указанной (строке), максимальный размер (строки) — пять символов; {LET (место), (значение)} — помещает (значение) в указанное (место); (LET (место), (строка)} — помещает (строку) в указанное (место), при этом строка может быть строковым выражением; (LOOK (место)} — просматривает буфер нажатия клавиш, если буфер не пустой, то помещает в (место), в противном случае очищает (место); {MENUBRANCH (место)}—строит пользовательское меню в указанном (месте), меню строится в диапазоне, состоящем из двух строк и не более восьми колонок, первая строка содержит пункты меню, вторая — соответствующие им строки-подсказки; столбцы ячеек под каждой подсказкой содержат макроинструкции, которые будут выполняться в соответствии с выбором пользователя; {MENUCALL (место)} — аналогична {MENU- BRANCH}, однако после выполнения инструкций после подсказки продолжает выполнения макроса, после {MENUCALL} — предложения; {ONERROR (место-переход), [(место-сообщение)] — предписывает, в случае ошибки, переход в указанное (место-пере ход) с сохранением, если указано, сообщения об ошибке в (место-сообщение); {OPEN (имя-файла), (режим-доступа)} — открывает файл для чтения, записи или чтения и записи; {PANELOFF} —отменяет отображение контрольной панели при выполнении макроса; {PANELON}—отображает контрольную панель при выполнении макроса; {PHONE (строка-номер)} — вызов по указанному номеру через модем, (строка-номер) может быть выражением; {PUT (место), (номер-столбца), (номер-строки), (значение)} или {PUT (место), (номер-столбца), (номер- строки), (строка)} — помещает значение выражения или строку в указанное (место) по адресу, определяемому по (нсмеру-столбца) и (номеру-строки) (отсчет ведется от 0); {READ (число-байтов), (место)}—копирует указанное число символов из открытого файла в (место) рабочей таблицы; 168
{READLN (место)} — копирует строку из открытого файла в указанное (место) таблицы; {RECALC (место)( — построчный пересчет формул в указанном диапазоне; {RECALCCOL (место)} — постолбцовый пересчет формул в указанном диапазоне; {RESTART} — прерывает подпрограмму и очищает стек подпрограммы; {RETURN} — возврат из макроподпрограммы; {SETPOS (позиция в файле)} — устанавливает новую позицию указателя в текущем открытом файле; {WAIT (число-время)}—ожидает ответа в течение указанного времени; {WINDOWSOFF}—отменяет постоянный возврат к текущему окну при обработке данных в рабочей таблице; {WINDOWSON} — постоянно возвращает отображение текущего окна при обработке данных в рабочей таблице; {WRITE} — копирует символы в открытый файл; {WRITELN}—добавляет символ конца строки в указанной строке символов и записывает строку в открытый файл; {?} — временно приостанавливает выполнение макроса, позволяя пользователю набирать и двигаться вокруг. Макрос продолжает выполняться после нажатия пользователем клавиши «RETURN» («ВВОД»). Работу в системе Symphony рассмотрим на примере построения двухуровневого меню (рис. 6.1). После вызова программы на экране в двух строках контрольной панели появляются меню (третья строка), необходимые пояснения помещаются во вторую строку: 2 3 ЗАПОЛНЕНИЕ БАЗЫ ДАННЫХ ОТЧЕТЫ ВЫХОД «тело» таблицы При передвижении активной клетки по меню выбранный режим выделяется цветом (здесь «жирным» шрифтом): 2 Подготовка выходных форм 3 ЗАПОЛНЕНИЕ БАЗЫ ДАННЫХ ОТЧЕТЫ ВЫХОД или: 2 Выход из системы ДА/НЕТ 3 ЗАПОЛНЕНИЕ БАЗЫ ДАННЫХ ОТЧЕТЫ ВЫХОД 169
I УРОВЕНЬ [ЗАПОЛНЕНИЕ БАЗЫ ДАННЫХ Л УРОВЕНЬ L ДОХОДЫ \ РАСХОДЫ выход ОТЧЕТЫ Подготовка выходных форм Отчеты по доходам |—| Отчеты по расходам ВЫХОД {выход из системы Г ДА/НЕТ 1 U Да 1 Запись и выход в ОС Нет 1 выход в меню Н Печать документод\ Выход в меню (I уровень) Возможный уровня меню: {menubranch menul Рис. 6.1 вариант организации программы этого построение меню в месте, имеющем имя MENU1; окончание макроса. ВЫХОД Выход из системы {menubranch menue} {quit} В MENU1 помещается следующий текст: ЗАПОЛНЕНИЕ БД ОТЧЕТЫ {menubranch menuf} Подготовка выходных форм {menubranch menuot} После выбора требуемого режима по нажатию клавиши «ВВОД» выполняется последовательность команд, начиная с 3-й строки диапазона MENU1. Рассмотрим еще программу организации меню, реализующую режим ВЫХОД. Этот уровень организован командой (\menubranch menue}. В MENUE помещается: ДА Запись и выход в ОС {s} wumain~ {s} fs~y {s}ey {quit} На экране появляется: Запись и выход в ОС или ДА НЕТ 170 НЕТ Выход в меню {menubranch menul} Выход в меню ДА НЕТ
При выборе пункта <ДА> выполняется последовательность макро-команд: {s| wumain~-SERVICE WINDOW USE MAIN (ВВОД), где \s\ — вызов меню SERVICE; wumain~ — использование окна с именем main; |s}fs~y — SERVICE FILE SAVE (ВВОД) YES — запись текущего состояния данных таблицы в файл; |s}ey — SERVICE EXIT YES — выход из SYMPHONY. При выборе (НЕТ) — вызов меню первого уровня по команде {menubranch menul}. Изучение возможностей и средств системы Symphony целесообразно проводить в следующей последовательности: электронная таблица; текстовый редактор; деловая графика; многооконный интерфейс; управление базой данных; разработка макросов с помощью командного языка; средства телекоммуникации. Счастливая судьба рассмотренных пакетов (каждый из них имеет свыше миллиона продаж) привлекает к ним внимание и профессиональных программистов, которые в разрабатываемых программных средствах предусматривают интерфейсы с этими пакетами. Можно сказать, что наличие интерфейса с каким-либо или даже несколькими из рассмотренных пакетов является одним из важнейших показателей качества программного продукта и всегда указывается в аннотации к нему,
Глава 7. ОРГАНИЗАЦИЯ ДИАЛОГА С КОНЕЧНЫМ ПОЛЬЗОВАТЕЛЕМ 7.1. Требования к организации диалога с конечным пользователем Быстро расширяющиеся области применения персональных ЭВМ стимулируют прикладную информатику к созданию все более сложных информационных моделей и вычислительных систем. Традиционно к вычислительным системам предъявляются следующие основные требования [9]: надежность функционирования, тиражируемость, расширяемость, функциональная полнота, универсальность и адаптируемость. Конечно, надежность программного продукта, на первый взгляд, является основным требованием. В самом деле, ненадежно работающая программа, т.е. программа с ошибками, едва ли найдет широкое применение. Хочется, однако, выразиться сильнее: программа с ошибками — это не программа. Ее нужно отлаживать и отлаживать, прежде чем можно будет назвать программой. Программисты еще с «эры» программирования в машинных кодах с физическими адресами команд придумали себе для облегчения жизни афоризм: каждая программа содержит пока не обнаруженную ошибку. Из этого следовало заключение, что программ без ошибок вообще не существует и не может никогда существовать. Эта широко бытующая, по крайней мере среди отечественных программистов, крылатая фраза высоко нас не вознесла: достаточно сопоставить объемы каталогов программных средств, выпускаемых, например, в США одной фирмой IBM, насчитывающей тысячи программных средств, с каталогом программных средств Государственного фонда алгоритмов и программ, поддерживаемого объединением Центрпрограммсистем (г. Калинин), в котором наберется десяток-второй ПС. А программистов у нас, если осторожно выразиться, не меньше. 172
Поверхностный взгляд на свой труд, нежелание предельно точно отрабатывать все детали и логику программ с последующим их тестированием на всех возможных и невозможных режимах создали целое поколение программистов, которые провели жизнь, так ничего законченного (в профессиональном смысле) и не сделав. Конечно, можно сослаться на то, как несколько лет назад происходила отладка программ: чаще всего пакетный режим, ненадежные бумажные носители и устройства ввода-вывода, сроки, которые «уже прошли», порождали программы-полуфабрикаты. Уместно упомянуть и про отсутствие авторских прав, и про слабое стимулирование разработчиков программ. Хочется надеяться, что новый хозяйственный механизм и ПЭВМ изменят отношение к работе. Потребуется и новый афоризм. Построить его не сложно. Первое утверждение: машина никогда не ошибается. С этим не следует спорить: ПЭВМ или работает, или не работает, третьего не дано, поскольку мощные средства самотестирования без труда определяют работоспособность всех ее устройств. Следующее утверждение, надеюсь интуитивно не вызывающее сомнений, станет базой индукции. Оно формулируется так: можно безошибочно написать работающую программу, состоящую из одной команды. Используя эту базу, путем индукционного перехода мы убеждаемся в том, что можно безошибочно написать программу любого объема, работающую без ошибок. Принципиальное отличие сформулированного оптимистического афоризма от фатального взгляда на программы прошлых лет, казалось бы, перечеркивает саму возможность рассмотрения в философском смысле программ как произведений искусства, поскольку безошибочно работающая программа, как абсолютная истина, не допускает дальнейшего совершенствования. Но это не так. Если провести простую аналогию в области техники, то нельзя назвать самолетом устройство, которое через раз взлетает и через раз приземляется. Нельзя также считать атомной электростанцией сооружение, которое может взорваться в любую минуту. Эта аналогия не столь далека, поскольку вся сколько-нибудь сложная техника в настоящее время проектируется, создается и управляется с помощью ЭВМ, т. е. в конечном счете программами. Чтобы закончить это обсуждение и перейти к изло- 173
жению понятия диалога с конечным пользователем, можно предложить читателю следующий тест. Напишите блок-схему программы, которая если ввести единицу, превращает ее в двойку, а если ввести О, то — в единицу. Написали? Давайте сверим ответы. начало ввод а а = а+1 вывод а конец Программа работает? Работает, конечно, но до тех пор, пока на вход подаются нули или единицы. Если Вы предусмотрели проверку исходных данных — это очень хорошо. Вариант примерно такой: начало ввод а если а не равно 0 и а не равно 1, то выдать сообщение- «ошибка в исходных данных» перейти в начало; иначе а=а+1 вывод а конец Стало немного лучше. И раньше этим можно было бы ограничиться. Кстати, фирма IBM использует этот тест при приеме на работу начинающих программистов. Последний ответ считается достаточным. Однако предположим, что эта программа или чужая, или давно Вами забытая. Много ли информации даст короткое сообщение об обнаруженной ошибке? Для систем, ориентированных на конечного пользователя, принципиальной является организация выдачи полной информации о процессе решения задачи, поэтому фраза об ошибке должна выглядеть как действенная помощь, например так: «Вы работаете с программой, которая преобразовывает нули в единицы, а единицы — в двойки. Желаем удачи!» Этот вариант вроде бы не плох. Однако он также не страхует от, по крайней мере первой, ошибки. Не программы — тут стало все надежно, а от ошибки со стороны оператора. Избавим пользователя от первой ошибки. Для этого текст помощи поместим сразу после загрузки 174
программы, при этом проверку на возможную ошибку оператора, разумеется, все равно оставляем: начало М: [помощь] ввод а если а не равно 0 и а не равно 1, то на М; иначе а = а+1 вывод а конец Вариант кажется убедительным. Но клавиши «О» и «1» надо еще найти на клавиатуре, что требует повышенного внимания, кроме того, если Вы давно работаете с программой, то помощь, которую Вам будет услужливо предлагать машина при любой вашей ошибке, покажется раздражающе назойливой. И наконец, Вы никак визуально не контролируете, что ввели. Конечно, эта программка даст результат так быстро, что палец еще останется на клавише. Однако если программа управляет чем-то важным, хотелось бы до конца понимать, что происходит в системе. Постараемся до минимума снизить вероятность сбоя проектируемой человекомашинной системы, для чего избавимся от выявленных недостатков. Будем рассуждать так. Поскольку программа ничего кроме нулей и единиц не обрабатывает, оставим за пользователем возможность нажимать только две клавиши, причем, так как клавиши «О» и «Ь расположены неудобно, откажемся от них вообще. Далее, вызов необходимой помощи организуем лишь по желанию пользователя. И последнее — будем оставлять на экране введенную пользователем цифру. Описание такой блок-схемы удобнее выполнить, используя эскиз помещаемого на дисплей после загрузки программы кадра (рис. 7.1). Используя знания о реальном процессе, проходящем вне рассматриваемой задачи, можно еще немного улучшить модель. Пусть нам известно, что, например, «О» выбирают чаще, тогда после загрузки программы окно с нулем сразу сделаем активным — курсор помещается в это окно, что отображается более ярким цветом. Для подтверждения выбора будем использовать клавишу «ВВОД», для переходов между «О» и «1» — клавишу пробел. Помощь — по клавише F1. Нажатие всех остальных клавиш или их 175
Рис. 7.1 комбинаций может сопровождаться звуковым сигналом. После выбора нужной цифры полученный результат решения помещается в отведенное окно, при этом выбранная цифра остается на экране. Итак, мы избавились от всех отмеченных недостатков. На этом небольшом примере удалось продемонстрировать современный стиль организации диалога с конечным пользователем. Как видно, собственно программа как блок вычислений заняла весьма незначительное место. Быть может некоторым нетерпеливым читателям покажется, что проблема надумана и попросту «раздута» автором из ничего, точнее из ничего и единицы. Постараемся показать, что это не так. Изменим начальные условия задачи. Пусть требуется написать программу, которая текст верхнего абзаца этой страницы (в условиях первой задачи это было нулем) преобразовывает в единицу, а текст нижнего абзаца (бывшая единица) — в двойку. Понятно, что если этой программой будут пользоваться тысячи раз и если текст этой страницы сам по себе меняться не будет, то ясно, что все варианга программ, кроме последнего, окажутся для конечного пользователя не очень удобными в работе, вернее сказать, это будет не работа, а мучение. В последнем же примере в окна, предусмотренные для нуля и единицы, мы вольны помещать, в общем-то, все, что угодно: имена файлов, числа, текст и даже графику. Это типичный пример многооконного интерфейса 17G
с конечным пользователем, средства для организации которого сейчас активно разрабатываются. Такой широкий взгляд «в окно», думается, скоро позволит рассматривать окна как равноправные с файлами основные информационные объекты ПЭВМ. Постоянно совершенствуясь, ПЭВМ дают сильный толчок в этом направлении. Еще одним мощным фактором является создание «интеллектуальных» внешних устройств, а также работы по созданию искусственного интеллекта, где вопросы диалога, накопления опыта и совершенствования стоят на первом месте. В настоящее время отчетливо проявилась тенденция представлять работу программ, а иногда и целых систем в виде совокупности специфических, статически размещаемых данных или данных специального вида. И многие проблемы, возникающие при создании сложных программных систем, действительно удалось решить или упростить таким образом. Современные программные средства персональных ЭВМ ярко иллюстрируют эту тенденцию. В качестве другой иллюстрации можно привести пример развития языков программирования и операционных систем как средств общения с машиной. Некоторые разработчики пытаются представить весь вычислительный процесс, а также вмешательство человека в ход работы, как действия с теми или иными данными специального вида. К сожалению, не все проблемы пока удалось решить таким образом, но все же этот подход представляется интересным. Существуют различные взгляды на то, что следует включать в понятие диалога с конечным пользователем. Если в широком смысле рассматривать функции, реализуемые диалогом, то можно выделить две группы: управления данными, управления процессами. В соответствии с этим делением можно, условно конечно, поскольку границы между группами меняются по мере развития аппаратно-программных средств, перечислить функции, реализуемые в группах. Функции первой группы: описание способа представления данных и их взаимосвязи; защита от несанкционированного доступа; преобразование данных из различных форм представления; операции над данными. Функции второй группы! контроль состояния процессов; контроль состояния всей вычислительной системы и правильности взаимодействия процессов; обеспечение 177
надежности функционирования как отдельных процессов, так и всей системы; адаптация, совершенствование, развитие системы. Организовать диалог управления данными можно, используя ранее рассмотренные программные средства. Разработка диалога управления процессами осуществляется с помощью специальных средств: файловых систем для организации обмена данными с ВУ и преобразования данных в ОЗУ; утилит для работы с программными данными (системными и проблемными); языковых средств, предоставляющих возможность, например, работать с экраном дисплея как с двух- или трехмерным массивом, обмениваться событиями так же, как и данными, работать с системой прерывания как с таблицей; ОС, дающих возможность отобразить состояние вычислительного процесса как набор специальных данных. На основе этих средств строятся системы, специально ориентированные на реализацию диалога управления данными, т. е. СУБД, табличные процессоры, интегрированные программные средства и т. п. Разработка таких систем основывается на том, что первоначально строится информационная модель, отображающая состояние статических данных, ВУ, процессов взаимодействия программ, состояние вычислительного процесса, состояние обмена событиями между процессами или человеком, состояние потоков данных. Эта модель имеет свое отображение в памяти ЭВМ. Для контроля со стороны пользователя и управления состоянием достаточно иметь возможность доступа к этим специального вида данным. Такие диалоги приходилось строить ранее в системах реального времени и иногда в интерактивных системах. Наиболее удачными оказались системы, построенные по принципу распределенного управления. В частности, диалог рассматривался в них как равноправный с остальными процесс со своими средствами внутреннего управления и общими для всех процессов средствами взаимодействия. Эта простая идея равноправия процессов и позволяет диалогу адекватно отражать состояние всего процесса. Если точнее, в этих системах всем подсистемам дается равный доступ к ресурсам системы и средствам управления. Наиболее сложными в этих разработках оказались вопросы организации интерфейса между процессами, 178
а также создания системных средств поддержки устойчивости процессов обмена информацией. Примером «прозрачного» и достаточно полного решения этой проблемы является разработанная известной фирмой AT & Т операционная система UNIX [16], в которой учитываются рекомендации Международного консультативного комитета телеграфии и телефонии (International Telegraph and Telephone Consultative Committee — CCITT). Эти рекомендации,, являющиеся международным стандартом, содержат также и стандарты на диалоговые системы и диалоговую оболочку. Сравнивая возможности ПЭВМ разных поколений, можно легко обнаружить тенденцию постепенной передачи функций отображения состояния вычислительного процесса аппаратным средствам. Одновременно с этим новые версии операционных систем предоставляют проблемным разработчикам все более широкий набор программных средств для работы с внешними устройствами (стандартные драйверы и наборы подпрограмм обработки прерываний ввода—вывода, средства управления ходом вычислительного процесса, в том числе для работы с системой или векторами прерываний, обмена событиями и т. д.). При этом разработчики имеют возможность присоединять или заменять драйверы на свои, задавать и по-своему отрабатывать некоторые события в ходе вычислительного процесса. Все это характеризует стремление к децентрализации функций управления вычислительными процессами. То, что пользователь воспринимает, находясь за пультом ПЭВМ, это не весь диалог, а лишь визуальное (иногда и звуковое) его отображение, поскольку средства для непосредственной поддержки внешнего диалога с конечным пользователем составляют, как правило, лишь незначительную часть программного обеспечения пакета. Остальная, и большая, часть средств управления скрыта от пользователя. Только за счет этого удается сделать диалог простым, наглядным, ориентированным на профессиональные привычки и, конечно, надежным. Будем понимать под термином диалоговая оболочка средства управления процессом диалога, отнесенные к пользователю. Можно отметить ряд признаков, характеризующих современные требования к диалоговым оболочкам. Аппаратные средства ПЭВМ позволяют отображать на экране дисплея и управлять графическим и цветным 179
изображением движущихся объектов различной природы, сложными структурами данных, создавать картину динамики происходящих процессов и простым нажатием клавиш управлять разворачивающимися на экране событиями. Это делает процесс диалога, таким образом, наглядным и естественным. Однако разработчики современных программных средств идут дальше. Сейчас во многие пакеты программ, предназначенные для серьезной работы, зачастую вносятся игровые моменты с целью предоставления пользователю отдыха, если обнаруживается, что участились ошибки, т. е. наступило утомление и ослабло внимание. Важное для всех пользователей качество программного средства, особенно проявляющееся при выполнении сложной или требующей внимания работы, — система помощи и средств обучения, которыми снабжаются практически все современные прикладные пакеты. Эти средства существенно ускоряют как процесс освоения, так и процесс работы. Еще одно свойство современного диалога — простота работы с конкретным пакетом. Это трудно формализуемое понятие включает в себя целый комплекс приемов, делающих работу с новым пакетом узнаваемой и привычной. Для создания пакета, удовлетворяющего этому требованию, разработчику необходимо глубоко изучить выбранную предметную или функциональную область. Проявлением этого свойства является форма организации диалога, используемая в современных программных средствах, отражающая не только специфику данных, с которыми производится работа, но и в ряде случаев учитывающая профессиональную привычку пользователя видеть эти данные в том или ином виде. Поэтому освоение основных функций практически любого пакета программ не должно предполагать специальных знаний, в частности, языков программирования, и должно быть доступно любому пользователю. У каждого современного пакета прикладных программ имеются свои средства для организации диалога с конечным пользователем, при этом единообразие аппаратных средств и определенные сложившиеся традиции позволяют строить диалоги с пользователем формально похожими друг на друга. Это — использование функциональных клавиш для вызова той или иной функции, применение управляющих клавиш или их комбинаций для управления состоянием процесса вычислений, использо- 180
вание переназначения клавиш управления клавиатурой для организации эффективного движения по экрану дисплея, многоэкранный режим работы и целый ряд других приемов, включая использование и специальных устройств типа «мышь» или «джойстик». В настоящее время на отечественных ПЭВМ основным и, можно сказать, единственным средством ведения диалога со стороны пользователя является клавиатура. Приятным исключением является «мышь» по имени «колобок», поставляемая с ПЭВМ серии ЕС, начиная с модели ЕС-1842. В персональных ЭВМ чаще всего используется древовидная модель представления процессов. Точно так же строится и диалог с пользователем. А именно: в начале работы пакета высвечиваются основные возможные ветвления процесса — на экран выводится главное или стартовое меню. Клавишами движения по экрану можно передвинуть курсор к нужной функции и запустить эту ветвь процесса. В ходе выполнения ветки возможны дальнейшие ветвления процесса, которые отображаются определенными кадрами меню. После завершения выбора пользователь получает возможность ввода данных, требуемых для дальнейшего выполнения процесса. Обычно предусматривается возможность движения по дереву не только вниз, но и вверх. Принято отводить клавише «ВВОД» функцию движения вниз по дереву, клавише «КЛЮЧ» — вверх, а клавише «ПРОБЕЛ» — перемещение с ветки на ветку; эти клавиши расположены на одном уровне. Необходимо помнить, что наши абстрактные деревья растут кроной вниз. Можно сказать, что состояние процесса в общем случае представляется точкой на графе и кадром на дисплее. Подсказка- помощь строится так же. В любой момент выполнения программы на экране высвечивается окно с информацией, относящейся именно к этому состоянию работы программы. Если дерево (очень густое и ветвистое), то для быстрого выхода на нужный режим используются и стандартные клавиши управления движением курсора на экране. Таким образом можно получить полную информацию не только о текущем процессе решения задачи, но и об условиях дальнейшего хода работы, вернуться к исходному пункту, затребовать нужную помощь и т. д. без опасения потерять введенные данные и полученные результаты. Практически все процессы можно представить в виде таких деревьев. Существуют и более сложные с виду про- 181
цессы, но и их зачастую удается представить так же, вводя избыточность в описывающий их граф. Не будем останавливаться на этом подробно, так как вопросы исследования графов, деревьев и их преобразований применительно к этой области знаний рассмотрены в теории трансляторов с искусственных языков. Постоянно возрастающие требования к организации диалога с конечным пользователем как основному способу организации работы на ПЭВМ обусловливают, для системного решения этой проблемы, на наш взгляд, использование достижений эргономики и современного дизайна. Если эргономика применительно к конкретному использованию при создании программ находится в начале пути, то для дизайнового оформления диалога и программ как продуктов, поставляемых на рынок, разработаны и широко используются целый ряд пакетов организации машинной графики. Можно назвать хотя бы Story Board. С помощью этих средств можно достаточно быстро подготовить рекламу пакета и демонстрационный макет. Конечно, создание хорошего рабочего сценария и проработка экранов требуют привлечения к их разработкам специалистов-профессионалов. Опыт проектирования систем, ориентированных на зарубежный рынок, показывает, что такая совместная работа легко организуется. Достаточно лишь продемонстрировать художнику возможности, предоставляемые ПЭВМ. После чего прорабатывается сценарий, отражающий основное содержание пакета, и готовятся эскизы экранов. Перевод на машину может выполнить или сам художник, или, если он очень занятый человек, любой программист, наделенный художественными способностями. В этой связи следует, наверное, изменить взгляд на профессиональную подготовку самих программистов- разработчиков, предусмотрев, по крайней мере для интересующихся, занятия, развивающие элементарный художественный вкус. Внешне привлекательное оформление диалога, эффектная реклама не кажутся лишними. В условиях жесткой конкуренции на рынке программных средств очень часто именно выигрышное оформление решает судьбу пакета. Пословица «встречают по одежке ...» будет жить вечно. Убедившись, что проблема организации диалога достаточно сложна, ограничимся рассмотрением только поль- 182
зовательского аспекта, реализация которого потребует конкретного программирования. Полезные рекомендации по организации работ, связанных с созданием крупных программных продуктов, можно найти в [19]. 7.2. Примеры организации диалога Эволюцию диалога с конечным пользователем можно легко проследить, последовательно рассматривая версии известных пакетов, например, Supercalk II для 8-разрядных ПЭВМ, можно сказать, первого поколения. Легко обнаружить несовершенства этих диалогов, так как здесь используется только командный язык. Второе замечание касается организации работы с экраном. Ограниченные возможности первых версий пакетов не позволяют организовать наблюдение за ходом процесса решения задачи — каждый следующий кадр занимает весь экран, стирая информацию о предыдущем этапе работы. Пользователь лишен возможности проследить, каким путем он вышел на данный этап решения. Это неудобство тем более существенно, если по условиям работы пользователь должен часто отвлекаться от решения задачи — отвечать на телефонные звонки, принимать посетителей и т. п. Рассмотрим некоторые приемы, используемые для организации диалога с конечным пользователем. В первых двух примерах показано, как можно эффективно организовать движение курсора по экрану, содержащему некоторое меню, и осуществить выбор необходимых функций. В последнем — третьем — примере показан прием организации работы с окнами — многоэкранный режим работы. Примеры, выполненные на Бейсике, демонстрируют не только удобство диалога, но и относительную простоту программной реализации. Можно было бы сделать, казалось бы, напрашивающийся шаг и объединить эти примеры в одну программу, оснастив ее, в свою очередь, удобным диалогом, то есть оформить эти примеры как один универсальный пакет для организации диалога с конечным пользователем. Кстати, за рубежом некоторые фирмы выпускают такие средства. Можно назвать пакет Panel, обслуживающий С-программы, и в частности СУБД db Vista или пакет Flash up Windows, специально предназначенный для dBASE III Plus. Однако желаемая универсальность не достигается, поскольку 183
появляются не только новые версии программ, для которых готовились эти надстройки, но и новые версии трансляторов — в данном случае с языка С, что заставляет писать очередную «универсальную» программу. Автор не считает себя пессимистом, но за все время работы на ЭВМ, начиная с первых и самых любимых машин «Проминь» и «Мир» (спасибо их создателям) до современных моделей ПЭВМ: IBM PC, XT, AT, PS/2 все многочисленные наблюдаемые попытки создать нечто универсальное оказывались тщетными. Любопытно, что интервал времени, требуемый для доказательства неудачи очередной попытки обнаружения «философского камня» в области программирования, сокращается все быстрее и быстрее. Естественно, что появление каждой очередной более производительной ЭВМ просто перечеркивает все предыдущие достижения в области конкретного программирования. Можно сформулировать закон жизни программ: программа жива, пока существует машина, на которой эта программа эксплуатируется. Несмотря на то что следующая модель ЭВМ чаще всего поддерживает программное обеспечение предыдущей модели (можно упомянуть такие известные пары, как «Минск-22, -32», «Нева-501» и «Искра-1030»), не удалось, к счастью, обнаружить ни одного равнодушного программиста, который бы тупо этим воспользовался. В самом деле, кто будет переносить даже очень хорошую программу, выполненную средствами dBASE II для Robo- tron-1715, на, скажем, ЕС-1842, предварительно не переписав ее — не «усилив» для того, чтобы полностью использовать и возможности машины, и, разумеется, новой версии СУБД? Однако, как всегда, обнаруживаются исключения. Это, как ни странно, программы-игры. Большинство из них написаны на Бейсике, что делает их легко переносимыми и достаточно надежно защищенными от попыток улучшения. Но причина их неизменности и живучести, конечно, не только в этом. Представляется, что данное природой человеку стремление к совершенствованию так надежно приковывает его к какой-то давно выбранной игре, что всякая новая игра, в которой он неминуемо надолго оказывается дилетантом, является для него весьма нежелательной. Вернемся к примерам. 184
В первых двух на экран выводятся меню. Один из кадров меню подсвечивается. Пользователь может клавишами движения по экрану подвести курсор с подсветкой к нужной команде, клавишей «ВВОД» подтвердить свой выбор и перейти к выполнению данной команды. Сами программы отработки команд не приводятся. В качестве имен команд используются «заглушки» — названия цветов: «черный», «синий», ..., «ярко-белый» и т. д. Для организации реального диалога пользователь должен вместо «заглушки» поместить требуемые имена и организовать переход на соответствующие программы обработки эгих команд. Прежде чем рассматривать примеры, напомним, что: для организации подсветки выводимой информации используется оператор color 0,15, а для восстановления обычного режима цветности букв — оператор color 15,0; для подачи звукового сигнала в случае некорректного нажатия той или иной клавиши—оператор beep; для перемещения курсора в нужную позицию экрана дисплея— оператор locate row%, column%. Пример 1. Организация работы с табличным меню (формирование таблицы функций, управление движением курсора и выбор функций). Этот прием целесообразно использовать в случаях, если количество предлагаемых функций не превышает 15—20. Как частный случай табличного меню можно использовать (для выбора нескольких функций) строковые или столбцовые меню, реализуемые этой же программой. Пусть поставлена задача организации выбора требуемого цвета из предлагаемого набора: Черный Красный Темно-серый Синий Светло-фиолетовый Светло-синий Зеленый Золотистый Ярко-зеленый Голубой Серый Светло-голубой Розовый Желтый Светло-пурпурный Ярко-белый Для управления движением курсора будем использовать стандартные клавиши. Количество строк и столбцов таблицы меню задается в строке 20 параметрами М% и N% соответственно. Для таблицы команд зарезервирован в строке 30 массив S$, а описание имен команд происходит в строках 40—190, 185
параметр t% задает величину поля в таблице меню. Строка 450 содержит команду end, в реальной программе здесь должен быть организован переход на программу отработки внутренней функции-команды. Ниже приводится текст этой программы: 5 rem 'Выберите цвет из приведенной таблицы 10 els: option base 1 20 М%=4 : N%=4 : t% = 18 : 1%=4 30 dim a%(M%, N%), b%(M°/o, №/o), s$(M%, N%) 31 CRL°/o(M%, N%) 40 s$(l,l)=«4epHHfl»: CRL%A,1) = 1 50 s$B,l)=«CHHHfl»: CRL%B,1)=2 60 5$C,1)=«3еленый»: CRL%C,1)=3 70 5$D,1)=«Голубой»: CRL%D,1)=4 80 s$(l,2)=«KpacHbifi»: CRL%E,1)=5 90 з$B,2)=«Светло-фиолет.»: CRL%F,1)=6 100 5$C,2)=«Золотистый»: CRL%G,1)=7 110 s$D,2)=«Cepbm»: CRL%(8,1)=8 120 s$A.3)=«TeMHo-cepbm»: CRL%(9,1)=9 130 з$B,3)=«Светло-синий»: CRL%A0,1) = 10 140 5$C,3)=«Ярко-зеленый»: CRL%A1>1)=11 150 5$D.3)=«Светло-голубой»: CRL%A2,1)=12 160 s$(l,4)=«Po30Bbift»: CRL%A3,1)=13 170 8$B,4)=«Светло-пурпур.»: CRL%A4,1)=14 180 з$C,4)=«Желтый»: CRL%A5,1) = 15 190 з$D,4)=«Ярко-белый»: CRL%A6,1) = 16 200 for i% = l to 4: for j% = l to 4 210 b%(i%, j%) = t%*(j%-l) + l 220 next j%: next i% 230 print «выбериче цвет курсора» 231 print : print : print 240 ii% = l : jj°/o = l : gosub 460 250 K$=inkey$ 251 if len(k$)=0 then 250 else k%=asc(k$) 260 if k% = 13 or k%=3 then 450 270 if len(k$)< »2 then beep 271 goto 250 else k%=asc (right$(k$,l)) 280 if k%=77 then goto 420 'вправо 290 if k%=75 then goto 390 'влево 300 if k%=72 then goto 360 'вверх 310 if k%=80 then goto 330 'вниз 320 beep: goto 250 330 if ii%<M% then ii%=ii% + l 186
331 goto 350 else ii% = l 340 if jj%<N% then jj%=jj% + l else ij% = l 350 gosub 460 : goto 250 360 if ii%>l then ii% = ii% —1 361 goto 350 else ii%=M% 370 if jj%>l then jj%=jj%—1 else jj%=N% 380 goto 350 390 if jj%>l then jj%=jj% —1 391 goto 350 else jj%=N% 400 if ii%>l then ii% = ii%—1 401 goto 350 else ii%=M% 410 goto 350 420 if jj%<N% then jj%=jj% + l 421 goto 350 else jj% = l 430 if ii%<M% then ii% = ii% + l 431 goto 350 else ii% = l 440 goto 350 450 end 460 locate 1%, 1: CL°/o=CLR%(i%, j%) 470 for i% = l to M%: for j% = l to N% 480 if i%=ii% and j%=jj% then color O, CL% else color CL%, О 490 locate l% + i%, b%(i%, j%) 500 print s$(i%, j%); 510 next j%, i% 520 color 15,0 530 return Пример 2. Если необходимо организовать выбор в большом количестве функций A5—20 и более), то рационально, чтобы не загромождать экран и упростить поиск, использовать ниспадающее меню. Для большего удобства пользователя на этапе постановки задачи необходимо, как принято говорить, декомпозировать систему, разбив ее на группы однотипных по некоторому признаку функций — подсистем. Имена подсистем образуют элементы строкового меню, после выбора нужной подсистемы из нее «выпадает» входящий в нее набор функций, и пользователь продолжает дальнейший выбор функций и ввод требуемых данных в рамках «нижнего» набора функций. После запуска программы на экране высвечивается главное меню, которое предлагает пользователю выбрать четыре функции (в нашем случае четыре палитры цветов, скомпонованные как строковое меню). Перемещение по 187
строковому меню осуществляется с помощью клавиш управления горизонтальным движением курсора, Выбрав нужную палитру нажатием клавиши <ВВОД>, под этим кадром главного меню появляется меню цветности курсора. Пользуясь стрелками управления движением «вверх» или «вниз», можно выбрать нужный цвет. Нажатие клавиши «ВВОД» обеспечит дальнейшее выполнение программы. Приводим текст этой программы: 10 rem 'Пример ниспадающего меню 20 option base l 30 М%=4 : N%=4 : t% = 18 : 1%=5 40 dim b°/o(M%, N%), s$(M%, N%), c$(M%), CLR% (Mo/0, N%) 50 jc% = l 60 els 70 с$A)=«Темные»: 8$A,1)=«черный» 71 CRL%A,1) = 1 : з$B,1)=«синий» 80 CRL%B,1)=2 : 8$C,1)=«зеленый» 90 CRL%C,1)=3 : 8$D,1)=«голубой» 101 CRL%D,1) = 4 ПО 8$B)=«Светло-темные»: 8$A,2)=«красный» 111 CRL%E,1)=5 120 8$B,2)=«светло-фиолетовый» 121 CRL%F,1)=6 130 8$C,2)=«золотистый» 131 CRL%G,1)=7 : s$D,2)=«cepbifl» 141 CRL%(8,1)=8 150 5$C)==«Темно-светлые»: 8$A,3)=«темно-серый» 151 CRL%(9,1)=9 160 8$B,3)=«светло-синий» 161 CRL%A0,1) = 10 170 8$C,3)=«ярко-зеленый» 171 CRL%A1,1) = 11 180 8$D,3)=«светло-голубой» 181 CRL%A2,1) = 12 190 c$D)== «Светлые»: s$(l,4)=«po30Bbift» 191 CRL%A3,1) = 13 200 8$B,4)=«светло-пурпурный» 201 CRL%A4,1) = 14 210 s$ C,4)=«желтый» 211 CRL%A5,1) = 15 220 s$D,4) = «ярко-белый» 221 CRL%A6,1) = 16 188
230 for i% = l to 4: for j% = l to 4 240 b%(i%, j%)=t%*(j%—1)+1 250 next j%: next i% 260 print « 261 print «Выберите режим работы с курсором» 262 print : print 270 1%=3: gosub 440 280 1%=5 : jj%=jc% : ii% = l : gosub 610 290 k$=inkey$ 291 if len(k$)=0 then 290 else k°/o=asc(k$) 300 if k% = 13 then 430 301 if k%=27 then goto 60 310 if len(k$)( J then beep 311 goto 290 else K%=asc (right$(k$,l)) 320 if k%=72 then goto 370 'вверх 330 if k%=80 then goto 380 'вниз 340 beep: goto 290 350 if ii%<M% then ii% = ii% + l else ii°/o = l 360 gosub 610: goto 290 370 if ii%>l then ii°/o=ii%—1 else ii%=M% 380 goto 360 390 if jj%>l then jj%=jj%—1 else jj%=N% 400 if jc%>l then jc%=jc%—1 else jc%==M%: goto 60 410 if jj%<iN% then jj%=jj% + l else jj% = l 420 if jc%<M% then jc°/o=jc% + l else jc°/o = l: goto 60 430 end 440 for j% = l to N%: CLR =CLR%(i%, j%) 450 if j% = jc°/o then color 0, CL% else color CL%, 0 460 locate 1%, b%(l,j%) : print c$(j%); 470 next j% 480 print 490 k$=inkey$: if len(k$)=0 then goto 290 else k%=asc(k$) 500 if k% = 13 then return 510 if k%=27 then goto 430 520 if len(k$) < J then beep: goto 490 else k%=asc(right$(k$,l)) 530 if k%=75 then goto 560 540 if k%=77 then goto 580 550 beep: goto 490 560 if jc%>l then jc%=jc%—1 else jc%=M% 570 goto 440 580 if jc%<M% then jc%=jc% + l else jc°/o = l 590 goto 440 189
600 return 610 locate 1%, 1 620 for i% = l to M%: CLR=CLR°/o(i%, j%) 630 ii i%=ii% then color 0, CLR% else color CLR%, 0 640 locate l% + i%, b°/o(i%, jj%) 650 print s$(i%, jj%) 660 next i% 670 color 15,0 680 return Отметим еще три важных качества этих программ: 1) возможность исправить допущенную ошибку, так как клавиша «КЛЮЧ» позволяет выйти к предыдущему этапу работы программы (предыдущему меню); 2) возможность защиты от некорректного нажатия клавиш, то есть если пользователь нажмет «не ту» клавишу, ему подается звуковой сигнал; 3) возможность настройки диалога на необходимый пользователю режим работы, поскольку, если какие-либо команды меню не вызываются, они остаются невидимыми на экране. Пример 3. Подпрограмма работы с окнами — организация многооконного интерфейса — представлена ниже: 10 def fnpl %(ac%)=ac%+(fix(ac%/128)—fix(ac%/16)) * 16 20 def fnph%(ac%)=fix(ac%/16)—fix(ac%/128)* 8 25 dim in$B5, 80), in% B5, 80), ou$B5, 80), ou%B5, 80) 26 els 30 print «Задайте координаты окна» 40 input «левый верхний угол —», xl%, yl% 41 input «правый нижний угол », х2%, у2%: г%=х2%-х1%: с% = у2%-у1% 45 restore 1000 50 for 1%=0 to r%: for j% = 0 to c% 60 read ou$(i%, ]%) 61 next j%: next i%: restore 2000 62 for i%=0 to r%: for i% = 0 to c% 63 read ou% (i°/o, j%) 64 next j%: next i% 70 input st$: if st$ ( ) «window» then goto 70 80 for r%=xl% to x2% : i°/o=r% — xl%: locate r%, yl% 90 for c% = yl% to y2* : jo/0==c%—yl% 100 in$ (i%, j%)=chr$ (screen (r%, c%, 0)) 110 in o/0(io/0, jo/o) = screen (ro/0) co/0| _i) : o% = ou% (i%, j%) :o$ =ou$(i%, j%) 120 color fnpl % (o%), fnph (o%) 130 if c%>yl% and c%<y2% then print o$; 135 if c% = yl% or c% = y2% then print «:»: j%=j%—1 140 next c% 150 next r% 190
160 k$=inkey$: if len(k$)=0 then goto 160 else k% = asc (k$) 170 if к%=13 then goto 30 175 if k%=33 then stop 180 if k% < ) 27 then beep : goto 160 190 for r% = xl% to x2% : i% = r%—xl%: locate r%, yl% 200 for c%=yl% to y2% : j%=c%—yl% 210 o°/o = in% (i%, j%) : o$=in$ (i%, j%) 220 color fnpl % (o%), fnph% (o%) : print o$; 230 next c% 240 next r°/o 250 goto 160 1000 data 1001 data 1010 data 1011 data 1020 data . , 1021 data 1030 data 1031 data 1040 data 1041 data 1050 data 1051 data 1060 data 1061 data 1070 data 1080 data 1090 data 1100 data 2000 data 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 2001 data 19, 20 2010 data 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 2011 data 36, 37, 38, 39, 40 2020 data 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 2021 data 56, 57, 58, 59, 60 2030 data 61, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120 2031 data 125, 130, 135, 140 2040 data 145, 150, 155, 160, 170, 175, 180, 185, 190, 195, 200 2041 data 205, 210, 215, 220 2050 data 225, 230, 240, 245, 250, 255, 62, 63, 64, 65, 66, 67, 68 2051 data 69, 70, 71, 72, 75, 67 2060 data 34, 3, 45, 56, 67, 134, 78, 6, 56, 7, 122, 254, 123, 245, 234 2061 data 201, 202, 203 2070 data 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 1, 214 2071 data 215, 217, 216, 218 2080 data 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 229 2081 data 230, 231, 232, 233 2090 data 234, 235, 236, 237, 239, 240, 241, 242, 243, 244, 245, 246 2091 data 247 248 249 250 2100 data 251* 252,' 253,' 254, 255, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 12, 13 2101 data 124, 15, 23, 14, 23, 3 2110 data 34, 3, 45, 78, 56, 6, 67, 67, 56, 133, 134, 34, 45, 5, 5, 34, 56 2111 data 7, 7, 2, 78, 89 2120 data 23, 45, 12, 45, 56, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7,8 »,•}•, Э, T, O, • ,»,»,.,•,» .,.,., с, л, у, ж, и,т, . , . , . .,¦,., и, л, л, ю, с, т, р, а, ц, >»>>>>»> • > . j • > . » "у о, к, н, а, м, и, ", , о, к, н, о, . , . , д, л, я, . , . , . » 1 » > » > • » 191
2121 data 9, 1, 2, 3, 45, 34, 3 2130 data 3, 34, 234, 34, 123, 234, 235, 254, 255, 255, 255, 255, 255 2131 data 255 255 255 2140 data 23,'34, 6, 54, 45, 56, 5, 5, 45, 56, 56, 56, 56, 5, 3, 56, 56, 3 2141 data 56, 7, 7, 86, 56, 45 2150 data 56, 56, 56, 56, 56, 56, 56, 56, 5, 56, 56, 56, 56, 56, 56, 65 2151 data 56, 56, 56, 56, 56, 56, 56 2160 data 5, 5, 54, 56, 56, 34, 3, 5, 45, 65, 67, 78, 78, 89, 98, 89, 78 2161 data 78, 78, 78, 89, 89, 56 Эта программа позволяет выводить окна любого размера в любом месте экрана. Содержимое окна задается строками с 1000 по 1100. Цветность каждого символа в окне может быть произвольной и задается строками с 2000 по 2100. Так же, как и в предыдущих примерах, нажатие клавиши «ВВОД» позволяет перейти к выполнению выбранной команды — в нашем случае программа запрашивает место расположения следующего окна. Таким образом, на экране дисплея можно, разместить несколько требуемых окон в нужных местах и в нужном порядке. Причем окна на экране могут заслонять друг друга подобно раскиданным на столе картам. Вернуться к предыдущему режиму работы (убрать карту со стола) позволяет клавиша «КЛЮЧ», при этом окно стирается, а содержимое заслоненной окном части экрана восстанавливается. Отметим, что окна, созданные этой программой, могут быть использованы и для ввода данных и для организации помощи. Рассмотренные программы, такие как «каркас», можно использовать для создания систем, в которые введены подпрограммы, реализованные кроме Бейсика также на Ассемблере и Си. В целом же организация работы многопрограммных комплексов, компоненты которых реализованы с помощью различных инструментальных и языковых средств, является самостоятельной, достаточно сложной проблемой. Заканчивая обсуждение проблемы организации диалога с конечным пользователем, хочется предостеречь от другой крайности — чрезмерной детализации диалога, увлечения «игрой в вопросы и ответы». Что имеется в виду? Разработчики программных средств нередко выносят логику обработки различных элементарных ошибок на экран, вовлекая в бессодержательный диалог пользователя. Этот недостаток не всегда заметен на этапе обучения работе с системой, однако с получением определенного навыка пользователь начинает раздражаться 192
бесконечными очевидными вопросами и ожидавшееся повышение производительности труда не достигается. Можно, конечно, призвать проектировщиков создавать самообучающиеся системы. Но как? Известно, что каждая область автоматизации имеет свои, именно ей присущие, особенности, что каждый раз требует индивидуального подхода к проектированию систем управления или обработки данных. Общим же для большинства систем (АРМ, САПР) является процесс ввода данных. И чаще всего организация этого процесса является самым уязвимым местом в построении удачного диалога. Представляется, что для рациональной организации диалога управления данными полезно использовать накопленный опыт работы систем, созданных на базе больших ЭВМ, поддерживающих чаще всего пакетный режим обработки. При всех известных недостатках систем централизованной обработки данных они имеют одно неоспоримое достоинство — очень высокую скорость подготовки данных, которая обеспечивалась профессионалом-оператором с помощью простейших устройств ввода. Это достигалось за счет использования жесткого формата и работы в кодах, чаще всего только с цифровой клавиатурой. Данные на любом носителе (перфокарта, перфолента, магнитная лента) группировались в блоки и снабжались контрольными суммами, что позволяло без труда найти блок, содержащий ошибку, а использование, в случае громоздких записей, контрольных сумм по строке или кода с контролем, например, по модулю некоторого простого числа, давало возможность идентифицировать ошибочную запись в блоке. Другое дело, что на этапах корректировки, выполненных в пакетном режиме в отрыве от непосредственного места ввода данных (возникновения информации), все достигнутые преимущества терялись. Использование ПЭВМ как комплексного средства ввода, контроля и обработки данных может дать эффект только в случае учета всех факторов человеко-машинной системы. Применительно к проблеме построения диалога управления данными удобно представить будущего пользователя не как равнодушного дилетанта, но как разумного человека, искренне заинтересованного в хороших результатах своего труда. Учитывая, что навыки работы приобретаются постепенно, целесообразно предусмотреть в системе несколько (не менее двух) процедур ввода данных, обеспечивающих разный объем помощи и контроля. 9 Смирнов Н. Н. 193
1. Для начинающего пользователя следует обеспечить контроль каждого введенного реквизита с немедленной выдачей сообщений о выявленных ошибках и способах их устранения. 2. Для специалиста процедура обработки данных контролирует только правильный ввод всей записи. 3. Для профессионала контроль правильности ввода данных может осуществляться на блоках записей (документов или даже пачек документов — массивов данных). Запись данных в память должна производиться только после полного завершения этапа контроля. Вызов той или иной процедуры ввода выполняет пользователь из меню, предложенного непосредственно после загрузки системы.
Глава 8. СОЗДАНИЕ СОБСТВЕННОЙ ИНСТРУМЕНТАЛЬНОЙ СРЕДЫ 8.1. Что такое собственная инструментальная среда Говорить о создании собственной инструментальной среды вполне логично исходя из самого назначения персональной ЭВМ. Ознакомившись с содержанием предыдущих глав, нетрудно заметить, что одним из направлений совершенствования программных средств является создание все более удобного для пользователя окружения, понимая под этим функциональную полноту и организацию диалога. Это характерно как для программных средств общего назначения (удобные ОС, языковые средства, текстовые редакторы, табличные процессоры, СУБД), так и для пакетов, ориентированных на конкретный вид деятельности (деловые, интегрированные ПС, пакеты обработки статистики, решения оптимизационных задач, бухгалтерского учета, финансирования и т. п.), т. е. методо- и проблемно-ориентированных программных средств. Естественное развитие этого процесса направлено в конечном счете на создание индивидуальных программных средств — автоматизированных рабочих мест (АРМ). Крупные предприятия, получающие ПЭВМ, размещают в специализированных организациях заказы на создание комплексов АРМ для своих работников. Это дело, конечно, нужное, но и весьма дорогостоящее. Чтобы остальная группа, а их большинство, не чувствовала себя обделенной, покажем, как можно самому сделать, а лучше сказать — собрать необходимое для работы программное средство. Для описания предполагаемой технологии уместна, вероятно, следующая аналогия. Собственная инструментальная среда ПЭВМ — это ваша среда обитания в общечеловеческом смысле: жилье, магазины, инфраструктура, зона отдыха, но отнесенная к вашей производственной деятельности. Ее можно создать «по кирпичику» — на это уйдет очень много времени. 9* 195
Под «кирпичиками» понимаются используемые языки программирования. Можно воспользоваться крупными блоками, например, средствами табличных процессоров или СУБД. Это тоже достаточно долго. Чтобы построить город своей мечты и успеть в нем пожить, лучше брать готовые дома, магазины, дороги, машины и т. п. Ваша роль, как главного архитектора, сводится к выбору из каталогов нужных компонентов и рациональному их размещению — привязке к местности. Причем можно не знать все особенности организации каждого компонента — Вас интересует лишь то, как будет обеспечен ограниченный, в смысле счетный, набор требуемых для Вас свойств. Итак, это главное — для создания собственной инструментальной среды используются готовые программные средства. Как они работают, Вас абсолютно не интересует, главное — чтобы они выполняли те функции, которые Вам нужны. Это звучит, быть может, несколько цинично, но ведь сказано же: «Нельзя объять необъятное». Для наиболее эффективной работы создаваемая программная среда должна, разумеется, общаться с Вами на том языке, который Вам наиболее близок и понятен. Таким образом, собственная инструментальная среда — это совокупность программных средств, работающих под общим управлением на родном языке пользователя и реализующих требуемые функции. Для создания собственной инструментальной среды после выбора компонентов необходимо решить три проблемы: выполнить при необходимости адаптацию выбранных программных компонентов на Ваш родной язык; организовать интерфейс между программными компонентами; разработать управляющую программу, содержащую общее меню функций полученной системы и, при необходимости, передачи программ другим пользователям, средства помощи и обучения. Сразу скажем, что разработка управляющей программы может быть выполнена в первом приближении, например, с помощью командных файлов. Более удобный интерфейс с конечным пользователем можно организовать, используя инструментальные средства, но это отдельная, достаточно сложная проблема. За рубежом разработаны программы (многооконные интерфейсы), позволяющие в принципе решить проблему взаимодействия нескольких программ, однако, учитывая, что они сами 196
занимают значительную память, область их возможного использования ограничена. Решение первых двух проблем мы проследим на примере создания собственной инструментальной среды, объединяющей уже знакомый интегрированный пакет Lotus 1-2-3 и пакет решения задач линейного и целочисленного программирования. Какие цели в результате этой сверхинтеграции достигаются? Во-первых, собственная инструментальная среда в такой конфигурации может стать удобным средством для разработки в интерактивном режиме математических моделей, описывающих весьма широкий круг объектов и процессов (например, в экономике, планировании и управлении производством, управлении запасами, планировании экспериментов и т. п.). Во-вторых, построенные с помощью данной инструментальной среды модели могут стать средством конечного пользователя для решения конкретных задач в составе, например, автоматизированных рабочих мест различного назначения. И наконец, в-третьих, выбранный состав компонентов, учитывая то, что структура Lotus-файлов является неофициальным стандартом уровня представления данных при организации обмена информацией между различными локальными вычислительными сетями, обеспечит будущие расширяющиеся информационные потребности. Рассмотрим первую и, пожалуй, самую сложную проблему — адаптацию программных средств. 8.2. Адаптация программных средств Использование программных средств ПЭВМ оказывается наиболее эффективным в том случае, если конечный пользователь работает на своем родном языке. Обеспечение возможности работы программы на языке, отличном от оригинала, принято относить к проблеме адаптации. Вообще понятие адаптации значительно шире. В конечном счете работа по адаптации программных средств сводится к внесению изменений в программу. Многие опытные программисты, имеющие наработанный задел программ и обширные библиотеки, очень часто очередную программу разрабатывают в режиме внесения изменений в ранее созданную. Таким образом, грань между понятиями «адаптация» и «разработка» весьма условна. 197
Правовую сторону акта адаптации изучает юридическая наука. Здесь же мы будем руководствоваться здравым смыслом и общечеловеческой моралью, которые в данном конкретном случае выражаются в том, что если программа приобретена законно, то она является личной, кооперативной или государственной собственностью покупателя, который вправе делать с ней все, что угодно, кроме повторной продажи, если это не было дополнительно оговорено. Сложившаяся международная практика (это выяснилось в беседах, поэтому я не могу сослаться на какой- либо документ) при решении проблемы авторства программного продукта исходит из того, что нельзя присваивать авторство на программу, содержащую более двух третей от своего объема заимствований какого- либо одного продукта. Адаптация подразумевает как замену сообщений, выдаваемых программой, с языка оригинала на требуемый национальный язык, так и обеспечение ввода—вывода наборов букв национального алфавита во время рабочего сеанса. Мы не будем подробно останавливаться на замене сообщений, выводимых на экран дисплея или принтер программой-оригиналом. Это относительно простая задача, которая сводится к просмотру файлов с программой, нахождению сообщений и их замене с помощью, например, утилит (NORTON, PC—TOOLS и др.). Отметим также программное средство Message Editor, специально созданное для редактирования сообщений. Используя Message Editor, после загрузки ЕХЕ- или СОМ-файла с программой достаточно лишь указать минимальную длину сообщения, после чего на экран дисплея будут последовательно выводиться для редактирования все сообщения длиной не менее указанной минимальной. Таким образом, замена сообщений с языка оригинала на национальный язык — довольно утомительная, но в большинстве случаев стандартно решаемая задача. Исключение составляют скрытые сообщения, т. е. сообщения, которые «не видны» при просмотре файла с программой. Для вывода таких сообщений Moryi использоваться достаточно сложные методы криптографии. Однако применение скрытых сообщений снижает эффективность программ (увеличиваются время отклика, а также просто физический объем программы). Поэтому 198
разработчики программ используют методы криптографии лишь как средство зашиты торговой марки и реже HELP-файлов тех разделов программы, которые не влияют на функциональную работоспособность продукта. Для адаптации на арабский язык, в котором запись слов ведется справа налево, чисел — слева направо, отсутствуют гласные, а смысл согласных зависит от их положения в слове, необходимо иметь ПЭВМ, операционную систему и средства редактирования, ориентированные на работу только с этим языком. Рассмотрим теперь проблемы, которые могут возникать при обеспечении ввода—вывода наборов букв национального алфавита во время рабочего сеанса. Мы не случайно сказали, что такие проблемы могут возникать, ибо далеко не всегда они имеют место. С чем это связано? Сделаем небольшое «отступление» в кодировку символов для ПЭВМ. Как известно, ввод—вывод в любой ЭВМ организуется на основе определенной системы кодирования. В качестве кода ПЭВМ широко распространен американский стандартный код для обмена информацией (ASCII). По системе кода ASCII первые 32 кода (шестнадцатернчные числа от 00 до IF) являются управляющими, с помощью которых системные или прикладные программы, как правило, реализуют свои рабочие функции, а остальные 96 (от 20 до 7F) используются для кодирования знаков пунктуации, знаков арифметических операций, некоторых специальных символов (%, &, $, и др.), цифр, а также букв латинского алфавита. Система кодов ASCII обычно представляется в виде таблицы, называемой основной таблицей ASCII. Для кодирования символов ASCII используется семь битов,, что позволяет закодировать 128 символов (коды от 00 до 7F). Этого оказывается недостаточно, поэтому задействуют еще один — восьмой — бит, что позволяет расширить таблицу в два раза. Символы, помещаемые в расширение основной таблицы ASCII, имеют коды от 80 до FF. Конкретное же представление этих символов зависит от знакогенератора ПЭВМ. Отметим, что знакогенератор ЕС-1840 использует лишь основную таблицу ASCII. Поэтому в отечественных операционных системах для ЕС-1840 предусматривается специальная системная программа загрузки кодовой таблицы, состоящей из основной таблицы ASCII и ее расширения. Именно в расширение 199
таблицы ASCII и помещают набор букв русского алфавита отечественные версии операционной системы MS-DOS. Чтобы «посмотреть», какая таблица загружена в ПЭВМ, достаточно вывести на экран дисплея (например, с помощью команды TYPE) заранее подготовленный текстовый файл, содержащий коды от 20 до FF. Такой файл обычно уже находится на системной дискете (CODETAB.DOC). Отметим, что данный способ не подходит для просмотра символов, соответствующих управляющим кодам, так как некоторые из управляющих кодов используются системными программами при реализации своих рабочих функций. Зарубежные программные средства, работающие, как правило, с латинским алфавитом, используют в основном расширение таблицы ASCII, соответствующее стандартному знакогенератору IBM PC, в котором нет букв русского, да и любого другого национального алфавита. При этом из расширения таблицы ASCII привлекаются главным образом символы псевдографики для достижения большей внешней привлекательности программ (изображение рамок, штриховок и т. п.) или формирования на экране дисплея изображений графических объектов (гистограмм, графических схем). Разработчики зарубежных программ далеко не всегда заботятся об обеспечении возможности ввода с клавиатуры символов из расширения таблицы ASCII, в том числе помещаемых в таблице букв национальных алфавитов. Конечно, особенно винить их в каком-то злом умысле не следует, поскольку многие из них скорее всего и не догадываются о том, какие проблемы возникают перед пользователями остального мира. Следует заметить, что проблема адаптации особенно характерна для крупных интегрированных программных продуктов, оснащенных мощными средствами визуализации. Для таких программ обеспечение ввода—вывода, например букв русского алфавита, в отличие от замены сообщений — задача значительно более сложная, требующая нетривиального изменения текстов программ. Но поскольку зарубежные фирмы-разработчики программного обеспечения не поставляют исходные тексты программ (мы имеем лишь исполняемые ЕХЕ- пли СОМ- файлы), то задача еще более усложняется и требует привлечения специальных программных средств, так называемых отладчиков (debugger), позволяющих реассембли- 200
ровать ЕХЕ- или СОМ-файлы, т. е. восстанавливать ассемблерный код программ. Трудно дать какие-либо общие рекомендации по обеспечению ввода—вывода букв национальных алфавитов — организация каждой программы индивидуальна, и это дело вкуса ее разработчиков. Однако достаточно типичные задачи, возникающие при решении этой проблемы, мы рассмотрим на примере адаптации на русский язык пакета Lotus 1-2-3 для ЕС-1840. Табличный процессор 1-2-3 имеет собственный драйвер клавиатуры — KB.DRV, который загружается в память вместе с основной программой 1-2-3. В ожидании ввода с клавиатуры или после нажатия какой-либо клавиши табличный процессор обращается к KB.DRV, на который, таким образом, налагаются две обязанности — проверка буфера клавиатуры с целью выяснения, нажата клавиша или нет, а также некоторая специальная обработка системных кодов нажатых клавиш. Для того чтобы понять, как драйвер KB.DRV обрабатывает системные коды нажатых клавиш, рассмотрим генерацию этих кодов в ПЭВМ типа IBiA PC. При нажатии любой клавиши в системный блок ПЭВМ поступает так называемый скэн-код (scan-code) нажатой клавиши, то есть шестнадцатеричное число (от 01 до 53), соответствующее порядковому номеру (от 1 до 83) этой клавиши на клавиатуре. Например, при нажатии клавиши Esc вводится скэн-код 01, клавише F1 соответствует скэн-код ЗВ. Базовая система ввода—вывода (BIOS) анализирует поступивший скэн-код и либо генерирует специальный двухбайтовый системный код, либо фиксирует нажатие служебных клавиш фиксации регистров (CapsLock, ScrollLock, NumLock), смены регистров (Shift) и модификации кодов других клавиш (Alt, Ctrl) в отдельных битах специальной ячейки системной памяти. При этом генерируемый системный код зависит от состояния этой ячейки памяти, то есть от того, нажаты указанные выше служебные клавиши или нет. BIOS генерирует системные коды двух видов. При нажатии буквенных, цифровых, знаковых клавиш и их комбинаций с клавишами Shift или CapsLock, клавиш Esc, Tab, Enter, Backspace, а также комбинаций клавиши Ctrl с буквенными клавишами и некоторыми другими клавишами (рис. 8.1) младший из двух байтов (главный байт) содержит соответствующий изображению символ на кла- 201
Специальные клавиши Backspace 08 Комбинации Ctrl/A 01 Ctrl/B 02 Ctrl/C 03 Ctrl/D 04 Ctrl/E 05 Ctrl/F 06 Ctrl/G 07 Tab 09 клавиши Ctrl с Crtl/H 08 Ctrl/I 09 Ctrl/J OA Ctrl/K OB Ctrl/L ОС CtrlAM OD Ctrl/X OE Комбинации клавиши Ctrl Ctrl/Enter Ctrl/] OA ID Ctrl/ Enter OD буквенными Ctrl/0 OF CtrbP 10 Ctrl/Q 11 Ctrl/R 12 Ctrl/S 13 Ctrl/T 14 Ctrl/U 15 Esc IB клавишами Ctrl/V Ctrl/W Ctrl/X Ctrl/Y Ctrl/Z с другими клавишами [ IB Ctrl/6 IE Ctrl/\ Ctrl/— 16 17 18 19 1A 1С IF Рис. 8.1 виатуре или управляющий код из основной таблицы ASCII. Старший байт (второй или вспомогательный байт) содержит скэн-код нажатой клавиши. Например, при на- жатии клавиши Esc генерируется системный код 011В, клавише S соответствует код 1F73, а комбинации клавиш Ctrl/S — системный код IF 13. Системный код такого вида мы назовем стандартным ASCII-кодом нажатой клавиши в отличие от расширенного ASCII-кода, который генерируется при нажатии функциональных клавиш F1, ..., F10 (и их комбинаций с Shift, Ctrl или Alt), клавиш управления курсором Up, Down, Left, Right, Home, End, PgUp, PgDn (и их комбинаций с Ctrl), клавиш удаления Del и вставки Ins, комбинаций клавиши Alt с буквенными или цифровыми клавишами и некоторых других комбинаций (Ctrl/Break, Ctrl/2, Shfti/Tab, Ctrl/PrtSc). Главный байт расширенного ASCII-кода равен 00, и это показывает, что системная или прикладная программа должна анализировать второй или вспомогательный байт, значение которого, как правило (однако не всегда), совпадает со скэн-кодом нажатой клавиши. Например, при нажатии клавиши F1 генерируется расширенный ASCII-код 3B00, комбинации клавиш Alt/S соответствует код 1F00, а комбинации Alt/Fl — расширенный ASCII-код 6800. Вторые байты расширенных ASCII-кодов приведены в работе [21. Однако следует обратить внимание, что в таблице на стр. 120 ошибочно находятся комбинации клавиши Ctrl с буквенными клавишами, при нажатии которых генерируются стандартные, а не расширенные 202
ASCII-коды. Поэтому считаем необходимым привести исправленный вариант таблицы, получаемой на дисплее (рис. 8.2), основываясь на Technical Reference IBM Personal Computer XT. Клавиатура ЕС-1840 имеет 92 клавиши. По сравнению с IBM PC введены дополнительные служебные клавиши фиксации и смены латинского и русского регистров, а также увеличено количество знаковых клавиш, используемых также и для ввода некоторых русских букв (так как для размещения 33 букв русского алфавита недоста- F1 ЗВ F2 ЗС F3 3D F4 ЗЕ F5 3F F6 40 F7 41 F8 42 F9 43 F10 44 Функциональные клавиши Shift/Fl 54 Shift/F2 55 Shift/F3 56 Shift/F4 57 Shift/F5 58 Shift/F6 59 Shift/F7 5A Shift/F8 5B Shift/F9 5C Shift/FlO 5D Ctrl/Fl 5E Ctrl/F2 5F Ctrl/F3 60 Ctrl/F4 61 Ctrl/F5 62 Ctrl/F6 63 Ctrl/F7 64 Ctrl/F8 65 Ctrl/F9 66 Ctrl/FlO 67 Клавиши управления курсоро*м, вставки Ноте 47 Up 48 PgUp 49 Модифи Ctrl/Left Left 4B Right 4D End 4F Down 50 PgDn 51 цированные клавиши управления 73 Ctrl/Ri eht 74 Ctrl/PgDn 76 Ctrl/Home 77 Комбинации Alt/Q 10 Alt/W 11 Alt/E 12 Alt/R 13 Alt/T 14 Alt/Y 15 Alt/U 16 Alt/I 17 Alt/O 18 Alt/P 19 клавиши Alt с б> Alt/A IE Alt/S IF Alt/D 20 Alt/F 21 Alt/G 22 Alr/H 23 Alt/J 24 Alt/K 25 Alt/L 26 Alt/- 82 Alt/Fl 68 AU/F2 69 AU/F3 6A Alt/F4 6B Alt/F5 6C Alt/F6 6D Alt/F7 6E AU/F8 6F Alt/F9 70 Alt/FlO 71 и удаления Ins 52 Del 53 курсором Ctrl/End 75 Ctrl/PgUp 84 таенно-цифровыми клавишами Alt/Z 2C Alt/X 2D Alt/C 2E Alt/V 2F Alt/B 30 Alt/N 31 Alt/M 32 Alt/= 83 Alt/1 78 I Alt/2 79 Alt/3 7A Alt/4 7B Alt/5 7C Alt/6 7D Alt/7 7E Alt/8 7F Alt/9 80 Alt/0 81 Прочие комбинации клавиш Ctrl/Break 00 Ctrl/2 03 Shift/Tab OF Ctrl/PrtSc 72 Рис. 8.2 203
точно 26 буквенных клавиш). Однако BIOS ЕС-1840 при нажатии большинства клавиш генерирует те же самые системные коды, что и BIOS IBM PC (в частности, для ЕС-1840 верны вышеприведенные таблицы). Исключение составляют лишь дополнительно введенные знаковые клавиши ({, }, ~). Следует также отметить, что BIOS EC-1840 при вводе букв русского алфавита (то есть при нажатии буквенных клавиш на русском регистре) генерирует стандартные ASCII-коды клавиш, главные байты которых содержат коды из расширения основной таблицы ASCII. При этом соответствие изображенных на клавишах букв русского алфавита их отображению на экране дисплея имеет место лишь в том случае, когда в знакогенератор дисплея загружена специальная кодовая таблица — она называется основной кодовой таблицей ЕС-1840 (поставляемая вместе с ЕС-1840 операционная система М86 использует именно эту таблицу). Буквы русского алфавита размещены в основной кодовой таблице ЕС-1840 довольно неудобно — прописные буквы находятся в начале расширения таблицы ASCII (коды от 81 до А1), а строчные — в конце (коды от D1 до F1), к тому же занимаемые строчными буквами коды многие зарубежные программы используют, как уже говорилось, для изображения символов псевдографики. Поэтому отечественные версии MS-DOS загружают, как правило, более удобные таблицы, а необходимое соответствие стандартных ASCII-кодов, генерируемых при вводе букв русского алфавита, загружаемой кодовой таблице обеспечивает специальная резидентная программа — системный драйвер клавиатуры. Вернемся к драйверу KB.DRV интегрированного пакета Lotus 1-2-3. После нажатия любой клавиши и генерации операционной системой ее системного кода KB.DR V анализирует полученный системный код (точнее, главный байт системного кода). Если этот код — стандартный ASCII-код (главный байт — ненулевой), то KB.DRV передает управление основной программе 1-2-3. В случае расширенного ASCII-кода (главный байт равен 00) KB.DRV обращается к своей специальной таблице, которая сопоставляет со вторыми байтами расширенных ASCII-кодов определенного набора клавиш и их комбинаций коды из расширения таблицы ASCII. Таблица драйвера KB.DRV представляет собой просто последова- 204
1 В8 12 Л6 ait/w : А ) t /Е Рис. 8.3 тельность байтов, на нечетных местах которой находятся вторые байты системных кодов, а на четных — сопоставляемые коды из расширения ASCII. Начало эгой последовательности приведено на рис. 8.3. Используя свою таблицу, KB.DRV возвращает в основную программу новый код нажатой клавиши, главный байт которого содержит найденный в таблице по второму байту систе*много кода соответствующий код из расширения таблицы ASCII. В том случае, когда KB.DRV не находит в своей таблице второго байта кода нажатой клавиши, выдается звуковой сигнал (так блокируются нажатия тех клавишей и комбинаций клавиш, которые не используются пакетом Lotus 1-2-3). Таким образом, драйвер KB.DRV осуществляет первый этап программного переопределения клавиш, используемых пакетом Lotus 1-2-3, в результате которого основной программе 1-2-3 достаточно вместо системных кодов нажатых клавиш рассматривать лишь один байт — код из основной таблицы ASCII при нажатии буквенных, цифровых и знаковых клавиш или код из расширения таблицы ASCII при нажатии функциональных клавиш, клавиш управления курсором, удаления и вставки, а также определенных комбинаций клавиш (указанных в таблице KB.DRV). Основная программа 1-2-3 осуществляет второй этап переопределения клавиш. Оставляя без изменения коды от 21 до 7F, программа 1-2-3 при получении всех остальных кодов (управляющих и из расширения таблицы ASCII) обращается к своей таблице сопоставления кодов, согласно которой происходит формирование окончательных рабочих кодов. Таблица сопоставления кодов программы 1-2-3 аналогична таблице KB.DRV и представляет собой последовательность байтов, на нечетных местах которой находятся управляющие коды и коды из расшире- 205
08 OD 87 13 09 13 OD OB IB ОС Backspace ', ; ! ' I ! ', \ Ctrl/Right (код 87 находится в таблице КВ.DRV) таь : : ; ; Enter I Esc ... Рис. 8.4 кия ASCII, а на четных —сопоставляемые рабочие коды (начало этой последовательности приведено на рис. 8.4). Именно этим рабочим кодам 1-2-3 в дальнейшем сопоставляет все свои функции табличного процессора. Коды же от 21 до 7F используются для ввода соответствующих символов в Lotus-таблицу и вывода их на экран дисплея. Отметим, что организация ввода с клавиатуры в других функциональных модулях пакета Lotus 1-2-3 аналогична рассмотренной. Отличаются лишь таблицы сопоставления кодов каждого модуля. Поэтому в результате двухэтапного переопределения клавиш в каждом модуле оказываются задействованными только те клавиши, нажатия которых реализуют функции данного функционального модуля (при этом нажатия одних и тех же клавиш могут вызывать в разных модулях различные действия). При нажатии всех остальных клавиш выдается звуковой сигнал. Разобравшись с организацией ввода с клавиатуры табличного процессора 1-2-3 (подчеркнем, что для этого мы не использовали ничего, кроме исполняемого файла 123.ЕХЕ и отладчика Advanced Fullscreen Debug, с помощью которого мы проследили за действиями программы в ожидании ввода и после нажатия клавиш), становится понятным, почему возникает проблема ввода букв русского алфавита. Действительно, при нажатии буквенных клавиш на русском регистре генерируется стандартный ASCII-код, главный байт которого — код из расширения таблицы ASCII — передается драйвером KB.DRV без изменения в основную программу 1-2-3. Так как 1-2-3 получает код из расширения таблицы ASCII, то она обращается к таблице сопоставления кодов. В результате при вводе букв русского алфавита реализуются функции табличного процессора или выдается звуковой сигнал. Понятно также, что для обеспечения ввода букв русского алфавита недостаточно изменения лишь условия 206
обращения к таблице сопоставления кодов программы 1-2-3, так как тогда не будут реализованы функции табличного процессора. Какой же выход из создавшегося положения? Можно ли так изменить программу, чтобы русские буквы вводились в Lotus-таблицу, а все функции табличного процессора сохранились. Оказывается, выход существует. Дело в том, что таблица драйвера KB.DRV сопоставляет вторым байтам системных кодов нажатых клавиш коды из первых четырех столбцов расширения таблицы ASCII (от 80 до BF). Необходимо, следовательно, исправить таблицу KB.DRV таким образом, чтобы тем же самым байтам сопоставлялись коды из последних четырех столбцов расширения таблицы ASCII (от СО до FF). После этого изменить условие обращения к таблице сопоставления кодов программы 1-2-3 (сохраняя коды от 21 до BF) и исправить саму таблицу сопоставления кодов в соответствии с изменениями в таблице KB.DRV (сопоставляя рабочие коды не кодам из начала расширения таблицы ASCII, а кодам из ее конца). Итак, мы не только сохранили все функции табличного процессора (так как при нажатии клавиш, реализующих эти функции, генерируются те же самые рабочие коды), но и расширили диапазон кодов, используемых для ввода в Lotus-таблицу. Таким образом, мы получили возможность вводить в Lotus-таблицу дополнительно символы с кодами от 80 до BF. И, следовательно, для обеспечения ввода букв русского алфавита мы должны использовать кодовую таблицу ЕС-1840, в которой набору букв русского алфавита соответствуют коды от 80 до BF (такую таблицу использует, например, версия MS-DOS, распространяемая советско-болгарским институтом «Интерпрограмма». На рис. 8.5 и 8.6 приведены исправленные таблица KB.DRV и таблица сопоставления кодов программы 1-2-3 (их на- 00 СА OF CB 10 ГЭ 11 F8 Z\ri/вгеак ; ! ; ; ; ; sn.ft/таь : ; : ait/q ; A» t/W 12 E6 Al t/E Рис. 8.5 207
.08 OD C7 13 09 13 OD OB IB OC ©acK space '. Ctrl/R«ght код С7 находится в таблице KB DRV) Tab Enter ! : Esc Рис. 8.6 чала), используя которые, можно вводить в Lotus-таблицу русские буквы. Отметим в заключение, что все исправления в программы вносятся средствами стандартных утилит. Сделаем некоторые выводы. 1. Рассмотрена организация ввода с клавиатуры во время рабочего сеанса программ пакета Lotus 1-2-3, использующего следующие типичные для многих программных продуктов приемы повышения эффективности и надежности программ — сведение системных кодов нажатых клавиш к однобайтовому рабочему коду и «защита от дурака» (блокировка нажатий клавиш, не используемых программой). 2. Показана возможность обеспечения ввода в Lotus- таблицу русских букв, что, учитывая типичность использованных приемов организации ввода с клавиатуры в пакете Lotus 1-2-3, позволяет рассчитывать на успешную адаптацию многих других зарубежных программ. 8.3. Система LP88 для решения оптимизационных задач Мы договорились, что компонентами проектируемой здесь собственной инструментальной среды станут адаптированный пакет Lotus 1-2-3 со всеми его богатыми возможностями и пакет решения оптимизационных задач LP83, разработанный в 1986 г. фирмой «Сансет Софтвэа» (Sunset Software, California, USA). Адаптированной версии пакета LP83 присвоим номер 88. Надо заметить, что приведенное описание LP88 вполне достаточно для начала самостоятельной работы с ним. Некоторые первоначальные сведения о пакете. 1. Для решения задач большой размерности используются методы виртуальной памяти. При этом LP88 использует до одною мегабайта внешней памяти. 208
- 2. LP88 использует числа с плавающей точкой с двойной точностью во всех вычислениях. Используются пятнадцать значащих цифр. Это существенно при решении больших задач линейного программирования. Использование сопроцессора 8087/80287 сокращает время итераций в десять раз. 3. LP88 может обрабатывать любой класс задач линейного программирования. Определение задачи — общее, не требующее привлечения какой-нибудь специальной техники. Однако сложные модели задач требуют интерактивного режима работы. 4. Кроме собственного формата ввода LP88 допускает формат системы математического программирования (MPS-формат), который является промышленным стандартом США и принят в отечественных пакетах прикладных программ линейного программирования («Линейное программирование^» и «Линейное программирование в АСУ» [20]), реализованных на ЭВМ ЕС, что обеспечивает совместимость с подобными системами для больших ЭВМ. 5. LP88 позволяет также формулировать задачи непосредственно в Lotus- или Symphony-таблицах. 6. Вывод может быть сделан на диск для дальнейшей обработки другими программами, например Lotus 1-2-3 (это полезное свойство и будет использовано для организации совместной работы LP88 и Lotus 1-2-3). 7. LP88 снабжена набором средств для послеоптими- зационного анализа. 8. LP88 предоставляет возможности форматной печати результатов решения задач. 9. Задачи могут быть прерваны в процессе выполнения и продолжены в дальнейшем. Оригинальный диск системы LP88 состоит из LP88.EXE — полная система, занимает приблизительно 150 Кбайт на диске; README.DOC — файл документации. Для генерации LP88 можно использовать команду DOS «COPY». Например: А >COPY LP88.EXE В: Здесь система LP88 будет скопирована на пользовательский диск, установленный в дисководе В. Отметим, что для правильного функционирования скопированная версия должна иметь имя LP88.EXE. Ю Смирнов Н. Н. 209
Система LP88 в процессе выполнения создает два рабочих файла, обращаясь к дисководу по умолчанию. Поэтому необходимо иметь рабочий диск в этом дисководе. Имена дисководов для рабочих файлов можно изменить» Для этого можно ввести, например, следующие директивы: A>LP88. WORK1FILE A WORK2FILE А CONFIGURE YES В данном случае выбран дисковод А. Системе LP88 также необходимо знать, сколько свободной памяти имеется в ЭВМ. Эта возможность реализуется автоматически в системах PC-DOS и других достаточно близких системах. В противном случае величину свободной пемяти необходимо задавать. Для задания, например, 384 Кбайт свободной памяти необходимо ввести: A>LP88. MEMORY 384 CONFIGURE YES Если величина свободной памяти неизвестна, то можно сначала указать минимальную величину параметра MEMORY-256. Системы, в которых должен использоваться параметр MEMORY, это MS-DOS, WANG PC, DEC Rainbow, Zenith, TI и др. Формулировка задачи и решение задачи. Каждая задача линейного программирования имеет набор ограничений, которые накладываются на ресурсы, или некоторые условия минимакса, которые должны быть выполнены. Сформулированная задача должна также иметь целевую функцию, которая описывает или полную «прибыль», получаемую в результате определенных действий, или полную «стоимость» определенного ряда действий. Слова «прибыль» и «стоимость» используются здесь в общем смысле. Целевая функция является экономическим понятием, но не обязательно выражается в денежных единицах. Она может выражаться и в единицах времени или производительности. Цель задачи линейного программирования — максимизировать или минимизировать значение целевой функции, подверженной определенным ограничениям. Любая задача линейного программирования для решения ее системой LP88 может быть сформулирована и записана в файл либо в собственном формате LP88, либо в MPS-формате, либо, как уже указывалось в Lotus- или Symphony-таблицах. 210
Для формулировки задачи в собственном формате LP88 может использоваться любой текстовый редактор, совместимый со стандартным системным текстовым редактором EDLIN, например TEXIP, BRIEF и др. Чтобы описать основные требования ввода в системе LP88, мы будем использовать пример задачи размещения заказов. Сначала опишем задачу: «Объединение имеет три завода, каждый из которые производит один и тот же продукт. Этот продукт производится по договорам. Задача состоит в определении того, на каких заводах заказы должны быть размещены. В производственный план должны включаться следующие договоры: :азчик W X Y Z Размер заказа, шт. 700 1500 400 500 Расходы за Завод А 8.00 11.00 6.00 9.00 доставку ед. руб. Завод В 4.00 10.00 12.00 5.00 продукта, Завод С 6.00 8.00 7.00 14.00 Производственные издержки и производительность заводов различны и приведены в следующей таблице: Завод Стоимость ед. продукта, Максимальный выпуск, руб. шт. А 45 1000 В 40 800 С 50 1500 Таким образом, задача состоит в нахождении минимизирующего издержки производственного плана размещения заказов по заводам — производителям «данного продукта». Выберем следующие обозначения для переменных задачи. «хРу» будет означать часть заказа заказчика х, производимого на заводе у. Например, WPA — производимая на заводе А часть заказа заказчика W. Система LP88 использует четыре раздела для описания любой задачи (модели). Разделы начинаются с одного из следующих слов и должны располагаться в следующем порядке: 1) . . TITLE [заглавие] 2) . . OBJECTIVE [цель] 3) . . BOUNDS (необязательный) [границы] 4) . . CONSTRAINTS [ограничения J 10* 211
Первый раздел обязательный. Он начинается о . .TITLE, за которым должно следовать название задачи. Для примера размещения заказов: . .TITLE Задача размещения заказов Второй раздел — OBJECTIVE — также обязательный, он следует за TITLE-разделом и определяет: 1) является ли целевая функция минимизируемой или максимизируемой; 2) линейные коэффициенты каждой переменной (в том числе и 0); 3) имена всех переменных, используемых в следующих разделах (имя ограничено 8 символами). Второй раздел примера размещения заказов будет содержать: . .OBJECTIVE MINIMIZE * транспортные издержки 8.00 WPA + 4.00 WPB + 6.00 WPC 11.00 ХРА + 10.00 ХРВ + 8.00 ХРС 6.00 YPA + 12.00 YPB + 7.00 YPC 9.00 ZPA + 5.00 ZPB + 14.00 ZPC * производственные издержки (себестоимость) 45.00 (WPA + ХРА + YPA + ZPA) 40.00 (WPB + ХРВ + YPB + ZPB) 50.00 (WPC + ХРС + YPC + ZPC) В LP88 строка, начинающаяся с символа *, является строкой комментария и может находиться в любом месте. Все переменные должны быть определены в OBJECTIVE-разделе, даже если соответствующий коэффициент равен 0. Следующий раздел — BOUNDS—используется для описания ограничений, определяющих границы изменения переменной. Этот раздел вызывает для использования высокоэфффективный граничный алгоритм. Этот раздел не является обязательным, но если он существует, то должен следовать за OBJECTIVE-разделом. Примеры: . .BOUNDS А >= 10 В <= 5 С >= 10 <= 20 В нашем примере BOUNDS-раздел не используется. 212
Последний раздел — CONSTRAINTS — используется для того, чтобы: 1) пометить ограничение; 2) определить коэффициенты при переменных; 3) определить тип ограничения <=, >=, =; 4) определить значение правой части. Этот раздел является обязательным. Для примера размещения заказов: . .CONSTRAINTS * требования заказчиков ORDER W: WPA + WPB + WPC = 700 ORDER X: ХРА + Х'РВ + ХРС = 1500 ORDER Y: YPA + YPB + YPC = 400 ORDER Z: ZPA + ZPB + ZPC = 500 * возможности заводов CAP A: WPA + XPA + YPA + ZPA <= 1000 CAP B: WPB + XPB + YPB + ZPB <= 800 CAP C: WPC + XPC + YPC + ZPC <= 1500 Теперь, объединяя все разделы, получаем формулировку задачи: . .TITLE Задача размещения заказов . .OBJECTIVE MINIMIZE * транспортные издержки 8.00 WPA + 4.00 WPB + 6.00 WPC 11.00 ХРА + 10.00 ХРВ + 8.00 ХРС 6.00 YPA + 12.00 YPB + 7.00 YPC 9.00 ZPA + 5.00 ZPB + 14.00 ZPC * производственные издержки 45.00 (WPA + ХРА + YPA + ZPA) 40.00 (WPB + ХРВ + YPB + ZPB) 50.00 (WPC + ХРС + YPC + ZPC) . .CONSTRAINTS * требования заказчиков ORDER W: WPA + WPB + WPC = 700 ORDER X: XPA + XPB + XPC = 1500 ORDER J: YPA + YPB + YPC = 400 ORDER Z: ZPA + ZPB + ZPC = 500 * возможности заводов CAP A: WPA + XPA + YPA + ZPA <=1000 CAP B: WPB + XPB + YPB + ZPB <= 800 CAP C: WPC + XPC + YPC + ZPC <= 1500 213
Предположим, что пример размещения заказов записан в файле с именем PRODUCT.LP. Для решения задачи в командной строке введите LP88 с именем файла и любыми параметрами командной строки системы LP88. Сначала LP88 ответит авторским сообщением, а затем последует листинг, решение и отчет по задаче. Например, в ответ на вызов системы с А>: A>LP88 PRODUCT LP88 PRODUCT <- - - эхо командной строки Отметим, что если файл, содержащий описание задачи, имеет расширение имени, отличное от LP, то имя файла необходимо указывать полностью. Отчет по задаче. Отчет по задаче может содержать до четырех сообщений, а именно: сообщение о решении, сообщение об ограничениях, сообщение о стоимостном анализе и сообщение о маргинальном анализе, распечатка которых управляется параметрами командной строки LP88, соответственно SOLUTION, CONSTRAINTS, COSTANALYSIS и MARGINANALYSIS. Первые два сообщения распечатываются по умолчанию. Последние два сообщения являются сообщениями послеоптимизацион- ного анализа. Вернемся к примеру размещения заказов, отчет по задаче будет начинаться следующим сообщением: A>LP88 PRODUCT начало выполнения Статистика— LP88 Версия 1.00 < [а] Машин, память: 512 Кбайт < [б] Вспом. память: 407 Кбайт < [в! Переменных: 12 < [г1 Ограничений: 7 < [д] 3 LE, 4 EQ, 0 GE. Ненулевых ЛП элементов: 24 < [е] Диск, простр.: 0 Кбайт < [ж| Исп. простр.: 1 Кбайт < [з| Возможн.: 3.4% исп. < [и 1 Оценочное время: 00 : 00 : 00 < 1к 1 Итер 9 In YPA Out ZPC < [л] Время решения: 00:00:02 < [м] АЛЬТЕРНАТИВНЫЕ РЕШЕНИЯ < [н] 214
где: [а]... номер текущей версии системы LP88; [61... объем свободной памяти ЭВМ; [в]... объем доступной памяти для обслуживания матрицы; [г1... число переменных (столбцов) задачи; [д1... число ограничений (строк) задачи и число ограничений <=, = и >=; [el... число ненулевых элементов в матрице, не считая слабых (избыточных) переменных; [ж]... объем необходимого для решения задачи пространства на диске; [з]... объем используемого обслуживающего пространства; [и]... возможности LP88 применительно к данной задаче; [к]... оценочное время решения задачи, чч: мм: ее; [л]... число итераций для решения задачи; [м]... точное время решения задачи, чч: мм: ее; [н]... тип решения. Сообщение о решении показывает оптимальные значения переменных и значение целевой функции. Для рассматриваемого примера получим следующий протокол: Файл: Product <- [а] [б] -* 03/03/89 10 : 20 : 30 Стр. 1 — 1 РЕШЕНИЕ (Минимум): 163, 900.00 <- [в] Переменная Значение Цена Переменная Значение Цена WPA WPC ХРВ YPA YPC 0.00 0.00 400.00 0.00 50.00 51.00 57.00 «-[г] <-[д] «-[el «-[ж J и т. д. где: [al... имя файла, содержащего описание задачи; [б]... штамп даты. В Page 1—1 первое число — «номер решения», второе число — номер страницы; [в]... минимальное значение целевой функции — 163, 900.00; frl... имя переменной — WPA; !д1... оптимальное значение переменной WPC — 0.00; [el... стоимостный коэффициент при переменной ХРВ —50.00; !ж1... символ Б, предшествующий имени переменной, означает, что переменная базисная. 215
Сообщение об ограничениях показывает значения левых частей ограничений при подстановке оптимальных значений переменных. Для рассматриваемого примера получим: Файл: Product 03/03/89 10 : 20 : 30 Стр. 1—2 CONSTRAINTS: Задача размещения заказов < [а] Ограничен. Значение П. ч. Ограничен. Значение П. ч. ORDER W 700.00 ч-[б] ORDER Y 400.00= <-[в] САР А 1,000.00 < 1,000.00 ч-[г] Б САР С 1,300.00 < 1,500.00 ч-[д] Сумма ошибок: 0.000000 -> [е] где: [а]... название задачи; [б]... значение ограничения ORDER W в решении,' [в]... ORDER Y — ограничение типа равенства; [г]... указанное в описании задачи значение правой части ограничения САР А; [д]... символ Б означает, что слабая (избыточная) переменная — базисная; [е]... оптимальные значения переменных подставляются в левые части ограничений, полученные результаты сравниваются с правыми частями и абсолютные значения разностей суммируются в «Сумма ошибок». Отклонение от нуля означает ошибку округления или неустойчивость. Запись решения на диск. Оптимальные значения переменных и ограничений могут быть занесены в файл для дальнейшей обработки пользовательской программой или любым другим пакетом. Формат файла следующий: «название задачи» число ограничений, число переменных, значение целевой функции «имя переменной 1», оптимальное значение 1, коэффициент! «имя переменной 2», оптимальное значение 2, коэффи- пиент2 «имя ограничения 1», вычисленное знач., значение левой части 1 правой части 1 «имя ограничения 2», вычисленное знач., значение левой части 2 правой части 2 • ¦ • 216
Для записи решения в файл используется параметр командной строки ACTIVITY. Например: A >LP88 PRODUCT ACTIVITY В : SAVETHEM.DAT+ COSTANALYSIS NO + MARGINANALYSIS N0+ SOLUTION NO CONSTRAINT NO В этом примере решение сохраняется в файле В : SAVETHEM.DAT, а четыре стандартных сообшения опускаются. Отметим, что система LP88 может записать оптимальные значения переменных и ограничений непосредственно в Lotus-табличный файл (см. ниже). Выбор параметров командной строки. Приведем все параметры командной строки LP88 и дадим краткую характеристику основных из них. Отметим, что в командной строке можно указывать любое число параметров, хотя обычно используются только некоторые. Параметры и значения при вводе разделяются пробелами. Формат командной строки следующий (параметры расположены в столбик вместе со своими возможными значениями; напомним, что 9 означает число, X — символ)} LP88 х : filename.ext OUTPUT CON: | LPT1: | С0М1: х : filename PAGESIZE 999 LINESIZE 999 LISTINPUT NO | YES TMARGINS 99 BMARGINS 99 LMARGINS 99 WAIT NO | YES FIELDSIZE 99 DECIMALS 99 EUROPEAN NO | YES ALTERNATE 99 SOLUTION NO | YES CONSTRAINTS NO | YES COSTANALYSIS NO | YES MARGINANALYSIS NO | YES DEFAULTS NO | YES COPIES 999 CONFIGURE NO | YES TIMEADJUST 999 METHOD 1 | 2 COMMENTS X 217
W0RK1FILE X WORK2FILE X WARNINGS NO | YES PASSWORD XXXXXXXX NEWPASSWORD XXXXXXXX SORTS NO | YES SYMBOLICS 999 CYCLE NO | YES ACTIVITY x : filename.ext MEMORY 999 VARMASKS XXXXXXXXXXXXX CONMASKS XXXXXXXXXXXXXX Следующие параметры используются только для MPS-формата: MAXIMIZE NO | YES OBJECTIVE XXXXXXXX RHS XXXXXXXX RANGES XXXXXXXX BOUNDS XXXXXXXX Здесь x : iilename.ext — имя файла, содержащего описание задачи (модели). Значение расширения имени файла по умолчанию — LP. OUTPUT — задает устройство, на которое выводится отчет по задаче. Предусмотрены следующие значения: CON: — вывод на терминал; LPT1: — вывод на печатающее устройство^ 1; СОМ1: — вывод на коммуникационный адаптеру. Любое другое значение считается именем файла с расширением по умолчанию PRN. Значение по умолчанию — вывод на терминал. PAGESIZE — задает число выводимых строк на странице. Минимальный размер страницы — 20 строк. Значение по умолчанию зависит от OUTPUT. Значение OUTPUT Значение PAGESIZE Filename 25 CON: 25 LPT1: 66 COM1: 66 LINESIZE — задачет число символов в строке. Минимальный и максимальный размеры строки — соответственно 40 и 256 символов. По умолчанию число символов зависит от значения OUTPUT. 218
Значение OUTPUT Значение LINESIZE Filename 80 CON: 79 LPT1: 80 COM1: 132 LISTINPUT — значение YES вызывает вывод файла задачи. Значение NO — отменяет вывод. Значение по умолчанию — YES. TMARGINS — задает число пустых строк вверху каждой страницы. По умолчанию оно зависит от значения OUTPUT. Значение OUTPUT Значение TMARGINS Filename 0 CON: 0 LPT1: 2 СОМ1: 2 BMARGINS — задает число пустых строк внизу каждой страницы. По умолчанию оно зависит от значения OUTPUT. Значение OUTPUT Значение BMARGINS Filename 0 CON 0 LPT1: 1 СОМ1: 1 LMARGINS — задает число пустых символов слева на странице. Чтобы получить стандартное поле, требуемое для отчета B,5 см), необходимо ввести LMARGINS 12. Значение по умолчанию равно 0. WAIT — значение YES вызывает подсказку *** после вывода каждой страницы. Для продолжения работы необходимо нажать (ВВОД). Значение по умолчанию — N0, т. е. непрерывный постраничный вывод. FIELDSIZE — задает количество позиций, требуемых для печати чисел в сообщениях. Минимальное значение — 9. Значение по умолчанию— 11. DECIMALS — задает число значащих цифр справа от десятичной точки. Минимальное значение — 0. Значение по умолчанию — 4. ALTERNATE — задает «номер» альтернативного решения для вывода отчета. Значение по умолчанию — О, <г. е. выводится отчет обо всех альтернативных решениях. 219
SOLUTION — значение YES задает вывод сообщения о решении, значение N0 отменяет его. Значение по умолчанию — YES. CONSTRAINTS — значение YES задает вывод сообщения об ограничениях, значение N0 отменяет его. Значение по умолчанию — YES. COSTANALYSIS — значение YES задает вывод сообщения о стоимостном анализе, значение N0 отменяет его Значение по умолчанию — N0. MARGINANALYSIS — значение YES задает вывод сообщения о маргинальном анализе, значение N0 отменяет его. Значение по умолчанию — N0. DEFAULTS — значение YES вызывает печать установленных по умолчанию значений всех параметров. Значение по умолчанию — N0, т. е. печать умолчаний не производится. COPIES — задает количество распечаток каждого сообщения. Значение по умолчанию— 1. CONFIGURE — значение YES вызывает при прогоне LP88 изменение значения по умолчанию каждого введенного параметра командной строки в соответствии с указанным в командной строке значением. Значение по умолчанию — N0, т. е. все значения по умолчанию сохраняются. METHOD — задает стратегию выбора переменных, веодимых в базис. 8.4. Пример построения собственной инструментальной среды. Система Эрмитаж После того как пакет Lotus адаптирован, a LP88 изучен, можно приступить к окончательной сборке системы — организации интерфейса между программными компонентами. Учитывая большие функциональные возможности системы и место ее создания, дадим ей скромное имя Эрмитаж. Но прежде позволим себе небольшое отступление. Если вернуться к весьма недалекой истории, то можно вспомнить, с каким увлечением была подхвачена идея использования методов исследования операций для решения задач планирования и управления производством. Множество публикаций в научной литературе и прессе рселяли уверенность, что вот еще одно маленькое усилие— 220
и все проблемы экономики будут решены. Строились изящные модели, сулившие многомиллиардный экономический эффект буквально во всех сферах деятельности. Слово «оптимальный» стало одним из самых модных. Однако время шло, а проблемы не только не решались, но накапливались. Сталя появляться высказывания в том плане, что экономико-математические модели несовершенны, что они, в принципе, никогда не смогут учесть все многообразие факторов, отражающих реальную действительность, или, выражаясь научно, разрабатываемые и предлагаемые модели оказывались всегда неадекватны реальным объекта м управления. Слово «оптимальный» стало почти неприличным, вместо него вводилось сухое слово — «рациональный». Термин АСУ стал все чаще заменяться на такие наборы слов, как «система обработки данных» или «комплекс средств автоматизации». Показатель «Процент оптимизационных задач в системе», который существенно влиял на оценку научно-технического уровня разрабатываемых АСУ, исчез из отчетности вместе с задачами. Пожалуй, два фактора в основном решили судьбу практического применения экономико-математических методов: это объективно низкий уровень развития вычислительной техники, плохо соответствующий сложности ставившихся перед ней задач, и, разумеется, пресловутый затратный механизм экономики, не оставлявший места для постановки оптимизационных задач, делавший их просто бессмысленными. Сейчас можно наблюдать, что положение меняется. Первый фактор, и мы постараемся это показать, становится малозначимым, второй, будем надеяться, прекратит свое существование в самое ближайшее время. А учитывая, что экономика страны делается все более дефицитной, актуальность моделей, использующих ограничения, будет только возрастать. Возникает вопрос, готовы ли современные экономисты и руководители управлять, в хорошем смысле этого слова, предприятием в условиях «четырех С»: самоокупаемости, самофинансирования, самостоятельности и самоуправления? Такой уверенности ни у кого нет. Не будем перечислять те требования, которые предъявляются к руководителям современного предприятия — менеджерам, но то, что они должны находить оптимальные, не побоимся 221
этого слова, решения, не вызывает никакого сомнения. Управление по интуиции из общих, так сказать, соображений к успеху не приведет. Необходимо ввести в повседневную практику умение найти, поставить и решить задачу. Для этого требуется не только знание методов и методологии их решения, нужно еще и овладеть современными инструментальными средствами, делающими процесс поиска решения увлекательным и результативным. В качестве «своей» лепты в это важное дело и предлагается идея создания собственной инструментальной среды. Объединив два мощных средства в единую программную среду, мы получим качественно новое средство, существенно превосходящее по своим возможностям простую сумму использованных средств (известное явление синергизма). Процесс (в основном скрытый для пользователя) решения задачи можно проиллюстрировать следующей схемой: Эрмитаж собственная инструментальная среда. Описание и формулировка Решение задачи, задачи, подготовка получение результатов данных и их анализ Lotus 1-2-3 LP88 Отображение и обработка результатов решения К достоинствам такой технологии следует отнести простоту ввода, наглядность формулировки задачи и результатов решения, а также возможность обработки и отображения результатов любой процедурой Lotus 1-2-3. С помощью этой технологии удобно организовать многовариантные расчеты, связанные с анализом влияния переменных на целевую функцию задачи. Учитывая, что многие методо-ориентированные программные средства, как уже было отмечено, поддерживают Lotus-таблицы, таким образом организованная инструментальная среда является открытой для дальнейшего расширения. Рассмотрим работу системы Эрмитаж на примере задачи производственного планирования. 222
Описание задачи. Предприятие производит продукцию одного наименования по договорам поставок. Помимо производства в основное время предприятие имеет возможность производить продукцию и в сверхурочное время. Готовая продукция может храниться до отправки потребителям на складе. Для различных периодов времени производственная мощность предприятия, объемы поставок и емкость склада различны (табл. 8.1). Таблица 8,1 Наименование показателя Производственная мощность в основное время (количество изделий), шт. Производственная мощность в сверхурочное время (количество изделий), шт. Объем поставок продукции (коли чес: в о изделий), шт. Себестоимость выпуска изделия в основное время, тыс. руб. Себестоимость выпуска изделия в сверхурочное время, тыс. руб. Емкость склада, допустимое количество изделий на хранении, шт. Периоды I 120 30 ПО 12 15 20 и 100 40 160 12 16 40 ш 90 20 100 16 18 40 IV 140 40 100 10 14 40 V 90 60 150 11 14 40 Кроме того, условимся, что стоимость хранения единицы продукции (изделия) в течение одного периода — 0,1 тыс. руб., а начальный запас продукции — 20 шт. Задача состоит в определении того, сколько единиц продукции должно производиться в течение каждого периода с целью минимизировать сумму производственных затрат и затрат на хранение готовой продукции при условии выполнения договоров поставок. Формулировка задачи. Сформулируем задачу в терминах линейного программирования, то есть путем задания целевой функции и ограничений. Как известно, задача линейного программирования в канонической форме для случая минимизации имеет следующий вид: F (X) = sum (CiXi) -> min (целевая функция) при ограничениях: АХ >= В, 223
Xi >= О для всех i, где: X — вектор переменных задачи Xi; Ci — стоимостные коэффициенты; А — матрица технологических коэффициентов; В — вектор-столбец правых частей. Введем переменные задачи: Bi — количество продукции, произведенной в основное время в течение i-ro периода; J\i — количество продукции, произведенной в сверхурочное время за i-й период; 3i — количество готовой продукции, хранящейся на складе в течение i-ro периода. Целевая функция имеет следующий вид: F = F1 + F2 + F3, где F1 = 12В1 + 12В2 + 16ВЗ + + 10В4 + ПВ5 — сумма производственных затрат в основное время; F2 = 15Д1 + 16Д2 + 18ДЗ + 14Д4 + + 14Д5 — сумма производственных затрат в сверхурочное время; F3 = 31 + 32 + 33 + 34 + 35 — сумма затрат на хранение готовой продукции. Цель решения — найти такие Bi, Щ> 3i, при которых доставляется минимум выбранной целевой функции F при следующих ограничениях: 1) на производственную мощность в основное время: 82 <= 100; 83 <= 90; 84 <= 140; 85 <= 90; 2) на производственную мощность в сверхурочное время: Д2 <= 40; ДЗ <= 20; Д4 <= 40; Д5 <= 60; 3) на объемы хранения готовой продукции: 31 = 20; 32 <= 40; 33 <== 40; 34 <= 40; 35 <= 40; 224
для для для для для I II III IV V периода; периода; периода; периода; периода. 4) на обязательное выполнение договоров поставки: 31 + В2 + Д1 — 32 = 110 32 + В2 + Д2 — 33 = 160 33 + ВЗ + ДЗ — 34 = 100 34 + В4 + Д4 — 35 = 100 35 + В5 + Д5 = 150 Предполагается, что в конце последнего периода готовой продукции на складе не должно оставаться. Формулировка задачи в системе Эрмитаж. После вызова системы: А > AGE на экране появится стартовое меню, позволяющее выбрать любой из следующих режимов работы: с табличным процессором; вывод на печать графиков; решение оптимизационных задач; работа с файлами; выход из системы. Выбор требуемого режима осуществляется подводом курсора и нажатием клавиши «ВВОД». Рассмотрим особенности работы с табличным процессором применительно к условиям поставленной задачи. Для подготовки исходных данных к решению оптимизационной задачи необходимо выбрать, в какие места таблицы следует помещать исходные данные задачи, и, если предполагается вывод результатов в таблицу, зарезервировать места для записи. Напомним, что Lotus-табличный процессор позволяет присвоить имя любому диапазону ячеек таблицы. Под диапазоном понимается либо часть строки, либо часть столбца, либо блок ячеек. Система LP88 обращается только к тем диапазонам Lotus-таблицы, которые имеют следующие имена: 88TITLE (необязательный) 88VARIABLE; 88COST; 88LOWER (необязательный); 88UPPER (необязательный); 88CONSTRAINT; 88VA (необязательный); 88СА (необязательный); 88VR (необязательный); 88CR (необязательный). 88TITLE — имя диапазона ячеек, содержащих название задачи. Этот диапазон необязательный. Название задачи отображается вверху каждой страницы сообщений системы LP88. Максимальный размер названия — 225
128 символов. В случае, когда ширина страницы меньше размера названия, последнее сокращается. 88VARIABLE — имя диапазона ячеек, содержащих все переменные задачи, независимо от того, входят ли какие-то переменные в выражение для целевой функции или нет. Ячейки, содержащие переменные задачи, должны иметь диапазон либо части строки, либо части столбца. В каждой ячейке должно быть записано только одно имя переменной длиной от 1 до 8 символов, причем имена переменных не должны повторяться. В диапазон нельзя включать пустые ячейки. Отметим, что число ячеек с переменными задачами используется для проверки других диапазонов — ячеек со стоимостными коэффициентами, ограничениями, оптимальными значениями. Максимальное число переменных — 253. 88COST — имя диапазона ячеек, содержащих стоимостные коэффициенты или коэффициенты целевой функции. Ячейки, содержащие стоимостные коэффициенты, должны иметь диапазон либо части строки, либо части столбца. В таблицу вводятся только ненулевые коэффициенты. Однако число ячеек диапазона стоимостных коэффициентов должно совпадать с числом переменных. 88LOWER и 88UPPER — имена диапазонов ячеек, содержащих прямые ограничения задачи, то есть такие, которые непосредственно ограничивают область значений переменных. Например: 31 = 20 или 20 <= 31 <= 20; 32 <= 40. Эти диапазоны необязательны, так как прямые ограничения могут быть установлены в диапазоне 88CONSTRAINT. Однако использование диапазонов 88LOWER и 88UPPER предписывает системе LP88 применить при решении задачи специальный высокоэффективный алгоритм. 88LOWER—диапазон ячеек, содержащих нижние границы переменных. 88UPPER — диапазон ячеек, содержащих верхние границы переменных. Ячейки, содержащие нижние или верхние границы переменных, должны иметь диапазон либо части строки, либо части столбца. В таблицу вводятся только ненулевые значения нижних границ и конечные значения верхних границ. Однако число ячеек 226
диапазона верхних или нижних границ должно совпадать с числом переменных. 88CONSTRAINT — диапазон ячеек, содержащих ограничения задачи. Этот диапазон является обязательным. Первая ячейка каждой строки диапазона должна содержать метку ограничения. Длина метки ограничена 8 символами. Следующие ячейки строки должны содержать технологические коэффициенты-ограничения, затем вводятся тип ограничения (<=, = , >=) и значение правой части. В каждую строку вводятся только ненулевые технологические коэффициенты. При этом число ячеек в каждой строке диапазона должно быть равным три плюс число переменных. Следующие диапазоны являются необязательными. Они могут использоваться для записи результатов решения задачи непосредственно в таблицу. В диапазон 88VA помещаются оптимальные значения переменных; в диапазон 88СА — значения ограничений на оптимальном решении. Для переменных, не влияющих на оптимальное решение, в диапазоне 88VR помещаются значения минимальных возможных отклонений соответствующих коэффициентов целевой функции, которые обеспечивают влияние этих переменных на оптимальное решение. В диапазон 88CR помещаются значения избыточности ограничений на оптимальном решении. Число ячеек диапазонов 88VA и 88VR должно совпадать с числом переменных, а диапазонов 88СА и 88CR — с числом ограничений задачи. Ниже приводится рекомендуемое расположение исходных данных задачи и диапазонов ячеек для записи оптимальных значений переменных в Lotus-таблице (показан фрагмент таблицы, видимый на экране, рис. 8.7). Диапазонам ячеек присвоены следующие имена: Имя диапазона Диапазон ячеек 88TITLE А1 ... Е1 88VARIABLE D3 ... R3 88COST D5 ... R5 88LOWER D7 ... R7 88UPPER D8 ... R8 88CONSTRAINT СЮ ... Т15 88VA D17 ... R17 227
1ЧЭ 00 ABCDEFGHIJK i Задача производственного планирования г 3 Переменные 4 5 Коэффициенты 6 7 Нижние границы 8 Верхние границы 0 Ю Ограничения: 11 период1 12 период2 13 периодЗ 14 период4 15 периодб 16 17 Оптимум: В1 12 20 В2 12 100 ВЗ 16 90 В4 10 140 В5 1 1 90 Д1 15 30 Д2 16 40 ДЗ 18 20 Рис» 8 Л
Отметим, что комментарии к исходным данным задачи могут находиться в любых ячейках таблицы, кроме указанных в 88-диапазонах. Это позволяет не только красиво и удобно для чтения разместить исходные данные конкретной задачи, но и использовать все адресуемое пространство таблицы для решения других задач и проведения промежуточных расчетов. После окончания формирования таблицы исходные данные записываются в виде файла под любым допустимым именем, например PLAN. Решение оптимизационной задачи в системе Эрмитаж. После завершения подготовки исходных данных, для последующего решения оптимизационной задачи следует перевести ЭРМИТАЖ в соответствующий режим. На экране появляется меню, с помощью которого в режиме диалога будут осуществляться выбор и настройка параметров, регламентирующих процесс решения и задающих условия отображения результатов (имя файла с исходными данными, метод решения, следует ли печатать отчет о решении, куда поместить результаты решения, формат печати и т. д.). Для решения рассматриваемой задачи производственного планирования система ЭРМИТАЖ обратится к системе LP88, которая начнет считывать исходные данные задачи из файла исходных данных (в нашем случае PLAN), интерпретируя их в собственный формат. После этого система LP88 решает задачу, выводит отчет о решении и, если было задано, записывает оптимальные значения переменных в зарезервированные ячейки таблицы. Если теперь требуется проиллюстрировать результаты решения, необходимо выйти п режим деловой графики Lotus. Вывод полного отчета требуется только на этапе создания экономико-математической модели. Если модель прошла апробацию, результаты решения в виде оптимального плана целесообразно помещать непосредственно в таблицу. Ниже приводится полный отчет о решении задачи. Раздел 1. Контроль начальных условий . .TITLE (88TITLE) Имя: Задача производственного планирования . .OBJECTIVE (88VARIABLE) 229
(88COST) Цель: МИНИМУМ Переменные: 15 12.0000 В1 12.0000 В2 16.0000 ВЗ 10.0000 В4 11.0000 В5 15.0000 Д1 16.0000 Д2 18.0000 ДЗ 14.0000 Д4 14.0000 Д5 0.1000 31 0.1000 32 0.1000 33 0.1000 34 0.1000 35 ¦ .BOUNDS (88LOWER) (88UPPER) Нижние и 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 20.0000 0.0000 0.0000 0.0000 0.0000 верхние < = <= <= <= <= <= <= <= <= <= <= <= <= <= <= В1 В2 ВЗ В4 В5 Д1 Д2 ДЗ Д4 Д5 31 32 33 34 35 границы < = <=" <= <= <=¦ < = <= <= <= <= <=¦ < = <= <= <= 120.0000 100.0000 90.0000 140.0000 90.0000 30.0000 40.0000 20.0000 40.0000 60.0000 20.0000 40.0000 40.0000 40.0000 40.0000 . .CONSTRAINTS (88CONSTRAINT) Строка: период1 Элементов: 4 1.0000 В1 1.0000 Д1 1.0000 31 — 1.0000 32 = 110.0000 230
Строка: период2 Элементов: 4 1.0000 В2 1.0000 Д2 1.0000 32 —1.0000 33 = 160.0000 Строка: периодЗ Элементов: 4 1.0000 ВЗ 1.0000 ДЗ 1.0000 33 —1.0000 34 = 100.0000 Строка: период4 Элементов: 4 1.0000 В4 1.0000 Д4 1.0000 34 —1.0000 35 = 100.0000 Строка: периодб Элементов: 3 1.0000 В5 1.0000 Д5 1.0000 35 =» 150.0000 . .ACTIVITY (88VA) (88СА) . .REDUCEDCOST (88VR) (88CR) Статистика— LP88 Версия 1.00 Машин, память: 512 Кбайт Вспом. память: 279 Кбайт Переменных: 15 Ограничений: 5 О <=, 5=, 0 >=. Ненулевых ЛП элементов 19 Диск, простр: 0 Кбайт Нсп. простр: 1 Кбайт Возможн.: 3.4% исп. Оценочное время: 00 : 00 : 00 Итер 16 Время решения: 00 : 00 : 03 ЕДИНСТВЕННОЕ РЕШЕНИЕ 231
Раздел 2. Сообщение о решении Файл: plan 31/03/89 12 : 34 : 55 Стр. 1—1 РЕШЕНИЕ (Минимум) : 7, 391. 0000 Задача производственного планирования Переменная В1 В2 ВЗ В4 В5 Б Д1 Б Д2 ДЗ Д4 Б Д5 31 32 Б 33 34 Б 35 Значение 120.0000 100.0000 90.0000 140.0000 90.0000 10.0000 30.0000 0.0000 0.0000 20.0000 20.0000 40.0000 10.0000 0.0000 40.0000 Цена 12.0000 12.0000 16.0000 10.0000 11.0000 15.0000 16.0000 18.0000 14.0000 14.0000 0.1000 0.1000 0.1000 0.1000 0.1000 Раздел 3. Сообщения об ограничениях Файл: plan 31/03/89 12 : 34 : 55 Стр. 1—2 ОГРАНИЧЕНИЯ: Задача производственного планирования Ограничен. Значение Пр. часть 110.0000= 110.0000 160.0000= 160.0000 100.0000= 100.0000 100.0000= 100.0000 150.0000= 150.0000 0.000000 период1 период2 периодЗ период4 пер и од 5 Сумма ошибок: Наш комментарий можно снабдить девизом: новое — хорошо забытое старое. Мы не только получили решение задачи, но и построили зкономико-математическую модель, которая может быть передана даже пользователю, не знающему ничего про линейное программирование. При необходимости рассчитать оптимальную производственную программу теперь достаточно откорректировать исходные данные в таблице. Спектр использования линейного программирования достаточно широк, кроме того, многие задачи могут быть сведены к задаче линейного программирования. По этой проблеме имеется обширная литература. Для первого знакомства рекомендуем работу [61. 232
Глава 9. ЛОКАЛЬНЫЕ СЕТИ ЭВМ 9.1. Принципы построения локальных вычислительных сетей По мере широкого внедрения средств вычислительной техники во все области человеческой деятельности проблемы организации взаимодействия между различными ЭВМ в учреждениях, организациях и на предприятиях (обмен информацией, совместное использование ресурсов, создание совместно используемых архивов, баз данных, баз знаний, коллективное принятие решений, планирование, проектирование, производство, управление и многое другое) становятся крайне актуальными. Решение этих проблем, объективно отражающих потребность научно- технической революции, связывается с созданием сетей ЭВМ. Несмотря на, казалось бы, идеальные условия в нашей стране (имеется в виду сохраняющийся принцип максимальной централизации управления) для организации общегосударственной системы сбора и передачи данных, длительная попытка создать достаточно разветвленную национальную сеть, открывающую доступ многих пользователей к огромным совокупным запасам знаний и информации, оказалась до сих пор нереализованной. Для многих сейчас стало ясно, что это является едва ли не главным тормозом в развитии научно-технического прогресса. Числом не малая армия научных работников и специалистов представляет собой группы и группки «средневековых кустарей», обреченных на вечное затворничество в своих лабораториях и отделах. Если к этому добавить и трудно распространяемое печатное слово, сравнение окажется не слишком сильным. Наиболее подготовленные и прогрессивно мыслящие руководители предприятий пытаются частично решить проблему обмена информацией, по крайней мере, в рамках своих организаций. Для этого закупаются или изго- 233
тавливаются сетевое оборудование и программное обеспечение. Свои услуги в создании сетей ЭВМ активно предлагают зарубежные фирмы. Учитывая, что к настоящему времени разработано свыше ста различных сетей только ПЭВМ, сделать правильный выбор оказывается не всегда просто, тем более, что для многих, в том числе и для специалистов, вопросы практического освоения сетей ПЭВМ являются новыми. Поэтому здесь мы постараемся сообщить тот необходимый минимум сведений о сетях ЭВМ и, главным образом, ПЭВМ, который для большинства пользователей будет вполне достаточным. Локальная вычислительная сеть (ЛВС) — это система для взаимосвязи двух или более коммуникационных устройств, обладающая следующими характеристиками: физическая полносвязность, то есть устройства связаны друг с другом непрерывной физической средой, например коаксиальным кабелем; каждое пользовательское устройство в сети может установить связь с другим пользовательским устройством; простота реконфигурации системы; ограниченность размещения ЛВС пределами одного- двух зданий (<=3 км); высокая скорость передачи данных A—10 Мбит и выше). При необходимости реализуется выход ЛВС на глобальные вычислительные сети, зона действия которых может простираться сколь угодно широко, достигая межнациональных масштабов. Использование ЛВС определяет новую стратегию в обработке данных, которая заключается в создании распределенных систем, обладающих высокими скоростью, надежностью, модульностью, расширяемостью, живучестью и готовностью при относительно низкой стоимости. ЛВС позволяет большому количеству пользователей разделять такие ресурсы, как диски, печать, загружаемые программы и файлы данных. Среди наиболее важных характеристик ЛВС обычно выделяют следующие: физическая среда передачи; метод доступа к среде; топология сети; максимальное число подключаемых узлов; максимальная скорость передачи данных. На сегодня чаще всего используются следующие типы физической среды передачи: витая пара (ВП); узкополос- 234
ный коаксиальный (УК) кабель; широкополосный коаксиальный (ШК) кабель; оптоволоконный (ОВ) кабель. Витая пара характеризуется относительно низкой стоимостью и возможностью легкого наращивания. К недостаткам следует отнести относительно низкую скорость передачи данных A Мбит/с) и малую помехозащищенность. Витая пара обычно используется для подключения телефонных аппаратов к АТС учреждений, поэтому появляется возможность построения ЛВС на существующих абонентских каналах. Коаксиальный кабель характеризуется более высокой по сравнению с ВП скоростью передачи данных (до 10 Мбит/с). Недостатком кабеля является то, что конфи* гурация сети должна быть известна уже в момент прокладки кабеля. Дальнейшее развитие сети возможно лишь путем установки повторителей. Широкополосный коаксиальный кабель позволяет одновременно с передачей цифровых данных в нескольких частотных диапазонах передавать телевизионные (ТВI сигналы и речь. Использование оптоволоконного кабеля обеспечивает передачу данных со скоростью до 150 Мбит/с практически без помех. Обычно выделяют 4 типа топологий: звезда; шина (моноканал); кольцо; произвольная. Существующие методы доступа к физической среде весьма разнообразны и зависят от топологии сети. Для шинной топологии чаще всего применяется метод CSMA/CD (множественный доступ с контролем несущей и обнаружением конфликтов). В табл. 9.1 приведена классификация методов доступа [31. Таблица 9.1 Топология сети Шина Кольцо 3dезда Произвольная Случайный метод доступа CSMA/CD Вставка регистра CSMA/CD CSMA/CD Детерминированный метод централизованный Селективный опрос Групповой опрос Коммутация физического (Х.21) или логического (Х.25) соединения Коммутация частотных полос доступа децентрализованный Передача маркера Неявная передача права Передача маркера 235
В настоящее время в мире существует несколько сетевых архитектур: DNA (фирмы DEC), SNA (фирмы IBM), XNS (фирмы XEROX), DCNA (японской национальной сети), ЕСМА) европейской ассоциации промышленников), и, наконец, IS 7498 эталонной модели взаимосоединения открытых систем OSI, принятой международной организацией стандартов). Впрочем, сеть может проектироваться и как закрытая система, которая поддерживается только специфическим («нестандартным») оборудованием и программным обеспечением. Если же в перспективе ставится задача выхода создаваемой локальной сети на некоторую глобальную сеть, рационально следовать эталонной модели OSI. Эта модель состоит из 7 уровней: физический (управление оборудованием); канальный (интерфейс с оборудованием и управление логическим каналом); сетевой (межсетевые соединения); транспортный (сетевая адресация); сессий (отправка и прием сообщений); представления данных (обработка данных); прикладной (сервисные службы). Большинство разработчиков сетевых средств работают в рамках архитектуры эталонной модели открытых систем. В табл. 9.2 приведено соответствие эталонной модели другим архитектурам. Сетевое программно-аппаратное обеспечение строится для каждого узла в соответствии с сетевой архитектурой. Пользователь не видит всех уровней архитектуры. Он взаимодействует лишь с верхним (прикладным) уровнем. Для каждого уровня определены протокол уровня и интерфейсы. Протокол — набор соглашений, описывающих порядок взаимодействия между одинаковыми уровнями разных узлов. Интерфейсы уровня описывают порядок взаимодействия с уровнем, лежащим выше, и с нижележащим уровнем. Сетевое обеспечение строится таким образом, что каждый нижележащий уровень является сервером (т.е. предоставляет услуги) по отношению к вышележащему уровню. Ввиду большого разнообразия архитектур и протоколов возникает проблема соединения разных сетей. Эта проблема решается с помощью шлюзов и мостов (мост, 236
Таблица 9.2 Номер 7 6 5 4 3 2 1 Уровень Прикладной Представления данных Управления сеансами Транспортный Сетевой Канальный Физический Ста нда рт ЕСМА-85 ЕСМА-84, -86, -87 -88 ЕСМА-75 ЕСМА-72 ЕСМА-92 ЕСМА-82, -89, -90 ЕСМА-80, -81 Архитектура IBM SNA DEC DNA XEROX XNS IEEE-802.3, -802.4, -802.5, -802.6 I II III шлюз — это специальные узлы сети, обеспечивающие: первый — связь сетей одной архитектуры; второй — связь сетей с разной архитектурой). Ввиду огромного разнообразия существующих в области локальных сетей стандартов разработчики и пользователи ЛВС столкнулись с серьезными проблемами совместимости сетей. Наиболее серьезной работой в мире по стандартизации ЛВС является разработка фирмы General Motors, которая представила проект по созданию универсального протокола MAP, обеспечивающего автоматизацию процессов производства от проектирования до изготовления. Ценность проекта заключается еще и в том, что он обеспечит совместимость устройств управления, поставляемых различными фирмами-изготовителями электронного оборудования для различных типов производств. К проекту MAP присоединились такие гиганты западной индустрии, как ALLEN BRADLY, CONCORD DATA SYSTEMS, DEC, HEWLETT PACKARD, MOTOROLLA, AT&T, IBM и др. Уже появились первые изделия, работающие по протоколу MAP (производитель — FANUC). По оценкам специалистов, к 1990 г. сети на основе MAP займут свыше 75 % западного рынка производственных ЛВС. 237
MAP базируется на архитектуре семиуровневой эталонной модели OSI. Для каждого уровня специфицируются конкретные варианты протоколов. На нижних уровнях протокол ориентирован на детерминированный метод доступа с передачей маркера — TOKEN PASSING BUS (IEEE 802.4). В качестве физической среды рассматривается высокоскоростной широкополосный коаксиальный кабель с возможностями передачи данных, телевизионного изображения, речи и т. д. Протокол предусматривает создание «мостов» и «шлюзов» для обеспечения межсетевого обмена локальных сетей со сходными или различными архитектурами и для возможности выхода на глобальные сети коммутации пакетов. Топология сети является шинной (логическое кольцо) со скоростью обмена информации 10 Мбод. Можно сказать, что MAP является, по крайней мере на ближайшее время, универсальньш протоколом и, в частности, может быть использован при создании сетей для персональных ЭВМ. 9.2. Локальные сети персональных ЭВМ Особенности ЛВС для ПЭВМ. Большинство локальных сетей ПЭВМ строятся в соответствии с архитектурой семиуровневой эталонной модели для открытых систем. ЛВС персональных ЭВМ состоит, по крайней мере, из трех основных элементов. 1. Рабочие станции — ПЭВМ, на которых работают пользователи сети. 2. Сетевой сервер, который может использоваться и как рабочая станция, и как рабочее место администратора сети (базы данных). Такая система на базе ПЭВМ позволяет распределять ресурсы между пользователями. Система может поддерживать как распределенную, так и интегрированную базы данных. 3. Кабель и оборудование подключения к сети. Это оборудование, используемое для подключения рабочих станций к серверу прямо или косвенно. ЛВС может иметь дополнительные периферийные принтеры (например, дорогостоящий лазерный принтер) или диски большой емкости, которые могут подключаться прямо к серверу. Под термином «узел» обычно понимают компьютерную систему, подключенную к сети (это может быть рабочая станция или сервер). 23&
Помимо кабеля и платы сетевого адаптера используются следующие компоненты: HUB (концентратор про* водов) — обычно поддерживает от 8 до 32 станций (при звездной или распределенной звездной топологии); ре* питор (повторитель) — устройство, которое принимает сигнал и ретранслирует его в другой участок провода^ мост — устройство, которое соединяет две локальные сети одного типа; шлюз — устройство, которое соединяет две локальные сети разного типа; терминаторы (используются на концах кабеля для приема сигнала данных и предотвра* щения его отражения). Существующие методы доступа весьма разнообразны и зависят от топологии сети. Наиболее часто применяются случайный метод доступа CSMA/CD (множественный до* ступ с контролем несущей и обнаружением конфликтов, его обычно используют сети ETHERNET) и детермини* рованный метод доступа с передачей маркера TOKEN-* PASSING (сеть TOKEN RING для промышленных условий). Работа в локальной сети протекает на индивидуальных рабочих станциях. Однако функции администратора сети (централизованные или распределенные по всем станциям)' реализуются на специальных, более мощных ПЭВМ —• сетевых или ресурсных серверах. Серверами в широком смысле могут быть: файл-сервер, т. е. диск-сервер; прин* тер-сервер; сервер коммуникации и прочие специальные серверы. Пользователю, как правило, предоставляются следу* ющие функции: разделение файлов; разделение дисков (разделение псевдоустройств); защита данных (пароли); обмен сообщениями; интерфейс с прикладным уровнем; спулинг (подкачка) на удаленной печати; межсетевое соединение. ЛВС состоит из многих рабочих станций, соединенных между собой, на которых работают обычные пользователи. Сеть управляется и координируется суперпользователем— администратором сети. Он обладает следующими возможностями: изменить конфигурацию сети; добавить или удалить пользователя (речь идет, разумеется, только о конкретной ПЭВМ); передать широковещательное сообщение по всей сети; изменить атрибуты разделения ресурсов; координировать доступ к файлам. Укажем следующие параметры, участвующие в выборе ЛВС: физическая среда; топология; метод доступа; службы 239
верхних уровней. Кроме этого, существенным критерием является цена, поскольку 70 % информации обрабатывается, как правило, в месте, где она возникает. Особенностью сетей для IBM PC и ПЭВМ, совместимых с ними, является использование на нижних уровнях сетевого обеспечения специальной программно-аппаратной компоненты NETBIOS. Программное обеспечение сети ПЭВМ обычно состоит из NETBIOS, сетевой операционной системы и сетевых утилит. NETBIOS реализует нижние (физический и канальный) уровни архитектуры, Сетевая операционная система реализует верхние уровни (уровни 4—7); сетевые утилиты выполняют наиболее часто встречающиеся сетевые операции. Программное обеспечение сети обычно работает в рамках операционной системы PC-DOS или MS-DOS. К числу наиболее популярных сетей ПЭВМ можно отнести следующие: PC-NET; TOKEN RING NETWORK; ARCNET; STARLAN; 3 PLUS. В табл. 9.3 приведен более полный список сетей ПЭВМ с кратким указанием их характеристик. Помимо сетевого программного обеспечения, которое предоставляет пользователю ЛВС относительно широкий выбор сетевых услуг, существуют достаточно простые и дешевые средства, обеспечивающие телекоммуникационную связь. Для аппаратного обеспечения работы таких пакетов требуется лишь связать ПЭВМ через интерфейс RS-232C (стык С2) витой парой. Пакеты телесвязи обеспечивают передачу в асинхронном режиме символьных и двоичных (иногда только символьных) файлов между персональными ЭВМ. К числу наиболее известных пакетов телесвязи относятся следующие: CROSSTALK; SMART- TERM; SMARTCOM II, KERMIT. Одна из современных тенденций развития средств базового программного обеспечения для ПЭВМ заключается в том, что в деловые интегрированные пакеты, а также последние версии табличных процессоров, СУБД и даже текстовые процессоры наряду с традиционными функциями включаются средства телекоммуникации и сетевые процессоры. К числу пакетов, обладающих средствами для телекоммуникации, можно отнести следующие: Enable, Framework II, Symphony, Open Systems; R : BASE 5000, Clipper, Revelation и др. 24Э
Таблица 9.3 Сеть TOPS Network CLASTER/ONE ETHERNET 1553NET OMNINET Z-NET PLAN4000 STARLAN 10-NET G/NET TOKEN RING NETWORK PC NETWORK PLANSERIES HYPER- CHANNEL ARCNET S-NET PC-NET PRO-NET NET/ONE 3 PLUS VISTA LAN/PC > ¦ Фирма СЕNTRAM SYSTEM WEST NESTAR SYSTEMS XEROX VLSI SYSTEMS CORVUS SYSTEMS ZILOG NESTAR SYSTEMS AT&T FOX RESEARCH GATEWAY COMM. IBM IBM NESTAR SYSTEMS NETWORK SYSTEMS NOVELL INC. Та же ORCHID TECHNOLOGY PROTEON INC. UNGERM ANN BAS 3COM ALLEN— i BRADLEY Среда ШК вп УК УК вп УК УК вп вп вп вп, шк IBM твк УК, ов вп, шк ов, IBM шк вп, ов шк вп, шк IBM УК, ов IBM шк, J ов | УК Количество узлов 32 65 1 024 256 64 255 255 32 50 15 260 72 100 10 000 25 24 16 30 1000+ INF 255 Скорость, бит/с 230К 250К ЮМ ЗМ 1М 1М 800К 2,5М 1М 1М 1,43М 4М 2М 4М 10— 50М 2,5М 0,5М 1М ЮМ ЮМ ЮМ 2,5М Длина, км 1 0,3 0,5 0,3 0,5 2 6,5 03 0,6 2,1 2 0,6 6 9 6 2,4 2,1 2 44 3 10 Топология ш п ш ш ш ш 3 ш ш к, 3 ш 3 ш ш 3 ш 3, к ш ш ш И Смирнов Н. Н. 24J
Существующие ЛВС для персональных компьютеров достаточно схожи по выполняемым функциям. Чтобы ближе познакомиться с их возможностями, рассмотрим две сети: STARLAN и 3 PLUS. Сеть STARLAN. Эта сеть является низкоскоростной сетью, выполненной по стандарту ETHERNET. Ее основные характеристики: физическая среда — витая пара; число узлов — до 16 на концентратор проводов; скорость передачи данных — 1 Мбит/с; расстояние до концентратора — 300 м; топология — звезда; метод доступа — по IEEE 802.3. (CSMA/CD). Требования к аппаратуре и среде: MS-DOS 3.1 п ш 3.2; 512 Кбайт основной памяти (минимально); для PC/XT BIOS должен быть версии 3.31 и выше; для PC/AT BIOS должен быть версии 2.07В и выше. Сеть состоит из следующих модулей: сетевого адаптера (PNA); концентратора проводов (HUB); сетевой операционной системы (NOS), состоящей из резидентной и нерезидентной частей. Для расчета требуемого объема оперативной памяти следует исходить из того, что в ней должны размещаться следующие программы: резидентная часть MS-DOS; резидентная часть NOS; программы MS-DOS; нерезидентная часть NOS; пользовательские программы. Нерезидентная часть NOS включает модули NSHARE, NUSE, MEMO. Администратор этой сети может выполнять все функции обыкновенного пользователя и дополнительно: добавлять в сеть и исключать пользователей из сети; менять все пароли; менять условия доступа к конкретному пользователю; задавать логические имена и физические адреса ПЭВМ в сети. Сетевые функции обыкновенного пользователя ограничиваются работой с файлами и каталогами и позволяют: изменять атрибуты файла; копировать файл; удалять файл; выводить каталог диска на экран дисплея] редактировать удаленный файл; получать экран удаленной ПЭВМ] 242
создавать каталог; посылать всем сообщение (широковещание),* устанавливать параметры; назначать логическое устройство удаленному каталог у; осуществлять поиск файла по сети; блокировать или разблокировать файл; печатать файл на удаленном принтере; объявлять каталог разделяемым; объявлять используемый каталог «домашним» (монополизировать); выводить список ПЭВМ, работающих в сети; удалять каталог; переименовывать файл; выводить содержимое файла на стандартное устройство вывода STARLAN поддерживает следующие сетевые функции: разделение файлов, дисков и уаройств печати; передача сообщений (широковещание); электронная почта; защита данных; интерфейс с программами на COBOL-e, ASM-86; возможность доступа к удаленным файлам при работе с пакетами WORDSTAR, dBASE III и LOTUS 1-2-3. Удаленные файлы будут обрабатываться точно так же, как если бы они находились на собственной ПЭВМ (свойство прозрачности сети). Необходимо лишь блокировать файл перед обработкой и разблокировать его после завершения обработки. Сеть 3 PLUS. Эта сеть является среднескоростной, выполненной в стандарте ETHERNET. Ее характеристики: топология — шина; метод доступа — CSMA/CD; скорость передачи данных до 10 Мбит/с; среда передачи — коаксиальный кабель и ОВ; длина без повторителя до 300 м, с повторителем до 2,8 км; число узлов — не ограничено. Сеть объединяет два типа рабочих мест — серверы и рабочие станции. Серверы — это ПЭВМ, которые содержат общую память сети, прикладные программы, пользовательские файлы и другие разделяемые пользовательские ресурсы, такие, как электронная почта; сервер требует хотя бы один жесткий диск. Рабочие станции — это ПЭВМ в сети, на которых работают пользователи. И* 243
Часто на сервер возлагают выполнение функций рабочей станции. Если в ПЭВМ установлено и программное обеспечение как сервера, так и пользователя, то эти ПЭВМ функционируют как сервер и как рабочая станция конкурентно (конкурентный сервер). Функция программного обеспечения сервера заключается в том, чтобы получать запросы от пользователей и их обрабатывать. Пользовательское программное обеспечение имеется на всех рабочих станциях и состоит из прикладных программ, утилит сети и программ, конвертирующих команды DOS в сетевые запросы. 3 PLUS — это компьютерная сеть, оборудование которой (hardware) соединено ETHERNET-кабелем и в ПЭВМ загружено сетевое программное обеспечение 3 + SHARE. 3 + SHARE является основой для других служб семейства 3 PLUS, таких, как 3 + MAIL (электронная почта). 3 + SHARE состоит из: NAME-службы (это база данных, в которой имеется информация о пользователях и серверах); файловой службы и службы печати, которые позволяют пользователям разделять каталоги (файлы и прикладное программное обеспечение (software) и печатающие устройства. Документация, поставляемая с сетью 3 PLUS, состоит из трех разделов. 1. Документация пользователя: 3 + SHARE USER'S GUIDE (руководство пользователя по службе разделения данных и устройств); 3 + MAIL USER'S GUIDE (руководство пользователя по службе электронной почты); 3 + REMOTE USER'S GUIDE (руководство пользователя по использованию удаленной станции); 3 + BACKUP USER'S GUIDE (руководство пользователя по службе архивирования). 2. Документация администратора: 3 + SHARE ADMINISTRATOR'S GUIDE (руководство администратора по службе разделения данных и устройств); 3 + MALE ADMINISTRATOR'S GUIDE (руководство администратора по службе электронной почты); 3+REMOTE ADMINISTRATOR'S GUIDE (руководство администратора по использованию удаленной станции); 3COM NETWORK GUIDE (руководство по использованию сети 3COM). 3. Документация по инсталяции и функционированию аппаратного обеспечения: 3 SERVER GUIDE (руковод- 244
ство по работе сервера); 3 SERVER TAPE BACKUP GUIDE (руководство по использованию ленточного стримера сервера); 3 SERVER EXPANSION DISK GUIDE (руководство по использованию виртуального диска сервера); 3 SERVER MEMORY EXPANSION GUIDE (руководство по использованию расширенной памяти сервера). Расширенная память сервера — память со страничной организацией, расположенная выше первых 640 Кбайт в адресном пространстве 1 Мбайт; ETHERLINK BOARD INSTALLATION GUIDE (руководство по инста- ляиии сетевой платы ETHERLINK). В сети 3 PLUS существует деление пользователей на локальные и удаленные. Локальный пользователь 3+MAIL (пользователь, компьютер которого непосредственно подсоединен к сети через плату ETHERLINK) должен иметь для работы следующее: свободную оперативную память размером 320 Кбайт и, по крайней мере, один дисковод; плату ETHERLINK, установленную в ПЭВМ и подсоединенную к сети; пользовательское имя, зарегистрированное у сетевого сервера, и, возможно, пароль (необязательный параметр); S+SHARE-дискету с инсталятором рабочей станции (WORKSTATION STARTUP DISKETT); программное обеспечение 3+MAIL, установленное в каталог APPS на сервере. Удаленный пользователь 3+MAIL (пользователь, компьютер которого подключен к сети через модем и телефонную линию) должен иметь для работы следующее: свободную оперативную память размером 384 Кбайт и, по крайней мере, один дисковод; HAYES или MICROCOM- модем C00, 1200 или 2400 бод); программное обеспечение 3+ROUTE, установленное в сетевом сервере, который укомплектован модемом или непосредственно выходит на телефонную линию; пользовательское имя, зарегистрированное у сетевого сервера, и, возможно, пароль (необязательный параметр); дискету с пользовательским программным обеспечением 3+MAIL; дискету с инсталятором (STARTUP 3+REMOTE) рабочей станции, конфигурация которой сделана в соответствии с инструкциями 3+REMOTE USER'S GUID. 9.3. Электронная почта сети 3 PLUS Одной из интересных и полезных функций, предоставляемой пользователям практически любой коммерческой сети передачи данных, является возможность организа- 245
ции электронной почты. Рассмотрим поэтому работу, можно сказать, классической службы электронной почты 3+MAIL в сети 3 PLUS. С помощью 3+MAIL можно передавать сообщения конкретным адресатам или группе пользователей путем введения имен в список рассылки. 3+MAIL визуализируется с помощью интерактирных панелей дисплея, которые позволяют выбрать требуемую операцию: GET NEW MAIL (по;учпть свежую почту); COMPOSE A NEW MESSAGE (сформировать новее сообщение); REPLY TO A MESSAGE (ответить на сообщение); FILE A MESSAGE (занести сообщение в Файл); SAVE A MESSAGE IN PROGRESS (сохранить поступающие сообщения); READ A MESSAGE (прочитать сообщение); SEND A MESSAGE (послать сообщение); FORWARD A COPY OF A MESSAGE (передать копню сообщения); PRINT A MESSAGE (печать сообщения); DELETE A MESSAGE (удалить сообщение). На Есех панелях дисплея назначение функциональных клавиш помещается снизу. Выбор нужной функции производится нажатием соответствующей клавиши. Для всех панелей клавиша F1 — помощь. Встроенный экранпо-ориептированный редактор сообщений, называемый MED, позволяет ввести и отредактировать сообщение. MED можно использовать независимо от 3+MAIL. Допускается присоединять файлы MS-DOS (тексты програмхМ, данные) к 3+МА1Ь-сообщениям. Такие файлы, называемые присоединенными, доставляются ко всем адресатам вместе с сообщениями. Программное обеспечение 3+MAIL состоит из двух программ: одна запускается на ПЭВМ пользователя, другая — на сетевом сервере. Пользовательская часть 3+MAIL обеспечивает следующие функции: получение сообщений от пользователей сети; чтение сообщений; печать и запись в файл полученных сообщений; создание новых сообщений с помощью редактора MED; сохранение начатых, но незавершенных сообщений; отправка новых сообщений, ответы на сообщения и перемещение их к другим пользователям сети; удаление сообщений. Часть ПО 3+MAIL, размещенная на сетевом сервере, выполняет следующие функции: приемку сообщений (если существует несколько серверов в сети, то каждый из них автоматически обеспечивает своих собственных пользователей и можно не заботиться о том, кто какой сервер 246
использует); получение сообщений, адресованных пользователю, и сохранение их до тех пор, пока не будет получено указание передать их в директорий, используемый в качестве персонального почтового ящика пользователя. Работа сетевого сервера при выполнении функций электронной почты может быть проиллюстрирована с помощью рис. 9.1. Аналогия здесь следующая: почтовое отделение — сетевой сервер; дом — ПЭВМ пользователя; ящик — персональный каталог пользователя; письма — электронные сообщения. Город N Город NN 1гЯ Междугородняя почта ъ Почта ¦^ Сортировка почты ы \М Ящик 1 ¦*¦ Дом №-1 Иг Ящик 2 Дом №-2 Междугородняя почта ъ Сортировка почть! Й=п Ящик 1 Цт Дом №-1 О- Ящик 2 •Ъ- Дом №2 Рис. 9J На этом рисунке показаны два почтовых сервера, каждый из которых используется в качестве почтового отделения. Письма перемещаются между серверами с по мощью ПО серверов. Локальные пользователи посылают и получают письма по кабелю, который соединяет их ПЭВМ с почтовым сервером. Удаленные пользователи посылают и получают письма с помощью модемов через телефонные линии, которые связывают их ПЭВМ с почтовым сервером. Прежде чем послать и получить сообщение, пользователь должен зарегистрироваться у своего сетевого сервера, задав собственное пользовательское имя по команде Logging In (функция 3+SHARE). Имя состоит из трех частей: собственное имя пользователя; отдел пли отделение; организация. Части имени отделяются двоеточием (:). Пример: Рудаповский: 22 : ЦНИИ «ЦЕНТР». После получения сообщения от сетевого сервера, который работает в качестве почтового отделения, 247
3 + MAIL запоминает сообщение в почтовом яшике пользователя. Почтовым ящиком пользователя служит каталог INBOX. Любое сообщение хранится как DOS-файл. Номер сообщения, переданного 3+MAIL, — имя файла. Любое сообщение имеет расширение MSG. Любой DOS- файл, как уже говорилось, можно присоединить к 3+MAIL сообщению и послать их вместе. Для этого надо ввести имя присоединяемого файла после подсказки в заголовке сообщения. К сообщению можно присоединить до 26 файлов. Редактор сообщений MED используется при создании новых сообщений, ответах на сообщения, передачах копий сообщений. Для организации передачи сообщений сразу нескольким пользователям предусмотрено создание дистрибутивных списков (групповых имен). Список состоит из трех пользовательских имен, например, номер отдела или отделения. Дистрибутивный список обычно создается и поддерживается администратором сети, После создания дистрибутивного списка достаточно ввести только его заголовок без набора всех индивидуальных имен. При этом 3+MAIL разошлет сообщение всем лицам, входящим в дистрибутивный список. Заголовок дистрибутивного списка можно ввести в качестве адреса в любое поле пользовательского имени. При запуске 3+MAIL для локального пользователя первый раз необходимо последовательно выполнить ряд действий. 1. Запустить ПЭВМ с дискеты 3+Share Workstation Startup. Если у ПЭВМ два дисковода, то подсказка будет А>. Если есть винчестер, то стартовать можно с него, а подсказка будет С :>. 2. Зарегистрироваться у сетевого сервера, задав пользовательское имя и, если требуется, пароль. Если пользовательского имени пока нет, то необходимо, чтобы оно было создано администратором. Зарегистрироваться у сетевого сервера следует до того, как потребуется послать или принять сообщение, используя 3+MAIL. Пример: А : >LOGGIN Рудановский : 22 : ЦЕНТР/PASS-CEKPET (ВВОД) Можно опустить отдел и/или организацию, если они совпадают со значениями по умолчанию. 248
3. Присоединить каталог, который содержит 3+MAIL программу, к устройству D. Пример: A:>3F LINK D: \\ SERVER1\APPS «ВВОД», где SERVER 1 — имя Вашего сервера. 4. Сделать устройство с ПО 3+MAIL (устройство D :)' текущим устройством. Пример: D : «ВВОД». 5. Присоединить распределенный принтер к сетевому серверу. Пример: D:>3P LINK PRINT 1 «ВВОД», где PR INT 1 — имя принтера. 6. Присоединить пользовательский home-каталог к устройству Е: Пример: D:>3F LINK E : «ВВОД». 7. Проверить, не создан ли каталог INBOX администратором? Пример: D:>DIR E:\INBOX «ВВОД». 8. Если каталога нет, создать его: D>MKDIR E : INBOX «ВВОД». 9. Запустить 3+MAIL и указать, где находится INBOX: D>MAIL E:\INBOX «ВВОД». 10. При первом запуске 3+MAIL на экране появляется сообщение: * * * Drive E: does not contain a mail directory. (* * * Устройство Е: не содержит каталога для почты). Create one (Y/N)? (Создать каталог (Д/Н)?) Набрать: Y «ВВОД». 3+MAIL создает в пользовательском каталоге файл, называемый MAIL. DIR, который используется для сохранения трассы сообщений из почтового ящика пользователя. После загрузки на экране дисплея будет помещена главная панель 3+MAIL. Для запуска 3+MAIL можно создать и использовать командный файл. Первый запуск 3+MAIL для удаленного пользователя состоит в выполнении следующих шагов. 1. Загрузить ПЭВМ с дискеты 3+Remote Workstation Startup. 249
2. Набрать команду инициализации модема: A:>REMOTE SET «ВВОД», 3. Если этот процесс выполняется не первый раз, вставить дискету с INBOX-каталогом в В: и выполнить п 4. Если в первый, то с помощью утилиты FORMAT. СОМ отформатировать дискету: A:>FORMAT В: «ВВОД». 4. Вставить дискету 3+MAIL User Software (рабочая копия) в устройство А:. Запустить 3+MAIL, указав В: в качестве почтового ящика: A:>MAIL В: «ВВОД». 5. Если пользовательское имя находится в файле PROFILE. SYS, то 3+MAIL запустит процесс регистрации. Выполнить п. 6. Если нет файла PROFILE. SYS, 3+MAIL попросит ввести пользовательское имя. Удаленному пользователю требуется набрать все три части пользовательского имени. Пример: A :>LOGIN NAME? Рудановский: : 22 : ЦЕНТР «ВВОД». 3+MAIL будет спрашивать пароль как при получении, так и при посылке почты. 6. При первом запуске 3+MAIL на экране появится сообщение: ***Drive В: does not contain a mail directory. Create one (Y/N)? Введите Y «ВВОД». 3+MAIL создает файл MAIL.DIR. После правильной загрузки службы электронной почты 3+MAIL на экран дисплея будет выдана главная панель, содержащая следующую информацию: номер сообщения C+MAIL назначает номер каждому сообщению для идентификации); дату посылки сообщения («*» перед датой означает, чго сообщение не прочитано); отправитель (имя пользователя, пославшего сообщение); содержание (префикс RE: перед именем сообщения указывает на то, что оно является ответом на соответствующее сообщение; FY1: говорит о том, что копия сообщения была послана ранее); «in progress» (указывает, что прежде, чем сообщение послано, оно скопировано в почтовый ящик); присоединение (номер сообщения и следующая за ним буква «А» 250
(например, 8А) указывает на присоединение файла к сообщению). Строка состояний главной панели содержит информацию, команды и сообщения об ошибках. Нажатие F1 (HELP) позволяет в любое время на любой панели получить справку об использовании функциональных ключей. После получения помощи возврат в 3+MAIL происходит нажатием любой клавиши. Для возврата к главной панели из любой другой надо нажать клавишу F10. Для выхода из 3+MAIL следует перейти в главную панель и снова нажать F10. Для просмотра новых сообщений надо переслать поглу от сетевого сервера (который выполняет роль почтовс го отделения) в почтовый ящик пользователя. Для этыо нажать клавишу F8. Когда вся почта получена, в стрс ке состояния появляется такст: «Message (s) retrieved» («Сообщения переданы»). Если почты нет, то в строке состояния будет помещено сообщение: «***No new muU to get». Выбор номера сообщения осуществляется с помощью клавиш управления курсором. Строка информации о гы- бранном сообщении будет выделена подсветкой. После того как курсор позиционирован на требуемое сообщение, его можно, используя функциональные клавиши, прочитать, удалить, распечатать, записать в файл, передать или ответить на поступившее сообщение. -Для просмотра текста сообщения на экране необходимо: подогнать курсор к требуемому сообщению; нажать клавишу F2. После того как сообщение прочитано, символ «*», который был расположен на главном экране перед датой и являлся признаком непрочитанного сообщения, исчезает. Когда сообщение прочитано, его можно удалить, распечатать, записать в файл, ответить на него или передать его копию. Чтение следующего сообщения из почтоеого ящика производится по клавише F2. Если ящик пуст, в строке состояния будет выдан текст: «* * * по next message». В 3+MAIL предусмотрены три процедуры запуска сообщений: создание сообщения, передача копии сообщения, ответ на сообщение. Процедуры одинаковы во всех трех случаях, но заголовок и текст сообщений варьируются. Для создания нового сообщения следует, находясь в главном экране, нажать клавишу F9. Курсор ука- 251
жет поле, куда можно вводить информацию для заголовка сообщения. После формирования заголовка можно вводить текст сообщения, используя редактор MED. Нажатие клавиши F6 позволяет ответить на любое посланное сообщение. Можно нажать клавишу F6 во время отображения сообщения на экране либо подогнать курсор к сообщению на главном экране и затем нажать F6 Для подтверждения сообщения можно передать копию полученного сообщения. Это обеспечивается нажатием клавиши F7 на главном экране. Мы достаточно подробно остановились здесь на организации работы службы электронной почты ЛВС 3 PLUS. Как видно, освоение работы в сети не должно вызвать затруднений. Для большего удобства конечных пользователей можно создать более дружественный диалог, используя командные файлы и выполнив частичную адаптацию сообщений на родной язык пользователя. 9.4. Clipper в локальной сети Компилятор Clipper, работа с которым была рассмотрена в гл. 5, позволяет создавать прикладные системы, работающие в локальных сетях. Для этого он обладает следующими возможностями: 1) открытие файлов для совместного использования пользователями (разделение файлов) или лля монопольного использования (команды SET EXCLUSIVE ... и USE ... EXCLUSIVE); 2) блокирование файла для предотвращения операций записи разными пользователями в один и тот же файл в одно и то же время (функция FLOCK ()) ; 3) блокирование записи для предотвращения ее изменения одновременно несколькими пользователями (функция RLOCK 0) ; 4) режим разделения записи, позволяющий двум или более пользователям получать доступ к одной и той же записи одновременно (команда SET EXCLUSIVE OFF); 5) переназначение выводного потока принтера (команда SET PRINTER TO); 6) проверка блокировки файла или записи (функции FLOCK 0 и RLOCK О) ; 7) отмена предыдущего блокирования файла или записи (команда UNLOCK IALL]); 252
8) проверка успешности завершения операций USE, USE ... EXCLUSIVE, APPEND BLANK (функция NETERR ()) . Краткое описание функций и сетевых команд приведено ниже. Сетевые команды. SET EXCLUSIVE ON/off. Эта команда задает совместное (off) или монопольное (ON) использование файлов базы данных и индексных фан нов. SET PRINTER TO (адрес). По этой команде производится переназначение принтера на новый адрес. UNLOCK [ALL]. Команда отмены блокировки файла и записи в активной рабочей области [во всех областях). USE [(имя файла)! [INDEX (список индексных файлов)] [EXCLUSIVE 1 [ALIAS (псевдоимя) ]. С помощью этой команды можно открыть файлы базы данных и соответствующие индексные файлы для использования в монопольном режиме. Для открытия в режиме разделения файла следует опустить INDEX и EXCLUSIVE, а затем выполнить команду SET INDEX TO . . ., если есть соответствующие индексные файлы. Сетевые функции. RLOCK ( )/LOCK ( ). Попытка блокировки записи. Если она завершилась успешно, логической переменной присваивается значение «истинно». Повторное использование RLOCK () отменяет блокировку файла и записи, сделанную ранее. 1 FLOCK (). Попытка блокировки файла. В случае ее успешного завершения логической переменной присваивается значение «истинно». Повторное использование FLOCK 0 отменяет предшествующую блокировку этого файла и его отдельных записей. NETERR (). Эта функция в случае ошибки при выполнении команд USE, USE . . . EXCLUSIVE и APPEND BLANK присваивает логической переменной значение «истинно». В табл. 9.4 приведены ситуации, когда результатом выполнения функции NETERR () является значение «истинно». Прикладные программы, созданные с помощью компилятора Clipper, совместимы с программным обеспечением локальных сетей, работающих под управлением MS-DOS версии 3.1 и выше, так как программа, созданная Clipper, выполняет операцию в сети посредством MS-DOS. По умолчанию устанавливается режим монопольного использования файлов баз данных и индексных файлов, но для эффективной работы в .локальной сети прикладные 253
Таблица 9.4 Команда USE USE ... EXCLUSIVE APPEND BLANK Причина ошибки Другой пользователь ранее выполнил команду USE ... EXCLUSIVE и захватил файл в монопольное использование Другой пользователь ранее выполнил команду USE ... EXCLUSIVE или USE и открыл файл для монопольного или совместного использования Другой пользователь ранее выполнил функцию блокировки файла FLOCK ( ) или произошла попытка одновременного выполнения нескольких команд APPEND BLANK программы должны использовать файлы баз данных совместно. Вопрос о том, какие файлы баз данных выделяются для совместного использования, а какие — для монопольного, решается на этапе проектирования прикладной системы. Можно предусмотреть динамическое изменение режима использования файлов, однако это значительно более сложная задача, требующая организации взаимодействия между программой, выполняющей роль администратора базы данных, и другими пользовательскими программами, работающими в сети. Следует отметить, что операция установления монопольного режима использования файла целесообразна при операциях добавления, корректирования и удаления группы записей. В случае, когда требуется обработать лишь одну запись, лучше блокировать только эту конкретную запись с помощью функции RLOCK (). В табл. 9.15 приведены требования к командам в том случае, если используется сетевое оборудование. При проектировании прикладных систем, работающих в условиях локальной сети, необходимо разработать эффективную концепцию обработки данных для обеспечения целостности данных и сокращения потерь времени на доступ к ним. На пути создания такой концепции должны быть продуманы и решены следующие проблемы: определена дисциплина открытия файлов для совместного или монопольного использования; разработаны алгоритмы блокировки записей и файлов, а также алгоритмы повторных 254
Таблица 9.5 Команда ©... SAY ... GET APPEND FROM DELETE (одна запись) DELETE (несколько записей) PACK RECALL (одна запись) RECALL (несколько записей) REIXDEX REPLACE (одна запись) REPLACE (несколько записей) UPDATE ON ZAP Требования RLOCK( ) USE ... EXCLUSIVE либо FLOCK ( ) RLOCK( ) USE ... EXCLUSIVE либо FLOCK ( ) USE ... EXCLUSIVE RLOCK( ) USE ... EXCLUSIVE либо FLOCK ( ) USE ... EXCLUSIVE RLOCK( ) USE ... EXCLUSIVE либо FLOCK ( ) USE ... EXCLUSIVE либо FLOCK ( ) USE ... EXCLUSIVE попыток блокировки; выбраны методы анализа ошибочных ситуаций, возникающих при обработке данных в сети,' предусмотрены возможные действия системы (программы) в случае невозможности выполнения какой-либо файловой операции. Необходимо следовать простому правилу при создании с помощью компилятора Clipper программ, работающих в сети: блокировка СТРОГО ОБЯЗАТЕЛЬНА при записи в разделяемые файлы баз данных; во всех же других случаях блокировка ВОЗМОЖНА. Запись в файлы может производиться по командам REPLACE, DELETE, RECALL и @...GET (имя файла). Перед записью необходимо выполнить блокировку, если работа g файлом будет производиться в режиме совместного использования. Попытка записи без предварительной блокировки (в режиме совместного использования) приведет к выдаче сообщения об ошибке: «System error not locked» («Системная ошибка — нет блокировки»). При выполнении команд APPEND FROM, DELETE и UPDATE ON также необходима предварительная блокировка или монопольное использование файла. Рекомендуется блокировать файл и в том случае, когда он обрабатывается командами COUNT, SUM и TOTAL. Некоторые операции (PACK, REINDEX и ZAP) выполняются только в монопольном режиме. В отличие от дру- 255
гих СУБД реляционного типа Clipper позволяет выполнять команду APPEND BLANK для общих файлов, однако обработку конфликтных ситуаций, возникающих при одновременной выдаче зтой команды двумя и более пользователями, необходимо делать самому программна у. Существует несколько способов отмены блокировки: отмена блокировки в одной области с помощью команды UNLOCK (); отмена блокировки во всех областях командой UNLOCK [ALL]; закрытие файла командой USE; нормальное завершение выполнения программы; повторная блокировка для ранее заблокированного файла. В каждый момент времени разрешается только одна блокировка в одной рабочей области. Некоторые команды способны самостоятельно открывать и закрывать файл во время своего выполнения. В табл. 9.6 показано, какой статус приобретают файлы на время выполнения соответствующей команды. При выполнении программы должно быть предусмотрено слежение за изменениями статуса файлов. Таблица 9.6 Совместный статус APPEND FROM (имя файла) CREATE ... FROM (имя файла) LABEL FROM (имя файла) REPORT FROM (имя файла) RESTORE FROM (имя файла) TYPE (имя файла) UPDATE FROM (имя файла) Монопольный статус COPY STRUCTURE TO (имя файла) COPY TO (имя файла) CREATE (имя файла) INDEX ON ... ТО (имя файла) SAVE TO (имя файла) SET ALTERNATE TO (имя файла) SORT TO (имя файла) TOTAL TO (имя файла) В комплект поставки Clipper входят программы NETWORK.PRG и LOCKS.PRG. Программа NETWORK. PRG является тестовой программой, демонстрирующей работу сетевых функций Clipper. Она может быть запущена на двух и более ПЭВМ, подключенных к сети. Программа LOCKS.PRG содержит следующие функции для использования при работе в сети: NET USE () (открыть файл для монопольного или совместного использования); 256
FIL LOCK () (заблокировать текущий разделяемый файл); REC LOCK () (заблокировать текущую запись); ADD REC () (добавить новую запись к текущему разделяемому файлу с передачей ей логического значения, то есть в случае, если запись добавлена, новая запись становится текущей). Каждая из указанных функций пытается блокировать запись или файл в течение указанного при ее вызове интервала времени. Для использования этих функций в программе следует дать команду SET PROCEDURE TO LOCKS, при этом предполагается, что установлен режим совместного использования файла (SET EXCLUSIVE OFF). Рассмотрим подробнее функцию NET USE. Она осуществляет попытку открытия файла при совместном или монопольном режиме и имеет следующие параметры: имя открываемого файла (символьный тип); монопольный/совместный режим доступа (логический тип); временной интервал в секундах (числовой тип). Ниже приводится программный текст функции NET USE. FUNCTION NET USE PARAMETERS file, EX USE, wait PRIVATE forever forever=(wait=0) DO WHILE (forever . or . wait>0) IF EX USE USE & file EXCLUSIVE && Монопольный ELSE USE & file && Совместный ENDIF IF. NOT. NETERR ()& & USE завершилась успешно RETURN (. Т.) ENDIF INKEY(l) && Ожидание 1 о wait=wait—1 ENDDO RETURN (. F.) &&USE завершилась неудачно * END NET USE В вызывающей программе обращение к этой функции могло бы выглядеть в случае индексированного файла так: IF NET USE («RSTAT», . T . , 12) 257
SET INDEX TO RSTAT1 ELSE ? «Файл RSTAT недоступен» ENDIF Функции, находящиеся в файле LOCKS. PRG, рекомендуется использовать творчески. Их можно не только использовать в готовом виде, но улучшить и переработать, рассматривая их просто как примеры написания программ. Ниже приводится пример тривиальной программы для Clipper, демонстрирующей некоторые приемы работы в условиях локальной сети. ¦Программа TESTNET . PRG ¦Заменяет в файле FNAME содержимое поля ¦name первой встреченной записи на значение *'Петров' , если значение поля было ¦ 'Иванов' SET PROCEDURE TO locks ¦ Ссылка на процедурный файл locks SET EXCLUSIVE OFF ¦ Задание режима разделения данных USE FNAME ¦Открытие для работы файла FNAME LOCA FOR пате^'Иванов' ¦Поиск требуемой записи IF REC LOCK E) ¦Попытка блокировать текущую запись REPLACE name WITH 'Петров' ¦ Замена содержимого поля name ELSE WAIT 'Запись заблокирована другим* ENDIF UNLOCK ¦Разблокирование записи RETURN ¦ Конец программы 9.5. Отечественные ЛВС В настоящее время в нашей стране в основном производится выпуск технических средств, предназначенных для подключения к ЭВМ терминалов или для обеспечения телекоммуникационной связи. С помощью этих средств возможно создание ЛВС со скоростью передачи информа- 258
пии не более 9,6 Кбод. Однако для решения многих задач этого явно недостаточно. Уже сейчас существует несколько отечественных сетей, обеспечивающих большую скорость передачи данных. Среди имеющих наибольшее распространение в стране ЛВС следует назвать сеть СМ (на базе пакета СТО РВ) для мини-ЭВМ, «СИБИРЬ-1» (па базе СПО «АЛИСА» 2.1.) и «ЭСТАФЕТА». В своей основе они имеют стандарты, принятые еще в конце 1970-х — начале 1980-х годов. Стандартизованы физическая среда передачи, электрические интерфейсы, а программное обеспечение является оригинальным. Характеристики этих и других наиболее известных отечественных ЛВС приведены в табл. 9.7. Предназначены эти сети в основном для автоматизации учреждений, за исключением сети «СИБИРЬ-1», которая может применяться в зазодских условиях. На фоне уже существующих разработок выгодно выделяется проект «ЖЕЗЛ». Эта разработка позволит создать высокопроизводительные ЛВС различной конфигурации протяженностью до 2,5 км и со скоростью передачи данных до 10 Мбод. В качестве метода доступа использован TOKEN PASSING BUS. Физический и канальный уровни строятся на стандартах IEEE 802.4, IEEE 802.2 (в соответствии с протоколом MAP). Локальная сеть «ЭСТАФЕТА» представляет собой несколько сетевых станций, соединенных в кольцо. Станция сети, с точки зрения пользователя, может рассматриваться как «черный ящик» с четырьмя внешними соединениями: питание, вход в кольцо, выход из кольца, интерфейс к подключенному терминалу типа стык С2. В станции зашито программное обеспечение, реализующее четыре нижних уровня (включая транспортный) семиуровневой модели открытых систем OSI. Сетевое программное обеспечение ЛОКАЛ и ЛОКАЛ-СЕРВИС рассчитано на подключение к станциям следующих вычислительных машин: СМ-1420, СМ-1800, IBM PC, (PRAVEC-16C, PRAVEC-16MN, ИСКРА-1030, ЕС-1840), Robotron-1715. Программы поддержки сети написаны на языке С, а также на языках ассемблера соответствующих машин. Для функционирования пакетов требуется ОС RSX-11M для СМ-1420, MS-DOS для IBM PC, СР/М для СМ-1800 и Robotron-1715. 259
С5 О Таблица 9.7 Сеть «ЭСТАФЕТА» ел к см СМ «СИБИРЬ-1» (СПО «АЛИСА» 2.1.) «СИБИРЬ-3» (СПО «АЛИСА ПЛЮС») A989— 1990 г.) «МОНОЛАН» «ЖЕЗЛ» A989— 1990 г.) Среда передачи вп вп вп вп, рк ВП, РК вп шк, ов Тип интерфейса С С2 С2, ИРПС С2, ИРПС, ОШ, МПИ И-41.0Ш, С2, МПИ, системная магистраль С2 И-41.0Ш, С2, системная магистраль Количество узлов 125 125 не огр. 50 256 32 1000 Скорость передачи, Кбод 125 500 9,6 480 480 115,2 10 000 Длина без вторителей, км 0,5 1,0 1,0 1,0 1,0 0,3 2,5 Топология Кольцо » Произвольная То же Шина » » Тип сети гт ГТ ГМ гм ГТ гм ГТ Прототип MULTI-LINK MULTI-LINK DECnet DECnet Нет Нет MAP-протокол Примечание. РК — радиочастотный кабель; ГМ — гомогенная сеть; ГТ — гетерогенная сеть; ОШ — общая шина; МПИ —< микропроцессорный интерфейс.
Сетевой пакет ЛОКАЛ предоставляет следующие сетевые услуги пользователю: эму тяни я терминала, обмен символьными файлами, обмен сообщениями между уда- лепными процессорами. Сетевое программное обеспечение ЛОКАЛ-СЕРВИС предоставляет по сравнению с ЛОКАЛ дополнительные сетевые услуги: развитые сетевые средства по транспортировке файлов (транспорт чаем и файла и файлов в двоичном представлении); обработку файлов до и после передачи (уровень представления данных); манипулирование удаленными файлами; служебную информацию о текущем состоянии сети; сервис печати (разделение печати между пользователями сети). Сеть СЛК СМ представляет собой котьцо сетевых станций, подобных станциям «ЭСТАФЕТА-2». По сравнению с ЛВС «ЭСТАФЕТА» увеличена скорость передачи данных в кольце. В качестве сетевого программного обеспечения может быть использовано то же обеспечение, что и для «ЭСТАФЕТЫ». ЛВС «СИБИРЬ-1» — гомогенная сеть древовидной структуры. Она позволяет с помощью сетевых адаптеров объединить под управлением СПО «АЛИСА» мини- и л-пкроЭВМ (СМ-1420, Электроника^), ДВК-2М). Пользователь этой сети может: организовать доступ к удаленным устройствам (диски, магнитные ленты, печатающие устройства); создать виртуальные терминалы, обеспечивающие доступ к операционной системе (ОС) любого узла сети; организовать межпрограммный обмен с фиксированной маршрутизацией и удаленную загрузку ОС. ЛВС «СИБИРЬ-3» — гетерогенная сеть шинной топологии с передачей маркера (метод доступа — TOKEN PASSING BUS). В настоящее время разработка сети не закончена. Предполагается, что ЛВС будет работать под управлением СПО «АЛИСА ПЛЮС» с операционными системами ОСРВ, МИОС, РАФОС, СР/М-86, PC-DOS, VMS, UNIX. Из числа первых моделей ПЭВМ, освоенных промышленностью стран — членов СЭВ, целесообразно выделить два основных класса моделей. В первый класс входят модели, имеющие архитектуру, соместимую с IBM PC. Это ПЭВМ: ЕС-1840/-1841, ИСКРА-1030, НЕЙРОН И9.66 (СССР); PRAVEC 16C/16MN, ES 1832 INTELEXT (НРБ); MEVAX-6600, ELWRO-800 (ПНР); SMEP РР 06 (ЧССР); 261
И СИРА - 1030 I ЕС-16<+1 С2 СРС Цокольная сет$ ft3t СРС С2 Н5ЙРСН ИВ 55 СМ-1^20 I АДС С2 СПС *гПС$еЛГ/С!" ЕС- *cV0 Г Г, Г 1 |С2 PRA\EC 16 С СЛК Рис. 9.2 VARITER XT (ВНР). Ко второму классу относятся модели с архитектурой DEC — Электроника МС.85 (СССР). Все перечисленные модели имеют в своем составе интерфейс RS-232C (стык С2), с помощью которого может быть обеспечен выход практически на любую сеть через соответствующий сетевой контроллер. ПЭВМ, совместимые с IBM PC, могут быть объединены в кольцевую локальную сеть с помощью сетевой станции «ЭСТАФЕТА-2». Обычно «ЭСТАФЕТА-2» выпускается промышленностью в виде автономного модуля, и тогда интерфейс со станцией автономного модуля обеспечивается через С2. Помимо этого существует вариант сетевой станции «ЭСТАФЕТА-2», встраиваемый в основной блок ПЭВМ ЕС-1840/-1841. На рис. 9.2 показан возможный вариант ЛВС «ЭСТАФЕТА», работающей под управлением СПО ЛОКАЛ. В результате завершения разработки ЛВС «СИБИРЬ-3» появится возможность включения ПЭВМ ЭЛЕКТРОНИКА МС-05.85 в гетерогенную сеть с шинной топологией, работающей под управлением СПО «АЛИСА ПЛЮС». ПЭВМ будет подключаться к ЛВС через специально разрабатываемый сетевой адаптер DL-NET-1. На рис. 9.3 приведен возможный вариант построения ЛВС «СИБИРЬ-3» на базе моноканала с передачей маркера. 262
Большой интерес для создания небольших учрежден- ческих сетей представляет оригинальный комплекс программных и аппаратных средств МОНОЛАН, предназначенный для организации ЛВС ПЭВМ типа IBM PC/AT/XT и пх отечественных аналогов ИСКРА-1030.11, «Нейрон 110,66», «Нейрон И9.69», ЕС-1840, ЕС-1841, ЕС-1845. МОНОЛАН можно с некоторыми оговорками отнести ь сетям типа ETHERNET. Сеть использует случайный гетод доступа с обнаружением и разрешением конфликтов (CSMA/CA) Одной из особенностей комплекса МОНОЛАН является отсутствие аппаратных контроллеров для под- со^'шненпя'к сети. Все сетевые уровни реализуются программно, а роль сетевого адаптера выполняет простейшая схема согласования, подключаемая к стыку С2. С точки зрения сетевой архитектуры МОНОЛАН представляет собой ЛВС с шинной топологией. Роль шины выполняет витая пара, от которой сделаны отводы к каждой ПЗВМ. Один из* проводов является обидим (сигнальная земля), а другой — информационным. Возможность в ПЭВМ типа IBM PC программно устанавливать скорость передачи через RS-232C, равную 115 Кбод, обеспечила приемлемую скорость пересылки данных в канале. Ошибки, которые возникают в RS-232C при такой скорости, вылавливаются и исправляются на канальном уровне. Другой особенностью, выгодно отличающей данную сеть от коммерческих зарубежных сетей, является небольшой A1 Кбайт) объем резидентно загружаемого сетевого ЕС ЭВМ ЭЛ-КА 85 DL-NET-EC ЕС-18*0 DL-NET-M И СИР А-1030 0L-NET-1 = BL-NET ИСНРА-1030 DL-NET-M ВЫЕТ-М VL-NET-V СМ -1100 dL~NET= BL-NET-V СМ-1Ш DL-NET-V DL-NET-I ЭЛ-КА 85 DL-NET-V \BL-NET-M ЕС-18*0 DL-HET-0 ЭЛ-КА 60-1 § Академ и- ШЛЮЗ Рис. 9.3 хческию сеть 1 х.25 263
программного обеспечения. Зарубежные ЛВС требуют, как правило, от 100 до 300 Кбайт оперативной памяти в зависимости от полноты набора предлагаемых сетевых услуг. Такая компактность сети обусловлена тем, что ее архитектура не реализует полностью семиуровневую модель открытых систем, а включает юлько физический, канальный, транспортный и прикладной уровни. На прикладном уровне реализован интерфейс с пользователем через выделенные прерывания и находится файл-сервер. Программная часть МОНОЛАН реализована на языке ассемблера и состоит из резидентного сетевого драйвера CHTWS.EXE и сетевой утилиты VIZ.EXE. Пользователю предоставляются следующие сетевые услуги: транспорт файлов; совместное использование принтеров; совместное использование дисков; совместное использование стримеров. При выполнении любой из указанных услуг драйверы сети работают в «скрытом» режиме, не мешая работе пользователя за той ПЭВМ, файлы которой транспортируются. При транспортировке файлов осуществляется двухступенчатый контроль качества передачи, при необходимости —¦ с повторными пересылками. Предусмотрена возможность введения уровней защиты от доступа из сети. Для работы с сетью используется интерфейс пользователя типа Norton Commander с двумя панелями, индицирующими содержание выбранных каталогов и подкаталогов. Программное обеспечение МОНОЛАН работает под управлением операционной системы MS-DOS версии 3.2 и выше. Следует отметить, что сетевой дрейвер изменяет систему прерываний DOS весьма деликатно. Поэтому работа сетевых средств оказывается «прозрачной» для любой стандартной программы, разработанной в рамках системы. 9.6. Сетевые возможности 8-разрядных ПЭВМ В настоящее вре*мя у нас в стране находится в эксплуатации большое количество 8-разрядных ПЭВМ класса Robotron-1715 (Robotron-1810, -А5120 и Alfatronik-P2U производства ГДР), которые можно назвать профессиональными ПЭВМ. С началом производства ПЭВМ следующего поколения появилась возможность решения более сложных задач, связанных с обработкой значительных объемов информации. При этом для многих пользователей стало крайне желательным оставить за дешевыми 8-раз- 264
рядными ПЭВМ функции первичного сбора и обработки данных, а обработку больших объемов информации осуществлять па более производительных 16-разрядных ПЭВМ, при этом транспорт файлов осуществлять с помощью каких-либо сетевых средств. Оказывается, что эта проблема, по крайней мере для ПЭВМ класса Robotron-1715 и IBM PC-совместимых машин, может быть решена самостоятельно — без привлечения электронщиков. Опыт «самоделыцика» доказывает, что это по силам любому пользователю. Перечисленные модели 8-разрядных ПЭВМ очень близки по своим возможностям. Единственным отличием, имеющим для нас значение, является количество портов для подключения других устройств. В состав базового комплекта Robotron-1715 входят два интерфейса V.24. (для Robotron-1810 шесть интерфейсов). Они размещены на плате центрального процессора. Соответствующие им разъемы на задней стороне системного устройства обозначены как «Printer» и «V.24». Интерфейс, обозначенный как «Printer», содержит только сигнальные провода, требуемые для управления внешним (например, ПУ) устройством, следовательно, не может быть использован для дуплексной работы. Интерфейс, обозначенный как «V. 24.», может быть использован для связи с любым интеллектуальным устройством, снабженным стыком С2 (RS-232-C / V. 24.). Например, можно связать две ПЭВМ Robotron-1715. Адаптер согласует параллельно работающую системную магистраль с последовательным интерфейсом V.24. Он представляет собой, с точки зрения интерфейса, терминал, который по устройствам передачи данных можно прямо соединять с установленными на расстоянии или вблизи терминалами. Адаптер имеет следующие характеристики: режим работы — дуплексный, полудуплексный; процедура передачи — синхронная, асинхронная; формат символов — 5 ... 8 бит/символ; длина бита останова — 1, 1,5; 2 бита контроль — по четности по нечетности; скорость передачи данных — 200, 300, 600, 1200, 2400, 4800, 9600 бод; расстояние передачи с максимальной скоростью до 15 м (без модема). На расстояния до 500 м передача без модема (модулятор-демодулятор) возможна, но скорость передачи быстро падает с увеличением расстояния. Чтобы обеспечить теоретически достижимую скорость передачи при расстоя- 265
нии передачи свыше 15 м, следует использовать модем. В качестве соединительного кабеля можно использовать обычный телефонный кабель либо витую пару. Чтобы работу по организации сети не выполнять «вслепую», в табл. 9.8 приведены соответствия номеров цепей сигналам для интерфейса V.24. Таблица 9.8 Помер цепи Сигнал 101 102 103 304 105 106 107 108 109 111 113 114 115 Защитное заземление Рабочее » Передаваемые данные Принимаемые » Включить передатчик Готовность к передаче Готовность к работе устройства пэиемопередачи данных (УППД) Готовность адаптера к работе Уровень приемного сигнала Выбор скорости передачи Такт шага передачи на УППД » » » от УППД » » приема от УППД i— 1 ^ о 2 3 О О 4 5 О О 6 7 О О 8 9 О О 10 11 о о 1 2 \ 13 ° 1 Рис. 9.4 На рис. 9.4 приведен внешний вид разъема интерфейса V.24., расположенного на задней крышке системного блока. Символом «о» обозначены штифты разъема. Штифты пронумерованы числами от 1 до 13. На рис. 9.5 приведено соответствие номеров цепей V.24. номерам штифтов. Для обеспечения связи Rohotron-1715 с другими вычислительными средствами следует собрать гнездовую колодку, маркируемую номером 223-13, которая имеется в комплекте поставки, и выполнить распайку по схеме, показанной на рис. 9.6. Если оснащения базового комплекта ПЭВМ недостаточно для организации требуемой топологии, то к Ro- 266
в А 101 104 106 108 111 114 1 2 3 4 5 6 7 8 9 10 11 12 13 102 103 105 107 109 113 115 Рис. 9.5 Номер цепи Номер штифта Номер цепи \.?4. 102 101 103 104 106 107 108 Контакт Контакт А1—- рабочее заземление А1 В2—-защитнее заземление В2 A3-—передача данных В4 В1—-прием данных A3 В6—-готовность к обмену ВЗ А7 1 I В8 1 V.24. о о о о о ОС jj н- — Г„ Рис. 9.6 bctron-1715 можно подключить плату с двумя интерфейсами V. 24. В этом случае ПЭВМ можно подключить по трем каналам к другим вычислительным устройствам. Физически Robotron-1715 может быть подключен к любому сетевому контроллеру, имеющему стык С2 или интерфейс RS-232-C. Однако, существующее программное сетевое обеспечение для этих машин поддерживает лишь следующие типы соединений: точка—точка; радиальная звезда; кольцевая. Ниже даны примеры схемотехнических решений, соответствующие первым двум топологиям; рис. 9.7 — топология точка—точка; рис. 9.8 — вариант радиальной топологии с Host-машиной IBM PC; рис. 9.9 — то же, но с Host-машиной СМ-1420. R 1715 R1810 V. It. К 24, Модем Модем Рис. 9,7 267
IBM PC Модем Модем Модем Модем н R1810 Рис. 9.8 R1115 №1716 R 1810 R 1715 Модем Модем Модем Мультиплексор передача данных СМ-1Ч-20 Рис. 9.9 Для программного решения задачи связи двух Robo- tron-1715 могут быть с равным успехом использованы сетевые пакеты KERMIT-80 и TLC (TELECOMMUNICATION). Оба пакета работают под управлением ОС SCP (СР/М) и поддерживают только две сетевые функции: режим эмуляции терминала; передачу файлов (в символьном и двоичном коде). Для обеспечения телекоммуникационной связи Robotron-1715 и IBM PC (либо ПЭВМ, совместимой с ней, например, ЕС-1840) можно использовать уже упомянутый пакет KERMIT. На Robotron-1715 он функционирует под управлением SCP, а на IBM PC — в среде MS-DOS. С помощью пакета KERMIT можно построить гомогенную радиальную сеть на базе Robotron-1715 при условии, что ПЭВМ, входящие в сеть, оснащены дополнительными платами с интерфейсами V.24. В этом случае KERMIT, загруженный в Robotron-1715, способен обслужить два порта связи. При этом необходимо 268
учитывать, что в такой сети обеспечивается лишь транспорт файлов между двумя соседними узлами, а средства адресации узлов и маршрутизации отсутствуют. Пакет KERM1T может быть полезен и для решения задачи создания гетерогенной сети на базе Robotron-1715, IBM PC (или ПЭВМ, совместимой с ней) и СМ-1420. СМ-1420 выступает в роли Host-машины и располагается в центре «звезды». Robotron-1715 и IBM PC выступают в роли сателлнтпых машин и располагаются на концах «звезды» (всего до 16 штук). На СМ-1420 KERMIT работает под управлением ОС RSX-11M версии 4.1. и в этом случае KERMIT выполняет лишь две сетевые функции — эмуляции терминала и передачи файлов. При использовании KERMIT на ПЭВМ ИСКРА-1030 и ЕС-1840 следует учитывать, что на них установлены оригинальные адаптеры асинхронной связи, которые требуют изменения стандартного драйвера, используемого в KERMIT для IBM PC. Порядок работы с пакетом KERMIT-80 следующий: 1) загрузить ОС SCP; 2) загрузить KERMIT (команда — Таблица 9.9 Команда BYE CONNECT ERA EXIT FINISH HELP DIR HELP LOG LOGOUT SEND RECEIVE SET SHOW STATUS TRANSMIT Выполняемые действия Прекращается работа с удаленным пользовате« л ем, выход в СР/М Устанавливается терминальное соединение с удаленной Host-системой через указанный порт Удаление файла Выход в СР/М Прекращается работа удаленного пользователя Выдача help-информации Печать каталога текущего диска Выдача help-информации Запись удаленного терминального сеанса в указанный файл или на устройство Разрыв соединения с удаленным пользователем, выхода из KERMIT нет Передача файла (ов) удаленному пользователю Ожидание приема файлов от удаленного пользователя Устанавливает указанный параметр Печатается список установленных параметров Дает то же действие, что SHOW Передача файла на Host-машину в CONNECT состоянии 269
KERMIT), после загрузки на экран будет выведена подсказка: KERMIT-80 А :>; 3) получить HELP-инфор- мацию, если необходимо, по команде Н — при этом на экран будет выведен список команд пакета KERMIT (табл. 9.9); 4) дагь команду CONNECT, если необходимо установить соединение с Host-машиной (для связи с Robotron-1715 эта команда не требуется); дальнейшая работа с использованием команд 5) SEND В : NAME.EXT (передать файл); 6) RECEIVE (ждать приема файла); 7) EXIT (завершение работы и выход в СР/М). Этот порядок работы обеспечивает передачу текстовых файлов. Для того чтобы передавать файлы с двоичной информацией, необходимо после загрузки KERMIT выполнить установку режима двоичных файлов: SET FILE-MODE BIN. Необходимо отметить, что Robotorn-1715 не обладает системой прерываний, которая позволяла бы реагировать на поступление данных в порт связи. Это означает, что для обеспечения сеанса связи требуется, чтобы KERMIT был загружен на обоих концах канала связи и один пользователь был гогов передавать файл, а другой — его принимать. Список литературы 1. Берешанский Д. Г. Практическое программирование на dBASE. — М.: Финансы и статистика, 1989, — 192 с. 2. Брябрин В. М. Программное обеспечение персональных ЭВМ. — М.: Наука, 1988. — 272 с. 3. Дженнингс Ф. Практическая передача данных: Модемы, сети и протоколы: Пер. с англ. — М.: Мир, 1989. — 272 с. 4. Дойл У. Табличный процессор Суперкалк для персонального компьютера: Пер. с англ. — М.: Финансы и статистика, 1987. — 320 с, 5. Дубников Е. Е., Калачев В. Н. Локальные сети микроЭВМ. —М.: МЦНТИ и МНИИПУ, 1986. — 109 с. 6. Корн Г., Корн Т. Справочник по математике. — М.: Наука, 1968. — 720 с. 7. Крамм Р. Системы управления базами данных dBASE II и dBASE III для персональных компьютеров: Пер. с англ.—М,: Финансы и статистика, 1988. — 283 с. 8. Лэнгсам Й., Огенстайн М„ Тененбаум М. Структуры данных для персональных ЭВМ: Пер, с англ. — М.: Мир, 1989. — 568 с. 9. Майерс Г. Надежность программного обеспечения: Пер. с англ. — М.: Мир, 1980. — 360 с. 10. Моррил Г. Бейсик для ПК ИБМ: Пер. с англ, — М,: Финансы и статистика, 1987, — 260 с, 870
11. Оши К., Хьюгз П. Бухгалтерский учет на микроЭВМ: использование прикладного пакета LOTUS-1-2-3: Пер. с англ. — М.: Финансы и статистика, 1987. — 264 с. 12. Погорелый С. Д. Персональная ЭВМ «Нейрон И9.66». // Микропроцессорные средства и системы, 1986, № 4, с. 16—19. 13. Прайс Д. Программирование на языке Паскаль: Пер. с англ. — М.» Мир, 1987. — 232 с. 14. Пул Л. Работа на персональном компьютере: Пер. с англ. — Мл Мир, 1986. — 383 с. 15. Пыхтин В. Я. ЕС-1840 — базовая персональная ЭВМ единой системы. — Микропроцессорные средства и системы, 1986, № 4, с. 13—16. 16. Томас Р., Иейтс Дж. Операционная система UNIX: Пер, с англ. — М.: Радио и связь, 1986. — 352 с. 17. Трейстер Р. Персональный компьютер фирмы ИБМ: Пер. с англ. — М.: Мир, 1986. — 208 с. 18. Уэйт М., Ангенмейер Дж. Операционная система СР/М: Пер, с англ. — М.: Радио и связь, 1986. — 309 с. 19. Хьюз Дж., Мил гон Дж. Структурный подход к программированию: Пер. с англ. — М.: Мир, 1979" — 278 с. 20. Хэнкок Л. Введение в программирование на языке Си: Пер, с англ. — М.: Мир, 1986. — 312 с. 21. Язык ФОРТРАН 77: Пер. с англ. — М.: Мир, 1982. — 212 с. 22. Янг С. Алгоритмические языки реального времени, — М.: Мир, 1985. —399 с. 23. Ярошевская М. Б. Персональная ЭВМ «Искра-1030.И». //Микро-» процессорные средства и системы, 1986, № 4, с, 23—24. Оглавление Предисловие 3 Глава 1. Операционная система 9 1.1. Операционная система — главный компонент базового программного обеспечения 9 1.2. Основные сведения о структуре MS-DOS 13 1.3. Файлы и команды операционной системы 18 1.4. Недостатки MS-DOS и пути развития операционных систем ПЭВМ 25 Глава 2. Утилиты 30 2.1# Утилиты базового состава DOS 30 2.2. Общесистемные утилиты DOS 36 2.3. Архиваторы 43 2.4. Знакогенератор дисплея 46 2.5. Программы для работы с ленточным стримером . . • 51 271
Глава 3. Языки высокого уровня и системы программирования 56 3.1. Обзор языков высокого уровня 1:6 3.2. Системы программирования с 59 3.3. Работа в Turbo-Basic . . . С1 3.4. Пример работы в системе Turbo-Basic. Универсальная программа перекодировки 63 Глава 4. Пакеты обработки текстов. Управление режимами печати 72 4.1. Обработка текстов . 72 4.2. Управление режимами печати . 78 4.3. Загрузка шрифтов для печати 84 Глава 5. Системы управления базами данных 89 5.1. Назначение и область применения СУБД 89 5.2. Общие характеристики и ограничения dBASE III PLUS 90 5.3. Краткое описание команд dBASE III PLUS .... 97 5.4. Командные файлы 114 5.5. Использование функций 117 5.6. Компилятор Clipper 120 Глава 6. Табличные процессоры и интегрированные программные средства ..... 136 6.1. Возможные области применения табличных процессоров и интегрированных программных средств. . 136 6.2. Supercalc-З 141 6.3. Lotus 1-2-3 149 6.4. Symphony 161 Глава 7. Организация диалога с конечным пользователем . . 172 7.1. Требования к организации диалога с конечным пользователем 172 7.2. Примеры организации диалога 183 Глава 8. Создание собственной инструментальной среды ... 195 8.1. Что такое собственная инструментальная среда. . . 195 8.2. Адаптация программных средств 197 8.3. Система LP88 для решения оптимизационных задач 208 8.4. Пример построения собственной инструментальной среды. Система Эрмитаж 220 Глава 9. Локальные сети ЭВМ 233 9.1. Принципы построения локальных вычислительных сетей 233 9.2. Локальные сети персональных ЭВМ , • ¦ 238 9.3. Электронная почта сети 3 PLUS , » 245 9.4. Clipper в локальной сети .....; 252 9.5. Отечественные ЛВС 258 9.6. Сетевые возможности 8-разрядных ПЭВМ 264 Список литературы , 270