Главная » Basic » ПРОГРАММНЫЕ ФАЙЛЫ

0

Написанные на Бейсике программы обычно запоминаются в ЭВМ в некотором внутреннем формате, который довольно близок к тому, какой изображается на экране ВТУ, но отличается тем, что в нем удалены пробелы, служебные слова заменены на условные символы, а переменные могут заменяться ссылками  на  таблицу  условных  символов.  Этот  компактный  формат  обычно  используется  при сохранении программ в  файлах. Такие файлы организованы  последовательным образом, причем программе предшествуют ее имя и другие детали. Файл может храниться на ленте или диске, и метод его использования достаточно стандартен.

В табл. 8.2 собраны команды, копирующие программы из памяти в файл и обратно. В целом команды SAVE  и  LOAD  довольно  стандартны,  чего  нельзя  сказать  об  их  некоторых   дополнительных параметрах. В персональной вычислительной машине PET в этих командах  надо  указывать номер устройства ввода-вывода;  если он отсутствует, то  подразумеваются файлы на

Таблица 8.2. Команды для работы с программными файлами

Действие

Примеры

команд

Комментарий

Сохранение копии

программы в файле

SAVE "FRED"

SAVE

Обычный для микроЭВМ формат. В ко-

манду могут входить дополнительные параметры

В ICL 2904 такая команда сохраняет программу,  которой  предварительно присвоено   имя    (командами   NAME FRED или NEW FRED)

Загрузка копии программы из файла

Удаление программного файла

Считывание другой программы с диска на место текущей программы

LOAD "FRED" GET FRED OLD FRED

KILL "FRED" KILL FRED UNSAVE FRED

10 CHAIN "FRED" 10

LOAD "FRED"

Обычный для  микроЭВМ  формат. В персональной  ЭВМ  PET эта команда содержит   дополнительный  параметр, определяющий устройство  (диск или магнитофон), а в Бейсике Microsoft в ней можно указать R для немедленного запуска программы

Формат, принятый в ICL 2904 и многих других больших ЭВМ

Используется только в дисковых систе-

мах для микроЭВМ

Используется на ICL  2904  и  многих других больших ЭВМ

Является оператором и  может иметь много дополнительных параметров

В некоторых системах, например PET, применение LOAD в качестве оператора дает тот же эффект, что и команда CHAIN

бытовой магнитной  кассете. При  работе с  диском требуется указывать специальное имя  файла,

включающее в себя номер дисковода. Например, команда

LOAD "0:FRED",8

загрузит в память файл FRED с диска (устройство 8), установленного в дисковод 0.

При работе с бытовой магнитной кассетой такой команды удаления файла, как KILL (уничтожить), нет: подразумевается, что для удаления файла надо его перезаписать. Обычно  протяжку ленты в кассете,  запись  и  перемотку  приходится  инициировать  вручную.  Типичная  последовательность действий при выполнении команды SAVE такова: надо набрать полный текст команды, но клавишу возврата каретки (или ENTER) пока не нажимать. Затем надо включить магнитофон и перевести его в режим записи. Спустя

несколько секунд нажимается клавиша возврата каретки (или ENTER), чтобы послать команду ЭВМ. Через несколько минут система выдаст на ВТУ сообщение ОК (все в порядке), после  чего ленту можно остановить.

Кассетная система ВВС запоминает детальные сведения о программе в каждом блоке  программы, записанном на ленте. Эти сведения изображаются при загрузке программы в  память  с помощью команды LOAD и обеспечивают полезную индикацию состояния процесса  загрузки. Кроме того, с помощью команды *САТ довольно просто организуется каталог содержания ленты при ее чтении от начала до  конца. Эта  возможность очень полезна при  перемотке ленты до  нужной  программы. Достаточно набрать *САТ, пропустить несколько  файлов или перемотать ленту ближе к началу и затем читать ленту до тех пор, пока не будет обнаружена требуемая программа.

Иногда из-за ограниченности памяти программа не может в ней поместиться целиком. Эта проблема устраняется  оператором  CHAIN  (связывать  в  цепочку)  ,  вызывающим  другую  программу  для перезаписи текущей и  передающим ей  управление. Рассмотрим пример  программы, написанной (конечно же!) в модульном стиле для выполнения вычислений и выдачи результатов в графическом виде. В памяти ЭВМ помещается только по одному модулю за раз, так что модули надо попеременно вызывать командой CHAIN (рис. 8.1) .

Рис. 8.1. Вызовы программ с помощью команды CHAIN

Исполнение программы начинается с модуля FRED. При этом запрашиваются и вводятся некоторые данные,  над  которыми  выполняются  определенные  вычисления.  Так  как  результаты  требуется начертить на экране, то оператор 500 вызывает файл JIM для  перезаписи  текущей программы и продолжает исполнение с начала считанной программы построения изображений. После завершения программа JIM уничтожает себя, вызывая программу FRED, которая может запросить новые данные и продолжить работу или же сразу остановиться. Процесс смены программ протекает медленно, но часто иного пути исполнения больших программ нет.

Точные детали исполнения команды CHAIN меняются от системы к системе. Большинство  систем требует,  чтобы  каждый  сегмент  включал  в  себя  основную  программу.  Поэтому,  к  сожалению, производить смену только подпрограмм нельзя. Довольно часто исходные  переменные сохраняют свои значения после смены программы, а в  других случаях, например  в  Бейсике Microsoft, для указания тех переменных, значения которых требуется сохранить, используется оператор COMMON. Аналогичным образом многие системы позволяют сохранять и привязки к файлам данных, так что следующий сегмент может продолжать чтение или запись с  того места, на котором остановилась предыдущая  программа.  В  любом  случае  те  значения,  которые  надо  передавать  от  сегмента  к сегменту, можно  поместить во  временные файлы  данных,  которые  можно  уничтожить в  конце исполнения.

Широко   распространенной общей программной конструкцией является меню, с которым  удобно сочетаются операторы CHAIN:

10 REM ПРОГРАММА ДЛЯ РЕАЛИЗАЦИИ ОСНОВНОГО МЕНЮ

20 REM

30 PRINT "МЕНЮ ОПЕРАЦИЙ"

40 PRINT "————"

50     PRINT     "ВЫБЕРИТЕ,     ПОЖАЛУЙСТА,     ТРЕБУЕМЫЙ     ПРЕДМЕТ"     60     PRINT      "

ЧТОБЫ ЗАКОНЧИТЬ, ВВЕДИТЕ И"

70 PRINT "ЗАРПЛАТА                                              ВВЕДИТЕ 1"

80 PRINT "НАЛОГ                                                     ВВЕДИТЕ 2"

90 PRINT "СЧЕТА                                                    ВВЕДИТЕ 3"

100 PRINT "СЛУЖАЩИЕ                                             ВВЕДИТЕ 4"

110 INPUT N

120 RЕМ

130 IF N=l THEN CHAIN "WAGES"

140 IF N=2 THEN CHAIN "TAX"

150 IF N=3 THEN CHAIN "ACCTS"

160 IF N=4 THEN CHAIN "EMPLYS"

170 END

В  этой  программе  нет  явного  возврата  для  повтора  выдачи  изображения  меню,  но   неявно предполагается,  что  каждый  модуль  возвращает  управление  в  начало  основной  программы.  В некоторых разновидностях оператора CHAIN допускается указание номера строки, показывающего, откуда надо начинать исполнение вызванной программы. Для некоторых ЭВМ  приведенный выше пример  надо  дополнить некоторыми деталями; например,  в  системе  PET  требуется, чтобы  при каждом вызове с диска новой программы командой CHAIN в ячейки 42 и  43 заносилось значение указателя на начало области переменных командой РОКЕ.

Файлы любого типа содержат определенные средства обнаружения ошибок, связанных с потерей или искажением данных. Это особенно важно при работе с более чувствительными к  повреждениям носителями — кассетами с магнитной лентой и гибкими магнитными дисками. Обычно к каждому запоминаемому   блоку   байтов   добавляется   несколько   лишних   битов,   позволяющих   системе обнаруживать  ошибки  при  чтении  блока.  К  несчастью,  ошибка  только  в  одном  блоке  может воспрепятствовать считыванию всего файла, а то и всего диска — по крайней мере, на имеющихся в Вашем распоряжении устройствах. Попробуйте в этом случае прочитать кассету или диск на другой 240

ЭВМ,  так  как  ее  устройства могут  иметь  другую  чувствительность; если  и  это  не  помогает,  а информация очень важна, то  у  поставщиков или  производителей ЭВМ могут иметься  средства, позволяющие спасти значительную часть

данных.

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии