====== Глава IX ====== |{{..author_files:009.msx|}}|{{..author_files:009.txt|}}|[[..009|]]| @@ -1,7 +1,6 @@ -c1E -ГЛАВА 9. ФАЙЛОВЫЕ СРЕДСТВА MSX-BASIC - - +\/d +ГЛАВА IX. ФАЙЛОВЫЕ СРЕДСТВА MSX-BASIC +\/d- Ф а й л (от англ. file - досье, картотека), набор данных,- 1) совокупность упорядоченных и взаимосвязанных записей, @@ -10,8 +9,6 @@ минающих устройствах (внешней памяти) и рассматриваемая в процессе пересылки и обработки как единое целое. Математический Энциклопедический Словарь - - В персональном компьютере "YAMAHA" предусмотрена работа с двумя версия- ми языка BASIC: MSX-BASIC и MSX-Disk-BASIC. Версия языка MSX-BASIC преду- сматривает работу только с накопителем на магнитной ленте, а в версии MSX- @@ -37,7 +34,7 @@ варианте при включении запускается MSX-Disk BASIC, а приоритетным устрой- ством внешней памяти является дисковод А:. Работая на компьютере без дисковода, Вы запускаете при включении MSX- -BASIC, а приориритетным устройством является кассетный магнитофон (CAS:), +BASIC, а приоритетным устройством является кассетный магнитофон (CAS:), имя которого может опускаться. З а м е ч а н и е. В СССР распространены две версии языка MSX-BASIC: α) версия 1.0 (на компьютерах серии MSX-1); @@ -52,8 +49,6 @@ │ 2.1 │ 1 │ └───────────────┴────────────────────┘ - - IX.1. Р а б о т а с ф а й л а м и на д и с к е т а х Под словом "д а н н ы е" мы будем подразумевать содержимое памяти ком- @@ -63,7 +58,6 @@ емых на внешних носителях информации - кассете магнитной ленты или гибком магнитном диске (д и с к е т е). - IX.1.1. Ф о р м а т и р о в а н и е д и с к е т ы Дискеты бывают следующих типов: @@ -92,8 +86,8 @@ └────────────────────────────────────────────────────────────────┘ Приведем некоторые характеристики дискеты MF2-DD : 1) емкость при записи: - a) всего - 730 Кбайт; - b) для файлов пользователя - 713 Кбайт; + a) всего - 730 Кбайтов; + b) для файлов пользователя - 713 Кбайтов; 2) плотность при записи - 8717 бит/дюйм; 3) среднее время доступа - 95 MS ; 4) максимальное количество файлов - 112. @@ -107,7 +101,7 @@ Для подготовки диска к работе с командами и функциями MSX-Disk BASIC необходимо осуществить специальную разметку его поверхности, называемую ф о р м а т и р о в а н и е м. Для этого дискета вставляется в карман дис- -ковода и выполняется команда +ковода, и выполняется команда ┌─────────────────────┐ │ CALL FORMAT │, └─────────────────────┘ @@ -122,7 +116,7 @@ пользователь обязан отреагировать вводом 1, если диск - двусторонний, или 2, если диск - односторонний. - Далее, по указанию + Далее по указанию Strike a key when ready █ нажмите любую клавишу. После этого начинается процесс форматирования, то есть размещение на диске управляющих меток. При этом ранее имевшаяся там @@ -143,7 +137,7 @@ Особую осторожность надо соблюдать при нанесении надписей на наклейке, прикрепленной к дискете,так как даже давление карандаша или шариковой руч- ки может оказаться достаточным,чтобы через защитный конверт повредить маг- -нитный слой дискеты. Во избежании порчи информации,записанной на дискетах, +нитный слой дискеты. Во избежание порчи информации,записанной на дискетах, последние следует хранить подальше от телевизоров, видеомониторов, звоня- щих телефонов и других источников магнитных полей; 2. Для защиты файлов, сохраненных на дискете, позаботьтесь о создании @@ -182,7 +176,7 @@ Кроме того, десятичной точкой имя можно разделить на две зоны: к о - р е н ь (до точки) и р а с ш и р е н и е (после точки). Расширение со- -стоит не более, чем из трех символов. Номер начальной позиции корня - 1,а +стоит не более чем из трех символов. Номер начальной позиции корня - 1, а расширения - 10. Если пользователь фиксирует имя без расширения с количеством символов, большим 8, то компьютер автоматически разбивает его на корень и расшире- @@ -190,9 +184,8 @@ Сообщение об ошибке "Bad file name" ("Н е д о п у с т и м о е и м я ф а й л а") появляется в том случае, когда имя файла содержит более в о с ь м и сим- -волов перед явно указанным расширением; если же расширение состоит более, +волов перед явно указанным расширением; если же расширение состоит более чем из т р е х символов, то интерпретатор игнорирует лишние символы. - П р и м е р ы. ┌──────────────┬────────────────────┐ ───────────── │ Имя, заданное│ Представление имени│ │ пользователем│ в компьютере │ @@ -203,7 +196,6 @@ │ВАЛ.процент │ ВАЛ .про │ │ ПРОТИВОГАЗ │ ПРОТИВОГ.АЗ │ └──────────────┴────────────────────┘ - Общепринято, что расширение имени файла должно обозначать его тип. Обычно применяются следующие стандартные расширения имен: ┌────────────┬───────────────────────────────────────────────────────┐ @@ -227,9 +219,8 @@ │ .TMP │ Временный файл │ │ .TXT │ Текстовый файл │ └────────────┴───────────────────────────────────────────────────────┘ - М а л е н ь к а я х и т р о с т ь. Оградить Ваш файл от посторонних -взглядов можно, дав ему секретное имя AAAAAAAA.AAA,например. Секрет здесь +взглядов можно, дав ему секретное имя, AAAAAAAA.AAA например.Секрет здесь в том, что в этом имени часть букв A из русского, а часть - из латинского алфавита, и об этом знает только хозяин файла. В большинстве случаев желательно, чтобы присвоенные файлам имена были @@ -251,16 +242,12 @@ Отметим, что *.* - родовое имя файлов с любыми именами. - IX.1.3. С п р а в о ч н а я и н ф о р м а ц и я о ф а й л а х - Старейшим из дошедших до нас каталогов признается список литературных произведений на шумерской гли- няной плитке, относящейся к 2000 г. до н.э. . - А.И.Михайлов - - + А.Михайлов Сейчас мы расскажем Вам о довольно простых средствах для получения спи- ска имен файлов, размещенных на дискете (FILES), размера ее свободной час- ти (DSKF) и некоторой другой справочной информации. @@ -281,11 +268,9 @@ Если параметр I указан и на диске имеется файл с этим именем,то данный факт подтверждается выводом единственного имени I (в противном случае Вы прочтете неприятное сообщение: "File not found"). - П р и м е р ы. FILES 100 FILES ───────────── FILES "Игры" LFILES - ┌───────────────┐ Функция │ DSKF(n) │ , └───────────────┘ @@ -300,7 +285,6 @@ скете, находящейся в дисководе A; если значение n = 2, то Вы получите информацию о свободном месте на ди- скете, находящейся в дисководе B. - П р и м е р ы. α) PRINT DSKF(0):PRINT DSKF(1):PRINT DSKF(2) ───────────── β) X=1:PRINT DSKF(X) γ) IF DSKF(0)>200 THEN 1000 @@ -311,7 +295,6 @@ │ OPEN "И м я ф а й л а" FOR INPUT AS#1:PRINT LOF(1):CLOSE #1 │ └──────────────────────────────────────────────────────────────────┘ - IX.1.4 О п е р а т о р ы NAME, COPY и KILL Изменение имени программного файла или файла данных производится по ко- @@ -331,19 +314,17 @@ При задании имени J разрешено использование символов "?". Но при реаль- ном формировании имени J на дискете каждый такой символ будет заменен на элемент из соответствующей позиции имени I. - П р и м е р ы. α) NAME "алфавит" AS "АЛФ" ───────────── β) name X$ as "X.1" γ) 200 NAME "PQR.XYZ" AS "?.?11" В последнем случае новое имя будет выглядеть так: - Р ▲ .Х11 │ 7 пробелов Для дублирования на дисках программных файлов и файлов данных применя- ется команда (оператор) ┌─────────────────────┐ - │ COPY i TO j │ + │ COPY i TO j │ , └─────────────────────┘ где: 1) COPY ("копировать"),ТО("в") - служебные слова; 2) i - строковое выражение, значение которого определяет имя исход- @@ -356,7 +337,6 @@ файла с именем j заменяется на содержимое файла с именем i и, естественно, "старое" содержимое файла с именем j пропадает! Если i или j - файлы данных, то они не должны быть открыты! - П р и м е р ы. α) COPY "AL" TO "LA" ───────────── β) COPY "X" TO "X.1" γ) 10 SAVE "U.1" @@ -385,12 +365,12 @@ нию (стиранию) подвергается лишь справочная информация о файле. Если I - имя файла данных, то при выполнении команды KILL он не должен быть открыт. - П р и м е р ы. α) KILL"Бочка":KILL"R.T" ───────────── β) X$="ЮюЮ":KILL X$ γ) 100 FOR K=1 TO 25:KILL"ЦЕХ."+MID$(STR$(K),2):NEXT + IX.1.5. О п е р а т о р ы LOAD, SAVE, RUN и MERGE ┌──────────────────┐ @@ -407,19 +387,17 @@ α) в кодах ASCII: 10 X=1 β) во внутреннем представлении (по кодам): - FF 09 80 0A 00 58 EF 12 00 00 00 . ── ───▲─── ───▲─── ── ▲ ── ─▲ ───▲─── Начало ▲ │ │ ▲ │ ▲ │ └ Конец программы ┘ Адрес следу- Номер └ X = 1 ┘ Конец программы ющей строки строки (10) строки - ┌───────────────────────────────────────────────────────────────────────┐ │ Если данная программа впоследствии будет погружаться в память для сли-│ │ яния с другими программными модулями, то ее необходимо записывать в │ │ коде ASCII. │ └───────────────────────────────────────────────────────────────────────┘ - Заметим что формат ASCII приводит к увеличению в несколько раз времени + Заметим,что формат ASCII приводит к увеличению в несколько раз времени записи программ из оперативной памяти на дискету, а также их чтения с дис- кеты в память. К тому же для их размещения на дискете требуется приблизи- тельно на 30% больше места, чем для соответствующих программ, написанных @@ -428,14 +406,12 @@ записи на него новой программы под тем же именем, старый файл пропадает и происходит изменение размера свободной части диска в соответствии с новы- ми размерами файла с именем I. - П р и м е р ы. α) SAVE"PROTOOL.SYS" ───────────── β) X$="Z80.ABC":SAVE X$:SAVE"PRIMER.BAS",A γ) 10 FOR M=1 TO 30:SAVE"палата"+MID$(STR$(М),2):NEXT Для считывания программ с дискеты в оперативную память используются команды (операторы) LOAD и RUN. - 1. По команде ┌───────────────┐ │ LOAD I[,R] │ , └───────────────┘ @@ -443,11 +419,10 @@ I - строковое выражение, значение которого определяет имя файла; R - необязательный параметр; прежде всего закрываются все файлы и оперативная память очищается от -программ и данных. Далее, программа, записанная на дискете в машинных ко- +программ и данных. Далее программа, записанная на дискете в машинных ко- дах или формате ASCII под именем I, загружается в оперативную память. При наличии параметра R после загрузки производится запуск программы на счет. - П р и м е р ы. α) LOAD"X.Y" ───────────── β) Z$=MID$(A$,5,3):LOAD Z$,R ┌──────────────────────────────────────────────────────────────┐ @@ -462,10 +437,9 @@ в оперативную память загружается и запускается на счет программа, записан- ная на диске под именем I в машинных кодах или в формате ASCII. При отсутствии параметра R перед загрузкой файла с именем I закрывают- -ся все открытые файлы и память очищается от программ и данных. +ся все открытые файлы, и память очищается от программ и данных. При наличии параметра R из памяти удаляются программы и значения пере- менных. Однако файлы данных н е з а к р ы в а ю т с я ! - П р и м е р [5]. ─────────────── 1 'Меню многомодульного файла "MMF" @@ -479,7 +453,7 @@ 15 RUN"прог.В",R 16 RUN"прог.С",R 17 RUN"прог.Д",R - Приведем вид отдельного модуля, например, модуля с именем "прог.А": + Приведем вид отдельного модуля, например модуля с именем "прог.А": 10 PRINT"Выполняется программа А" 20 RUN"ММF",R @@ -496,24 +470,22 @@ └────────────────────────────────────────────────────────────────┘ Далее производится слияние программы А, находящейся в памяти, с про- граммным файлом, записанным на диске в формате ASCII под именем I. - П р и м е р ы. α) MERGE "TTT" ───────────── β) L$="техника":MERGE L$ γ) 100 MERGE "LIST.3" Обратите внимание на тот факт,что программы, вызываемые командой MERGE, -имеют более высокий приоритет, по сравнению с программами, находящимися в +имеют более высокий приоритет по сравнению с программами, находящимися в памяти компьютера. Поэтому если в объединяемых программах имеются строки с одинаковыми номерами, то строки программы в памяти компьютера будут за- менены соответствующими строками "добавляемой" программы с именем I. Наиболее целесообразно использовать этот оператор при работе с библио- теками подпрограмм на магнитной ленте или на дискете. Покажем, как это де- лается. - П р и м е р. Предположим, что программа,находящаяся в памяти,занимает ──────────── строки с 10 по 1290. Для добавления подпрограммы, назван- ной при записи на дискету "ROUT1" и занимающей строки с 10 по 190,сначала Вы должны сохранить программу, находящуюся в памяти. - После этого, Вы вызываете подпрограмму "ROUT1", используя команды LOAD + После этого Вы вызываете подпрограмму "ROUT1", используя команды LOAD или CLOAD. Теперь используйте команду RENUM для перенумерации строк подпрограммы, начиная, например, со строки 10000. @@ -524,14 +496,13 @@ приведет к тому, что в конце текста основной программы будет добавлен текст подпрограммы с номерами строк, начинающимися с 10000. - IX.2. Ф а й л ы д а н н ы х п р я м о г о д о с т у п а + IX.2. Ф а й л ы д а н н ы х п р я м о г о д о с т у п а Я знаю, что положил это в надежное место, но теперь не могу вспомнить,в какое именно! Из диалога на приеме у врача - Как мы уже отмечали (см. главу V), файл данных п р я м о г о доступа представляет собой последовательность нумерованных групп значений, называ- емых з а п и с я м и. @@ -548,6 +519,9 @@ которому во внутреннем справочнике находится ее фактическое положение на дискете, что позволяет немедленно произвести чтение или запись. Таким об- разом осуществляется прямой доступ к записям, требующий примерно одного + + + и того же небольшого (зависящего от скорости вращения дискеты) времени для всех записей.┌──────────────────────────────┐ ┌──────────────────┐ │ ◀───▶ Запись с данными │ @@ -584,7 +558,6 @@ IX.2.1. К о н т р о л ь н ы е б у ф е р ы ф а й л о в - ┌───────────────┐ Оператор │ MAXFILES=A │ , └───────────────┘ @@ -632,7 +605,6 @@ 265 265 Ok Взгляните на схему расположения информации в FCBn : - Управляющая информация ────┐ Д а н н ы е ┌───┬───┬─▼─┬───┬───┬───┬───┐ │▧▧▧│▧▧▧│···│▧▧▧│███│···│███│ @@ -642,7 +614,6 @@ │ Байт, адрес которого возвращает функция VARPTR(#n) - К о н т р о л ь н ы й б у ф е р ф а й л а (FCB) ┌─────┬────────┬──────────────────────────────────────┐ │Номер│ И м я │ С о д е р ж и м о е │ @@ -654,8 +625,8 @@ │ │ │ 2 - OPEN FOR APPEND (для диска) │ │ │ │ 4 - файл прямого доступа (для диска) │ │ │ │ 4 - файл последовательного доступа, │ - │ │ │ открытый и для чтения, и для записи, │ - │ │ │ например, OPEN "COM:" AS#1 │ + │ │ │ открытый для чтения и для записи, │ + │ │ │ например OPEN "COM:" AS#1 │ │ │ │ 8 - OPEN FOR APPEND │ │ │ │ (для устройства MEM:) │ ├─────┼────────┼──────────────────────────────────────┤ @@ -694,7 +665,7 @@ │ С п е ц и ф и к а ц и я ф а й л а │ ┌─────┬────────────────────────────────────────────────┬──────────┐ │ │Номер│ С о д е р ж и м о е │Количество│ - │ │байта│ б а й т о в │ байтов │ + │ │байта│ б а й т а │ байтов │ │ ├─────┼────────────────────────────────────────────────┼──────────┤ └──▶│ +00 │ Н о м е р дисковода (0 - по умолчанию, 1 - A:)│ 1 │ │ +01 │ │ │ @@ -846,7 +817,6 @@ │ Заметим, что этот оператор будет выполнен только в том случае, │ │ если файл был предварительно открыт. │ └─────────────────────────────────────────────────────────────────┘ - П р и м е р 1. В качестве примера рассмотрим файл с прямым доступом,со- ───────────── держащий информацию о личной библиотеке. Каждая запись содержит следующую информацию: @@ -864,7 +834,6 @@ Отметим, что разрешается использовать несколько команд FIELD с разными форматами для одного и того же буфера n. Всегда действует то разбиение FCBn на поля, которое предложено последней выполненной командой FIELD. - П р и м е р 2. ───────────── 10 MAXFILES=3:OPEN"Student" AS#2 LEN=40 @@ -902,7 +871,6 @@ │ T │ Лучший результат │ 4 │ Вещ. число │ └──────────────┴────────────────────────┴──────────────────┴────────────┘ Итого: 64 - Длина и тип каждого поля указаны вместе с переменными, которые в Вашей программе будут хранить данные, извлеченные из записей. Совершенно необя- зательно использовать одни и те же переменные во всех программах, обращаю- @@ -946,7 +914,6 @@ байты заполняются пробелами. Таким образом, операторы LSET и RSET гаранти- руют, что длина значения переменной будет приведена в соответствие с дли- ной, указанной в операторе FIELD. - П р и м е р 1. 10 OPEN "EF" AS#1 LEN=9 ───────────── 20 FIELD #1,5 AS M$,14 AS L$ 30 INPUT R$:LSET M$=R$ @@ -959,7 +926,6 @@ НЕБОСВОД └───┴───┴───┴───┴───┴ Ok 5 байтов - П р и м е р 2. Приведем фрагмент программы, в котором формируется за- ───────────── пись файла, содержащего информацию о личной библиотеке. В буфер заносится информация о романе Л.Н.Толстого "Война и мир". Структу- @@ -975,10 +941,10 @@ 80 LSET DATE$="10.5.1988" Команды LSET и RSET можно использовать не только при работе с файлами. - П р и м е р 3. 10 L$=SPACE$(20):Z$="Волк" ───────────── 20 RSET L$=Z$:PRINT L$ + IX.2.5. Ф у н к ц и и MKI$(), MKS$(), MKD$(), CVI(), CVS(), CVD() Вам, конечно, известно, что буферные переменные являются строковыми. @@ -986,21 +952,21 @@ ной m байтов. Если требуется "упаковать" в γ числовое значение,то поль- зуются функциями: ┌────────────────────────────────────────────────────────────┐ - α) │ MKI$(L) │ + α) │ MKI$(L) , │ │ где: MKI("MaKe Integer"-"преобразовать целое значение") │ │ - служебное слово; │ │ L - арифметическое выражение целого типа; │ │ m=2 │; └────────────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────────────┐ - β) │ MKS$(L) │ + β) │ MKS$(L) , │ │ где: MKS("MaKe Single"-"преобразовать значение одинарной │ │ точности") - служебное слово; │ │ L - арифметическое выражение одинарной точности; │ │ m=4 │; └────────────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────────────┐ - γ) │ MKD$(L) │ + γ) │ MKD$(L) , │ │ где: MKD ("MaKe Double"-"преобразовать значение двойной │ │ точности") - служебное слово; │ │ L - арифметическое выражение двойной точности; │ @@ -1017,24 +983,19 @@ оперативной памяти. Именно поэтому с помощью оператора PRINT невозможно выдать на печать или экран дисплея результаты работы функций MKI$(), MKS$() и MKD$() ! - П р и м е р 1. ────────────── α) функция MKI$(17217) возвращает строку "AC". Рассмотрим, как это по- лучается: - 17217=&B0100001101000001=&H4341=&H43·256+&H41=67·256+65 └──────┘└──────┘ ▲ ▲ C A │ └─ Код символа "A" └──────── Код символа "C" - β) MKS$(4.14141) возвращает строку "AAAA" - П р и м е р 2. A$=MKI$(&HE276):PRINT HEX$(ASC(MID$(A$,1,1)));" "; ────────────── HEX$(ASC(MID$(A$,2,1))) 76 E2 Ok - П р и м е р 3. 10 MAXFILES=5:OPEN "LU" AS#4 ────────────── 20 FIELD #4, 2 AS A$, 4 AS B$, 8 AS E$ 30 INPUT X%:LSET A$=MKI$(X%) @@ -1050,31 +1011,30 @@ H A5 a4 H A5 a4 Ok - Функции MKI$(),MKS() и MKD() выполняют обратное преобразование по отно- шению к функциям CVI(), CVS() и CVD(), к рассмотрению которых мы сейчас приступаем. - Пусть в буфер с дискеты считана запись и в некотором ее поле,определен- + Пусть в буфер с дискеты считана запись,и в некотором ее поле,определен- ном по команде FIELD элементом m AS γ -"упаковано" числовое значение. "Распаковка" его или, выборка из γ этого +"упаковано" числовое значение. "Распаковка" его, или выборка из γ этого значения, реализуется одной из следующих функций: ┌────────────────────────────────────────────────────────────┐ - α) │ CVI(γ) │ + α) │ CVI(γ) , │ │где: CVI("ConVert to Integer"-"преобразовать к целому")- │ │ служебное слово; │ │ γ - имя буферной переменной; │ │ m=2 │; └────────────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────────────┐ - β) │ CVS(γ) │ + β) │ CVS(γ) , │ │где: CVS("ConVert to Single"-"преобразовать к значению оди-│ │ нарной точности") - служебное слово; │ │ γ - имя буферной переменной; │ │ m=4 │; └────────────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────────────┐ - γ) │ CVD(γ) │ + γ) │ CVD(γ) , │ │где: CVD("ConVert to Double"- "преобразовать к значению │ │ двойной точности") - служебное слово; │ │ γ - имя буферной переменной; │ @@ -1082,7 +1042,7 @@ └────────────────────────────────────────────────────────────┘ Эти функции преобразуют строки символов в числа. Аргумент состоит из 2, 4 или 8 байтов и преобразуется в целое число, либо число с одинарной или -двойной точностью, в зависимости от вида используемой функции (CVI, CVS +двойной точностью в зависимости от вида используемой функции (CVI, CVS или CVD). П р и м е р 4. @@ -1094,17 +1054,14 @@ 5759460 ,так как GWYF Ok Ok Посмотрите на схему... - "G" "W" "Y" "F" 0100 0111 0101 0111 0101 1001 0100 0110 ▲───▲──── 5 7 5 9 4 6 │ │ │ Порядок числа = &B1000111-&B1000000 = &B111 = 7 Знак числа - Сравните эти результаты с представлением чисел в памяти компьютера (см. -далее главу 10). - +далее главу X). П р и м е р 5. ────────────── 10 OPEN "SL" AS#1 LEN=8:FIELD #1,8 AS R$ @@ -1115,8 +1072,6 @@ C0 123 Ok - - IX.2.6. О п е р а т о р ы PUT и GET Для пересылки ("сброса") сформированной в оперативной памяти записи на @@ -1137,22 +1092,21 @@ новая или о б н о в л е н а старая запись Р файла В. При открытии файла значение Р равно 0. Т е к у щ и м значением Р счи- тается номер той записи, с которой работал последний выполненный оператор -PUT или GET. Далее, если в операторе PUT параметр Р не указан, то берется +PUT или GET. Далее если в операторе PUT параметр Р не указан, то берется его текущее значение, увеличенное на 1. Например, в операторе PUT #1,3 второе число (3) определяет номер записи в файле. Если этот номер будет -пропущен, то будет использовано число, на единицу большее,чем в последнем +пропущен, то будет использовано число на единицу большее чем в последнем выполненном операторе PUT или GET. Номер записи может находиться в диапазоне от 1 до 4294967295, в чем Вы можете убедиться самостоятельно. - П р и м е р 1. 10 REM формирование файла ────────────── 20 MAXFILES=2:OPEN"массив" AS#2 LEN=8:FIELD #2,8 AS M + 50 FOR I=1 TO 30 60 INPUT"Введите число";А:LSET M=MKD$(A):PUT #2 90 NEXT 100 CLOSE #2 - П р и м е р 2. 10 'Объявление FCB0, FCB1, FCB2 и FCB3 ────────────── 20 'Открытие файла "рыба" с буфером #2 30 MAXFILES=3:OPEN "Рыба" AS#2 LEN=13 @@ -1163,7 +1117,6 @@ 80 INPUT"X$-8";X$:INPUT"Y$-5";Y$ 90 LSET L$=X$:RSET M$=Y$:PUT #2,K 99 NEXT:END - Пусть открыт некоторый файл данных, связанный с буфером FCBn. Полезную информацию о файле можно извлечь с помощью функций LOF и LOC. ┌──────────────┐ @@ -1201,13 +1154,13 @@ файла #1 в буфер полей. Если в записи оператора параметр Р отсутствует, то берется текущее зна- чение этого параметра, увеличенное на единицу (как и в операторе PUT). - П р и м е р 3. 10 REM Считывание из файла "Массив" ────────────── 20 MAXFILES=2:OPEN"Массив" AS#2 LEN=8:FIELD 2,8 AS M 50 FOR I=30 TO 1 STEP-1 60 GET 2,I:PRINT CVD(M); 80 NEXT + П р и м е р 4. ────────────── 1 OPEN"числа" AS#1 LEN=10 @@ -1220,7 +1173,6 @@ 13 FOR I=1 TO 5:A(I)=CVI(B$(I)):NEXT I 18 P=1:FOR T=1 TO 5:P=P+A(T):NEXT T 19 PRINT P:CLOSE #1:END - П р и м е р 5. ────────────── 10 CLOSE:OPEN"числа" AS#1 LEN=25 @@ -1234,7 +1186,6 @@ 110 GET#1,1:U$="" 120 FOR T=1 TO 5:U$=U$+B$(T):NEXT T 150 PRINT"Сумма:";U$ - П р и м е р 6. ────────────── 10 CLOSE:OPEN"числа" AS#1 LEN=25 @@ -1253,6 +1204,9 @@ 150 U$=U$+STR$(CVS(B$(T)))+B$(T+1):NEXT 160 PRINT"Сумма:";U$ + + + Отметим ключевой момент при работе с файлами п р я м о г о доступа: отслеживание "невидимых" указателей. Их два: для дискеты и для буфера. Первый указатель содержит ссылку на текущую запись и задается номером @@ -1278,7 +1232,6 @@ │ присваиванием ей некоторого номера (оператором PUT) │ │ F. Файл F з а к р ы в а е т с я (оператором CLOSE) │ └────────────────────────────────────────────────────────────────────┘ - П р и м е р 7. Запись слова в файл прямого доступа. ────────────── 10 MAXFILES=2:OPEN "EASY" AS#2:FIELD #2,18 AS N$,110 AS D$ @@ -1302,7 +1255,6 @@ │ └────────────────────────────────────────────────────────────┘│ │ F. Файл F з а к р ы в а е т с я (оператором CLOSE) │ └────────────────────────────────────────────────────────────────────┘ - П р и м е р 8. Чтение слова из файла прямого доступа. ────────────── 10 MAXFILES=2:OPEN "EASY" AS#2:FIELD #2,18 AS N$,110 AS D$ @@ -1310,11 +1262,9 @@ run Психокомпьютерапия Ok - В заключении этого пункта приведем примеры, иллюстрирующие действие изученных Вами операторов и функций при работе с дисковыми файлами данных прямого доступа. - П р и м е р 9. ────────────── 5 CLS @@ -1326,8 +1276,7 @@ 65 NEXT:CLS 66 FOR I=1 TO N 70 GET #1,I:IF O$="5" OR O$="4" THEN PRINT G$,F$;O$ - 80 NEXT - 90 CLOSE #1 + 80 NEXT:CLOSE #1 П р и м е р 10. Дана таблица: ─────────────── @@ -1381,10 +1330,12 @@ 195 PRINT"Ф.И. успевающих" 200 FOR I=1 TO B:GET#3,I:PRINT F1$:NEXT I:END 'Вывод на экран + П р и м е р 11. ─────────────── 10 MAXFILES=3:OPEN"A3" AS#2 LEN=2:FIELD #2,2 AS K$ 20 POKE VARPTR(#2)+9,66:POKE VARPTR(#2)+10,65 'Вместо LSET K$="ba" + 30 PUT #2,2:CLOSE#2 40 OPEN"a3"AS#2 LEN=2:FIELD #2,2 AS K$:GET #2,2:CLOSE #2 run @@ -1443,7 +1394,6 @@ или только для записи, но не для одновременного выполнения этих операций. Для работы с файлами данных п о с л е д о в а т е л ь н о г о доступа в MSX-Disk BASIC предусмотрен ряд операторов и функций. - IX.3.1. О п е р а т о р ы MAXFILES= , OPEN и CLOSE Перемещение логических строк последовательных файлов из оперативной па- @@ -1476,6 +1426,10 @@ Учтите,что при использовании оператора MAXFILES= автоматически выполня- ется оператор CLEAR, но если Вы используете в программе оба оператора, то располагайте оператор MAXFILES= вслед за оператором CLEAR. + + + + Вам, конечно же, ясно, что перед использованием файла Вы должны объя- вить его о т к р ы т ы м . Открытие файла осуществляется оператором OPEN, в котором задается: @@ -1493,6 +1447,11 @@ ("присоединение") - служебные слова; В - строковое выражение, значение которого задает имя устройства и имя файла. + + + + + ┌──────────────────────────────────────────────────────────────────────┐ │ Сейчас мы познакомим Вас с именами у с т р о й с т в: │ │ α) устройство CRT: отвечает за вывод информации на т е к с т о - │ @@ -1538,7 +1497,6 @@ │ б у ф е р │──OUTPUT──▶ Д и с к е т а │ │ ф а й л а │──APPEND──▶ │ └───────────────────────────┘ └───────────────────────┘ - Оператор OPEN с параметром FOR OUTPUT создает новый дисковый файл с за- данным именем. Если файл с таким именем уже есть,то он автоматически уни- чтожается и создается новый файл с тем же именем. @@ -1549,6 +1507,9 @@ Модификация оператора с параметром FOR INPUT реализует поиск данных с конкретным именем, отсутствие которого означает ошибку. + + + П р и м е р ы: ───────────── α) OPEN"CAS:ADDRESS" FOR INPUT AS #1 @@ -1567,7 +1528,7 @@ Направление: APPEND (добавление к уже существующему файлу) Номер файла: 2 Можно открыть файл с последовательным доступом в режиме записи, исполь- -зуя один номер файла, и в режиме чтения, используя другой. Однако, каждо- +зуя один номер файла, и в режиме чтения, используя другой. Однако каждо- му номеру файла будет при этом соответствовать с в о й б у ф е р, никак не связанный с другими. Если же Вы используете только один буфер, то для изменения режима до- @@ -1598,16 +1559,15 @@ IX.3.2. О п е р а т о р ы PRINT# , PRINT#n,USING . Ф у н к ц и и LOF() и LOC() - Да,- повторял он себе,- если бы на борту "Пи- лигрима" я знал все, что должен знать настоя- щий моряк, сколько несчастий можно было бы избежать! - Жюль Верн. Дети капитана Гранта - + Ж.Верн. Дети капитана Гранта Для формирования строк файла с последовательным доступом используются операторы PRINT# и PRINT#USING. + Оператор PRINT# записывается в таком виде: ┌────────────────────────┐ │ {└─┘} │ @@ -1638,10 +1598,8 @@ ся буфер или закрывается файл. Для экономного размещения данных на диске и избежания ошибок при их считывании целесообразно список S в операторе PRINT# записывать в виде: - γ1;",";γ2;","; ...;",";γк{└─┘} { ; } - В этом случае значения в создаваемой строке располагаются в п л о т - н о м формате и отделяются друг от друга запятыми. Будем считать, что информация в одном операторе PRINT# составляет от- @@ -1649,17 +1607,14 @@ логической строки соответствует переменная из списка S. Так логическая строка, состоящая из трех полей - фасон одежды S$, цвет одежды C$, цена одежды P - будет выведена в файл оператором - PRINT #1,S$;",";C$;",";P ▲ ▲ ▲ │ │ │ Переменные, определяющие поля данной логической строки - Если значение какого-либо строкового выражения γi содержит символы "," и (или) ";", то в качестве разделителей можно использовать символ ";", за- даваемый строковой функцией CHR$(34): CHR$(34) γs CHR$(34) - П р и м е р 1 [7]. Запись данных в файл последовательного доступа. ───────────────── 10 OPEN "GAMES" FOR OUTPUT AS #1 @@ -1667,6 +1622,10 @@ 30 INPUT"Введите название игры";F$:PRINT #1,F$ 50 NEXT X 60 CLOSE #1 + + + + run Введите название игры? Футбол Введите название игры? Гольф @@ -1674,7 +1633,6 @@ Введите название игры? Хоккей Введите название игры? Регби Ok - Если файл с именем "GAMES" уже существовал, то данная программа сотрет его старое содержимое и будет писать туда заново. Оператор PRINT# , не оканчивающийся символом "," или ";" автоматически @@ -1725,6 +1683,7 @@ 50 PRINT #1,R;",";I$;K$;I$ 60 CLOSE #1 + Оператор PRINT#,USING записывается в таком виде: ┌─────────────────────────┐ │ PRINT #n,USING T,S │ , @@ -1748,12 +1707,11 @@ 40 FOR K=1 TO S:X=INT(RND(1)*3000)/99:PRINT #4,USING "###.##";X:NEXT K 50 CLOSE #4 - Однако, следует весьма осторожно употреблять префиксы, обозначающие де- + Однако следует весьма осторожно употреблять префиксы, обозначающие де- нежные единицы ("$$","**" и "**$"), так как они вызывают форматирование числовых величин как нечисловых. По этой причине числовые величины, снаб- женные в дисковом файле такими префиксами, не могут быть считаны оттуда в их исходном виде. - П р и м е р 8. ────────────── 10 OPEN "SAMPLE.DAT" FOR OUTPUT AS #1 @@ -1782,6 +1740,9 @@ информации, считанных в буфер или записанных на дискету. + + + IX.3.3. О п е р а т о р ы INPUT, LINE INPUT #n . Ф у н к ц и и INPUT$ и EOF @@ -1800,7 +1761,6 @@ Оператор LINEINPUT# , считывающий одиночное строковое значение, позво- ляет решить "проблему запятой". - П р и м е р 1. ────────────── 10 OPEN "TEST.DAT" FOR OUTPUT AS #1 @@ -1852,7 +1812,6 @@ Хоккей Регби Ok - П р и м е р 4. ────────────── 10 OPEN "SAMPLE.DAT" FOR OUTPUT AS #1 @@ -1862,7 +1821,6 @@ run Второе значение в файле: 567 Ok - П р и м е р 5. ────────────── 10 OPEN "TEST.DAT" FOR OUTPUT AS #1 @@ -1874,7 +1832,6 @@ Значение номер 1: Кремний 14 28.0855 Input past end in 50 Ok - При выполнении оператора PRINT# (строка 20) в файл записываются три различных значения, но поскольку в операторе они разделяются символами ";", в файл они будут заноситься без разделителей. Когда оператор INPUT# @@ -1889,7 +1846,6 @@ разделителей между отдельными значениями. Один из самых простых состоит в том, чтобы присвоить значение "," строковой переменной и записывать ее по- сле каждого значения в операторе PRINT# . - П р и м е р 6. ────────────── 10 OPEN "TEST.DAT" FOR OUTPUT AS #1 @@ -1906,7 +1862,6 @@ Отметим, что строковая величина в дисковом файле, могущая содержать за- пятую, должна быть записана в кавычках; оператор INPUT# обеспечивает устранение этих кавычек при считывании. - П р и м е р 7. ────────────── 10 OPEN "TEST.DAT" FOR OUTPUT AS #1 @@ -1916,7 +1871,6 @@ run Первое значение в файле: Манагуа, Никарагуа Ok - П р и м е р 8[7]. О б н о в л е н и е файла последовательного доступа. ───────────────── 10 OPEN "GAMES" FOR INPUT AS #1 'Открывается "старый" файл @@ -1929,7 +1883,6 @@ 80 CLOSE 1,2 'Оба файла закрываются 90 KILL"GAMES" 'Удаление исходного файла 100 NAME "GAMES2" AS "GAMES" 'Переименование "нового" файла - П р и м е р 9. ────────────── 10 CLEAR 1000:MAXFILES=5:DIM M(200) @@ -1962,6 +1915,8 @@ ┌─────────────────────┐ │ INPUT$(m[,[#]n]) │ , └─────────────────────┘ + + где: INPUT$ - служебное слово; m - арифметическое выражение, целая часть значения которого должна принадлежать отрезку [1,255]; @@ -1976,13 +1931,12 @@ │ Все символы, включая разделители, передаются в программу, за │ │ исключением специального символа с кодом ASCII &H1A , который │ │ воспринимается как признак конца файла и "прекращает выполне- │ - │ ние" функции │ + │ ние" функции. │ └─────────────────────────────────────────────────────────────────┘ Функция INPUT$ предоставляет возможность последовательно выбирать сим- волы из файла независимо от разделителей строк! Для полного уяснения семантики функции INPUT$ рекомендуется "прогнать" следующий пример при различных значениях параметров S и X. - П р и м е р 10[5]. ────────────────── 10 CLEAR 1000:MAXFILES=5:DIM M(200) @@ -1999,7 +1953,6 @@ 120 IF Z=0 THEN 140 130 PRINT INPUT$(Z,#4) 140 CLOSE #4 - Заметим, что "длину" файла не всегда можно определить заранее: предста- вьте себе файл адресов, который все время приходится открывать в режиме добавления данных (FOR APPEND). Функция EOF позволяет Вам решить эту проб- @@ -2015,13 +1968,13 @@ сравнивает код очередного символа с кодом &h1А и возвращает: -1 ("true"), если найден код конца файла, и 0 ("false") в противном случае. - П р и м е р 11. Продемонстрируем способ использования функции EOF(). ─────────────── 10 OPEN "TESTF" FOR INPUT AS #1 20 IF EOF(1) THEN 60 30 INPUT #1,A:PRINT A:GOTO 20 60 CLOSE #1 + Ниже приведены 3 схемы, определяющие последовательность операций, кото- рые должны быть выполнены при перемещениях строк файлов п о с л е д о в а- т е л ь н о г о д о с т у п а из оперативной памяти на дискету и в об- @@ -2036,7 +1989,6 @@ │ тически. │ │ D. Файл В закрывается. │ └───────────────────────────────────────────────────────────────────────┘ - П р и м е р 12 [7]. ─────────────────── 10 OPEN "DRESS" FOR OUTPUT AS #1 @@ -2053,7 +2005,6 @@ Отдельные сегменты программных файлов - это специфические файлы данных последовательного доступа. Поэтому программы или их фрагменты можно загру- жать в память как данные. Ограничимся здесь лишь двумя примерами. - П р и м е р 13. Выполнение этой программы приводит к считыванию и вы- ─────────────── воду на экран всех строк программы "Симпсон". 10 'Чтение программного файла @@ -2061,8 +2012,6 @@ 30 LINE INPUT #1,R$:PRINT R$ 50 IF NOT EOF(1) THEN 30 60 CLOSE #1 - - П р и м е р 14. Выполнение программы дает возможность "просмотреть" в ─────────────── той же самой программе "Симпсон" строки с номерами от 30 и до 70. @@ -2074,7 +2023,6 @@ 60 PRINT R$ 80 IF NOT EOF(1) THEN 30 90 CLOSE #1 - ┌───────────────────────────────────────────────────────────────────────┐ │ 2. Общая схема пополнения файла В строками с его к о н ц а: │ │ А. В оперативной памяти резервируется буфер (оператором MAXFILES=).│ @@ -2085,7 +2033,6 @@ │ тически. │ │ D. Файл В закрывается. │ └───────────────────────────────────────────────────────────────────────┘ - П р и м е р 15 [7]. Добавление в файл спортивной информации названия ──────────────────── двух новых видов спорта. 10 OPEN "GAMES" FOR APPEND AS#1 @@ -2099,7 +2046,6 @@ │ или LINEINPUT$, или INPUT$) │ │ D. Файл В закрывается │ └───────────────────────────────────────────────────────────────────────┘ - П р и м е р 16 [7]. ─────────────────── 10 OPEN "DRESS" FOR INPUT AS#2 @@ -2115,10 +2061,8 @@ Ok - IX.3.4. П р и м е р ы - 1. Гидрометцентр ведет статистику выпадения снега по регионам, для каж- дого из которых заведен файл последовательного доступа.Во всех файлах име- ется по три элемента данных: имя метеоролога, название региона, количест- @@ -2203,6 +2147,9 @@ α) создайте файл последовательного доступа и заполните его именами студентов, названиями академических курсов и оценками;при этом воспользуй- тесь следующими данными: + + + ┌──────────────┬────────────────────┬─────────┐ │ Имя студента │ Академический курс │ Отметка │ ├──────────────┼────────────────────┼─────────┤ @@ -2238,11 +2185,9 @@ 300 IF INPUT$(1)="Д" THEN END ELSE GOTO 220 - IX.3.5. В ы в о д ф а й л о в д а н н ы х на э к р а н и п р и н т е р - Текстовые экраны 0 и 1, графические экраны, а также принтер могут быть объявлены устройствами вывода файлов последовательного доступа. О т к р ы т и е таких файлов осуществляется оператором @@ -2280,11 +2225,9 @@ 1) 10 COLOR 1,11,7:SCREEN 2:OPEN "GRP:" FOR OUTPUT AS#1 30 PSET (69,80):PRINT #1,"Текст на графическом экране SCREEN 2" 50 GOTO 50 - 2) 10 COLOR 1,11,7:SCREEN 3:OPEN "GRP:" FOR OUTPUT AS#1 30 PSET (50,80):PRINT #1,"Текст на графическом экране SCREEN 3" 50 GOTO 50 - 3) Программа "777", записанная на диске в формате ASCII, выводится на графический экран: 10 COLOR 1,15,8:SCREEN 3:PSET(0,10),15:MAXFILES=2 @@ -2292,14 +2235,12 @@ 50 LINE INPUT #2,R$:PRINT #1,R$ 80 IF NOT EOF(2) THEN 50 90 CLOSE:GOTO 90 - 4) Файл данных последовательного доступа,записанный на дискете под име- нем "КАРП", выводится на принтер. 15 MAXFILES=2 18 OPEN "Карп" FOR OUTPUT AS#1:OPEN "LPT:" FOR OUTPUT AS#2 30 INPUT #1,M:PRINT #2,M; 35 IF NOT EOF(1) THEN 30 - П р и м е р 5 [76]. Простейший г р а ф и ч е с к и й редактор. ────────────────── При формировании изображения Вам могут понадобить- ся такие команды: @@ -2324,6 +2265,7 @@ 40 ' (подпрограмма) 60 PUT SPRITE 0,(16,P),1,H 70 PUT SPRITE 1,(22,P),1,T + 80 PUT SPRITE 2,(28,P),1,U 90 PUT SPRITE 3,(16,P+8),1,H1 100 PUT SPRITE 4,(22,P+8),1,T1 @@ -2495,10 +2437,12 @@ + + + IX.4. И с п о л ь з о в а н и е RAM - д и с к а (т о л ь к о д л я к о м п ь ю т е р о в MSX-2) - RAMdisk (псевдодиск) - логическое устройство, обеспечивающее хранение файлов в специально выделенной области оперативной памяти.Исполь- @@ -2506,7 +2450,6 @@ Англо-русский словарь по програм- мированию и информатике - Свободное пространство памяти, размер которого можно определить при по- мощи функций FRE(0) и FRE(""), автоматически распределяется интерпретато- ром MSX-BASIC. Когда программа слишком длинна или использует слишком мно- @@ -2593,17 +2536,15 @@ │ Помните, однако, что имя устройства МЕМ: обязано │ │ присутствовать всякий раз при упоминании имени файла! │ └───────────────────────────────────────────────────────┘ - Приведем несколько примеров записи операторов для работы с RAM-диском: MERGE"MEM:файл" OPEN "MEM:файл" FOR INPUT AS#1 SAVE"MEM:файл" OPEN "MEM:файл" FOR OUTPUT AS#6 LOAD"MEM:файл" OPEN "MEM:файл" FOR APPEND AS#15 RUN"MEM:файл" - П р и м е р. ─────────── CALL MEMINI - Ok + Ok 10 OPEN "MEM:GAMES" FOR OUTPUT AS#1 20 FOR X=1 TO 3 30 INPUT"Введите название игры";F$:PRINT #1,F$ @@ -2636,7 +2577,7 @@ └──────────────────────────────┘ возвращает позицию в файле, начиная с номера файла. Например, LOC вовраща- ет 0 сразу после того, как файл открыт для ввода и вывода (OPEN FOR INPUT/ -OUTPUT) и возвращает длину файла cразу после того, как файл открыт для до- +OUTPUT),и возвращает длину файла cразу после того, как файл открыт для до- бавления (OPEN FOR APPEND). ┌────────────────────────────────┐ Функция │ LOF(Н о м е р ф а й л а) │ @@ -2650,10 +2591,8 @@ логично соответствующим конструкциям,используемым в версии MSX-Disk BASIC. - IX.5. Ф а й л ы на м а г н и т н о й л е н т е - Вывод программных файлов и файлов данных из оперативной памяти на маг- нитную ленту и обратное считывание с ленты в память реализуется через устройство, называемое м а г н и т о ф о н о м. Для идентификации файлам @@ -2674,6 +2613,7 @@ ративной памяти на ленту. 6. CLOAD - команда чтения в оперативную память (или верификации) про- грамм, записанных на ленте во внутреннем представлении. + 7. BSAVE - команда записи во внутреннем представлении программных фай- лов или файлов данных из конкретного участка оперативной памяти на ленту. 8. BLOAD - команда считывания в определенную область оперативной памя- @@ -2691,6 +2631,7 @@ Приступим к краткому описанию синтаксиса и семантики упомянутых выше средств организации файлов на магнитной ленте и работы с ними. + IX.5.1. Р а б о т а с п р о г р а м м н ы м и ф а й л а м и В этом пункте описаны команды SAVE, LOAD, MERGE, RUN. @@ -2742,11 +2683,10 @@ └───────────────────────┘ Эта команда, если в ней указаны имя устройства и имя программы,загружа- ет и запускает на выполнение программу, сохраненную в формате ASCII. Она -похожа на команду LOAD (с параметром R), за тем исключением,что она загру- +похожа на команду LOAD (с параметром R) за тем исключением,что она загру- жает программы только в формате ASCII и закрывает все открытые файлы. В обоих случаях перед загрузкой программы автоматически выполняется ко- манда NEW. - П р и м е р. Команда RUN"CAS:PROG1" загружает и запускает программу ─────────── с именем "PROG1",сохраненную на магнитной ленте командой SAVE"CAS:PROG1" @@ -2769,7 +2709,7 @@ └───────────────┘ подгружает в память первую встреченную на ленте в формате ASCII программу. Обратите внимание на тот факт,что программы, вызываемые командой MERGE, -имеют более высокий приоритет, по сравнению с программами, находящимися в +имеют более высокий приоритет по сравнению с программами, находящимися в памяти компьютера. Поэтому если в объединяемых программах имеются строки с одинаковыми номерами, то строки программы в памяти компьютера будут за- менены соответствующими строками "добавляемой" программы. @@ -2795,7 +2735,6 @@ │ Команда CSAVE "сохраняет" программу во в н у т р е н н е м формате,│ │ т.е. в том виде, в каком она хранится в памяти компьютера. │ └───────────────────────────────────────────────────────────────────────┘ - П р и м е р ы: ───────────── α) команда CSAVE"PROG1" сохраняет файл, имя которого "PROG1", во внут- @@ -2813,7 +2752,7 @@ рости, на которой программа была сохранена. Таким образом, Вам не нужно повторно указывать скорость. Если имя программы не указано в операторе,то будет загружена первая же -программа, сохраненная во внутренем формате. +программа, сохраненная во внутреннем формате. Если Вы указываете имя программы,то следите за правильностью ввода име- ни (т.е.,например, если Вы использовали прописные буквы при написании име- ни, Вы должны ввести имя программы также прописными буквами). @@ -2859,7 +2798,6 @@ чало данных, будет автоматически рассматриваться как адрес выполнения при загрузке этих данных (эта часть информации полезна только в том случае,ес- ли сохраняются подпрограммы на машинном языке). - П р и м е р ы. 1) BSAVE "CAS:ГОСТ",&HF000,&HF0EE ───────────── 2) BSAVE "CAS:" A,B,C Команда BSAVE позволяет сохранить часть оперативной памяти на ленте @@ -2886,7 +2824,6 @@ в оперативную память загружается файл, записанный на ленте во внутреннем представлении под именем, равным значению выражения α.При наличии парамет- ра R прочитанная программа автоматически запускается на счет. - П р и м е р ы. 1) BLOAD "CAS:DD" ───────────── 2) BLOAD "CAS:LEN", &H1500 3) BLOAD "CAS:TEST", R @@ -2913,7 +2850,6 @@ Обратите внимание, что BLOAD может использоваться в программе, не вызы- вая выполнения команды NEW или возврата в командный режим. Этот оператор может использоваться также для загрузки частей программы на MSX-BASIC. - П р и м е р 1. Приведем программу, которая позволяет указать начальный ───────────── и конечный адреса загрузки двоичного файла. 1 INPUT"Имя файла";A$ @@ -2938,7 +2874,6 @@ 91 IF Y$="д" OR Y$="Д" THEN LPRINT"Адрес запуска:";HEX$(A3);" или";A3 З а м е ч а н и е. Команды BSAVE и BLOAD можно применять и для работы с произвольными дисковыми файлами (устройства A: и B:). - П р и м е р 2. Запись компьютерных игр с дискеты на магнитную ленту. ───────────── 1) Загрузите программу с дискеты в оперативную память командой @@ -2959,20 +2894,17 @@ 4. ...И "игрушка" запустится! - IX.5.2. Р а б о т а с ф а й л а м и д а н н ы х - Команда OPEN для устройства CAS: имеет следующий вид: ┌─────────────────────────────────┐ │ OPEN β FOR {INPUT } AS #n │ - │ {OUTPUT} │ , + │ {OUTPUT} │ . └─────────────────────────────────┘ Здесь β должно начинаться с символов "CAS:" и, кроме того, отсутствует возможность, предоставляемая параметром APPEND для "наращивания" файлов. Все остальное полностью аналогично работе с дисковыми файлами (устройства A:, B: и MEM:). - П р и м е р. Строки 10÷30 создают файл данных на магнитной ленте. Для ─────────── его считывания в память требуется запустить этот фрагмент со строки 50. @@ -2986,11 +2918,8 @@ 80 IF NOT EOF(1) THEN 70 90 END - - - 9.6. Д о п о л н е н и е. Три очень п о л е з н ы х программы - - + IX.6. Д о п о л н е н и е. +Три очень п о л е з н ы х программы: 1. Программа, осуществляющая посекторное копирование диска на кассету. 6 CLS:PRINT:PRINT"<<Посекторное копирование диска на кассету>>":PRINT: PRINT @@ -3074,3 +3003,4 @@ 15 KEYON:POKE&H80CA,58' 16 END + {{tag> }}